Greetings from University Town #214

Soooo.

Stuff I’ve done in the past two weeks.

  1. Moved. For the first time in my life; my parents have occupied the same house for longer than I’ve been alive, so I’d never moved before. That was my first time driving that long on the interstate, and I had a cat, a guitar, a ukulele, a younger brother, and a bunch of assorted stuff in the car with me. And people were being idiots on the road, changing their speed way more than was necessary, whipping around and doing stupid stuff. It was not a pleasant drive.
  2. Jacked up my foot. Sorry, feet. I wasn’t aware you could pull muscles in your feet??? But I think I did??? And I got a huge blister between my toes, and wow, yeah, no.
  3. Hauled loads of books, three fishtanks (two of them are small though), a heavy oak desk, a couch, a mattress, an armchair, most of my clothes, a working kitchen, and a whole bunch of other stuff into my apartment. My second-floor apartment. In a building with no elevator. I’m still missing a load of books.
  4. Signed a bunch of paperwork. Mom paid my tuition. I need to get off my butt and find the info I need to sign up for a parking pass for school.
  5. Discovered that I don’t have a dishwasher as I thought I did, but I do have a garbage disposal, which I thought I wouldn’t. This is a highly favorable tradeoff because of how much I cook.
  6. Cooked way more than usual because I do not own a microwave. This is turning out to be good for me, I think. I’m living mostly off of curry rice and stir fried whatever. I haven’t gotten tired of it yet. I did make sugar cookies and shared with my neighbors, though. Also a pease pie, although that’s a weird British thing done according to a recipe I made up inspired by a Terry Pratchett book, so I kept it to myself. It turned out saltier than I would have liked, but tasty all the same.
  7. Mostly re-set up my fishtanks. I still have a bucket of aquarium plants next to me.
  8. Worked on the YPN app. Did I mention that’s open source now??? You can contribute to it! Or just tell me how awful my code is! I know there’s crap in there I will very much hate in a year. Or a few months. Whatever.
  9. Read Lean In. I own both a GitHub account and bras, so it’s been heavily suggested to me for several years that I should read it. Despite the criticisms (and expecting them to be right), I read the book. It rather surprised me. I have a post under construction about it, but feminism is not one of my favorite topics to write about, and I find it hard to write about it in any sort of way I’m satisfied with.
  10. Discovered the cartoon Teen Titans Go! I watch easily more kids’ cartoons than any other kind of television. (British TV is up there.) It’s really funny and kind of brain dead, and that is all I ask of such things.
  11. The apartment smelled weird when I got here (I think they all do?), so I went all stereotypical middle class white girl on it with Bath and Body Works wall plugins and an assortment of scented candles. (I do like candles though.)
  12. Settled my cat in. He took the move pretty well; the biggest thing for him was the people who walk past our door, but he’s mostly gotten over that now. He still gives me the evil eye when it looks like I’m going to leave.
  13. Discovered the best Hy-Vee ever. It’s like a Whole Foods and a Schnuck’s in one building, but it’s a Hy-Vee. I bought some interesting food there to experiment. They had the Indian sauces I’d come for, but they also had legit, decent-quality ramen with no MSG, and some chicken apple sausages, and imitation crab meat (which means it’s mostly pollock, but it’s still tasty). The only things I left without that I wanted were lemongrass paste, which they were sold out of, and snack cakes, because they only sold one kind I didn’t like.
  14. Caught some kind of stupid virus that’s making me dizzy and faint and fuzzy-headed. My parents have caught it too, I think the stress weakened our immune systems. I can’t get work done in this state and it’s driving me mad.
  15. Despite that, watched a steady increase in the stability of my mental state. There was a lot of stress and anxiety floating around before the move, and we were all kind of feeding off each other. Let’s say–my tendency toward depression has a huge genetic component, and I’m glad Mom was there because even though she was pretty stressed out, she’s kind of always stressed out in one way or another and handles herself better than the rest of us. She knows when I’m having an anxiety attack, she knows what to say to make my dad stop being crazy and trying to move huge furniture by himself without even clearing a path first, she knows what will make my little brother feel better about Bekah moving away. Then she feels guilty for the fact that she can’t help us move stuff because of medical reasons, we all tell her that is stupid, she laughs and feels guilty anyway that she’s “not doing anything.”

Most of that was two weeks ago. We all survived.

The YPN app I’ve been working on is chugging along. Here, I’ll make a few screenshots to show you.

Screen Shot 2016-08-13 at 7.14.34 PM
Menu page
Screen Shot 2016-08-13 at 7.14.44 PM
Member discounts page
Screen Shot 2016-08-13 at 7.14.47 PM
Newsletter articles page
Screen Shot 2016-08-13 at 7.14.41 PM
Event calendar page
Screen Shot 2016-08-13 at 7.14.51 PM
About Us page

It looks kinda funny because it’s meant for a phone screen. It resizes just fine, I just forgot to resize the window for the screenshots.

Anyway, I’m the one who coded all this. Some other folks said they wanted to help over the summer, but they’ve forgotten, flaked out, or had Life intervene. (I know the feeling.)

Currently, my battle is with Kivy’s RecycleView: supposed to be a way to make scrolling lists of items using the MVC pattern. Obviously I need this for the discounts and newsletter pages. The problem is that RecycleView is a new and not well documented feature, and doesn’t actually even import properly yet, I assume unless you’re using the bleeding-edge dev version of Kivy. But that’s not for using–it’s too unstable for production use. So maybe I’ll have to use the deprecated (yes, deprecated even before the new one is out) ListView and ScrollView features. I know I’ve gotten those to work once before; I have old code to work from.

I really should merge back the mockups branch, now that I’m working on this. Note to self. I guess I still need to mock up the Search page, but I don’t even know if Kivy has features for that yet?

Also, I want to make it more obvious what page you’re on while you’re using the app. I think it’ll be a header in place of the search bar, in the normal page headers. That’ll be some goofy inheritance stuff to work with, though; I have the header as its own custom widget.

If you don’t know Kivy, the past three paragraphs may be incomprehensible. Sorry about that.

Anyway, the YPN people have no clue what I’ve been doing. I need to send them screenshots or something so they’re not afraid I’ve abandoned the project, too. Someone’s got to follow through on this thing.

I need a nap.

Advertisements

Resources for a project

Contents

  1. Command Line
  2. Version Control
    1. Installing
    2. Learning
  3. Python
    1. Installing
    2. Learning
  4. Kivy
    1. Installing
    2. Learning

Our GitHub repository

 

My mobile app development class is making a production app for an organization in a nearby city. We’re mostly pretty inexperienced though. I’ve done enough reading and tinkering to know roughly how this should go, but I’m kind of guessing too. I know what software we need, but I’m not very good at explaining why, so a lot of conversations have gone like this recently:

Me: We should use this thing.

Others: We’ve never heard of that thing. What does it do?

Me: It helps you keep track of the thing, and also these things.

Others: So it’s kind of like this other thing?

Me: Kind of, but also not.

Others: …

Me: It’s best practice in the industry.

Quiet guy who is probably more knowledgeable than I am but also too smart to stick his neck out and accumulate a bunch of work: *tries to explain*

Others: So it is like the thing?

Me: Yeah, sort of.

Quiet guy: *shrugs*

Others: Let’s use the thing.

Later:

Others: How do we use the thing?

Me: Uhhhhh…

Anyway, that’s what this post is for. My regular readers may find it useful for something, but I’ve probably covered a lot of this in previous posts and I’ve noticed that you folks like to binge-read my archives when you discover my blog (I’m like that too when I find blogs/comics/whatever).

 

Command Line

The one thing on this list you already have! The command line is a powerful development tool, especially under Unix-like systems. You’ll also find that git is easiest to use from the command line. Here’s a good, quick tutorial.

Learn Python the Hard Way’s command line crash course

 

Version control

We’re using git and GitHub. Git is version control software, which means that it can keep track of and solve conflicts between code changes made by (in our case) half a dozen people.

It has features like code branching, which lets you work on making new features in a separate copy of all the code without having to always change the main branch before your feature is stable, and when changes are made on a file, it points out what changes were made so you don’t have to look through the whole file to find them. You can also look back at old versions of the code, which is useful if stuff breaks or you want to know what the heck you were thinking.

This is going to sound confusing until we start using it.

Installing

Windows doesn’t come with git itself (the command line tool). Kivy’s site recommends Git for Windows, which has a GUI application for Git as well as a bunch of other features. You’re probably fine taking the default

The customer has cleared us to use GitHub publicly, so you all need to create GitHub accounts.

Make a GitHub account

Learning

You also need to know how to use GitHub. The best tutorial for learning I’ve found is on Codecademy. It’s free, but you’ll need a Codecademy account to save your progress. Then you can go through the tutorial. This will explain all the commands step-by-step, a lot better than I could in person, so please pester the Internet and not me about it because you’ll get better results.

Make a Codecademy account

Codecademy’s Git tutorial

Sometimes, what you need is a reference and not a tutorial, and CC’s step-by-step instructions are a real pain when you just wanted to know that one command you forgot. A good reference is here instead.

Git reference

Once you’re comfortable with the commands, clone the repository I made on GitHub, which is here:

https://github.com/RebekahAimee/ypn-app

 

Python

Installing

First, if you’re running Windows, you’re going to need to install Python. (Mac and Linux come with Python, so don’t worry about it if you’re running those.)

First, you need to download Python. We want 2.7.11 (as of this writing), not 3.whatever, in order to work with Kivy. You probably want the last link from this list.

Please pay attention while you’re installing that. There’s a feature in the installer you can select that adds Python to $PATH for you, and if you select it, you can save yourself the next set of instructions. If you’ve already installed, or can’t find the feature, here’s how to fix the owie that not selecting that feature leaves you.

On Windows, you need to modify the $PATH variable in order to get your command line to recognize Python. $PATH is an environment variable that tells your command line where to find your development tools, and by default, when you install Python, it isn’t changed (in case you have multiple Python versions on the same computer).

Here’s how to modify your $PATH variable; you need to add this chunk of code

C:\Python27\;C:\Python27\Scripts

to the front (don’t delete the rest). If you’re not so sure about doing that, Hitchhiker’s Guide to Python has a tutorial; it gives you a command you can paste into PowerShell. (I haven’t personally tried it, but I’ve had good experiences with that web site.)

Learning

If you don’t know Python, it’s really easy to pick up. Here are two tutorials:

Learn Python the Hard Way (a published book, online version is free)

Codecademy’s Python tutorial

 

Kivy

Kivy is a cross-platform, open-source Python framework that we can use to build mobile apps. In fact, it cuts our work in half because we don’t need to build a separate app for Android and iOS… and it’s better designed because the framework’s code is beautifully orthogonal to anything we create with it. You don’t need a special IDE and a long tutorial about what all those auto-generated files do in order to run Kivy. Heck, you could write Kivy in Notepad if you really wanted to. It’s also much better documented than the normal Android SDK, and nearly everyone likes Python better than Java.

Installing

For Windows, the magic commands here take care of everything. Keep in mind you’ve already installed Python.

Installing Kivy on Windows

If you’re running Mac or Linux, you’ll want to refer to their respective instructions. You can still use pip if you want, or you can download and install a tarball.

Installing Kivy main download page

Learning

Kivy has a much easier learning curve than the Android SDK. But you still need to learn how to use it. There’s an excellent textbook for $10-$20 from O’Reilly:

Creating Apps in Kivy (Amazon)

There’s great API documentation from the Kivy developers:

Getting Started

API Reference

There are also beginner apps that you can create, demonstrated on the Kivy site. I didn’t like them nearly as much as the book–they kind of ran me into a wall with trying to do other stuff based on the code. I found the book more useful, but I’ll link to the pong app anyway:

A First App

 

 

This post will get updated as we end up using more resources.

Not Tame

A snippet from a post draft I wrote last week. This might explain pretty well why I haven’t been posting as much as usual, and why my last post was a veiled rant about my school.

But then, what am I? I’m letting my willpower be spent on the bullshit that is this web design class, which I am literally only taking to make some bureaucrats somewhere happy. The HTML and CSS standards have changed a fair bit since I self-taught web design five years ago, but I don’t even read the textbook and the teacher doesn’t lecture about it. I only read the assignments and W3’s documentation, and the assignments call for some weird conventions and structures that I wouldn’t use, because they’ll look weird when the browser is resized or when it’s viewed on mobile. This class has the heaviest workload out of all my classes, too, and I find it literally depressing to work on. It’s a pointless load of stressful busywork that teaches me nothing and that I don’t care about. Maybe if I were a better programmer, I’d drop the class and do something useful with my energy. But… I need it to graduate. If I have this degree, it’s a bargaining chip against future bureaucrats.

You know what’s a better bargaining chip than an Associate’s degree? A Bachelor’s. I think it’s time to move on.

 

I can count the number of staff [0] I actually respect at my college on one hand. [1] I see only two of those staff on a regular basis. Both are ridiculously overworked. Their accomplishments are regularly minimized and the credit claimed by higher-ups. They have Master’s degrees and could be working half as much for twice the pay if they chose, but for some reason they like to sit in front of a bunch of noob coders and remind them that = is not the same as ==. Why? Got me.

Even they sometimes produce classes that end up not so great, though. Which is understandable, because they’re trying to juggle nine of them at a time. Both are getting sick more often this semester than they normally do. (It’s just now, as I write this, that I realize how much it bugs me.)

While I haven’t lost respect for all members of staff, I’ve lost respect for the school as a whole.

I have gone through multiple classes where the college has promised, “We’re going to teach this”–and had that promise not followed through upon. I’ve had to drop classes where the online teacher went MIA, or the textbook and online documentation were so nebulous and/or buggy that it was impossible for the teacher to teach [2]. This school has instituted new, never-before-run classes as required; they’ve tried to force a teacher on me who harassed me; and they are taking advantage of people I respect and admire.

Now I’m taking this web dev class, because it’s one of the few I still need for my degree. What’s it like? See snippet above, but for the tl;dr:

  1. There isn’t a test-out. I know how to do what they’re trying to teach.
  2. The textbook is awful and teaches bad practices. (A friend who worked for years as a freelance web dev wants it burned.) I don’t even read it. Nor does most of the class. It was $120 though.
  3. We used to have like fifteen people. Half of them dropped. [Edit: About ten of the original fifteen or so showed up today, which the teacher remarked upon as “everybody’s here, what a full class!” So I guess only a third actually dropped, and the other people just don’t show up half the time.]
  4. The (overworked) professor doesn’t lecture, she just assigns and grades work. She’ll help if you’re having problems… but the textbook is just as cryptic and incomprehensible to her as it is to you. [3]
  5. It runs at 8AM.

I’m so close to this degree. But you know what? I can’t stand another semester of this crap. And trying to catch up with this class? I’ve been trying to do that all semester, but it’s not working. [4]

So, I’m thinking that rather than finishing my Associate’s and then not finishing my Bachelor’s, maybe I’ll finish my Bachelor’s and not my Associate’s. I think a four-year university is more likely to be run with some sanity (as there’s more free-market competition) than a community college.

And I have two good candidates to fill that space. They’re in a little town and a small city, which I don’t like, but the rent is very reasonable; Northern Iowa University has an awesome CS department head and a required curriculum that teaches things I think are valuable; Aurora University is nearly as cheap as community college when you factor in their standard GPA scholarships, will take a TON of my credits as transfers, and is an hour and a half from Chicago. I’m thinking about going to both, actually, because I want the first guy to teach me Lisp and I want the piece of paper from the other place. They’re both pretty darn cheap as colleges go.

I’m planning on re-visiting them. I really should quit stalling on applying, but for the past weeks it’s been another giant crazy thing on my to-do list.

But that’s going to change soon. I’m dropping this web dev class (assuming I still can–cringe) and I’m dropping the capstone project that’s only useful for my degree. That’s half my classes, but waaaaay more than half my workload. It leaves me open to work on stuff that’s actually useful, like the production app we’re building in my mobile app dev class, which is for an organization in a nearby city. We don’t have much time to build it, and I want to make sure they get something good from us!

I resisted taking this route for quite a while. It feels like giving up, when I’m so close to being done with this degree. But changing my goals is something I do a lot. I know I do that a lot. I’m eighteen years old; I’m supposed to. So I’ve intentionally left things flexible for myself. I’m not stuck to one path, so when I run into crap like this, I can just walk around it. I’ll take my chances with the next bureaucracy.

I do have one goal that hasn’t changed since I decided what I was studying in college. I want to be one of the best developers. I know that most programmers are pretty mediocre, and the top 5% (or so–this figure varies depending on the cynicism of the person talking) do all the really good work, and I want to be one of those. This is the goal I’m dedicated to. The other stuff varies depending on which path I think is the most practical and efficient way to get there, which is a problem that probably verges on NP-completeness.

 

I am patient with that goal. I know it takes a long time to learn to code really well, and I’m willing to put in the time and effort. What I’m not is tame. I have a rather short limit at which I’ll tolerate doing pointless things to make bureaucrats happy. I have boundaries on how much I’ll let people waste my time, because it’s not an infinite resource, and my energy, which (as anyone who’s ever had depression knows) is precious.

This post is mostly an expression of the clarity I’ve achieved on an issue about which I’ve been fighting with myself for weeks. If I get confused about why I made this decision later on, it’s also documentation as to what I was thinking.

But for you, it’s a warning about community college.

If you want to study in a field that’s in demand, think about the people who currently have credentials in your field. How many will want to teach? Of those, how many will want to teach in a community college? Are there better things for them to be doing? Could they be teaching in a four-year university just as easily, where they can work with colleagues they admire and/or teach more specific/obscure things they really like?

In other words, is your community college going to have a really hard time hiring and keeping good teachers?

I have no clue why my favorite professor is a professor. He’s worked at famous companies, developed really neat stuff with other really smart people, been all over the world to talk with all kinds of customers, knows at least one human language that isn’t English, and now he’s here in my hometown, running a little farm and teaching classes and telling silly coding stories to a bunch of college students. He seems to really enjoy his job, but he’s also gotten sick like three times this semester and I think the stress is getting to him more than he’s showing.

Is this likely to happen often? No. Most devs probably don’t think of full-time teaching as some kind of fun “retirement.” Why would they, when they could just as easily settle in some suburb of their favorite city and hack open-source all day long?

Just be careful, fellow larvals. I’m not saying community college is always a bad deal; just that it isn’t always a good one, and there seems to be a reason that makes this more than an edge case. Also, explore nearby four-year universities–even the private ones–even if you’re on a budget. You may find that they’re just as reasonably priced.

 

On a lighter note, I think my knowledge of Kivy is about to become useful again. Our time is pretty darn short in this mobile app class, and using Kivy could cut our work in half (as we wouldn’t have to code for separate mobile platforms). Although, since I’m the one who suggested using it, I have to come up with some sort of demo for it. This might be irritating for reasons you’d understand in context, except I like Kivy and I wasn’t expecting the prof to even consider it.

Anyway, I’m off to start building that.

I’m going to leave you with this very long thread of programmer jokes. (Make sure not to miss the one at the top of page 9.)

Happy hacking!

 

 


 

[0] in my degree; props to the tech support, janitors, and that really patient front desk lady with the rockin’ curly hair. Also there are some great profs in other departments–I had an awesome math teacher, and one or two of the networking folks are pretty neat–but the programming department sucks and that’s where I spend 90% of my time and money.

[1] In decimal. Although if I did count in binary, it makes a gesture that, while lacking in finesse, expresses my current attitude toward my education.

[2] That latter one? The textbook was more like a reference manual than something to learn from, and there weren’t any projects in it, so we ended up using like a third of our time to scour the Internet for tutorials. I never completed any of the projects we were trying to make work, so eventually submitted three chunks of unfinished, broken code at the very end of the class. I got a B, presumably because the prof was reduced to grading on a curve and the other folks in the class didn’t do much better. If I hadn’t hated .NET before that class, there’s no way I wouldn’t have started to hate it afterward.

[3] I watched her stand over a classmate for twenty minutes, trying to figure out why the feature in the tutorial wasn’t working. I went over and looked at the code and it was perfect. We puzzled over it, flipped back through the book, and eventually found a little note that said the feature was unsupported in three different browsers. We opened it in Firefox and it was fine. That guy dropped, I think.

[4] I wish I were writing this on a hand-coded web site, for maximum irony, but I’m too lazy for that when WordPress works just fine for my purposes. I suppose it’s ironic enough that it’s not even worth hand-coding my blog.

Find me on GitHub!

Hey, look, it’s my 50th post! That’s great, because I’ve got something extra special for you tonight 😀

Since tinypapers is something that’s already been done by Evernote, I figure we should at least make the best use of the code I wrote that we can, and the best way I know to do that is to let you see it. So… find me on GitHub!

I haven’t decided on licensing and am not going to get to that tonight, but go ahead and poke around.

Click Robotocat here to go right to tinypapers’s repository. I did my versioning outside GitHub as I wasn’t sure if you could use GH for versioning without publishing the code, so my different versions are just in different folders because that’s how I kept them before. I know GitHub usually does it differently but I don’t have time tonight.

Robotocat

I didn’t make that image, by the way. It’s from GitHub’s Octodex, which is adorable and you should look at it.

Have fun!

Just a quickie update: I fixed that bug!

Yep, my ListView updates correctly now; it’s not an iteration behind any more. I don’t know if it was just that the computer maybe just needed the processing time to add the new entry to the list, but a little confirmation page with a button did the trick. (And I kind of like how it looks.)

It’s nice when things work the first time around, isn’t it?

Now to start storing data. I don’t have a server (*makes puppy dog eyes at Y Combinator*), so I think I’ll start with just JSON and move to redis when I have online space for it.

I don’t know anything about servers. I wonder if I could find a cofounder who does, or if this is going to be Yet Another Thing Rebekah’s Learning. (It probably will be either way; the question is how much it’s going to slow me down.)

But anyway, once I get the storage and the camera down, I’m going to try to launch my prototype by registering it on the Play store and putting it on my actual phone to try out!

It’s really tempting to say, “But it’ll just take a little bit longer to fill in the rest of the categories and put all the colors back, and maybe put in cropping and compression and backups and on and on…” — but the startup wisdom I read is that if an internet troll wouldn’t make fun of what you released, you released too late.

Tomorrow is my last day before I start work. I’d better make use of it.

Hey–wouldn’t it be cool if I not only made my 2-week timeline, but got this finished tomorrow (Sunday) thus getting it done in one week? That’d be so awesome. And then what if I got the other categories and the colors and the cropping and compression and backups all done before school starts? That’s two more weeks. Maybe I could even get that done in one, too.

Stretch goals! 😀

Design sense, belatedly triggering

There’s something pretty sucky about the way I’ve been structuring tinypapers. It’s getting too spaghettti-code-like. A line I wrote a few days ago to solve a problem made me feel uneasy (I think I mentioned this already somewhere?) and I couldn’t find a different approach. Then there are these more recent issues that have been making me twitchy. My design sense finally put two and two together… there’s some funky stuff going on I need to fix.

Anyway, I’m going to have to spend a day or two refactoring (and, where possible, minimizing) the “power” structure before it gets any more complicated. I just sat down with an actual pen and paper (magical tools) and it’s pretty obvious that something isn’t right. Hopefully the visual aid will help kick me into solving what’s wrong.

—–

(several hours later)

Kivy is really confusing about this, though. Because child structures and inheritance are mostly defined in KVlang rather than Python, ordinary design patterns don’t… quite work. I’m in a better position to figure this out now than before I wrote any code, of course.

Here’s the structure.

I’ve got one class (widget if you’re speaking KVlang) which controls which of the other classes is being displayed. I’m calling it a window manager. Of course, in each of the “child” classes (which don’t actually inherit anything from the window manager), there’s at least one button that’s supposed to trigger the window manager and make it display a different page.

You can’t just randomly call them from other classes. The page-switcher methods need an instance of the window manager to work. And I can’t just put the page-switcher methods in the child classes. The reason the window manager exists is that it’s the only part of the program that knows how to do that sort of thing.

So, there isn’t… really a hierarchy in the Python file. It’s mostly just there to define any logical back-end that the KVlang file might need.

The KVlang file has hierarchy all over the place. It basically declares everything.

Anyway, I’ve got this window manager. Underneath it I have the main page that lists categories of documents (“Business Cards”, etc) and each of those categories has (will have; I’m only working with one right now) its own instance of IndexPage to display the documents in that category. Each category also has an Add page for new entries.

It’s not that complicated! It shouldn’t be this complicated! It’s still complicated!

—–

(an hour later)

As you can tell, I’m still getting my head around Kivy.

Basically, whenever you need to do stuff that crosses over different classes, you have to make your method calls in Kivy. Kivy keeps basically all the class instances in memory. This gets kinda tricky if you lose track of things though.

I do need to clean up the Kivy inheritance… and then stop bashing my head against trying to make things happen in the Python file that just can’t happen in the Python file. Sigh.

Frustration and solving problems in the shower

I’m really wary of how dangerous it is to my productivity to write blog posts every day, but there’s a reason I don’t stop–which is because it only looks/feels dangerous. As leery as I am of sitting down and writing for two hours every day like this, I know that if I denied myself the time to swap out what I’m thinking, I’d have a lot fewer ideas for solutions.

I am just DYING for a cofounder with a real working knowledge of Python. I really like programming… but I don’t feel like I’ve ever gotten to a point where I really, truly understood it, and I’ve been absolutely unable to find a teacher, and the Internet isn’t as useful as one might think if you don’t know the right questions to ask, or the right way to phrase the questions you have.

I’ve run into this sort of problem before, and tried to fix it for other people (see the post “How I Learned Linux”). I guess it’s inevitable that I’ll write “How I Learned Python” and include all the stuff I’m bashing my head against now.

And it’s really stupid stuff. Like, I know full well that anyone who’d written an actual application (I don’t mean little scripts or toy programs) would be able to answer my questions in an instant if they were standing over my shoulder. [Edit: actually, they wouldn’t; my problem was more obscure than I thought.] Alas, there is no one standing over my shoulder; alas, I don’t know if I can describe my problems.

I think I might need to go trawling through some Python source of an existing program. The trick is finding an example that shows me what I need… argh.

This is one of the things I like least about living in Iowa. I live in a fairly mellow little city where the people are friendly and the Oriental food is excellent. But it’s not really a college town; we’re short on programmers. Oddly enough, I’m kind of missing a few guys I knew in high school who would have made really good cofounders. I wonder where they are now. Probably MIT, they were really smart programmers. (I had crushes on both at different points; it didn’t hurt that one was really physically attractive and the other was adorably nerdy.) Eli, Gordon, drop me a line if you’re reading this.

The problem I’m having right now–although it isn’t by any means the only one I’ve come across or the only one I’ll have, or even the only one I’m having now–is a dumb little OOP-type issue.

When this one button is pressed, I need other widgets to react to it. I have methods in those widgets’ classes that provide the reaction instructions, but one of their required parameters is an instance of the class they’re in.

I think the problem I’m facing is that the application is re-rendering the widgets that I need names for every time they’re constructed, and I don’t need it to do that. I think maybe there’s a way to do this with Kivy’s ObjectProperty stuff, but I haven’t gotten it to do that yet. I’m sure I’ve seen it before… but I don’t remember where or how. I think it was the Kivy book, but I might be wrong.

Actually, it’s not a dumb OOP issue. It’s a Kivy issue, and I can forgive myself for not knowing what I’m doing. In Python you’d be spelling things out manually and you’d have the objects available to pass. I think this is why I was having trouble finding Python source examples.

tfw you need to have a little more faith in yourself

And once again, having written out a blog post helped me solve the problem. That and taking a shower in the middle of writing this. It took me a lot longer to write this than it looks like; I spent a lot more time chasing thoughts in circles than typing.

To be honest, I was able to get the app to do what I wanted already, because of the lack of syntactic salt in Kivy. But the solution was really klugey and I didn’t like it [1], and I’ve always been a perfectionist since I was a little kid. The way I forced the app to do what I wanted blurred the lines between the Kivy and the Python code too much for my liking.

But I appreciate that Kivy gives the freedom to do stuff like that anyway; it really helps test things. I was actually going to give up on this for now and move on, but then I remembered the ObjectProperty thing in the shower.

This is still way more fulfilling than the noddy little programs from school. I’m kind of brain-tired and frustrated, but I sprang back from demoralized within an hour or so. School programs and (I’ll assume) work programs don’t have this factor that brings me back from demoralized. This is why I want to start a startup.

I guess the lesson here is that I need to be a little easier on myself. I mean, I’m an 18-year-old girl going into my second year of college. It’d probably be my last semester if I’d taken classes this summer, and even so I’ll probably graduate before I turn 19. I shouldn’t doubt my intelligence.

I probably shouldn’t be so hard on myself about my pace, either. I know from empirical evidence that when it comes to stuff like this, I’m a persistent little snot. (On multiple occasions, this was to the frustration of school officials.) I don’t mind changing my approach if something isn’t working, but if I want to do something, there’s not a lot that can stop me. I never let high school tame me. I tried to tame it instead, and when it stubbornly resisted, I took the advantages I could from it (about $2000 of free college, I think) and then left.

But, arrrrggggghhhhh. I want to go faster. There are features I want to implement. Grr.

I’ve been fighting this thing all afternoon. It’s time to take a break and maybe get some food… I don’t think I’ve eaten for five or six hours, so dinner and a few rounds of 2048 or something are in order.

—————————

[1] I have no idea where my sense of design in programs came from. Certainly not experience. I do know that I can’t remember anything I’ve ever written under Windows has triggered its appeal switch (probably because those programs were all for class and most were written in Visual Studio).