Please create an account to participate in the Slashdot moderation system

 



Forgot your password?
typodupeerror
Note: You can take 10% off all Slashdot Deals with coupon code "slashdot10off." ×
User Journal

Journal Journal: Back to School, Back to School, Prove to Daddy That I'm No Fool

Last night I came in to work to help with an oracle table space migration. The benefit being that we would get ~100 GB freed up. The DBA said it would be about a 20 minute outage while he rebuilt the indexes. Well, 20 minutes turned into 2 hours, because he neglected to think of the load on the production database. So I ended up having to shut down one of our heavier hitting apps and that fixed the problem. Still, I'm sleepy because instead of coming in, doing nothing, sending out an email, and then grabbing a cocktail, I came in, watched it not work, conferenced people in, made a decision that I hoped wouldn't fuck anything up, and left with enough time to slam a shot and a beer. Ugh, nothing ever runs smoothly.

Except my deploys when no one else is involved. That almost always goes smoothly. It's relying on other people that makes things difficult.

Today I start grad school. I've been getting amped about this Data Science thing. I remember waaayyyy back to when I was a C Programming student, and I applied to teach the C++ companion class. During my interview, the instructor asked me, "Do you prefer to work with People, Programs, or Data?" Assuring me there was no right or wrong answer (though in hindsight, "People" was probably the better choice of the three), I said Data. I was being honest, and I kind of said it without thinking. Coming back around now and thinking about it, yes. Yes, I do prefer to work with data. I want to munge it, wrangle it, ju jitsu it, analyze it, model it, and present it. I haven't been this excited about something since I started my Bayesian text classification project, which, come to think of it, was really a data science project. My calling has been sitting in front of me this whole time.

But I'm glad I went this route. I've become a good developer, which I think is paramount to being a good data scientist. I suspect that a lot of data scientists are not proficient in software development, primarily because it isn't the central focus of the field. But I think that will bring a lot to the table.

Looking at the data science curriculum, I'm a little concerned that it doesn't really bring in any of the major data science tools - R, MapReduce/Hadoop, NoSQL, etc. It seems like it's going to be a purely mathematical ride and I'll be left to my own devices for the tools. Which is... I mean, it's fine, the math is the hard part anyway, but I'd like a little instruction on some of these tools. I've been taking Coursera courses to try and get an high level understanding of all these tools. I just hope I get a little practical knowledge thrown in with all the theoreticals and foundation.

R is looking like a really cool fucking language. So far from the little bit I've played with it, it looks like it will cook you breakfast while giving you a beej. I absolutely love read.csv and read.table. Makes working with data so much easier than, say, Java or ColdFusion.

Well, anyway. I'm rambling at this point. But I am excited. Let the games begin!

User Journal

Journal Journal: Every Time I EDI

As I mentioned before, I'm working on a RMM Level 3 RESTful service for our partners to use for B2B transactions. It is made up of resources and actions on those resources. But that's for the future. Right now, I'm stuck dealing with the less than stellar "Company R" as I will call them. They're primarily an EDI shop, like most of the partners I deal with. But they've been instructed to use web services. To them, that means "EDI over the Web."

So as a compromise, I've build a couple of additional services that handle the two specific types of EDIs that we need. I take the EDI in its raw form as the body of an HTTP POST request. Then I parse it using the wonderful GPL'd EDIReader.

Unfortunately, there's no Maven version for this, and it's hosted on the archaic Sourceforge. Ahh, old and decrepit, just like EDI. I have no idea if BerryWorks is maintaining this, or what, so I pulled the code into a new shared component that I'm calling edi common. EDIReader uses SAX to parse an EDI into XML format. So once I do that, I use JiBX (hello darkness, my old friend) to unmarshal the XML EDI into a Java object. I call this my BaseEDI. Since I know what kind of EDI I have, I can then get more specific, and write helper methods to get exactly what I need from a particular element on a particular segment.

All of this is very ugly, but I'd like to think that I've done it in the best way I could think of. And it works phenomenally. I just put it into test this week and I'm writing a testing tool to help with the creation of EDIs.

I have no idea when this thing will go live, but it'll be ready for whenever Company R decides to get with the program.

They have not been so good at even traditional EDI, so migrating to the web is only going to have the added benefit of getting them real-time error messages. I have surrounded my code in so many error catches with specific error messages to really hone in on where problems may lie. It's not even a bit fun to read through, but I know if they start failing, I'll be able to point to the exact reason and tell them immediately. And as in the past, it will not likely be my code that causes the problems, but theirs. I had so much fun during our first Go Live looking at errors and saying, "it's on your side." heh. There's a certain satisfying smugness in that.

Anyway, this week we also learned of impending layoffs at the company. Fuck. No good will come of this. I hope I've done enough to cement my necessity to the company. But slightly more likely is seeing my manager go, or anyone else I've enjoyed working with. That has the ability to fuck all kinds of shit up. If I end up working for Ass Hat, I'm going to lose my shit. I guess I will keep my fingers crossed until then. But I will continue to drive on and keep churning out great products that people love in the meantime.

User Journal

Journal Journal: I Push the Money Over Here, Then I Push it Over There

In the last 5 years, I've become something of an expert at managing my personal finances. Not that my finances are in great shape - it is what it is - but at least I'm good at working with what I have.

I've done this with a combination of technology and an incessant desire to know everything about my past, present, and future, especially financially.

I use Simple for my banking, and I love it. It gives me a clear picture of what is happening with my money in real time. The analytics are amazing. Of course, analytics alone can't work magic. You still have to analyze the analytics. For instance, I could get an average of what I spend on food monthly from the time I started using Simple and you'd think that'd be a pretty good estimate, but alas, it is not. The picture has changed from 2013, because I gained a live-in girlfriend in 2014. And now this year, that girlfriend has started Anesthesia school, so I am paying for all food for both of us. So the picture has changed. I think this kind of analysis is good for my Data Science future, but also is good for keeping up to date with myself and planning my future.

To do that, I have Google Docs spreadsheet that spans from 2001 to 2020. I am able to capture most of the financial picture of my past using old bank statements, standard military pay charts, and memory. This spreadsheet has become my budget, and a predictive model for the future. Using past bonus and raise percentages, I can extrapolate out to the future to determine (if all goes well) what I should be making in 1 - 5 years. Furthermore, I can determine how to most effectively manage my debt. My loans are all calculated by APR, so it even takes that into account.

Unfortunately, sometimes cold hard analytics fall out of the way in favor of anxiety and stress, which is often the result of some of this analysis. When you move the dials all you can, and there is still a negative sign in the leftover balance of the month, you realize the best option, financially, is not the best option sociologically. So while the Dave Ramesy cult followers of the world will tell me that halting payments into my 401(k) and even worse, borrowing from my 401(k) to get through some rough times is a terrible idea, I would argue that they are fucking idiots because not all situations are that goddamn black and white.

Obviously I don't prefer this plan. But I've spent the last month having absolutely no fun, going crazy in my apartment, ducking friends because I can't afford to hang out, while my girlfriend does the same - and this is causing stress, and stress causes unhappiness. And friends, you cannot put a price on happiness. We're not even talking about happiness here, it's contentment. Just getting by and not hating life. It's a big fucking deal. I cannot do 1-2 years of this.

So I pulled the trigger, just now, on taking out half of my 401(k). I had ruled out this option in the black and white scenario. But a crying girlfriend can change everything. We will not live in poverty, or be ashamed of not being able to see friends because we can't afford it. It's ridiculous. I realize this is First World Problems, but you know what it isn't? 1% problems. This is 99% problems. I'm not a big Occupy Wallstreet guy, and I don't think we should just go take people's money and redistribute it all Commie style, but you have to admit, the game is stacked pretty strongly in favor of the fucking wealthy. It's a goddamn logarithmic curve. Getting over the hump is damn near impossible, but if you can, the rest is easy. Money begets money. And you know what begets poverty? Poverty. It is WAY more expensive in America to be poor than it is to be rich. And that is the fucking travesty of our time.

If things continue on track for me, I will be over the hump of the logarithmic curve by mid-2016. This hurts to think about, because I had every intention of being out of debt by this month a year ago. Plans change. Situations change. Anesthesia school is expensive. Grad school is expensive. Food is expensive. There's nothing I can do about it but continue to plug along. But I can't live like a pauper. I've worked too hard and for too long to go back to college kid life. Plus, I'm in my 30s, I hate college kids.

I can't change the rules of the system we live in, so the only thing I can do to get over the hump is to beat the system at its game. Which is why I'm going back to school, and why I'm supporting my girlfriend in what could be a very lucrative career. As disappointed as I am to see success put off for a few more years, I know it will come. Patience and resolve will get us there. Until then, we'll just keep doing what we're doing.

Everything will be ok.

User Journal

Journal Journal: IT Heroes and Big Data

Many moons ago (circa 2006), when I was a young lass studying Computer Science, I had a teacher that really stood out. He swore freely in class, wasn't afraid to call a kid stupid for asking stupid questions or not being able to read code, and regaled us with probably one too many fantastic stories about how he played football for the Chiefs. And while he could be an asshole at times, I probably learned more from him than just about any other throughout my college years.

He didn't just teach C/C++, but lots of other practical tidbits along the way, such as Bash command completion, exiting a shell with CTRL+D and why that works (signals end of input), using Splint, and a myriad of other little things that where maybe outside the scope of the class, but added a lot to my IT tool belt. This made him one of my first IT heroes.

Of course there are others that I have never met and are well known throughout the community - Bruce Schneier, Theo DeRadt, Ken Thompson, Donald Knuth, etc. Those guys have all earned their place at the top of my IT heroes list.

So how does one become an IT hero? It seems there are two paths. One can teach, or one can code their way to fame. I'm not sure that I'll ever be anyone's IT hero, unless I get a cool intern someday who is eager to sponge up knowledge. So far, most of the interns I've been around don't remind me of me (i.e. they didn't come in with a breadth of knowledge, and they don't seem super interested in tackling big projects to expand their abilities). Maybe someday...

On a completely different note, I am loving this Data Science class I'm taking on Coursera: https://class.coursera.org/datasci-002/lecture

And I'm also a little ashamed that it's taken me this long to learn about MapReduce and NoSQL. Really ashamed, actually. There are so many problems I could have solved with these tools had I known about them years ago. Of course, we at the big corporation have only recently begun to embrace Hadoop, while NoSQL has not yet entered the enterprise at any scale.

And with my current project, I'm wondering if there's a place for it. I'm writing a Hypermedia API and I want to track requests, responses, failures, etc for analytics. In our existing internal RESTful services, we're storing entire JSON objects in Oracle CLOBs. This has of course started to bog down Oracle and chew away at disk space. And it's a bitch to even try munging for analytics. In fact, SAS is doing a PoC on that data, so we had to parse it for them and put it into a table. So that whole thing sucks.

So I'm like, 95% sure I don't want to go that route, especially since that database is already having growing pains. But I want to capture that data. But (yet again, "but) I am just learning about NoSQL and Hadoop, so I don't know if I should try and incorporate one of those systems into my design, since I know my first implementation is not going to be great. There is the option of writing to flat files and saving those off somewhere for later parsing, but I know that once I get this thing set up, I'm probably not going to get a second chance to implement this. A new project will come along and this will be forgotten about until something breaks or someone asks me for stats.

I'm currently on the NoSQL chapter in the Data Science class, which is basically a 50k ft. view, but it's more than I've learned about NoSQL up to this point. Again, I'm a little ashamed that I haven't dedicated some time to it up until now. Better late than never though.

We shall see.

User Journal

Journal Journal: Less Hate for HATEOAS

I'm starting to finally warm up to this whole Hypermedia thing. It's really not so terribly difficult to understand.

I actually figured it out on my way to the Slayer / King Diamond show. It was a bit of a walk for me, so I use that time to think through my projects without being at my desk. Helps get me outside the problem and see the forest for the trees.

It finally occurred to me that we're using controllers to provide methods. Those methods either return a resource (a mapping of an entity), or perform some kind of action on a resource. The action performed is declared by the client in the HTTP Method. GET returns a resource. POST and PUT do some kind of modification to a resource (the difference being POST is not idempotent, a word that I have just this week learned).

So on my walk, I realized that everything in a GET is just a resource. Why not just name them all "resource"? The client should be able to figure out what kind of resource it is based on the URL. I think the key to reaching REST glory is understanding that HTTP IS THE FRAMEWORK. Every REST service I've written up to this point has been like, "/service/something/do" or "/stuff/morestuff/get". Why?! There should be no verb in the URI. That comes for free with HTTP Methods! And all these verbose responses with error codes in XML and shit? C'mon, that is given to us in HTTP Response Codes! And I think once that realization hit me, everything came together (in my brain, still lots of coding to do).

As a previous comment asked how I am serializing XML, well, it's with JAXB. Seems to go hand in hand with Jersey, so I'm not going to rock the boat. I actually briefly tried Spring HATEOAS, and it didn't play well with Jersey. Couldn't find the servlet context, probably because Jersey had it. I dunno, didn't dig too deep on that. It's such a simple concept here, presenting links to allow for a responsive API and client, it wasn't hard to roll my own.

So all I did was create a HypermediaLink object that just holds basic string stuff like rel, and href. Then I created a BaseResource that holds at least a selfRel and a list of links. My resources extend this, but here's the dick kicker - the @XmlRootElement(name="resource") has to go in the inheriting class. No way around that with JAXB, unfortunately. So that's not super clean, but at this point, we're splitting hairs.

So armed with that plan, I drew up my API state diagram. It's still a work in progress, but all the sudden it feels SO CLEAR what needs to be done. So now I just need to do it. Hard part is over though. I'm actually very happy with my work, thusfar. Looking forward to banging this out and chalking up another huge win.

User Journal

Journal Journal: Hating HATEOAS and a New Whiteboard 6

I'm designing a REST API kind of from scratch. Actually, I'm taking an existing API in production, and putting kind of a "Version 2.0" on it, leaving the original in place, but making the v2.0, well, better.

So I've decided to read up on REST and instead of just attacking it like I have every other RESTful project I've done, actually approach it with an architectural mindset with some theory to back up the practice. So I read about the Richardson Maturity Model, about how most of my services up to this point have been Level 1 services, which is fine, since I was the only consumer of them. But now that I'm going to be exposing this to the world (at least a subset of the world), I want it to be done right. At least, as "right" as I can get it given all the conflicting information on REST.

The biggest problem so far is, I'm building this with Content-Type=application/xml, not Content-Type=application/json. Why? Because I don't think our consumers are going to be big JSON users. To that end, I don't think they're going to be big HATEOAS consumers either. However, I want to do it this way anyway, so no one can say we weren't forward thinking. So back to the XML problem - there are like, ZERO examples of an XML Hypermedia API. Everything is in JSON. Even the RFC for HAL is for JSON. Why not include XML in that? The two go hand in hand. It's just a different dialect for the same data.

After exploring two frameworks for HATEOAS (spring-hateoas and Jayway Forest), I found that there's nothing that will support XML. So I'm rolling my own. I guess it's pretty simple, we're just representing links, right? But it's a little bit trickier because link displaying is dynamic. So I need a way of conditionally displaying links. I'm leaning toward annotations. I got this idea from Jayway Forest. That seems pretty basic.

And it's looking like the closest thing to a standard is HAL+XML, which isn't even an RFC yet, but a guy on Google Groups who just modified the RFC for HAL+JSON and posted it to Github. Man, this is looking ugly. So, in light of this, I'm thinking there really is no standard, and I'm just a well off writing my own as trying to follow someone else. So that's what I'm doing.

Previously we were returning XML that looked like this:

<{specific-type}-response>
    <response-header>
        <status-code />
        <status-message />
    </response-header>
    <{some-specific-entity}>...</{some-specific-entity}>
</{specific-type}-response>

There are a bunch of problems with this. First of all, the root element changes for each Controller. That makes it very hard to write a client.
In fact, calling it any kind of response is incorrect. That is a Java developer habit. We write everything with services, so everything is a request/response. But here, the response is the entire package - HTTP Headers, Status Code, and Payload.

Secondly, why is there a response header in the response body? We get that for free with HTTP! Get rid of that thing and we're already starting to creep into RMM Level 2!

What we're representing in XML is the Entity, or Resource. A Resource is just a representation of an object's state. Like a lightbulb:

<resource rel="self" href="/room/kitchen/lightbulb">
  <link rel="switch" href="/room/kitchen/lightbulb/flip" method="PUT" />
  <link rel="change" href="room/kitchen/lightbulb/change" method="POST" />
  <light-status>ON</light-status>
</resource>

One thing that isn't in the "spec" if you want to call it that is the method there. That at least tells the client what I'm expecting for the verb.

I'm really torn on all of this, as I'm sure many other developers trying to implement this kind of thing are. Nothing is concrete and there's pitfalls everywhere. I know it's been like this for a long time, but it just seems like the more it gets refined, the less anyone seems to know what to do with it.

Oh, and my whiteboard got replaced today with a smaller one. The super annoying thing? I had my whole REST API written up on it for reference. Motherfuckers.

User Journal

Journal Journal: Weird Ubuntu Wireless Shenannigans 2

I got a call from the gf the other day at work. She was at home doing homework on her Ubuntu laptop and said the Internet wasn't working. I believe she said she couldn't connect to the Wireless, actually. So I had her turn off the router and turn it back on. When that didn't work, I said I'd be home in a bit, because trying to walk her through troubleshooting is a nightmare. So first thing's first, I tried pinging Google from my desktop, which also connects wirelessly. I'd get about 39 pings off and then it'd freeze for about a minute. Then I'd get some more pings off and it'd freeze again. I powered off the modem and powered it back on. Same thing.

So I didn't have time to dig into it anymore, so I told her to just come to my work and she could use the office WiFi.

When I got home, I tried again, and everything was hunkey dorey until I turned my laptop on. Then I saw the problem again. I set both the laptop and desktop up to ping Google and I'd get the same thing - on again off again connectivity, but they would alternate. Ah ha! I had a theory. So then I pointed them both at 192.168.1.1 and got the same result, proving it wasn't the Internet.

The theory was gaining traction.

I pointed my desktop to the router's admin console and checked my devices. I saw there were 3 connected (my phone was on too), but only two were identified with an IP address, and the other was just all dashes (-------- ----------). So it saw a device, but couldn't assign it an IP. I checked all the settings to make sure my DHCP wasn't set to only allow 2 devices (something I have done in the past), or that I didn't have any static IPs set. Nothing.

I grew more frustrated.

Then I disabled networking on the laptop. When I turned it back on, problem solved.

So this must be a weird Ubuntu bug, or something related to the driver for that card. I dunno. But I'm glad it's fixed. That would have driven me nuts for a long time to come.

User Journal

Journal Journal: The Waiting Game Is a Stupid Game

I've got this ColdFusion app that sucks in a bunch of data from a Teradata database, and joins it up with a bunch of data in an Oracle database, and then stores it in its own table. The problem with this is, I have to run a nightly batch job to suck it all in. I'm doing this in ColdFusion, so I've got a 5 minute timeout (default web timeout) that I need to stay under. Everything was fine until I got a complaint about a feature of the archive script not working. I think I fixed that, but now it's going way over 5 minutes, and I think this is because before, it was skipping a whole section. Now that I've got it hitting this section of code, it's running waayyyyy longer.

And it wasn't until late yesterday that I finally decided to do some log statements. See, in Java, I'd just step through the code with a debugger. But with ColdFusion (particularly in our environment) we just edit our code and hit a URL and the server runs it. No way to debug. Typically, it's not a big deal. Just through in some output statements and see where your trouble lies. But now I can't even get the damn thing to return to the browser. So logging has become a necessity.

So now I've got my log statements in there and I'm just waiting for the damn thing to timeout. The waiting game.

So while I'm waiting, I'm going to bitch about a coworker. He's one of the managers here, and I do not work for him. But that doesn't stop him from fucking things up for me, and everyone, really.

I used to think he was just a harmless kiss-ass who liked to suck up to his boss and his boss' boss, and his boss' boss' boss, ad infinitum. That would be annoying, but it's whatever. But now, it's become clear that he's out of control. He's amassed an army of pawns who don't necessarily know he's terrible and are willing to do whatever he asks. And it would be another thing if he actually knew what he was doing. But he doesn't. He's technologically stupid, and architecturally shortsighted.

The thing that set me off a couple weeks ago was when one of his people asked me for help getting the customer that is attached to a user ID. I told him that you just need to extend one of our common components and that it's done for you. Then I asked to see his code. It was alien. There was nothing resembling our company's coding standards to be found. And then I found out that this was already being used for demos to boss' boss' boss etc.

This is the kind of thing that I could ignore if I didn't know it would come back to me some day to be maintained or fixed, or whatever. And by that point, it'd be so entrenched that refactoring would be outlandish. And since I didn't get the Architect job here, I'm trying to keep an open mind about the new Architect. But so far, all I've seen is - ugh, let's just call him Brody, cause it starts with a B, and he's also kind of a bro-dude-buddy - Brody using him as his personal architect. And I don't think he's deep-dived into our systems yet. That bugs me. He need to know this stuff inside and out to be the architect, and so far, all he's talked about it how they did it at his last company and gives us this pie-in-the-sky answers about how we COULD do things. I'm not interested in COULD. I'm interested in what are we doing now, and what can we do tomorrow to show results. I dunno, he just seems lazy to me, and not the "I'm so good at my job I look lazy" way. I also found out he was friends with his boss, which is probably part of the reason for the hire. I'm still trying to keep an open mind, but I'm slowly starting to form an opinion and so far, it isn't terribly high.

And now, 20 minutes after I ran my script, it finally timed out. I'm trying to get the logs I wrote, which are huge. And the geniuses behind our logviewer thought it would be good to use infinite scrolling to display logs with no "download log file" option. So, this is gonna take another hour. Ffffuuuuckkkkk. Nobody thinks about utility around here. It's like, "Oooh, let's implement this fun cool looking feature" without thinking about how useful it will be. I just want the raw logs so I can open them in Vim and see what the hell my app is doing. Ugghhhhghghhgghghghgh!!fFFFUUCCCKKK.

I guess that about sums it up.

User Journal

Journal Journal: I Direct at You, the Seething Hatred of One Thousand Suns! 2

There's trouble in paradise. My once cushy and enjoyable job is clearly nearing EOL. This is due to someone else here, a real "go getter." You see, not only is this individual Machiavellian in nature, but he's tech-stupid to boot. So we have a power grabber who doesn't know shit about what he's trying to manage. This is going to end up destabilizing the company over the long term, making my job much less enjoyable because A.) I will end up cleaning up the mess, and B.) He will slowly suck up more and more power and I could end up working under this fuck.

He's always been this way, but more recently it has become a problem. I got a ping from one of his people on Friday, asking me for some help. I obliged, and I was confused by his question. So I asked to see his code. Lo and behold, it looked nothing like what our core systems look like. This is because they are off-site employees and FuckHead keeps all his people in silos, away from all the other (read: experienced) developers. And now that our Architect has been replaced with a new guy (not me, of course), DickWad has decided to become buddy-buddy with him so he's got the brains in his back pocket (since they're not in his head).

So now we've got Rogue coders corrupting our code base and an architect who has, whether he knows it or not, joined the dark side. Couple this with Asshole's climb-to-the-top-on-the-backs-of-others mentality, and you've got a recipe for disaster. My only option, it seems is to start making an exit strategy. Which sucks. I like it here. I'm really fucking good at this job. I know the code inside and out, and I understand the business. I've been here for 4 years, man. I like my boss and his boss. But I don't see any other option.

And CockKnob is so good at his back stabbing techniques. He never technically "does anything wrong" so it's not like I can nail him on something fundamentally against company policy or anything. It's all the little things. Like how he accepted a Summit Award for a project he had nothing to do with, while screwing someone who had significantly helped the effort out of his award. But you can't really get "in trouble" for accepting an unjust award. It's how he takes credit for other people's work, while putting all the blame for any mistakes on everyone else. It's how he puts people who don't work for him on an org chart under him when he meets with higher-ups. It's not a fireable offense, should he be called out. Hell, it's probably not even a mentionable offense. If all else failed, he could just claim technical oversight and be like, "sorry 'bout that!" But the damage is done, because now that VP sees him as someone who has a lot of responsibility. The seed has been planted.

This is an asshole with no integrity. But integrity is one of those intangibles that have no metrics attached, and as such, has no real bearing on how far JizzGuzzler will go. I've been assured that his reputation will get around, but I know how it works. By the time it gets around, he'll be long gone, promoted to the next level up, where he can inflict more damage on a larger group of people.

So here's where we get to the solution. It's not easy, and it's really not even directed at him. It's a parachute for me, cause when this plane catches fire, I am not hanging around to see if we can put it out. This is why I'm going back to school to get my masters in mathematics. I registered earlier this year, but with less intention of actually doing it. It was kind of an "eh, we'll see" attitude. But now it's a do-or-die attitude. This program can help me right several worries I've had in my head for quite some time. One is the aforementioned NutRubber. But just so as not to give him too much power (more than he already thinks he has), I'm also doing it for me. I've grown comfortable and quite honestly, bored with my job. It's too easy. Same thing over and over. Understand business requirements, architect a system, the copy-paste a bunch of shit and it's done. Very little innovation. I'm not saying I'm not good at it. I am. That's why it's boring. But I know I'm not good at math. It's not easy to me. That's a challenge, and that's why I must do it.

Data Science is the next frontier, and it's already commanding huge salaries at other companies. With a national average salary of $118k according to Glassdoor (which, if I have any hope of being a data scientist, I obviously must question weather that's the arithmetic average, the median, or the mode - but either way...) it's one of the highest paying jobs out there. Developers are a dime a dozen (not good ones, mind you, but job-filling ones). I want to cement my place in the needs of a company. This is the way to do it.

My first class will be Probability Models, and I'm stoked. Every day I go to class, I'll be a step closer to carving out my own path, and kissing ShitStain goodbye.

User Journal

Journal Journal: Upgrading Eclipse to Luna

Ugghhhh. Here we go again, with the Eclipse bullshit. (This will be sort of stream-of-consciousness as I'm just going to rant as I get this shit working...)

So I'm about ready to start a new project and I bit the bullet and upgraded to the latest "stable" (sarcasm detected) Eclipse release, Luna. I had been using Juno forever, with great disdain, but at least I knew most of its quirks. So now I get to learn all of Luna's quirks.

Starting with a little red X on each of my project POMs with the following error:

Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:build-helper-maven-plugin:1.5:add-source (execution: add-generated-source, phase: generate-sources)

I found this StackOverflow solution: http://stackoverflow.com/questions/9263992/org-codehaus-mojo-not-visible-in-eclipse

Which basically just says to tell Eclipse to ignore it.

Next is this lovely little warning: "Implementation of project facet could not be found."

For that, I'm told to go delete .settings\org.eclipse.wst.common.project.facet.core.xml from EACH FUCKING PROJECT. And then do Maven updates. Or maybe restart Eclipse. Who knows. I hate you, Eclipse.

I'm also also getting issues connecting to the Marketplace. That's fucking annoying too. Had to switch from Native proxy to manual and enter a username/password.

Apparently Subclipse doesn't come installed. Gotta install that...

Restart one more time...

Annnddd, it's kinda almost maybe sort of working. Still got a bunch of little warnings that I'll need to get cleared up, but whatever. I'm tired and hungry. Time to go home. Stupid Eclipse...

User Journal

Journal Journal: Gleaning Information With Exif 1

While digging through my past, there are points in my life that are black holes. These are problematic. I joined Gmail in 2004, Facebook in 2005, and basically everything after that is recorded in some form of digits. But prior to that is proving to be a challenge. I had a MySpace, Live Journal, Yahoo!, and Hotmail account dating back to 1997, but all of them have been obliterated. I bet even the NSA would have trouble coming up with data on me prior to 2004. So this leaves me stumped.

One thing I did have was a digital camera. And I'm not braindead, so I remember things that happened when I took those pictures. So, with the power of Exif and the "Date/Time Original" field, I'm actually able to do a little detective work. But there's a catch. That requires you to have first set the date time on the camera, something I never saw the value in back in 2003 when I first got my Olympus C40 Zoom (A WHOPPING 2.8x ZOOM and 4.0 MEGAPIXELS!!!).

Side note: I'm really stoked to see this bad boy again: http://www.dpreview.com/reviews/olympusc40z Sheeeeeiitttt.

So anyway, having not set the date/time, I was left with a bogus date. The time doesn't matter much for this experiment. All I want is the date so I can put events on a post-dated calendar.

But I have one thing that technology doesn't have: memory! Ok, that's unfair, but you know what I mean. I can use my memories of when the pictures were taken around a specific date (i.e. my birthday) and adjust from there. So, upon finding a specific picture taken on my birthday that contained a date within Exif, I just had to do the addition. Plug for my favorite online date/time tool: http://www.timeanddate.com/date/dateadded.html

Once that was done, I just needed to adjust all the other dates and I've got my events.

Surprisingly effective for such stupid simple shit. Now, I'm facing the problem that I've deleted a shitton of pictures somehow, and I'm not sure I can get them back easily. I was looking into Autopsy, but it wants an image and I'm not sure I can get it that... But for now, I'll take my small victory.

By the way, beware of that Exif data, particularly if you are sending something you think is anonymous. Your best bet is to take a screenshot of the picture and send that, assuring you aren't transferring any Exif data, thereby revealing yourself. That is unrelated to this post, but it's a thought.

User Journal

Journal Journal: Archiving My Life

2014 was a trip down nostalgia lane. I dug through my past and started documenting. But this year I have only gotten more serious about it. As I dig through old emails, paper documents, school work - anything, I am distraught by how much is gone forever. There are events in my life that will only live in my head. But for how long? Now is the time to document everything that has happened in my life. The further away I get from it, the harder it gets to find and remember. But once it's recorded, I'll have it forever.

I'm basically putting everything on my Google Calendar, and keeping documents in my Google Drive. The calendar is the easiest way I can look back at what I've done. What am I documenting? Anything remotely significant. Seeing a certain band, or visiting another city. Making out with this girl or that. Anything that isn't mundane. To be fair, this entire project is extremely mundane, and I'm not really living while I'm doing it. But I see it as a small sacrifice in order to preserve the past.

Slashdot journals have been extremely helpful as well - indeed, they have their own calendar. I even copy the contents of the journal and past them into the calendar description field. So much is coming back to me just from putting everything on a calendar. It's like the picture continues to get clearer, and I am transported back to that time. Anyway, I need to keep going. Back to it!

User Journal

Journal Journal: Operation Pacman

It's been a while since I spawned an Operation. As I'll remind my audience of approximately zero, I determine operations based on the need for a long term focus on a particular goal. This particular goal is eradicating debt. And since I can't do it all at once, I'm doing it a little bit at a time. Like Pacman eating the little dots (monthly payments) and trying not to get caught by the ghosts (surprise expenses).

I've got my spreadsheet model laid out for various situations. Currently, it is set on what I am calling "Insane Mode" where I basically have no life and pay as much as I can on my loans. Realizing this isn't realistic, I'm going to create a Goal in Simple for Student Loans (and eventually Upstart Loan) and set aside as much as I possibly can in to that, leaving me about $400/month for food. If I go over that $400, then I eat away at my debt payment, causing me to be more mindful of my spending.

I'm also going to make an effort to shop cheaper, doing my grocery shopping at Target and such instead of the local mom & pop, which is much more expensive.

This is coming on the heels of learning that I will be supporting my girlfriend through anesthesia school a lot more than I anticipated. I can still eradicate my debt by bonus time next year though if I stick to this. I won't be eating ramen though, as my health will always come first. But bars, restaurants, and expensive cigars are out. Even expensive whiskey is out. I'll be drinking bottom shelf Evan Williams (which isn't bad, really). But I'm going to get this done. One day at a time. One little dot at a time.

User Journal

Journal Journal: Upgrading Ubuntu End Of Life 13.04 Raring Ringtail on a Sony Vaio 1

I bought a laptop a couple years ago. I don't know why, because I installed Ubuntu on it and then it sat unused for about three years until my girlfriend's laptop broke and I told her she could use mine. Having a Linux machine is like having an HP graphing calculator that uses RPN â" Awesome for you, but when someone asks to borrow it, they are utterly clueless. All she really needs it for is Internet (all anyone really needs computers for these days is Internet â" hence Chromebooks). So she can get by, but the thing is still on Raring Ringtail, which I came to find out is 3 versions old and End of Lifed. Which means upgrading isn't a snap. So I'm taking some time out of my Saturday to do that and document it here.

I will also take a minute to mention how much I fucking hate Ubuntu and the monstrosity of a desktop environment, Unity. Fuck the whole thing straight to hell. I have probably uttered the phrase "Fucking Ubuntu..." more times than I can enumerate. Now, I would have installed Debian, but a couple years ago when they first started coming out with UEFI, Ubuntu was about the only distro that handled installs with ease. I'm sure Debian has caught up by now, but I'm not willing to spend a whole weekend on this. Half of a day is all it's getting.

So here we go.

I'm following along with Ubuntu's guide, but I'll repeat the steps here as we all know how links tend to disappear years down the line: https://help.ubuntu.com/commun... First of all, I didn't want to do everything with sudo, especially things I know I'm going to need to be doing as root, so I'm just going to

$ su -
Password:
su: Authentication failure

Goddamnit. Yet another thing to hate about Ubuntu. They treat their users like children (because most of their users are) and they don't even give them a root account. It's like the movies where the experienced guy gives the untrustworthy guy a gun but it's not loaded, and the idiot finds out later when he tries to shoot the experienced guy. Anyway, I'm an experienced guy, so I have to manually enable root.

$ sudo passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Now we can proceed.

$ su -
Password:
#

Update /etc/apt/sources.list

# vim /etc/apt/sources.list

## EOL upgrade sources.list
# Required
deb http://old-releases.ubuntu.com/ubuntu/ CODENAME main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ CODENAME-updates main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ CODENAME-security main restricted universe multiverse
 
# Optional
deb http://old-releases.ubuntu.com/ubuntu/ CODENAME-backports main restricted universe multiverse

# apt-get update

You should also make sure some meta-packages are installed so the upgrade can continue without problems. Update-manager From version 6.06 and up you will need to install the update-manager and update-manager-core packages.

# apt-get install update-manager-core update-manager

Kernel This part takes a while, as the headers are pretty weighty.

sudo apt-get install linux-image-generic linux-headers-generic

Run the upgrade And then this part really takes a while, as you know.

# apt-get update
# apt-get dist-upgrade
# do-release-upgrade

Then do it it again. And again. Until you're caught up. Ugh, this takes forever.

User Journal

Journal Journal: Eclipse: The Loathe of My Life

Eclipse is bad, man. And I'm not saying that because I used it once and didn't like it. I have used it daily for 5 years. I remember it being pretty decent somewhere around the Helios/Indigo era. But once Juno hit, everything fell apart it seems. I'm currently still sitting on Juno, with two versions gone by now, because while, yes it is fucked up, it is a known level of fucked up. I don't know how much worse they've made it since then.

For a while, I kept a list of everything wrong with (my) Eclipse:

- SVN commit sometimes gets stuck.
        - Solution: Sometimes cancelling it and trying again works. Sometimes you have to restart Eclipse.
- Red Problem error on POM file after updating shared component
        - Solution: Manually update project under Maven
- JiBX binding fails when any change is made to the component
        - This is due to the JiBX autobuild plugin being fucked up and having to disable it
        - Solution: Do a clean install every time
- JRebel reloads forever, but doesn't execute
        - Solution: Stop server, recompile, start again
- Closing when SVN locks up locks the whole app.
        - Solution: Kill w/ task manager. Start again.
- Error shows in IDE, compiles w/ manual MVN command
        - Solution: Delete Maven Persisted Library from build path
- Debugging / Changes/ JRebel reloading causes IDE to lock up.
        - Solution: Kill w/ task manager. Start again.
- Toolbar gone for no good reason
        - Solution: Window -> Hide Toolbar (Why is it not "Show Toolbar"???)
- Shows errors after updating Maven dependencies in text editor.
        - Solution: Restart Eclipse
- "Perspective Switch Job has encountered a problem" when debugging from Java perspective and it hits a breakpoint and tries to flip you over to Debug.
        - Solution: Restart Eclipse
- Save stops working (ctrl+s, or :w in Vrapper)
        - Solution: Close editor (it will ask if you want to save, so say yes) then restart Eclipse
- Deleting project leaves closed project folder in package explorer
        - Solution: Restart Eclipse
- Link with Editor stops working in Package Explorer
        - Solution: Restart Eclipse
- WSDL file giving warning: WS-I: A problem occured while running the WS-I WSDL conformance check: org.eclipse.wst.wsi.internal.analyzer.WSIAnalyzerException: null ------------------------------------------------------------------------------ Nested exception is: java.lang.NullPointerException The WSDLAnalyzer was
  unable to validate the given WSDL File.
        - Solution: No idea. This is apparently a bug in WST or something.
- Parent project of a multi-module project shows as in error with "Import cannot be resolved"
        - Properties -> Project Facets -> Check Dynamic Web Module, Java, Javascript
- XSD shows as an error in project with "src-resolve: Cannot resolve the name 'xxx:whateverType' to a(n) 'type definition' component."
        - Solution: No idea.

Notice how most of the solutions end with "Restart Eclipse." Ugh. It's the new Windows.

Unfortunately, I can't use IntelliJ. As much as I love some of the things you can do with IntelliJ, I gotta have multi-module support. I don't work in a single module. I work in several at the same time. IntelliJ's limit on that is a deal breaker.

Anyway, I've been trying to clean up my workspace all day, which is proving to be a Sisyphian task. Screw this. I need to code. I'll just have to live with the false-alarm red-Xs and warnings. Just like I live with Eclipse. *fart noise*

The bomb will never go off. I speak as an expert in explosives. -- Admiral William Leahy, U.S. Atomic Bomb Project

Working...