Entries for May, 2007

I received a delightful email from Amazon today:

Dear Amazon S3 Developers,

This is a note to inform you about some changes we're making to our pricing, effective June 1, 2007.

With Amazon S3 recently celebrating its one year birthday, we took an in-depth look at how developers were using the service, and explored whether there were opportunities to further lower costs for our customers. The primary area our customers had asked us to investigate was whether we could charge less for bandwidth.

There are two primary costs associated with uploading and downloading files: the cost of the bandwidth itself, and the fixed cost of processing a request. Consistent with our cost-following pricing philosophy, we determined that the best solution for our customers, overall, is to equitably charge for the resources being used - and therefore disaggregate request costs from bandwidth costs.

Making this change will allow us to offer lower bandwidth rates for all of our customers. In addition, we're implementing volume pricing for bandwidth, so that as our customers' businesses grow and help us achieve further economies of scale, they benefit by receiving even lower bandwidth rates. Finally, this means that we will be introducing a small request-based charge for each time a request is made to the service. Below are the details of the new pricing plan (also available on the Amazon S3 detail page):

Current bandwidth price (through May 31, 2007)
$0.20 / GB - uploaded
$0.20 / GB - downloaded

New bandwidth price (effective June 1, 2007)
$0.10 per GB - all data uploaded

$0.18 per GB - first 10 TB / month data downloaded
$0.16 per GB - next 40 TB / month data downloaded
$0.13 per GB - data downloaded / month over 50 TB
Data transferred between Amazon S3 and Amazon EC2 will remain free of charge

New request-based price (effective June 1, 2007)
$0.01 per 1,000 PUT or LIST requests
$0.01 per 10,000 GET and all other requests*
* No charge for delete requests

Storage will continue to be charged at $0.15 / GB-month used.

The end result is an overall price reduction for the vast majority of our customers. If this new pricing had been applied to customers' March 2007 usage, 75% of Amazon S3 customers would have seen their bill decrease, while an additional 11% would have seen an increase of less than 10%. Only 14% of customers would have experienced an increase of greater than 10%.

We don't anticipate making further structural changes to Amazon S3 pricing in the future, but we will continue to look for ways to drive down costs and pass the savings on to you. Sincerely,
The Amazon Web Services Team

P.S. Please note that the reduced bandwidth rates shown above will also take effect for Amazon EC2 and Amazon SQS. The bandwidth tier in which you will be charged each month will be calculated based on your use of each of these services separately, and could therefore vary across services.

I'll say it again (and again): Amazon S3 is the most important thing to happen to the internet in quite some time. This change makes total sense, too. I'm sure they realized that the incoming requests (esp. if Amazon is returning with a Not-modified header) weren't netting them any $$$, which is why they're now charging $0.01 per 10K GET requests. Not a bad idea - it's effectively singling out the high-volume sites with lots of requests to S3 ... while lowering the cost for small-to-medium sized deployments (like Tabulas).

. . .

Speaking of technological achievements, I've been meaning to write about this for a while, but I keep forgetting.

The Bank of America ATMs have recently rolled out this wonderful deposit option to ATMs. In the past, if you wanted to make a deposit, you'd endorse your checks, drop them in an envelope, and wait for somebody else to do the deposits. Now, when you want to do a deposit, you actually feed in each individual check. The ATM scans an image of the check (which can be printed off as a receipt), automagically figures out the value of the check (wow!), and then deposits it for you. By the time I had gotten back to the office today, the check was already showing up in my BoA online account!

This is friggin' awesome, cause I always worried that depositing a check via ATM could potentially suck - what if the bank never got it? What record would I have? Likewise, I hate going into the bank to deposit a check - there's always a line to do something that could be automated. This new way gives me peace of mind AND efficiency, and that's what I like!

. . .

Fact: San Diego police WILL ticket you for jaywalking. $118. And they *do* have traffic enforcement cops working the 1am shift ... crazy! I just found out I have an unpaid ticket (must have blown off, cause I never got it) for parking in a "passenger-only" zone at 1am on Sunday morning. Give me a break.

I guess it's a good thing - the harsher police are on stupid offenses, the less they're battling with bigger crime problems ... right?

Posted by roy on May 1, 2007 at 04:36 PM in Ramblings | Add a comment

So a quick rundown on MindTouch's product line:

  • DekiWiki - our open-source project which is a MediaWiki fork
  • MindTouch Deki - wikis for enterprises. Runs on a VM, which makes installation a super-cinch on any OS.
  • MindTouch Wik.is - free, hosted wikis for personal use. Runs a modified version of DekiWiki and has software to support the sign-up process (DekiFarm)
  • MindTouch Nexus - create your community-branded wiki. The primary market so far is for newspapers - they can leverage their editorial experience and their user base to create a localized resource.

So where do I fit in and what do I do? Well, the base product we use for all these variants is DekiWiki. I write features for PHP (those that would take too long to write in C#), manage the look-n-feel of our wiki, fix bugs, help triage bugs, and generally help make feature decisions about our product. I still spend a significant amount of time on development, which is where I'm happiest - overseeing the work of others just doesn't seem as rewarding :)

Over the past few months, we've been hard at work on the Hayes release for DekiWiki (which will be used to launch Nexus). I was frustrated during this release because I spent a significant amount of time launching Wik.is (which essentially was a two-man dev release with PeteE, while Damien did all the new designs/skins for Wik.is) which I thought was a total waste of time ... and at the same time MindTouch was reliving some of the ugly "growing pains learning curve" days which we had gone through. Why did we repeat these mistakes? Well, the company recently relocated most of the company to San Diego - the two development bosses above me both left, which meant that I was the only dev who remembered the early release days and the lessons learned there.

Without getting too in-depth into why this release was a horrid experience, I'll try to use a list:

  • Shifting backend from PHP to C# = wow, that's a lot of work, more than anybody expected
  • Everybody working from same office = took some time to get everybody to row the canoe in the right direction
  • Gave critical components to staff not in the office (our Russian office) - I'm still on the fence whether this was a good idea or not, but my initial feeling was that their implementation took far too long for something that was relatively trivial
  • Natural growing pains from PHP to C# API communication - made easy by using cURL, but early on we ran into all sorts of issues with authentication, authorization, etc. (some which are still murky)
  • Debugging stacks. Our business logic was stored nearly entirely in PHP in the past. With this new release, we also make use of database sprocs and C#, while maintaining a significant chunk of logic in PHP. More stacks = more complexity
  • Scope creep. The initial feature set for Hayes was a pretty tight release. We could have released Hayes at the beginning of January and made this C# conversion a separate release (which I think should have been done, cause the work I did prior to January was significant in and of itself). We just kept adding more and more stuff ...
  • QA process wasn't strictly defined until maybe a month ago - wow this sucks BALLS. It's one thing to have uncoordinated developers - it's another to not have those uncoordinated developers vetted by testers

Fortunately, we've addresses near to all those issues. At this point everyone's just pushing for Hayes to be released so we can "be done with it."

One of the biggest reasons why I wasn't entirely happy during Feb. - March was because I wasn't getting to do one of the things I enjoy most - cleaning up the UI.

Let me show you the way our UI looks now (screenshot from our internal wiki):

It's not a bad design. This was the result of months of evolution, and I think for that time, it was a pretty good design. But we didn't do any UI evolution for Hayes - if anything, it looks almost the same! (The two changes to UI in Hayes: the navigation pane is pretty cool, and I did some work in December in making the image gallery not suck ass, but that work got diluted by a contractor we hired later on and implemented a bastardized version of what I wanted).

However, seeing this wiki every day while developing ... it became an eyesore. I didn't really think it kicked ass - it was a great first step at establishing a solid wiki product, but it wasn't even close to a final draft.

I know that within the office, there had been a lot of discussions, here and there, about improvements we'd want to do. Finding myself unable to sleep last week, I ended up getting up and doing a full-blown mockup of what I think the next UI evolutionary step should be for DekiWiki/Deki/Wik.is:

I usually sleep on designs for a few nights and end up hating them (which is why all my projects are always in an ever-changing stage of UI refinement). However, I still look at this design and really get pumped about how clean and simple it is. It becomes immediately clear what actions you can take on a page without being too cluttered.

If the goal of a wiki is to encourage user participation, the goal of the wiki's UI should be to make participation as easy as possible. And I think this is a huge step in the right direction.

Overall, the design still maintains much of the same UI organization ... it's pretty standard stuff: search in top right, logo in top left, navigation in left, etc. etc... but it just feels different.

I wrote up a long document in our internal wiki about some of the decisions I made to avoid repeating errors from the past... I'll try to bullet point the main items.

  • Our old product was a liquid layout. That is a bad, bad decision. Using all of your browser real estate (especially these days with huge screens) is not better for readability, and the unpredictability of the design can cause problems for content formatting. This is a fixed width design (although I'm throwing around the idea of letting it scale between 800x600 and 1024x768 resolutions).
  • Corporate branding ... out the window. The reason our existing product is a horrid color palette is because months ago, I was told to "use our corporate colors." Personally, I think that's the dumbest idea, cause nobody wants to stare at a puke brown and gold color scheme while working on their content. Neutral colors are best - and since our corporate colors have changed to this super dark red ... there's no way I'm adopting those colors in our product. I mean, just look at my wik.is site - do you *really* want that color scheme for a corporate product you paid thousands of dollars for?
  • The design doesn't have to be infinitely customizable. In the past, I made a lot of design decisions that were meant to make things really easy, but sacrificed the site's design. For example, logo uploading can be done through a form - it resizes it for you and everything. But that sucks, cause wherever the logo is, the background has to be white! You can't do fancy designs, cause you don't know what size or dimensions the logo will be. With this new design, I've added a gradient behind the logo. My assumption here: if you can pay $3K+ for a wiki, you sure as heck know somebody who can paste your logo on a background that fits our skin. Another place this becomes evident is my abuse of anti-aliased fonts through images. This makes localization more difficult, but I think making site elements have a different font style from the content is a HUGE step.
  • This new design takes into account new features we're working on for the Itasca release - inline loading of content. This is hard to explain, so I'll save on this for later

So over the weekend, I also started doing the markup for the new design. I finished the markup; check out how close it looks to the actual markup! I guess I'm biased, but I think it looks really damn good in markup form (which isn't always the case, as a lot of graphic designers will sneakily pretty things up in mockups which they know can't be done on websites without a lot of tradeoffs).

The markup itself is very clean - it should be very clean for search engine robots to pick up (good for Nexus), and the damn thing *should* be legible in mobile devices! (The same ol' standard stuff)

I was surprised upon firing up IE6 that there weren't any major issues ... oh the joys of using a fixed-width design so you know the widths ... :)

Cause teaching is important, I downloaded a program that took a snapshot of my computer desktop every 60 seconds when I was doing the markup - I plan on writing up a page showing exactly what it is I do in the hopes of spreading the joys of web development (barf). Watch for it sometime next week...

Posted by roy on May 1, 2007 at 05:14 PM in MindTouch | 8 Comments

Finally a voice of reason regarding Silverlight, Apollo, etc.:

Reactions? "The web just got richer." Well, somebody’s getting richer, but I doubt it’s gonna be the web. And did you hear the news? You’ll write it one time, and test it one time (for real this time, we promise). And Microsoft "rebooted the web." I guess that's all you can do after freezing up for five years. Hey, look over there, shiny objects! That poster may as well be titled "Fucked 6 Ways From Sunday," because that’s what you’ll be if you buy into any of this.

It's like this Ajax thing blew up and everybody is trying to reinvent it while missing exactly why it blew up. Each "proprietary" version requires like a 5mb plugin, which worked real well for Flash (how many years did it take for Flash to reach 90% penetration? Even today, some of my laptops don't have it installed). If I wanted to make a "rich application" (which I never would, because the desktop does that best) I'd use Flash, not any of these unimpressive spin-offs (I mean, really, did you even SEE that lame-ass demo for Silverlight? WOW I CAN EDIT VIDEOS. WOW. I CAN DRAG AND DROP. WOW.

Posted by roy on May 2, 2007 at 01:02 PM in Web Development | 1 Comments

WOULD YOU LIKE TO MEET ME???? LEARN MORE ABOUT ME NOW OMG!!!!!!!!1, Check out this SUPER AWESOME QUOTE: "His designs are thoughtful and simple...kind of like him. ;-)" lol, lame.

Also, I bought a Roomba, and I named him Ronnie. He is friggin' AWESOME.

Posted by roy on May 3, 2007 at 08:14 PM in Ramblings | 10 Comments

I flew back to NC this morning to surprise my parents tonight for their 25th anniversary - it was worth it :). It's also my sister's 18th birthday on Monday (and all you perv "friends" of mine who are gonna crack a joke about that ... just don't), so I'm fulfilling all of my family obligations that involve flying this weekend :)

NC is nice :) I like the trees... there's a serious lack of forestry where I live.

I'm also digging the sweet tea ... man I miss that stuff. Maybe I'll wake up early enough and head up on to Ye Olde Waffle Shoppe...

Posted by roy on May 4, 2007 at 08:40 PM in Ramblings | 4 Comments

Wow, Sarkozy won, with a 86% voter turn-out as well. Puts us to shame.

For other fascinating world news, check out what Hugo Chavez has been up to in Venezuela - he's been nationalizing any industry that he doesn't like ...

As a note, the absurdity of the market caught up to me Saturday when I was doing my Friday reading - Yahoo! stock actually moved on rumors of a Microsoft buyout? Are you kidding me? Who actually thought this would happen? Is the market so heated that any rumors will spark movement? Anybody with half a sense should realize that Yahoo and Microsoft would be the worst marriage ever...

Posted by roy on May 6, 2007 at 12:10 PM in Ramblings | 3 Comments

I am totally paying for today's lunch burrito... oh god...

Posted by roy on May 9, 2007 at 07:53 PM in Ramblings | 4 Comments

Today, I stalled out in my car.

Did I mention it's an automatic?

Now that takes skill.

Posted by roy on May 10, 2007 at 09:23 PM in Ramblings | 7 Comments

In the "things-you-don't-really-wanna-know" department: my stomach has been absolutely wrecked tonight. I've also gained 10-15 lbs (about 5-6 kg) since I moved to San Diego. I think my diet of cheap Mexican burritos, cheap Chinese food, and In-n-Out burgers has finally caught up to me.

Right now, I feel starting a 30 day "eat healthy" diet ... but I feel I would fail after one day ... so ...

Posted by roy on May 11, 2007 at 01:40 AM in Ramblings | 5 Comments
Damien: Roy, what's your job title?
Me: I dunno... developer?
(objections raised about its unoriginality)
Aaron: Say you're an astronaut!
Me: Oh yeah! Except with two Ses (ass-tronaut)

Unfortunately, this is for the corporate MT blog, and they can't say I'm an asstronaut, so I think I'm being listed just as astronaut. For posterity, I'd like to note that I am MindTouch's official asstronaut. I may demand I get business cards printed.

I later submitted this picture to use in the corporate blog:

Let's see if they use that photo...

Posted by roy on May 11, 2007 at 11:33 AM in Foolishness, MindTouch | 1 Comments

Minutes, hours, days, weeks, months... time keeps marching on.

Posted by roy on May 14, 2007 at 11:26 PM in Ramblings | 1 Comments

I can't believe, this day in age, unions still have so much power. Are there any industries out there that are heavily unionized which are actually succeeding in the US? Airlines, automobile, steel... they all seem to be failing. How do companies like Arcelor-Mittal deal with labor unions? Anybody know?

Another random question: Are there any recent industries which are unionized? I know almost no profession in the tech industry is unionized... I wonder why this is ...

Posted by roy on May 15, 2007 at 06:09 PM in Ramblings | 8 Comments

My favorite part of craigslist: writing anonymously about my thought-of-the-moment which i know will expire after a few days. There's something very attractive about the impermanence of the message. We should all embrace the transience of life. (I think I do this to a fault, which probably explains my near-obsession with pop culture and celebrity news.)

When I was trying to think of tangible things that last 50 years today and could come up with very things (coins was the only one that could come to mind). Electronics sure aren't going to last 50 years. Neither are automobiles, and very rarely buildings. (Buildings are usually victim to rezoning and economic downturn, rather than any structural problems).

What tangible things will remain in my life 50 years from now? I've already lost a CD of my older digital images which was taken not more than 5 years ago. Even if I were to create a wonderful online community and reached the plateaus of success that I dare not dream of today ... what guarantee is there that this would succeed for many years? The Fortune 500 of 1956 is very different than today.

That makes me wonder, what, in this life, could I realistically create that would stand the test of time? Songs, movies, and books (not in their tangible formats, obviously) seem to survive the test of time ... but really, how many of the following movies of 1956 have you seen?:

  • Around the World in 80 Days
  • Friendly Persuasion
  • Giant
  • The King and I
  • The Ten Commandments

Look at the popular songs of 1956:

  • Don't Be Cruel -Elvis Presley
  • Hound Dog -Elvis Presley
  • Singing The Blues -Guy Mitchell
  • The Wayward Wind -Gogi Grant
  • Heartbreak Hotel -Elvis Presley
  • Rock and Roll Waltz -Kay Starr
  • The Poor People of Paris -Les Baxter
  • Memories Are Made of this -Dean Martin

How many of these songs have you heard? How many would you have heard if you had never heard the name of Elvis?

I don't want to go as far as to say that I'm concerned about legacy, because that would imply that I am of some import to humanity (which I'm not, and I make pretty clear in my personal life) ... but at some level, I'd like to know I made some sort of positive impact on the world.

In any case, the only other thing that I could of think that lasts 50 years besides coins was a relationship. To all those couples out there that have made it 50 years ... I look up to you with the upmost of jealousy. I can only hope to one day participate in something as worthwhile and lasting.

Posted by roy on May 15, 2007 at 10:17 PM in Ramblings | 3 Comments

Gmail has been down for me with a 502 - Temporary Error since last night :( I guess the server I'm on is barfed... good thing I'm not paying for it, or I'd be really pissed :)

Booooooo!

Posted by roy on May 16, 2007 at 02:28 PM in Ramblings | 1 Comments

Smart systems piss me off. Right now, I can't decide whether to be pissed at DoubleClick or Adobe right now for their SHITTY implementation of Flash ads.

DekiWiki makes a lot of use of inline popup divs, so there's some work being done with z-indexed layers ... which doesn't play very nice with Flash:

See the overlap? Here's the offending HTML:

<div id="DIV_20476501_11179448995515" style="position: static; visibility: visible; z-index: 999999;"<<embed alt="Click Here!" id="FLASH_20476501_11179448995515" src="..." quality="high" bgcolor="#" wmode="window" name="FLASH_20476501_11179448995515" swliveconnect="TRUE" type="application/x-shockwave-flash" allowscriptaccess="always" height="600" width="160"<</div<<script src="http://m1.2mdn.net/879366/globalTemplate_17_17.js" language="JavaScript"<</script<

Not only does DoubleClick have the nerve to send in wmode="window" (setting wmode="transparent" tends to solve this problem) ... but the div they send back has a z-index off 999999.

I understand there's no "best practices" for z-index, but this seems like a pretty shitty implementation ... some engineer decided, "Hey, ads are most important! Screw the presentation of the page that this exists!"

Fortunately, I've written some Javascript that loads in once that content loads and converts any wmodes and strips away any z-index foolishness... seems to work, except in a few cases (which I still haven't nailed down).

I hate DoubleClick, and I *really* hate Adobe.

Posted by roy on May 17, 2007 at 05:48 PM in Web Development | 2 Comments

goal in life: find somebody who gets paid enough to do what they do.

Posted by roy on May 18, 2007 at 01:15 PM in Ramblings | 2 Comments

the Uncanny Valley of user interface design: "a Windows application should look and feel like a Windows application, a Mac application should look and feel like a Mac application, and a web application should look and feel like a web application."

I couldn't have said it better. I remember back in the early days of Firefox, the application didn't "look" like a MS Windows window ... which turned me off from it. I also know I detested Hotmail for its emulation of MS Outlook (why people try to emulate this horrible, horrible program is beyond my reckoning).

In my opinion, a "failure" in a web ui is for one of the following reasons:

  1. Attempts to emulate a desktop environment and fails (RoundCube looks beautiful, but it actually feels very gawky to use, while Gmail has the opposite problem)
  2. Slowness (I never liked Zimbra cause of the "slowness" of the app - I also know DekiWiki has had similar complaints). People will use whichever application is faster - I prefer Gmail to my personal email, cause I want a low overhead when reading my email ... but I prefer Thunderbird for my work email, because I do need the added UI overhead for some of my more complex tasks (sorting, flagging, and folder-ing [Don't like labels])

The end user doesn't care what an application is written in - they just want it to work. When you enforce a desktop paradigm onto a web user, they get into the desktop paradigm mindset. When you break that paradigm, you take the user on the defensive ... which is why I think most web apps would be better off not emulating desktop applications in the first place. I've always been from the school of consistent UI - action should behave similarly across an application ... this helps people feel comfortable within a new UI.

. . .

Of course, none of this applies if you're writing a language in Java. No matter what you do in Java (native UI controls), you can always tell a Java app by howwwww frrrrriiiggggiiin ssssslllloooooooooowwwwwww iiiiiiiiiiiiiiittttttttttt iiiiiiiiisssssssssssssssssss.

I'm pretty sure Limewire is written in Java, cause when I load it up, it takes about 30 seconds after my initial click for me to get any useful "please wait" screen. Of course, I think I mis-click so I click again, which fires up another instance of Limewire ....

Posted by roy on May 21, 2007 at 11:51 AM in Web Development | Add a comment
Me: http://cad-comic.com/comic.php?d=20070521
Neeraj: ahaha i guess you heard about sc2
Me: ohh yesss
Me: it looks really promising
Me: i trust blizzard and their balancing skillz
Neeraj: does this mean mindtouch's next product will be delayed?
Me: hahahah. they asked me the same question
Me: i just told them i'd be calling in sick pretty often
Neeraj: and they were cool with it?
Me: they thought i was joking so they laffed
Neeraj: "but to their surprise, the joke was on them, as roy proceeded to take the next 5 weeks off sick. when asked if he was OK, roy replied 'no i'm very sick with ebola right now so i'll be back to work in a month when i'm completely cured and non-contagious. or i might die. either way, don't expect me back for a while"
Posted by roy on May 21, 2007 at 04:49 PM in Ramblings, Foolishness | 2 Comments

If you ever decide to write an application that deals with Information Architecture (IA) [wikipedia], you'll eventually probably run into the permissions problem.

In theory, permissions are this awesome concept of controlling the flow of information. I predict the next big take-off for web applications will be privacy granularity, once API standards (like Atom) standardize and concepts like OpenID allow you to centralize your login.

Gated communities (LiveJournal, Tabulas, Facebook), thrive on the the privacy model. The earliest manifestation (that I remember) was the LiveJournal "friends-only" posting. You defined a set of LJ friends, then you can pick posts that only appear to them (I stole that idea for Tabulas). Facebook's whole popularity (and the 'elite' feelings from its members) derive from the fact that people feel like they're a part of a very inclusive crowd.

Anyways, I ramble. The point of this post is talk about some of the internal discussions that went into the permissions model for DekiWiki.

I wrote the initial page permissions spec for DekiWiki a while back, but we've since revamped to a different model which is a lot more logical for the end user.

DekiWiki Permissions Overview

In DekiWiki, you can allow a page to only be viewable or editable to a certain group of people. This is to protect sensitive information. Besides some of the terminology (which still seems a bit too techie), this screen should make some sense. You've got a list of users on the left; you add users on the right, and you've got the permission type in the top center.

The problem

Handling restrictions for each individual page is easy - when a user loads up the dialog, they can see who is in the list; add and remove, and save. In computer lingo, the user interface stores the state of permissions, which you (the contributor) take in and then figure out how to modify. Very easy. We then send the list of users to the smart computers, and they store that information.

The problem occurs when you try to handle recursive page permissions in a hierarchical system. How do you cascade a permission down to its children?

You might say, "Easy! Just give the children the same permissions as the page you're operating on!"

Hooooooooooooold it, partnuh.

Let's say there's a fictional playa named Royboy, who creates a wiki detailing all of his girlfriends. He sucks at remembering things like birthdates and anniversary dates, so he uses the wiki to document this type of information. He decides to create a hierarchy that looks like this:

Now, he doesn't want the whole world to know about his biz-nass, so he makes the whole hierarchy private.

But, his personal assistant needs information about his current long-term girlfriend (Royboy is a hot in-demand movie star, so he has a personal assistant), so Royboy grants the ability for his personal assistant to view his current current:

Now, let's say Royboy's momma calls up, grillin' him for some info about his girlfriends (she has a keen interest in seeing who Royboy's potential baby momma's are). So he decides to give her permission to the "Long Term Girlfriends" hierarchy (he doesn't want her knowing about his one-night stands).

In a system where changes simple propagate down, you end up with this:

Notice how the personal assistant got removed from the page?

Simply put, for the children pages, users who had better information about who had access to the page get their changes overwritten by users higher up in the hierarchy.

Possible solutions

Here's a chart of the possible ways of handling recursive page permissions:

Cascade all Permissioning

What we were describing above is "cascade all" effect. Basically if you have access to modify the permissions, it will overwrite whatever permissions are already on the page with your set. This can lead to behavior where somebody explicitly set permissions on a page to allow somebody, but got those permissions revoked when somebody higher up in the hierarchy updated permissions.

Delta

The other effect we see is delta. What delta does is calculate the change in permissions for the page, then applies those changes recursively to each page. For example, in the example I gave above ... adding Momma to the to hierarchy would result in a delta of +Momma. That means when it hit the "Cashier who works at that restaurant" page, the operation wouldn't replace the permission ... but would append Momma to that list.

The cons of delta is that it quickly leads to disorganized permission sets in a hierarchy. It also makes it very hard to "reset" all permissions down to nothing. For example, for every operation that was done, the exact same operation in reverse (Removing Momma from the "Royboy's Girls" page) would have to be done. If you have an organization with hundreds of people dealing with permissions, you can quickly see how that would get out of hand.

Where equal?

The "Where equal" case is supposed to resolve some of these issues - the changes are only applied to pages with the exact same permission set. So basically even if you have the ability to apply permissions, it wouldn't necessary take effect.

In our example, the delta where equal case for adding Momma was: "Add Momma to pages with permission private with nobody else". When it gets to the "cashier who works at that restaurant" page, the operation would return "page permission private with personal assistant" and therefore Momma wouldn't be added.

This can lead to very unpredictable operations where you *think* you're adding somebody to the permissions set for a set of pages, but you're really not.

Delta where any, I guess

In order to preserve the permission specificity of children pages, we have to apply a delta where any operation. This means that anytime you add/remove a person from a permissioned page, they will be added (or removed) from all children pages. The end result for the user is that this person can view all children pages (if added to permissions list) or will not be able to view it at all (if removed).

So how do we solve the problem of "resetting" the permissions? I suggested the equivalent of a "tactical nuke" operation which would wipe everything down to public. This seems to be the only way to handle this ... and imagine clicking a little bomb icon! How cool would that be?

Walking...

Another issue that comes up is whether to block operations on grandchildren pages. Look at this picture:

Even if Page C is blocked to the person (Bob) who is attempting to operate on Page A, it will operate on Page D.

At first, this made no sense to me... if a operation gets blocked with a page, it should stop!

But then, it made better sense when I rephrased the operation: "Bob is attempting to view every page in this hierarchy and setting the pages to private." So even if he gets blocked at Page C, it makes no difference! He could navigate to Page D and operate from the UI ... so we should maintain that operation!

Conclusions

I know this is a hasty post, but I'm a bit tired, and I only really wanted to capture this for reference in the future. Here are the conclusions:

  1. Being blocked by a child node shouldn't affect grandchild node operations, since you could get to them via the UI and operate on them normally. The system should emulate exactly what the user is doing on the front-end in a recursive manner.
  2. When a user operates by adding or removing people from a list of permissions on a page, the deltas should be used in operating on all the child nodes to maintain the specificity set by previous users. This means that if you remove a user from a node higher in the hierarchy, he will not be able to view *any* pages on the children pages. Likewise, a user who is added will not destroy anybody else's permissions, and will be added to all the child pages.

Tomorrow, a long post about standardizing UIs... wooooo

Posted by roy on May 22, 2007 at 03:16 PM in Web Development, MindTouch | 3 Comments

PHP OOP makes me want to cry. Or maybe it's OOP in general. I'm trying to debug this UI view that generates a f'ing table with a list of input boxes. Really fucking simple, but this code is making my head hurt. Sigh muffins. Here is a quote that should be pounded into everybody's head:

"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." – Brian W. Kernighan

"Increasingly, people seem to misinterpret complexity as sophistication, which is baffling---the incomprehensible should cause suspicion rather than admiration. Possibly this trend results from a mistaken belief that using a somewhat mysterious device confers an aura of power on the user." - Niklaus Wirth

Because I know what all of you are thinking right now, I'll just post it so you don't have to say it to me:

Posted by roy on May 23, 2007 at 03:50 PM in Ramblings | 5 Comments

Cool idea: CAPTCHAs are actually "words" that a computer can't read while attempting to scan books - you let the human do the transcription (the CAPTCHA itself is two words: one the computer knows is correct, and the other which isn't).

They then take that word and display it to many other users as well to figure out which word is correct (it's possible to incorrectly transcribe).

Pretty nifty idea.

Posted by roy on May 25, 2007 at 11:25 AM in Ramblings | Add a comment
que eres linda y hechicera
como el candor de una rosa
y decirte niña hermosa

Kill Bill was just as good yesterday as it was back in 2003.

Posted by roy on May 28, 2007 at 01:43 PM in Music | Add a comment

So a new Tabulas feature! Wow! Finally, your subscription to this journal has paid off handsomely in dividends!!!! YOU CAN FINALLY DO SOMETHING NEW!!! Hah, just kidding (sorta).

I finally got around to integrating Lightbox2 to the galleries here. What does this mean?

Click any image in this gallery to see the effect. You can hover over each of the halves of the images to navigate to the next image or to the previous image.

Want a screenshot of it: Well, here's a screenshot of it, which is showing an image of a screenshot of it:

Confused already?

To enable, go to the new control panel and set the gallery option; this will make it work for all your images in your gallery.

. . .

I really like this little library - I think this was the first project I saw using Lightbox that sold me on the Prototype framework. Since then, there's been a few rumblings about how "bad" Prototype is - what's amusing is we ran into this exact problem with DekiWiki which was being caused by Xinha (which was extending the Array object and causing all sorts of headache - it took us days to track this down).

I had originally imported Prototype as the sole JS lib into DekiWiki, which was dropped in favor of Dojo, which was then dropped back in favor of Prototype. Then, one of our contractors didn't like that and ended up importing YUI and jQuery into DekiWiki. Rather than fight this contractor, we ended up migrating everything to jQuery and YUI in DekiWiki (and that's the way it's staying, damnit!

The reality for anybody looking for frameworks: Criticisms of Prototype like the one linked above shouldn't turn you off completely. My guess is most people who are using these frameworks are doing very minor modifications on libraries that are built on top of these frameworks.

Posted by roy on May 28, 2007 at 02:53 PM in Web Development, Tabulas, MindTouch | 14 Comments

Yesterday, I decided to grab some quick grub at Rubio's for lunch. I was approaching the front door when out of the corner of my eye I saw a hot girl.

In days past, I would have made a quick glance to "check her out." Unfortunately, Californian girls (maybe it's just SD) all look the same: super toned and tanned bodies, super short shorts (the ones that look comfortable yet still manage to hug the ass), a white tank top (with strategically positioned fruity-colored bra straps showing), huge dark housefly-like sunglasses, sandals, jabbering away on a cell phone. I mean, the only difference really is whether they're a blond or a brunette ... I feel like there are only 5 girls in California, and they follow me around every where I go just to keep reappearing in my line of sight. California, the land of mass-produced "hotness." Sighmuffins.

Anyways, I digress. So anytime I see a person in my peripheral vision approaching the door, I need to time my arrival so I can know whether to open the door or not. Big families: no. Single people: yes. Couples: no (let the guy open the door for the girl). You get the idea.

Anyways, I notice it's a single girl, so my immediate reaction is to open the door for her. No problem.

So I'm opening the door, and this sashays right past me, without losing a step in her stride. She just zips in.She mutters a "thanks" as she walks past.

I'm taken aback. There was no stutter-step. No hesitation... no "Oh, are you opening the door for me? ME? Why thank you!" (all unspoken, of course)

I honestly cannot remember a person who I've held a door open to who seemed to expect it. I mean, yeah she's hot, but come on! A hesitation! A stutter step! Don't make it seem like the world opens all its doors to you (even if it does).

Man, I should have just stopped at the door. She would run right smack into that thing, given her walking speed.

Posted by roy on May 28, 2007 at 04:30 PM in San Diego | 7 Comments

The highlight of my week's routine is when I drive up to Mission Valley on Saturday and Sunday for lunch at Rubio's (fish tacos) and In-n-Out (awesome burger + fries).

The problem is I loooooooooooove both of these places, and I'm usually torn on which one to eat. The meals are never quite as satisfying because I wonder if I would have had a better meal at the other fast food chain.

While eating at Rubio's, I saw a late 30ish Asian couple walk into Rubio's. The guy had a "In-n-Out" take out bag.

"Cool," I thought to myself. The dude likes In-N-Out, and the chick likes Rubio's. The genius of this guy didn't strike me to later, when they sat down at the next table.

"Honey, do you think you can take one of my fish tacos? It's too much."

CRAP! The dude gets In-N-Out AND Rubio's!!!!! *smacks forehead* I NEED A GIRLFRIEND SO I CAN DO THIS, TOO!!!!!

sighmuffins.

Posted by roy on May 28, 2007 at 04:38 PM in Ramblings | 5 Comments

If you're involving in any custom templating on Tabulas, please read this forum and vote. As much as I hate the Myspace-ification of the web, dealing with people who keep violating these rules is becoming a bit tiresome for me to deal with.

. . .

I've decided to retire the goat avatar as my default Tabulas icon for something more ... me:

Before, mr. goat:

Now, Mr. Me:

It comes from a picture Aaron took of my co-worker (Max) and me:

I'm not sure what I was doing, but I'm pretty sure I was trying to look sexy and mysterious. And I'm pretty sure I failed at both.

Posted by roy on May 28, 2007 at 05:50 PM in Ramblings | 3 Comments

Twitter stores your passwords in plaintext:

Makes me feel warm and fuzzy inside...

Posted by roy on May 30, 2007 at 09:52 PM in Web Development | Add a comment

What's up with techcrunch posting the world's most useless interview? I mean, I don't expect sparkling journalism from a blog, but come on ... Twitter is working on scalability issue after they've been down so long? REALLY? They learned from their mistakes? REALLY? They have steps they're going to take to improve stability? REALLY?

The public fluffing of Twitter is so maddeningly annoying.

Posted by roy on May 31, 2007 at 02:13 PM in Web Development | Add a comment
« 2007/04 · 2007/06 »