{"id":606,"date":"2006-10-26T20:34:19","date_gmt":"2006-10-27T04:34:19","guid":{"rendered":"http:\/\/www.wiredatom.com\/blog\/?p=606"},"modified":"2006-10-27T01:15:33","modified_gmt":"2006-10-27T09:15:33","slug":"back-in-web-development","status":"publish","type":"post","link":"https:\/\/www.wiredatom.com\/blog\/2006\/10\/26\/back-in-web-development\/","title":{"rendered":"Back in Web Development"},"content":{"rendered":"<p>I have been working on a project non-stop for 2 weeks to get the final features up and running. But I just couldn&#8217;t stop squeezing in some good-to-have features to boost the overall &#8220;value&#8221; of the product a bit. Here&#8217;s a short list of what I thought were really slick features:<\/p>\n<p>1. <a href=\"http:\/\/www.huddletogether.com\/projects\/lightbox2\/\" target=\"_blank\">Javascript lightbox<\/a>: This one feature can probably single-handedly describe what the Web2.0 movement is all about. The BEST part is, integrating <a href=\"http:\/\/www.huddletogether.com\/\" target=\"_blank\">Lokesh Dhakar&#8217;s<\/a> code to the project (or ANY project, really) is just a couple of copy and pastes and one line of code change!! That guy is a genius.<\/p>\n<p>2. <a href=\"http:\/\/lixlpixel.org\/recursive_function\/php\/recursive_directory_delete\/\" target=\"_blank\">Recursive delete<\/a>: This a pretty kick-ass class for recursively deleting whole directory structures even if they are not empty (PHP programming in Unix environments, this is a big deal). My project requires my PHP scripts to interact with physical directories. I thought it&#8217;d be a complete waste of my time to write a function\/class to do this if someone else&#8217;s already got a solid script. Implementing this just took one line of code.<\/p>\n<p>3. <a href=\"http:\/\/www.phpclasses.org\/browse\/package\/1659.html\" target=\"_blank\">Directory compress &#038; backup<\/a>: I used this script to work in conjunction with &#8220;Recursive delete&#8221;. Basically before anyone deletes a whole directory, my PHP application will automatically back it up and nicely tug the compressed file in a safe place. Again, this is a kick ass class because it only takes a copy\/paste and defining of a couple of variables. <\/p>\n<p>4. Unique ID check via Ajax + PHP: I wrote this myself using an Ajax class I assembled from prior projects. It simply goes to the database and checks if whatever the user ID (or product ID or whatever) already exists. One bug I encountered under Safari was that if<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:680px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">XMLHttpRequest<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>returns nothing from the database (which means the ID the user entered was unique), Safari makes<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:680px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">status undefined<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>or<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:680px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">null value<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>complaints. One way to <del>get past<\/del> solve this problem is for<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:680px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">XMLHttpRequest<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>to return an empty space via PHP (or whatever language you prefer)&#8230; i.e.<\/p>\n<div class=\"codecolorer-container text railscasts\" style=\"overflow:auto;white-space:nowrap;width:680px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">echo &quot; &quot;<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>. <a href=\"http:\/\/formassembly.com\/blog\/category\/web-application-development\/ajax\/\" target=\"_blank\">Here&#8217;s a nice blog<\/a> about Ajax related issues. This issue is also pretty well documented <a href=\"http:\/\/www.bitterpill.org\/bp\/2005-06\/safari-xmlhttprequest-undefine.html\" target=\"_blank\">here<\/a> though &#8220;bitterpill.org&#8217;s particular trick didn&#8217;t solve the problem for me.<\/p>\n<p>5. <a href=\"http:\/\/the-stickman.com\/web-development\/javascript\/updated-upload-multiple-files-with-a-single-file-element\/\" target=\"_blank\">Multiple file uploads<\/a>: <a href=\"http:\/\/www.the-stickman.com\" target=\"_blank\">The Stickman<\/a> has some really neat references to a handful of technologies I am currently exploring. This &#8220;multiple file upload&#8221; script isn&#8217;t particularly elegant but does its job exceptionally well. I was able to integrate this, along with everything above, into one coherent code base, fortunately.<\/p>\n<p>6. <a href=\"http:\/\/www.bitfolge.de\/snif-en.html\" target=\"_blank\">Snif<\/a> (stands for &#8220;simple and nice index file&#8221; ) is probably one of the best-looking and utilitarian directory and file index script I have found thus far. There are tons of others that do way too much or too little (some of which cost quite a bit too). The downside of snif is that the code hasn&#8217;t been maintained for quite a while, and its forum is littered with more questions than answers. But I did find some nice &#8220;mods&#8221; to enhance its core functionalities quite a bit. Another problem I had with snif was how hard it was to integrate into my existing code base. That said, snif is still a very solid standalone directory index script though!<\/p>\n<p>7. By accident, I stumbled upon a <a href=\"http:\/\/tucows.com\/Web_20\/\" target=\"_blank\">list of Web2.0 sites<\/a> from Tucows. I look forward to studying up the latest eye candies these sites offer for my future projects.<\/p>\n<p>So now that most of the core features are done, I just need to find a fast(er) Windows environment to test the css layouts, mostly for IE. I wish IE would just go away so that us web programming types don&#8217;t have to deal with Microsoft&#8217;s snobbish approach towards web standards. Go Firefox, Opera and Safari.<br \/>\n.<br \/>\n.<br \/>\n.<br \/>\nApple finally decided to release Core 2 Dual version of MacBook Pro right before Christmas! How kind. I made a pseudo promise that I&#8217;d get a MacBook Pro if they upgraded it to Core 2 Dual&#8230; not knowing they&#8217;d do it before January&#8217;s Macworld&#8230; But since the budget is kind of tight these days, I will hang on to my trusty old PowerBook G4 until OSX.5 Leopard comes standard with MacBook Pros! Hah!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have been working on a project non-stop for 2 weeks to get the final features up and running. But I just couldn&#8217;t stop squeezing in some good-to-have features to boost the overall &#8220;value&#8221; of the product a bit. Here&#8217;s a short list of what I thought were really slick features: 1. Javascript lightbox: This &hellip; <a href=\"https:\/\/www.wiredatom.com\/blog\/2006\/10\/26\/back-in-web-development\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Back in Web Development&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[21,10,3,4],"tags":[],"class_list":["post-606","post","type-post","status-publish","format-standard","hentry","category-coding","category-geek-stuff","category-mac-osx","category-tips-tricks"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p54IqZ-9M","_links":{"self":[{"href":"https:\/\/www.wiredatom.com\/blog\/wp-json\/wp\/v2\/posts\/606","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wiredatom.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wiredatom.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wiredatom.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wiredatom.com\/blog\/wp-json\/wp\/v2\/comments?post=606"}],"version-history":[{"count":0,"href":"https:\/\/www.wiredatom.com\/blog\/wp-json\/wp\/v2\/posts\/606\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wiredatom.com\/blog\/wp-json\/wp\/v2\/media?parent=606"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wiredatom.com\/blog\/wp-json\/wp\/v2\/categories?post=606"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wiredatom.com\/blog\/wp-json\/wp\/v2\/tags?post=606"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}