Archive for the ‘web development’ Category


And We’re Back!

Monday, September 22nd, 2008

I have been so incredibly busy the last few months that aside for 140 character Twitter updates, I haven’t been able to keep this blog updated with my exploits.

If you are still paying attention, I was complaining about ACL. After several attempts, I gave up using the built-in ACL component in CakePHP and just decided to keep things simple, use the Auth component with role-based access control. Problem solved.

The development of the application has progressed smoothly since getting over that hurdle.

In the meantime, I’ve been setting up my own virtual server for hosting websites for my freelance clients. That has been a learning experience in itself. I’ll post more about that as I formally launch that service.

I’m also way behind on podcasts for the Minneapoliscast podcast. I hope to resume that at a modest pace this fall.

More later as all of my respective projects get updates including SVN info on my CakePHP app.

Wow. ACL is Hard

Friday, June 20th, 2008

That is Access Control Lists. I’ve been developing with CakePHP this spring and summer and it was all going very well until I actually needed to control access to the application. It’s not even that CakePHP falls short here. There are apparently tons of built-in tools for managing access. They’re just poorly documented and the community is relatively new so no one has built a complete plug in. If you’re looking for a solution like I was, I’m afraid I’m not going to give you the best answer here. I did find something that works, so read on. Especially if you’re learning ACL or Modified Preorder Tree Traversal Algorithm (MPTTA) for the first time.

Disclosure: I’m not formally trained as a programmer/developer. Everything I’ve learned, I’ve taught myself. So there are definitely some silos in my knowledge as I’ve learned things on the basis of necessity. I have, however, been developing in PHP for over six years. So it’s not all that bad.

So the learning curve for implementing ACL has been relatively steep for me. First, I had to get my head around the concept. The big picture is easy. What we’re after is a tree of access with ‘admin’ at the root and everything else branching off from that with diminishing access. That’s not hard to conceptualize. What is hard is putting that into practice.

I messed around with this for a long time before stumbling upon this tutorial about the Modified Preorder Tree Traversal Algorithm. Stop now. Read it. Come back.

Now you should understand the concepts that drive CakePHP’s ACL. Unfortunately here is also where we depart from using CakePHP’s tools. At least until a decent plug-in comes along that allows you to manage Access Request Objects (ARO) and Access Control Objects (ACO) via a good, web-based interface.

After many attempts with various solutions that are currently avaliable, I finally settled on Authake.

Pros:

  • Works in CakePHP 1.2
  • User, ARO & ACO adminstration is a snap
  • Access control works immediately without modifying anything you’ve built in your app.

Cons:

  • Installation requires you replace the entire CakePHP engine with Authake’s modified version. This will make upgrading CakePHP a lot harder.
  • The developer has abandoned it in favor of developing in RoR. No hope for future versions unless the community continues development. Personally, I’d prefer a plug-in like Jeff Loiselle‘s ACL Management Plugin that I could just drop right into app/plugins without replacing the entire installation. (The issue I have with Jeff’s are all listed on his “Known Bugs” list. Namely, “does not show inherited permissions, does not show full path in finder & does not have crud fields”. Unfortunately, those are three very major elements of managing ACL.)

If you are reading this in the not so distant future and someone had developed a plugin that has an admin area like Authake’s but drops into app/plugins like Jeff’s plugin, please, please let me know.

My Private Summer of Coding

Tuesday, May 13th, 2008

A couple of weeks ago I met with Garrick VanBuren to talk about cullect.com. I came away from the lunch excited about two things: Trying out some of the features in cullect that I hadn’t quite understood before and giving Ruby on Rails another shot.

I went to lunch with Garrick to offer him some feedback about why I hadn’t adopted cullect yet. (I’ve had an account for about 7 months.) A few colleagues were raving about it. I knew I had to be missing something. I was.

While I think cullect has a way to go before widespread adoption (it runs a little slow on my PowerBook), I see what everyone else likes about it and more importantly, I see lots of potential. So, nice work Garrick. I drank the Kool-Aid. I now curate a small batch of feeds about music and “recommend” posts so the best rise to the top in my “Important” list. This way I can also repurpose those same articles to Minneapoliscast. In other words, I can repurpose content so that relevant reading is included with what I publish. It’s fun and it’s cool.

I’m not even going to talk about how you can pay cullect so that part of your monthly subscription goes to publishers you read. I can’t even tell you how cool I think that is.

What I really wanted to write about is how I came away from our conversation inspired to try Ruby on Rails. I’ve been toying with RoR for about a year now. As I started working my way through Agile Web Development on Rails last year, the realization gradually dawned on me that I was going to have to sit down and learn Ruby. So I bought a pdf version of Programming Ruby, but I didn’t really get very far before other duties called. I just didn’t have time to learn a new language.

After talking with Garrick I was determined to give it another shot. Then I thought, there has to be a Rails-like set of tools for PHP–a language I’ve been working in for years. That thought and a quick Google search led me to CakePHP.

Two weeks later and I’m near completion of the first module to manage clinic and lab data here at work. Once I got my head wrapped around MVC and the built-in helpers in CakePHP, the development got faster and faster. (Disclosure: The database was already fully envisioned and built beforehand. An important first step.) I can’t tell you how gratifying it is to quickly code something in a few lines, test it and have it work. I have a whole summer of coding ahead of me. I’m very excited to deploy this application by fall.

On a final note, I was feeling a little cocky, so I coded my first WordPress plugin yesterday too. Again, easy. It’s not quite ready for public release yet but with a little tweaking, I might just release it. Basically it just pulls in PodPress data and lists the ten most popular podcasts on Minneapoliscast.

I was a little worried that with our research slowing down over the summer I was going to be bored. Now I’m really looking forward to the coming months. Fun stuff.

APML

Wednesday, April 16th, 2008

On Monday, as I may have mentioned, I attended MinneWebCon 2008. Looking back, I think Laurie McGinley‘s presentation on microformats was my favorite session of the day. I had no idea I would find it as interesting as I did.

I think the concept that intrigues me the most is APML, or Attention Profile Markup Language.

How many of you use an RSS reader? Raise your hands. How many times a week to you go and “Mark All As Read”? RSS was a godsend for those of us who are interested in finding information on the web. The ability to scan hundreds, or even thousands of titles of my favorite websites to decide to read was exciting, for a while. Soon people like me built up so many feeds that the practice of scanning became overwhelming. After your feed posts get a few days old, there are just way too many even to scan through. So almost daily we all go through and mark them all as read. Really we’re just getting them out of the way because we want to scan the 200-300 newest headlines. You know what I’m talking about. Enter APML.

In an APML-enabled world, I can decide what topics I’m most interested in and the blog posts that most closely match my predefined interests will rise to the top. I can focus my attention on the posts that are most interesting to me. Sound great? We’re not quite there yet. There are a few websites out there trying to utilize the concept, but as far as usability goes, they’ve got a long way to go. I want to use APML because I have limited time. If I have to work very hard to use the service, I quickly move on. That sounds petty, but my lack of time/attention is what got me to APML in the first place.

But the technology is not far from being implemented. It serves as a reminder that relatively low-tech solutions can still emerge as important tools on the web.