Yeah so I am visiting Philly and NYC next week. I haven't done one of these stupid ass trips in a while, because I hate flying commercially (60% hatred of the TSA, 40% hatred of being cramped and wondering if my legs hurt because of an embolism or just because they've been folded up for 6 hours). I didn't want to do this trip at all, actually...I had designs for just one final drive across the country to get out of this place, however I need to find an apartment in NYC. I have be told that I would like Spanish Harlem (did you know that Harlem is just a neighborhood of Manhattan, and is not one of the 5 boroughs? I was never great at geography). I have also been told by a New York native that I would like the Financial District, or Williamsburg.
So...anyway. I spent a lot of time booking things, and with careful considering I have planned every moment of every day. Here is my itinerary:
Fri Feb 28 - skiing in poconos
Sat Mar 1 - skiing in poconos
Sun Mar 2 - skiing in poconos / visiting parents?
Mon Mar 3 - visiting parents?
Tues Mar 4 - philly area
Wed Mar 5 - philly area ? / NYC ?
Thurs Mar 6 - philly area ? / NYC ?
Fri Mar 7 - NYC - look at apartments
Sat Mar 8 - NYC - look at apartments
Sun Mar 9 - fly back
I haven't booked any hotels yet.
Look in your phone, right now. If my number is there, then clearly we must be friends, and we should hang out. Drinking, Karaoke, Salsa...or try something new.
Sunday, February 23, 2014
Friday, February 21, 2014
[coding] I love you. I wish I didn't
The thought occurred to me that I rarely have anything nice to say about software. Especially software that other people write. However.
Git is a fucking amazing tool. It just works. It does its fucking job, and it doesnt fuck it up, and there are no obvious flaws in its design or construction. It makes a complex job simple and allows even a novice user (me) to do dangerous operations because it was designed to do things that make sense. Unlike everything else.
I honestly can't think of another single product that I can say that about. Vim comes close, but Vim has an archaic design that predates modern word processing conventions (and, in case you bat for the other team, emacs just fucking sucks). Using Vim is a little bit like playing first person shooter games before the WASD system became standard. Still, its a close second.
Windows notepad was pretty good, but it can't handle large files or text files created on the operating system named The Linux Operating System.
If we leave the world of software, I suppose the ATC is about as awesome as Git.
Git is a fucking amazing tool. It just works. It does its fucking job, and it doesnt fuck it up, and there are no obvious flaws in its design or construction. It makes a complex job simple and allows even a novice user (me) to do dangerous operations because it was designed to do things that make sense. Unlike everything else.
I honestly can't think of another single product that I can say that about. Vim comes close, but Vim has an archaic design that predates modern word processing conventions (and, in case you bat for the other team, emacs just fucking sucks). Using Vim is a little bit like playing first person shooter games before the WASD system became standard. Still, its a close second.
Windows notepad was pretty good, but it can't handle large files or text files created on the operating system named The Linux Operating System.
If we leave the world of software, I suppose the ATC is about as awesome as Git.
Thursday, February 20, 2014
Day 9 of 84
Time is flying by. It seems like just yesterday that I had the idea to put notecards of my daily accomplishments on the wall, however, my wall suddenly has a whole bunch of note cards. Nine fucking days...gone. I didn't the entire prototype in about 11 days, and its taken almost as long to work out some bugs and implement a non-google play auto update feature. In my defense...that feature turned out to be a lot of work. Its really funny how a feature can seem so simple at first; I thought it was about a days work.
Any time you think "hey all I have to do is just do this thing in the app, this thing in the webservice, learn how to implement my own hmac-based message authentication system, and then write some command line tools..." you're an idiot. Because apparently getting a decent signature is not simply a matter of smashing everything together through md5.
I did lose about two and a half days to drunken karaoke shenanigans. Worth it. I didn't want to spend so much time goofing off but I'm going to go insane otherwise. So anyway, here is the board:
The card at the bottom says "release candidate" in red because, if we don't find any more bugs, we are ready to ship to our first beta tester. I have been focusing on the code too much lately to really think about the bigger picture, but I'm pretty sure getting someone to use this software for real was a huge deal. I hope to start feeling proud of myself any second now.
Now, though, hopefully, I can take a break and handle some issues that have been backing up in my personal life. Like getting a plan ticket to come east in Feb. Have I mentioned that? Yeah the poconos trip is like next weekend or something, So I should get on that. I also need to try and get people to hang out in philly, and also arrange to view a bunch of apartments in new york while I'm east. I also have to get my bicycle tire fixed, and the Falco still isn't running, and I'm behind on the whole cycling-to-bellevue goal, and my apartment has become a filthy mess, and I need to start selling shit on craigslist--including a 14,000 BTU air condition and a giant tv--and ...shit I need get all of my tax stuff to the accountant, and I was supposed to start lifting and drinking smoothies again. And I need to do the dishes. So, maybe I can make a dent in all that tomorrow.
Wednesday, February 19, 2014
[coding] The Subtle Perils of Binary Search
As many of you know (especially if any of you worked with me at Amazon), I consider House to be a role model, especially with regards to professionalism and workplace ediquette. I'm not even kidding. Anyway, upon re-watching the series later, it became clear to me that House was supposed to be an unlikeable character. Who even saw that coming? Anyway. The only thing I really didn't like about him, I mean besides the time he chose not to hook up with Cameron, was the time one of the doctors on his team was suffering from a mysterious illness. They gave him about 20 different medications, and they knew one of them was fighting the infection, however the interactions between all of those drugs was so toxic that he would be dead before they could kill the infection.
As soon as those parameters were established, I waited with bated breath for House to say "well, take him off half of the medications...." But he didn't. Because House is a fictional character, and the team of writers that make up the shit he says don't know what Binary Search is.
Anyway.
My business partner for this skin care app thinks that people whose first names are longer than 20-ish character deserve to get facials like just everyone else. As a person who made the customer text box 310 pixels wide, I disagree. However it probably won't be long until people with long names start forming organizations and bitching about being discriminated against, so I decided to get a jump on the game and create an automatically resizing text view.
Searching stack overflow came up with complete yet buggy implementations that other people wrote. This post is about one of those bugs.
I normally hate code written by anyone who isn't me, however AutoResizeTextView looked like a lot of work so I just grabbed a sample implementation. The guy used a linear search, which seemed pretty dumb. Determining if something is "big enough" should be a classic case for binary search, right? His shitty code didn't actually work...in fact it caused all of the text to disappear completely, and I never found out why because I ripped that code out and stole some code by a guy who did use binary search. Now here is where it gets interesting.
The search space for a TextView that automagically shrinks text in order to fit it inside its width (without wrapping) is, obviously, the font size. For simplicity, we (I'm using 'we' here, because by the end I had to rewrite the entire binary search component) limited the search space to font sizes that are whole numbers. This is actually fine, since in Android the "font size" is the font pixel size, and so increasing the font by half a pixel is hard to notice.
So, obviously the bounds for the search are going to be the preferred size at the top (because we dont want to increase the size if it already fits) and a "minimum size" that prevents the text from getting too small to read. What do we use for the test function? Well, obviously we pre-render the text at the font size we are testing (the "test size"). If the text rendered at the test size is larger than the width of the TextView, then the test size is too large and we branch left (recurse into the smaller half in the binary search). If the text rendered at the test size is smaller than the width of the TextView, then the test size is too small and we branch right (recurse into the larger half). Now, in this paragraph, I've just given you all of the details you need to spot the bug. So if you can figure out what the bug was without reading on, you're smarter than me.
No seriously, stop reading and try it. You'll have to also solve the zebra puzzle though, because I did that. If you get both, though, you're smarter than me.
......
Yeah, so, the interesting thing here is the test. I said that if the size of the text with the test font was less than the width of the text view, then the font size is too small. However, that is a lie, because we are searching in discrete incrments. It can't be too small if its the best we can get. It is possible, obviously, for one font size to cause the text to be significantly shorter than the width of the TextView, and for the next size to cause the text to be longer (in fact the more text you have, the worse this problem will get, making use of any kind of measurement buffer a stupid choice). In this case, even though the smaller font size causes the text to be "too short" and is therefore "too small" --it is, technically, the exact size. Because there is no higher size. Binary search can be tough when your test function doesn't even realize you have the solution. I've used a similar technique in my dating life.
As soon as those parameters were established, I waited with bated breath for House to say "well, take him off half of the medications...." But he didn't. Because House is a fictional character, and the team of writers that make up the shit he says don't know what Binary Search is.
Anyway.
My business partner for this skin care app thinks that people whose first names are longer than 20-ish character deserve to get facials like just everyone else. As a person who made the customer text box 310 pixels wide, I disagree. However it probably won't be long until people with long names start forming organizations and bitching about being discriminated against, so I decided to get a jump on the game and create an automatically resizing text view.
Searching stack overflow came up with complete yet buggy implementations that other people wrote. This post is about one of those bugs.
I normally hate code written by anyone who isn't me, however AutoResizeTextView looked like a lot of work so I just grabbed a sample implementation. The guy used a linear search, which seemed pretty dumb. Determining if something is "big enough" should be a classic case for binary search, right? His shitty code didn't actually work...in fact it caused all of the text to disappear completely, and I never found out why because I ripped that code out and stole some code by a guy who did use binary search. Now here is where it gets interesting.
The search space for a TextView that automagically shrinks text in order to fit it inside its width (without wrapping) is, obviously, the font size. For simplicity, we (I'm using 'we' here, because by the end I had to rewrite the entire binary search component) limited the search space to font sizes that are whole numbers. This is actually fine, since in Android the "font size" is the font pixel size, and so increasing the font by half a pixel is hard to notice.
So, obviously the bounds for the search are going to be the preferred size at the top (because we dont want to increase the size if it already fits) and a "minimum size" that prevents the text from getting too small to read. What do we use for the test function? Well, obviously we pre-render the text at the font size we are testing (the "test size"). If the text rendered at the test size is larger than the width of the TextView, then the test size is too large and we branch left (recurse into the smaller half in the binary search). If the text rendered at the test size is smaller than the width of the TextView, then the test size is too small and we branch right (recurse into the larger half). Now, in this paragraph, I've just given you all of the details you need to spot the bug. So if you can figure out what the bug was without reading on, you're smarter than me.
No seriously, stop reading and try it. You'll have to also solve the zebra puzzle though, because I did that. If you get both, though, you're smarter than me.
......
Yeah, so, the interesting thing here is the test. I said that if the size of the text with the test font was less than the width of the text view, then the font size is too small. However, that is a lie, because we are searching in discrete incrments. It can't be too small if its the best we can get. It is possible, obviously, for one font size to cause the text to be significantly shorter than the width of the TextView, and for the next size to cause the text to be longer (in fact the more text you have, the worse this problem will get, making use of any kind of measurement buffer a stupid choice). In this case, even though the smaller font size causes the text to be "too short" and is therefore "too small" --it is, technically, the exact size. Because there is no higher size. Binary search can be tough when your test function doesn't even realize you have the solution. I've used a similar technique in my dating life.
Thursday, February 13, 2014
[coding] Day 2 of 84: And So It Begins
Yeah, so...I wrote an epic post for Day 1, but, being an enormous list of everything I wanted to accomplish during this time, it quickly became un-postable. So. A sort of recap for those of you that aren't me: I'm on a leave of absence from my day job. In total, I have 84 calendar days (business + weekends) to accomplish a ton of shit, both in my personal life (e.g. "get ripped") and for this start up.
I've been wondering how to keep track of my progress. Normally at a corporation, we are only supposed to track the burn down, or stuff remaining. And at a corporation we especially don't want to track our daily accomplishments, because sometimes those accomplishments are little more than some bullshit meetings and 20 pages of reddit.
However, now that I am working for myself, there is no risk in tracking what I actually do; if I waste 2 days doing nothing, no one is there to bitch about it.
More importantly, tracking progress, in this project, will be necessary for my own morale. I have a ridiculous amount of work ahead of me. Someone actually told me that something of this scope would normally be a million dollar project. And sure, if you hire ten idiots at $80,000 a year plus benefits, you would probably spend a million dollars. Hopefully, with the right dev (me) this can be a 3 month, one man (well, one man + 1 mediocre designer) job. I wouldn't mind getting paid a million dollars to do it though.... Anyway.
So the point of all that was I have a shit ton of work to do. And work-life balance is still a problem, because I don't want to continue being a fatass the whole time. So. How to I avoid getting burned out? Tracking what's left will be just like looking ahead to the peak of the mountain you're trying to climb: you can't really tell if you've made much progress each day because it is still an enormous distance away. Instead, when you start to feel burned out, you need to look behind at what you've accomplished and pat yourself on the back and maybe buy yourself some celebratory ice cream.
Now, how to track progress? I have a wall of UI screens I've made in my living room. But sometimes extremely important tasks don't have much visibility in the way of UI. So instead I thought I would start writing down each day's accomplishments on a note card, and posting in on my bedroom wall. A rather bold move, yes, but I'm not planning on getting laid the rest of the time I'm here anyway, so lets see if it pays off. Really, all of the sort of self imposed nerd restrictions on my life are coming off until I move.
Here is the wall:
Wait. Hold on. Why the fuck isn't blogger integrated with google drive? Whatever.
Again, here is the wall:
Lets hope that gets filled up with lots of cards...especially cards that don't just say "watched too much TV."
Seriously though, blogger is a google service, and its trying to get me to put my damn photos in some picassa web service bullshit. Drive is a google service--drive seems like kind of a big deal to them...you know, part of the whole competing with office thing. They are certainly pushing drive in my face when it comes to downloading files from gmail---ok. So. I think what's going on here is that now that I am in full raging development mode, I am going to be super critical of every piece of technology I come in contact with. I spend all day trying to implement the optimal design, and then the run into shit that is clearly not optimal, written by people who should know better. And I can't help pointing it out.
Like, for example, fucking Jetty Server. The punk ass bitches who designed it had to go and get all confused by the word "method" in the HTTP spec, and they make you create a new java method for each of the 3 HTTP methods. Wait, aren't their 4 HTTP methods? 5? Oh that's right: the HTTP spec doesn't limit you to GET/PUT/DELETE/POST. You can use whatever methods you want. Unless you are using jetty. Then you only get those four. And you are supposed to implement a separate fucking java method for each one. If you don't, you just get this mysterious error about not supporting that shit. And even though all of these stupid ass ignorant sheep fucking enterprise java devs normally have the most awkward hardons for xml bullshit, this is apparently the one thing that doesn't get hidden in some unreadable xml tag. It gets resolved by having the server do [run-time] reflection on your class. I haven't looked at the code or anything; I just know. How do I know? I'll get to that. So. If your servlet class has the stupid ass "doPost()" method, then, well, your servlet class supports POST request. If your servlet class doesn't have the method, it doesnt support the post method. So, what is the first thing any mildly intelligent dev will do in this situation? Obviously that would be to create an abstract base servlet (called AbstractSlightlyLessRetardedServlet, or if you prefer shorthand, ServletX) that overrides doPost() and redirects it to doGet(), so that in the rest of the servlets you only have to override one method in order to support 4 of the infinite possibilites of HTTP method names that could exist (4 is better than 1, after all). Well, guess fucking what. The dumbasses that wrote jetty wrote their reflection shit wrong. If doPost() is implemented on a parent class, jetty doesn't notice. It acts like the method isn't there, and doesnt allow you to handle POST request. In fact, this flaw is actually how I know jetty is wiring this shit via reflection; if it was via gear in the base Servlet class, then obviously my override in ServletX would have intercepted the call, like I expected it to, because that's how inheritance works. And even if we pretend for a second that HTTP cannot possibly allow HTTP Methods other than get/put/delete/post--why the hell wouldn't we still have a single method, called, idk..handleRequest(), and let the HTTP method just be a member of the request object that gets passed into it? This could be worse than I'm making it out to be...I'm pretty sure Servlet is a standard Java EE object, which means...well lets not think about that.
So....
I've been wondering how to keep track of my progress. Normally at a corporation, we are only supposed to track the burn down, or stuff remaining. And at a corporation we especially don't want to track our daily accomplishments, because sometimes those accomplishments are little more than some bullshit meetings and 20 pages of reddit.
However, now that I am working for myself, there is no risk in tracking what I actually do; if I waste 2 days doing nothing, no one is there to bitch about it.
More importantly, tracking progress, in this project, will be necessary for my own morale. I have a ridiculous amount of work ahead of me. Someone actually told me that something of this scope would normally be a million dollar project. And sure, if you hire ten idiots at $80,000 a year plus benefits, you would probably spend a million dollars. Hopefully, with the right dev (me) this can be a 3 month, one man (well, one man + 1 mediocre designer) job. I wouldn't mind getting paid a million dollars to do it though.... Anyway.
So the point of all that was I have a shit ton of work to do. And work-life balance is still a problem, because I don't want to continue being a fatass the whole time. So. How to I avoid getting burned out? Tracking what's left will be just like looking ahead to the peak of the mountain you're trying to climb: you can't really tell if you've made much progress each day because it is still an enormous distance away. Instead, when you start to feel burned out, you need to look behind at what you've accomplished and pat yourself on the back and maybe buy yourself some celebratory ice cream.
Now, how to track progress? I have a wall of UI screens I've made in my living room. But sometimes extremely important tasks don't have much visibility in the way of UI. So instead I thought I would start writing down each day's accomplishments on a note card, and posting in on my bedroom wall. A rather bold move, yes, but I'm not planning on getting laid the rest of the time I'm here anyway, so lets see if it pays off. Really, all of the sort of self imposed nerd restrictions on my life are coming off until I move.
Here is the wall:
Wait. Hold on. Why the fuck isn't blogger integrated with google drive? Whatever.
Again, here is the wall:
Lets hope that gets filled up with lots of cards...especially cards that don't just say "watched too much TV."
Seriously though, blogger is a google service, and its trying to get me to put my damn photos in some picassa web service bullshit. Drive is a google service--drive seems like kind of a big deal to them...you know, part of the whole competing with office thing. They are certainly pushing drive in my face when it comes to downloading files from gmail---ok. So. I think what's going on here is that now that I am in full raging development mode, I am going to be super critical of every piece of technology I come in contact with. I spend all day trying to implement the optimal design, and then the run into shit that is clearly not optimal, written by people who should know better. And I can't help pointing it out.
Like, for example, fucking Jetty Server. The punk ass bitches who designed it had to go and get all confused by the word "method" in the HTTP spec, and they make you create a new java method for each of the 3 HTTP methods. Wait, aren't their 4 HTTP methods? 5? Oh that's right: the HTTP spec doesn't limit you to GET/PUT/DELETE/POST. You can use whatever methods you want. Unless you are using jetty. Then you only get those four. And you are supposed to implement a separate fucking java method for each one. If you don't, you just get this mysterious error about not supporting that shit. And even though all of these stupid ass ignorant sheep fucking enterprise java devs normally have the most awkward hardons for xml bullshit, this is apparently the one thing that doesn't get hidden in some unreadable xml tag. It gets resolved by having the server do [run-time] reflection on your class. I haven't looked at the code or anything; I just know. How do I know? I'll get to that. So. If your servlet class has the stupid ass "doPost()" method, then, well, your servlet class supports POST request. If your servlet class doesn't have the method, it doesnt support the post method. So, what is the first thing any mildly intelligent dev will do in this situation? Obviously that would be to create an abstract base servlet (called AbstractSlightlyLessRetardedServlet, or if you prefer shorthand, ServletX) that overrides doPost() and redirects it to doGet(), so that in the rest of the servlets you only have to override one method in order to support 4 of the infinite possibilites of HTTP method names that could exist (4 is better than 1, after all). Well, guess fucking what. The dumbasses that wrote jetty wrote their reflection shit wrong. If doPost() is implemented on a parent class, jetty doesn't notice. It acts like the method isn't there, and doesnt allow you to handle POST request. In fact, this flaw is actually how I know jetty is wiring this shit via reflection; if it was via gear in the base Servlet class, then obviously my override in ServletX would have intercepted the call, like I expected it to, because that's how inheritance works. And even if we pretend for a second that HTTP cannot possibly allow HTTP Methods other than get/put/delete/post--why the hell wouldn't we still have a single method, called, idk..handleRequest(), and let the HTTP method just be a member of the request object that gets passed into it? This could be worse than I'm making it out to be...I'm pretty sure Servlet is a standard Java EE object, which means...well lets not think about that.
So....
Saturday, February 8, 2014
[coding] Android SDK Devs Are Fucking Morons
I always thought that my difficulties with ListView stemmed from a lack of understanding. However I just learned that it was actually due to poor design. Deliberate poor design. Not just any kind of deliberate poor design, but the kind of condescending, shortsighted, self-righteousness nonsense that gets shat out when platform devs erroneously think they are smarter than their customers.
You can't set a ListView height to wrap content. Even worse, right around 46:25 they basically tell you that if you need a List View that behaves outside of the silly, narrow-ass assumptions these devs made...dont use ListView.
"Should we go through the millions of items and measure them?"
YES YOU FUCKER.
Some of us need a stupid fucking list view with a persistent footer that expands until it fills up all the room in its parent. Doing so shouldn't be intractable; it should have been in fucking version fucking 1. FUCK. Eighteen API versions and they still haven't fixed that. I can't believe I'm dedicating three months of my life to build an app on this platform. I'm not sure I would ever even want to work for google any more. It would probably end up a bit too much like my experience at Amazon after I go up to every fucking dev there and explain why they're an idiot. People tend to give you lot of negative "peer feedback" when you do that.
So, now, my task "tweak the setting page" just grew into "re-write the android ListView object." I don't have time for that shit right now. I'm going to have to tell my business partner that version 1 is shipping with weird looking settings page. FUCK.
I see my future: lots of custom implementations of things I shouldn't have to write custom implementations of.
I guess we've at least made progress here; previously when I had problems with ListView I would just hack (or abandon) the specific use case I was working on. Now I know that ListView is inadequate, and I know I'll have to write my own, and I'll at least stop doubting myself. I think I am going to name is LessRetardedListView. There are probably already a bunch of implementations that already exist, but I would bet that finding and learning them would take about as long as writing a better one, and half of them probably don't even allow you to re-use the existing ListAdapter objects.
[Edit]
Actually there might be an easy fix. If we copy the entire implementation of ListView, then we might only have to make once change: go into the code that measures for WRAP_CONTENT, and change it to measure until it reaches the parent height instead of always measuring the first 3 views.
You can't set a ListView height to wrap content. Even worse, right around 46:25 they basically tell you that if you need a List View that behaves outside of the silly, narrow-ass assumptions these devs made...dont use ListView.
"Should we go through the millions of items and measure them?"
YES YOU FUCKER.
Some of us need a stupid fucking list view with a persistent footer that expands until it fills up all the room in its parent. Doing so shouldn't be intractable; it should have been in fucking version fucking 1. FUCK. Eighteen API versions and they still haven't fixed that. I can't believe I'm dedicating three months of my life to build an app on this platform. I'm not sure I would ever even want to work for google any more. It would probably end up a bit too much like my experience at Amazon after I go up to every fucking dev there and explain why they're an idiot. People tend to give you lot of negative "peer feedback" when you do that.
So, now, my task "tweak the setting page" just grew into "re-write the android ListView object." I don't have time for that shit right now. I'm going to have to tell my business partner that version 1 is shipping with weird looking settings page. FUCK.
I see my future: lots of custom implementations of things I shouldn't have to write custom implementations of.
I guess we've at least made progress here; previously when I had problems with ListView I would just hack (or abandon) the specific use case I was working on. Now I know that ListView is inadequate, and I know I'll have to write my own, and I'll at least stop doubting myself. I think I am going to name is LessRetardedListView. There are probably already a bunch of implementations that already exist, but I would bet that finding and learning them would take about as long as writing a better one, and half of them probably don't even allow you to re-use the existing ListAdapter objects.
[Edit]
Actually there might be an easy fix. If we copy the entire implementation of ListView, then we might only have to make once change: go into the code that measures for WRAP_CONTENT, and change it to measure until it reaches the parent height instead of always measuring the first 3 views.
Thursday, February 6, 2014
I'm Coming Home
Three months from today, I will be showing up for my first day of work in New York City. Same job, same boss. Working remotely from the NYC office in Times Square.
At least, that's the agreement with my manager. The 'leave of absence' still has to be approved.
I am...excited. This is my excited face. I realize you can't see my face. So instead, picture a girl lying next to me in bed, who is so incredibly unamused by me playing this song at the appropriate time. No lie, that actually happened. I have basically the same grin on my face now as I did then.
My team is taking me out to lunch to celebrate being rid of me. I want to try to get everyone to do a shot of Bacardi Rum 151. Unfortunately I think everyone else is a pussy. I'll be lucky if I can get them to do a lemon drop.
Speaking of, New York has 8.3 million people. If I can't find someone there, I think it will be time to call off the search and just commit suicide, or start playing D&D. Suicide would probably be more pleasant.
Anyway.
On the subject of girls, I think I may have finally nailed down the kind of girl I'm attracted to:
So um...I just need to distill those characters down into words.
Anyway.
I don't have much else to say. Well actually I wrote like an 8 page post about all the stuff I was going to do when I move back, but it was a bit silly and I'll never have time to do all of that.
I plan to be in the Philly area sometime in February, and then in New York by the beginning of May.
Until then, I'll just be working on the startup and listening to this song on repeat.
[Edit]
Whoops, missed one.
At least, that's the agreement with my manager. The 'leave of absence' still has to be approved.
I am...excited. This is my excited face. I realize you can't see my face. So instead, picture a girl lying next to me in bed, who is so incredibly unamused by me playing this song at the appropriate time. No lie, that actually happened. I have basically the same grin on my face now as I did then.
My team is taking me out to lunch to celebrate being rid of me. I want to try to get everyone to do a shot of Bacardi Rum 151. Unfortunately I think everyone else is a pussy. I'll be lucky if I can get them to do a lemon drop.
Speaking of, New York has 8.3 million people. If I can't find someone there, I think it will be time to call off the search and just commit suicide, or start playing D&D. Suicide would probably be more pleasant.
Anyway.
On the subject of girls, I think I may have finally nailed down the kind of girl I'm attracted to:
So um...I just need to distill those characters down into words.
Anyway.
I don't have much else to say. Well actually I wrote like an 8 page post about all the stuff I was going to do when I move back, but it was a bit silly and I'll never have time to do all of that.
I plan to be in the Philly area sometime in February, and then in New York by the beginning of May.
Until then, I'll just be working on the startup and listening to this song on repeat.
[Edit]
Whoops, missed one.
Monday, February 3, 2014
The Counteroffer, continued
It has come to my attention that I actually don't know how much money I make per year right now.
Sunday, February 2, 2014
The Counteroffer
On Friday my manager walked into my office and blew my mind with a proposal that was basically most of my dreams wrapped up in a nice neat package: I could work on the Android project full time, we would release it publicly (and therefore no longer be a punching bag for dumbass "partners"), and I could work remotely from the New York office.
I was not expecting that. I had been assuming that quitting my job was an obvious prerequisite for moving home, so much so that it made sense to do one before having a plan for the other. Now, though, everything just got super complicated.
Subscribe to:
Posts (Atom)










