Friday, May 28, 2004

ExpertsExchange.com - Modern Day Ghostbusters

ColdFusion

Basically, you sign up to become a member, you get so many points, to start off with. Then you use those points to ask questions worth up to your limit of points.

The higher the points, the more likely you are to get fast/responses to your questions.

It's actually a nice community where you can get your questions answered, and also learn from all the Q&A asked from the past.

Also you can develop your problem solving skills, and learn to help other people out, for which you get graded and points.

It's a great site to learn and share from.

Real Programmers Don't Eat Quiche

Real Programmers Don't Eat Quiche: "Real Programmers...
Don't eat quiche. Real programmers don't even know how to SPELL quiche! They like Twinkies, Coke, and palate-scorching Szechwan food.
Don't write applications programs. They program right down to the bare metal. Applications programs are for dullards who can't do systems programming.
Don't comment their code. If it was hard to write, it should be hard to understand and even harder to modify.
Don't draw flowcharts. Flowcharts are, after all, the illiterate's form of documentation. Cavemen drew flowcharts; look how much it did for them.
Don't use COBOL. COBOL is for wimpy applications programmers.
Don't use FORTRAN. FORTRAN is for wimpy engineers who wear white socks, pipe stress freaks, and crystallography weenies. They get excited over finite state analysis and nuclear reactor simulations.
Don't use LOGO. In fact no programmers use LOGO after puberty.
Don't use APL unless the whole program can be written on one line.
Don't use LISP. Only effeminate programmers use more parentheses than actual code.
Don't use Pascal, BLISS, ADA, or any of those sissy-pinko computer science languages. Strong typing is a crutch for people with weak memories.
Never work 9 to 5. If any are around at 9 a.m. it's because they were up all night.
Don't play tennis or any other sport that requires a change of clothes. Mountain climbing is OK, though, and real programmers often wear climbing boots to work in case a mountain should suddenly spring up in the middle of the machine room.
Don't like the team programming concept. Unless, of course, they are the 'Chief Programmer.'
Have no use for managers. Managers are a necessary evil. They are for dealing with personnel bozos, bean counters, senior planners, and other mental defectives. "

This is just a bit from the oldies.

In the days of bbsing, there were all kinds of great but funny text files, writing, of the weird and bizarre. If you ever feel nostalgiac check out TextFiles.com

A great site, also has a lot of bbs history.

I mean as you get older, and learn more of anything computers, internet and programming, you tend to get a certain style, flairs, things that show your personality.

Have you ever looked in the mirror, and wonder, how the heck did I get where I am now?

Thanks for the Memories!

Happy to find a coldfusion blog !

I know Craig ,he is so serious and he is a very well knowledgeable man in coldfusion developing

I am Mohsen Akhavan, CF Developer from Iran ,I studied plant protection and medicine in college, then I started computer ,I suddenly become familiar with coldfusion and I started to learn coldfusion. Many of my friends ,Paul Hasting and Craig helped me too much and encouraged me to continue learning coldfusion I should mention that coldfusion is never the in Iran at all.

By the way I am happy to be a member of this blog!

Thursday, May 27, 2004

Macromedia - Macromedia Exchange

Macromedia - Macromedia Exchange

This is what really irritates me, I mean I am in the cfusion folder of the exchange.

Why am I seeing non-coldfusion tags/extensions?????

I should only be seeing coldfusion tags/extensions!!!

I know they want to market their other product line, but this is the WORST way to do that.

Please redo this page, in HTML, not FLASH!

Thank you.

Also redo the search so that I don't have to go to a seperate page, to do the search and then select which exchange. If I am in the ColdFusion Exchange, there should be a window to type my keywords and search.

This is why it is so horribly unusable.

Yuck!

Revenue - The Internet Affiliate Marketing Standard

Revenue - The Internet Affiliate Marketing Standard

Besides coding cf web applications, I really like to learn more about ecommerce, usability, anything to help create more PROFITABLE web applications/sites.

This is an actually interesting article about how 1 mom, built her own future using affiliate marketing.

It also discuss the how's/where's of affiliate marketing.

Now some of us do coding to pay the bills, because we love coding.

Me, I want to create applications that are customer friendly and make tons of money.

So that requires a lot of learning and research, to be ecommerce savy.

So it pays to do a lot of research, and keep to up to date, on the ecommerce field.

My number one site for learning about ecommerce is, InternetRetailer.com.

This is the best ecommerce news, and articles, reviews, how-tos.

If you want to learn about how ecommerce is going day-to-day, goto http://www.internetretailer.com

Oh check out this new Affiliate Magazine, called Revenue Today

When and where to methodologize!

Look I am not against methodologies, they are definitely a step in the right direction, but I think there is a mis-understanding of what the priority is in creating/using a methodology.

But we have to be using them for the right reasons, and prioritizing what's important in coding.

First off, the most important thing is:

1. Performance and Scalability, there can be no sacrifices made in this animals name. Simply if your methodology even takes 1 millisecond away, it's not worth it. Really, because it can so easily add up. Because without performance or scalibility, why are you even coding? Unless it's just for your own use?

2. Usability, can this methodology hurt/inhibit/enhance customer experience? Now my personal experiee in fuseboxed sites, is definitely yes! I hate fusebox url's, it may make sense to the coder, but i like having pages with distinct file names, that make it easy to understand where in the site I am.

3. Modularity, this is a big one, used as the catch phrase of methodologies, which method of modularity/code re-use do you use? Cfincludes, custom tags, cfcs, cffunction, udf, cfmodule? Remember priority one???

That's a big conflict, because seriously native cf, or cfincludes are top of the chart when it comes to speed and performance.

I am all for modularity/code reuse, as long as it doesn't hurt even by a nanosecond my performance or stability.

Because in this day and age of high traffic sites, and different new technologies competing for web application heaven, we must compete by only offering highly scalible, high performance, high available web apps/web sites.

Anything else, and we might as well not be coders.

It's drastic, If we want ColdFusion to be top dog, then we must stick to our guns to those top 3 rules, in that order!

Got it!

Go CF!!

Wednesday, May 26, 2004

JD on MX: Breeze MacroChats user experience

JD on MX: Breeze MacroChats user experience

I really loved the MacroChats, I did not like the Breeze Chat, was very buggy and very slow.

I mean I know it went sort of chaotic, because fellow cfer's never really get to talk about all their needs/complaints/vents to each other or macromedia on a regular live process.

So let's do it more regularly, like once a week.

Here is my list of feelings/needs:

1. Use a java based or html based chat room instead of breeze.

2. Like John Dowell said, rooms and subrooms.

3. Post the logs of the chat, so much stuff went through, that it'd be nice to have logs. That are searchable.

4. Have an RSS/Atom Newsfeed of the Macromedia MacroChats.

5. You really need a chatroom moderator or 5, to help keep the massive cf_mob focused on what the presenters are talking about.

6. Although it would be nice to have a chat room to discuss cf with, even if no macromedia official presenter was there.

That's my five pennies.

Morning DBA Report

Well here it is, my latest little gem.

First off, you have to understand my needs.

I am a web developer, for an ecommerce site, we do not have a dba available to be able to monitor the performance of our site/databases.

So therefore, I have tried to develop ways to ease my monitoring the growth/problems/security/issues with both our Development and Production Databases.

I have done a lot of Q&A on Experts Exchange http://www.experts-exchange.com/Databases/Microsoft_SQL_Server/Q_20996844.html

So from there and other resources, I have found the data I want to make available to me every morning.

The goal is that every morning, I want to make sure everything went alright from last night, and make sure our growth isn't out of control.

Above is a link to a list of Seven Monitoring Scripts. They were used preeminently, in my coding of my Morning DBA Report.

This is mainly for SQL Server, although you can probably find similar scripts for other databases.

Also with SQL Server is a SQLMail option, that can be used to send you alerts/reports and so forth. But it can also be a security vulnerability. So I always have that configured as off.

So that means I have to use ColdFusion to gather the data from the scripts, and then put it into a readable format.

Here is the code:

<!--- step by step create an printable report of morning/last nights' activities --->

<!--- step one Scheduled Tasks Last Night --->

<!--- Failed Jobs Report --->
<cfquery name="development_failed_reports" datasource="development_database">
SELECT a.name
FROM msdb.dbo.sysjobs A, msdb.dbo.sysjobservers B
WHERE A.job_id = B.job_id
AND B.last_run_outcome = 0
</cfquery>

<cfquery name="production_failed_reports" datasource="production_database">
SELECT a.name
FROM msdb.dbo.sysjobs A, msdb.dbo.sysjobservers B
WHERE A.job_id = B.job_id
AND B.last_run_outcome = 0
</cfquery>

<!--- Disabled Jobs Report --->
<cfquery name="development_disabled_reports" datasource="development_database">
SELECT name
FROM msdb.dbo.sysjobs
WHERE enabled = 0
ORDER BY name
</cfquery>

<cfquery name="production_disabled_reports" datasource="production_database">
SELECT name
FROM msdb.dbo.sysjobs
WHERE enabled = 0
ORDER BY name
</cfquery>

<!--- step two Backup Status Report --->
<cfquery name="development_backup_reports" datasource="development_database">
select b.name as database_name, isnull(str(abs(datediff(day, getdate(), max(backup_finish_date)))), 'never') as dayssincelastbackup, isnull(convert(char(10), max(backup_finish_date), 101), 'never') as lastbackupdate
from master.dbo.sysdatabases b left outer join msdb.dbo.backupset a on a.database_name = b.name and a.type = 'd'
group by b.name
order by b.name
</cfquery>

<cfquery name="production_backup_reports" datasource="production_database">
select b.name as database_name, isnull(str(abs(datediff(day, getdate(), max(backup_finish_date)))), 'never') as dayssincelastbackup, isnull(convert(char(10), max(backup_finish_date), 101), 'never') as lastbackupdate
from master.dbo.sysdatabases b left outer join msdb.dbo.backupset a on a.database_name = b.name and a.type = 'd'
group by b.name
order by b.name
</cfquery>

<!--- step three Hard Drive Status Report --->
<cfquery name="development_harddrive_reports" datasource="development_database">
EXEC master..xp_fixeddrives
</cfquery>

<cfquery name="production_harddrive_reports" datasource="production_database">
EXEC master..xp_fixeddrives
</cfquery>

<cfquery name="development_status_reports" datasource="development_database">
EXEC master..sp_helpdb
</cfquery>

<cfquery name="production_status_reports" datasource="production_database">
EXEC master..sp_helpdb
</cfquery>

<!--- now put into cfmail tag --->
<cfmail to="your@email_address.com" subject="Morning DBA Report" from="your@email_address.com" type=html>
<font face="verdana, arial, helvetica, sans-serif" size=+1>Morning DBA Report for #dateformat(now(),'dddd mmm, d, yyyy')# #timeformat(now(),'hh:mm:ss tt')#</font>
<br><Br>
<font face="verdana, arial, helvetica, sans-serif" size=-1><b>Failed Jobs Report:</b></font>#chr(10)#<br><br>
<Cfif development_failed_reports.recordcount gt 0>
On Dev:#chr(10)#<br>
<cfloop query="development_failed_reports">
#development_failed_reports.name##chr(10)#<br>
</cfloop>
</cfif>
<Cfif production_failed_reports.recordcount gt 0>
On Production:#chr(10)#<br>
<cfloop query="production_failed_reports">
#production_failed_reports.name##chr(10)#<br>
</cfloop>
</cfif>
<br>
<font face="verdana, arial, helvetica, sans-serif" size=-1><b>Disabled Jobs Report:</b></font>#chr(10)#<br><br>
<Cfif development_disabled_reports.recordcount gt 0>
On Dev:#chr(10)#<br>
<cfloop query="development_disabled_reports">
#development_disabled_reports.name##chr(10)#<br>
</cfloop>
</cfif>
<Cfif production_disabled_reports.recordcount gt 0>
On Production:#chr(10)#<br>
<cfloop query="production_disabled_reports">
#production_disabled_reports.name##chr(10)#<br>
</cfloop>
</cfif>
<font face="verdana, arial, helvetica, sans-serif" size=-1><b>Backup Reports:</b></font>#chr(10)#<br><br>
<Cfif (development_backup_reports.recordcount gt 0) or (production_backup_reports.recordcount gt 0)>
<table width=100% cellspacing=0 cellpadding=2 border=1 bordercolor=0D4D77>
<tr bgcolor=BEC8D8>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>Server</font></td>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>Database Name</font></td>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>Days Since Last Backed Up</font></td>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>Last BackUp Date</font></td>
</tr>
</cfif>
<Cfif development_backup_reports.recordcount gt 0>
<cfloop query="development_backup_reports">
<tr>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>Dev</font></td>
<td align=left><font face="verdana, arial, helvetica, sans-serif" size=-1> #development_backup_reports.database_name#</font></td>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>#development_backup_reports.dayssincelastbackup#</font></td>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>#development_backup_reports.lastbackupdate#</font></td>
</tr>
</cfloop>
</cfif>
<Cfif production_backup_reports.recordcount gt 0>
<cfloop query="production_backup_reports">
<tr>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>Production</font></td>
<td align=left><font face="verdana, arial, helvetica, sans-serif" size=-1> #production_backup_reports.database_name#</font></td>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>#production_backup_reports.dayssincelastbackup#</font></td>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>#production_backup_reports.lastbackupdate#</font></td>
</tr>
</cfloop>
</cfif>
<Cfif (development_backup_reports.recordcount gt 0) or (production_backup_reports.recordcount gt 0)>
</table>
</cfif>
<br>
<font face="verdana, arial, helvetica, sans-serif" size=-1><b>Database Size Report:</b></font>#chr(10)#<br><br>
<Cfif (development_status_reports.recordcount gt 0) or (production_status_reports.recordcount gt 0)>
<table width=100% cellspacing=0 cellpadding=2 border=1 bordercolor=0D4D77>
<tr bgcolor=BEC8D8>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>Server</font></td>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>Database Name</font></td>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>Hard Drive Space Usage</font></td>
</tr>
</cfif>
<Cfif development_status_reports.recordcount gt 0>
<cfloop query="development_status_reports">
<tr>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>Dev</font></td>
<td align=left><font face="verdana, arial, helvetica, sans-serif" size=-1> #development_status_reports.name#</font></td>
<td align=left><font face="verdana, arial, helvetica, sans-serif" size=-1> #development_status_reports.db_size#</font></td>
</tr>
</cfloop>
</cfif>
<cfif production_status_reports.recordcount gt 0>
<cfloop query="production_status_reports">
<tr>
<td align=center><font face="verdana, arial, helvetica, sans-serif" size=-1>Production</font></td>
<td align=left><font face="verdana, arial, helvetica, sans-serif" size=-1> #production_status_reports.name#</font></td>
<td align=left><font face="verdana, arial, helvetica, sans-serif" size=-1> #production_status_reports.db_size#</font></td>
</tr>
</cfloop>
</cfif>
<Cfif (development_status_reports.recordcount gt 0) or (production_status_reports.recordcount gt 0)>
</table>
</cfif>
<br>
</cfmail>

That's my gem this week.

I am planning to add things like hard drive space and so forth.

What kinds of things would you like to see as a morning report?

Tuesday, May 25, 2004

The Right Features...

How do you know if you have the right set of features to make a compelling release - one that will delight your current customers and woo new ones?

This is a very good point and article. Welcome to the blogosphere.

My personal favorites of the list are 2,3. I have done quite an amount of work in both spheres.

But in my heart of hearts, I still feel the ColdFusion has yet to really prove itself as an Ecommerce Solution. Look forward to my first article on CFDJ in June, on this very topic.

Simply, too often we determine the cf part of the solution is using some shopping cart system, and having worked on a hyper-customized version of AbleCommerce. They just don't work.

It's a good starting point, but it's a living hell in terms of trying to go from an application that is built to be used by possibly any number of companies and ecommerce niches, to one that specifically meets your needs.

Even to this day, my company has queries that run in the background from an Access database, that we never ever need, but it's just too painful to dig thru layers of folders and files to figure if where to remove the code, to not do these unneeded queries.

If CF is going to be dominant in any of those 4 in Tim's list, it has to be because we release quality applications.

What is a quality application?

1. It is easy to understand the flow and logic of the code once you look at it

2. It accomplishes complex tasks, but does so in a way that makes it easy to modify, repair or improve upon.

3. It is built with caching and scalibility needs pre-understood. I mean we think long term, we expect the worst hell to be applied to the code, and so reasonably prepare for that hell.

4. It is error proofed, we prepare against any possible error, and if an error does occur, then we are prepared to both give the customer a good experience and thorough documentation of that error, thru many routes, cfmail, cflog or whatever trick you like.

5. It has been thoroughly planned and documented before any coding has even started. Then re-documented after it is done to help make it easy to understand the work that was done.

6. It is something you can take pride in, and not worry that in 2 months after your contract is over, you'll be called back to fix it.

If we can start meeting those demands, and then reward and recognize those quality developers, then we can create the reputation of CF Developers that we really want.

D.Ross.Blog: Frameworks, Methodologies

D.Ross.Blog: Frameworks, Methodologies

Basically this is his comment back to me. I do actually respect someone that listens and then rebutts what I say. I am not always correct, but sometimes I am.

My issue with methodologies has to be more about the reasons why people or companies adopt them.

For example, currently my company is outsourcing some application work, and they want to use cffunction and cfc's even tho it does not help the performance, stability or scalibility of the application.

My goal in coding is always many fold:

1. Make sure I completely understand what the project is, and what's expected of me?

2. Code in such a way that it is easy to understand, modify, error-fix and repair.

3. Always plan for scalibility, always code as if hell would be unleashed on my code, I am not always successfull, but I always try.

I am just honestly sick and tired of all this OO, Java, CFC, as if we have really mastered CFML to the point that going this different path actually either:

1. Improves the Performance, Scalibility of the Code

Or

2. Adds features that were not available in CFML.

There are tons of features in Java, that i may want to take advantage of, but I would add it using standard cfml.

I don't hate Java, OO, I just hate being pushed into those because it's the new thing, the fad.

Maybe I am just not hip enough.

:)

D.Ross.Blog: Framework load testing comparison

D.Ross.Blog: Framework load testing comparison

This is a very interesting post on Load Testing for different CF Methodologies.

I, as a purist, prefer to use standard cfml, but there are plenty of things to learn from comparing and testing methodologies.

I do agree with Hal Helms that it is important to have a methodology, but I disagree that any of the methodologies we currently have is that good.

Simply said, it appears that they are more out of attempt to be more object-oriented rather than how can we make this code more stable, perform better, more error proof.

Now I have no magic wand to make bad code into good code. But if you practice long enough, you learn what effort it really takes to produce highly-scalible, error-proof code.

Here is a link to my article all about Error Proofing your code. Trust me this will save you many headaches. Remember it's better to prevent/plan for the error than to get a call in the middle of the night that the code bombed. Or a user typed in wrong data, and therefore shut down the site.

http://www.defusion.com/articles/index.cfm?ArticleID=236

How do you start your morning?

Well this is no advanced tricky system, but as I have sort of learned on my own, and developed my own set of practices.

I have found that using a MS Word Document, and laying out all the work that is on my plate for this week, and then prioritizing it, can be a great ease.

Then i just put on my clipboard-monitor attachment,and my daily plan is available to me all the time, to help keep me on track.

When I was more inexperienced it was very easy to get distracted and to lose track of all the multiple projects I was working on at the time.

What kind of practices do you do, when you get to work in the morning?

What this blog is here for!

Well here is my first coldfusion blog.

Okay I've been coding coldfusion for over 5 years. I have learned a lot, mainly by my own mistakes and from those around me.

I am currently starting to write for Cold Fusion Developer's Journal, but I wanted to finally have my own coldfusion blog.

It all started with my philosohpy of purists or as i have now revised as the Craftsman Credo.

Simply said, most coders can be quite good, but if they don't migrate past cowboy coding.

Cowboy Coding - You are given a project and right away, start coding.

Now i have been plenty guilty of cowboy coding, but it really ends up in painful lessons.

Basically that by not planning clearly and concisely, you end up wasting tons of time, trying to complete a project, that you have no idea, if that's what they really wanted.

So I always start with an assumption:

How can I really make sure I know exactly and precisely what the customer/client/boss really wants?

So I have to ask questions, create forms, find ways to work, so that i only start working on the code, once we are all on the same page.

Everyone who doesn't get why it's important to plan your projects, they act like it's just a waste of time, they just don't understand it.

Perhaps I am not communicating clearly..

What do you think?

BTW here are links to some of my earlier thinking.

http://www.defusion.com/articles/index.cfm?ArticleID=209
http://www.defusion.com/articles/index.cfm?ArticleID=229
http://www.defusion.com/articles/index.cfm?ArticleID=236

I also frequest the Experts Exchange, this is one site that you can both develop your problem solving skills, but also polish your own skill set. Also it helps to help other people in need. And you can get your own problems/puzzles solved.

http://www.experts-exchange.com/Web/WebDevSoftware/ColdFusion

More tomorrow, if i can get up so early.

Good night!

CF FOREVER!