We're growing into something new. Read More
elenor

Elenor  Pro


Summertime website redesign

I redesigned my website for summer after getting tired of all the black. Content-wise it's pretty much just a collection of links now. I worry it's too plain so I may add back my latest tweet and/or my Blobbr widget. I'm also going back and forth on whether I should put more descriptive text in the Phork Labs section. Right now it's just a link to my company website (which is the next up in the redesign queue). I'm kind of proud of my Photoshop wood distressing from the original wood which is much darker and more reddish.

Discussion

Bandcast (a Sencha Touch mobile app)

I created Bandcast for the HackLolla competition. It's using Sencha Touch for the app itself, Twilio (both text and voice), Google charts for QR codes, the Lollapalooza event/venue API for data, Phork for its own API, and Postmark for sending emails. I want to mention that this is a competition and there's a prize for the most popular app, so I would really appreciate your vote. The goal of Bandcast is to help you organize your schedule and connect with friends who are at Lollapalooza. I know there's already FourSquare, Facebook, Twitter and text messages for that sort of thing, but this aims to filter out the noise of friends not at the festival. It also makes it really easy to connect with people you meet there without having to give them more personal info like your phone number or Facebook (no more awkward un-friending later). This was my first Sencha Touch app, and while it's impressive in what it does, there's a big learning curve and I think my time would've been better spent learning how to build a native iOS app. On the plus side it's got the look and feel of a native app (including pull to refresh) and the fact that it's cross platform is awesome. It'll work on iOS 3+, Android 2.1+ and Blackberry 6+ devices, as well as Google Chrome and Safari. Unfortunately the documentation is pretty poor and out of date, and more often than not when I googled a problem I was having I found the exact same question on their official forums with either no response, or a bunch of "I have this question too" responses. I learned just about everything by picking apart the library itself and from their demos which are all written a little differently. Additionally they seem to be in the middle of switching to a more MVC approach but not all the code is set up for it (eg. the all important TabPanel) so you end up with a bit of a nasty hybrid. It's also slower than a native app, which is unsurprising. But again, it is impressive in what it does. I'd recommend it for a smaller app. One thing I was really trying to do was make this app work as best as possible when the data network was incredible slow or unresponsive, and for that I wanted to use Local Storage. Sencha Touch has a local storage proxy, but unfortunately there's no easy way to do "load from API, save to local storage, and load from local storage if unable to connect to API". I also wanted to try wrapping everything in PhoneGap but didn't have time before the entry deadline. This was also my first experience with SASS which is what Sencha Touch uses. Once I figured out how to get everything installed I ended up really liking it and definitely want to explore both SASS and LESS more. I'm way behind on that. Twilio is my new favorite thing ever. It's incredibly user friendly and very reasonably priced. In Bandcast you can add your phone number and a 4 digit PIN and then you'll get a text message with a verification code. Once you verify your number you can check in to a stage by calling in and following the prompts, or you can have your friends' 10 latest checkins read back to you. The reason for this is because sometimes the data networks get overwhelmed but the voice networks still work. This was really easy to set up and I really want to use Twilio again. Google's QR codes are also really easy to use. Each user has a unique QR code and when you scan someone else's code you instantly become mutual friends without having to go through the approval process. This is accomplished by setting the value of the QR code to a URL with the user's ID and a unique, unguessable string. Super easy to do when you're at the festival. And finally there's a public site (which is what I've linked to) so you can get the majority of your friends and schedule set up beforehand. This uses Phork and Phork/it, jQuery and Facebook Connect. The reason I've been so absent from Forrst is because I've been spending all my free time on this app. I'm looking forward to getting back into things again!

TwoTruths.me - A quick weekend project

I designed and build twotruths.me over the weekend for a couple friends. It's built on top of Phork/it so the PHP only took a few hours. The design and the HTML/CSS/JS took the most time. I think my favorite part is a tiny jQuery snippet that I wrote to make clickable divs that will toggle a radio button or checkbox inside it. This means it'll work as a normal form for people without JS but JS people get a nicer UI. You can see it in action by clicking on any of the 3 answer boxes. Lesson learned: Never, EVER host a site with GoDaddy. One should not have to rename php.ini to php5.ini and then modify it to get file uploads working, turn off magic quotes, and fix mod rewrite.

(This seems like it belongs in code, but it's an image and this field is required. Sorry.)

User login system and flowchart

I've seen several posts here asking for ways to log in users using sessions and cookies so I put together a flowchart with some basic function examples and table structures. Ideally this would be object oriented but I left it as a series of function examples for beginners. There are 2 pages to it. I've embedded the first page and here is the second page which contains create table statements and a very simple password encryption class. The whole thing is available as a PDF as well, and I've put together a text file since the PDF doesn't seem to allow copy/paste. I did this really late last night and gave it a quick once over this morning so if you see any errors please let me know.

Logo drafts - opinions please

I need to come up with a new logo for Phork Labs, which will also be incorporated into new logos for Phork and Phork/it. Here's what I've come up as a first revision and I'm looking for feedback on which direction to take, if any. A few notes. Pay no attention to the colors - I just didn't want to upload a wall of blue. Numbers 3 and 6 have smaller logo next to them with slightly different alignment. The smaller logos are alternatives, and not part of the main logo. I'm hoping to come up with something that works on its own as well as with text underneath it and to its side. I'm by no means a logo designer so if they all suck please don't be shy in saying so. Better I find out now. And If you have a better idea or suggestions for improvements I'd love to hear them. Any alternative font suggestions are welcome as well. Thanks! Edited to post a few refinements based on feedback, and the fact that #3 seems to be preferred.

Phork/it (a PHP website starter kit)

Recently I started up development again on Phork/it, which is a website starter kit built on top of my Phork framework. I posted here about Phork/it a few months ago and I'm pleased to say the first release is almost ready. I've put together a demo site as well as a Projeqt with some screenshots of most of its features. While the demo works in all browsers (excluding IE6) it looks much better in a Webkit browser. I'd really appreciate any feedback or comments before I officially release this into the wild. You can download both Phork and Phork/it from Github. Any comments on the installation process would be awesome. And just to reiterate, its list of features include user registration and login with both website registration and oAuth registration/login using Twitter and Facebook user profiles with image upload and resize, as well as import from Twitter/Facebook find your Facebook/Twitter friends on the site (back end built; front end in progress) post to Twitter/Facebook with a way to retry your post if your accounts weren't connected originally (back end built; front end in progress) a forgot/reset your password system a user role system (eg. super user, developer, etc.) a cacheable REST API framework that supports XML, JSON, and JSONP built in APIs for users, friends/followers, and event streams jQuery enhancements like alerts, confirmation dialogs, modal windows, tooltips, etc. the ability to turn on beta mode where a promo code is required to register a simple theming framework (though only 1 theme is built) and of course all of Phork's built in features

class ChainPHP {
	protected $arrResult;
	protected $intPassthru;
	protected $blnProgressive;
	
	public function __construct() {
		$this->arrResult = new ArrayIterator();
		$this->intPassthru = null;
		$this->blnProgressive = false;
	}
	
	public function __call($strFunction, $arrParams = array()) {
		if ($this->intPassthru !== null) {
			$arrParams = array_merge(
				array_slice($arrParams, 0, $this->intPassthru),
				array($this->arrResult->current()),
				array_slice($arrParams, $this->intPassthru)
			);
			
			if (!$this->blnProgressive) {
				$this->intPassthru = null;
			}
		}
	
		if (function_exists($strFunction)) {
			$this->_append(call_user_func_array($strFunction, $arrParams));
		} else if (method_exists($this, $strFunction)) {
			$this->_append(call_user_func_array(array($this, $strFunction), $arrParams));
		} else {
			throw new Exception('Invalid function: ' . $strFunction);
		}
		
		return $this;
	}
	
	public function _passthru($intPosition = 0, $blnProgressive = false) {
		$this->intPassthru = $intPosition;
		$this->blnProgressive = $blnProgressive;
		return $this;
	}
	
	public function _append($mxdValue) {
		$this->arrResult->append($mxdValue);
		$this->arrResult->seek($this->arrResult->count() - 1);
		return $this;
	}
	
	public function _result() {
		return $this->arrResult;
	}
	
	public function _clear() {
		$this->__construct();
		return $this;
	}
}

class ExtendedChainPHP extends ChainPHP {
	public function _array() {
		$this->_append(func_get_args());
		return $this;
	}

	public function _echo($mxdValue = null) {
		print $this->intPassthru !== null ? $this->arrResult->current() : $mxdValue;
		return $this;
	}
}

Chaining native PHP functions

After seeing @sammm's Pointless PHP Library (his words) I was intrigued by the idea of daisy chaining native PHP functions. His library lets you chain predefined functions, but I wanted to see if it was possible to do it with most native functions so I put together this little class. This, too, is pointless, but kind of fun. You can use it like this: $o = new ExtendedChainPHP(); $o->_array(1,2,3,4,5)->_passthru(0, true)->array_reverse()->array_slice(2)->print_r(); $o->_clear()->_append('hello world')->_passthru(0, true)->strrev()->substr(2)->_echo(); $o->md5()->_echo(); $o->_clear(); print $o->_append(time())->_passthru(1)->date('Y-m-d H:i:s')->_result()->current(); $o = new ChainPHP(); print $o->_append(array('hello', 'i', 'i', 'like', 'pie'))->_passthru(0, true)->array_unique()->implode(' ')->ucwords()->_result()->current(); Raw Code » Or if you're not a fan of the passthru call, like this: $o = new ChainPHP(); $o->_append(array('hello', 'i', 'i', 'like', 'pie')) ->array_unique($o->_result()->current()) ->implode(' ', $o->_result()->current()) ->ucwords($o->_result()->current()) ; print $o->_result()->current(); Raw Code »

Phork Kit

I've been working on my open source PHP 5 framework, Phork, since 2006, and I released it (although I don't promote it) a little over a year ago. It's got a full manual online (here is table of contents). The framework itself doesn't contain any sort of complete website code aside from a couple basic "hello world" like controllers for a starting point, and it intentionally doesn't come packaged with any models, JS libraries, images or anything like that. It's just PHP. My reasoning for that is I, as a developer, prefer to build up rather that strip out stuff I don't want. Yesterday I started stripping down the latest site I designed and built with Phork to make a little website starter kit which I'm going to open source when I finish. Current features include: user registration and login with both website registration and oAuth registration/login using Twitter and Facebook user profiles with image upload and resize, as well as import from Twitter/Facebook find your Facebook/Twitter friends on the site post to Twitter/Facebook (with a way to retry your post if your accounts weren't connected originally) a forgot/reset your password system a user role system (eg. super user, developer, etc.) a REST API framework that supports XML, JSON, and JSONP an error and alert system (an alert is displayed) the ability to turn on beta mode where a promo code is required to register some little jQuery enhancements like dropdown menus (see the nav), modal windows (eg. login), a date picker calendar, etc. a simple theming framework (though only 1 theme is built) Is this something you think you'd be interested in, and, if so, what other features would you want to see? I don't want to make a fully-featured WordPress site, just an attractive little starter kit with a base for a lot of common functionality. (Also the logos in the screenshot are just placeholders. I took the design of the site I stripped down and just removed the logos. The nav items and footer are also just placeholder examples.)