1001010.com

one zero zero one zero one zero dot com
one hundred ten ten dot com
binary representation of ascii 'J' (74) dot com

home code projects photos wiki resumé tombstone ?
One zero zero one zero one zero (1001010) -  a phrase that I tend to mumble when people say "So, you're a programmer...  for computers and stuff?" just to geek out.  It's not a magic number, it's just the first letter of my name "Jason" converted into binary.  US-ASCII-7 "J" == "74"10 == "1001010"2/*itoa((int)'J',szBuffer,2);*/
"But why use it as your domain?"  Well, (0) all the obvious names have been taken by now, (1) it's super geeky!  and (2) I really didn't care to drive traffic to this site - I only have it for personal research.
-Jason  De Arte
Jason.DeArte@Gmail.com | Toymaker / Programmer

Syndication sources experiment: Subscribe with Bloglines Atom Index Master Archive Index RSS 1.0 RSS 2.0
Posted by Jason on Friday September 21, 2007 07:56 PM  |  Comments

I just started
http://mysql-code.com/wp/ as my own version of http://ora-code.com

Why? well simply, when my server apps send off oracle error emails to the IT guys, I automatically format it with a link to ora-code.com so that they can get some info about the error code. Politics aside, it helped the junior DBAs and IT guys to better understand the problem and fix the errors faster.
Instead of hours, it took moments because they could just click on a link and it told them everything they needed to know about the problem.

Now I have a site for my MySQL server project. Now I can send them auto-formated error emails with links to that site - and if I don't have a page set up - I'll add it.

It should be educational for me.

Posted by Jason on Tuesday September 11, 2007 07:32 PM  |  Comments

Do you see this?

https://shop.mysql.com/enterprise/?rz=s2

To me, in the high availability and high demand environment that I work in, that single server license costs $5k

That's for ONE server. Sure it's not the wonky per-cpu model of Oracle, but it's still a cost. I'll probably need several on the project I'm working on so it's not just a one time fee - it's yearly. Combine that with the new hardware costs and the hiring of new DBA staff with MySQL experience to shadow our Oracle DBAs (or retraining) - MySQL is not fracking free! It's downright expensive.

I am soooo tired of people telling me that MySQL is cheaper than Oracle. Just because there's a free version for everyone to play with, that doesn't mean that your going to run the free version in a production environment.

I can already hear the whining "But you don't have to pay for it, it's open source man - it's like free love and stuff"
PUT DOWN THE WEED AND LISTEN. YES I FRACKING DO HAVE TO PAY FOR IT YOU FRACKING HIPPIE!

The free version doesn't come with support. You get what you pay for. We live and work in a capitalist marketplace where if you like something, you buy it to encourage the production of similar products. It's sometimes called voting with your wallet.
If the fecal matter hits the spinning blades of doom - I want someone on the phone ASAP. I've got somewhere over 1k employees using my software to provide support to some 9 million customers. Downtime is NOT an option. There is no way in hell I'm going to tell them - "Ooops, sorry, my bad - I got the free version and even if I buy it now, it will take a few buisness days before support starts."
Yea, that's a big I don't think so. I'd like to avoid being skinned alive if I can help it.

I just needed to vent.

Posted by Jason on Tuesday March 20, 2007 10:41 AM  |  Comments

For the record, I consider the Oracle tnsnames.ora to be just a file so I feel nothing for it per se. It's just a DNS file for mapping Oracle Server names to IP addresses.

However, mentioning it invokes images of suffering and woe.

With all the Oracle servers my company runs, it's constantly out of date. To make things more exciting, the DBAs don't like the names that we (in development) give the DBs so they insist on giving it there own names. And then for added excitment we have separate DBs running in different countries - each with their own config.

So whenever I have an issue with connecting to a certain DB, I ask the DBAs for the latest settings. And as usual, I get several new conflicting tnsnames.ora entries from the DBAs and/or IT people. The only thing you can guarantee is that most of them won't work. The joy of peer based personal sneaker-net backups.

This problem is easily solvable with some simple source control.

But that will require large quantities of feces hitting a giant spinning blade of doom before that ever happens.

Thus my woe. I'm not a big enough pile of shit to effect change ;-)

Posted by Jason on Tuesday February 27, 2007 07:22 PM  |  Comments

I now have an extra 4 gigs free after removing my spam trap wiki!

I feel so much cleaner ;-)

Besides all the pr0n links, the interesting part was the groups of links that were hidden in 1px wide DIV tags. These entries never showed up when looking at the page. It was as if those responsible for adding the entries were trying to up their Google search result ratings by having more sites "link to" their site.... even if those sites never display them.

Here's how it works..

  1. Somebody with a site wants that site to become popular and rank higher in Google's search results.
  2. That somebody is usually a low quality scam site of some sort that usually promises to offer something for nothing and installs spy ware instead.
  3. That somebody gets a bot to find all the wikis out there because wikis are notoriously insecure and (by design) allow the general public to come in and edit entries.
  4. They then use another bot to connect to all those open wikis and create entries that point to their site. The links include all sorts of descriptions to what may actually be there - perfect for a Google (or similar) that's crawling the wiki to find.
  5. As an added bonus, the bot may hide the entries in 1px DIV tags so it appears invisible to the human viewer.
  6. Now, when somebody Google's for the term that has been embedded in all those wikis - their site will be high on the list. I mean, if all those sites link to it - it must be good? right? ;-)
  7. Profit! I think? Nope - that was the underwhere gnomes, and they got that way back at step 3
Posted by Jason on Saturday February 24, 2007 10:16 AM  |  Comments

Today I went to my Dreamhost control panel & it showed that I was using 1% of my 461.8GB of disk space. 1%? I've never noticed it that high before. On closer inspection that's 4.9 gig!? The last time I checked it was less than 1/2 gig.

Digging around shows that the DB used for my wiki was taking 4 GB.

My Wiki? I have a wiki?

Ohh, now I remember.
Over a year (or two?) ago I installed a wiki on this site because - well, it was easy enough to. Dreamhost has a bunch of one-click installs & all I had to do was click a button. I played around with the wiki and figured out how things worked - and then ignored it.

While I was busy with our new baby Seamus and work, automated spam bots filled my little test wiki with 4 gigs of junk!

I'm now going to go lock the wiki and find out what exactly is in there. I'll be impressed if it's all text. That's a lot of spam bot activity!

UPDATE
All Main Pages on the wiki

It's an odd assortment to say the least

Posted by Jason on Wednesday July 12, 2006 05:01 PM  |  Comments

Last week wasn't fun, my producer was out on an extended vacation durring the 4th of July holliday. Everything was fine at first - but I was quickly reminded how much meta filtering he does for me.

A coworker raised an excelent question: "Why not take your vacation when HE takes his vacation?". Unfortunatly my producer used up most of is vacation so he won't be leaving anytime soon.

Bummer.

But what if I take a virtual vacation? (we all know by now that virtual==fake, right?)
I'll still come in to the office and work - but I'll set my IM to "Appear offline" and set up my mail client to send an out-of-office email to every one!

I'll get a vacation from the distractions! Sweet!

Posted by Jason on Wednesday June 14, 2006 07:40 PM  |  Comments

This morning I was waiting around the house for the delivery guy (9am - 11am window) and I figgured I would update my resume. No - I'm not looking for a job, but I'm still getting calls from recruters and their junk in my inbox - which needs to stop. Well that and it was bugging me to think that I still has Nexa as a "current" position when I have moved on to a more appropriate position.

If you look at my resume page, you'll see bold letters at the top that read "I'm off the market"

If you look at the word doc, I changed the listed email to my gmail account and added the BOLD TEXT WITH THE BRIGHT YELLOW BACKGROUND
"Availability     OFF THE MARKET AND UNAVAILABLE AT THIS TIME this resume is here for historical purposes"

And then TWO (2) hours later, I get this jem of humor in my gmail inbox ;-)

Jason,

I assume you are currently happy at employer x as your online resume indicates I won't be a pest. I am working on an assignment in the LA area for a senior online games coder for a great developer working on an original next gen title.

If your situation changes for any reason and you want to know your options please consider dropping me a line :)

Xxxx Xxxxxxx
Vice President/Executive Recruiter
TSC Management Services Group, Inc.
NNN.NNN.NNNN ext. NN, XXXXX@XXXXXXXXX.XXX

THAT WAS TWO HOURS LATER?! WTF.

I'm honored that my skills are apparently so valuable - but let me be clear: Unless you can offer me 200K/yr to sit around an pick my nose - with a 500K restriction free signing bonus - I AM NOT INTERESTED.

I just want to know: How the frack did this guy find my resume that quickly? Is Google that powerfull or do they have other tools?

And no - I do not want to work on those types of applications at this time. ;-)

Posted by Jason on Wednesday October 12, 2005 12:17 PM  |  Comments

It's been like 3 years since I got my P4 3.06Ghz and I'm a little confused.
I thought that there would be 6Ghz CPUs out on the market by now.

What was that thing about speeds allegedly doubling every 2 years?

The fastest thing I can get from dell these days is a P4 3.8Ghz ?

Did I miss a memo? Since when is a 25% increase a "doubling"?
Could AMD's PR rating/propaganda be right? Maybe it's not about the the Hertz? I'm so confused.

::sigh::

The real problem is that after years of buying a new twice as fast PC every few years, I've been conditioned to want a new (twice as fast) PC every few years.
Right now it's just not worth it. My 3.06Ghz is just fine. And I think that weirds me out more than anything else.



But that wont stop me from looking for a faster video card ;-)

Posted by Jason on Tuesday October 04, 2005 09:41 AM  |  Comments

How many times have you heard that "you must initialize static class members in the .cpp file"?
When my team leader (Ray) saw my previous post he immediately said, "well we have put the initialization in the .cpp file".
I smirked.

That near pavlovian response is somehow ingrained in the c++ programmer's collective subconscious. I can see how, most of us were taught that the class and function definitions go into the .h file while the implementation goes in the .cpp file. And the initializing of static member would definitely fall into the category of initialization.

Have you ever even tried to do it in the .h?

Never? really? that doesn't surprise me. But did you know that it's done all over the place in the ATL?
Think about it - the ATL resides almost entirely in .h files. The exception being WinMain/DllMain exports and some calloc/realloc/free wrappers.

And there are static class members in there ...

They're initialized in the .h file ...

And they compile ...

[insert spooky Halloween music here]

Posted by Jason on Friday September 23, 2005 09:39 AM  |  Comments

Note to self: the format of static template class member is
template<class T> int Test<T>::s_counter = 0;

And don't I forget it!
(what I originally forgot was the <T> - D'oH!)

// testtemplate.cpp : Defines the entry point for the console application.
#include "stdafx.h"

template <class T>
class Test
{
public:
    static int s_counter;

    Test()
    {
        s_counter++;
    }

    ~Test()
    {
        s_counter--;
    }

    static int getInstanceCount()
    {
        return s_counter;
    }
};

template<class T> int Test<T>::s_counter = 0;

int main(int argc, char* argv[])
{
    Test<long> a,b,c,d,e,f,g[3];
    printf("InstanceCount: %d\n", Test<long>::getInstanceCount());
    return 0;
}
Posted by Jason on Thursday September 22, 2005 04:05 PM  |  Comments

I need to find a good book on dev studio scripting.

Maybe I haven't thought this all through yet, but what I think I want is something that will automatically set my "away" status text in messenger based upon events in DevStudio.

But why would you need that?

Well, just as when your status is "away" when the screen saver starts - it would nice to do the same when a break point hits or set it to "busy" when your typing in the editor.

In my scenario as soon as a break point was hit - the status would change to "Can't talk now - I'm in the debugger baby!!"

I know that nearly everything is scripted in DevStudio, there's got to be a way to monitor user / debugger events. I would hate to hack together some solution where I monitor the child processes of MSDEV.EXE and install a DirectInput global keyboard hook - and match up keyboard input to the active window.

Posted by Jason on Friday September 16, 2005 05:06 PM  |  Comments

It took me a while - I got lost again.

{mockingly shakes fist} Damn you UC regents for moving streets around so that my car's GPS gets overly confused!

I was allowed in after being buzzed in through two separate doors. Since I signed an NDA & don't want to do another full cavity search I can't and don't really want to say anything. But I could possibly describe the office as what would happen if all the stuff from every trade show Blizzard ever went to, around the world, exploded in the old GameSpy Irvine office.

Posted by Jason on Wednesday September 14, 2005 11:01 AM  |  Comments

I seem to remember an incident or two where various game developers set the address of their master server to a specific IP address, rather than a DNS name.

Can you guess what happened to those games when that server was moved to a different IP?

DING DING DING DING DING DING! That's right - it all broke. Vana - tell our lucky player what s/he's won!

Well, if you're lucky (there are more than 100 servers, the game company is still in business, there is at least one person still working activly on the codebase, and management is willing to QA, support and publish it) they might release a patch. But only if you're lucky ;-)

But if you're unlucky - well... say hello to a new friend - the ulcer.

Posted by Jason on Tuesday September 13, 2005 02:04 PM  |  Comments

OK, I get it - you copied a function that did 75% of what you want to accomplish and updated it to do your evil bidding.

But why then did you keep the original function comment???

it would be as if you had the code....


// Sometimes we need have someone else multiply radius by two
bool getDiameterFromRadius(float radius, double & rDiameter) { ... }

And somebody copied the function to do something else....


// Sometimes we need have someone else multiply radius by two
bool getCircumferenceFromRadius(float radius, double & rCircumference) { ... }

AND LEFT THE SAME COMMENT IN PLACE.

.ugh.

Posted by Jason on Wednesday September 07, 2005 05:41 PM  |  Comments

Hmm, that's not the best title - but maybe a contrived code sample or two will help out in explaining why sometimes I weep when I look at certain bits of code.

Imagine if you would, creating a context menu with a few dynamic elements without IDs


menu->append("Hello");
menu->append("This");
menu->append("is a");
menu->append("Test");

And you responded to the elements not by an ID number, but by a position index.


switch(selectedIndex):
{
    case 0: doHello(); break;
    case 1: doThis();  break;
    case 2: doIsA();   break;
    case 3: doTest();  break;
}

And then when you look at the code that creates the menu item with greater scrutiny, you notice it's not as simple as you once thought...


menu->append("Hello");
if(hasPermission(SECURITY_RIGHTS_THIS))
    menu->append("This");
menu->append("is a");
menu->append("Test");

That's why I wept.
If an unlucky user doesn't have SECURITY_RIGHTS_THIS all the following menu items will be off by one!
This isn't a hard coded COM interface contract, but it IS a handshake usage contract that a future maintenance programmer (such as myself) may not even be aware of!

So here's a simple solution (if you can't change it to use proper IDs because it would effect to many systems):
Keep a table of what menu items were added and their appended menu index. Maybe something along the lines of


enum PossibleMenuItems { pmiHello, pmiThis, pmiIsA, pmiTest, pmi_MAX };
typedef map<int, PossibleMenuItems> IndexToMenuItem;
IndexToMenuItem m_IndexToCommand;
...
int nMenuIndex = 0;
// For each item you add, append it AND record it...
menu->append("Hello");
m_IndexToCommand[nMenuIndex++] = pmiHello;

if(hasPermission(SECURITY_RIGHTS_THIS))
{
    menu->append("This");
    m_IndexToCommand[nMenuIndex++] = pmiThis;
}
...

Then in the menu handler...


IndexToMenuItem::iterator itFind = m_IndexToCommand.find(selectedIndex);
if( itFind != m_IndexToCommand.end() )
{
  switch( (*itFind) )
  {
    case pmiHello: doHello(); break;
    case pmiThis:  doThis();  break;
    case pmiIsA:   doIsA();   break;
    case pmiTest:  doTest();  break;
  }
}

Now it no longer matters if an item is not added to the menu. As long as the table is updated - I'm happy.


Blog Archives
September 2007 March 2007 February 2007 July 2006 June 2006 October 2005 September 2005 August 2005 July 2005 June 2005 May 2005 April 2005 January 2005 December 2004 November 2004 October 2004 September 2004 August 2004 July 2004 June 2004 April 2004 March 2004 June 2002 May 2002 April 2002

Powered by Movable Type 2.661

Copyright © 2002-2007 Jason De Arte, All Rights Reserved. Unauthorized reproduction prohibited. Disclamer TBD Allegedly Composited: Thursday, 02-Nov-2006 13:29:50 PST