Archive for the ‘Personal’ Category

My Buddy Boy… Some Bad News


25 Jul

Buddy has been sick off and on for a few weeks now in various forms and to various degrees. He developed this little light, rare, cough… Then a week and a half ago He was throwing up his food and we saw blood. We took him to the emergency vet and had him checked out, we had an x-ray done looking for blockages in his digestive track, there were none. We did see something in his lungs. The normal vet thought it was probably a little bronchitis or similar and advised waiting a few days to see what happened. It got worse and his breathing became labored. We got him back in for more X-Rays just this Friday, and the results suggested one of two things.

There is a very real possibility that he has cancer of some sort. There is a more slim possibility that he has a systemic fungal infection.

Of the two we’re hoping for the yeast infection (and 6-12 months of Meds.) Because of how the X-rays look and how bad shape he’s falling into so fast… If it’s cancer… It’s pretty much a death sentence. So we’re waiting for results on his blood tests to see if its a fungus. And we’ve been trying to have as many good moments with him as we have left. Moments where he’s wagging his tail. Times when he wants to play ball. Even just times when he wants to cuddle. The house is already very different. I find myself crying at random memories. He gave me a face bath on Friday night… I couldn’t help but wonder if it was going to be the last one I’d get.

He’s not even 5 years old now, and he’s been through so much. He’s had such a hard life, medically. He’s survived parvo, allergies, too many infections to count. In the end I’m not crying for him, he’s going to a better place his pains get to end now. I’m crying for me… Because I already miss my friend now and It hurts to think how much I’ll miss him when he’s gone.

There’s very little blame to be had here. We feed him the best, we take care of him as best we can, we play with him, love him.

I wish that I had something better to put here. Something funny, or insightful, or informative.

I really do.

Time based bloom filters


06 Jan

I find this concept fascinating and plan to investigate further down this road.

Erlang… Starting to come together…


30 Mar

I’m finally starting to “get” erlang… just a little bit… I’ve managed to make several TCP daemons… an echo server, a reverse echo server, and a server which spits out an md5 values of the input given.

Yea… I know… Lame… but its one hump I’m finally over…

Debian Lenny, Avahi, AFP… Linux Fileserver for OSX Clients


12 Feb

If you’re like me you have an OSX computer or 3 at home, and a debian file server. If you’re like me you hate samba/nfs on principle and want your debian server to show up in finder.  If you’re like me you arent using debian 3 which is what most of the walkthroughs seem to expect…  This is how I did it… With Debian Lenny.

What we’re using, and why:

  • Avahi handles zeroconf (making it show up in finder) (most howtos involve howl which is no longer in apt)
  • netatalk has afpd
  • afpd is the fileserver

From: http://blog.damontimm.com/how-to-install-netatalk-afp-on-ubuntu-with-encrypted-authentication/

  • apt-get update
  • mkdir -p ~/src/netatalk
  • cd ~/src/netatalk
  • apt-get install cracklib2-dev libssl-dev
  • apt-get source netatalk
  • apt-get build-dep netatalk
  • cd netatalk-2.0.3

From: http://www.sharedknowhow.com/2008/05/installing-netatalk-under-centos-5-with-leopard-support/

  • vim bin/cnid/cnid_index.c ## replace “ret = db->stat(db, &sp, 0);” with “ret = db->stat(db, NULL, &sp, 0);” line 277
  • vim etc/cnid_dbd/dbif.c ## replace “ret = db->stat(db, &sp, 0);” with “ret = db->stat(db, NULL, &sp, 0);” line 517

Mine

  • ./configure –prefix=/usr/local/netatalk
  • make
  • make install
  • vim /etc/rc.local ## add “/usr/local/netatalk/sbin/afpd”
  • /usr/local/netatalk/sbin/afpd

From: http://www.disgruntled-dutch.com/2007/general/how-to-get-your-linux-based-afp-server-to-show-up-correctly-in-leopards-new-finder

  • apt-get install avahi-daemon
  • vim /etc/nsswitch.conf ## make the hosts line read “hosts: files dns mdns4″
  • cd /etc/avahi/services
  • wget http://www.disgruntled-dutch.com/media/afpd.service
  • /etc/init.d/avahi-daemon restart

in case that file drops off the face of the net, this is its contents (except “< ?” is “<?” and “< !” is “<!”) :

< ?xml version="1.0" standalone='no'?><!--*-nxml-*-->
< !DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service -group>
<name replace-wildcards="yes">%h</name>
</service><service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>

At this point your server should show up under the network in your finder… and you should be able to connect with any system username/pw combo

a dumbed down version of wpdb for sqlite


18 Nov

I’ve been working, gradually, on a project using an sqlite3 database (for its convenience) and found myself missing the clean elegance of wpdb… so I implemented it. It was actually really easy to do, and I figured I would throw it up here for anyone else wishing to use it. The functionality that I build this around is obtainable here: http://php-sqlite3.sourceforge.net/pmwiki/pmwiki.php (don’t freak… its in apt…)

With this I can focus on the sql, which is different enough, and not fumble over function names and such… $db = new sqlite_wpdb($dbfile, 3); var_dump($db->get_results(“SELECT * FROM `mytable` LIMIT 5″));

the code is below… and hopefully not too mangled…

< ?php
 
class sqlite_wpdb {
 
        var $version = null;
        var $db = null;
        var $result = null;
        var $error = null;
 
        function sqwpdb($file, $version=3) { 
                return $this->__construct($file, $version); 
        }
 
        function __construct($file, $version=3) {
                $function = "sqlite{$version}_open";
                if ( !function_exists($function) )
                        return false;
                if ( !file_exists($file) )
                        return false;
                if ( !$this->db = @$function($file) )
                        return false;
                $this->version = $version;
                $this->fquery = "sqlite{$this->version}_query";
                $this->ferror = "sqlite{$this->version}_error";
                $this->farray = "sqlite{$this->version}_fetch_array";
                return $this;
        }
 
        function escape($string) {
                return str_replace("'", "''", $string);
        }
 
        function query($query) {
                if ( $this->result = call_user_func($this->fquery, $this->db, $query) )
                        return $this->result;
                $this->error = call_user_func($this->ferror, $this->db);
                return false;
        }
 
        function array_to_object($array) {
                if ( ! is_array($array) )
                        return $array;
 
                $object = new stdClass();
                foreach ( $array as $idx => $val ) {
                        $object->$idx = $val;
                }
                return $object;
        }
 
        function get_results($query) {
                if ( !$this->query($query) )
                        return false;
                $rval = array();
                while ( $row = $this->array_to_object(call_user_func($this->farray, $this->result)) ) {
                        $rval[] = $row;
                }
                return $rval;
        }
 
        function get_row($query) {
                if ( ! $results = $this->get_results($query) )
                        return false;
                return array_shift($results);
        }
 
        function get_var($query) {
                return $this->get_val($query);
        }
 
        function get_val($query) {
                if ( !$row = $this->get_row($query) )
                        return false;
                $row = get_object_vars($row);
                if ( !count($row) )
                        return false;
                return array_shift($row);
        }
 
        function get_col($query) {
                if ( !$results = $this->get_results($query) )
                        return false;
                $column = array();
                foreach ( $results as $row ) {
                        $row = get_object_vars($row);
                        if ( !count($row) )
                                continue;
                        $column[] = array_shift($row);
                }
                return $column;
        }
 
}
 
?>

Writing your own shell in php


03 Aug

I’ve always wanted to write my own simple shell in php.  Call me a glutin for punishment, but it seems like something that a lot of people could use to be able to do… If your web app had a command line interface for various things… like looking up stats, or users, or suspending naughty accounts, or whatever…. wouldnt that be cool and useful?  Talk about geek porn.  Anyways this this morning I got around to tinkering with the idea, and here is what i came up with… It’s rough, and empty, but its REALLY easy to extend and plug into any php application.

apokalyptik:~/phpshell$ ./shell.php

/home/apokalyptik/phpshell > hello

hi there

/home/apokalyptik/phpshell > hello world

hi there world

/home/apokalyptik/phpshell > cd ..

/home/apokalyptik/ > cd phpshell

/home/apokalyptik/phpshell > ls

shell.php

/home/apokalyptik//phpshell > exit

apokalyptik:~/phpshell$ ./shell.php

See the source here: shell.phps

building sed for osx


24 Apr

I work in linux a lot… not bsd. So the OSX (bsd style) implementation of sed really throws me for a loop when I go text-file-spelunking, whats worse is that my scripts using sed aren’t portable between the two OSs.

A quick googling this morning landed me here: http://wiki.octave.org/wiki.pl?OctaveForMac which gives perfectly good instructions on installing sed. except it didnt work. I grabbed the latest version of sed (4.1.5) and got the error

sed: 1: "install_sh=/Users/apoka ...": command i expects \ followed by text
sed: 1: "install_sh=/Users/apoka ...": command i expects \ followed by text

Ironic, huh? Well taking a guess that at some point sed hadcome to depend on its own functionality to configure itself I jumped back a version… Figuring i replace BSD sed with an out of date GNU sed, and then use the old GNU sed to build the new GNU sed. Which worked great. I Installed first sed-3.0.2, and then 4.1.5 in this manner:

./configure --prefix=/usr/ --with-included-regex --with-included-gettext && make && sudo make install

I’m happy with my -r again…

# date | sed -r s/'[0-9]'/'?'/g
Thu Apr ?? ??:??:?? PDT ????

Daemonize Anything


10 Apr

I hacked together this little C program from this other little c program. Basically acts as an execution wrapper that lets you fork() and detach and run a command in the background with a pidfile and log file for program output. So far I havent had any problems with it… but then I’m not a true C guy so any input is welcomed.

Bella and buddy, represent’n


31 Mar

They’re down with the Dubya P.







Well I’m Back


14 Jan

After a week (plus 2 days) vacation I’m back in thw swing of things… At least until the 20th when I take off to meet up with the gang once more.  I’ll be glad when all this traveling is done… I’m something of a simple homebody and this shuffling from one place to another makes me itchy :)

The vacation was OK. It rained almost constantly, was cold. The drive up was the worst, it just happened to coincide with a huge storm, and we could hardly see the road as we drove through the mountains (thank God for GPS.) There was no fence so we had to stand out in the rain to let the dogs do their business. The shops were alright, a lot of them closed for THEIR vacations (being the tourist off season.) Before we left the window in the kitchen sprung a leak just in time for a huge rainstorm. Bella went into heat (again) and had to wear a diaper the whole time. The dogs didn’t behave well (dogs neverdo when cooped up for a week solid (on top of the hormone cocktail of bella going into heat.))  We did get about 3/4 of a day on the beach in the sun towards the end.

We’ll get bella fixed as soon as shes out of heat. We would have done so earlier but for various medical complications (eye surgery, then heat, then the new cat brought ringworm to the home with it, and now heat again.)  Dont worry, we’re not planning on having our own puppies.  Not at this juncture in our lives anyway.

All said, I was relieved to finally get home where things made sense, and even if bad things were to continue plaguing us  we could deal with it in the known comforts of our own home.

CodeWord: Apokalyptik

The random things that spew forth from my brain…