TalkPHP
 
 
Account Login
Latest Articles
» The basic usage of PHPTAL, a XML/XHTML template library for PHP
» Vulnerable methods and the areas they are commonly trusted in.
» Simple way to protect a form from bot
» The Basics On: How Session Stealing Works
» How to keep your forms from double posting data
IRC Channel
IRC Speech Bubble Join the friendly bunch on IRC...
(#TalkPHP on Freenode)

...Also available via a web interface.

See this thread for information on the TalkPHP Free Hugs Initiative™. Subject to availability.
Associates
Associates
CSS Tutorials
Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old 12-17-2007, 09:10 PM   #21 (permalink)
The Prestige
Advanced Programmer Top Contributor Good Samaritan 
 
sketchMedia's Avatar
 
Join Date: Oct 2007
Location: Manchester, UK
Posts: 854
Thanks: 32
sketchMedia is on a distinguished road
Default

I'm sorry i need to say that i think the idea of developing something and then getting paid really i'snt a good one, whilst luckily for you, you haven't been screwed it it may happen to you and others in the future, just imagine spending weeks coding your ass off just for the client to turn around and say 'well actually mate, we have changed our mind we don't want it in PHP we want in Ruby and got a new dev working on it' just imagine the frustration and as Village Idiot said, more often then not you are left with a completely useless script thats half finished and has no market worth, although i do understand what your saying that a client needs to see it before he/she pays, it works great for cars but not programming unfortunately, i suppose thats why keeping the client informed throughout the build might be a good substitute.

Quote:
Any client who is not willing to pay an upfront isn't worth working with.
couldn't agree more mate.

Anyway i'm not having a go, do business how you wish its not my place to tell you otherwise, i'm just saying that i don't really agree.
__________________
mysql> SELECT * FROM `users` WHERE `users`.`clue` > 0;
Empty set (0.00 sec)
sketchMedia is offline  
Reply With Quote
Old 12-18-2007, 03:39 AM   #22 (permalink)
Wizard
Top Contributor 
 
Village Idiot's Avatar
 
Join Date: Sep 2007
Posts: 1,299
Thanks: 17
Village Idiot is on a distinguished road
Default

If you like the article, please digg here
http://digg.com/programming/Tips_to_...cts_and_Coding
__________________

Village Idiot is offline  
Reply With Quote
Old 01-17-2008, 08:37 AM   #23 (permalink)
Super Moderator
Inquisitive 
 
codefreek's Avatar
 
Join Date: Sep 2007
Location: Near you.
Posts: 791
Thanks: 241
codefreek is on a distinguished road
Default

this was great read, thank you..
codefreek is offline  
Reply With Quote
Old 02-24-2008, 03:35 PM   #24 (permalink)
The Contributor
 
Join Date: Nov 2007
Posts: 32
Thanks: 5
Morishani is on a distinguished road
Default

Great tips. thanks.
__________________
מטבחים (hebrew)
Send a message via ICQ to Morishani Send a message via MSN to Morishani
Morishani is offline  
Reply With Quote
Old 03-09-2008, 08:33 PM   #25 (permalink)
The Acquainted
 
Gareth's Avatar
 
Join Date: Jan 2008
Posts: 136
Thanks: 4
Gareth is on a distinguished road
Default

I have recently got into the habit of using prefixes to my variables. Such as:

a mysql query = $qQueryName
a result = $rQueryName
a message = $mMessageName
a variable = $vVariableName

They really do help me, at least, structure my code and makes them easy to see what they are.

Thanks for the great read, VI.
Gareth is offline  
Reply With Quote
The Following User Says Thank You to Gareth For This Useful Post:
ReSpawN (03-09-2008)
Old 03-09-2008, 09:09 PM   #26 (permalink)
The Frequenter
 
ReSpawN's Avatar
 
Join Date: Nov 2007
Location: Netherlands
Posts: 460
Thanks: 49
ReSpawN is on a distinguished road
Default

It's a great way to oversee your code Gareth. A lot of my friends make queries like "$memberprofile = 'SELECT * ...';" which may seem bloody obvious to them, but you will have to CHECK the query if it is a string, query, fetch or even a free_result. What ever. Non the less, it looks messy.

Anyhow, thanks for sharing Gareth. I'll even come in handy for me, as a reminder not to mess up my codes.
__________________
"Life is a bitch, take that bitch on a ride"
Send a message via MSN to ReSpawN
ReSpawN is offline  
Reply With Quote
Old 05-13-2008, 01:04 AM   #27 (permalink)
The Acquainted
 
drewbee's Avatar
 
Join Date: May 2008
Posts: 175
Thanks: 9
drewbee is on a distinguished road
Default

I always require a 25% upfront cost of the total quote, then the 75% upon delivering the final application. There have been special cases where I have setup payment plans for my clients; however, I hide fail-safe bits of of code in the application to which will cause the application to fail after a certain date if payments are not made. Should the full amount be paid, before turning over the code, I remove all bits of this code. This rule is simple for me, if everything is paid in full, nothing is left behind. Don't pay and you just earned yourself a dead program.

Some things I always do:
1) Requirements document is a must. User must sign off on the documents before I even begin so that he/she knows what to expect as delivered for xxxx price.
2) Bug fixes are always handled and corrected through user acceptance testing. All found bugs are fixed as part of the original quote price (obviously if its buggy, I didn't deliver my end of the contract).
3) Upon signoff by the user of user acceptance testing, absolutely no more work or bug fixes will be handled. However, if changes are required or if something needs a few more additions, I have no problem creating a new requirements document focusing on changes (or addendum to the old requirements; either or)
Send a message via AIM to drewbee
drewbee is offline  
Reply With Quote
Old 05-13-2008, 01:14 AM   #28 (permalink)
Wizard
Top Contributor 
 
Village Idiot's Avatar
 
Join Date: Sep 2007
Posts: 1,299
Thanks: 17
Village Idiot is on a distinguished road
Default

When I do things in payment plans, I give them the code I made for the price. The code is theirs, they can do whatever they want with it should they leave. But they don't get away with code they didn't pay for. Think about it, how would you feel if the code you paid for didn't work anymore? You didnt pay full price, but the application is not full. Or do you mean by payment plan that you give them everything and they slowly pay for it? Also, how do you hide these fail-safe bits? Any competent programmer could remove them unless it is encrypted.


3) I indefinitely support my code so long as it hasn't been modified. Sometimes bugs come quite some time later. But once again, I dont support modified code for free. I don't even download their file, I place the final project code on my server and emulate the error (I never delete files). If I am unable to do it, the bug is either a code difference or a server difference -neither are covered by me.
__________________

Village Idiot is offline  
Reply With Quote
Old 05-13-2008, 01:57 PM   #29 (permalink)
The Acquainted
 
drewbee's Avatar
 
Join Date: May 2008
Posts: 175
Thanks: 9
drewbee is on a distinguished road
Default

I give them everything then slowly pay for it (Say over 3 months); Yes, I know any competant programmer could remove these. But then again, if the programmer is competant, their is a good chance that they wont be looking for others to do their work in the first place, though there are still a handfull of reasons that this could potentially happen.

For number 3, I guess I stated it a little harsher then what I actually do. However in most cases, almost all problems should be taken care of during UAT. The user has agreed that what is delivered has met the requirements including any bugs that may have came up. However alot of times I will play this by feel.

For instance, if you have a registration script and the user decides that the username can consist of any characters, but then later comes back and describes a 'bug' in the registration process that allows special characters in the username, this will obviously be a cost fix. Should they have only wanted alphanumeric and maybe a few symbols, that should have been defined in the original requirements.
Send a message via AIM to drewbee
drewbee is offline  
Reply With Quote
Old 06-13-2008, 10:20 PM   #30 (permalink)
The Contributor
 
pipesportugal's Avatar
 
Join Date: May 2008
Location: Oporto-Portugal
Posts: 32
Thanks: 11
pipesportugal is on a distinguished road
Default

Quote:
Originally Posted by drewbee View Post
I always require a 25% upfront cost of the total quote, then the 75% upon delivering the final application. There have been special cases where I have setup payment plans for my clients; however, I hide fail-safe bits of of code in the application to which will cause the application to fail after a certain date if payments are not made. Should the full amount be paid, before turning over the code, I remove all bits of this code. This rule is simple for me, if everything is paid in full, nothing is left behind. Don't pay and you just earned yourself a dead program.
php is an open software platform programming language.

Can You help us colleagues by explaining a little bit how You do this protection to Your php programs ?

It's easy to do it on a compiled "closed source" program, but open source....?
Help us all, please.

pipesportugal
pipesportugal is offline  
Reply With Quote
Old 06-18-2008, 03:39 PM   #31 (permalink)
Wizard
Top Contributor 
 
Village Idiot's Avatar
 
Join Date: Sep 2007
Posts: 1,299
Thanks: 17
Village Idiot is on a distinguished road
Default

Unlike languages like asp.net, php compiles on the fly. Meaning the source files have to be uploaded to the server for it to work. Unfortunately, there is no way to compile PHP then put it on a server, but there are programs that encrypt the code. The code is still being compiled on the fly, but it has to pass though a decrypter before it does so.

Another way would be to write most of it in C++ then call it as a custom extension in PHP. That way the source you dotn really want revealed is in a binary file.
__________________

Village Idiot is offline  
Reply With Quote
Old 06-21-2008, 04:24 AM   #32 (permalink)
The Frequenter
 
Join Date: Dec 2007
Location: In my basement
Posts: 386
Thanks: 47
Aaron is on a distinguished road
Default

Quote:
Originally Posted by Village Idiot View Post
Another way would be to write most of it in C++ then call it as a custom extension in PHP. That way the source you dotn really want revealed is in a binary file.
Any programmer that takes the time to learn C++ will quickly learn that OllyDbg and a hex editor can make those efforts to protect your code futile.
__________________
Signatures are nothing but incriminating.
Send a message via MSN to Aaron
Aaron is offline  
Reply With Quote
Old 06-21-2008, 03:13 PM   #33 (permalink)
Wizard
Top Contributor 
 
Village Idiot's Avatar
 
Join Date: Sep 2007
Posts: 1,299
Thanks: 17
Village Idiot is on a distinguished road
Default

Quote:
Originally Posted by Aaron View Post
Any programmer that takes the time to learn C++ will quickly learn that OllyDbg and a hex editor can make those efforts to protect your code futile.

Not really, reverse engineering hasn't stopped hiding the source of any other softwares.
__________________


Last edited by Village Idiot : 06-22-2008 at 09:08 PM.
Village Idiot is offline  
Reply With Quote
Old 06-23-2008, 02:00 AM   #34 (permalink)
The Frequenter
 
Join Date: Dec 2007
Location: In my basement
Posts: 386
Thanks: 47
Aaron is on a distinguished road
Default

It's fine to hide source code, but protecting your code functionality via that is useless, because it can be reverse engineered.
__________________
Signatures are nothing but incriminating.
Send a message via MSN to Aaron
Aaron is offline  
Reply With Quote
Old 11-17-2008, 01:33 AM   #35 (permalink)
The Addict
 
zxt3st's Avatar
 
Join Date: Apr 2008
Posts: 200
Thanks: 18
zxt3st is on a distinguished road
Default

very nice reading, and it is really for real :)
zxt3st is offline  
Reply With Quote
Old 12-09-2008, 04:12 PM   #36 (permalink)
The Visitor
 
yaqubian's Avatar
 
Join Date: Dec 2008
Posts: 1
Thanks: 0
yaqubian is on a distinguished road
Default Thanks

Thank a lot.
yaqubian is offline  
Reply With Quote
Old 12-09-2008, 10:47 PM   #37 (permalink)
The Prestige
Upcoming Programmer Inquisitive 
 
Tanax's Avatar
 
Join Date: Sep 2007
Location: Sweden, Stockholm
Posts: 1,080
Thanks: 115
Tanax is on a distinguished road
Default

Can I ask you something?
How many % of the "final price" are you taking out "upfront"?
I mean, how much should I take out upfront?

And is it a specific % of the final price, or is it like a.. standard amount?
Thanks, great article!
__________________
Tanax is offline  
Reply With Quote
Old 12-10-2008, 01:51 PM   #38 (permalink)
Wizard
Top Contributor 
 
Village Idiot's Avatar
 
Join Date: Sep 2007
Posts: 1,299
Thanks: 17
Village Idiot is on a distinguished road
Default

I generally go around 50% if the structure is before and after (no intermediate payments).
__________________

Village Idiot is offline  
Reply With Quote
Old 01-26-2009, 02:29 AM   #39 (permalink)
The Wanderer
 
Join Date: Jan 2009
Posts: 7
Thanks: 0
Cappuccino is on a distinguished road
Default

Great work

Thanks for the tips
Cappuccino is offline  
Reply With Quote
Old 08-09-2009, 06:56 PM   #40 (permalink)
The Wanderer
 
Join Date: Aug 2009
Posts: 18
Thanks: 1
Jarod B is on a distinguished road
Default

Hey thanks, i like this I really needed this here. Will help me out in the future with my clients :).
Jarod B is offline  
Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


All times are GMT. The time now is 10:28 AM.

 
     

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0
Inactive Reminders By Icora Web Design