Tag Archives: Projects

why I choose the mit license

14 Jan

I’ve been slowly working on moving all of my projects and tutorials to one site. Mainly because there treated like blog posts instead of projects. This of course lead me to start looking at which license to start looking at which license to release everything as.

After a few days pouring over everything on the web I decided to choose the mit license. Why? The mit license fits how I want to release my code. It releases my code openly to anyone, only asking that the copyright in my code remain.

This will probably lead to you ask why not gpl, apache, or bsd?

why I didn’t choose gpl

the gpl license [http://en.wikipedia.org/wiki/GNU_General_Public_License] is restrictive IMO, due to the fact that it forces a user to release anyone that uses what i create under gpl as well. This is not to say that the gpl is wrong, just that its restrictive to end users / developers in a way I choose not to me. If someone takes code that I am openly releasing, I don’t want to limit them in anyway other than to leave a portion giving me credit for my portion of code, that’s it.

If i was working on some huge next best thing (think wordpress) and planned to release it, then I would use a gpl license. why? something like wordpress could easily be exploited commercially. If I take the time to build something like that I would want anyone who decides to change it or build off of it to release it themselves, to also make sure it’s free under the same license. The biggest difference here is intent. If you were to create the next swfobject.js (which uses an mit license), why restrict your users? But if your creating the next wordpress you don’t want to restrict users, just ensure that your work continues to be free.

why i didn’t choose bsd

the bsd license is similar to the mit license, but with an advertising clause. So to prevent anyone from any legal issues (who knows what counts as advertising in the future), why restrict end users?

why I didn’t choose apache

the apache license is the default license for projects at google code (you can select others), so it’s gotta be good. But it feel slightly more restrictive. That said: I’m releasing anything that uses patents. If you are then an apache license might be for you if you’d like to not restrict users.

in a nutshell

I think the best quote I came across was from eagain.wordpress.com:

if you want software to be free GPL is better than BSD. If you want use of software to be free BSD is better.

I think mit/bsd licenses are better for developers when your creating random things that might help someone (think swfobject). gpl is better if your developing an application to help everyone (think wordpress).

sid

*update* – found another good article:

http://fosswire.com/2007/04/06/the-differences-between-the-gpl-lgpl-and-the-bsd/

simple things that f up projects

26 Nov

So while reading the comments from my last post I started wondering, whats some of the things that tend to “f” up projects? after further thought here is what i came up with. I’ll try and expand it when i expand the quick start: web project management post

communication – design to developer, developer to designer, client to pm, pm to developer / designers
building one trick ponies – why build one trick pony sites, apps? their hard to expand, reuse, etc
lack of solid ui design from start
general lack of knowledge on web optimizing
file access / version control – git / svn, problem solved
using basecamp as a run on forum

short, sweet, sleep

holy crap its too damn hard to do the right thing

18 Aug

today one of the projects I work on tracked a user repeatedly trying to get contact information from our younger members, actually only our younger female members. We’re kid friendly so always watch out for certain types of communcation.

After repeat bans we then did an ip ban, because he keep coming back to try and contact more users. To me that seems like a red flag, so after a bit of googling and reverse lookups I contacted verison as they would know whether this was some hopeless kid or an actual threat.

The first number listed is a voicemail telling you were to email, the next number agreed with me and put me through to the non voicemail number for verisons online security team.

Their security team turned out to be something that sounded like a call center in some country, their response? call the police. WTF?! No offense but I’m bring this to your attention, because you have the account information and can confirm if this is an action item as soon as I’m off the line and you look at the account… right?

30 minutes later I get a call back from the call center saying: “Hi you just called called, now what type of child pornography does this user have?”. How me trying to simply pass on a possible threat goes to me reporting child porn I have no idea.

after 20 minutes of explaining again the situation the call center employee finally understood why I was calling, and submitted a request to check out the account because of what happened on that site.

This took about 1 1/2 hours and 4 calls – Holy Crap! It really takes an hour and a half + 4 phone calls to submit a BOLO. There has to be an easier way to simply pass on information like this to isp’s.

There seriously needs to be a better way for admins to notify isps when one of their users is aggressively displaying strong indications of being a child predator. Or at least some form of SOP.

I propose they do the following:

  1. Admin contacts ISP, tells them situation. (2-5 minutes)
  2. Verify the admin is actually an admin of the site mentioned via email ( 3 – 7 minutes )
  3. Verify the site is active and general content of site. Already done
  4. Verify the ip (30 seconds)
  5. Verify household / age of user
  6. Notify whoever needs to be notified and request documentation if needed
  7. Send follow up thanks for the heads up email

Maybe I’m to used to SALUTE’s, BOLO’s, etc. But it seems like common sense to make it easy for the people who run these sites to be able to report activities like this. Maybe I’m the only one that thinks that.

Anyways his ip’s blocked and the iprange as a whole is getting extra careful watching.

elsid out – I got deadlines to hit.

tip : programming competitions

8 Jun

Last week I learned a new term: Rubber banding. Basically rubber banding is putting little fixes in a game / competition to the playing field evened out.

If your building a competition game / world, tweak it. ex: group a has 9000 members, group b has 1000 – it obvious group a will win, but we need to make sure both groups feel like playing is worth it. Also we want to give group b a fighting chance.

How? think of it like two cars racing. the car has to struggle harder to go faster, the faster it goes. but the car thats moving slower isn’t as close to redline, so it can get to the same speed as the lead car more easily than the lead hard can increase in the same amount of speed. Hope that makes sense, I’ve been thinking in metaphors alot the past few months.

so :

increase = position / teams or increase_factor = (teams – position) +1.
gain*=increase or gain/=increase_factor

either one will work, we went with something built off of the second concept. You’ll want to do more with it of course, but thats the base of it.

if you find this helpful post a comment. i’ll post a base world / character evolution formula whenever i can figure out how to explain it, and not explain a projects system

sid out

flash: my beginnings

15 May

It’s fun to think on when i first started flash. i think i first started back in 2000 at feast new media. that was my second internship and right before the bubble burst. the place where i first learned about tweens, and astalavista.

i went home, cracked a trial and shortly after realized i’d forgotten everything i’d learned at work that day.

it wasn’t till a few months later after seeing dero 357’s site that i got back into it. went to barnes and noble, and grabbed the first edition of new masters of flash.

my first movie still is the best tween i ever did, but that probably because
1. i admired praystation
2. his quote in in that book

i was already a huge praystations fan. After reading what he thought : i decided i was a coder, not a tweener.

these days that old debate / line is pretty much blurred, if not dead, but i still stick that mentality. i used code pretty much for everything, and if i tween : i control it with code. lol

so by now it’s the end / beginning of 2000/2001. I’m coding everyday (read entire manual twice) and working as a asp programmer by day, and doing flash projects and coding every other waking moment.

back then it was praystation, dreamless, syder, were-here, actionscripts.org and flashkit. those sites (hell dreamless and praystation alone) stepped my game up big time. funny thing is i wouldn’t let my job know i was an as/flash guy. i felt like they we’re to unpure and would only whore flash, vs loving it – yes completely young passion visioned back then. I like to think i still kinda think like that, with hopefully something finally resembling common sense.

2001 was a big year for me, it’s when i finally started making my own path, left school (computer information systems) and started working for myself. it’s also the first i ever realised i was good at flash(we’ll for those days – lol).

php security in a nutshell

9 May

I have a friend I’m teaching foundation security to. This post is for him, but also as a protest to some of the materials I’ve found when looking for reference material for him.

Security at it’s simplest form is common sense. ask yourself, how can I make sure I get exactly what I want? How do I make sure I only give what I want. One article mentions xss attacks, and only says prevent them. Why? Thats the question alot of people have when starting why? So why not teach them how to do it first?

How to avoid sql injection / xss, and other misc attacks.

As mentioned this is part rant, part helpful. I’ll explain the following tips and why / how you do it.

  • always use require_once, or include_once. why? it keeps someone from getting your files stuck in loops.
  • clean everything that calls, enters, looks at your db.
  • typecast whenever you expect a certain type of variable.
  • control access and check permissions
  • use your own sessions
  • track everything in some form
  • setup php correctly
  • hide whats not to be seen / accessed

first off let me say I’m by no means a security god. Actually I’m not even an advanced user. Sad as it is maybe to say: I’ve never used pear. that said, the majority of attacks / exploits can be easily avoided. Why? because the majority of attacks on the web don’t come from hackers they come from script kiddies. We can be lax with our own stuff ( like this blog ), but any application you build for a client should at least have the basics.

Enough ranting now to the meat and tators…. I’ll keep everything short and sweet. fyi – this is pretty much a brain dump, so prob not in “good form”.

why do we use the _once functions?

if you have a file that loads another file, say index.php?get=/calender.php

what happens if someone changes get to /index.php? yeap your suck in a loop, unless you use require_once / include_once

simple huh?

State changes

Your first question is prob, what the hell is a state change? a state change is simply any change, anytime you change something, whether in the db, a file, an upload: it should always use post. why? Post can be hacked yes, but it’s harder to hack post.

imagine we’re using an online game
ex: update=1&user=87897&add_money=8.

so any user who can add will know: hey i can change add_money to 100 and gain 100 points. On top of that any user can now see all your get vars. Why does that matter? The less they know about your vars, the harder it is for a kiddie / developer to exploit it?

why else? It makes it easier to validate changes. Why? Honestly I don’t even remember why right now, but hopefully you won’t hold that against me

all users are evil

I know kinda overzealous, but you need to have this mindset, why? users will accidentally mess up your system every chance they get. And script kiddies love telling you how l33t they are if they do something as simple as figure out how to make a game page display a different page.

as for making a game page display a different page, honestly: who cares ( yes that was me venting). But in order to prevent accidents, or worst kiddie hacks, control everything! I’m not saying make your app so restrictive that users hate it, but – actually an example would fit best.

today the team made a new flash widget that requires user data.
ex1: pass user data as flash vars, then use loadvars to pass update to server

or more secure
ex2: use loadvars to recieve user data from server, and then pass update to server with loadvars.

in this example we could have honestly used either way as the update script validates all data and any real changes are driven off the database, not the state change, but you get the point. Its one less thing worry about if a user decides to try and change the vars passed, and also one less file to update if we change something.

Users will enter strings when numbers should be entered, upload swf’s when you only want images – you get the point. And the point is validate, and whenever possible take the control from the frontend and move it to the backend.

Be as lazy as possible

I say I am a smart lazy person. building 30 different files takes more time than building one file, and using includes, or a template structure. Pretty lazy huh? but also easier to update and more secure. The more files you have that each have their own independent / copy + pasted code, the more opportunities you have for a slip up. Make one file, and let it handle the logic. You’ll have more freetime, and get more sleep. Or maybe you’ll just spend that time working on more projects. See being lazy is a good thing, but only if done correctly.

we can take this a step further and say why even ftp into the server, it’s so time consuming. why not just build a backend that not only manages your files, but controls access to them – Thats more of a teaser than anything, but try it out, you’ll like the results.

typecast whenever possible

imagine we’re using an online game
ex: update=1&user=87897&add_money=8

ok so what if someone changes add_money to a delete statement, or attempts some form of sql injection. whats the simplest way to defeat it? $money=(integer) $_GET[' add_money'];

Yeap one simple change is all it took to defeat the sql injection. why? Typecasting is basically a way of forcing something to be something. huh? if i want a value to always be an integer, i use (integer). If I want a double i use (double), string (string).

Yeah it’s that simple. the only issue i’ve run into is that you can’t use typecasting in defining function / method params. huh?

ex: function foo((integer)$f=0)

that will cause an error, but you can do

ex: function foo($f=0){

$f=(integer)$f;
}

Make sense? of course I can’t force something to (mocha frap with extra mocha) $coffee, but thats life. good now on to more, or learn more about typecasting

Validate, validate, validate

using typecasting is great for numbers, but theres other ways to validate your data. the best and most powerful being regular expressions

ex: preg_replace(‘/[^a-z0-9]/i’,”,$value);

The above regex replaces any non alpha numeric characters in value. spend sometime getting comfortable with regex as its an extremely powerful and useful feature. Not just for validating data, but regex has many other uses as well.

Be a neat freak, or cleaning your sql

By now you understand sql injection, if not

ok so now we all understand it. basically its a cool way of saying, someones trying to make my query do bad things, but saying it like that would make me should like a user, so we say sql injection and confuse the heck out of clients :p

we just saw how to prevent one form of sql attack. now lets see how we can handle preventing them at the query level.

Whenever data is sent to your db it should always be cleaned. Me I like to make sure both the table, columns are cleaned using a function that makes sure tables / column names follow a standard, and a cleaning function for actual data. Why? When developing an app from scratch you normally have freedom over how tables, columns are named. I prefer to keep all tables and columns lower case, and only allow _ as a special char (non alpha numeric character). what does it look like?

ex: //convert name to proper db format
function dbProperObjectName($objectName){
//if you want to use caps is table / column names then please uncomment this
$objectName=strtolower($objectName);
return @preg_replace(“/([\\x00-\\x2d\\x3a-\\x40\\x5b-\\x60\\x7b-\\xff{$this->mSystemDatabase['restricted_chars']}\\x2f])/e”, ‘_’, $objectName);
}

You can ignore the {$this->mSystemDatabase['restricted_chars']} thats some carry over from the db class. If you don’t understand what heck that says I’ll explain. first I’m changing $objectName to all lowercase, if it’s not already. then we’re using a regular expression (regex) to clean our string of anything thats is not a letter or number and replacing it with _. why does this matter? because if for any reason our table name contains a sql injection, when ran it will only return nothing. why? because if $objectName was SELECT * FROM HOME, it will now be select___from_home. which will return nothing because select___from_home isn’t a valid table. See and you thought cleaning wasn’t fun.

Ok you do windows, but what else?

As much fun as cleaning a table name maybe, we really need to make sure our data is safe. why? ummm because I say so. There are many reasons, ranging from controlling content, preventing xss, sql injection. But I like to think you’ll do it because users are evil :)

ex: //strip bad things from a string you plan to use in a query
function dbFriendlyValue($value=false,$fixNewlines=true,$allowedTags=[pass your list of allowed tags here]){
//if no value then just return 0, use this because empty returns false if $value =0
if($value===false) return 0;

//convert to string for checking, this is fine for text / numeric values
$value=(string)$value;

//strip slashes if magic quotes enabled
if( get_magic_quotes_gpc() ) $value = stripslashes( $value );

//clear white space
$value=trim($value);

//fix \r\n
$value=str_replace(“\r\n”, “\n”, $value);

//clear tags (except allowed) or just use html entities
$value=(!empty($allowedTags)) ? strip_tags($value,$allowedTags) : htmlentities($value, ENT_QUOTES);

//change newlines to <br>
if($fixNewlines) $value=nl2br($value);

//clear any bad sql we might find untested regex
$value=@preg_replace(‘/(insert(\s?)into|\).(\s?)values.(\s?)\(|DELETE.(\s?)FROM|CREATE.(\s?)[datbsetl]{5,8}|alter.(\s?)[datbsetlcoumn]{5,8}|drop.(\s?)[datbsetlcoumn]{5,8}|update.\s?(.*?).\s?set|alter.(\s?)[datbsetlcoumn]{5,8})/i’,”,$value);

//add slashes
$value=(@mysql_real_escape_string($value)) ? @mysql_real_escape_string($value) : addslashes($value);

return $value;
}

woah what the hell was that? it was me doing the windows and the oven. lets break it down

when calling the function we pass the value, whether to fix newlines ( default : true) , and the string containing allowed tags if any.
next we make sure we have a value to clean, if not return 0, just in case the function is being used to create a sql statement. we check for magic quotes because if this value came from a submitted variable and magic quotes is on, it will add slashes. if its on the strip those slashes so we can continue.

i’ll skip trim and str_replace, now we’re at strip tags. php is pretty good at striping tags, but you want another option use htmlentities( $value, ENT_QUOTES)

and now on to our regex. this is untested ( sorry still building the class ), but points you in the right direction. the regex searches the value for any sql statements and strips them. lastly we add slashes to our value to make its sql / db safe.

woah – we’ve covered alot. almost done

setup php right

TURN OF REGISTER GLOBALS! yes thats all caps for a reason. Also disable magic quotes and change the headers sent my apache to hide version / software information. Can’t turn of register globals? try this function:

function clearRegisteredGlobals(){
global $_GET,$_REQUEST,$_POST,$_SESSION,$_COOKIE,$_FILES;

//check if register globals is on – register globals check taken fron drupal installed patch : http://drupal.org/files/issues/register_globals_check-D6_3.patch
//get php ini setting
$register_globals = trim(ini_get(‘register_globals’));
//check ini value
if(!empty($register_globals) && strtolower($register_globals) != ‘off’){
//ok now lets clear the variables set with register globals

//make array of superglobals
$registered=$_REQUEST;
$registered=(!empty($_POST)) ? array_merge($registered,$_POST) : $registered;
$registered=(!empty($_GET)) ? array_merge($registered,$_GET) : $registered;
$registered=(!empty($_SESSION)) ? array_merge($registered,$_SESSION) : $registered;
$registered=(!empty($_COOKIE)) ? array_merge($registered,$_COOKIE) : $registered;

foreach($registered as $var=>$void){
@unset($GLOBALS[$var]);
}
}
}

Hide everything

hide everything – that simple. if a folder, file, etc doesn’t / should be seen hide it. How? well if you use the .inc file extension like me, configure apache to handle .inc files with php. another option, or added protection: use htaccess to prevent access to .inc files, this will not effect your scripts, just web browsing.

In addition to hiding your inc files, don’t allow access to directories that aren’t needed to view your site. so you images directory should allow access, but your lib, class, or inc folder shouldn’t.

Important files (db config) should be in a directory outside of your hosting directory, but if you name it .inc, or .php and follow these directions you should be ok.

Lastly – turn off directory browsing.

Control access

ever part of your site should have an access level. So areas like your home page, public areas would a level 0. areas a users settings page would be a 1 (making sure only the user can access it of course), and your admin area – thats another story. Your admin area is the heart / backbone / investors dream of your site. That said protect it! all users in your admin should have an access level, and different parts of admin should have different access requirements.

ex: moderator – login, see’s flagged post area, does not see links to other areas, can not access other areas. manager: login, sees users, can add or remove users, but can not access critical site areas, and can not add a user >= his level. Admin can do almost everything, and lastly: rot – your root account can be named anything, but only allow one account full control over the system.

so quick review: users should only be able to see and access areas within their permissions scope, users should never be add / give users permissions >= their permissions.

Lastly, track everything your admin users do. You can go as far as adding an approval system for changes, tying your backend to svn to undo / redo changes, it’s pretty much up to you and the project / budget.

using sessions

sessions are like raymond, everybody loves them. But if your depending fully on php sessions you should make some changes. There should only be 1-2 cookie and session variables sent ( you can also send session id with get ), everything else should be handled internally in your application. Which means session / user validation, tracking, and variables.

misc

  • using isset only tells you if a var is set, not if it contains a value, use empty instead.
  • instead of adding more columns to your db for certain options, you can build a flag system. this allows you to add new options, without always adding a new column.
  • encrypt sensitive data (ssn’s, sin’s, cc data, phone taps, next weeks lotto numbers)
  • aes is your safest bet if your using encryption
  • if your using encryption, you need to spec out an information access process, permissions system (more than just roles)
  • kiss, the simpler it is to the end user, the less likely they are to break, figure out how to exploit it.
  • Variable names shouldn’t match table column names
  • separate code from design. not so much security a being smart and lazy – saves alot of work in the future

Read the php manual, you’ll find lots of good advice / functions in the classes.

Are we done?

Yes, hopefully someone gets something out of this, and I kept my promise of short and sweet. a quick google is all you’ll need to learn more about a subject. so right click -> search google

Gotta question, feedback, or recommendation? leave a comment

Cheers Sid / Greg

adsense: spam, scams, and hot adult ads central

9 Apr

Adsense has seriously let their standards slip over the last year, and now it’s offically gone to crap. One one project we’ve have porn, adult ads, spam, scams, and lions and tigers and bears – oh my.

but seriously – why has adsense gone straight to crap. On a family friendly coppa site we’re recieving complaints of non safe ads for months, and nothing to do about it.

If your running a kid / family friendlysite, find another option, like gofish

Of course, I’m still running google ads on personal sites. As far as projects go, stay away from adsense.

We haven’t been lucky enough to only receive unsafe text ads, but images as well of women wearing next to nothing playing with each other, graphic dating site ads, religious propaganda, etc.

Read more about some of the ads google serves here: http://www.baekdal.com/notes/work/adsense-is-evil/

the new network: what's it about

11 Dec

I’ve been posting alot on linux htpc, mythtv, and netowrking here and there, thought i should prob explain what i’m looking to do.also i need to start documenting stuff for myself.

current systems

right now i have 4 boxes.

  1. p4 2.4 laptop
  2. p4 2.8 laptop
  3. pentium m 1.8 laptop
  4. amd x2 4600 desktop

at the current moment there all being used as follows

  1. p4 2.4 – my son plays with it
  2.  p4 2.8 – ubuntu play box
  3. pm 1.8 – goes back and forth between being a ubuntu box and my xp mobile dev machine
  4. x2 4600 – vista – recording / watching tv, torrents, web, and sometimes dev

storage / drives

I currently have about 30-40 gigs per laptop, a 74 raptor and 250gb on the x2, and about 600-750 gb on exturnals.

In addition to all this i also have 3 exturnal burners (2 dvd, 1 cd) and a bunch more exturnals in storage.

the old network

up until about 6 months ago i had a windows domain running that piggybacked off one of my old domains for exturnal dns, and maintained it’s own internal dns, dhcp, web (apache and iis), file, remote access (via web based interface ), web based proxy server (to get around nmci’s proxy at work),  fms server, and intranet. I’ve gotten rid of about 3 machines since then.

I liked the setup, but in honesty i just regreted going back to windows when i knew it was time to finally go fully to linux.

current network

my current network is in one word crap, it consists of three routers:

  1. old linksys network router
  2. belkin 5 port wireless router
  3. motarola 6 port voip router

each machine has it’s own web server / development envirnoment, and needless to say files are easily managed

the new network

the new network is currently spec’d as follows. the spec is a work in progress, so there are still some changes

I’ve decided to move all video recording and file servering / storage to one place – the fs box. as of right now the spec for this machine includes a total of 6 750gb’s in raid 10, and two in raid 0. dual gigabit, 4 gb of ddr2, and a core2 duo.

this box will serve as the mythtv backend (everything else, except one box, will be enabled as a myth frontend). all machines will also use the fs box for file storage / backups. each system will still have their own fs, but the files that need to be shared (projects, music, video, pictures, apps, torrents, backups, user network dirves, vmware images, etc) will all live on the server. I’m still debating wheter to do boot from network.

in addition to fs box, I’ll also be building a new box for myself that uses the htpc form factor. right now the specs are zalman 160 (don’t know which one yet) or ahanix MCE701. core2quad, 4gb ddr2, 2 74 raptors in raid 0, and a 8600gts.

my current x2 will be changed into the living room machine (tv, general browsing, music, movies ) for the wife. the p4 2.8 will be used for general wireless stuff (wife / friends), and the pm will be my mobile box. I don’t know what the p4 2.4 will be used for yet – prob just to mess around with.

Right now i’m still specing everythng out and doule checking support, implementation, planning ,etc.  but plan to start purchasing parts either as my christmas present or right before my move (no newegg shipping where i’m going).

seems like a big undertaking, and it is but you need to have fun every now and then, and once completed i prob won’t get another chance to do something big again for awhile.

to be continued…

Seacrest out

Powered by ScribeFire.

phpedit and waterproof software

19 Nov

I’ve been a php edit fan for awhile. Took sometime to actually check out waterproof’s current offering today. Have to say they’ve come a long way and have some good projects going.

Props to them for great software – check them out:
http://www.waterproof.fr/

unfinished projects

13 Oct

wondering if anyone would be interested in work from unfinished projects… it’s free