Monday | August 30.2004


MSDN . MSDN Library . Visual Tools and Languages . Visual Foxpro
WildFire on 12:02 AM CST [ link ]



Saturday | August 28.2004


I spent most of the day talking and working with a telecom technician who works for a company that provides spanking fast DSL internet connection.

That is if 'spanking fast' is defined as the urge to apply a quick blow in the arse to the person next to you every time you get annoyed with the speed. But seriously it is faster than my 56K dial-up internet connection at home.

I even had the chance to ride on their service mobile and talk about life with him, talk about food, the sea and raising children. He accompanied me to a computer hardware retailer, gave me a discount after the owner allowed us to test the component first before even paying for it.

Sometimes we often hear the word 'sucks' being added to something. Company-001 sucks. TechBlahBlah sucks.

The world sucks.

Most often we add this word because we're dissatisfied... or probably because seeing the negative side is inherent to our human traits.

And we do this without even considering the reasons behind such thing.

This technician (I won't name names nor I would name the company since I don't like saying negative stuff to a Philippine-based company even if it is already owned by a foreign entity), works with his partner (yup just the two of them) servicing 100++ (or even greater) clients covering an area which is nTechnicians(raised to the power of 32(square miles)).

The company holds N number of employees nationwide five years ago, now they're down to N/4 and N here is a five digit number having a val(substr(alltrim(str(N)), 2, 1)) > 6. They're even planning to trim down even more.

Indeed... it is a sucky world out there.

But there's nothing we could do to improve things by re-stating the obvious.

One must unload(TheSuckinessState).

How?

There are tons of ways really.

But none of them includes including the word 'sucks' in anything that disappoints a first person's pathetic self centered soul.
WildFire on 01:54 AM CST [ link ]



Friday | August 27.2004


Got nothing else to do, buddy?

How about fretting about the arrival of the 2038 Bug... and start optimizing your programs to make them Y32768K compliant. Seriously making it Y10K compliant is enough.

Or you can HTTrack with me. The current site on my list is Microsoft.com/SQL/.
WildFire on 09:39 AM CST [ link ]



Thursday | August 26.2004


Dave Barry is blogging about his Olympic experiences. Funny stuff. He talks about drugs, taxi cabs in Athens, weightlifting facts and TIPIYOTKI!

Funny as always.
WildFire on 10:15 PM CST [ link ]


Code Dump: the time where you take a break from your programming related tasks to talk about your programming related tasks.

In PROJECT::SOPHIEAI (IUMS: Internet Usage Monitoring System), USAGE.dbf holds the records that stores the log-in/log-off information of the users of a certain internet lab/cafe at a given time and space. Along with the IDNO number of the user of course and some other fields.

Violating the second rule of normalization (or was it the third rule), I also included the TotalNumberofHoursUsed per usage and the TotalFee paid.

If you follow strictly the normalization rules, you know that you don't have to include in the database fields that can be derived from two or more fields that are already in the database.

For example if your database has fields named Field01 and Field02 with sample values 10 and 618 respectively, you don't need a Field03 which will store 628, the total of Field01 + Field02. Normalization rule will then call you moronic and consider you an outcast of the database programming world.

You deserve to be eaten alive by vultures.

You deserve a punishment such as watching Barney re-runs again and again.

But in some cases, yes... believe me... there are times when you have to violate and override this rule. These are the cases when speed-related principles are far more important. Plus... considering that these days hard disk space is getting cheaper and time (since Mida's era) is constantly gold, it justifies the normalization override process.

So back to PROJECT::SOPHIEAI.

Now because of some 'outside factors' (again), I need a patch that would make a different database, CRED_NET.dbf, which holds the fields TimeLeft and Credit be synchronized with the data USAGE.dbf holds.

Let's say USAGE.dbf records for student 0001 are (let's just take the important fields for discussion):

DATEIDNOTotalTimeFee
20040812000101:00:0025.00
20040815000102:00:0050.00


Now CRED_NET on the other hand holds how much is left for a student 0001. There are instances when the values on both databases don't synchronize. Yes the existence of these databases violate the normalization rule once again but you have read the reasons above already, right?

And can you stop reminding me about normalization rules so we can go on?

So to correct things you execute this untweaked patch (I'll call it the 'brute force approach'... 'Brute'... like 'Brute Lee')

select CRED_NET
set order to CCRENAME
do while not eof()
cIDNO = alltrim(CRED_NET.IDNO)


'··························· SECTOR.007.BEGIN
select USAGE
set order to CUSAIDNO
go top
do while not eof()
if alltrim(USAGE.IDNO) == cIDNO
cTimeCount = TimeCalc(cTimeCount, USAGE.TIMETOTAL, 1)
nCreditsTotal = nCreditsTotal + USAGE.FEENET
endif
skip
enddo
'··························· SECTOR.007.END


select CRED_NET
cTimeReflect = TimeCalc(cTimeCount, '40:00:00', 2)
nCreditsReflect = 800.00 - nCreditsTotal

rlock()
replace CRED_NET.TIMELEFT with cTimeReflect
replace CRED_NET.CREDIT with nCreditsReflect
unlock

skip
enddo

The above code works... of course, but... like any process in this world that involves brute force, it is slow.

Now replace the SECTOR.007 part of the code above with this:
   select USAGE
set order to CUSAIDNO
set filter to alltrim(USAGE.IDNO) == cIDNO
go top
do while not eof()
cTimeCount = TimeCalc(cTimeCount, USAGE.TIMETOTAL, 1)
nCreditsTotal = nCreditsTotal + USAGE.FEENET
skip
enddo

You'll see a HUGE difference in terms of execution speed.

TimeCalc is a function by the way that adds, substracts, multiplies and divides two time variables. Something which I'll post later. (You can find the basic/raw version inside the Microsoft Help and Support Site though),

Of course when you're doing these kinds of patches, don't forget the progress bars. It is a good hypnotic-mechanism for the users to develop this affinity for your software.

CodeDump-20040825.153618.End

Now back to work.
WildFire on 04:26 PM CST [ link ]


Foxpert: Security in FoxPro (Protecting Application and Data). With the advent of tools such as ReFox and UnFoxAll, this whitepaper is a must read. But it includes more topics aside from these decompilers mentioned.
WildFire on 09:22 AM CST [ link ]



Sunday | August 22.2004


Linus Torvalds' Benevolent Dictatorship
I think, fundamentally, open source does tend to be more stable software. It's the right way to do things. I compare it to science vs. witchcraft. In science, the whole system builds on people looking at other people's results and building on top of them. In witchcraft, somebody had a small secret and guarded it -- but never allowed others to really understand it and build on it.

WildFire on 12:00 PM CST [ link ]



Saturday | August 21.2004


West Wind Internet Protocols 4.55 (wwIPStuff) released. The class library supports the following:
  • SMTP and POP3 Email support

  • HTTP - Access Web content from VFP

  • Advanced HTTP support

  • FTP - Transfer files

  • Low Level Socket Access

  • Dial up Networking

  • IP Address validation

  • Fast C based Conversion Routines

Along with that release, is an insightful article: Why West Wind Html Help Builder is NOT a .NET Application.

I'm days behind linking this... Ken Levy posted the August 2004 Visual Foxpro Newsletter which contains a FAQ that answers some of VisualFoxpro-related issues.

Dan Appleman started his blog. His advice for future computer science majors and RAD is not productivity posts are an early favorite of mine... especially the RAD-related one.

So let’s get real. Bad programmers write bad code. Good programmers write good code. RAD lets bad programmers write bad code faster. RAD does NOT cause good programmers to suddenly start writing bad code.

If you can remember, a couple of months ago he enumerated why he refrains from blogging. How I wish those unmovable-arse humans I convinced to blog would also have a change of mind.

While reading Wesner Moise's blog (.NET Undocumented, one of the first blogs I subscribed to), I found out that KurzweilAI.net now has an RSS feed. I 'HTTrack-ed' that site before when I found some very very interesting AI-related articles.

If you are using the HTML version of that site and can't seem to find the syndication feed link, here's a direct link to the rss feeds.

More and more programmers who are using VisualFoxpro are coming out in the blogosphere. Here are two links that I have discovered just recently: Craig Bailey and Andrew Coates (not entirely VFP but he mentions VFP once in awhile).

I wonder if it is just me still getting used to waking up around 4AM (I usually sleep around 3AM) or my FireFox browser, that makes the OZ 2004 Speaker section scramble the names and the pictures. It works fine on the IE6 browser though.

Visual Foxpro on GotDotNet.

Here are some alternative programming fonts. Nice... thanks Vernon Labayog for that link.
WildFire on 05:41 AM CST [ link ]



Friday | August 20.2004


Shit happens.

What a way to start a blog.

QS and I had a difficult day. Although our problems are unrelated and we're not up against each other, still it doesn't remove the fact that crap happens.

But let's look at the good side of things... at least she's blogging once again.

Although I do enjoy freelance software development very much, it doesn't remove the fact that outside factors come in the way. These outside factors are often used to blame the programmers for every problems popping out of this world.

The user is using the program you created, sidetracked and visited a spyware/trojan-infested site, crashed the computer and spread the worm in the local network, eradicated his documents, impaired the OS which in turn hangs the program.

Guess who they're blaming?

They blame the programmer and his Level42 idiot-proofed database application.

Of course this is just the simplest variation of certain problems a freelance developer encounters. I could go on and on enumerating them all.

Yes... 'freelance software development' may sound sweet to one's ears, yet... it holds a lot of risks too.

While in a non-freelance software business, clients and some users tend to blame 'the company' for any other outside related bugs too, the developers have a better shield. In fact, some are even protected with seven headed salivating bulldogs guarding the programming zone.

While in worst cases, notorious (or shall we use 'careless' to be less harsh) programmers get fired or castrated, you seldom see them being blamed directly by users or clients. Experts would even sometimes blame the marketing department or the head for enslaving these borgs in four-sided cubicles.

You don't see 'the programmer Mr. Anderson coded this bug, redirect your hate mails to his email' lines in support forums and company websites.

In some cases, it is the support telephone entities that receive these kind of 'attacks'. Or the project heads who would professionally protect his team and defend his programmers to the last 8-bit of his blood

In the freelance world you're on your own. You are responsible for the un-released memory-based variables you make that cause your program to crash the OS. You see unchecked bugs unfold before your eyes while you are presenting the program to your clients. You hear their problems directly. You interact with them. You feel their pain from using your 'Duh-I-thought-I-solved-that-already' programs.

You are responsible. No shields or bulldogs to protect you. You're on your own.

But you do learn and grow.

Not that difficult really if the problem lies on the code or the 'logistics' of the program.

A lot harder when the problem lies on the users' attitude, in the way they view computers, in the way they view life.

And a helluva-lot harder when you don't know what really caused the problem.

Add the fact that your name is always on the line.

In the world of freelancing, if there's one thing you have to hold dear and hold it dearly like it's a 1024K halo-blue-ish diamond found behind the galactic borders of the Andromeda Galaxy only every 1168 lunar cycles... that would be your name... your reputation.

Yes... your reputation.

It can make you or break you.

What's worse is when your name and reputation is on the line because of the things you don't do. Because of the 'outside factors'.

The blasted 'outside factors'.

But like any other thing this world holds, it's how you handle these things that counts.

And that too could make and break you.

But whatever happens... life goes on... and still, shit happens.

After-blog dangling references:

I'll keep you updated on this problem and will make things less abstract once I have a full grasped of what the cause of the problem really is.
WildFire on 01:08 AM CST [ link ]



Thursday | August 19.2004


3AM and I'm done wrapping up paper plans for tomorrow's client visit. Make that later this day.

ADTX SYSTEMS (formerly APTI) is in need of programmers. My former classmate works in that company and she told us that they need at least 50 'coders' immediately (ASAP).

That's a large number of borgs... quite scary if you'd ask me.

And considering she did used the words 'immediately' and 'ASAP' in one e-mail, it means something.

They're looking for Java Programmers (AD 04-007), Microcode/Firmware Engineers (AD04-008) and Device Driver Engineers (AD04-009).
Interested applicants are invited to send their resume, transcript of records and recent 2x2 picture to the address below stating position code:

ADTX Systems, Inc.
c/o Human Resources Department
3/F Multinational Bancorporation Centre
6805 Ayala Avenue, Makati City

Tel Nos: +63 (2) 889-5070 | +63 (2) 845-3875-77
Fax No.: +63 (2) 889-1800
E-mail: jobs [at] adtxsystems [dot] com


Or you can e-mail my classmate: beng [at] adtxsystems [dot] com. Doing so will help her and her co-programmers regain the sleep they're missing these days.

On a different frequency, Avatar posted some FireFox-related hacks.
WildFire on 03:33 AM CST [ link ]



Wednesday | August 18.2004


VisualFoxpro is featured at SD Times. You seldom hear those type of news as of late. Probably the reason why that article is being linked in almost all the Foxpro-related blogs residing in my RSSBandit aggregator.

ADODB 4.52, anyone?
WildFire on 02:41 AM CST [ link ]


I received an e-mail from one of my college classmate who was also my officemate when I was still working in Davao. He told me that the database project we created 6 years ago was still pretty much alive.

Although I was only an assistant programmer in that project and it was Jerry who did most of the job, still... it is nice to know that the project we dubbed as BRAINS (Budget Resource Allocation Information System) is still being used.

It was also the first database application we developed after being freed from the cruel college un-ending digital chains and thorns. You know... the kind of situation that resembles the code below:

Function GrindThemMore(Project)
for i = 1 to nInfinity
Assign(Project[i])
SetComplexity(i*val('1'+replicate('0',17)))
SetDeadline(nTime = short, lRidiculous = .T., lMovable = .F.)
SetMind('They will work on the last minute anyway... so...')
AddLoad(tracks(Philo, 16) + tracks(Theo, 16) + tracks(English, 24))
lEyeBugs(cExtreme)
nToxicityLevel(Smell, 7*77)
if lStillBreathing
GrindThemMore(Project[i*42])
else
Deport.Student(aPool(OtherCourses))
**' Exit statement removed
endif
endfor
EndFunc

BRAINS was developed in VisualBasic.

Yes, I know lambasting VisualBasic is one of my favorite past times but I do have great respect for it when it is properly and intricately woven.

My friend, Jerry Flores knows this language very well.

He breathes VB.

He handles database normalization to the core.

How about we hear a blog from you, Mr. Jerry 'VB Guru' Flores?

Beakman also uses VisualBasic with ADO and SQL very well. The works he's been putting on his Digital Nervous System is quite remarkable.

The Sybex book I'm currently reading holds a lot of VB6 samples too... focusing on SQL Server and ADO programming. Here's the amazon.com link to that book in case you're interested.

Although it was mentioned countless of times already that VB.NET != VB6 and it is not even fully backward compatible, VB.NET addresses most of the issues that were used to criticize the Visual Basic language.

But still, VisualFoxpro is my main artillery; there are just some matters that pushed me to delve more into SQL Server and ADO programming.

Something which I would probably share later.
WildFire on 02:26 AM CST [ link ]



Tuesday | August 17.2004


I had a weird dream last night.

Ah... all dreams are weird so that's data redundancy already.

Anyway... in my dream, Linus Torvalds and Bill Gates were playing chess in a park. The ambience was even in 3D... surreal 3D to be precise, sort of a distorted 3D-like environment quite close to Pixar's animated chess clip, Geri's Game.

(Speaking of Pixar, check out this latest Incredibles trailer.)

But this dream's more darker... and more violet-ish.

Probably Steve Jobs is behind all these 'Microsoft versus Linux games', eh? Sounds like an interesting conspiracy theory.

But no, this isn't about conspiracy theories... this is about my dream.

Besides, Steve doesn't give an iMice arse about this, he's too busy on his 'chameleonic computer', you know a Mac whose shell can change colors, or the second Japan Apple store opening or the rumored Apple TabletPC.

There... wandering again... back to the dream.

I can't remember everything but there was a point in that dream when Linus was taunting Bill... 'You can't beat me, I've been playing this game since I was still a kid, when I was in beta version. My linux shell commands and libraries naming convention are even inspired by the way chess moves are recorded.'

Bill replied, 'Are you familiar with the Windows BSOD? It has VxD written all over it.'

I can't remember who won that game or how the dream ended. But I do remember it shifting places where the next 'scene' involves a half cyborg rabbit.

Speaking of chess, the 14th Abu Dhabi International Chess Festival is being held from August 14 to August 24, 2004. One of its main highlight is the 'Clash of The Computer Titans' which features the multi-champion Shredder against the Linux-powered Hydra.

Yes... I think humans grew tired of watching those human versus machine chess tournaments (or probably the human versus human battles) already that they're firing up these machine versus machine tournaments.

Creating a program that do those chess-move-analysis computation I know is an ultimate milestone for humans, but if you'd ask me I still think it is the uber-most-geek-iest way of having an excuse not to play the game.

An excuse not to think which is ironic because humans need to think.

I know... I know... creating such program involves a lot of thinking. But there is a big difference when you think about chess, or think about algorithms prior to the game and during the actual game of chess.

It's like 'Uh-oh, the queen is out already, let Shredder (or Deep Blue or Hydra) do the next move for me.'

That's why my bet is still on Kasparov (that is if he decides to play against a computer once again), or any of his human successor.

To wrap things up, here's an article that explains why chess grandmasters are so successful in their field.

If you read that article, you'll realize that chess and this field they call as software development are similar to each other, in ways more than all the possible chess moves combined.
WildFire on 10:42 AM CST [ link ]



Sunday | August 15.2004


Here's a simple 2:00AM code I made. Its objective is to make a certain combo box automatically reflect the tag names for the databases you are currently using.

with thisform
DatabaseInitialization()
select FILEAREA
nTagCount = tagcount()
dimension aIndex(nTagCount)
for nCount = 1 to tagcount()
if !empty(tag(nCount))
store tag(nCount) to aIndex(nCount)
else
exit
endif

endfor
.cmbIndex.rowsourcetype = 5
.cmbIndex.rowsource = 'aIndex'
.cmbIndex.value = aIndex(1)
endwith

It's too simple really but this was the first time I used this. I even had to refer to Foxpro's help file in the formulation process.

The main purpose is to create a template form for the 'File Utility' type of modules. The term 'File Utility' was something I have acquired from College MacPros (Machine Problems). This is a part of those old DOS based Programs we had back then (created in either Pascal, C/C++, Clipper 5.2) which hold the records for your database-based values, or as one of my clients call it... directories.

This has been a practice which I find useful especially when you're already in the maintenance mode of your program. Directories like this, however, should be planned in advance. The 'Design phase' of your project is a good place to start.

These directories can also be used inside combo boxes, and if in the future you would like to add values that those combo boxes display, you don't need to touch the hard code. You just either edit the database or use your File Utility module.

Very handy too when your database application is being used by more than one client.

Let's give an example.

Suppose you have a combo box for Profession. Of course you can choose the combo box builder wizard and enter the data by hand but that would be lame.

Totally lame that only castrated over-boozed programmers of the 60s do that.

You use a database approach and set the combo box to grab the values of that database.

     .cmbProf.rowsource = 'DATABASENAME.FIELDNAME'
.cmbProf.rowsourcetype = 6

... where cmbProf is your Profession combo box and 6 stands for (database) fields, the source of the values the combo box will display.

You can also use the Property box to set things. Other sources include value, alias, sql statement, query (.qpr), array, files, structure, popup, DoomPortal, BermudaTriangle, RiverofLesRough and so on.

Now back to the code above (Darn I'm wandering off once again), the algorithm gets the number of tags the compound index file has, gets the tag names and stores them in an array.

Now using the values in that array, you can place the code below in an object (a 'Browse' command button perhaps).

     select FILEAREA
set order to alltrim(.cmbIndex.value)
.GridProf.refresh

This will reflect the changes you want to view, which in my case is found in a grid that displays the sorted records.



Figure 292.1 Image too shy to enlarge itself since its design and alignment was not optimized yet. Check back later when Image.nConfidenceLevel++.
WildFire on 02:34 PM CST [ link ]


Peculiar things happen once in a while in a programming language IDE and the VisualFoxpro's IDE is not an exception.

Take this for an example:
close databases
close all

select 0
use FILEAREA shared
if !file('FILEAREA.cdx')
index on NUMTOSTR(AREAIDNO, 5) tag CAREIDNO
index on upper(alltrim(AREA)) tag CAREAREA
endif

Note: UDF NUMTOSTR(5, 3) returns '005'
Note: UDF is 'User Defined Function' (OK... you know that already)

So what is wrong with the above snippet?

Nothing really. In fact I'm using it on a different application and it's fine. But tonight I'm getting the 'File must be opened exclusively.' error message. So I tried transferring it from the .PRG file to the frm.Init, removed the NUMTOSTR line temporarily, executed close all commands inside the command window, closed VisualFoxpro a couple of times and the error is still there.

No other application is using the database and I'm not even connected t0 the internet. (Just in case you're entertaining that wild idea that someone in cyberspace is playing with my databases tonight)

So I thought 'FILEAREA' was an ultra-secret Foxpro reserved word and renamed the database to AREA.

Still, the problem exists.

Another reboot, fired up VisualFoxpro, executed the program and it ran sans the error message this time.

Weird.

So I tried recoding the things I made, re-used the NUMTSTR function, renamed the database back to FILEAREA and placed the code back to the DatabaseInitialization.prg.

Problem's lost... I can't even recreate it.

This is one of those weird stuff I encounter once in a while. You can't even share it to someone whose skills are better than yours since it just disappeared out of nowhere. As a programmer this is quite puzzling. Programmers always have this inner desire to know the why and how of things. Why such thing exists. Why it exists that way.

When you can't recreate the problem, you can't prove that the problem isolation procedures you just did were the solution... that you used the right chant and growl frequencies.

You can't even prove that such problem exists.

Really weird. You just end up storing it somewhere behind some portal deep within your brain...

... or you end up blogging about it.
WildFire on 01:18 PM CST [ link ]



Saturday | August 14.2004


Calvin Hsia: Displaying playing cards for bridge.
WildFire on 08:05 PM CST [ link ]


Here are some VisualFoxpro articles from the Advisor Magazine:

Les Pinter points out the Differences Between Visual FoxPro and Visual Basic .NET (Two parts actually that's the first part and here's the second part).

Andrew MacNeill also writes about a new VFP9 feature that can help you lock down VFP Reports, Protect Your Reports With Microsoft Visual FoxPro 9.
WildFire on 05:51 PM CST [ link ]


I'll presume you have already read Paul Graham's Great Hackers. I posted a link to that essay days ago.

And 1,618,009 websites linked too that article as well.

Now hear Eric Sink's Great Hacker != Great Hire. It's always good to listen to two (or more) opposing sides on certain things. It helps balance the chi.

Speaking of Eric Sink, there are more SoftwareDevelopment/ISV-related articles on his site. Here's a direct link to his feed in case you want to subscribe.

Going back to Paul Graham, the Great Hackers article has an audio version already which you can stream or download. He posted a recent article, Python Paradox, which again stirs up my interest to delve into that language.

I have already 'httrack'-ed Phyton.org last week.
WildFire on 12:55 PM CST [ link ]



Friday | August 13.2004


Before I begin to scribble these thoughts that were bouncing around my mind for the past 16 hours let me tell first that I have great respect for the Open Source. From Torvalds, who my previous co-officemate system administrator worships (and I worship that SysAd during Wednesdays and Fridays), to the linux-kernel-super-computers, to the airplanes, air traffic controls and production plants that use it, the centibots, RedHat, SlashDot and lately Miguel de Icaza and Mono.

Throw in Python and Perl if you like, even Paul Graham and Prometheus.

Yes... too many to mention.

Include also the top universities in this country who are pushing Java and Open Source.

In fact the area of Open Source is too broad and deep to tackle. Let me just highlight the topic partially from Dean Mikhail's post that had ignited these bouncing neurons in my mind.
Imagine a car with the hood sealed tight and the engine closed from the world -- would you trust it blindly to get you to where you want to go. -- Mikhail Online

In a perfect world, geeky car owners knowledgeable in how the internals of the car works, exist in every square block. In fact not only the car owners but every human knows how the car functions as well.

Besides, in a perfect world everyone has a Porsche Carrera GT as their 'obsolete means of land transportation' inside their 1 mile nanotech-protected garage, located in between two vehicles that have perfected the vertical takeoff.

(I won't even mention that Monica Bellucci look alike chauffeur... she's a cyborg anyway.)

Perhaps even 8 year olds know about internal combustion, the four-stroke combustion cycle, higher-octane gasoline, cooling and fuel injection systems. Add in the lubrication, exhaust, electrical and emission control systems.

These kids would even mod their cars to make it look like H-Wings from Star Wars (Too bad the mod pics are already 'off-lined').

OK... I'm exaggerating things.

But still, in reality things are not this way.

Far from it really.

Take Mr. Anderson's car for example. Let's say Mr. Anderson knows the logic behind his car that well. Inside, outside and beyond. Chances are Mr. Anderson has a wife who cares nothing about cars. Hansel and Greta, his two daughters in this world who can't even move their focus away from their cell phones when riding that vehicle, don't care either.

Now Mr. Anderson is beginning to wonder if those cell phones were attached to his daughters when they popped out to this world.

Expand that car to a bus... or to a train or a plane if you like. Sometimes humans even tend to know more about how a train works if something wrong happens like what occurred in MRT Kamuning Station this day. (I was on my way home from a certain client visit and I indirectly suffered from the jam.)

Try randomly asking passengers if they know how the engine works... chances are most of them (if not all) will give you that 'duh-look'. One out of ten would even yell or glare at you for disturbing their peace, probably 2 would give you their cutest smiles with a 'go away' subliminal mindset in the background and probably one out of one hundred would bluff their way into discussing things.

Chances are you won't even try asking for you know the outcome already.

Most of the time, these passengers don't even care. As long as they arrive safely to their destination... be with their families... just in time for a rerun of their favorite TV show.

Sans the knowledge of how the engine works or what is behind those hoods, life goes on.

And it goes on peacefully.

Replace(variations('passengers'), 'computer users')

Point is... most computer users don't give a smurf's arse on the 'internals'. Probably some of them would care knowing the logic behind things... but only few care about the source.

In fact try asking some programmers too how memory is managed, garbage collected, dangling references and the /3GB switch.

They would rather finished the tasks at hand than spend a time discussing these things to you. That is if they really know how things are done in depth.

Most users don't care how machines and mathematics merged in the form of computers with binary numbers as the battlefield. As long as they can type, edit, save and print their assigned papers and spreadsheets the world is fine.

They don't care how NudeAngelinaJolie1618.jpg was compressed, 'digitized', chopped into pieces and transform into bits once again as it passes fiber cables, lines, modems, routers and cyberspace when they're sharing those things to their peers.

As long as their friend receives the file, laughs and does things which I won't even mention here afterwards.

They just don't care.

Sad... but true.

Even in my programming-related client visits, I have experienced this countless of times already. Sometimes from 'normal users'... sometimes even from computer technicians. And I believe I'm not that boring when I talk. And I'm fresh as mint.

In fact my pet tiger and my three year old baby thinks I am interesting and cute. (OK... I am exaggerating things once again but yes the tiger exists)

Urgh. This is getting longer already... would you mind if I chop this for a while and continue this some other time?

No you won't.

You don't even care.
WildFire on 12:09 AM CST [ link ]


SMAH.client monthly visit... I was on a bus, pony-tailed my now getting longer hair so that I could feel something when I press my nape against the seat. It gives me that I'm-Neo-I-am-the-one feeling plugged into The Matrix.

I was planning this visit to be a 'lightning operation'. Go in-Execute(Mission)-Go out. That kind of visit. I even made 'one click' automations for some updates and some batch files last night. Some database manipulations were done already at home so that I would be merely copying (after doing some backups of course) the files in the target computers.

I sneaked in past the guard and the 'Big Boss' and after around 17 minutes, the mission was completed. Usually by this time I consume my time talking to some staff, having those kind of normal discussions where you learn a lot (their 'routine' activities, gripes and stuff), you observe a lot (like how many fingers they really use when they're typing and how many fingers are 'pretending' to be moving) and formulate some things in my mind based on these learning and observations.

This was not applicable this time. My mind was set for a 'lightning operation'.

In. Execute. Out. Two down... one to go.

On my way out though, I saw the 'Big Boss' closing the lights in her office... preparing to take her lunch. Of course I could do a commando-type sneak with ease, which I learned from playing video games when I was a child, but that would be unprofessional.

Very unprofessional.

At least I have to say 'hi' or something.

That was when my being 'feedable' impaired the 'lightning operation'. Don't even bother searching for what that word means, I made that up.

Wherever I go, people I meet tend to want to 'feed' me, stuff some food in my belly. For Varumvha's sake, I'm not even thin to start with.

So there I was spending the next couple of hours, chomping, reading the February 2004 edition of Windows and .NET Magazine while waiting, fixing some Excel-related corruption problems and the usual learning and observing activities.

I guess I still have a lot to improve in my lightning operation commando-like skills.
WildFire on 12:03 AM CST [ link ]



Thursday | August 12.2004


TLC: Foxpro Tools and Utilities
WildFire on 07:52 PM CST [ link ]



Wednesday | August 11.2004


11:42PM | Regular break from the normal midnight database operations.

My two year old is still watching Dinosaur in the background. Yup very much awake at this time of night... the making of a programmer right?

Dean Michael posted interesting blogs here and here. I'm still finishing some database migration related things for tomorrow's client visit but I'll post some thoughts later.

He also mentioned this site: TopCoder.com

I saw a dollar image in the front page. My interest dropped to sublevel 37.

On the pixel-side of things, I uploaded this Photoshop Shadow Tutorial I made 15 months ago. It is still unreleased from inside the Pixelcatalyst.Lair. Yes... one of those derivations from that 'so-many-cool-things-to-do-so-limited-time' dilemma.

PWA entry fee draws mixed reactions. What do you expect? I have always wanted to blog my thoughts about this since I found out that they're now collecting P2,500 entry fees for that contest... err... awards to prevent 'crappy sites' from entering. Out of respect to some local web designers I've known for years, I'm refraining from posting some thoughts for now.

Let time and output tell if the move was appropriate and effective. I'm not using the words 'good' and 'right'. Elusive words... these are.

In an indirect way, you can compare it to what the Philippine government is pushing these days... the thing about additional taxes. Should we focus more on how making tax collection efficient first before adding more burden to the people?

Should we solve things underneath first before implementing reckless series of patches over it?

Do check the statistics for uncollected revenues for the past 10 years and you'll understand my sentiments, and the majority of the Filipino people's sentiments as well.

Never mind my sentiments, I'm just hungry anyway.

Oh... we're giving up already the idea that we can collect these things efficiently and we'll just add another batch of 'to-collect-things' that highlight the inefficiency and feed Mr. Graft and Miss Corruption?

I'm not raising the white flag for RP's situation though. Not now when I see my two year old watching Dinosaur at this time of the night.

But... I need to resume working.

Hopefully...
select 0
use
RESOURCES shared
if !file('RESOURCES.cdx')
index on alltrim(GoodGovernance) tag CRESGOOD
index on EfficientMeans tag CRESEFFI
index on ATested(Integrity, Passed) tag CRESINTE
index on Stress(DTOS(date())) tag CRESDATE
index on Listen(People(.voice)) tag CRESVOIC
else
CheckIntegrity('RESOURCES', Strict)
endif
... could be of help.
WildFire on 11:53 PM CST [ link ]


Make this thing defy gravity... make this float and I'll acquire a dozen and practice my newly found newbie networking skills.

I would even mod it further... add some hairs perhaps.
WildFire on 08:15 PM CST [ link ]



Tuesday | August 10.2004


If you're using Windows XP, then its Service Pack 2 is a must have. Here's a Bit Torrent for SP2 (SP2Torrent.com). I am also currently downloading this SP2 Network Installation Package at MajorGeeks.com.

Not satisfied?

Here's a link to 30+ sites that mirrors the file: FileMirrors.com (Thanks cephei for the link)

Do the world some favor... move your lazy arse.
WildFire on 09:32 PM CST [ link ]



Monday | August 09.2004


DeviantArt celebrated its fourth birthday last August 07. Considering that it is still three in the morning and I am located in this part of the world where I am ahead by almost twelve hours to where DeviantArt servers are located, that celebration was just yesterday.

It sports a new faster loading skin and a well-organized interface plus a web-based chat feature created by the brains behind the Sonique MP3 player, Andrew McCann. There are quite a number of improvements 'experience-wise' too that you have to see for yourself.

These days DeviantArt holds 7 million deviations already while catering 8.2 million page views a day. Of course there is more to DeviantArt than what those number can show.

Much much more.

Inspired by this, which has also greatly inspired me to start the Pixelcatalyst.Lair website four years ago, do expect some pixel-related blogs from now on. Post that deals on some Photoshop tips and HTML/web design related materials.

I will also be including once in a while the 'creative thoughts' behind some of the artworks I create in my free time, some tutorials and everything sex in between.

When I say 'sex' I mean the 'sex' referred inside those Sex and Cash Theories that are proliferating the blog-o-sphere as of late.

And not the other one.
WildFire on 03:35 AM CST [ link ]


Early dawn-worm-code snippet:

if .chkMonth.value != 0 .and. !isblank(.cmbMonth.value)
cFilterDate = upper(alltrim(.cmbMonth.value))
cFilterYear = "(year(DATAAMPM.DATE) == year(date()))"
cFilter = "(upper(alltrim(cmonth(DATAAMPM.DATE))) == cFilterDate)"
cFilter = cFilter + " .and. " + cFilterYear
**' cFileName = cFilterDate + alltrim(str(year(date())))

dDate = cFilterDate + alltrim(str(year(date())))
report form Report_AMPM preview for &cFilter
else
cMess = 'Please specify the month first' + chr(13) + ;
'and check the Monthly Report filter'
messagebox(cMess)
endif
One... the above code is not 'extremely optimized' and was done around 2:16AM. So get over it.

Two... I'm just testing the preformatted tag and the colors. I recall someone blogging about a tool that 'autocolorizes' code in blogs, but I just can't remember the URL. At two in the morning I don't want to be involve in any searches.

Three it's nice to know that the ELSE statement functions as 'Everything Else' in most programming language. Foxpro included.

In the above code, given lCondition_01 = .chkMonth.value != 0 and lCondition_02 = !isblank(.cmbMonth.value), the ELSE clause would execute when:
A. lCondition_01 == .F. and lCondition_02 == .F.
B. lCondition_01 == .T. and lCondition_02 == .F.
C. lCondition_01 == .F. and lCondition_02 == .T.
... and not just when A is satisfied. Which if this was done in one of our Math subjects (Automata-related) back in college will be the only basis for the output.

The cFileName line has been weeded out in comments just for the sake of this post. It has been my practice to save and export some filtered queries ('native Foxpro filter' and SQL queries) generated by the program to an .xls file.
WildFire on 02:38 AM CST [ link ]



Sunday | August 08.2004


Every time a blackout occurs, I always realize how weak computers are.

Back when I was still working for my old employer, whenever one occurs we would do something 'progressive-for-the-company'... something like playing basketball or table tennis perhaps.

The rest of the other offices prefer to nap.

Of course we could choose the nap way of doing progressive things, but since one of our senior database programmers snores like a wild boar who hasn't slept for two decades after chasing Alicia-looking deers and such, our choices are limited.

But returning to the topic of supercomputers... even if we have seen much of these for the past few months, like the one NASA has, or the one IBM is going to build for the military, or the Earth Simulator Center supercomputer in Japan, and there's this Open Supercomputer codenamed Beowulf... these are still far from my envisioned 'supercomputer'.

For one, I think a supercomputer should not be dependent on electricity... or batteries.

A supercomputer should be able to sustain itself.

Which makes the brain a better supercomputer than those other so-called supercomputers. It is unplugged and it needs no batteries to function. We even lug it around everywhere we go without a thought, imagine attempting to carry those supercomputers around with us.

Of course it needs food, protein, porn and whatever but still... it works.

Humans really have to work on powering it up instead of being dependent on calculators, computers and phones. I'd still believe that if man hasn't discovered the cellphone or even phones in general, we could have furthered our mental telephatic powers by now.

Having said that, I am looking forward for this book. As Boingboing.net calls it... 'Brain Hack: Overclock your Amygdala'.

Mine needs a hibernation period for now.
WildFire on 09:07 PM CST [ link ]



Saturday | August 07.2004


Visited a client in Guagua, Pampanga today. Fixed a database corruption on one unit. Installed some ILS module updates. Meet W95.spaces.1445 (I've been cataloguing those kinds of meetings and it seems each company I visit cultivates their own 'pets').

cEntity = 'pets'
cSimilarEntity = substr(cEntity, 1, 2) + ReverseString(substr(cEntity, 3, 2))


Introduced OpenOffice.org since they could afford to buy only one licensed copy of Microsoft Office 2003 this school year. Introduced MajorGeeks.com and explained OfficeXP's save as old format capabilities.

Yes... one of the many advantages of 'freelancing' is having more room to educate people... the 'normal users' who need more enlightenment. Something you don't have that much if you're one of those 'in-house-type-of-programmers' here in this country.

Of course I'm not generalizing here. I've known some good in-house programmers who do not only excel in what they're doing, but passionately 'evangelize' technological matters as well.

But recently I've seen too much work-related grumbling from them. Quite sad.

I am also an 'in-house programmer' in my regular job and I tell you there is a big difference.

Freelancers don't have a boss... or at least we don't call them 'boss' we call them 'clients', our time is flexible (or at least we think it is) and we can work in pajamas (not naked... contrary to popular belief, programmers don't work naked).

You, my friend, are always welcome to the other side of the fence.

Later... 12:31AM and I still have to finish one report for tomorrow's MILD.client visit.

···

Calvin Hsia shares an overview (and even some codes) on how to catalog and share digital pictures using Visual Foxpro, SQL and .NET. Very informative if you'd ask me. Makes you want to say Kenshin's 'There's nothing I can't do with this sword' line.

Replace(LineAbove, 'this sword', 'Foxpro').

Fine-Tune Your Web Site for Windows XP Service Pack 2.

.NET linkwarp: Hyatt.lu

Ada Lovelace started her blogs. Keep it up, Leigh. Can we expect techblogs from Dennis and Exander too?

Gapingvoid.com is an insightful site. I added it in my aggregator a couple of days ago when I read the How to be Creative post. Number 13 is applicable in the field of software development:

Never compare your inside with somebody else's outside.

Netcrucible: Sex and Cash

More Sex and Cash theories... probably I'll post mine in the future.
WildFire on 12:32 AM CST [ link ]



Friday | August 06.2004


I acquired a new pet today, a three and a half feet fire-breathing orange eyed lizard with fifteen fingers.

For those who have been following this site for quite some time, I'm sure you have heard about my tiger and pterodactyl. Well this lizard is the newest.

... and the most arrogant.

I'm starting to call this one IKIA, a short cut for 'I Know It All'. Ikia claims he knows C++, Java, VB6, VB.NET and SQL. He even understands Clipper and VisualFoxpro as well. He claims his fifteenth finger was meant for the space bar and that he can create a program to generate a 7x7 magic cube in less than five minutes.

Impressive claims if you'd ask me... but until I can find another keyboard for him to use, I won't be allowing his slimy fingers to touch this Logitech keyboard of mine.

Ikia seem to know it all. He started blobbing about certain operating concepts, kernels, threads and other stuff which I believed were discussed when I was in college. Too bad I was busy doodling some non-cs related illustrations then.

Then he proudly stated the words 'I am good because I can solve things fast.'

BEEP.

I have seen this before, good programmers and even good students bragging that this and that are easy.

Well... while programming is indeed about problem solving, it is not just about problem solving. It is about solving problems efficiently.

Not just solving problems efficiently today... or this month or this year, but solving problems retroactively, currently and beyond. Unlike hardware, software, especially database applications are not meant to deteriorate.

Well at least, that's how I see things.
WildFire on 01:50 AM CST [ link ]



Thursday | August 05.2004


02:08AM.

Unholy hour for some... but for me this is the holiest of holy hours. Every thing's calm and at peace and I can code the way I want. Of course there are those times (especially when the sun is up) when I would prefer coding when U2, Paul Oakenfold, Enigma, NIN or even the soulful music of ColdPlay pounds in my ears... but when the sun decides to dream, I prefer silence.

Ah... enough of these things. I did promise myself to concentrate on work blogs once more. To discuss more programming/freelancing/system-analysis-related issues and insights would be the priority. The info-links you used to see will still be there, probably underneath each 'work blog'.

So what have I been working on for the past few hours?

IMCS.CPanel.DataTransferModule

What in wakahalarovha's name is that?

IMCS stands for Integrated Media Center System and CPanel for Control Panel. Like most control panels you see in this world, this module aims to give the user the 'lowest level access' to some core parts of the program. Most settings and configuration are in there.

One of my measurements on how 'good' a program/system is, lies on how it can stand alone independent of the programmer who created it. If it can run for 7 years or more without my intervention, the hacker-part of this soul would be lust-ified.

That is why the CPanel is there.

Of course certain 'outside factors' like operating system variables, upgrades, environment, meteorites, non-thinking management and millions of other factors, pose a great challenge to that 'independence'. Include some marketing related factors too. But, that would be another blog for now.

It has been my practice too, to make the database systems I develop compatible with a certain client's other existing database applications. And since the Registrar and Cashiering (which involves different student information-related modules) are already handled in four of my clients by another software development company years before me, I made the Transfer Module as a means to export their databases to my database applications.

Of course I could make use of their database directly inside their own folders, but I prefer using my own re-structured database for a number of reasons.

One's to be safe. If something happens on their part of the application, the database applications I am maintaining would not be affected. Same holds true the other way around. If corruption or any variation of those things happen, their system would not suffer.

And trust me when I say I don't want a fellow Foxpro programmer to suffer... especially in my own hands.

Second reason is I am very particular with how I name the fields, the name formats and such. If you maintain several programs, it would be good for you if you're using your own easy-to-remember conventions which would be hassle-free for you to recall once you switch on your development process to and fro from within your tasks pool.

Third reason involves the way I normalize fields and records. Fields such as Relative01, Relative02, Relative03 and so on is a big no no for me. Well, at least most of the time. This would be a different story though if it is a RelativeGivingOutiPodsandG5sToDevelopers. If this is the case... the more the merrier applies instead.

But following a database system that is not yours is not that easy. Even if both systems are developed in Visual Foxpro and you're only scratching the database parts.

For one, the other database programmer can change the structure of the database at any point, and you, like me, find yourself re-coding some parts of your program, which in my case, the Data Transfer module.

These occur too especially if the other software development company has more than one programmer who seems to juggle with their field naming convention. CLIENT_01 uses MTELNO and FTELNO for their parent's phone numbers. CLIENT_02 on the other hand uses MBTELNO and FBTELNO where I suppose 'B' stands for Business. Client_01 don't have equivalent names for those fields. And in this digital world, one bit makes a BIG difference.

Last June, I also found myself in a position where another database structure was change and I cannot even edit it until I open the database exclusively. A feature which I should be adding on the Database Utility Module (equivalent to Clipper's DBU) I made.

A utility which I will discuss further in another blog... in another time.

···

Good luck, Arctic Team... may you find what you've been looking for. Same shout outs to Cassini and the Mercury Messenger as well (472 million dollars for 7.9 billion kilometer journey eh?).

Aloe vera may treat battle wounds. Nah... I prefer peace, unity and discussion. Deal with things the way 'good' programmers handle problems. War was never a solution... and never will it be. How come we never learn from the past?

Make way for Doom's Day instead.

Mark Anthony Panizales is now bloggin'... and Ceazar Ryan Sealana too. If you could remember they were part of the first call-to-blog post of mine. I'll be posting a second batch of roll calls within the week.

Looks like SCO gets it.

I don't get it.

Nevermind.

Happy birthday, Neil Armstrong.
WildFire on 03:26 AM CST [ link ]



Monday | August 02.2004


One more cyber-info-data-hoppin' trail before I fire up some work:

Sometimes I do wonder what the reactions are inside Microsoft everytime pro-Foxpro comments are unleashed. But I'll be most happy to see more data-centric capabilities inside C Sharp in the future... and happier if its syntax clarity is as good as the Foxpro/xBase models.
WildFire on 05:32 PM CST [ link ]


Every time I see a new model of a TabletPC, electronic inks and its variations, I remember an old joke again. Of course I know these 'advanced technologies' are not a joke.

Argh. I tried looking in the archives for that joke but after a couple of hours searching, re-filtering and manually scanning things, I can't seem to find it. It seems that I'll be needing WinFS to even locate it, but since that would be released probably a year from now and moving of release dates often occur, let me just recreate it.
Fast forward to the future... a couple of scientists 'out in the field' re-discovers paper. And of course since they've been dependent on paper-less and advanced nano-quantum (or whatever they call it) computer technologies already, they don't have any idea what it is.

Scientist_001: Station-1029 we discovered something.
HQStation-1029: Be careful spaceboy... can you describe it?
Scientist_002: It's light... thin... white... lighter and thinner than those laptops issued by EarthGov-00290 last September.
S001: And it comes with a pen-like thing... let me read... it says 'Pencil' ('pen-like'? I guess pens outlived papers)
HQS-1029: Be careful, these might be advanced mines planted by our galactic enemies.
S001: I don't think so HQ. I haven't seen something like this before. I'm a pessimist by nature but I feel something good on this.
S002: ... and this could be a discovery of the millenniury! (OK... i made up that word)
S001: Wait look! Using this pen-like thing I can write on it!
S002: Where's the CPU? This is so advanced the CPU is i think so thin and invisible to the eye.
S002: Hooo... I can even flush the things I wrote using the other edge of this pen-like thing. I don't have to press DEL and click on OK a number of times.
S001: And I think it has an auto-purge feature. No need clean the trash... unless the trash of this thing is located on a different sector.
HQS-1029: Whoa... bring it once here.
S001: Look... look I can even fold it and it doesn't break. You can't do that with the computers.
S001: ARGH I dropped it. Hey wait... the data is still there. And it seems to be working fine. No damages so far... not even a scratch.
HQS-1029: WHOA! You can't do that on these ultra-computers of mine. One crash and it's goodbye slick baby.
S002: And it can fit the pocket perfectly! And it fits in the other pocket as well. I guess it adjusts to its container automatically. I bet I can even eat this thing!
HQS-1029: Return to base, spaceboys. An unidentified objects are entering the premises of your location. These are probably manned Quasi-borg SPE-OPlanes!
S001: Oh no! They probably have intercepted the communication frequencies.
S002: Something this thing don't have. More reason to return this to base and replicate things... they're probably after this thing!
HQS-1029: We're sending backups... hold on to your sectors.
Transmission interrupted.

OK... I did over-bloat some parts, but it holds the gist of it. If you know where and who the links and authors of the 'original version', please be kind enough to inform me.

Get well soon, Steve Jobs.

All this memory optimization stuff is but a hoax?
WildFire on 05:08 PM CST [ link ]



Sunday | August 01.2004




Disclaimers are for castrated EARTHLINGS.
Powered: GREYMatter | GM-RSS

 

 
 
 
 

 

foxpro.main
foxpro.archives
richardbase.home

articles
downloads
snippets
utilities
knowledgebase.links
website.links

outpost.forum
the.site
the.catalyst
pixelcatalyst.lair

rss.feeds

August 2004
SMTWTFS
1234567
891011121314
15161718192021
22232425262728
293031    
October 2007
September 2007
March 2007
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
February 2004
May 2004
April 2004
June 2004
April 2004
March 2004
February 2004





Darn aliens. THEY kept on rebooting this site's counter.