PDA

View Full Version : Experienced Programmer with some availability


sarettah
06-25-2009, 02:32 PM
Hello fellow Opranaughts or Opranites as the case may be ;p

I find myself with some unexpected availability and I am looking for some jobs to fill the hole.

For those that do not know me:

I am a programmer with over 35 years of total computer experience of which the past 21 have been all system design, database design and programming.

I currently code in PHP and ASP for the server side and FoxPro and VB on the desktop.

I am fluent in HTML and CSS but I am in no way a webdesigner.

I specialize in database applications using whatever database is available. I have extensive experience in MYSql and SqlServer databases.

I prefer developing from scratch rather than modifying existing code but can do either as needed.

My experiences range from very large systems to the smallest and all across the spectrum.

I try to be reliable and stick to a timeline that is developed with my client. This is a realistic timeline and it shifts as needed to accommodate the client and the project.

I usually do not have much availability so you don't hear much from me other than the occasional playing around on the board. When Dravyk died I lost my best client (and one of my best friends). My current “bread and butter” client is experiencing some issues, so, like I say I have some availability.

Before anyone asks, No, I do not have any experience with NATs and No, I do not know .NET.

If you would like a reference or 2 please contact me and I will hook you up. I generally do not reveal my clients or their projects.

My rate is currently $75.00 an hour but I also do per project pricing if it is applicable.

If prepaid I can do the work on your server. If the job is postpaid then the work stays on my server until payment is made and cleared. I do not use EPass. I do use Paypal.

If you would be interested in me taking a look at a job for you then please hit me up with some specs and we can go from there.

You can reach me via email at sarettah AT partyafterdark DOT com or on icq at 2155399

Thank you for your attention

My standard disclaimers (that are agreed to for any project) are:

* Open and clear communications with quick responses from each party involved. If the project is delayed while waiting for responses the cost of the project can increase.

* Developer will be paid for all hours worked if the project is placed on hold or terminated prior to completion.

* The objective is to manage the scope of the project in order to maintain the provided estimate. If changes to the scope impact the estimates of either time or cost, the developer will notify the client and acquire approval before proceeding.

* Payment will occur as a prepayment or as each piece is developed and deployed. If the estimate is accepted a mutually agreed upon payment timeline will be developed. If payment is missed without prior notification then development will cease until such tims as payment is made.

* The client will provide the developer with access to the live server through both FTP and Telnet/SSH for development, testing and deployment purposes.

* The developer retains the rights to the code developed.

* The client owns a lifetime exclusive license to use and modify the software developed.

* The client does not own resale rights to the software. In the event that the client sells or transfers their business the license is freely transferrable to whomever the client sells or transfers their business to.

* The developer may not resell this software as a package without the client's permission, however the developer may from time to time utilize routines that were developed for this system in other systems that he develops.

* The client will receive copies of all source code.

* The client may employ other developers that may modify the source code for the system.

* The developer has no responsibility to repair software that is damaged by another developer.

* The client may from time to time request the developer to perfomr maintenance routines on the system or particular pieces of the system. These situations will be billed at the developer's normal hourly rate.


Thank you for your attention.

gonzo
06-25-2009, 04:05 PM
The sticky should suffice to say that Russ can be trusted to get your job done!

sarettah
06-25-2009, 08:57 PM
Thanx for the sticky G :okthumb:

sarettah
06-26-2009, 12:29 AM
Ok, so I am bored.

I recently had a situation where MYSql tables were crashing on me and because of that all the applications that were accessing the affected tables would grind to a big messy halt.

So, I invented a little automated table checking and repair utility that I could launch from the crontab on a regular interval to try to keep the database up and running.

My original app checks multiple databases and has a lot of process checking to make sure that no collisions occur.

I have modified it down to just check all the tables in one database.

And now, I give it to you.



<?php
// check_tables.php
// This application will check all tables in a single database
// for errors and attempt to repair them if found.
// It will email a report to a precoded address or set of addresses
// and presnt a report on the screen or send it to a dump file.
//
// This application uses a process file to make sure that multiple instances
// of the application do not collide. It probably would not be a good thing to
// have 2 different instances of the program attempting the same repairs
// at the same time.
//
// The process file is created in a folder called 'running'. You need to create
// this folder on your server and change the path to it on the appropriate line
// in the housekeeping section below.
//
// This folder must be writeable to the program. This for me means I need to use 777 permissions.
// This folder should be set to the strictest permissions that will still allow
// the application to write to it.
//
//
// Start
//
// Put out a message just because its cool to keep track of how long things take.
echo "Start of run " . date("M d Y H:i:s", time()) . "<br>\n";

// Housekeeping
//
// counters
//
// how many tables need repair
$needrepair=0;
// how many tables were repaired
$repaired=0;
//
// holder for status during check and repair operation
$last_status="";
//
// initial output message
$outstr="A Maintenance run started at " . date("M d Y H:i:s", time()) . "<br><br>\n";
//
// initial error message
$errorstr="There was an error in the maintenance program.\n\n";
//
// ******* All information to be modified is in this section
//
// This is the address to send from
// *** change the line below to reflect an address from your domain
$fromaddress="Database Maintenance auto report<autoreport@yourdomain.com>";
//
// This is the address to send the report and errors to
// *** change the line below to indicate the addresses you wish to send reports to
$toaddress="email@address2reportto.com;secondemail@address2rep ortto.com";
//
// This is the process file. we put this out there at the beginning of the run
// and remove it at the end of the run. If this file exists then
// a maintenance run is already occurring
// **** Change the path below to the proper path on your server
// usually something like /user/web/domain/running
// If you only use it from the browser then this could be
// just running/maint.txt if you create the running folder as a
// subfolder of the folder the app is running from
$processfl="/user/web/domain/running/maint.txt";
//
// database information
//
// *** change the information below to reflect your database settings
//
// database host
$dbhost = "localhost";
//
// database user
$dbuser = "dbusername";
//
// database password
$dbpass = "dbpassword";
//
// database name
$dbname = "dbname";
//
// *** end of data that needs to be modified
//
// End of housekeeping
//
//
// Mainline
//
// check to see if process file already exists.
// if it already exists then email an error report and blow it off
if(file_exists($processfl))
{
$errorstr .="Maintenance tried to start while another instance was running\n\n";
mail_it($errorstr,0,0,1, $fromaddress, $toaddress);
die("Process already running\n\n");
}
//
// ok, another instance is not running so it is ok to run
echo "creating process file<br>\n";
//
// create the process file
// first you open it
$fp=fopen($processfl,'a');
if($fp)
{
// then you close it
fclose($fp);
}
// Check to see if file created ok. I know I know I could just
// look at $fp. But there is always the possibillity that the
// file handler came back ok but the file did not get created
// this covers that.
// if the file did not get created then email an error report and blow it off
if(!file_exists($processfl))
{
$errorstr .="Maintenance could not create the process file\n\n";
mail_it($errorstr,0,0,1, $fromaddress, $toaddress);
die("Could Not Create Process File\n\n");
}
else
{
echo "created the process file<br>\n";
}
// lets hook up to MYSql
// If we dont get a good connection we will
// mail an error report and blow it off
$db = mysql_connect($dbhost, $dbuser, $dbpass);
if(!$db)
{
$errorstr .="Could not connect to MYSQL\n\n";
$errorstr .="MySql error was " . mysql_error() . "\n\n";
mail_it($errorstr,0,0,1, $fromaddress, $toaddress);
die("Could not connect to mysql\n\n");
}
//
// Now we select the database that we are going to check
$selected=mysql_select_db($dbname);
//
// ok, we are good to go
//
// Turn off the server timeout in case of a long winded check or repair operation
set_time_limit(0);
//
// Yeah I know, I am combining appearance and logic here. Bite me.
// This is old school baby, think CGI ;p
// Lets format a table to make our output all need and pretty
// we want a four (4) column table because the commands we will
// use return multiple lines of 4 column output.
$outstr .= "<table border=1>";
$outstr .= "<tr>";
$outstr .= "<td align=center><b>Table Name</b></td>";
$outstr .= "<td align=center><b>Operation</b></td>";
$outstr .= "<td align=center><b>Message Type</b></td>";
$outstr .= "<td align=center><b>Message</b></td>";
$outstr .= "</tr>";
$outstr .= "<tr><td colspan=4 align=center><b>Database " . trim($dbname) . "</b></td></tr>\n";
//
// We first do a show tables query to get a list of the tables in the database
$sql_str="SHOW TABLES";
$tblresult=mysql_query($sql_str, $db);
if($tblresult)
{
// ok the query was good, it didnt error
// now we want to loop through all the tables
while($tblrow=mysql_fetch_array($tblresult))
{
// for each table we do a check tables query
$sql_str="Check Table " . $tblrow[0];
$chkresult=mysql_query($sql_str, $db);
if(!$chkresult)
{
// error in the query, check your syntax ;p
$outstr .= "<tr><td colspan=4 align=center><font color=red><b>Problem checking table " . $tblrow[0] . "</b></font></td></tr>\n";
}
else
{
// the check table query completed and returned output
// we need to loop through the output.
// Check table will return multiple lines
// if there is an error in the table
//
// clear out our last status holder
$last_status="";
//
// loop through the results
while($chkrow=mysql_fetch_array($chkresult))
{
// format the ouput nice and pretty
// put the result in the 4 columns of our table
// column 0 = Table Name
// column 1 = Operation (either Check or Repair)
// column 3 = Message Type (status or error)
// column 4 = Status - we want this to always say OK
$outstr .= "<tr>";
$outstr .= "<td>" . $chkrow[0] . "</td><td align=center>" . $chkrow[1] . "</td><td align=center>" . $chkrow[2] . "</td><td align=center>" . $chkrow[3] . "</td>\n";
$outstr .= "</tr>";
//
// we want to capture the very last status returned so we just keep
// overlaying our last status holder
$last_status=$chkrow[3];
}
// Once we are done looping through the check table results the
// last status returned is in our last status holder. we want this to be OK
if(strtoupper($last_status)<>"OK")
{
// OOps, status was not OK so we need to try a repair
// first we increment our counter to keep track of things
$needrepair++;
// Then lets throw a line in our output to indicate we are repairing something
$outstr .= "<tr><td colspan=4 align=center><font color=red><b>Attempting to repair table " . $tblrow[0] . "</b></font></td></tr>";
//
// Now we run a Repair table query against the table
$sql_str="Repair Table " . $tblrow[0];
$rprresult=mysql_query($sql_str, $db);
if(!$rprresult)
{
// error in the sql. Check your syntax.
$outstr .= "<tr><td colspan=4 align=center><font color=red><b>Problem repairing table " . $tblrow[0] . "</b></font></td></tr>\n";
}
else
{
// Ok the repair table completed so we have to loop through the result
// set just like we did on the check table
// in fact this could be modularized to do both operations
// from one function. But I'm lazy right now and this is already written
// clear out our last status holder
$last_status="";
while($rprrow=mysql_fetch_array($rprresult))
{
// format the ouput nice and pretty
// put the result in the 4 columns of our table
// column 0 = Table Name
// column 1 = Operation (either Check or Repair)
// column 3 = Message Type (status or error)
// column 4 = Status - we want this to always say OK
$outstr .= "<tr>";
$outstr .= "<td>" . $rprrow[0] . "</td><td align=center>" . $rprrow[1] . "</td><td align=center>" . $rprrow[2] . "</td><td align=center>" . $rprrow[3] . "</td>\n";
$outstr .= "</tr>";
$last_status=$rprrow[3];
}
if(strtoupper($last_status)<>"OK")
{
// Repair failed. Report it in our output string
$outstr .= "<tr><td colspan=4 align=center><font color=red><b>Repair Failed " . $tblrow[0] . "</b></font></td></tr>";
}
else
{
// The repair was successful
// increment our repaired counter
$repaired++;
// write our success message to our output string
$outstr .= "<tr><td colspan=4 align=center>Repair Successful " . $tblrow[0] . "</td></tr>";
}
}
}
}
}
}
//
// Ok all done now
// so lets close our table
$outstr .= "</table><br><br>\n";
//
// lets close the database connection
if($db)
{
mysql_close($db);
}
//
// delete the process file to indicate the run is complete
unlink($processfl);
//
// finish off our report with an ending time
$outstr.="End of run " . date("M d Y H:i:s", time()) . "<br>\n";
//
// now lets mail the report
mail_it($outstr, $needrepair, $repaired, 0, $fromaddress, $toaddress);
//
// then put it up on the screen or send to a dump file if running from cron
echo $outstr;
//
// End of mainline
//
// Start of user defined funstions
//
// UDF mail_it mails either our pretty report or an error message
// to whomevers address is in $toaddress
// pass ins are the email message itself - either our report or an error
// The needed repair counter
// The repaired counter
// and a switch telling us whether this is an error report or not $err=0 is a report, 1 is an eror
// from address
// to address
function mail_it($emailmessage, $needed_repair, $were_repaired, $err, $from, $to)
{
// initialize our email subject line
$emailsubj="";
if($err==1)
{
// if we have an error lets indicate it in the subject line
$emailsubj="Maintenance ERROR " . date("M d Y H:i:s", time());
//
// we tack the current time to the email message here so we know when the error occurred
$emailmessage .=date("M d Y H:i:s", time()) . "\n\n";
}
else
{
// There is no error so this is a report lets give a fitting subject line
$emailsubj="Database Maintenance Run";
//
// Now, i want to indicate on the subject line if the report needs to be
// looked at or not. I am going to dfo this by comparing my counters
if(intval($needed_repair)-intval($were_repaired)>0)
{
// If the number of tables needing repair exceeds the tables repaired
// then some were not repaired. Bummer. So lets say that on the
// subject line
$emailsubj .=" - Some Tables Could Not Be Repaired - Please Review";
}
else
{
if(intval($needed_repair)>0)
{
// If we are here then there were some that needed repair
// but all the repairs worked. Life is good.
// Lets say so on the subject line
$emailsubj .=" - Repairs Occurred Successfully";
}
else
{
// if we are here then no repairs were needed
// Life is great. Again lets indicate it on the subject line
$emailsubj .=" - All Is Ok";
}
}
}
//
// set up theheaders for an html mail
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .="From: " . $from . "\r\n";
//
// and let's mail the sucker
mail ( $to, $emailsubj, $emailmessage, $headers);
}

// End of program
?>

softball
06-26-2009, 12:34 AM
Nice, but I have no idea what that is or what it does or where or why I would use such a thing.

sarettah
06-26-2009, 12:42 AM
Nice, but I have no idea what that is or what it does or where or why I would use such a thing.

Well, if you have a MYSql database that needs to be up all the time and do not have staff to take care of it for you then this little app does the maintenance for you and keeps you updated by email as to what issues were encountered.

If you wanted to sell photography you would probably post a pic.

So, if you want to sell programming post some code.

softball
06-26-2009, 12:56 AM
OK, so this is a server kind of thing. I kinda get it now. Good luck filling your availability Russ.

TheEnforcer
06-26-2009, 11:25 AM
Hope someone gives you some work....

sarettah
06-28-2009, 01:11 PM
Hope someone gives you some work....

;p

Noone gives me work :okthumb:

They offer it up and I decide if it is worthy or not :yowsa:


.

softball
06-28-2009, 03:26 PM
;p

Noone gives me work :okthumb:

They offer it up and I decide if it is worthy or not :yowsa:


.

I could see that in your terms and conditions. Bottom line is you are in the retail business, you pitch, the customer decides. Or did I miss something in this basic law of real world business? This ain't Kansas anymore.
If your post was meant to be either ironic or funny, ignore what I have just said. I might have missed the irony.

sarettah
06-28-2009, 06:37 PM
I could see that in your terms and conditions. Bottom line is you are in the retail business, you pitch, the customer decides. Or did I miss something in this basic law of real world business? This ain't Kansas anymore.
If your post was meant to be either ironic or funny, ignore what I have just said. I might have missed the irony.

Yes, it was a joke.

My terms and conditions are fairly standard in the main stream, brick and mortar shop type, web operations.

They were originally modeled on a web design outfit here locally that I did some free lance work for. It was modeled on the terms and conditions they included in their standard contract (for their customers not thier programmers/contractors)

My terms and conditions mererly try to state that the client (my customer) does have a responsibility in regards to the success of thier project.

This is not retail. It is Biz 2 Biz. One size does not fit all.

.

softball
06-28-2009, 07:38 PM
Yes, it was a joke.

My terms and conditions are fairly standard in the main stream, brick and mortar shop type, web operations.

They were originally modeled on a web design outfit here locally that I did some free lance work for. It was modeled on the terms and conditions they included in their standard contract (for their customers not thier programmers/contractors)

My terms and conditions mererly try to state that the client (my customer) does have a responsibility in regards to the success of thier project.

This is not retail. It is Biz 2 Biz. One size does not fit all.

.

Fair enough. However b2b is still retail. Just different customers....posted for the sake of discussion. Any opinions on this?

sarettah
06-28-2009, 08:19 PM
Fair enough. However b2b is still retail. Just different customers....posted for the sake of discussion. Any opinions on this?

Retail is one size fits all.

B2B is a negotiation.

If I were writing canned scripts and trying to sell the same script to xxx number of customers I would call that retail.

I am not doing that, at least not right now. I am doing custom quotes based on what the customer needs and I am just as likely to tell them that I am not the right guy for their particular job (did that twice today) as I am to give them a quote.

Meanwhile, look what moved into my tree.

http://www.americantune.net/raccoon/dont_fuck_with_me_man.jpg