<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3112342835839474160</id><updated>2011-09-28T10:59:34.086-07:00</updated><title type='text'>On A Butternut Squash</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>98</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-5016996263086225008</id><published>2011-07-23T07:16:00.000-07:00</published><updated>2011-07-23T07:17:50.230-07:00</updated><title type='text'>New Landing Page!</title><content type='html'>There is a new landing page for my &lt;a href="http://stagemanagementsoftware.com"&gt;online stage management software&lt;/a&gt;.  Take a look!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-5016996263086225008?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/5016996263086225008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2011/07/new-landing-page.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5016996263086225008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5016996263086225008'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2011/07/new-landing-page.html' title='New Landing Page!'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2006185145957830244</id><published>2011-07-10T12:16:00.000-07:00</published><updated>2011-07-10T12:17:18.417-07:00</updated><title type='text'>Midsummer Update</title><content type='html'>&lt;p class="MsoNormal"&gt;This summer has been very productive and going as planned.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;I completed every checklist item on my End of June sprint for my website, resulting in several enhancements to my marketing and application, including the ability to use barcode readers to take attendance.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;My model airplane has fallen behind schedule too many times, so I’m currently dropping everything except health and fitness in order to complete it.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;It should be ready to fly this week.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;It’s been a very fun project but I underestimated the time required to build it.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;I really can’t wait to fly it!&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;I’m in the analysis phase of the Growers Local project, which I’ve planned to launch in January.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;This move puts Best Attendance on the back burner.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;I’m currently seeking a cofounder for Best Attendance so that it continues to get the attention it deserves.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;The application is profitable and growing, and I know that bringing someone else on board will help tremendously.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Tomorrow, my model rocketry class starts for the STEM program.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;I’m putting the finishing touches on the model rocket that I’ll use as an example in class and making final preparations today.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;My class schedule for the fall is still quite uncertain, but I’m aiming for five sections.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;We’ll be moving on the first of August and taking a hiking vacation the first week in August, then my classes start up on the 20&lt;sup&gt;th&lt;/sup&gt;.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;August will be spent doing some curriculum writing to add rigor to the courses I teach.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2006185145957830244?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2006185145957830244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2011/07/midsummer-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2006185145957830244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2006185145957830244'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2011/07/midsummer-update.html' title='Midsummer Update'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-3370521303321903040</id><published>2011-06-29T11:20:00.000-07:00</published><updated>2011-06-29T11:28:35.924-07:00</updated><title type='text'>Launched: Best Attendance Onstage</title><content type='html'>Community theater is one area for which I originally envisioned Best Attendance to be useful.  Stage managers typically carry around bundles of binders and paperwork, including constantly changing schedules and event calendars, and have for a long time been demanding a software solution.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some stage managers are using Google Calendar and some are using Microsoft Office, but these general purpose applications leave a lot to be desired when it comes to the specific job of stage management.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is one prominent player in the stage management software industry now, Virtual Callboard.  They launched about four years ago and have been slowly gaining a real foothold among community theaters.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think that my solution for &lt;a href="http://bestattendance.com/onstage"&gt;stage management software&lt;/a&gt; does an even better job.  Where it really shines above Virtual Callboard is in how clean and easy to use it is.  Its attendance tracking and reporting capabilities are much more powerful, and it leaves out lesser used features.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For example, Virtual Callboard allows actors to enter their availability into the system, and it takes this into account when scheduling rehearsals.  The problem is that in the real world, actors often forget to do this.  The result is that many of those advanced features don't work the way they were intended to.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My focus is simplicity.  Best Attendance is ridiculously easy to use, and I'm sure stage managers will love it.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-3370521303321903040?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/3370521303321903040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2011/06/launched-best-attendance-onstage.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3370521303321903040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3370521303321903040'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2011/06/launched-best-attendance-onstage.html' title='Launched: Best Attendance Onstage'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-5619247044412618732</id><published>2011-06-20T13:13:00.000-07:00</published><updated>2011-06-20T13:14:08.253-07:00</updated><title type='text'>Three Years, Three Products</title><content type='html'>&lt;p class="MsoNormal"&gt;I’ll be launching my second product in as many years this January.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;I already have a minimum viable product built and plan on getting it market ready within a few months.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;Baring a nuclear disaster, I have some part time teaching jobs and personals savings to get me through at least that long.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;It’s in ultra stealth mode at the moment, but it will be bigger than the Segway, which, as you know, was bigger than the Internet.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;I’ve had another idea in the back of my head for about four years and am stealthily conducting some market research for it.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;I’ll be launching that one the following January.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;The market for this product is huge.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;Also in stealth mode.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The only hints I can give is that all three products (my attendance application included) serve the purpose of building strong local communities.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-5619247044412618732?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/5619247044412618732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2011/06/three-years-three-products.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5619247044412618732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5619247044412618732'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2011/06/three-years-three-products.html' title='Three Years, Three Products'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-3823892153027059324</id><published>2011-06-06T14:20:00.000-07:00</published><updated>2011-06-06T14:21:56.627-07:00</updated><title type='text'>Best Attendance:  First Five Months</title><content type='html'>The web version of Best Attendance launched in January.  This is a recap of some of the things I’ve tried during the past five months, what results I’ve gotten, and things I’ve learned.&lt;br /&gt;&lt;br /&gt;I did manage to get a press release published on  a popular website after buying a banner ad from them.  Other than that, I received a small writeup on one person’s blog after sending over two hundred solicitation emails.  Either I’m doing something drastically wrong, or there’s some inherent force against product reviews in the youth ministry blogosphere.&lt;br /&gt;&lt;br /&gt;Since this is such a large market, and my app has the potential to become well-positioned in it, I’m not going to abandon it completely, but I think a strategy other than emailing random bloggers is called for.  I’ve also done some commenting on other people’s blogs and forums, which has produced a small amount of traffic, but as Patrick McKenzie has also discovered, that strategy simply does not scale as a long term solution.&lt;br /&gt;&lt;br /&gt;I mentioned purchasing a banner ad.  It sent some traffic my way for the first week, but the other three weeks that I paid for were completely worthless.  I ultimately got no sales from the ad.  Advertising does have a purpose other than direct sales conversion, and perhaps it did slightly increase brand awareness for my software.&lt;br /&gt;&lt;br /&gt;I looked into sponsoring conferences, but this proved prohibitively expensive.  I do eventually want to secure some speaking slots at smaller conferences.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Lessons:&lt;br /&gt;Soliciting links from bloggers is a slow and frustrating process, and so far has not been worth my time.&lt;br /&gt;&lt;br /&gt;Banner ads did not pay for themselves, but did allow me to get a press release published and possibly improved brand awareness for my software.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Facebook ads are a great way to get a big shot of traffic to your site quickly.  The conversion rates are tiny, but because the sheer numbers are so large, I did get some conversions to trial and sales from this advertising channel.  It’s also a great way to test your software against a specific market.  My conversion rates were acceptable while running the youth ministry ads, for example, but near zero when running the boy scout market ads.  For getting a quick shot of traffic, testing, and getting a few initial signups, Facebook ads are good, but they are not a long term strategy.&lt;br /&gt;&lt;br /&gt;There are pronounced diminishing returns with Facebook.  After a week or two, people get sick of seeing your ad, while your competitors start bidding up the ad prices.  Even after a two month pause, the ads did not return to their initial level of effectiveness.&lt;br /&gt;&lt;br /&gt;I have been consistently running pay per click ads on Google, Bing, and Yahoo for the youth ministry and boy scout markets.  Here too, there have been no signups from the boy scout side, but there has been a slow but steady trickle of trial signups from the youth ministry side.  I’m staying the course with both of these ads, the goal being not only to directly convert on sales, but also having people start to recognize my name.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lessons:&lt;br /&gt;Facebook ads are great for a short initial shot of traffic but have quickly diminishing returns.&lt;br /&gt;I’m going with my gut that text ads on Google and Bing are a good long term investment.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There are other sources of free traffic that I could be getting, such as from Squidoo, eHow, Twitter, stumbleupon, and other sites.  I haven’t had the time to do much with these.  I don’t believe that they’re as high a priority as the other marketing work I could be doing instead.&lt;br /&gt;&lt;br /&gt;One of my priorities will be to add content to my blog.  I’ve been surprised at how much traffic I’ve received by people stumbling upon my blog posts from Google searches.  I have several plans on how I can dramatically increase the volume of content on my site, bringing in more and more hits.  Patrick McKenzie has had great success with this approach and it’s definitely on my list.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lessons:&lt;br /&gt;Having a lot of specialized content on your site or blog can bring in qualified traffic.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;What about the software itself?  I’m happy to say that it has stood up very well to public use.  I had a wave of hackers trying to do all kinds of nasty things to my server the first week I went live, and I’m happy to say that the software successfully defended itself against all attacks.  I’ve blocked the offending IPs and there has been no trouble since.&lt;br /&gt;&lt;br /&gt;There was a rather nasty bug which affected the email system which a user discovered.  It was fixed within two days.&lt;br /&gt;&lt;br /&gt;Other than that, the software has remained very stable.  My design skills leave much to be desired.  Based off of my experience with the desktop application and the experience of this guy: &lt;a href="http://tbbuck.com/"&gt;http://tbbuck.com/&lt;/a&gt;, I know that improving the look and feel of the application could double (or more) conversion rates.  I’m currently in the middle of converting the site to use a professionally designed theme.  Hopefully that will be completed this week.  I have three other goals for the application this summer, which I described in the last post.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lessons:&lt;br /&gt;No one likes ugly websites.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What’s the bottom line?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Since January, I’ve made $3,048 of income NOT from a job.  Most of that was income from a previous website, and then revenue from selling that website.  I sold the old website to finance the startup costs of Best Attendance, which I think has a rosier long term outlook than the other site did.  About $600 was from my attendance software.  It’s pretty cool when people pay you for their stuff; they’re saying to you that they value what you have to offer.  It’s a feeling that, unfortunately, most people never know.&lt;br /&gt;&lt;br /&gt;This was on expenses of $2,130.  The advertising portion was $1,543.  Most of the other expenses were for supplies, payment processing, web services, and hosting.  My current cash flow rate is about -$100 per month, and I’ll have no problem staying solvent for at least the next year.  I have fewer than ten paying customers and don’t get much traffic, on the order of 20 or so visits per day.&lt;br /&gt;&lt;br /&gt;So, here’s the summary:&lt;br /&gt;• I’m spending more that I’m earning.&lt;br /&gt;• No one knows about the software.&lt;br /&gt;• I’m not getting any traffic.&lt;br /&gt;&lt;br /&gt;Pretty distressing at first glance.  But consider cases like these:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Case 1&lt;/b&gt;&lt;br /&gt;One of my original ideas back in 2006 was to develop stage management software.  After researching the market and seeing that there were a few competitors, none of whom were making any money, I decided not to pursue it.  Well, that’s one reason.  Another reason is that at the same time I was doing this, a brand new business entered the scene and released a product that was pretty much exactly the same one that I had in mind.&lt;br /&gt;&lt;br /&gt;I thought he wouldn’t go anywhere, and for a long time, he didn’t.  His Facebook page looked depressingly lonely, and his testimonial list was tiny.  It stayed this way for about three years.  However, slowly but surely, he was getting customers, and he’s at the point now, five years later, where he has a very viable business.  He was exactly where I am now.  Success did not come overnight, but gradually.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Case 2&lt;/b&gt;&lt;br /&gt;I’m reading Barack Obama’s Audacity of Hope, and his political career started the same way.  During his first campaign, he spent an entire year giving speeches to rooms of three or four people at a time.  He cold called asking for donations to his campaign, and everyone said no.  He was only able to raise about a tenth of the money that he would eventually need.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Case 3&lt;/b&gt;&lt;br /&gt;Tim Pawlenty announced his candidacy for president to an indifferent crowd of a couple hundred people.  It remains to be seen where his campaign will go.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Case 4&lt;/b&gt;&lt;/div&gt;&lt;div&gt;LinkedIn started about the same way, floundered for a number of years, and just issued a fat IPO.&lt;br /&gt;&lt;br /&gt;The point is everyone needs to start somewhere and success does not come overnight.  Five years from now, I can either have an online business or not.  Since five years is going to pass regardless, the prudent strategy is to stay the course.  The business is for the long term, not to get rich quick.&lt;br /&gt;&lt;br /&gt;One thing that’s been a struggle is that there are so many things that I know I should be doing, but simply don’t have time to.  Here, too, a long term strategy helps.  You can only do what you can, when you can.  I believe that success comes a little bit at a time.  Not by being great, but by being consistent.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-3823892153027059324?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/3823892153027059324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2011/06/best-attendance-first-five-months.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3823892153027059324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3823892153027059324'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2011/06/best-attendance-first-five-months.html' title='Best Attendance:  First Five Months'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2098814196144686120</id><published>2011-05-31T10:47:00.000-07:00</published><updated>2011-05-31T10:48:11.468-07:00</updated><title type='text'>Summer Sprint Begins</title><content type='html'>My college classes ended two weeks ago, and after cleaning up some loose ends and taking a self-imposed one week break from all forms of work, today it’s time to begin my “summer sprint”!&lt;br /&gt;&lt;br /&gt;I’ll have about two months and $1700 this summer to invest in the business, and I’ve been coming up with all kinds of different ways of using it.  First the money.  My first inclination was to pay off some personal debt and reduce my monthly debt payments quite significantly.  I still haven’t totally ruled that out, but I’ve all but decided that the money should go into my marketing budget instead, as this could quite likely yield a higher rate of return than paying off the debt would.  One of my first tasks is to come up with a marketing plan.  I have the basic ideas established already, but I need to come up with some specifics for the budget that I have.  That’s actually the first milestone I have scheduled.&lt;br /&gt;&lt;br /&gt;Now for the time.  After fleshing out my marketing plan, there are four specific things that I’d like to get done before July 1st:  reskin the application using a professionally designed theme, add support for barcode scanners, add mass texting capabilities by integrating my app with Twilio, and finishing some miscellaneous bug fixes.  Based on prior experience, I believe that these changes will double my conversion rate.&lt;br /&gt;&lt;br /&gt;So I really have two main foci:  develop and implement an advertising plan, and complete those four enhancements to my application.&lt;br /&gt;&lt;br /&gt;Beyond that, I have a number of things I’d like to do this summer, but I’m not sure that I’ll have time to do them all.  I have two ideas for technology projects that could vastly improve local food distribution.  I’d like to start on these so that I can roll them out next spring.  One of those ideas could possibly be viable already this year, but I’ve made the decision to focus my time on the attendance software instead.&lt;br /&gt;&lt;br /&gt;I’d also like to dramatically improve the SEO for my business.  This includes continuing to link build in the youth ministry market, although this has proven to be a slow and frustrating chore.  It also includes testing some other markets.&lt;br /&gt;&lt;br /&gt;I did a $200 test Facebook ad campaign for the boy scout software market, and am still running Google and Bing ads for that market, but have not received any sales so far.  I’ll continue the Google and Bing ads, but I don’t think this market will be profitable enough for me to invest my time in too much.&lt;br /&gt;&lt;br /&gt;I’d like to test out some other markets, too: first, yoga and martial arts studios.  There is heavy competition here, but it is a big market and I had some success with it when selling my desktop application.&lt;br /&gt;&lt;br /&gt;I need to spend about a half a day sometime to optimize my AdWords campaigns.  I have some ideas which, based on some evidence, I think could double the CTR while keeping the cost the same.&lt;br /&gt;&lt;br /&gt;So those are my main goals for the summer.  June will be very work intensive.  I’ll be teaching a three work course in July and will be moving at the beginning of August.  I’m also building a model airplane which I hope to have finished and flying by July.  So it will be busy but fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2098814196144686120?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2098814196144686120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2011/05/summer-sprint-begins.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2098814196144686120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2098814196144686120'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2011/05/summer-sprint-begins.html' title='Summer Sprint Begins'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2410454507924359344</id><published>2011-04-30T11:15:00.001-07:00</published><updated>2011-04-30T11:15:50.407-07:00</updated><title type='text'>Don't Forget</title><content type='html'>Here are some resources I've been meaning to look at.  When I have time, I'll take a look at them:&lt;br /&gt;&lt;br /&gt;Meetups in the Twin Cities:&lt;br /&gt;&lt;br /&gt;http://www.meetup.com/twin-cities-lean-startup-circle#calendar&lt;br /&gt;&lt;br /&gt;http://www.meetup.com/Bootstrappers-Breakfast-Minneapolis&lt;br /&gt;&lt;br /&gt;Good SEO resources:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://www.seomoz.org/beginners-guide-to-seo&lt;br /&gt;&lt;br /&gt;http://randfishkin.com/blog/50/what-i-learned-about-sales-but-foolishly-forgot-when-raising-vc&lt;br /&gt;&lt;br /&gt;http://www.startuplessonslearned.com/2008/10/about-author.html&lt;br /&gt;&lt;br /&gt;http://theleanstartup.com/&lt;br /&gt;&lt;br /&gt;http://www.seomoz.org/blog/the-story-of-seomoz&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also don't forget:&lt;br /&gt;&lt;br /&gt;St. Paul CoCo coworking space&lt;br /&gt;&lt;br /&gt;Wordpress All-In-One SEO Plugin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2410454507924359344?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2410454507924359344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2011/04/dont-forget.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2410454507924359344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2410454507924359344'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2011/04/dont-forget.html' title='Don&apos;t Forget'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2081179090390794625</id><published>2011-04-21T15:12:00.000-07:00</published><updated>2011-04-21T15:14:02.066-07:00</updated><title type='text'>Learn HTML5</title><content type='html'>Well I think it's inevitable that I'll have to learn HTML5 and CSS3 and break my old XHTML1.0 Transitional ways.  I found an EXCELLENT resource online that explains everything you'd ever want to know about HTML5:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.diveintohtml5.org/table-of-contents.html"&gt;http://www.diveintohtml5.org/table-of-contents.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2081179090390794625?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2081179090390794625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2011/04/learn-html5.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2081179090390794625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2081179090390794625'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2011/04/learn-html5.html' title='Learn HTML5'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-6347344717277692382</id><published>2011-04-16T12:36:00.000-07:00</published><updated>2011-04-16T12:41:51.358-07:00</updated><title type='text'>SEO</title><content type='html'>I got a lot done in just a few hours today.  First, I made some security enhancements to my database to make potential attacks against it much more difficult.&lt;br /&gt;&lt;br /&gt;The bulk of my work centered on SEO.  Rather than link building, I'm on a new project to add lots and lots of pages to my site which are optimized for very specific search terms.  Patrick McKenzie has had great success with this method with his Bingo Card Creator software.&lt;br /&gt;&lt;br /&gt;I was just able to create one such page today because much of my time was spent designing the layout.  I now have a really good template to go off of, so I'd like to add more pages at the rate of about three per week.&lt;br /&gt;&lt;br /&gt;I also started a new Adwords campaign.  This campaign was specifically for keywords with very little competition that are very relevant to my site.  Depending on how this goes, I have many more lists of similar keywords that I'll be trying.&lt;br /&gt;&lt;br /&gt;The last thing to note is that I'm at the point where I really need to be tracking my conversions more closely.  I'm getting traffic from Adwords, Microsoft Advertising, organic searches, and Facebook.  I need a much better way to track where the sales are coming from.  My next step will be to set up conversion trracking for each of these systems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-6347344717277692382?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/6347344717277692382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2011/04/seo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6347344717277692382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6347344717277692382'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2011/04/seo.html' title='SEO'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-5561672870237514844</id><published>2011-04-14T16:20:00.000-07:00</published><updated>2011-04-14T16:25:33.107-07:00</updated><title type='text'>Focus</title><content type='html'>Last summer, this blog really helped me focus on my business.  As a single founder, I don't have a boss to report to, but I still needed some accountability.  Knowing that I had to update this blog every two days (a self-imposed rule) really motivated to actually &lt;span style="font-weight:bold;"&gt;get stuff done.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I launched my web app in January and am already turning a profit, not counting advertising expenses.  The key to success will be perseverance over the long term.  I think that three years from now, with slow and steady growth, the business will be in a really good place.  Since three years will pass whether or not I decide to work on the business, it only makes sense to do it.&lt;br /&gt;&lt;br /&gt;The school year has been very busy, allowing me to only make slow and incremental changes to the business.  As long as this is done consistently, I don't see that as a problem.  My FogBugz list is chock full of stuff that I want to get done this summer.  I'd like to do a bit of consulting work this summer as well.&lt;br /&gt;&lt;br /&gt;During the school year, I'll be lucky to post here every two weeks or so.  This summer, though, I'm planning on regular posts again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-5561672870237514844?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/5561672870237514844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2011/04/focus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5561672870237514844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5561672870237514844'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2011/04/focus.html' title='Focus'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-912436402326363233</id><published>2010-12-29T09:25:00.001-08:00</published><updated>2010-12-29T09:25:43.366-08:00</updated><title type='text'>Business Ventures</title><content type='html'>I currently have two operating businesses:&lt;br /&gt;&lt;br /&gt;bestattendance.com&lt;br /&gt;This site just launched.  My goal is to have 25 customers by June.  This means getting five new customers per month.  If my COCA is $60 or less, I'll be doing very well.  Getting to this point will mean taking a loss at first, but there will be a payoff if I can get some loyal subscribers.&lt;br /&gt;&lt;br /&gt;highschoolwebdesign.com&lt;br /&gt;I'm currently selling downloadable lesson plans from this site and am seriously considering adding AdSense.  AdSense could probably add $50 per month to my bottom line; this would help offset the costs of running bestattendance.com.&lt;br /&gt;&lt;br /&gt;I have a few others in the pipeline:&lt;br /&gt;&lt;br /&gt;The first one I can vaguely describe as a marketplace for food.&lt;br /&gt;&lt;br /&gt;I'd like to start a juicing blog.  This will motivate me to actually make juice every day with my new juicer.  This might be monetizable or perhaps sellable.&lt;br /&gt;&lt;br /&gt;Consulting might be something else I can try.&lt;br /&gt;&lt;br /&gt;I'd like to greatly expand bestattendance.com beyond youth ministry into other market segments.&lt;br /&gt;&lt;br /&gt;It will be a challenge finding time for all of this stuff; having the summer off will be very beneficial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-912436402326363233?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/912436402326363233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/12/business-ventures.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/912436402326363233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/912436402326363233'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/12/business-ventures.html' title='Business Ventures'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8128821348513152822</id><published>2010-12-22T14:57:00.001-08:00</published><updated>2010-12-22T14:57:33.488-08:00</updated><title type='text'>Launching January 1</title><content type='html'>Well, I definitely made some progress today.  I fixed two bugs, one of which was due to an incredibly stupid mistake with PDO, and it was difficult to track down because it was intermittent.  Got it though.  I do think that the app could benefit from some more testing.  I’m considering spending the extra $40 or so it would cost for 8 hours of functional testing.  I think it would be worth it.&lt;br /&gt;&lt;br /&gt;I do have the dashboard done, and everything in the app is generally production ready.&lt;br /&gt;&lt;br /&gt;Today I spent some time researching tax issues for my business.  I have the estimated and self employment tax all figured out.  I got a state tax ID number so that I can collect sales taxes to subscriptions delivered to Minnesota customers.  I probably won’t get any; my sales tax liability is extremely low, but I have the tax ID number now just in case I do get accounts from Minnesota.&lt;br /&gt;&lt;br /&gt;Yesterday I was approved for a merchant account.  My authorize.net account is all set up, and I just have to hook it up to my Chargify service.  I have a checklist of things I need to complete before I launch, but it’s getting shorter.  I’ve decided to finish the checklist before I start work on any new features.  I won’t start advertising or collecting orders until after the new year.  Partially this is to make the tax reporting and accounting easier; partially, it’s because sales in December for software are usually quite terrible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8128821348513152822?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8128821348513152822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/12/launching-january-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8128821348513152822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8128821348513152822'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/12/launching-january-1.html' title='Launching January 1'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-4770890720961397454</id><published>2010-12-05T07:38:00.001-08:00</published><updated>2010-12-05T07:38:53.010-08:00</updated><title type='text'>Programming Is My Hockey</title><content type='html'>I love watching hockey games because it’s a chance to watch experts be awesome at something they love doing.  The players don’t even have to think about skating; their legs just move naturally.  Forward, backward, sideways, turnarounds, instant stops – their feet just naturally carry them.  They are so comfortable.  When they run out on the ice, it’s like, “I’ve done this a million times before, let’s go do it again, this is nothing.”  As they skate around, they make these minor adjustments to their gear, and they stretch out, and they skate around, until everything is comfortable and just right.&lt;br /&gt;&lt;br /&gt;And they love what they’re doing.  They’re having fun and they’re completely focused on the game.  This is a skill that took them a lifetime to master.  They’re good at it and they know it.  It’s their thing.&lt;br /&gt;&lt;br /&gt;So yeah that’s sort of what programming is like for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-4770890720961397454?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/4770890720961397454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/12/programming-is-my-hockey.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/4770890720961397454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/4770890720961397454'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/12/programming-is-my-hockey.html' title='Programming Is My Hockey'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2718372331996518963</id><published>2010-12-02T14:49:00.000-08:00</published><updated>2010-12-02T14:59:35.587-08:00</updated><title type='text'>Feature Complete</title><content type='html'>I have all of the features coded that I planned for my Phase 1 release, otherwise known as my MVP (Minimum Viable Product).  The feature list is about fifty lines long, but here are the highlights:&lt;br /&gt;- Members can sign themselves in at the computer&lt;br /&gt;- Both events and members can be tied to multiple groups&lt;br /&gt;- Five different attendance report views allow users to filter by date, group, and event type&lt;br /&gt;- Private and public event calendar&lt;br /&gt;- Email particular members, particular groups, or all members attending a particular event.&lt;br /&gt;- Print sign-in forms, membership rosters, and reports from your browser.&lt;br /&gt;- Cool, slick design and highly secure&lt;br /&gt;&lt;br /&gt;There's a ton of stuff I'd still love to add:&lt;br /&gt;- Recurring events&lt;br /&gt;- Track families&lt;br /&gt;- Track fines and fees&lt;br /&gt;- Add one more layer of grouping for members (this is needed for stage managers)&lt;br /&gt;- Online event registration&lt;br /&gt;- Prearranged absences&lt;br /&gt;- Bulk text messaging&lt;br /&gt;- Event integration with Facebook and Google Calendar&lt;br /&gt;- File sharing&lt;br /&gt;- Documents tied to events (ex: agendas, minutes, performance report, rehearsal report)&lt;br /&gt;- Print membership directories (with addresses) and mailing labels&lt;br /&gt;- Plus a host of usability enhancements&lt;br /&gt;&lt;br /&gt;But really, the bulk of the value people will get from this program is there.  I started my first usability tests a month ago and am ready to start the second round while I fix some known bugs.&lt;br /&gt;&lt;br /&gt;Next week I'll be opening a bank account and setting up my online payment gateway.&lt;br /&gt;&lt;br /&gt;So in other words I'm getting very close to launching!&lt;br /&gt;&lt;br /&gt;I think I'll postpone launching until after the holidays - my marketing campaign will be more effective then - and it will give me some time to maybe bang out a few more features on the list above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2718372331996518963?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2718372331996518963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/12/feature-complete.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2718372331996518963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2718372331996518963'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/12/feature-complete.html' title='Feature Complete'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-3552238990345762447</id><published>2010-11-18T15:54:00.000-08:00</published><updated>2010-11-18T15:55:33.678-08:00</updated><title type='text'>Email email go away</title><content type='html'>My web host smartly disables php's fsockopen function, but this makes the Swiftmailer library I just downloaded not work.  I might have to connect to my email provider with curl instead.  Such joy, trying to navigate through other people's design  decisions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-3552238990345762447?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/3552238990345762447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/11/email-email-go-away.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3552238990345762447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3552238990345762447'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/11/email-email-go-away.html' title='Email email go away'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-3758689496617482764</id><published>2010-11-17T14:12:00.000-08:00</published><updated>2010-11-17T14:13:13.832-08:00</updated><title type='text'>Email Buggy Joy!</title><content type='html'>In case you haven’t heard, sending email from web apps is a real pain.  PHP’s mail() function is terrible for large numbers of emails because it opens a new SMTP connection for each message.  My web host limits outgoing SMTP messages to 100 per hour.  If one organization using my system has 50 members, two of their emails would already be exceeding the limit.  Sendmail seemed like a good solution, but I found out that my web host even limits these to 200 per hour.  I calculated that if I throttled the emails, I could send one email every 16 seconds (4800 per day) and still stay under the limit.  But then people’s emails would be delayed, possibly by hours at peak activity times.  Gmail also sets limits on outgoing SMTP messages, so I can’t use my account hosted at Google Apps, either.&lt;br /&gt;&lt;br /&gt;Beyond the outgoing message limits, deliverability is a problem.  You have to set up DKIM and SPF keys in your DNS record, and even then, some email providers will still block you.&lt;br /&gt;&lt;br /&gt;I’ve spent the last two days research third party solutions.  I’ve looked at basically everything out there: Postmark, Sendgrid, CrtiSend, Socket Labs, and others.  I’m close to reaching a decision as to who I’ll go with.  I spent a full day setting up my app to be used with Postmark only to figure out that their service will not meet all of my requirements.  I’m really looking forward to getting past this bottleneck.&lt;br /&gt;&lt;br /&gt;This afternoon I’m taking care of some business related items while I wait for my accounts to be set up with two of those email providers.  I filed business name papers with the Secretary of State, and I’m going through about nine months of accounting backlog.  Tomorrow, hopefully, I’ll be able to write some code again!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-3758689496617482764?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/3758689496617482764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/11/email-buggy-joy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3758689496617482764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3758689496617482764'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/11/email-buggy-joy.html' title='Email Buggy Joy!'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-336154082187637611</id><published>2010-11-09T12:20:00.001-08:00</published><updated>2010-11-09T12:25:54.227-08:00</updated><title type='text'>Should you check the user agent?</title><content type='html'>Checking the user agent on incoming requests to prevent session hijacking is sort of like putting scotch tape on your door to keep intruders out of your house.&lt;br /&gt;&lt;br /&gt;But, it is one little extra barrier that an attacker will  have to bypass, so I put it in my code.  Then I was playing around on my site in IE8 one day, and just for fun I hit the Compatibility View button.  And it broke everything.&lt;br /&gt;&lt;br /&gt;Clicking this button toggles the user agent between IE7 and IE8 and thus breaks the whole thing.  To make sure the site still works, I've taken the user agent checking completely out of the application.&lt;br /&gt;&lt;br /&gt;This still won't allow anyone to hijack a session, because all traffic, including cookies, is sent only over SSL.  There are a number of other security features built in, so the scotch tape can come off.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-336154082187637611?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/336154082187637611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/11/should-you-check-user-agent.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/336154082187637611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/336154082187637611'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/11/should-you-check-user-agent.html' title='Should you check the user agent?'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-7557247524838768557</id><published>2010-11-01T13:05:00.000-07:00</published><updated>2010-11-01T13:07:05.288-07:00</updated><title type='text'>Beta Is Imminent</title><content type='html'>I have enough features coded to start beta testing.  The software is still not complete; there are a few holes in the functionality, and there are a few known bugs, but I’d like to get a system up and running on the live web server at Dreamhost so I can iron out any deployment issues far in advance of the launch date.&lt;br /&gt;Here are a few particular things I’ll be watching for:&lt;br /&gt;&lt;br /&gt;Problems with SSL.  I’m currently hosting jQuery and jQueryUI on Google, and those requests are non-encrypted, so I’m curious to see if that will work, or if I’d be better hosting jQuery locally.&lt;br /&gt;&lt;br /&gt;PHP Configurations.  I’m setting PHP configurations directly in my scripts; I’ll look into the possibility of installing PHP from binaries and configuring those settings directly in php.ini.&lt;br /&gt;&lt;br /&gt;Performance.  There are three concerns here.  First, the wire transfer speed (what a technical term).  I know that there are more HTTP requests on my pages than there needs to be.  Combining CSS and JS, as well as using image sprites, will reduce the number of concurrent requests, but I haven’t done these things yet.  Some pages are very JavaScript intensive and I’m interested in the client performance on older machines.  Lastly, I have some rather complex SQL queries, and I’d like to see how the database performs when n gets big.&lt;br /&gt;&lt;br /&gt;Usability.  How easily will people be able to figure out how to use the software to perform specific tasks?&lt;br /&gt;&lt;br /&gt;Unknown Bugs.  I’m mainly looking for logic errors here.  For example, today I just discovered that members cannot change their own passwords because they don’t have setSecurityRole permission.&lt;br /&gt;&lt;br /&gt;File permissions.  I want to make sure that users only have access to the files they need access to.  On my development machine, all folders are writable, but that won’t be the case in production.&lt;br /&gt;&lt;br /&gt;I just set up the SSL certificate on my server today.  I anticipate launching beta by Wednesday!&lt;br /&gt;&lt;br /&gt;I'd like to introduce my brother, the eminent psychologist, Niles Crane.&lt;br /&gt;&lt;br /&gt;Frasier was eminent when my eminence was merely imminent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-7557247524838768557?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/7557247524838768557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/11/beta-is-imminent.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7557247524838768557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7557247524838768557'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/11/beta-is-imminent.html' title='Beta Is Imminent'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-3533114066311055039</id><published>2010-11-01T12:52:00.001-07:00</published><updated>2010-11-01T12:52:43.625-07:00</updated><title type='text'>FogBugz World Tour</title><content type='html'>Last Thursday, I had a chance to see Joel Spolsky at his Minneapolis stop on the FogBugz World Tour.  I’ve been following Joel’s blog and businesses for the last ten years, and it was cool to see him speak in person.  He was in town to pitch the latest version of his FogBugz and Kiln software.&lt;br /&gt;&lt;br /&gt;I’ve been using FogBugz as a bug tracking and project management tool for the last six months, and I really like it.  Luckily, I can get a free license as a one-person startup.  Past that, it gets quite expensive.  That shouldn’t be a problem, however, as I don’t ever anticipate adding employees.&lt;br /&gt;&lt;br /&gt;I’ve been considering using distributed version control for a while.  For development teams, there are no questions about its superiority to traditional version control systems.  But I haven’t found a real need for any type of VCS yet.  I keep daily backups of all of my projects, so I can go back in history to whenever I want.&lt;br /&gt;&lt;br /&gt;The one thing that does get a bit more complicated is when I’ll have different versions of the codebase – one for dev and one for production.  The branching capabilities of Mercurial would definitely help me out there, but I’m not sure it’s worth the half day investment it would take to configure and learn it.  I’m pretty focused on my ship date at the moment, and this is one of those things that I feel can wait.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-3533114066311055039?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/3533114066311055039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/11/fogbugz-world-tour.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3533114066311055039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3533114066311055039'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/11/fogbugz-world-tour.html' title='FogBugz World Tour'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8535508046016439109</id><published>2010-10-18T17:10:00.000-07:00</published><updated>2010-10-18T17:17:33.355-07:00</updated><title type='text'>Six To Eight Weeks</title><content type='html'>I'm slowly but surely making my way toward beta testing.  I have all of the core functionality for events done, and now I'm adding the polish.  I'm taking the mantra, "do one thing extremely well," to heart.  Attendance is the only thing the software does, so it needs to be an extremely polished experience all around.&lt;br /&gt;&lt;br /&gt;I've added some really neat AJAX effects, so the past week has been spent learning AJAX and JSON, hitting some roadblocks, and finally getting the thing looking pretty polished.&lt;br /&gt;&lt;br /&gt;I just need to add two quick validation rules to members and eventtypes to prevent XSS.  All data is htmlspecialchars cleaned before it is printed to the view, but JSON data must be htmlspecialchars_decode'd, which means that I need to make sure the data itself is clean.  Member names and event type names are sent in the clear as JSON objects, which is why the extra validation is needed.&lt;br /&gt;&lt;br /&gt;There is one more thing I could do to improve performance.  I'm currently loading JSON objects to populate the event calendar one month at a time.  When the user navigates to a new month, it's a new AJAX call.  But it would greatly improve performance if I loaded several months at once.  That fix should not be too difficult, and it's definitely on my list.  More polish.&lt;br /&gt;&lt;br /&gt;It's all this polish that takes so much time, but is definitely worth it.  The best part of my software is its simplicity and ease of use.  This I can not compromise on.&lt;br /&gt;&lt;br /&gt;The other thing that was on my mind today was that the signup form does not look incredibly enticing.  I'm going to start looking at signup forms for other webapps to get inspiration on how I'd like to design mine.&lt;br /&gt;&lt;br /&gt;I have decided that my marketing website does not need to look like the app itself.  Most webapps have a completely distinct marketing site.  I might even be able to keep my current template for my marketing page, and link people over to the signup page on my app when they click the signup button.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8535508046016439109?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8535508046016439109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/10/six-to-eight-weeks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8535508046016439109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8535508046016439109'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/10/six-to-eight-weeks.html' title='Six To Eight Weeks'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-4180841818903504381</id><published>2010-10-07T15:22:00.000-07:00</published><updated>2010-10-07T15:25:06.238-07:00</updated><title type='text'>Tea, earl grey, hot.</title><content type='html'>The end is in sight on my web-based attendance software!  I'm on track to start beta testing in December.  I'm been blogging less in order to spend more time on development.  I feel like I'm on the home stretch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-4180841818903504381?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/4180841818903504381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/10/tea-earl-grey-hot.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/4180841818903504381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/4180841818903504381'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/10/tea-earl-grey-hot.html' title='Tea, earl grey, hot.'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2687291705563901297</id><published>2010-09-30T12:04:00.000-07:00</published><updated>2010-09-30T12:06:16.495-07:00</updated><title type='text'>I Love This Pricing Page</title><content type='html'>http://chargify.com/pricing-and-signup/&lt;br /&gt;&lt;br /&gt;I spent about an hour last night doing some good QA on the system and found about five bugs.  I wish I had more time for QA!  Today I spent about 2 hours at the library fixing the bugs.  I also looked into recurring payment processing systems, and chargify looks like the one I'll go with.&lt;br /&gt;&lt;br /&gt;Oh yeah, I want my pricing page to look just like this!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2687291705563901297?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2687291705563901297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/i-love-this-pricing-page.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2687291705563901297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2687291705563901297'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/i-love-this-pricing-page.html' title='I Love This Pricing Page'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-5348861636569012727</id><published>2010-09-29T15:03:00.000-07:00</published><updated>2010-09-29T15:13:11.237-07:00</updated><title type='text'>Countdown To Launch</title><content type='html'>I knocked out about ten FogBugz items tonight.  Some of these were things that I fixed and forgot to close, some I decided not to fix because I'm going a different direction with the app than I originally planned, and some were simple fixes to the code.&lt;br /&gt;&lt;br /&gt;I'm finding that I'm overestimating the time required for most of my FogBugz issues by a factor of two.  FogBugz says there are 238 remaining hours in my project; I think the actual completion time will be much less.&lt;br /&gt;&lt;br /&gt;On the Events Index page, I need to make the search filter, which will be a bit more complicated than it was for the Members Index page.  After that, I need to work on Event Types (creating, reading, updating, and deleting).&lt;br /&gt;&lt;br /&gt;I'm very happy with the new visual design I've been working on.  It's mostly all done, including the icons and buttons, but I'm sure I'll be making a few tweaks to it along the way.&lt;br /&gt;&lt;br /&gt;So I realistically think that I can finish Events and Event Types by the end of next week.&lt;br /&gt;&lt;br /&gt;Then, it's on to designing the calendar and main attendance screen.  I'm blocking off the entire month of October for that.&lt;br /&gt;&lt;br /&gt;November is reserved for creating the actual attendance reports.&lt;br /&gt;&lt;br /&gt;Then I'm done!  The first two weeks of December will be spent on deployment, and then beta testing can begin.&lt;br /&gt;&lt;br /&gt;Since this is a web app, I don't need to have every last feature coded by launch day.  For example, Consolidate Event Types was a rather fringe feature that was VERY useful to people who needed it, but not many did.  Things like this I can leave out at first and code them later.&lt;br /&gt;&lt;br /&gt;I'm happy to say that security has been a very big part of what I've been doing all along - the system seems rather unhackable to me - but I'd love some quality QA to prove me wrong (or better yet, prove me correct).&lt;br /&gt;&lt;br /&gt;Beta in December!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-5348861636569012727?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/5348861636569012727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/countdown-to-launch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5348861636569012727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5348861636569012727'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/countdown-to-launch.html' title='Countdown To Launch'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-6390334247528773438</id><published>2010-09-25T14:10:00.000-07:00</published><updated>2010-09-25T14:11:00.898-07:00</updated><title type='text'>Cool UI</title><content type='html'>squidoo.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-6390334247528773438?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/6390334247528773438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/cool-ui.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6390334247528773438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6390334247528773438'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/cool-ui.html' title='Cool UI'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-4471281015260388414</id><published>2010-09-22T18:44:00.001-07:00</published><updated>2010-09-22T18:46:52.910-07:00</updated><title type='text'>Redirect Thingy Working!</title><content type='html'>After 2 1/2 days of work, the redirect thingy is working!!!&lt;br /&gt;&lt;br /&gt;There is an array in the abstract controller class with an array called $redirectPageIds.  This is an index of pages to which POST requests should be redirected.  See either members-&gt;profile or events-&gt;profile (along with the views) and groups-&gt;update for example implementations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-4471281015260388414?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/4471281015260388414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/redirect-thingy-working.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/4471281015260388414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/4471281015260388414'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/redirect-thingy-working.html' title='Redirect Thingy Working!'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-4108837535240287224</id><published>2010-09-20T20:15:00.000-07:00</published><updated>2010-09-20T20:18:09.688-07:00</updated><title type='text'>FogBugz # 59</title><content type='html'>Check out the following places that I screwed up in the code:&lt;br /&gt;&lt;br /&gt;Tabby::getRedirect&lt;br /&gt;Tabby::setRedirect&lt;br /&gt;Controller-&gt;__construct&lt;br /&gt;members-&gt;profile&lt;br /&gt;groups-&gt;update&lt;br /&gt;&lt;br /&gt;Trying to get the redirect thingy to work.  Foolish to think I could do it in an hour at the end of the day.  Two hours in the morning on a fresh brain should kill the bug.&lt;br /&gt;&lt;br /&gt;I want to implement this before I get too far because a lot of other features will depend upon it.&lt;br /&gt;&lt;br /&gt;I also came up with a good UI idea for filtering and reporting similar to what FogBugz has.  See the file I made called filters_reports.txt in the documentation folder.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-4108837535240287224?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/4108837535240287224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/fogbugz-59.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/4108837535240287224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/4108837535240287224'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/fogbugz-59.html' title='FogBugz # 59'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-7358680729714548203</id><published>2010-09-20T14:01:00.000-07:00</published><updated>2010-09-20T14:02:10.939-07:00</updated><title type='text'>Next Step</title><content type='html'>The next step is to create the Events index page.  The calendar should go on here so we should figure out how we want the calendar to act as well.  Perhaps now would be a good time to mock up the main screen and the attendance report screen so we can give the whole app a consistent look and feel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-7358680729714548203?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/7358680729714548203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/next-step.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7358680729714548203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7358680729714548203'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/next-step.html' title='Next Step'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-566193173312978146</id><published>2010-09-20T13:22:00.000-07:00</published><updated>2010-09-20T13:43:53.161-07:00</updated><title type='text'>Deleting Groups</title><content type='html'>Deleting Groups is a bit tricky.&lt;br /&gt;&lt;br /&gt;Currently, if a group contains members, I don't allow the user to delete it.  In the future, I'll provide a nice GUI for users to either reassign or delete members who belong to a group they want to delete.  All members must belong to at least one group.&lt;br /&gt;&lt;br /&gt;If there are events tied to a group, this gets trickier.  Suppose the user wants to delete a group.  The system searches for all events assigned to that group.  If the event is tied to other groups as well, the system unassigns the event from the group to be deleted, but keeps it assigned to the other groups.  The system also keeps all attendance marks associated with that event.&lt;br /&gt;&lt;br /&gt;If the event is not assigned to any other groups, the system will delete the event, along with all attendance marks assigned to it.  This seems to be working correctly but it could probably use a few quality hours of QA testing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-566193173312978146?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/566193173312978146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/deleting-groups.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/566193173312978146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/566193173312978146'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/deleting-groups.html' title='Deleting Groups'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-1916241970412004643</id><published>2010-09-17T12:02:00.000-07:00</published><updated>2010-09-17T12:06:06.953-07:00</updated><title type='text'>My Brain Hurts</title><content type='html'>OK, I'm viewing and editing events, and I'm finally assigning and unassigning them from groups too!&lt;br /&gt;&lt;br /&gt;I have to go revisit the Delete Group functionality now.  When a user deletes a group, I now have to make sure that any event assigned to that group is unassigned.  Also, I must ensure that if an event was assigned ONLY to the group being deleted, that event gets deleted as well.&lt;br /&gt;&lt;br /&gt;When attendance marks enter the picture, I'll need to make sure that attendance marks tied to events being deleted for any reason are deleted as well.&lt;br /&gt;&lt;br /&gt;I added a bunch of other stuff into FogBugz and my use cases that are much too technical and detail-y to write here, but needless to say, my brain hurts!!&lt;br /&gt;&lt;br /&gt;I estimate this bit of stuff to take between half a day and a full day to code and test.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-1916241970412004643?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/1916241970412004643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/my-brain-hurts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1916241970412004643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1916241970412004643'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/my-brain-hurts.html' title='My Brain Hurts'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-6822095394146386028</id><published>2010-09-16T14:16:00.001-07:00</published><updated>2010-09-16T14:22:26.086-07:00</updated><title type='text'>Traffic!</title><content type='html'>Doubling my advertising budget has greatly increased the traffic to my bestattendance.com website.  The conversion rate on my pay-per-click ads is about 10%, which I think is quite good.  There will be about a month of lag time before these downloads convert to sales.&lt;br /&gt;&lt;br /&gt;After the website redeign, I've increased my position on Google search results.  I was already quite high in Bing and Yahoo.  Organic traffic has therefore increased as well.&lt;br /&gt;&lt;br /&gt;The next obvious step is to expand my site by adding more resources to it.  Either articles, attendance forms, slideshows, or other resources will help with SEO and even further grow organic traffic.  I've set a goal to produce two new resources for the site each month.&lt;br /&gt;&lt;br /&gt;Traffic to highschoolwebdesign.com has increased greatly as well.  I get over 5,000 unique visitors a month to that site, and traffic levels are still growing.  I haven't done anything to monetize the site yet - it is just a free resource for teachers now, although I might implement some monetization plans soon.  Everything is ready, I just basically have to pull the trigger.&lt;br /&gt;&lt;br /&gt;I'm still struggling with what the purpose of that site is.  Is it to provide a service to teachers or is it to make money?  The two are not mutually exclusive, of course, but I feel a definite lack of a clear vision for that enterprise.&lt;br /&gt;&lt;br /&gt;I've recently decided that mini-sites will be a big part of my marketing strategy moving forward.  My attendance software is used in many niches.  Rather than consolidating all of the marketing messages into one site, I'm going to try separating them out and let each niche compete on its own.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-6822095394146386028?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/6822095394146386028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/traffic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6822095394146386028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6822095394146386028'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/traffic.html' title='Traffic!'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8892044947307604609</id><published>2010-09-15T11:17:00.000-07:00</published><updated>2010-09-15T11:23:41.762-07:00</updated><title type='text'>What A Great Deal!</title><content type='html'>One of the podcasts I listen to is &lt;a href="http://startupsfortherestofus.com"&gt;Startups for the Rest of Us&lt;/a&gt;.  On this week's show, they mentioned a service called AppSumo, which aggregates deals to web-based software and services.&lt;br /&gt;&lt;br /&gt;One of the deals this week was to get $100 of &lt;a href="http://grasshopper.com"&gt;Grasshopper&lt;/a&gt; services for only $15.  This means that my first six months are free, and I only pay $9.95 per month after that.  I really could not pass that up.&lt;br /&gt;&lt;br /&gt;So now I have a sales phone number on my website!  It's currently configured to go straight to voicemail, but perhaps I'll actually start taking calls.  I'll just have to feel it out as I go.&lt;br /&gt;&lt;br /&gt;Another thing they mentioned is that marketing is not a TASK TO BE COMPLETED, but a CONTINUAL PROCESSES.  I totally agree with them.  Even though I'd love to have my head in code all day, I just can't push off marketing until the end.  It has to happen continually.&lt;br /&gt;&lt;br /&gt;In the past two months, I've made some quite simple marginal improvements that have increased my traffic by a factor of at least two, increased by the CTR on my ads by a factor of two, and increased my download rate by about another factor of two.  In theory, I should see sales go up by a factor of 8 in the coming months from these changes.&lt;br /&gt;&lt;br /&gt;One thing that has NOT changed is my downloads:sales ratio.  This is being addressed by creating a web app instead of a desktop app.  Changes in pricing will further increase revenue.  But really, the point is that all of these changes were small and incremental.  It is only over time of continuous improvement that it affects the bottom line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8892044947307604609?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8892044947307604609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/what-great-deal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8892044947307604609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8892044947307604609'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/what-great-deal.html' title='What A Great Deal!'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-1717549567783049230</id><published>2010-09-13T14:35:00.000-07:00</published><updated>2010-09-13T14:40:08.994-07:00</updated><title type='text'>Saving Events</title><content type='html'>I'm now working on the save method of the event model.  This is going MUCH faster than the first couple of models I made.  Now that I have a pattern to follow, filling in the blanks is quite easy.  I've dome some refactoring to reduce code duplication in the process.&lt;br /&gt;&lt;br /&gt;I need to make sure that the groups that the event is tied to actually belong to the user's organization and that the event type selected belongs to the user's organization as well.&lt;br /&gt;&lt;br /&gt;Then I need to go through the process of unassiging the event from unchecked groups and assigning it to checked groups, making sure that at least one groups is selected (this business rule is already coded in the validation method).&lt;br /&gt;&lt;br /&gt;It looks like Wednesday will be the next day to work on this.  Tomorrow I'll be busy getting caught up on my grading.  I'm still loving FogBugz for my task tracking.&lt;br /&gt;&lt;br /&gt;I'm a bit more optimistic about my initial release date than I was about a month ago.  Progress now is MUCH faster than it was at the beginning, and I only have a few more models left.  I'm hoping to be done with Beta 1.0 before Christmas.  It will be close but I do think it's possible.  I've cut back on a lot of planned features for the initial release, and I do plan on adding them later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-1717549567783049230?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/1717549567783049230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/saving-events.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1717549567783049230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1717549567783049230'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/saving-events.html' title='Saving Events'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8686769955049304473</id><published>2010-09-08T13:21:00.000-07:00</published><updated>2010-09-08T13:24:17.381-07:00</updated><title type='text'>Events</title><content type='html'>I just started working on events.  I have a controller, model, and two views started.  I'd really like to get my third skin developed and refactor the views to work with ALL skins at this point.  I still can't decide which one I like best, it depends on how I'm feeling at the moment.&lt;br /&gt;&lt;br /&gt;I think that as part of the signup process, I'll have new users select a skin (which I'll call a theme, because honestly I don't like the word skin too much).&lt;br /&gt;&lt;br /&gt;I won't have time to work on this tomorrow but will have time later this week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8686769955049304473?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8686769955049304473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/events.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8686769955049304473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8686769955049304473'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/09/events.html' title='Events'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8826230202052081008</id><published>2010-08-28T18:02:00.000-07:00</published><updated>2010-08-28T18:03:11.634-07:00</updated><title type='text'>Not Bored Yet</title><content type='html'>After a relaxing weekend with friends and family, next weekend will be busy.  It is workshop week at the high school.  I'll be staying until 7:00 on Monday for orientation, I teach an evening class on Tuesday, and Thursday I'll be getting ready for an up north camping trip for Labor Day Weekend.  Then it's right into teaching the following Tuesday.&lt;br /&gt;&lt;br /&gt;I have a few spare hours tonight, so I'll spend the time getting ready for my high school classes.  We're using JCreator with my AP Computer Science class, and I want to be sure that I can get it set up correctly.  I still haven't decided if I'll be using workspaces and projects to organize the assignments or not yet.&lt;br /&gt;&lt;br /&gt;I was able to make some progress on my web app last week, as well as starting up a Google AdWords campaign and adding some testimonials to my site.  The advertising is really creating a surge in traffic and downloads.  I assume that at least some of those will convert to sales.&lt;br /&gt;&lt;br /&gt;The next steps for highschoolwebdesign.com are to finish formatting the first two sample chapters of my textbook and put together a survey of teachers who might be interested in using it in class.  A release date of January 2011 would be cool if there is enough interest in the book, but I'm not sure if that's the case.  So this is really the next thing on my list, but it will have to wait two weeks because of school.&lt;br /&gt;&lt;br /&gt;No one is really reading this, are they?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8826230202052081008?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8826230202052081008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/not-bored-yet.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8826230202052081008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8826230202052081008'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/not-bored-yet.html' title='Not Bored Yet'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-818754219123981254</id><published>2010-08-26T18:41:00.001-07:00</published><updated>2010-08-26T18:44:03.789-07:00</updated><title type='text'>Groups Functionality Complete</title><content type='html'>Users are now able to create, read, update, and delete groups now.  I'm realizing that some of the features I thought needed to go into Beta 1.0 don't actually need to be there.  Things like printable sign-in sheets, and transfering members between groups, are very useful and will need to be in the first alpha release, but they are not essential for using the system.  I'd like to get Beta 1.0 out the door as fast as I can.&lt;br /&gt;&lt;br /&gt;I'm using FogBugz's priority system to determine which features need to go into Beta 1.0 and which do not.  I now find FogBugz essentail for tracking tasks.  I didn't even realize what I was missing out on when I was just using Notepad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-818754219123981254?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/818754219123981254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/groups-functionality-complete.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/818754219123981254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/818754219123981254'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/groups-functionality-complete.html' title='Groups Functionality Complete'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2064393601833957632</id><published>2010-08-25T08:36:00.001-07:00</published><updated>2010-08-25T08:36:44.551-07:00</updated><title type='text'>College Teaching Experience</title><content type='html'>My first college teaching experience went really well.  I'm teaching Business Computer Systems, which focuses on Microsoft Office as well as computer fundamentals such as operating systems, the internet, and hardware components.&lt;br /&gt;&lt;br /&gt;Yesterday, I was at the high school for orientation in the afternoon and at the college for my class at night.  I'll be at the high school again today, and our teacher workshop week starts on Monday.  This weekend will mark the third in a row going up to Brainerd.&lt;br /&gt;&lt;br /&gt;Development of my web app has been put on the back burner.  I just completed a major revamp of my bestattendance.com website and ramped up an ad campaign on Facebook.  I have a number of marketing tasks queued up to work on next.  My highschoolwebdesign.com site has seen a significant increase in traffic compared to last year, and I have some marketing tasks queued up for that as well.  Those are my priorities but I'll continue to work on my web app a bit as well.&lt;br /&gt;&lt;br /&gt;I'm excited about AP Computer Science and will work on that this week while I'm not simply relaxing and enjoy the last few days of my summer break.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2064393601833957632?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2064393601833957632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/college-teaching-experience.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2064393601833957632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2064393601833957632'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/college-teaching-experience.html' title='College Teaching Experience'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-7231585171180659920</id><published>2010-08-20T06:43:00.001-07:00</published><updated>2010-08-20T06:43:46.206-07:00</updated><title type='text'>Whatcha Doin?</title><content type='html'>Realizing that my summer vacation is rapidly coming to an end, I've been spending a good deal of time exercising and just relaxing.  What hours I have been productive were spent getting ready for my classes.  My first class session is on Tuesday.  I feel very prepared as usual.&lt;br /&gt;&lt;br /&gt;I get to see Joel Spolsky when he stops in Minneapolis on his Fogbugz World Tour in Ocotober; I'm looking forward to that.&lt;br /&gt;&lt;br /&gt;I haven't been coding in a long time and figured I should spend a day doing that, so that's my plan for today.  I can't even remember exactly where I left off; it'll take me a while to get back into the project.  I also have some improvements to make to highschoolwebdesign.com.&lt;br /&gt;&lt;br /&gt;I really like some of the themes on woothemes and will use one of them for my marketing site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-7231585171180659920?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/7231585171180659920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/whatcha-doin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7231585171180659920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7231585171180659920'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/whatcha-doin.html' title='Whatcha Doin?'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-7238771137263729451</id><published>2010-08-14T06:14:00.001-07:00</published><updated>2010-08-14T06:14:35.065-07:00</updated><title type='text'>Week, Second Half</title><content type='html'>I was a bit lazy the second half of the week, deciding to really take some time off before school starts.  I did get the Select Group page done, and it's really cool how everything on my web app is starting to come together.&lt;br /&gt;&lt;br /&gt;Next week will be spent lesson planning for my college classes; less so for my high school classes, as they're already pretty well planned.&lt;br /&gt;&lt;br /&gt;I'm enjoying my new Iris Dement CD and will be doing some water skiing this and next weekend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-7238771137263729451?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/7238771137263729451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/week-second-half.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7238771137263729451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7238771137263729451'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/week-second-half.html' title='Week, Second Half'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-5915383503321325922</id><published>2010-08-11T08:08:00.001-07:00</published><updated>2010-08-11T08:08:39.589-07:00</updated><title type='text'>Panic Sets In</title><content type='html'>I just realized that there are less than two weeks left before I teach my first class.  FogBugz is predicting a completion date for my software of March 2011, but despite that, I'll be putting my software project on hold for the next week at least.&lt;br /&gt;&lt;br /&gt;My classes this year both at the high school and college will heavily utilize web-based tools for grading, turning in assignments, file sharing, attendance, and more.  I really could not imagine teaching without the web.  In addition to curriculum writing, part of my work this week will include setting up those tools.  A little work now will make things much easier once the classes get going.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-5915383503321325922?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/5915383503321325922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/panic-sets-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5915383503321325922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5915383503321325922'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/panic-sets-in.html' title='Panic Sets In'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-6992460720708447863</id><published>2010-08-11T08:05:00.001-07:00</published><updated>2010-08-11T08:05:22.437-07:00</updated><title type='text'>Bug Tracking with FogBugz</title><content type='html'>Notepad worked great for the beginning stages of my project, but now my task list is getting more complex.  I have a mixture of features and bugs, nice-to-haves and must-haves.  A bug tracking tool allows you to see all kinds of stuff, including an estimated completion date for your project.&lt;br /&gt;&lt;br /&gt;Over the past few years, I've tried several solutions, including BugZilla (yuk), Mantis (typical open source clunky), and OnTime (difficult to install and bulky).  I never tried FogBugz until this week.  I recently became aware of the fact that they offer a free license for single developers.&lt;br /&gt;&lt;br /&gt;I'm using their hosted solution.  At first I was unimpressed.  The GUI didn't look very polished, and at first glance it was nothing more than a slow spreadsheet.  But then I was able to start digging in to some of the features, and now I'm sold.  I especially like the milestone reports, which incorporate evidence based scheduling.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-6992460720708447863?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/6992460720708447863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/bug-tracking-with-fogbugz.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6992460720708447863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6992460720708447863'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/bug-tracking-with-fogbugz.html' title='Bug Tracking with FogBugz'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-3712821770406601321</id><published>2010-08-09T13:55:00.000-07:00</published><updated>2010-08-09T13:56:03.777-07:00</updated><title type='text'>Tell Us About Your Navel Lint</title><content type='html'>I was a bit of a late riser this morning; I didn't finish my bike ride until 9:00.  I went to campus today to get my ID card so I'll have it before tomorrow's new faculty orientation.  I spent the rest of the day working on my syllabus in the air conditioned library.  It's a humid 90 degrees outside.  Tonight, I'm looking forward to some relaxing by the lake.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-3712821770406601321?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/3712821770406601321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/tell-us-about-your-navel-lint.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3712821770406601321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3712821770406601321'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/tell-us-about-your-navel-lint.html' title='Tell Us About Your Navel Lint'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-6586893741765925154</id><published>2010-08-08T18:29:00.000-07:00</published><updated>2010-08-08T18:32:20.250-07:00</updated><title type='text'>What To Do Next</title><content type='html'>Since I won't be working on the software for a few days, it might be useful to leave a note to myself about what I need to do next.&lt;br /&gt;&lt;br /&gt;If a member is unassigned from a group to which his lastGroupId is set, the member should NOT be able to access that group the next time he logs into the system.&lt;br /&gt;&lt;br /&gt;I need to implement the above functionality, along with the Select Group page.&lt;br /&gt;&lt;br /&gt;After that stuff is done, I think I'll move right to the heart of the software: creating events and recording attendance.&lt;br /&gt;&lt;br /&gt;The other stuff, such as lost password functionality and so forth, is very important, but it's always a good idea to get right to the heart of the software as early in the project as possible, so that's the direction I'll go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-6586893741765925154?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/6586893741765925154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/what-to-do-next.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6586893741765925154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6586893741765925154'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/what-to-do-next.html' title='What To Do Next'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-6837852815082184921</id><published>2010-08-08T14:40:00.001-07:00</published><updated>2010-08-08T14:40:24.202-07:00</updated><title type='text'>Member Profile Page Complete</title><content type='html'>I successfully ran through all three pages of my test cases for the Member Profile page!  Members can be assigned to groups and organizations; certain users have rights to view different levels of membership; and there are other permissions that affect the page as well.  There is some mildly complex logic on the page.  But it's done!&lt;br /&gt;&lt;br /&gt;I did spend an hour on a wild goose chase for an elusive bug that was randomly overwriting records.  The culprit was a = instead of == in an if statement.  My palm was planted firmly on my forehead after I found that one.&lt;br /&gt;&lt;br /&gt;The code base is definitely growing; I'm at about 2 klocs at the moment.&lt;br /&gt;&lt;br /&gt;I'll take a break from programing until at least Wednesday.  I have faculty orientation on Tuesday and will spend the day tomorrow, after my bike ride, preparing for some of my fall classes.  I feel good about that after having passed this major milestone!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-6837852815082184921?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/6837852815082184921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/member-profile-page-complete.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6837852815082184921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6837852815082184921'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/member-profile-page-complete.html' title='Member Profile Page Complete'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2119147223999505600</id><published>2010-08-08T11:59:00.000-07:00</published><updated>2010-08-08T12:00:24.618-07:00</updated><title type='text'>Look At These Sometime</title><content type='html'>Some interesting links I may want to look at:&lt;br /&gt;&lt;br /&gt;http://www.businessinsider.com/mark-zuckerberg-innovation-2009-10&lt;br /&gt;&lt;br /&gt;http://developers.facebook.com/blog/post/358&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2119147223999505600?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2119147223999505600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/look-at-these-sometime.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2119147223999505600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2119147223999505600'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/look-at-these-sometime.html' title='Look At These Sometime'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-4224034458706906360</id><published>2010-08-06T13:53:00.001-07:00</published><updated>2010-08-06T13:53:24.697-07:00</updated><title type='text'>Quality Assurance: Unit and Process Testing</title><content type='html'>I really wish I had a full time QA staff.  I've been running through and revising my test cases for the Member Profile page today.   I think I'm still on track to finish by end of day Saturday.  I was a software tester for two years so I remember this type of work really well.  Testing all kinds of weird combinations that no one would think of.&lt;br /&gt;&lt;br /&gt;The one advantage of testing my own software is that I can take a very white box approach and look at the code (even fix the code) when something goes wrong.  That's very nice.&lt;br /&gt;&lt;br /&gt;I do unit testing as I go – I unit test each function as I write it.  I'm now testing all combinations of permissions, requests, and contexts.  In the front of my mind this whole time is the concept of process testing.  How would a real user actually interact with the software?  Sometimes when you're deep in the rabbit hole of coding and testing, you can lose sight of the big picture.&lt;br /&gt;&lt;br /&gt;It's really cool seeing the progress I'm making on the app so far.  I'm doing a better job of documenting at least some of my use cases and test cases than I did for my desktop app.  This will be a benefit when it comes time to write the user documentation.&lt;br /&gt;&lt;br /&gt;Onward.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-4224034458706906360?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/4224034458706906360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/quality-assurance-unit-and-process.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/4224034458706906360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/4224034458706906360'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/quality-assurance-unit-and-process.html' title='Quality Assurance: Unit and Process Testing'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2068537122948350527</id><published>2010-08-05T13:33:00.000-07:00</published><updated>2010-08-05T13:34:03.838-07:00</updated><title type='text'>Member Profile</title><content type='html'>The vacation was totally awesome and really changed my perspective.  It's taking me a while to readjust to not being on vacation.  I met with the other business teacher and did some work at school yesterday.  I've been working my way back into my project slowly but surely.&lt;br /&gt;&lt;br /&gt;I'm deep in the middle of working on the Member Profile page.  The page is complicated because there are four different security permissions affecting the page at different levels of granularity (member, group, and organization).  The page is supposed to do a lot of different things depending on the context.  I've decided that I was originally planning too much complexity for the page and decided to scale back the granularity of some of the permissions in favor of the page being easier to use (and easier to code).  I wrote up two pages of test cases today.  I estimate the page will be completely coded and tested by the end of day Saturday.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2068537122948350527?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2068537122948350527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/member-profile.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2068537122948350527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2068537122948350527'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/08/member-profile.html' title='Member Profile'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8652324458859135478</id><published>2010-07-22T08:37:00.000-07:00</published><updated>2010-07-22T08:38:37.182-07:00</updated><title type='text'>Vacation</title><content type='html'>Yesterday and today are spent getting ready for my Grand Canyon trip.  I'll be gone until August 2nd.  See you then.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8652324458859135478?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8652324458859135478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/vacation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8652324458859135478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8652324458859135478'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/vacation.html' title='Vacation'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-6248977252139078297</id><published>2010-07-19T15:03:00.001-07:00</published><updated>2010-07-19T15:04:32.145-07:00</updated><title type='text'>Members</title><content type='html'>The signup and login functionality are both complete and I am turning my attention to members.  Creating, reading, updating, and deleting.  I'm very excited about some graphic desing ideas I have for the app.  I'll need to hire a designer to create the art but I have a good idea of how I want it to look.  Sort of grungy.  It should be fun to use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-6248977252139078297?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/6248977252139078297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/members.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6248977252139078297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6248977252139078297'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/members.html' title='Members'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8399680443137743444</id><published>2010-07-19T08:05:00.001-07:00</published><updated>2010-07-19T08:05:59.207-07:00</updated><title type='text'>Slideshare</title><content type='html'>I am currently evaluating Slideshare for use on my website.  It allows you to sync audio with PowerPoint presentations and share them online.  This might be a great way to demonstrat the features of my software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8399680443137743444?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8399680443137743444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/slideshare.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8399680443137743444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8399680443137743444'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/slideshare.html' title='Slideshare'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-480891513283691800</id><published>2010-07-19T08:01:00.001-07:00</published><updated>2010-07-19T08:04:52.503-07:00</updated><title type='text'>Sustainable Competitive Advantage</title><content type='html'>Customers tell me that they love the simplicity and ease of use of my desktop product.  That is definitely my competitive advantage.  My number one goal for the web app is to maintain that at the expense of everything else.  I'm taking the 37signals approach to simplicity.&lt;br /&gt;&lt;br /&gt;I won't have a lot of time to work on the app in the next three weeks.  I'm leaving on a trip to the Grand Canyon this Saturday, and much of this week will be spent preparing for that.  I also want to get things finalized for the school store next fall and at least have some idea of how to start curriculum planning, which I'll do in August.&lt;br /&gt;&lt;br /&gt;I'm also going to take a day this week to just do nothing except read a good book, becuase I haven't really had a down day on my summer vacation yet.  Not that I'm complaining; I like being busy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-480891513283691800?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/480891513283691800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/sustainable-competitive-advantage.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/480891513283691800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/480891513283691800'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/sustainable-competitive-advantage.html' title='Sustainable Competitive Advantage'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2844513682111435536</id><published>2010-07-15T12:09:00.001-07:00</published><updated>2010-07-15T12:09:25.903-07:00</updated><title type='text'>Update For Thursday</title><content type='html'>All of my tests for New Account Signup passed.  I'm now enhancing the feature for members with multiple accounts.  After biking this morning, I spent some time at the garden and then ran some errands in town.  It's 2:00 now so I'll have a few hours to work on the program this afternoon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2844513682111435536?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2844513682111435536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/update-for-thursday.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2844513682111435536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2844513682111435536'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/update-for-thursday.html' title='Update For Thursday'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-1794865627984987011</id><published>2010-07-13T15:02:00.001-07:00</published><updated>2010-07-13T15:02:53.544-07:00</updated><title type='text'>First Feature Complete:  New Account Signup</title><content type='html'>I'm done coding my first feature, New Account Signup.  This one was a bit tricky because it involved validating three models, saving to three database tables, and redirecting to a page before completing the operation.  I think most features will be a lot easier to code than this one was.&lt;br /&gt;&lt;br /&gt;My task for tomorrow is to write a ton of test cases to exercise the moderately convoluted logic.  Then it's on to creating members.&lt;br /&gt;&lt;br /&gt;I spent a good part of yesterday and today in St. Cloud.  Tomorrow I'll be at school half of the day working on the store and then going to the college to get my badge.  I'm leaving for the air show on Friday; this will be a short week indeed.  Next week I'll be getting ready for my two week trip to the Grand Canyon.  Then it will be August and time to start planning and updating curriculum.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-1794865627984987011?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/1794865627984987011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/first-feature-complete-new-account.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1794865627984987011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1794865627984987011'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/first-feature-complete-new-account.html' title='First Feature Complete:  New Account Signup'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8558030006353786368</id><published>2010-07-10T09:47:00.000-07:00</published><updated>2010-07-10T09:48:47.285-07:00</updated><title type='text'>I'm Inserting Stuff!</title><content type='html'>I'm making a lot of progress on my first feature, Sign Up For New Account.  The system is creating a new organization, group, and member.  The database inserts with parameterized queries are working wonderfully!  PDO is a very nice tool to work with; I'm glad I chose it over mysqli, and I'm glad I'm not using a third party abstraction layer.&lt;br /&gt;&lt;br /&gt;This will probably the last I work on the system until Monday.&lt;br /&gt;&lt;br /&gt;One reason for blogging to so I don't come to September and say, "what the heck did I do all summer?" So before I forget, here is also some of the fun things I've been doing besides working on my new program:&lt;br /&gt;&lt;br /&gt;St. Cloud airshow&lt;br /&gt;Duluth airshow&lt;br /&gt;Camping in Duluth&lt;br /&gt;Kayaking on the Brule River&lt;br /&gt;Brainer for the Fourth of July&lt;br /&gt;Tubing on the Apple River&lt;br /&gt;AP Computer Science Training&lt;br /&gt;Saw Cats! At the Orpheum&lt;br /&gt;Saw a community theater production of Oliver!&lt;br /&gt;Biking nearly every day&lt;br /&gt;Picnic in St. Cloud&lt;br /&gt;&lt;br /&gt;So it's been a good summer so far, the second half should be just as fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8558030006353786368?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8558030006353786368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/im-inserting-stuff.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8558030006353786368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8558030006353786368'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/im-inserting-stuff.html' title='I&apos;m Inserting Stuff!'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-1358108585311638084</id><published>2010-07-09T20:02:00.000-07:00</published><updated>2010-07-09T20:05:48.744-07:00</updated><title type='text'>Data Access Success</title><content type='html'>After three days of research and experimentation, I have a solid, working data access layer.  I'm using PDO, as it's basically considered a standard now, wrapped in a singleton class.  Now I can finally get on with the programming!&lt;br /&gt;&lt;br /&gt;The first feature I'll implement is one of the most complicated: new account signup.  I have to create a new organization, group, and user, relating them all together, in one step.  I have to conduce a number of complex validation steps before doing so.  Setting up a new account might not sound like a terribly complicated task, but it is, trust me :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-1358108585311638084?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/1358108585311638084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/data-access-success.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1358108585311638084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1358108585311638084'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/data-access-success.html' title='Data Access Success'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-1208262731928087167</id><published>2010-07-09T10:57:00.000-07:00</published><updated>2010-07-09T10:58:08.699-07:00</updated><title type='text'>Singleton mysqli Class</title><content type='html'>Since mysqli is fully object oriented, the most obvious approach to using it is to create a singleton:&lt;br /&gt;&lt;br /&gt;Class Db extends mysqli {  }&lt;br /&gt;&lt;br /&gt;Write a public static getInstance method to return an instance of Db so you get access to all of mysqli's properties and methods while ensuring that mysqli is instantiated only once throughout your application.  Sounds straightforward enough.&lt;br /&gt;&lt;br /&gt;I was half successful with this approach.  I had a line of code like this in the parent class for all of my models:&lt;br /&gt;&lt;br /&gt;Public $db = new Db::getInstance();&lt;br /&gt;&lt;br /&gt;Then, to call any of mysqli's methods or properties, I would use code like this within my child model classes:&lt;br /&gt;&lt;br /&gt;$this-&gt;db-&gt; query();&lt;br /&gt;&lt;br /&gt;This is where it gets really strange.  This technique worked great when calling mysqli's static methods and properties, but would not work at all when calling methods and properties that required an instance of mysqli.  For example, calling:&lt;br /&gt;&lt;br /&gt;$this-&gt;db-&gt;affected_rows() gives the following error:&lt;br /&gt;&lt;br /&gt;Call to a member function affected_rows() on a non-object&lt;br /&gt;&lt;br /&gt;Query is a static method, while affected_rows is an instance method (I tried calling several other static and instance methods; the results were consistent: static methods worked, instance methods didn't).  Why would static methods work but not instance methods?  In my singleton class, I am returning an instance of mysql, so all of the instance methods should work.&lt;br /&gt;&lt;br /&gt;Is this me being boneheaded, or is it a bug in PHP?  Viewing the bug tracking system, I noticed that there were some problems when a class extended built-in classes such as mysqli, but those issues have been resolved.&lt;br /&gt;&lt;br /&gt;After spending almost two full days working on database implementation, I'm almost ready to go the easy way out and use a global variable to store the mysqli object.  The normal concern about unintentionally changing the value of the global variable is totally manageable if I maintain discipline in my code.  The one drawback of this approach is that I'll be using a DB connection even when I don't need to.  With a singleton, I was using a DB connection only when a model was instantiated, which does not happen on every request.&lt;br /&gt;&lt;br /&gt;Other frameworks I've used, including CakePHP, CodeIgniter, and Kohana, always connect to the database for every request, and I don't think the performance hit from this will be significant, especially if I use persistent connections.  Also, the vast majority of requests will require a database connection; only a few will not.  So global variable it is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-1208262731928087167?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/1208262731928087167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/singleton-mysqli-class.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1208262731928087167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1208262731928087167'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/singleton-mysqli-class.html' title='Singleton mysqli Class'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-445997538525382553</id><published>2010-07-08T09:55:00.001-07:00</published><updated>2010-07-08T09:55:22.986-07:00</updated><title type='text'>Data Access Options</title><content type='html'>There are several options I have for interacting with MySQL.  I could use PHP's native msql_ functions, its new mysqli_ functions, PHP Data Objects (PDO), or a third party ActiveReocrds or ORM library.  After implementing flash session variables, email validation, and a new skin, much of yesterday was spent researching these options.  I'm leaning toward the mysqli_ functions, but I haven't decided yet.&lt;br /&gt;&lt;br /&gt;Persistent database connections are only useful when PHP is installed as an Apache module.  When installed as a CGI instead, the PHP process is killed when the script is done executing, killing all DB connections along with it.  My shared hosting provider runs PHP as CGI by default, although the option to run as an Apache module is provided.  The Apache module option has some security drawbacks on shared hosts, because other users on the system can access my scripts and files if they're not tied down securely.&lt;br /&gt;&lt;br /&gt;I think I'll be OK with the default setup of my shared hosting platform for now.  When I outgrow that, I'll move to a (virtual or real) private server.  I'll run PHP as an Apache module then because I'll be the only user on the machine, making the security questions moot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-445997538525382553?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/445997538525382553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/data-access-options.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/445997538525382553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/445997538525382553'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/data-access-options.html' title='Data Access Options'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8151193523675431926</id><published>2010-07-06T14:33:00.001-07:00</published><updated>2010-07-06T14:33:25.308-07:00</updated><title type='text'>Have We Been Here Before?</title><content type='html'>I got a lot of good things done on the first day back from my vacation.  I got sessions working with HTTP only session cookies and shared memory as the storage engine.  I'm checking every request for a consistent user agent; I'm checking requests for protected resources for an authenticated and active session; and I'm checking updating requests for a POST command and matching CSRF token.  I also have the validation working on my Users model and just need to pass that data on to the view.  The code structure that I'm using in my models, views, and controllers is very similar to what it was when I was using pre-made frameworks.  I have to say that using my own homemade framework is much better in many ways.  I also got some cool jQuery effects going on my signup form.  Tomorrow, I'll continue working on the validation, hopefully making my first database inserts with parameterized queries, and trying to put a different skin on my app – I already have one designed, and my framework was built to make the task of switching skins easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8151193523675431926?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8151193523675431926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/have-we-been-here-before.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8151193523675431926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8151193523675431926'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/have-we-been-here-before.html' title='Have We Been Here Before?'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-3610555371498361224</id><published>2010-07-02T07:20:00.000-07:00</published><updated>2010-07-02T07:24:34.165-07:00</updated><title type='text'>Goals For Today</title><content type='html'>The MVC portion of my framework is nearly complete.  The only trouble I ran into was getting views within views.  I decided to take the same approach that Wordpress does - making the header and footer separate files, including them on every request, and then sandwiching the main content file in between.&lt;br /&gt;&lt;br /&gt;I thought I was sure how I wanted the UI to look.  In the past two years or so, I've prototypes about six different possible layouts.  I thought I settled on one, but when I looked back at my previous attempts, one of them looks more appealing.  It will be quite easy for me to skin the application.  I think I'll do that and defer the decision as to which layout to use.  I would like some other people's opinions on the matter as well.&lt;br /&gt;&lt;br /&gt;So for today, I want to get the skinning system working and then it's off to the races coding up the first feature.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-3610555371498361224?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/3610555371498361224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/goals-for-today.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3610555371498361224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3610555371498361224'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/goals-for-today.html' title='Goals For Today'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2942730134958441275</id><published>2010-07-01T07:18:00.001-07:00</published><updated>2010-07-01T07:18:45.303-07:00</updated><title type='text'>The Framework To End All Frameworks</title><content type='html'>With the specs, prototypes, and DB schema complete, I started work on the framework for my app yesterday, which will provide features like:  clean URLs, routing, MVC architecture, Data sanitization, authentication, CSRF protection, and form validation.&lt;br /&gt;&lt;br /&gt;Why roll my own?  I've used three CMS systems (Wordpress, Joomla, and Drupal) and three frameworks (CakePHP, CodeIgniter, and Kohana).  All of them force me to do things in funky and hacky ways.  All of them are too big and slow - they load up so many dependencies, slowing down the system, and I don't use 90% of the features.  The features that would be useful to me, such as access control lists, are implemented in a way that would not be useful to me, so I've ended up rewriting those systems anyway.  After getting experience with these systems, I have some great ideas for what an idea framework for me should be like.&lt;br /&gt;&lt;br /&gt;It should be lightweight and do only what I need it to do.  I don't plan on using ActiveRecords or ORM because my SQL queries will be too complex for that.  I plan on building only what I need as I go.  In other words, it WON'T be the "framework to end all frameworks", it will be the "framework I need for my particular app".&lt;br /&gt;&lt;br /&gt;I do plan on open sourcing the framework, code named Tabby, in case it might be useful to others.  But really it's designed with my own needs in mind first.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2942730134958441275?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2942730134958441275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/framework-to-end-all-frameworks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2942730134958441275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2942730134958441275'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/07/framework-to-end-all-frameworks.html' title='The Framework To End All Frameworks'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-7264183274716807207</id><published>2010-06-29T14:48:00.000-07:00</published><updated>2010-06-29T14:53:56.285-07:00</updated><title type='text'>Much Progress!</title><content type='html'>I gained a lot of momentum today.  I've previously completed most of the specs I need for my web app and I just put some finishing touches on them today.  Then I set to work creating the database schema.  I've been thinking about several different ways of doing this, and I picked up a book on high performance MySQL design and tuning.&lt;br /&gt;&lt;br /&gt;I couldn't have just sat down and written a schema in one pass.  This latest iteration is actually my third attempt.  The others would have worked, but this one is clean and fast.  Instead of using the GUI on MySQL Workbench, I typed teh SQL by hand.  It went much faster this way and I enjoyed it more.&lt;br /&gt;&lt;br /&gt;The last hour or so was spent getting the rewrite rules in .htaccess to work properly and writing a class to get all URL parameters passed in to my (yet to be built) framework.  Getting this done was easier that I anticipated.&lt;br /&gt;&lt;br /&gt;I have a few pressing things that need to get done for my school jobs, which I'll attend to tomorrow.  Today I just wanted to get some momentum going on the project before summer is done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-7264183274716807207?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/7264183274716807207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/much-progress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7264183274716807207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7264183274716807207'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/much-progress.html' title='Much Progress!'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-6418849179018441987</id><published>2010-06-28T08:49:00.000-07:00</published><updated>2010-06-28T08:51:10.241-07:00</updated><title type='text'>Syllabus Writing</title><content type='html'>I'm done with the syllabus for AP Computer Science.  I don't usually get into this level of detail on my syllabi, but this time, I've listed every single assignment, assessment, activity, and test, planned down to the week.  I did leave some wiggle room in the schedule, and no doubt, the plan will be adjusted as we go.  I'll probably have more time than planned for some parts of the coruse, and I'll have to drop some assignments for others.  It feels good to have a solid plan though.  The next step is to submit the syllabus to the college board.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-6418849179018441987?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/6418849179018441987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/syllabus-writing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6418849179018441987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6418849179018441987'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/syllabus-writing.html' title='Syllabus Writing'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-3637773910098416611</id><published>2010-06-27T19:45:00.001-07:00</published><updated>2010-06-27T19:45:47.811-07:00</updated><title type='text'>This Week</title><content type='html'>The Summer Institute at Carleton College was a good experience. The weekend was relaxing, taking a day for the St. Cloud airshow with the Blue Angels and taking Sunday off. This week will really be my first chance this summer to gain some traction some of my projects. My goals for this week are:&lt;br /&gt;&lt;br /&gt;Submit my AP Computer Science syllabus to the College Board for approval.&lt;br /&gt;Finalize some logistical details for next school year&lt;br /&gt;Begin reviewing the syllabi, outlines, and textbooks for the college classes I will be teaching next year&lt;br /&gt;Finish the specification phase of my web app project&lt;br /&gt;Exercise each day, as the summer institute last week really did not give me time for that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-3637773910098416611?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/3637773910098416611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/this-week.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3637773910098416611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3637773910098416611'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/this-week.html' title='This Week'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-5388575194779223793</id><published>2010-06-23T17:17:00.000-07:00</published><updated>2010-06-23T17:20:18.581-07:00</updated><title type='text'>Fusion Charts</title><content type='html'>In looking for a charting solution for my PHP webapp, I looked into the Google Charts API and Fusion Charts, both of which are free.  FusionCharts is Flash-based; Google charts use a variety of technologies, some of which are Flash.&lt;br /&gt;&lt;br /&gt;The Google API only allows you to use 300,000 pixels to display the charts.  The Fusion Charts are bigger and animated.  Further, once you download the charts, they reside on your server.  No API calls are required.  FusionCharts seem easier to install and use.  Plus they look better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-5388575194779223793?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/5388575194779223793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/fusion-charts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5388575194779223793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5388575194779223793'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/fusion-charts.html' title='Fusion Charts'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2842366354289666945</id><published>2010-06-23T16:35:00.001-07:00</published><updated>2010-06-23T16:35:50.110-07:00</updated><title type='text'>15 Minute SEO</title><content type='html'>I'm getting some great ideas for my AP Computer Science class from the summer institute this week.  I found a somewhat cool website:  &lt;a href="http://www.webconfs.com/15-minute-seo.php"&gt;15 Minute SEO List&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2842366354289666945?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2842366354289666945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/15-minute-seo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2842366354289666945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2842366354289666945'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/15-minute-seo.html' title='15 Minute SEO'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-81573769259677352</id><published>2010-06-21T16:50:00.000-07:00</published><updated>2010-06-21T16:52:04.755-07:00</updated><title type='text'>AP Computer Science Teacher Training, Round Two</title><content type='html'>My proposed AP Computer Science course is a go for next school year.  We had 48 students register for it, and we had to reduce that number to 35 due to space constraints.  I'm in Northfield this week for teacher training.  The instructor has some great ideas on how to teach Java.  One controversy in the field is whether to teach procedural programming first or to dive right into OOP from the start.  I plan on using the latter method for my course next year.&lt;br /&gt;&lt;br /&gt;My favorite part about AP training is getting to spend a week in a beautiful little college town away from the Twin Cities where I live.  We get out of class at 5:30 every day, so I have each evening to just enjoy the area.&lt;br /&gt;&lt;br /&gt;One of my goals while I'm here is to finalize the syllabus and submit it to the College Board for AP approval.&lt;br /&gt;&lt;br /&gt;I was contacted by a recruiter today about an opening for a Software Engineer.  The position would be a very significant pay increase over what I'm doing now (teaching in the public school system), but I decided and maintain that teaching is the path I want to pursue.  The summers off are really great, and they give me some time to explore independent interests.  I'd take that (and other benefits of teaching) over a big salary any day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-81573769259677352?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/81573769259677352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/ap-computer-science-teacher-training.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/81573769259677352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/81573769259677352'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/ap-computer-science-teacher-training.html' title='AP Computer Science Teacher Training, Round Two'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-6992551582724850137</id><published>2010-06-19T05:54:00.001-07:00</published><updated>2010-06-19T05:55:28.766-07:00</updated><title type='text'>Competitor Pricing and Free Icons</title><content type='html'>Today I'm researching the pricing of my competitors, and I've realized that the original price I was considering is much too low.&lt;br /&gt;&lt;br /&gt;This guy has some cool icons, although I'll probably get mine professionally designed.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.famfamfam.com/lab/icons/silk/"&gt;http://www.famfamfam.com/lab/icons/silk/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-6992551582724850137?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/6992551582724850137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/competitor-pricing-and-free-icons.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6992551582724850137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6992551582724850137'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/competitor-pricing-and-free-icons.html' title='Competitor Pricing and Free Icons'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-1120993448146610583</id><published>2010-06-18T12:20:00.001-07:00</published><updated>2010-06-18T12:23:00.870-07:00</updated><title type='text'>Advanced SQL Injection</title><content type='html'>A great resource for exploiting SQL Injection attacks:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://websec.wordpress.com/2010/03/19/exploiting-hard-filtered-sql-injections/"&gt;http://websec.wordpress.com/2010/03/19/exploiting-hard-filtered-sql-injections/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm two weeks behind on my Security Now podcasts.  Perhaps next week at the Summer Institute I'll have some time to listen to them.  I'll listen to the new Startup Success podcasts then as well.&lt;br /&gt;&lt;br /&gt;I spent most of today working on the specs regarding saving attendance marks.  There are a lot of differences in how this must be done in the web app compared to the desktop app.  I'll spend the next couple of hours starting on my written business plan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-1120993448146610583?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/1120993448146610583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/advanced-sql-injection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1120993448146610583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1120993448146610583'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/advanced-sql-injection.html' title='Advanced SQL Injection'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8824253907678320914</id><published>2010-06-17T14:19:00.001-07:00</published><updated>2010-06-17T14:20:10.295-07:00</updated><title type='text'>Web App UX Designer</title><content type='html'>This guy was recommended on the Business of Software discussion forum:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.misvstyle.com/"&gt;http://www.misvstyle.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8824253907678320914?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8824253907678320914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/web-app-ux-designer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8824253907678320914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8824253907678320914'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/web-app-ux-designer.html' title='Web App UX Designer'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8878789537319059736</id><published>2010-06-17T07:18:00.001-07:00</published><updated>2010-06-17T07:18:12.459-07:00</updated><title type='text'>First Week of Summer</title><content type='html'>I spent the last three days in Brainerd.  This morning, I cleaned up my desk, went through my email backlog, paid bills, and did some errands in town.  A sunny picnic by the lake is planned for this afternoon.  I'll have the whole day tomorrow, then, to start digging in to the web app.  It'll be interesting to come back to my UI prototypes after a break and see if I still like them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8878789537319059736?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8878789537319059736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/first-week-of-summer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8878789537319059736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8878789537319059736'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/first-week-of-summer.html' title='First Week of Summer'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2829195281226409407</id><published>2010-06-13T07:12:00.001-07:00</published><updated>2010-06-13T07:12:59.145-07:00</updated><title type='text'>Website Credibility and Conversion Rates</title><content type='html'>I've been overestimating the importance of traffic and underestimating the importance of comversion rates.  If I can increase my conversion rates a mere 0.5%, my revenue will double.  This goal is easily achievable.  The price point of my new software app will be higher than the current one by a factor of two, and increased spending on advertising will triple the traffic I get.  These factors combined will result in an approximate tenfold increase in revenue, and none of these things are very difficult to pull off.&lt;br /&gt;&lt;br /&gt;The following factors will help increase conversion rates and credibility:&lt;br /&gt;- Displaying a physical address as the location of my business&lt;br /&gt;- Displaying a phone number for my business&lt;br /&gt;- Continually updating the site with recent content&lt;br /&gt;- The author's name and credentials are listed&lt;br /&gt;- Having a clear single call to action on each page&lt;br /&gt;&lt;br /&gt;Of course there are many other factors but I want to make sure to remember these.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2829195281226409407?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2829195281226409407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/website-credibility-and-conversion.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2829195281226409407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2829195281226409407'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/website-credibility-and-conversion.html' title='Website Credibility and Conversion Rates'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-7807222449088612279</id><published>2010-06-13T07:11:00.000-07:00</published><updated>2010-06-13T07:12:39.371-07:00</updated><title type='text'>Time Tracking Software For Summer</title><content type='html'>The school year ended on Friday which means that I have 75 days until I start teaching again. I plan 400-600 hours for my new software project. The summer will see a number of false starts, however:&lt;br /&gt;- A vacation Monday and Tuesday this week&lt;br /&gt;- AP Computer Science teacher training Monday through Thursday next week&lt;br /&gt;- A vacation the first week of July&lt;br /&gt;- A trip to the Southwest the last two weeks in July&lt;br /&gt;- Teacher orientation on August 10th&lt;br /&gt;- Begin working again on August 24th.&lt;br /&gt;&lt;br /&gt;In addition to my software project, there a number of other projects I must complete this summer:&lt;br /&gt;- Write a book (I'm still sort of in stealth mode on this project)&lt;br /&gt;- Write the curriculum for my new AP Computer Science courses&lt;br /&gt;- Write the curriculum for two new college level courses I will be teaching next fall.&lt;br /&gt;&lt;br /&gt;Due to all of the above, I've pushed out the expected release date of my software project until November. It's possible that I may be taking some graduate level computer science courses next school year as well, which will use some time. They'll be interesting, though, and I'm looking forward to taking them.&lt;br /&gt;&lt;br /&gt;So the summer will definitely be very busy. Accomplishing all of this will require great time management skills. It'll be important to establish a routine early like I did last summer, consisting of 8 hours per day of work, 2 hours per day of exercise, and sufficient time for rest and relaxation, without which creative work will suffer.&lt;br /&gt;&lt;br /&gt;I recently installed the free Grindstone time tracking software, and I really like it so far. It will be cool to have an accurate record of how my time was actually spent, versus just how I think my time was spent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-7807222449088612279?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/7807222449088612279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/time-tracking-software-for-summer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7807222449088612279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7807222449088612279'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/06/time-tracking-software-for-summer.html' title='Time Tracking Software For Summer'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-3220120100775013817</id><published>2010-05-29T07:00:00.000-07:00</published><updated>2010-05-29T07:04:20.416-07:00</updated><title type='text'>Targeting a UI</title><content type='html'>I'm a fan of Don't Copy What You Can Steal, as long as doing so is legal.  There are lots and lots of web apps out there, and UX is now a solved problem.  We pretty much know what works and what doesn't.  Rather than re-invent the wheel, I'm looking at successful web app companies for inspiration for my UI.&lt;br /&gt;&lt;br /&gt;I'm very much in the pre-design phase.  I've developed concepts of four different prototypes, just to see what feels rights.  I think I've finally settled on one which is largely inspired by a successful web app to remain nameless.&lt;br /&gt;&lt;br /&gt;Being Memorial Day Weekend, I don't plan on working on my business too much, if at all.  My goal is to have a UI prototype and she UML docs ready to go before summer so I can start pounding away at code.  All of the analysis for the app is done, except for a few details regarding users, accounts, and groups.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-3220120100775013817?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/3220120100775013817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/05/targeting-ui.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3220120100775013817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3220120100775013817'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/05/targeting-ui.html' title='Targeting a UI'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-6215172120811471243</id><published>2010-05-22T17:06:00.001-07:00</published><updated>2010-05-22T17:08:54.950-07:00</updated><title type='text'>Journaling What?</title><content type='html'>For a long time, I've wanted to document my eating and exercising activities.  My lifestyle is healthy, but without an objective record of it, it's hard for me to tell how healthy.  I've signed up for a free online fitness tracker specifically designed for this purpose, but I didn't stick with it.  It's easier to just write it down than it is to navigate someone else's UI design.  So maybe this blog could be a place for that too.  The daily updates won't start until school ends in the middle of June; updates will be occasional until then.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-6215172120811471243?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/6215172120811471243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/05/journaling-what.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6215172120811471243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6215172120811471243'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/05/journaling-what.html' title='Journaling What?'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-1938013560044150086</id><published>2010-05-21T15:48:00.000-07:00</published><updated>2010-05-21T15:59:29.039-07:00</updated><title type='text'>Daily Journaling</title><content type='html'>I like to write.  I tried writing a blog in conjunction with my software business this year, but it didn't work out too well. I was always thinking about what results I'd get from each post, which pretty much defeated the purpose of writing for me.&lt;br /&gt;&lt;br /&gt;For me, writing lets me sort through my thoughts, reflect and debrief on events, record notes to myself that will be useful later, and provide a record of what I've been spending my time doing.  I plan on going back to daily posts on this blog this summer and using my business blog only for product annoucements and similar news.&lt;br /&gt;&lt;br /&gt;Here are my plans for the summer:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a web application to be released in September.  I have a very good idea of what the web app will do but prefer to stay in stealth mode for a while longer.  It will NOT by any of these:  &lt;a href="http://theoatmeal.com/comics/websites_stop"&gt;http://theoatmeal.com/comics/websites_stop&lt;/a&gt;.  It will provide actual utility to many people, myself included.  It's best to write software that you will use yourself.&lt;/li&gt;&lt;li&gt;I have some writing projects in the pipeline.  Again, stealth mode.&lt;/li&gt;&lt;li&gt;AP Computer Science training in June.&lt;/li&gt;&lt;li&gt;Two week road trip to the Grand Canyon in July.&lt;/li&gt;&lt;li&gt;Daily exercise, mostly mountain biking.&lt;/li&gt;&lt;li&gt;Hit as many airshows and fly-ins as humanly possible.  Do as much water skiing as humanly possible.&lt;/li&gt;&lt;li&gt;Grow a garden.&lt;/li&gt;&lt;li&gt;Read three books.&lt;/li&gt;&lt;li&gt;Plan for fall classes.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The plan for this blog is to write short, daily entries to document the summer.  Hooray.  Yay for blogging fun.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-1938013560044150086?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/1938013560044150086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2010/05/daily-journaling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1938013560044150086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1938013560044150086'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2010/05/daily-journaling.html' title='Daily Journaling'/><author><name>Joel Roggenkamp</name><uri>http://www.blogger.com/profile/05870415389415868935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_OQ0FkaVlOEg/S_cI67ciHbI/AAAAAAAAAAM/UQ5ZpGYw7u8/S220/joel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-7995771453626926800</id><published>2009-07-20T10:47:00.001-07:00</published><updated>2009-07-20T10:47:34.975-07:00</updated><title type='text'>Competitor</title><content type='html'>My business pretty much depends on a single customer.  Last week I found out that I have a major competitor.  Either he gets the account or I do.  It's an all or nothing game.  My competitor is further along in the development process than I am, plus he has been communicating extensively with the customer.  I've been communicating with the customer as well, but I really think the other guy beat me to it.&lt;br /&gt;&lt;br /&gt;For these reasons, I'm scrapping my original business idea and will put development of the software on hold.&lt;br /&gt;&lt;br /&gt;However, all is not lost.  What I have done so far are users, permissions, sessions, authentication, and a UI framework.  This is the first part of what needs to be built for any web application.&lt;br /&gt;&lt;br /&gt;Fortunately, I have a few other business ideas, and I can use what I've built already for any of those projects.  I'm going to take a few weeks off to decide exactly what direction I'd like to go.  But I have a big asset in the work I've already done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-7995771453626926800?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/7995771453626926800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/competitor.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7995771453626926800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7995771453626926800'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/competitor.html' title='Competitor'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-9215244545615378682</id><published>2009-07-10T07:35:00.001-07:00</published><updated>2009-07-10T07:35:54.700-07:00</updated><title type='text'>Pumping Out Code</title><content type='html'>The next week or so will not be too glamorous.  I won't be doing any design, just coding coding coding.  I know what I need to get done, it's just a matter of putting in the hours to write the code to make it happen.&lt;br /&gt;&lt;br /&gt;I made an elegant workaround for ticket #633 and am in the process of finishing up the permissions system in my app.  Coding coding coding.  I won't have a test site ready this week, but it should be up during the early part of next week.&lt;br /&gt;&lt;br /&gt;I also finally settled on a name for the web domain, application, and business.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-9215244545615378682?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/9215244545615378682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/pumping-out-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/9215244545615378682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/9215244545615378682'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/pumping-out-code.html' title='Pumping Out Code'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-5351468941919561290</id><published>2009-07-07T13:33:00.000-07:00</published><updated>2009-07-07T13:37:21.759-07:00</updated><title type='text'>CakePHP Trac Ticket #633 = Headache!</title><content type='html'>Take a look at this major limitation of CakePHP:&lt;br /&gt;&lt;a href="https://trac.cakephp.org/ticket/633"&gt;Recursive Association Support&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Users belong to Chapters.  Chapters belong to Conferences.  Given a user's ID, how can I find out which conference he is in?&lt;br /&gt;&lt;br /&gt;I can do this quite easily with SQL, but the whole point of using a framework is to abstract away from SQL.  I've been trying to figure out how to do this in CakePHP all day, and then I realized that the framework doesn't support this type of recursive association.&lt;br /&gt;&lt;br /&gt;Grrrr!!!&lt;br /&gt;&lt;br /&gt;There are some hacky hacks out there, but I'm real nervous about copying someone else's hacky code.  I think I'll resort to hand-writing SQL queries for this.  I wish I would have know about this bug eight hours ago!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-5351468941919561290?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/5351468941919561290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/cakephp-trac-ticket-633-headache.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5351468941919561290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5351468941919561290'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/cakephp-trac-ticket-633-headache.html' title='CakePHP Trac Ticket #633 = Headache!'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8998576980583444674</id><published>2009-07-06T07:30:00.001-07:00</published><updated>2009-07-06T07:30:48.554-07:00</updated><title type='text'>Goals For The Week</title><content type='html'>I'd like to have a working UAT site by the end of this week.  Specifically, this is what I'll need to do to accomplish this:&lt;br /&gt;&lt;br /&gt;Create the permissions table&lt;br /&gt;Set up the four permission levels&lt;br /&gt;Write code to handle permissions&lt;br /&gt;Create the Chapters and Conferences tables&lt;br /&gt;Associate users to permissions&lt;br /&gt;Associate users to chapters&lt;br /&gt;Associate chapters to conferences&lt;br /&gt;Make a final decision on the domain name&lt;br /&gt;Deploy to a server&lt;br /&gt;Create a feedback mechanism&lt;br /&gt;Start a blog&lt;br /&gt;&lt;br /&gt;I eventually want to get my old attendance software ready for sale as well.  I'll just need to make a few minor changes to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8998576980583444674?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8998576980583444674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/goals-for-week.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8998576980583444674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8998576980583444674'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/goals-for-week.html' title='Goals For The Week'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-5099235445991602435</id><published>2009-07-04T10:41:00.000-07:00</published><updated>2009-07-04T10:42:01.428-07:00</updated><title type='text'>Goodbye To SQL</title><content type='html'>I haven't had to write a single SQL query, and I don't plan to.  Good frameworks will take care of all of this for you.  In the .NET world, Linq To Sql abstracts away SQL calls.  CakePHP also includes very powerful tools to perform CRUD operations on database tables.  Creating relationships between tables is extremely easy as well.  Find and save operations automatically look for associated data (although you can limit this recursively).  It's so so nice.&lt;br /&gt;&lt;br /&gt;Never ever try to develop a web app without a framework!&lt;br /&gt;&lt;br /&gt;I fixed a few minor bugs yesterday.  The first field of each form automatically receives focus now.  Kind of a nice feature.  Also the menu links are working so I don't have to type URLs every time I want to see a page.&lt;br /&gt;&lt;br /&gt;Next week, I'll work on permissions, and then I'll be working on deploying to a server to start user acceptance testing.  I plan on doing iterative private beta releases so I can get feedback early.  I'll also start a blog and some sort of feedback mechanism.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-5099235445991602435?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/5099235445991602435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/goodbye-to-sql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5099235445991602435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5099235445991602435'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/goodbye-to-sql.html' title='Goodbye To SQL'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-5075546870288798202</id><published>2009-07-02T19:24:00.000-07:00</published><updated>2009-07-02T19:26:22.848-07:00</updated><title type='text'>Authentication and Sessions</title><content type='html'>The entire day was spent on user authentication.  Here's what I got done:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The application checks for a valid session on every page request.  It displays an error message and reverts to the login page if the session has expired or contains invalid user information.&lt;/li&gt;&lt;li&gt;Users with default passwords are automatically redirected to the Change Password screen and are not allowed access to any other screens until their passwords have been changed.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Man, it feels like I did a lot more work, but really, that's it in a nutshell.  Really, getting the entire authentication functionality done in one day is making pretty good time.  I haven't started adding functionality for role-based security yet.  Now, if a user is logged in, they have access to everything.&lt;br /&gt;&lt;br /&gt;So the User controller is as done as it can get until I add functionality for all the stuff that users are linked to.&lt;br /&gt;&lt;br /&gt;I'm ticking bugs off my list faster than I'm adding them, so I guess that's good news.&lt;br /&gt;&lt;br /&gt;One thing that's a bit different:  the Change Password page does not require an authenticated session; the user ID can be passed through the URL as a UUID.  But this is not a breach of security, because the user must still provide login credentials on this page.  This was an easy way to solve the problem of locking out new-but-not-password-changed users from all parts of the application.  I just added Change Password to my list of exceptions for which actions require login.  And I did a whole bunch of other stuff to make things nice and bulletproof.  But I'm not telling you what they are!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-5075546870288798202?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/5075546870288798202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/authentication-and-sessions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5075546870288798202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5075546870288798202'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/authentication-and-sessions.html' title='Authentication and Sessions'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-1253542413553480163</id><published>2009-07-01T13:52:00.000-07:00</published><updated>2009-07-01T13:59:50.445-07:00</updated><title type='text'>Cross Site Request Forgeries</title><content type='html'>Before, I was using CakePHP's Security component to defend against CSRF attacks.  This component generates a secret token and includes it as a hidden field on every page.  On every request, CakePHP checks to see if the token coming back from the POST data matches the expected value.  If not, the request is denied.  This is a pretty bulletproof way to stop CSRF attacks.&lt;br /&gt;&lt;br /&gt;However, the Security component was giving me random bugs, and after about two hours of research and debugging, I decided to finally give it the axe.  I won't have the tokens any more, but I am requiring all actions that change state be either POST, PUT, or DELETE, depending on the action.  Also, the session timeout is set for 10 minutes.  These two things will reduce the risk of CSRF attacks as well.  I've decided not to check the referer because a lot of school networks strip this off of their HTTP traffic and I'd be denying legitimate users.&lt;br /&gt;&lt;br /&gt;Also, I don't allow users to upload images or scripts.  All user input is severely sanitized.&lt;br /&gt;&lt;br /&gt;The measures I have in place are not 100% bulletproof against CSRF, but in my judgement they're good enough.  It would be very difficult for an attacker to be successful.&lt;br /&gt;&lt;br /&gt;Today I finished the Delete User and Log In pages, with SHA1 password hashing and everything.  I have a few placeholders that the User model depends on, which I hope to get to next.  Actually my next project is authentication.&lt;br /&gt;&lt;br /&gt;CakePHP has a built-in component for this too, but it won't suit my needs.  It requires only one username and one password field.  But I want my users to log in with their first name, last name, and password.  There's no way to hack around that limitation in Cake, so I'll be writing my own authentication methods.  This isn't a bad thing because I'll have a much deeper understanding of how it works.&lt;br /&gt;&lt;br /&gt;The login page is pretty because it has a picture on it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-1253542413553480163?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/1253542413553480163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/cross-site-request-forgeries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1253542413553480163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1253542413553480163'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/07/cross-site-request-forgeries.html' title='Cross Site Request Forgeries'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-5119945195240281363</id><published>2009-06-30T14:09:00.000-07:00</published><updated>2009-06-30T14:13:12.197-07:00</updated><title type='text'>It's Starting To Look Like An Airplane!</title><content type='html'>It's actually looking like a real live web app!  I can add, edit, and manage users!  I can see a list of all users I've added, click a link for a user, edit that user, and be redirected back to the list!  And the controllers are passing flash messages to the views.  It is a beautiful thing.&lt;br /&gt;&lt;br /&gt;Next steps for tomorrow:&lt;br /&gt;Research an alternative to the jQuery pagination feature&lt;br /&gt;Implement Delete User use case&lt;br /&gt;Get Logon and authentication working&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-5119945195240281363?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/5119945195240281363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/its-starting-to-look-like-airplane.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5119945195240281363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5119945195240281363'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/its-starting-to-look-like-airplane.html' title='It&apos;s Starting To Look Like An Airplane!'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-91109943558419836</id><published>2009-06-30T09:01:00.001-07:00</published><updated>2009-06-30T09:02:59.736-07:00</updated><title type='text'>Speaking Slot Secured</title><content type='html'>I just got confirmation that I have a speaking slot at this fall's business educators conference to demonstrate my software.  So I guess that means that I better have this thing done by then.  I also emailed the state director and told her what I've been up to.  So two hours of my morning has been spent on marketing.  This surprises a lot of coders-turned-entrepreneurs, but it's a big part of starting a business.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-91109943558419836?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/91109943558419836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/speaking-slot-secured.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/91109943558419836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/91109943558419836'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/speaking-slot-secured.html' title='Speaking Slot Secured'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-6589883160022697293</id><published>2009-06-29T08:34:00.000-07:00</published><updated>2009-06-29T08:38:02.133-07:00</updated><title type='text'>Phase 1 Roadmap</title><content type='html'>I intentionally sat down and started pounding out code quite early in this project.  I created the scope document and a few use cases but no project plan.&lt;br /&gt;&lt;br /&gt;I will not be creating a formal project plan.&lt;br /&gt;&lt;br /&gt;But this morning, I did sketch out a rough roadmap for the project.  Basically just a list of things I need to do to bring the project to life.  Most of the things on the list are on the business side, not technical.  A lot of them have to do with marketing.  This stuff is MORE important than the actual code to a software business.&lt;br /&gt;&lt;br /&gt;When I see everything that has to happen between now and September, it looks like a very ambitious schedule.  So I'll stop blogging now and start building.  Yay.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-6589883160022697293?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/6589883160022697293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/phase-1-roadmap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6589883160022697293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/6589883160022697293'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/phase-1-roadmap.html' title='Phase 1 Roadmap'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-4143069670791225249</id><published>2009-06-29T07:59:00.000-07:00</published><updated>2009-06-29T08:03:01.714-07:00</updated><title type='text'>Development Machine</title><content type='html'>My development machine is SO SLOW.  It's a Dell Latitude 640; about four years old.  It does everything I want it to, it's just painfully slow.  Here's what I'm typically running when I'm in development mode:&lt;br /&gt;&lt;br /&gt;Servant Salamander&lt;br /&gt;Firefox - Yahoo Mail, PHP API, Localhost (my application), Mantis Bug Tracker&lt;br /&gt;Eclipse&lt;br /&gt;XAMPP&lt;br /&gt;Mozy Backup&lt;br /&gt;Microsoft Word (sometimes)&lt;br /&gt;Windows Media Player (if the computer is being friendly)&lt;br /&gt;&lt;br /&gt;This is enough to bring my computer to a crawl.  I haven't timed out on localhost yet but I think I've come close.  I want new hardware!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-4143069670791225249?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/4143069670791225249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/development-machine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/4143069670791225249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/4143069670791225249'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/development-machine.html' title='Development Machine'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-2632056567098663912</id><published>2009-06-26T12:53:00.001-07:00</published><updated>2009-06-26T12:56:51.763-07:00</updated><title type='text'>Incremental UI Improvements</title><content type='html'>I puttered away about two hours today marginally improving the UI.  The colors go together better and I made a minor improvement to how the navigation tabs look.  You could really waste a lot of time playing around with the UI if you're not careful.  Also, because of the MVC approach that CakePHP follows, making UI changes really is trivial, even after the application code has been written.&lt;br /&gt;&lt;br /&gt;So I'm semi-more satisfied with the UI for now and I'll make a commitment not to touch it again until the last week of the summer.  If I do have ideas for UI improvements, I'll put them into my bug database.&lt;br /&gt;&lt;br /&gt;What I really need to do is hire a designer.  Unfortunately I have no money.  Maybe there will be some nice advisor or student who'd be willing to help with this for free.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-2632056567098663912?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/2632056567098663912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/incremental-ui-improvements.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2632056567098663912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/2632056567098663912'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/incremental-ui-improvements.html' title='Incremental UI Improvements'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-698118632636627167</id><published>2009-06-25T17:07:00.001-07:00</published><updated>2009-06-25T17:07:30.500-07:00</updated><title type='text'>Spreadinh The Word</title><content type='html'>At the AP teacher training, I started spreading the word about my product.  I knew a few of the advisors (read: future users of my product) there and mentioned to them what I've been working on.  The reaction was overwhelmingly positive.  "Wow, that would be awesome!" was the reply.  I brought up the idea of a web-based registration system at some of the conference last winter, and everyone thought it would make things much easier.&lt;br /&gt;&lt;br /&gt;I've been thinking a lot about my marketing and release strategy.  What I don't want to do is spring a released product on everyone as a surprise.  Consistent with the agile approach, I'd like the users of the system to give me feedback as I develop it.  To accomplish that, I'll be inviting certain people to beta test the minor releases this summer.  I'll also be talking to the state advisor about the product and getting feedback from her.  I hope to speak at a teacher's conference next fall as well.&lt;br /&gt;&lt;br /&gt;Originally I thought that the first year would be a beta test only, but I've changed my mind.  I want to be making revenue starting this year, but I'll limit the release to my state only.  I'll require conference organizers to pay for the software, but offer an unconditional money back guarantee.  I've been in the software industry for about a decade and I know that this is a good approach based on my own experience and that of others.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-698118632636627167?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/698118632636627167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/spreadinh-word.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/698118632636627167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/698118632636627167'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/spreadinh-word.html' title='Spreadinh The Word'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8046830376962385722</id><published>2009-06-22T18:34:00.001-07:00</published><updated>2009-06-22T18:40:15.227-07:00</updated><title type='text'>AP Computer Science Teacher Training</title><content type='html'>Today was my first day of AP Computer Science teacher training.  Yesterday, I wrote that I was worried about some of the other teachers being cluesless about CompSci.  Actually, the other teachers taking the class were pretty knowledgeable.  The pace of the class was good.  I'd heard everything before, but I haven't touched Java in about three years, so it was a really good refresher.&lt;br /&gt;&lt;br /&gt;There was one other teacher in the class who was kind of funny.  The professor was explaining the difference between primitive types and objects, and the difference between pointers and variables.  "That has something to do with inheritence, right?" said the funny teacher.&lt;br /&gt;&lt;br /&gt;Actually, any time a topic was brought up that was beyond this teacher's knowledge, he said that it was "related to inheritence."  He asked when we'd cover "advanced topics like inheritence".&lt;br /&gt;&lt;br /&gt;My conclusion is that INHERITENCE is the last chapter that this teacher read in his Intro To Java book, and that it therefore must be a really advanced topic, and that all of the advanced topics he's never hear of before is "sort of like inheritence".&lt;br /&gt;&lt;br /&gt;Strangely, after studying Java all day I don't really feel like coding PHP tonight.  This will be a good chance for me to tweak the UI.  The coffee shop closes in two hours.  Best get to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8046830376962385722?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8046830376962385722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/ap-computer-science-teacher-training.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8046830376962385722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8046830376962385722'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/ap-computer-science-teacher-training.html' title='AP Computer Science Teacher Training'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-7526549783471987236</id><published>2009-06-21T19:04:00.000-07:00</published><updated>2009-06-21T19:08:15.598-07:00</updated><title type='text'>Bug Zapping</title><content type='html'>I'm taking a course this week getting me certified to teach high school AP Computer Science.  I'm in this cool small college town, and I had about an hour and a half before I had to report to school.  I found a neat little coffee shop and banged out four of those bugs on my list.&lt;br /&gt;&lt;br /&gt;I'm having second thoughts about the UI and am considering working on another iteration.  I'd like to get the User functionality fully built first though.&lt;br /&gt;&lt;br /&gt;They're using Java in AP Computer Science.  Most business teachers have basically zero background in CompSci.  Don't know why they're teaching kids about it.  So I have a feeling that this course will be taught at a very, very basic level.  Joy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-7526549783471987236?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/7526549783471987236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/bug-zapping.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7526549783471987236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7526549783471987236'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/bug-zapping.html' title='Bug Zapping'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-5550495820354047501</id><published>2009-06-20T14:10:00.000-07:00</published><updated>2009-06-20T14:14:04.966-07:00</updated><title type='text'>Authorization and Bugs</title><content type='html'>CakePHP comes with a built-in authorization component which helps defend against CSRF attacks.  It's working great with Firefox but not with IE7.  There must be something about how IE7 handles cookies that CakePHP doesn't like.  I'll have to look into this.&lt;br /&gt;&lt;br /&gt;I finally installed bug tracking software today.  My initial choice, The Bug Genie, didn't work out so well, so I went with an open source product called Mantis.  It's great.  I already have 17 open issues (I was using Notepad to track this until now).  I'm going to resolve these issues before I move on to developing additional functionality.&lt;br /&gt;&lt;br /&gt;Many of these issues deal with refactoring, some are deployment notes (there are big differences between a dev environment and a production environment) and some are enhancements.  Only one or two are bona fide bugs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-5550495820354047501?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/5550495820354047501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/authorization-and-bugs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5550495820354047501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/5550495820354047501'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/authorization-and-bugs.html' title='Authorization and Bugs'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-3379363338386393060</id><published>2009-06-20T08:09:00.000-07:00</published><updated>2009-06-20T08:10:44.182-07:00</updated><title type='text'>I Love Cake And jQuery + Security</title><content type='html'>I just can't say enough good things about this framework.  I would NEVER attempt writing a web app without a framework of some kind.  I've tried CodeIgniter as well, but CakePHP wins.  No question.&lt;br /&gt;&lt;br /&gt;Yesterday I got the validation working for the Add User page.  Today, I'm working on the Manage Users page and the Edit User use case.  I probably won't have time for Delete User today but that's next on my list.&lt;br /&gt;&lt;br /&gt;After that's all done, I'll spend some time refactoring and then move on to authentication.&lt;br /&gt;&lt;br /&gt;I've been thinking about security right from the start.  I already have bulletproof measures in place to prevent against SQL Injection and XSS attacks, but I haven't put defenses up against CSRF attacks yet.  The authentication functionality will solve that problem.  Eventually I want to implement HTTP throttling as well, but that can wait until later.  I'll be using that, CAPCHAs, and robots.txt to try to mount at least a measly defense against bots.&lt;br /&gt;&lt;br /&gt;I'll also build anti-framing defense into the site to make it more difficult for other sites to put mine inside of a frame or iframe.&lt;br /&gt;&lt;br /&gt;I've been jQuery plugin shopping too.  I love jQuery just as much as I love Cake.  It makes UI development so easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-3379363338386393060?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/3379363338386393060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/i-love-cake-and-jquery-security.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3379363338386393060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/3379363338386393060'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/i-love-cake-and-jquery-security.html' title='I Love Cake And jQuery + Security'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8890699787996071919</id><published>2009-06-18T19:59:00.001-07:00</published><updated>2009-06-18T19:59:57.908-07:00</updated><title type='text'>Some Success!!</title><content type='html'>I was able to put in a good five hours of work today.  I had a few frustrating problems, two of which ended up being a result of silly typos.  Those little mistakes can drive you nuts.  I had a small bit of success.  I successfully added the first row to the Users table in my database!  I don't have validation or anything working, but still!  Yay!&lt;br /&gt;&lt;br /&gt;CakePHP makes it super easy to make CRUD applications.  I mean super easy.  If I had to hand code everything that Cake does for me, I'd easily have another eight hours of work to do.&lt;br /&gt;&lt;br /&gt;I'm already accumulating a bit of technical debt, and I'm keeping a careful journal of all of the refactoring that I already need to do.  I want to get the user model semi-working first, and then I'll spend some time on the refactoring.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8890699787996071919?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8890699787996071919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/some-success.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8890699787996071919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8890699787996071919'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/some-success.html' title='Some Success!!'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8142573738084820937</id><published>2009-06-17T12:13:00.000-07:00</published><updated>2009-06-17T12:19:39.488-07:00</updated><title type='text'>One Step Forward, Two Steps Back</title><content type='html'>Subversion was more headache than it was worth:&lt;br /&gt;&lt;br /&gt;You have to use Subversion to add files to or delete files from your project.  For each file you add, you must manually add it to your subversion repository.  There is no function for automatically adding all new files.  You can't delete or rename files directly with the operating system; you must use Subversion.  Human errors with this have already caused more problems than what version control can solve.&lt;br /&gt;&lt;br /&gt;I'm going back to my daily backups method for version control.&lt;br /&gt;&lt;br /&gt;The Subversion binaries that I installed automatically installed a second copy of Apache on my system.  I already have Apache and the two instances weren't playing nice with each other.  They were causing each other to crash.  I was trying to develop a web app with crashy web servers.&lt;br /&gt;&lt;br /&gt;Subversion also slowed down my file system a lot and added mysterious system folders to every directory within my project.&lt;br /&gt;&lt;br /&gt;I uninstalled Subversion, uninstalled XAMPP, and upgraded to a new version of XAMPP.  I'm getting CakePHP errors now when I run my application on top of my new XAMPP installation.&lt;br /&gt;&lt;br /&gt;Today has been 90% sysadmin work and virtually no development work.  I won't have a lot of time to work on this tomorrow either.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8142573738084820937?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8142573738084820937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/one-step-forward-two-steps-back.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8142573738084820937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8142573738084820937'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/one-step-forward-two-steps-back.html' title='One Step Forward, Two Steps Back'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-8289144828081588604</id><published>2009-06-17T08:01:00.000-07:00</published><updated>2009-06-17T08:05:14.037-07:00</updated><title type='text'>Death To Dropdown Menus</title><content type='html'>Yesterday, I spent about three hours working on a new iteration of the UI template.  The previous version had dropdown menus, which everyone knows are evil.  The new navigation system uses a tab interface with secondary menu items always visible directly below the tabs.&lt;br /&gt;&lt;br /&gt;The UI looks quite good if I do say so myself.&lt;br /&gt;&lt;br /&gt;I'm still learning a few things about Subversion.  I'd like to automatically add all (new) unversioned files, and I'd like to automatically commit all files that have changed.  I only know how to do this for an individual file or an entire folder.  There must be a way.&lt;br /&gt;&lt;br /&gt;Today, my goal is to finish up the UI template and start working on the User model.  Could it be?  Writing actual code?  Why, yes!  I think I'm ready!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-8289144828081588604?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/8289144828081588604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/death-to-dropdown-menus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8289144828081588604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/8289144828081588604'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/death-to-dropdown-menus.html' title='Death To Dropdown Menus'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-1655637338371607237</id><published>2009-06-15T12:40:00.000-07:00</published><updated>2009-06-15T12:49:13.580-07:00</updated><title type='text'>Subversion and ACL</title><content type='html'>&lt;b&gt;Subversion&lt;/b&gt;&lt;br /&gt;Today, I got Subversion installed and configured on my system.  The server software is pretty easy to use.  I tried using the Subclipse plugin for Eclipse as my client software, but it was giving me a fatal error.  I did some reserch, and getting it to work with my version of Apache would have required some additional configuration which I didn't really want to get into.&lt;br /&gt;&lt;br /&gt;Then I downloaded Rapid SVN.  I love it.  I did some experimenting with Subversion and I have to say it's almost like magic being able to see any version of any file you've ever had.  I fired up my Mozy automatic backups again today to get my stuff off to a remote server.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ACL&lt;/b&gt;&lt;br /&gt;I've settled on CakePHP for my framework, and it comes with support for Access Control Lists.  I knew right from the start that I wanted role-based security in my application, and the Cake ACL implementation seemed like a good choice.  After doing some analysis, though, I realized that the permissions in my application get a bit more complicated than simple yes/no values for accessing methods.  Controls on my UI pages will have different visibility, populations, and defaults depending on what type of user is logged in.&lt;br /&gt;&lt;br /&gt;So, I'm scrapping the built-in Cake ACL and rolling my own.  For a while, I considered writing security verification for each individual function, but I really want to keep the security role-based.&lt;br /&gt;&lt;br /&gt;I'm sure this doesn't make sense to anyone but me.  But anyway that's how I've spent my day so far.  I still have a few hours left and plenty of stuff to work on!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-1655637338371607237?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/1655637338371607237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/subversion-and-acl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1655637338371607237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1655637338371607237'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/subversion-and-acl.html' title='Subversion and ACL'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-1833830312423189051</id><published>2009-06-12T15:23:00.001-07:00</published><updated>2009-06-12T15:24:26.549-07:00</updated><title type='text'>Documentation and Prototypes</title><content type='html'>I did quite a bit of analysis work on this project last winter, and I even got some documentation done.  I've been thinking about this project off and on for the last six months.  I've considered a number of different designs, and I now have a clear idea of how I want the software to look.&lt;br /&gt;&lt;br /&gt;This week, I spent some time on creating some UI prototypes, writing the Phase 1 Scope document, and fleshing out the first use cases for creating, reading, updating, and deleting users.  I also finalized the entity-relationship diagram for the database.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Phase 1 Scope Document.&lt;/b&gt;  I have big plans for this software, but I need to be realistic about what I'll actually be able to accomplish this summer.  Phase 1 will include the minimum functionality for chapters to register students for conferences.  Eventually, I'd like to add functionality for judges, schedules, locations, and scoring, but that will probably have to wait until next summer.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Entity Relationship Diagram.&lt;/b&gt;  I don't have Visio, so I'm using Access to create my ERD.  I tried using an open source product called MySQL Workbench, but I was using a beta version which was too buggy to be useful.  The actual database will run on a MySQL engine, but Access provides some acceptable (not great) diagramming tools.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UI Prototypes.&lt;/b&gt;  I have the basic template done, as well as some mock-ups of reports and add/edit forms.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Use Cases.&lt;/b&gt;  I'll be using agile methods to create this software, but documentation is still important, even for a single-developer project.  Designing this software is an iterative process; the use cases I wrote are meant as a starting point.&lt;br /&gt;&lt;br /&gt;Since it's the first week of my summer break, I decided to take a full day off today and not work on the project.  I'm away this weekend and will pick up the work on Monday.  I'm satisfied with the progress I've made so far.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-1833830312423189051?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/1833830312423189051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/documentation-and-prototypes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1833830312423189051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1833830312423189051'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/documentation-and-prototypes.html' title='Documentation and Prototypes'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-7274634791418452702</id><published>2009-06-11T09:07:00.000-07:00</published><updated>2009-06-11T09:09:17.297-07:00</updated><title type='text'>What Every Software Business Needs</title><content type='html'>There are certain things that a software company simply can not do without, no matter how big or how small the company is.  Here is my list:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Remote backup&lt;/li&gt;&lt;li&gt;Source control&lt;/li&gt;&lt;li&gt;Bug tracking system&lt;/li&gt;&lt;li&gt;The best tools for the job&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;One of the first steps of launching this business was putting this infrastructure in place.  A lot in the industry has changed since I started my last software business in 2003.  After some research and trial &amp; error, I've chosen the tools that I believe to be the current state of the art.&lt;br /&gt;&lt;br /&gt;All of my software development tools, with the exception of remote backup, are free and open source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Remote Backup:  Mozy&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I evaluated both Mozy and Amazon's S3 service with the Jungle Disk front end.  Both services have received excellent reviews from other software developers.  In the end, I chose Mozy for its ease of use and lower prices.  If you use a very small amount of storage and bandwidth, Jungle Disk might be a better deal for you, but Mozy offers unlimited storage and transfers for only $5 per month.  It's actually free if you use less than 2 GB.&lt;br /&gt;&lt;br /&gt;I was previously using CDs for my backups, but there were several problems with this.  First of all, the backups weren't frequent enough.  I would only back up my data about once every two weeks.  That, of course, is a serious problem.  With Mozy, the backups occur automatically in the background every day.  The service will back up only the folders that you tell it to.  The remote server shows up as a new drive letter on Windows systems, and you can navigate to it just like you could with a shared network drive.&lt;br /&gt;&lt;br /&gt;The other problem with CDs is that they were stored in the same physical location as my computer.  One fire or flood, and all of my work would be lost.  Five dollars per month is a pretty cheap insurance premium if you ask me.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Control&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The systems I've used previously include Microsoft SourceSafe (shudder), SharePoint (shudder), and Surround SCM (shudder).  These were all at my jobs.  Other than the biweekly CD backups, I've never used source control for my personal projects.&lt;br /&gt;&lt;br /&gt;I've decided to go with Subversion for source control.  It's free, open source, widely used, and just pretty much the de facto choice for source control these days.  Git and Mercurial are receiving a lot of attention, but I have no need for a distributed system, as I'm a one man team on a single machine.  I'll be adding the SVN repository to Mozy's list of automatic backups.&lt;br /&gt;&lt;br /&gt;I'm really looking forward to being able to start new branches of my project and roll back to previous versions of my files after I screw up.  The ability to quickly diff old and new versions of source code will be really nice too.&lt;br /&gt;&lt;br /&gt;I'll use Subeclipse and the command line interface for the front end.  There are a lot of choices out there for client software but I want it integrated into my IDE.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bug Tracking&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This was done in a notebook in my other projects.  Bugzilla is an obvious choice if you're looking for open source.  I found another product called The Bug Genie, which is entirely written in PHP.  Since I already have a WAMPP stack on my machine, setting this up will be really easy.  I hope.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Best Tools For The Job&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I'm using a laptop that's three years old, but it still works just fine.  I like the laptop because it lets me code anywhere I want to.  I can't work from home; I get distracted way too easily.  Eclipse is my IDE of choice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-7274634791418452702?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/7274634791418452702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/what-every-software-business-needs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7274634791418452702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/7274634791418452702'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/what-every-software-business-needs.html' title='What Every Software Business Needs'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3112342835839474160.post-1580731035988997569</id><published>2009-06-08T15:06:00.000-07:00</published><updated>2009-06-08T15:16:32.872-07:00</updated><title type='text'>Project Hatrick</title><content type='html'>Project Hatrick is my second software company (I haven't chosen a real name yet).  A &lt;a href="http://en.wikipedia.org/wiki/Hat_trick"&gt;hat trick&lt;/a&gt; is when a hockey player scores three goals in one game.  Quite an accomplishment.  Pulling off this project will take the same amount of skill and determination.&lt;br /&gt;&lt;br /&gt;I'll be creating web-based &lt;a href="http://www.google.com/#hl=en&amp;q=conference+registration+software&amp;aq=f&amp;oq=&amp;aqi=g3&amp;=Google+Search&amp;=I%27m+Feeling+Lucky&amp;fp=2Inaafc1UxE"&gt;conference registration software&lt;/a&gt; for a very niche and underserved market.  The market potential for this is huge.  Even if my software ends up being a total market failure, I'll be able to use it in my own job.  I'm an advocate of &lt;a href="http://www.codinghorror.com/blog/archives/000287.html"&gt;eating your own dogfood&lt;/a&gt;; the best kind of software to build is the kind you can use yourself.&lt;br /&gt;&lt;br /&gt;This is my second software business.  I ran a shareware business during and after college and I have no misconceptions about how much work building the project and launching the business will be.  My first software business was a lot of fun, and I think this one will be too.&lt;br /&gt;&lt;br /&gt;There are two main purposes of this blog: to document my work and to keep myself motivated.  I write for myself and don't really expect anyone else to be interested in my posts.  But if my posts do happen to help another budding entrepreneur, great.  I want this to be a day-by-day account of what it takes to start a new software business.&lt;br /&gt;&lt;br /&gt;You can read about my day job at my other blog, &lt;a href="http://teachingtechnically.blogspot.com"&gt;Teaching Technically.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3112342835839474160-1580731035988997569?l=projecthatrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://projecthatrick.blogspot.com/feeds/1580731035988997569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/project-hatrick.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1580731035988997569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3112342835839474160/posts/default/1580731035988997569'/><link rel='alternate' type='text/html' href='http://projecthatrick.blogspot.com/2009/06/project-hatrick.html' title='Project Hatrick'/><author><name>teachingtechnically</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
