Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!


Forgot your password?

Journal Journal: Installing Ubuntu on an HP P6-2330 with UEFI

I finally got my new PC in. It's an HP P6-2330 and boy am I not happy to find that it uses UEFI with Windows 8 as a sentry keeping me from installing Linux. At least it's trying anyway. I'm going to document my efforts here to see if I can make Linux on this thing a reality.

Step 1. Get a beer.
Step 2. No, scratch that, get something stronger. This is going to hurt.
Step 3. From the articles I've read, you can't just boot a live CD like you normally would on a BIOS system. UEFI uses signed keys from Microsoft (can you say "lockout"?). So what some of the more frontier distros are doing is using their own MS compatible key (I guess, maybe it's an actual MS key or something) and doing some kind of "shim" action to get in there and boot GRUB 2. So we'll go with that. Your options so far are Fedora and Ubuntu, AFAIK. I'm hoping at least if I can get one of those on there, I can boot anything else. We'll see.

Step 4. I followed this Youtube video to disable Secure Boot and turn on Legacy BIOS: http://www.youtube.com/watch?v=ElzvaL96cw0
I'll lay out the steps here so you don't have to watch the video.
Step 4a. In Windows h8, go to the stupid corners of the screen for whatever reason they decided to make you do that
Step 4b. Click on Setttings
Step 4c. Click on Change My PC Settings
Step 4d. Click on General
Step 4e. Scroll down and under Advanced Startup, click Restart Now
Step 4f. This brings up more options, for whatever hairbrained reason. Click on Troubleshoot.
Step 4g. Click on Advanced Options
Step 4h. Click on UEFI Firmware Settings
Step 4i. Click on Restart
Step 4j. Scroll down to Computer Setup. This will bring up kind of a BIOS setup.
Step 4k. Now, the whole BIOS setup screen didn't fit in my monitor, so you need to hit the right arrow key twice to scroll over to the Security menu item. Then press the down arrow eight times to get the bottom item, "SECURE BOOT CONFIGURATION"
Step 4l. This brings up a big scary red screen of threat. Press f10 to continue
Step 4m. Now you're going to press right to enable Legacy support, down and left (or is it right? can't remember) to disable Secure Boot, and f10 to accept again.
Step 4n. Then press left a couple times to get to the first menu item, press down five times to save changes and exit and press enter
Step 4o. As a bonus, you might want to go to Advanced and edit your boot order. Notice how there's not option for Boot from CD/DVD, only Boot from USB CD/DVD, or Boot from USB Harddrive. The good ol' days are over, aren't they?

Step 5. Now we have to go download Ubuntu, so go do that.
Step 6. I assume you're already running some Linux distro somewhere and it's probably an APT system. Run this: sudo apt-get install usb-creator-kde . You'll need that for creating the bootable USB key. I also assume you're using at least a 2 GB USB key. If any of these things aren't true, go look elsewhere for help. This is a very narrowly scoped article.
Step 7. Fire that badboy up: $ usb-creator-kde (EDIT: actually, use $ sudo usb-creator-gtk)
Step 8. Click the Other button and go find your ISO. Select your USB drive and select Erase Disk and hope you're not erasing the wrong disk (you're probably not, but that fear will still be there - unplug the other one just to be safe). It's also going to look like it's sure doing nothing for a while. I guess. Ok, maybe not. The KDE one didn't work, so I installed the GTK one and launched that shit with sudo and it seems to finally be working. (See edit)
Step 9. That will take like, 5 minutes so go do a shot (I just did tequila, so you should too).
Step 10. Ok, looks like that's done.
Step 11. Plug that motherfucker into your new PC and do whatever it is Microsoft requires of you to restart it. It should now boot up with the "shim" bootloader and let you install Ubuntu right there. Go ahead. Do it. No, don't select that first option of trying before installing. Just jump in, balls first. Don't be a pussy. Then go take another shot.

Now, while Ubuntu is installing, I'm going to take this moment to mention that I've always been a Debian guy. I tried the BSDs, I tried SuSE, and probably a few others. But when I landed at Debian, I was in love. But the whole reason I'm at this point, where I have two new computers and I'm installing different operation systems is because the latest Debian update fucked my shit up royally. So, here we are. I have a Bodhi machine and in a few minutes, an Ubuntu machine. And if this works well on here, it'll be going on my ultrabook.

Before writing this article, I didn't even know what UETI was. I thought we were still on BIOS. I am becoming a dinosaur living in the past. Time to move me into the future. And I don't have to LIKE the future to want to understand it. I should never be the grumpy old man that just hates things because they're new. I should understand what they are and make an educated hatred about them!

A lot of this philosophical nonsense is stemming from a recent conversation with my mom which made me realize that she isn't very proud of me. Rather than recognizing all of my accomplishments, she chooses to focus on the things she doesn't understand (tattoos, hard drinking, rough sex, music festivals, concerts, week-long getaways) and uses that to basically talk down to me on just about every conversation we ever have. It's frustrating, considering I'm probably the most successful one of the family. Best/highest paying job, first with a 4 year degree, in the best shape, have the best looking significant other (who is also successful), and definitely the most traveled, having served in the Army for 9 years and being a veteran of two foreign wars. Not to say I'm looking down on them, I'm just kind of tired of not receiving any recognition for my accomplishments and always harping on my drinking. Look, I like to drink. I NEED to drink. Yes, I'm an alcoholic. But I am a happy drunk and I drink on my own time. Leave it be.

Anyway, sorry for that rant. This Ubuntu install is taking for friggin' ever.

Ok, we're booting up. Now I have to say, I got a little (lot) scared. I rebooted and got a black screen. I hard reset and got a boot loader. The first option didn't work. I think I picked some other one. I don't know, eventually I got to a real boot loader with Ubuntu as an option and BAM. Working. Peace out, Microsoft.

I'm going to try this on the ultrabook tomorrow night and if it works, I will post a tutorial here.

Time to set shit up, bitches! Peace!

User Journal

Journal Journal: Barge to Hell

Happy Five Percent Friday! Unfortunately, due to promises I made earlier in the week, I have to put in more than 5% today. I'm reorganizing our ColdFusion drives and consolidating them all into 3, down from about a billion. Of course, with ColdFusion, this means I have to make actual file edits to change paths, because while domains are dynamic, file paths are not. Fuck me.

Subversion is currently trying to add 999 files to the repo and it's not happy about it.


I'm ready to get my Barge to Hell on. Somehow, I've managed to pay for a cruise to the Bahamas featuring 40 extreme metal bands. You'd think I were the 1% or something. No, I just like credit cards and extravagances. Seriously though, I couldn't pass up an opportunity to see Behemoth on the high seas. I hope they sell goats on the ship to sacrifice. I don't think I can fit one in my carry-on.

Man, I have a feeling I'm going to be fighting with SVN for a while on this. Again, fuck me.

The Autonomy situation is still a mess. Exporting the data didn't work, probably because it's low on resources. I'm thinking it actually makes a staging copy on the origin server, and then transmits it to the destination server. Well, I don't think there's enough space on the origin server. So we're (welllll, not so much me, as I'll be having fun in the sun) going to have to initialize it and re-index from scratch. What a pile of shit.

Anyway, back to fighting with Subversion. Can it be cruise time yet?

User Journal

Journal Journal: Big Trouble in Little Autonomy

Autonomy's IDOL server is causing us problems again. Probably not as many problems as HP, but problems nonetheless.

Firstly, we're running into INDEX QUEUE FULL exceptions possibly nightly. They're filling up our exception log database, and causing data to be lost. It seems to be happening between 8:30 PM and 9:30 PM. Weird.

While I was investigating that issue, I saw that the content/nodetable/ directory is filling up with 1GB entries that look like nodetable-nddX.db where X is an incremental number. Between 1-3 of these per day, which has caused us to eat through our 80 GB share in a month. At this rate, we've only got 9 days left, and I'll be on a boat to the Bahamas.

After talking to Autonomy support (who are probably super busy trolling Glassdoor), they suggested that our server is extremely fragmented. I tried running a DRESYNC, but it didn't do anything. Well, they suggested that that probably means the system didn't have enough resources to finish the task, which is probably true. The damn thing is using all the memory on the box and it's almost at 80% disk space. So what now?

Well, now the only option I have is to do an export to another database, DREINITIAL on the offending prod servers, and export the data back into them. I'm guessing it just knows to not fragment that shit or something, I don't know? We'll see tonight.

The shitty thing is, I was all raring and ready to do some solid dev work this week, and it has just not been my week. Operations keep hitting me with little bugs that I can't fix right now, but no less annoy me. It both annoys me that they bug me and that the bugs exist.

I made some solid progress on Vrapper last night, but time flies. Finally had some time to myself and my mother calls. This always happens. But instead of hitting the ignore button, I slid it to answer - which SHOULD NOT ANSWER THE CALL because Google Voice screens them. Well, apparently it did, and while I was waiting for the ringing to stop, I was talking out loud bitching to myself about how every time I get a night to myself, my mom or sister call me. I don't know how much of that rant she heard, but god I felt dumb. Note to self: stop making audible notes to yourself.

Now I'm trying to decide whether to hang out and do some development for Finance, or to head home and work on Vrapper until I have to come back tonight. Ehh, I suppose I can code for an hour. Should be able to get something done in that time.


Journal Journal: Exploring Teradata for Signs of Life 2

First of all, as I mentioned in my previous post, I wanted to talk about archiving my Slashdot journal to my Google Docs (Drive, whatever) account.


I moved all one 128 posts by hand to a Google Drive folder. Lots of copy/pasting. Now all my text is searchable within my Drive account, which I think is awesome. I still like being able to troll through old entries on Slashdot, but if /. should ever abandon me (God forbid), at least I have liberated my data.

Second of all, I am just now noticing comments some of you have left on this journal, some many years ago. My apologies for never writing back, I honestly didn't think anyone read this but me, which is why I write it the way I do. It's for me to look back on, reminisce, be embarrassed by, and remember how I did things (man, I can't tell you how many times I've looked back to Security Initiative 2008 to remember how to work with encrypted drives). But I do write it with the intention of making it open for errrrybody.

On a total tangent, I've been battling with this health issue where I can't seem to get a deep breath very easily. Usually requires yawning to satisfy my "air hunger" and I noticed that sitting up straight helps, but man it's getting annoying. Googling the issue reveals no real cause (anxiety [I have none], artificial sweeteners [been drinking them most of my life, never had problems before], asthma [don't have it], etc) or reason for concern, but it's annoying. And so I suffer. Whatever.

Ok, on to Teradata. I'm trying to aggregate some data from some Teradata tables for our finance group. with little to no information and not much assistance on the matter. I was given a sample SQL statement and a list of demands (requirements). So far, I've requested access to the tables with our application ID and I've been able to execute the sample query with some simple modifications, (they were executing it as an openquery call through SQL Server - ugh).

But not all the data in the demands (requirements) was in the query, so I need a way of seeing the structure of the tables. Teradata SQL Assistant is helping with this a bit. It's not as sweet as DBViz or PL SQL Developer, but it's better than running or which isn't even working - keeps timing out. But in SQL Assistant, there are views. I right clicked on "TablesV" and hit browse and it populated a query statement for me. I added in a WHERE clause and got all the column names.

Select DataBaseName, TableName, Version, TableKind, ProtectionType, JournalFlag, CreatorName, RequestText, CommentString, ParentCount, ChildCount, NamedTblCheckCount, UnnamedTblCheckExist, PrimaryKeyIndexId, RepStatus, CreateTimeStamp, LastAlterName, LastAlterTimeStamp, RequestTxtOverflow, AccessCount, LastAccessTimeStamp, UtilVersion, QueueFlag, CommitOpt, TransLog, CheckOpt
From DBC.TablesV
WHERE DataBaseName = 'myDBName'
AND TableName = 'myTableName'

(By the way, does anyone know how to format code in these journals? They seem to have removed the "code" tags, and "pre" doesn't work either.)

(More tangents: I guess my breathing issue is on Wikipedia: Dyspnea, again none of those things sound like anything I have. Weird.)

(Can you tell I have A.D.D.?)

After getting all the column names, it becomes a little easier to figure out what goes to where and what I need to query.

User Journal

Journal Journal: Hey, Boooooodhi!

Well, I'm officially a nerd again.

After almost 3 years of living it up as a playboy - which has been mostly awesome, mind you - I have returned to my roots. Whilst undergoing my transition, I all but dropped my geeky background in favor of hard drinking and rough sex. But now I've met a beautiful girl who gets me, and thus, the conquest for conquests has come to a halt and now I need another hobby. I really have missed my projects.

But in the past, most of my projects have been self-serving. I've been wanting to get into open source for a long time but never knew where to start. It was always so intimidating and complex. But since working this developer job, nothing seems impossible anymore.

So I decided to start with a small, but meaningful project: Vrapper. Vim key bindings in Eclipse is the holy grail of development environments for me. The fluid movements of Vim combined with the robust error-checking, auto-building, and shortcuts of Eclipse makes for a tasty deal. But it is by no means a complete project. Vrapper aims to implement all of Vim's features inside an Eclipse editor. Easier said than done.

Nevertheless, I began implementing the :sort command to get a feel for developing on the project. Just as I was making some major headway, my old Debian system crashed, and failed to come up right. I couldn't login using Gnome, and XFCE just failed to open. When booting Single User mode, GUIs were non-existent. I got frustrated and went and bought a new Sony Vaio T Series Ultrabook, and a new 6 gig HP. But I can't pick up the desktop until mid-December, so I went back to my bricked PC and played with it a little more.

I found I could fire up TWM - that godawful super old window manager. It was good enough to download a new Linux distro and burn it to CD. I decided to try Linux Mint. It looks beautiful, but it ran slower than a dog on downers. So I downloaded a few more distros aimed at older PCs and tried each one out. Puppy Linux threw a kernel panic, DSL didn't boot to a graphical environment, but Bodhi is rocking and rolling. Like, screaming fast for an old 1 GB Intel Celeron-based Compaq Presario.

So it looks like I'll be back on development soon, which is good. I've been chatting with the maintainer of Vrapper, and it sounds like he could use some help. And I'm more than happy to help.

A few more topics I would like to cover in the future:

* Putting Linux on a Sony Vaio T Series Ultrabook (shit is not going to be easy)
* Putting Linux on my new Desktop
* Copying all these Journal entries to Google Docs, to have a backup in case Slashdot ever decides to stop hosting journals, since they seem to have really made them not much more than a footnote on the website.
* Vrapper, and how awesome it is

It's good to be back.

User Journal

Journal Journal: Autonomous Love Hate

We use Autonomy's IDOL search engine extensively at work and have become sort-of experts on it. Well, to a point. See, Autonomy don't give out help and documentation all willy-nilly. You've got to pester the shit out of them to get anything useful.

Their documentation is shit. There's like, a 500 page PDF of server operations, but good luck with developer documentation. There's not so much as Javadocs for their API.

During this whole process, we've run into capacity issues. IDOL was taking around 16 seconds per index transaction.

I could see an abundance of connections on the Autonomy server in the status of FIN_WAIT2. This means the transaction has completed and it is just waiting for the client (our message processor) to close the connection. We are using Autonomy's API to index data, and the API itself is taking around 16 seconds to complete a connection, while the actual index transaction really only takes a few milliseconds.

I decompiled their code to see that they aren't releasing the connection when they should be which I believe is causing this FIN_WAIT2 problem.

According to the HttpClient documentation:

"Release the Connection: This is a crucial step to keep things flowing. We must tell HttpClient that we are done with the connection and that it can now be reused. Without doing this HttpClient will wait indefinitely for a connection to free up so that it can be reused.

Using the exelent Java Decompiler by Emmanuel Dupuy, I was able to see exactly where they weren't calling method.releaseConnection(), and I pointed it out to them. Lawyered.

So now we're just waiting for them to admit they fucked up and give us an updated version of the API.

In the mean time, I talked with our server team to have them decrease the timeout on FIN_WAIT2s from 60 seconds to 3 seconds in /etc/sysctl.conf. I now no longer see the FIN_WAIT2s hanging out there. However, the connections are still taking around 16 seconds to complete, so I still think the API needs to be fixed to release the connection.

I'm wondering if there's a super-hack method to force the connections to close. I don't have access to the HttpClient library, because it is wrapped inside the ACI API, and that is just a JAR, no source. I'm going to do some digging though and see if I can force that to close. Last resort, if they won't fix this for us, is to write my own indexer client. Can't be terribly difficult. I have extensive experience with HttpClient from my previous project. Dare me to do it.

User Journal

Journal Journal: Cap'n Jack(off)

Well, I figured I should update since the last post was all doom and gloom.

I made it. A month late, albeit. Given it was a 4 month project, I missed my goal by 25%. Not terrible, but the important thing is, the release went well. We had about a week of followup releases to
fix small things that were causing big problems (read: financial). But after that, we've been running pretty strong. Carriers have been using my app and it's saving us around 125 phone calls on busy
days. Which is awesome.

My next enhancement is going up on Monday. That will include just some informational items, but it should continue to save more phone calls.

Then we've got two more bigger releases going out in the following weeks to add more productivity enhancements. Sweet.

On top of everything, one of my team members is quitting, and another is moving back to India to get married (why would anyone want to do either of those things?!). But the first one leaving opens up
a slot for a promotion for me. I could fucking use it. Money hasn't exactly been flowing in lately.

I took out a Chase Freedom card ($5k limit) to help finance my Barge to Hell cruise at the end of the month and my Fest 11 trip. I was hoping I'd get a bonus for completing my project but I haven't
heard shit about that. Can't count chickens...

So I'm starting to feel more comfortable with Spring, Maven, JiBX, Quartz - just about everything. Except Wicket. Wicket is the fucking worst. I hope it dies a horrible death. So yeah, looking for
alternatives to Wicket in our next big project.

Speaking of making big decisions, I also made note that I was interested in the Architect position here, when that becomes available. Whether or not that will happen remains to be seen, but I figured
I'd plant the seed.

Well, that's about all I've got. Time to quit jacking off and get back to work. I have this whole goddamn modal window to design using fucking Wicket. FML.

User Journal

Journal Journal: Cap'n Time Crunch Part II


So, it's been almost two months since I've been slaving away on this project, working nights and weekends to get it close enough to call done.

Now I'm down to five days (including today which is almost over) until we go to production. Then we have a week to test and work out any major bugs and we're releasing to our customers. Crazy.

My deadline slipped by a week, but I can blame it on the other team because they have a critical component to release before I can do anything.

I should mention, I reached my previous goal of getting it done enough to demo to our customers in L.A. That was so fucking cool. I mean, the fact that I didn't think I could do it, and I did. Nailed
it, even. That's what needs to happen here with this actual release. It's gonna be a big fuckin' deal.

Now I'm just fighting fatigue and burnout. Seriously feeling overworked and underpaid. Thankfully, my dating life has been on the uptick, which has been nice and distracting from the day-in day-out
stress. I've been seeing this gorgeous girl who asked me out through Facebook. I'm so stoked about that, I almost want to buy stock in Facebook. loljk.

Anyway, back to my time crunch. Peace, bitches.

User Journal

Journal Journal: My Journey to Find a Java-based XML Diff Util

I hope to save some headaches for other people by going through my own

I currently have the need to determine the difference between two XML
documents. Not a line-by-line unix-style diff utility, but a nice
DOM/Tree/XML document as a result.

So let's start, shall we?

First up, VMTools seemed promising. It looked to do what I needed it to
do. But after importing it into my Maven repository, and running a
test case with their sample code,
it became all too clear that they were using a very outdated JDOM.

java.lang.NoSuchMethodError: org.jdom.Element.addContent(Lorg/jdom/Element;)Lorg/jdom/Element;
        at org.vmguys.vmtools.ota.OtaUpdate.generateUpdate(OtaUpdate.java:319)
        at org.vmguys.vmtools.ota.OtaUpdate.generateDiffs(OtaUpdate.java:226)
        at org.vmguys.vmtools.ota.OtaUpdate.generateDiffs(OtaUpdate.java:181)
        at com.uprr.streamline.shipment.mgmt.core.notificationMessage.carrier.XmlDiffTest.testDiff(XmlDiffTest.java:92) ...


Next up is X-Diff, which
looks like it was written for an early-2000s era masters thesis by the
looks of the website.
Oh, nvm, it was.

Let's hope it works better than it looks.

Opening up the zip file, we run into... a makefile?! What is this,
amateur hour? The entire package consists of 5 files: XDiff.java,
XHash.java, XLut.java, XParser.java, and XTree.java.

After dicking with this one for way too long, I'm giving up. It's clear
this dude used Vim or Notepad++ at the very most to develop this,
because it is very amateurish, though credit where it's due, I'm sure
the implementation is entirely scientifically correct. Just looks like
shit and probably won't integrate well with my app. Saving it as a last

Next, I tried XmlUnit. This looked promising, and I was able to get it
from the Maven Central Repo, which was nice. Upon trying the diff
option, I got this as a result:

  differences: [Expected number of child nodes '11' but was '15' - comparing at /root[1] to at /root[1], Expected sequence of child nodes '3' but was '5' - comparing at /root[1]/whatsInTheBucketMan[1] to at /root[1]/whatsInTheBucketMan[1], Expected text value '

        ' but was '
        ' - comparing

          at /root[1]/text()[3] to
          at /root[1]/text()[3], Expected sequence of child nodes '5' but was '7' - comparing at /root[1]/whatsInTheBucketMan[2] to at /root[1]/whatsInTheBucketMan[2], Expected text value '

        ' but was '

        ' - comparing

          at /root[1]/text()[4] to

          at /root[1]/text()[4], Expected sequence of child nodes '7' but was '9' - comparing at /root[1]/whatsInTheBucketMan[3] to at /root[1]/whatsInTheBucketMan[3], Expected number of child nodes '7' but was '3' - comparing at /root[1]/drink[1] to at /root[1]/drink[1], Expected attribute value '1' but was '4' - comparing at /root[1]/drink[1]/bucket[1]/@value to at /root[1]/drink[1]/bucket[1]/@value, Expected text value '
                ' but was '
        ' - comparing
                  at /root[1]/drink[1]/text()[2] to
          at /root[1]/drink[1]/text()[2], Expected attribute value '2' but was '4' - comparing at /root[1]/drink[1]/bucket[2]/@value to at /root[1]/drink[1]/bucket[1]/@value, Expected sequence of child nodes '3' but was '1' - comparing at /root[1]/drink[1]/bucket[2] to at /root[1]/drink[1]/bucket[1], Expected text value '
                ' but was '
        ' - comparing
                  at /root[1]/drink[1]/text()[3] to
          at /root[1]/drink[1]/text()[2], Expected sequence of child nodes '4' but was '2' - comparing
                  at /root[1]/drink[1]/text()[3] to
          at /root[1]/drink[1]/text()[2], Expected attribute value '3' but was '4' - comparing at /root[1]/drink[1]/bucket[3]/@value to at /root[1]/drink[1]/bucket[1]/@value, Expected sequence of child nodes '5' but was '1' - comparing at /root[1]/drink[1]/bucket[3] to at /root[1]/drink[1]/bucket[1], Expected sequence of child nodes '6' but was '2' - comparing
          at /root[1]/drink[1]/text()[4] to
          at /root[1]/drink[1]/text()[2], Expected sequence of child nodes '9' but was '13' - comparing at /root[1]/drink[1] to at /root[1]/drink[1], Expected text value '
' but was '

        ' - comparing
  at /root[1]/text()[6] to ...umm, cool story, bro. Unfortunately, that is not the format I need it
in. Because, at this point, I'm back to parsing. I just want a list of
nodes, or even a tree would work. Nodes added, nodes removed, and nodes

Still, this one has potential, but would require me to take the code
into my own hands, much like X-Diff.

3DM is a 3-way XML merging and
differencing tool. I'm not sure why one would need to merge things 3
ways. Maybe in the case of revision controlling and patching. But ok,
anyway, that's not what I'm after. Does it do a diff? It does do a tree diff,
much like I would want, but it seems to be pretty custom. They do note
that there is another diff tool to try: fc-xmldiff.

fc-xmldiff - man, developers are
really not good at marketing. I'm just going to call it "FUCXML" (read:
"fuck xml"). After just briefly looking at this, it is also going to

Next, I will look at DiffX. This
seems to be a fairly robust project, but I haven't dug enough into it to
see for myself. I am putting this on hold for now, but will probably
post an update when I come up with something. More than likely, I will
end up rolling my own using one of these projects.

Le sigh.

User Journal

Journal Journal: Cap'n Time Crunch

Fuck, I am stressed.

I slept horribly last night with dreams about this project. One dream was weird - Gared O'Donnel from Planes Mistaken For Stars was playing a show, and gave me a new book of his to read. The book
featured many technical specifics about my company and project. I was like, "Gared! I didn't know you worked here before!" Yeah, that one was stupid.

But then it got real fucked up when I actually started stressing about the project timeline in my dream. Ugh. I can't even get away from it in my sleep. Might as well not sleep then.

I am scheduled to go to production on the 26th. That's a week away. And we don't even have anything in test yet. I don't know that my contractor is feeling the stress like I am, and I don't know if I
should make him feel it too, or what. There's a reason I never wanted to be a manager. But I'm essentially the project manager of this particular project, and it's success or failure is solely my
success or failure.

I just need it to be about 75% functional for the end of the month, and then we can work on the final 25% in May. Most people I've talked to about my situation aren't envious of me. Yet I still like
this better than my other job. I like real responsiblity, and I like building things. At the old job, there was no satisfaction whatsoever. My servers were either up or they weren't. That was the
only measurement of if I was doing a good job, and it was contiually monitored status rather than a static, viewable monument to my ingenuity.

I have accepted that there will be no failure on this project. Success is the only possible outcome. It is not boolean.

It's almost 5:00 PM here, but I'm not leaving until I have this Wicket modal window showing all the information I want it to show.


Journal Journal: Explain It to Me Like I'm 5

I wish people were better at explaining things.

Whenever I want to know how something works, I don't need to know
philosophy behind it and the 101 class, and shit. I need to know how it
works within the context of what I am trying to get done RIGHT NOW.

I realize, this is a backwards way of learning. Like starting with the
last chapter of a book, and then reading other chapters as you need to
know more of the story, but when you are on a tight deadline, I don't
have time to read the whole book. Just give me the information I need to
get this deliverable out. And given that there is an existing
architecture and I'm just adding to it, I only need to know what I NEED
to know.

I have found this to be true of Spring, Maven, and Wicket thusfar.

So, this is my quick explanation guide for the guy who just needs to get
shit done RIGHT NOW.

Dependency management. Dependencies being all the things that go
in your import statements at the top of your Java classes. Instead of
adding them to your build path through Eclipse, you do it through a
Maven POM file. Somewhere in there, are versions. They will either look
like "1.0.4" or "1.0.4-SNAPSHOT". The former is basically a release. The
latter is something that you or your team are currently working on.

If you want to reference something in your workspace, make sure that the
version of the project and the dependency in the other project match.
That's it. Save the pom files, right click on the project, Maven->Update
Dependencies and Maven->Update Project Configuration. The little red X's
should go away.

Likewise, if you want to add a new package to your file, say, GSON. Just
add the dependency, and when you update your project configuration,
Maven will travel upstream (kind of like DNS) to look for the project
(defined in the "artifactId") and will attempt to download it into your .m2 repository.

That's really all you need to know. That and the mvn clean install
command. You don't need to know about all the lifecycles and shit. Not
until you NEED to know.

See, I'm preaching efficiency, not proficiency. I'm preaching, "let's
get this project done so we can go drink at 5 PM." Ya hear?

Spring and Wicket are a little tougher to explain. I'll save that for
another post.

User Journal

Journal Journal: Surrender? NEVARRR!

I'm realizing that since blocking all my fun sites, I routinely come
back to Slashdot, and particularly my journal for brief reprieve. And
honestly, this is more fulfilling and productive than sitting on Facebook
getting dumber by reading everyone's poor grammar.


My gay? My gay what? Ugh. Anyway.

I'm dealing with a different problem here, though communication is a
piece of that. I'm working with a contractor, and I have no idea what
he's gotten done so far, but my success depends on his contributions.
I'm to the point now where I just want to give him a completely
modularized piece that he can work on at his own snail pace, and I will
figure out the rest on my own.

Group projects are the worst.

I just want to get to the point where I understand the system innately,
and I don't need anyone to explain anything to me anymore. To be a
know-it-all again. That's the best.

So it's been determined that I'm going to L.A. at the end of the month
to demo this as-of-yet non-existent product. Awesome. I'm giving it all
I've got. I need to find more in me that I can give. There's gotta be
some more in me.

I haven't counted, but I'm probably working 60 - 70 hours a week. Maybe
it's time to bump it to 80. This has become my personal responsibility,
so I can't blame coworkers, contractors, tools, or even unexpected
circumstances. No excuses. It's either done or it's not and it's my
success or my failure.

There's that old quote, "Crisis does not build character. It only
reveals it."

Or, to quote something closer to my heart, "I must always remember,
there's no point to surrender."

Let's get to work.

User Journal

Journal Journal: Do Lots of Drugs

Well, I got Eclipse fixed. It was apparently in a cycle of "Updating workspace..." I uninstalled one of the Spring plugins, which seem to be worthless anyway. For some reason, that fixed it.

Man, I just wish Eclipse weren't so cryptic sometimes.

In other news, I found that I had to block social networking sites to
keep me focused on work. I used the Firefox extension BlockSite to just
block me from going to them. Not like they're completely blocked or
anything. I can just disable it. Or go to them on my phone. But it's
less convenient, so I'm less likely to do it. Since doing that, I've
gotten probably 100% more done.

I'm still not feeling like I have a full understanding of Wicket and the
whole web piece of this code. Which is scary because I need to be in dev
this week, test next week, and prod the week after. And then I fly to
L.A. at the end of the month to showcase it to our customers. Yes. I am
worried, considering I don't even have a base product to tweak yet. Just
all backend code.

Future Brian - if you are reading this from an office, you can thank me
for not losing your job. If not, uh... sorry, bro. Do lots of drugs and
try to forget about it.


User Journal

Journal Journal: Eclipse Is My Best Friend/Mortal Enemy

Eclipse: When it works, it works better than anything in the world. When
it doesn't, well that's just called a "weekday." But seriously, there
are so many little quirks, particularly with the plugins.

I imagine it's like Firefox, where the base product is relatively solid,
but as you start adding (super useful!) plugins, things start getting
fucked up.

I don't know how many combindations of "Maven -> Update Dependencies",
"Maven -> Update Project Configuration", "Refresh Workspace", "Team -> SVN
Update", "Project -> Clean Project", "Delete Project; Import Existing
Maven Project", and "mvn clean install" to clear up existing problems.

Sometimes one of them works, sometimes I have to start digging in POM
files and making sure dependencies are all pointing in the right places.
What a clusterfuck.

I'm currently writing this entry because it's been "Building Workspace"
for the last 10 minutes. What workspace are you building? What operation
are you performing? Are you playing Tetris behind the scenes? I JUST

Currently, there is a little red X on one of my projects that shouldn't
be there. I'm trying to clear it up using some of the aforementioned
methods. And as Eclipse does whatever it is its doing, the red X comes
and goes. Like, it thinks about it. "Maybe I found that on the build
path afterall!" "Sike! Building workspace..."

And now that JRebel is in the mix, who knows what it's doing.

For some reason, it is acting so ungodly slow, I'm starting to suspect
there's something else at play. I dunno, too many projects open? Not
enough memory on my machine (duh). I know at this point I'm just
ranting, because I'm still waiting for it to build my goddamn workspace.

"Blocked: The user operation is waiting for 'Building Workspace' to


This is why I am a "Developer" or "Software Engineer" and not a
"Computer Programmer." Because if this job were just programming, it'd
be a lot easier, and I'd get a lot more done.

Ugghhhh. I'm probably just going to start over. This is ridiculous. In
the time it took me to write this entry, I was finally able to get a
"clean install" done. And guess what. BUILD SUCCESSFUL. Even though
there's still a little red X on my project. So fuck you, Eclipse. You
don't know shit.

(And this is just the first half hour of my day.)


Journal Journal: My Shiny New Developer Job

So I'm a shiny new developer. New, for sure. Shiny? ehhhh. I haven't
talked much about this job, but I think it would be fun to compare this
to my last one. Is the grass greener? Let's compare and contrast.

Pay - It is better here! I have been given a solid raise and bonus.
Plus, there are supposed to be incentives for completing projects.

Hours - About the same. Still working way too many hours, however, I can
at least get peace and quiet when I want it. Before, I always had the

BlackBerry chiming away.
Work - The work itself is a cross between horribly Enterprisey and kinda
cutting edge and cool. I am definitely learning stuff, which I really
wasn't before. The Enterprisey-ness of the whole thing sometimes leaves
me feeling helpless and confused. I'll understand it soon enough, but at
the moment, it is intimidating.

Team - My team is about the same as the last - some cool, some annoying.
One of them has the most annoying voice in the world.

Cube Neighbors - About the same. Though I don't have annoying
nose-blower guy, who may have been the worst thing ever, the surrounding
neighbors, who are mostly on the other team, are terrible. I don't know
why, I think it's because they're always talking about their mundane
bullshit, and I just don't like them as people.

Commute - Shorter, and I don't have to walk by the dregs! Plus, there is
a high class steakhouse/bar in the building with gorgeous women. Duh.
That qualifies as better.

Boss - Well, I'm working for my old boss, and I pretty much knew what
was coming with that, so I can't say I'm surprised. But it is still
better than the old boss.

The biggest challenges here, are learning the new technologies (Spring,
Maven, JiBX, Autonomy, Wicket, and many more), and trying to understand
the architecture and how it's laid out.

Well, I should say the biggest challenge is the tight deadlines coupled
with a lack of knowledge about the above. I've been spending a lot of
time outside of work here just trying to get an understanding of
everything. Shit's rough, yo.

But I think it's coming along. Just not as fast as any of us would like.
First, I learned Autonomy. It's really not too bad. It's a search
engine. You send it XML, or this proprietary IDX format (I'm doing XML)
and if all goes well, it indexes it! Then you have to configure it to
index on certain fields, tell it which fields are integer and date
fields, etc.

So to do that, you need to query a database and get information. We're
using Spring JDBC, which I think is kind of verbose, but I suppose it's
not as bad as regular old JDBC, which is all I've done before. But it's
certainly not as pretty as ColdFusion queries.

So after you've got your queries, you populate DTOs or Models with the
data. Then you send it off to Autonomy using their ACI API. Which is
just HttpClient wrapped in their own code.

Then, you need to be able to query it. To do that, you have to be able
to take XML and turn it back into the DTOs or Models. For that we use
JiBX. It's super unfriendly getting your JiBX XML file set up, because
it's all compile-time stuff, which means you don't get shit for debug
options. But if all goes well, JiBX will take that XML and automatically
turn it into a DTO or model object. That's pretty nice.

Then I started working with Wicket. This is the part I haven't been
looking forward to. At the moment, the biggest problem I'm having is
keeping everything straight in my head. Like, "Oh, where did I see the
call to .search()?" or "Where the fuck is the Spring context XML file
that instantiates that bean?!" Christ. That's the stuff that makes this
so slow. But it's coming along.

JRebel is nice.

I guess that's my update for now. I need to get back to coding.


Slashdot Top Deals

The trouble with opportunity is that it always comes disguised as hard work. -- Herbert V. Prochnow