< prev 26 Feb 2015 to 28 Jan 2015 next >

Posts tagged 'final project'

  • The Matthew Effect

    For unto every one that hath shall be given, and he shall have abundance: but from him that hath not shall be taken even that which he hath. (Matthew 25:29)

    Yesterday I was looking up an old contact (who is a lot like me, but much further along, and with enough money to not have to care), and the memories came back in a rush. It's hard to sum up what anything is, what any experience is like to people who aren't you, but I can mention one thing, the thing that I needed to read.

    In this essay, he talks about how he writes. He has an easy writing style, and apparently people come to him and ask him how he writes so well. His response is that he deliberately writes what is easy and approachable (e.g. that which he knows a lot about), and in time the other things he wants to write get easier. He tackles those in their own time, once he has enough practice/warm up/etc. under his belt for those to be easy to write.

    Like others, I write darlings, and it's hard for me to kill my darlings. It's pleasing to me that when others proofread my work, they point out problem points in the same places I see them ("Oh, this is no good… I'll leave it in for now, though…" "Yeah, this is no good, you should change this/take it out/jump in a lake"). That's not to say that I always know how something needs to be changed, only that I recognize weak spots.

    Anyway, all this comes together into some thoughts about skill generation in general. Writing and graphic design and programming aren't so different in many ways, ways that could fill a book, which is not particularly surprising given my philosophy of "everything is everything". In keeping with the spirit of this entry, though, I'll point out that when you stumble in your craft, the best thing to do is keep working on something.

    Admittedly, you will need time to let your brain process. When you make a typo and overlook it for an hour straight, that's usually a sign that you need to do something else, like run on the treadmill for an hour, drink heavily, and pass out. (By morning, all your problems will be much shallower.) There is a route to maximal learning and maximal skill development, and it doesn't typically involve doing the same dumb thing until you're too tired to do anything right, and by the way, you've just spent an hour anti-training by practicing bad habits.

    It's been a long couple days, for no particularly good reason. I've actually made a lot of important progress—note here that I'm not saying a lot of progress, in an absolute sense—in getting my head screwed on straight and doing important work. I talked to a lot of people, in different contexts, and these low time, high value conversations are really great for figuring out what I want, and need.

    I started sketching out a book that I want to write in parallel with the book I need to write (because my battery died and I had a long train trip, oddly). I think this book will feed into the book I've been trying to write for the better part of three years, if I can make some headway on it. Meanwhile, I have my eyes on a half dozen pet projects that can help strengthen my portfolio. None of them are small enough to sink my teeth into at the moment, and none of them are dire, but like writing, the act of thinking of pet projects leads to thinking of more pet projects. I still need to figure out how to have a brainstorming repository, since every time I start something it all just gets more fragmented, but that should come in time.

    Ugh. In other news, I'm wrestling with some asset pipeline issues with heroku, and I'm about to tear my hair out. It's distracting me, and thus I'm not able to give enough attention to writing this. I know there's more I wanted to write, but I have a hard deadline tonight so I'll have to pick this up later, if I can find the track again.

  • Futility; Or: Old Habits

    Despite my half-vow last week to try to write more, it doesn't seem to have worked out that way. I only consider myself to have missed a single day (Friday), but that's enough.

    Thursday I left off having torn out my user auth and dropped in devise; I was getting frustrated with it by the late hour I left, whenever that was. I finally got it working today, and even though it's one of those things that's really powerful once it's up and running, there's so much going on with rails and devise metaprogramming that it was hard to pin down where the weird behaviors were coming from.

    Long story short: getting ajax sign-in working is highly non-trivial in devise, because it has a lot of expectations for how you'll be using it. There's no easy way to shove the user's account data down the pipe when logging in via ajax, and it's not clear from the documentation what's breaking.

    It turns out, though, that you can call respond_with with a :location argument, and rails does not respect that unless the :format is html. So when trying to debug what appears to be a straightforward statement, using the suggestions written by the devise authors, you're led to fixate on a couple small lines of code that actually have nothing to do with your problem.

    This is the double-edged sword of using a framework. Once you figure out enough of the gotchas to get things moving, you get a lot of reliability and power for free, but you're forced to either use things how they intend you to (in the given examples and configuration options) or hack up enough of the framework to bend it to your will.

    Oh, well; that's out of the way. I may have to generate a toy project using straight rails and vanilla devise authentication to see how it's supposed to work, because I'm not entirely happy with what I've got now. That seems to be the way of this latest phase of my final project: I've been adding things and discovering the limitations of a lot of the more robust options out there, and it's annoying.

    One of the things I added to my portfolio recently is a set of progress bars representing my knowledge of different tools. I was reluctant to do this, because any progress number seems quite arbitrary, but I'm willing to venture that one thing that represents knowledge level is when you begin to get frustrated with a tool.

    In fact, I'll put this forward: if we're all being honest, able to use something while using the documentation might be 10% knowledge; 20% would, then, be, able to complete simple tasks without reference to the documentation. 30% might be the point where you start saying "oh, this is neat!". At 40% you feel at ease; 50% would be the point where you have the documentation open, but you don't rely on it. By 60% you forget to even open the documentation, but at 70% you've got it open again because you're trying to do something that the tool just doesn't make easy. At 80% you're saying "oh, for god's sake"… at 90% you're patching the tool.

    It's rough, but it's something. With this framework, my resume is a bit of a lie, but it's close to accurate so I suppose I can leave it. And by this measure, I'm at 80% with some things I wrote as 70%, and 40% on some 50%s.

    I'm okay with this, in the end.

  • Searching in earnest

    After a weekend-long breather, I'm searching for work in earnest as of (let's be honest) 11 this morning. Twelve hours later, I left the office, feeling not significantly better than on arrival.

    I did a little work on my final project, but nothing of significance. I honestly thought of implementing authentication using Devise—it seems a lot more robust than my home-rolled solution—but I quickly recognized it for what it was, a way to put off taking the next step. Maybe I'll prioritize that down the line, once my app is more feature-rich and I have applied to a few more places. There are a lot of things I can see I could do better; using jQuery's modals in place of Backbone.Modal, for instance… but really, I just want this app to feel like a complete app. In time.

    The job search is… well, it feels like the last couple times I've gone looking for work. There are a lot of companies whose missions are practically opaque, and a couple dead-ends—companies that were bought out or maybe even went out of business since they were added to whatever list I'm looking at. But overall, the feeling I get is that there are a lot of companies that are funded to the level they are simply because it's easier for someone to throw a couple mil at a lot of long shots than to get in early on a few sure things. I do wonder about the status of venture capital: are there really that few interesting problems left, that all there is to fund are yet another X?

    And yes, if any future hiring manager bothers to read this blog, I understand that I'm pissing on the hand that might want to feed me, and I'm sure there are all sorts of interesting problems that I could find at any employer, but it at seems kind of … pointless? Everyone's doing the same things, at least on the surface, and their marketing copy doesn't do a good job of differentiating them from the competition. Hell, at least half the sites I've seen are using templates or libraries I've seen elsewhere, and it's just like… do you even believe in yourselves? I'm not sure anyone cares how many redbulls you drink per week at your office, and the fact that all your testimonials come from the same thirty day window, eight months ago, says a lot about how dynamic your business is.

    Sure, writing copy about yourself is hard—this is something that I'll have to face, on a personal level, in a couple hours or days—but isn't there something meaningful you can say? Or are you all, like the company that specializes in popups on outbound links, just plain evil? I wonder what their conversion rate is?

    The strangest things is that I actually believe in marketing, I just don't see a lot of firms that are targeting what seems to be meaningful, reasonable, or sustainable avenues in that area. It's much easier now, with cloud hosting and quick launch templates and tools, to generate a respectable (looking) online presence, and as such it's not as clear now when a company is two bros and a scam compared to the late 90s. And I'm sure that a lot of it has to do with a (relative) lack of creativity and a (somewhat) saturated marketplace; the next real game-changer will probably come out of left field, where no one else thought to look.

    Great, now I'm thinking of how to make a better marketing platform. I have some weird ideas, but nothing of any substance; they're all fleeting, like ghosts. Does it merit thinking about? At this point, with basically thirty days of expenses left, probably not. But the money is not going out of advertising any time soon, and I don't have the knee-jerk revulsion for it, conceptually, that others seem to.

    I don't mind finance or marketing or mobile app development, per se, but there's just so much crap.

    Back to sifting tomorrow.

  • Last minute

    Well, it's the day, and we have an hour until people should start showing up for project day… and I'm just sitting here, blogging.

    I spent the day thinking about what I want to say about my project, and how I'm going to present, and refining my resume. I finally have enough final project under my belt that it's not purely embarrassing, but I know that there's so much more work that I can do before I can consider my project "functional".

    On the plus side, my resume is much nicer now, and I am much more comfortable with SASS and @media queries, and it looks nice both on screen and in print. But there is never enough time to do what I want.

    Case in point: we have to set up for demo day now. Whelp.

  • When You're Styling

    When you're styling… the whole world, styles with you…

    Today was devoted to making my app not look nearly as terrible with a whole lot of bootstrap + sass. I guess I can put those on my resume; they're easy enough to use, and (especially) .scss is nice because it's compatible with .css.

    This is kind of a last-ditch: there are so many things I need to do, want to do, with my app, and time's up—tomorrow is presentation day. I'm kind of cobbling together a spiel about what I've actually spent the last month doing, which is to say, learning a framework from end to end (two, if you consider Marionette and Backbone to be separate entities), understanding something of asynchronous calls, and getting everything to play nice.

    It's hard to believe it's been a month; there's truly never enough time to learn what you want, and everything takes many more man-hours than you think. Am I faster than others? Slower? I can see what sorts of work others have been able to produce in three months (since we started at a/A… crap, time flies) and I don't think I'm that far removed from my peers. I can certainly field a good set of questions about what I've done, but I can't say that I'm markedly better or worse than anyone.

    What other metric can I use? I know I keep coming back to my successes relative to those around me; I might be able to find more hours in the week to work, but at the end of all of this, I can't say that anyone is far superlative to anyone else. I know what I'm learning, and every day there was someone who was able to accomplish more than I was, but in a class of (now) 23, that's bound to happen. If anything, the biggest problem I have, consistently, is having expectations that are much too high…

    Does that mean that I will learn more, faster, than others? Or does that mean that I will know more esoteric knowledge, but never have as much to show for it? I've never worked with a meaningful production system, but I suspect that there will be far fewer surprises there for me than for some people… but should I have been spending more time learning things with the most marginal utility, instead of learning the details of a few things?

    More questions than answers, and I suspect I'll never truly know. What I do know is that it hasn't stopped being interesting, and that I don't have any plans to slow down in the near future.

    So, back to the topic at hand: I bootstrapped the heck out of my app, and thereby got rid of a couple major styling issues, but there are a lot of things that still need to be done. I'll really need to do triage tomorrow, especially considering that I need to do things like prepare paper copies of my resume (which looks… acceptable, at least) and, perhaps, get a domain for my heroku app.

    (20 minutes later… done)

    Well, I'm a little closer to being ready to hire. *gulp*

  • The Data Model

    One of my hangups about continuing work resolved itself over the past couple days. I ended up having a couple of redundant checkins—"Fixes data model", "Data model finally fixed"—but I think I'm there now.

    Collections have models, and certain models, like Posts, have collections of their own (in this case, comments). When you pull the data from the server for a non-root page, the data needs somewhere to "hang" so as not to face sync problems. So, when I fetch a post, I shouldn't fetch the class it belongs to, I should instead examine the post's section_id property, and then put that in an existing class's post collection. … Got it?

    User -> Sections Collection -> Section Model -> Posts Collection -> Post Model

    So, on fetch of the last item in that chain, I need to go to the head of the chain and request that this data goes in the proper place in that chain.

    It took me a while, but I think I ironed out all the kinks. It took moving some logic from the models into the collections: if you ask a Post what section (class) it belongs to, it asks its collection, which in turn had that property set upon initialization. (I also needed to start initializing new collections with (null, options) instead of ({}, options) because it turns out {} is a model on its own, just one with no attributes… derp.)

    What does this mean? A whole bunch of crazy sync problems disappeared all at once, and I can finally see the light at the end of the tunnel. I have never truly had a Minimum Viable Project (MVP), and I'm getting to the point where that feels possible, and likely to happen soon.

  • You can, but you can't

    I don't deal with stress well. I like when I know what I'm doing and when things are working well, but struggle to overcome impasses.

    I don't know if there's a known thing called "coder's block", but I have, in the past, pooh-poohed writer's block. There's always something to write, in my head, and if I have problems I just read other people's work and get ideas there. However, I've never written a proper story, so I don't think I can properly state that I know what writer's block is like.

    On the other hand, I've been dealing with coder's block for the better part of a week.

    One reason is that I'm really not excited about the CRUD aspects of this project. I thought I'd be able to plow through much more easily than I have, and while I now am happy with the framework I've developed, the knotty puzzles are pretty much behind me (for now?).

    I spent some time cleaning up other things, and there is some value in those. I've learned quite a bit—from playing with Bootstrap to getting familiar with Sass, solidifying my knowledge of Javascript fundamentals, and so forth—and I've put some polish on things that don't really matter? I'm consolidating, but there's a line where you realize that your "polishing" bears a strong resemblance to "work avoidance".

    So, you can spend time doing other things, but you can't, because the work you really need to be doing isn't going anywhere. All this stuff would need to have happened in time, but I can't say that it needed to happen now.

    By contrast, though, I was spinning my wheels last week. I'm not so much anymore—I've gotten more actual useful work done on my project in two hours today than in any eight last week. Why is that, I wonder?

  • CSSris and spinning wheels

    One of our cohort has a job offer! Neat.

    I spent the past two (and a half) days getting up late and working later. I got nervous that I have absolutely nothing to show with regards to portfolio work and decided to do some mini-side projects that I thought would be good examples for my portfolio.

    The first of these was cleaning up Rails Lite, which I'm pretty happy with. When we were doing it in class, I was frustrated because of how fragmented the lessons were, but once I consolidated my code a little bit everything made perfect sense. When controller instances inherit from the ControllerBase class, they gain all the powers that it has, including auto-routing and rendering of default templates… it's actually quite clear, and quite neat how it all works. The inheritance tree is also much clearer, now, so I can see that parsing of input parameters and session management happens in quite the sensible manner. It's truly improved my understanding of how Rails works.

    One neat side-effect: When I told Tommy that I wanted to include Rails Lite in my portfolio because it made more sense to me, he and I talked for a bit about how rails is organized and it piqued my interest about the project codebase. So I started reading through the source on github, and ended up identifying a bug in the source that will prevent the current cohort from being able to complete the assignment on that class day. (Long story short: the way the project is designed, it will work with version 4.1.x but not version 4.2.) It was interesting to be able to dive into the code like that and know what I was looking for, and I feel more capable for it.

    Late Thursday, I started in on a project that I knew I wanted to do: modifying my Snake (game) code to instead implement Tetris. Besides being (I believe) the better game, it was something that I think could set me apart a bit on my portfolio, and it was fun to see JavaScript in a different light now that I'm more versed in the language. I've finished it up now, for the most part, after quite a bit of late-night logic-checking (pieces no longer get stuck in the sidewalls! Yay!) and I'm quite happy to say that I can be proud of my code in a way that I wasn't for Snake. It is my project and it works well and looks like what I envisioned when starting out, more or less.

    Curiously, I got the code 90% right straight out of the box when doing the initial implementation. I started it up without the rendering code, and after making a small fix (ensuring that the IIFE was starting correctly), I could step through the game logic and see little boolean pieces falling like they should. It was pretty empowering to have that be the case; writing (mostly) bug-free code with few syntactic errors is a powerful feeling.

    I added both projects to my resume, which has been cleaned up a bit, and I'm feeling (almost) ready to go full-in on the job hunt. I know I'm late to the game, but that's quite alright. This break has done me well, and if I can do that with as much determination as I've been able to muster the past two-three days, I should be fine.

  • Maintaining focus

    My biggest challenge of the moment is maintaining focus. Maybe if I had a single project to work on, it would be a bit different, but there are a lot of little time-consuming things that need to happen in a lot of areas to be ready for, say, next Friday's employer presentation day. I really need a decent portfolio to send out, or a bigger list of employers to contact, or a number of other things… I'm working constantly, but I'm not sure if I'm working on the best use of my time at any given moment. It's an old problem.

    Today I think I'm going to take a break by putting some polish on some of the smaller portfolio-like work. I hope that will be enough to get me motivated to hammer on the rest of what I have to do. It's daunting, though, and I know there's not even any free time on the weekends, not that I would necessarily want it. What would I do with the time? Everything I know anymore is here.

  • RACE CONDITIONS!

    Now that we don't have to blog, I can blog whenever I want—which also means blogging in the middle of the day when I've found some solution to a particularly knotty annoyance and am taking a break from whatever.

    I'll try to keep this quick, and I still don't have it how I want it.

    Sign-in is handled through a modal (using a library that is just okay…). When the app first starts, it tries fetching the currentUser model (asynchronously, of course). Meanwhile, it tries to route to whichever route was input, and if the user isn't signed in (which he won't be, because we're still waiting on a server response), it redirects to the sign-in window, which has an initializer that tells it to destroy itself when it receives a 'signIn' event over the Backbone.Radio eventsChannel.

    Meanwhile, the modal animates, and only adds its keybindings once the animation is finished. But the 'signIn' event is received in the middle of the animation, which means that the view is destroy()ed before it has attached its keybindings… which it does after the fact.

    Long story short, when a signed-in user refreshes the page, the sign-in modal installs listeners that get uninstalled before they're installed, and the next time the user hits "enter" the modal executes a "submit" event on empty text fields.

    I got around it by having an onShow callback that checks to see if we're signed in, and ONCE THAT CHECK HAPPENS, install the 'signIn' event listener. If that check fails (we've signed in during the 100ms that the animation has as default) then we uninstall ourselves.

    Gah. JavaScript, why you hurt so much?

< prev 26 Feb 2015 to 28 Jan 2015 next >