Delicious? How about “somewhat tasty”?

Delicious Library (Hah, you thought this was about food!) is a cool app. It’s pretty much the only game in town, and has also long been considered one of the premier mac apps in terms of visual style and workflow.

Where are the basic features though? Like secondary sorting characteristics? I really want to go through all my books and tag the “series” they belong to, but as delicious doesn’t sort “Series within author”, it’s kind of useless. This is especially annoying because the way core-data predicate searching works should make this decently easy to accomplish. iTunes has it (Album by Artist), and it’s really kind of an intuitive thing now that people are going to expect. (I’m actually really annoyed at Delicious Library right now, just because of this sorting issue!)

Here’s one of the downsides in working on cutting-edge platforms like Mac OS-X, iPhone App-Store, or the edge of webapp development. It’s a reaaaaally fast moving target. A feature that even a year ago would have been amazing, is now a major defect in your software if you don’t have it. You’re going to have to spend a lot of time chasing the target, and using whatever is left of your day to get ahead and innovate on your own.

This makes me wonder about doing development on any of these cutting-edge areas. I don’t know if I have that much time!

Things I learned from … facebook …

Yes, that’s right. I have joined the huddled and unwashed masses, and I now have a facebook account.

Allow me to set one thing straight though! The only reason that I caved: to destroy one’s enemy, one must first understand one’s enemy. I still think the concept is fundamentally wrong, but just my first 2 days in facebook has shown me some of the things it does astoundingly well, which are major hurdles to any attempt to replace the thing.

Here’s the thing facebook does right. Connect people.
The people facebook presented me with that it thought I might want to be friends with? Whew! It does it’s job pretty well! I did things step-by-step just to see what it would give me. When I entered that I worked at Apple, it gave me a lot of people. When I narrowed down that I lived in portland, it gave me people from my area, primarily people from my downtown store. When I the entered my email address it gave me a bunch MORE people. (I started with the address “facebook@joshproehl.com” just to test this functionality.)

It seems to remember anyone who’s ever searched for my name, my email address, or tagged anything with either of those. This is impressive, and something I have no idea how to duplicate when designing a distributed social networking service. This one thing (which I had previously overlook due to my anti-facebookery) ? may be the thing that makes facebook worth saving rather than destroying. At the very least it’s an incredible hurdle to overcome.

I’m going to go approve some people as friends so that I can “write on their wall” in a snide and demeaning tone.

Why no observer patterns? (Pt. 2)

Immediately after posting the last article I started thinking about how this could work. Let’s assume a RESTful Rails based project.

Things we want to observe: Resources.
Done! That was easy!

So: http://daedalusdreams.com/observers/ would show you a list of things you could “subscribe” to, and indicate which of them you were already subscribed to. This would require you to be logged-in (openID) and have your own site’s URL tied to your login. (Thought: OpenID metadata?) Then you could simply say “I am interested in blogposts, microblog posts, and any new images you post.”

Then I, as daedalusdreams.com, would have an option when I went to submit a blogpost: “Notify Observers?”. (Maybe it would only appear if this resource had people actually observing it?)

I should speak briefly on the core principle of this system and the reason I started thinking about it. People often think I am against “social networking”. In reality, what I am really against is personality fragmentation. I refuse to have a twitter AND a myspace AND a facebook AND a linkedin AND a flickr AND a del.icio.us AND twitpic AND youtube AND…. I AM daedalusdreams.com, and everything about me should be in this single place. (Subject to needing additional hosting/bandwidth, but that can still all be linked to daedalusdreams.com and found here.)

I’ve just discovered something called WebHooks.? I think I’ll go read about that for a while. Looks interesting.

Why no observer patterns?

The observer pattern is really quite handy:
“Hey, you, the dude responsible for managing Josh’s twitter posts! Let me know when he posts something new! My address is…”

That’s basically it. It works in Cocoa, it works in SproutCore (Javascript), it works in Rails.. Why has it never been taken to a wider scale?? I understand that pushing to users is difficult due to the “statelessness” of HTTP, but “push”ing between servers with static IP/Hostnames should be decently trivial.

REST, JSON, SSL, toss out any number of acronyms you want. It’s doable in a number of different ways. So why isn’t it common? Why can’t I subscribe to your blog and have it notify me when you make a new post? Forcing me to poll your RSS feed periodically to see if you’ve made a new post is, shall we say, fucking backwards and wrong!!

So what are the real challenges here?

  1. Callback address. What if a registered observer changes their callback URL? How do we address them?
  2. How do we authorize changes? Must research OpenID/OAuth and see if there are systems that might work for this.
  3. Sufficiently extensible and user-definable. No locking the user profile into ONLY having fields like “favorite pet” and “smoker y/n”. No limiting the language used.

What might this look like?? If I (joshproehl.com) want to obsevre events at daedalusdreams.com I could send this:


http://daedalusdreams.com/observer/create
POST
{
model:blogpost
callback:http://joshproehl.com/listener/
}

And then when daedalusdreams.com makes a change to the blogposts it would know to send this:


http://joshproehl.com/listener/
POST
{
source:http://daedalusdreams.com/
model:blogpost;
sourceURL:http://daedadalusdreams.com/blog/5
}

I’m having trouble visualizing both exactly how this would work, and why it might not. I think it may be time to start diagramming some things out.

Continue reading in Part 2

Predictability in UI design

So today I had the dubious pleasure of working all afternoon on UI design in Cocoa, and then UI design in Rails/CSS/HTML.?
Going from one to the other really highlights some of the problems in doing web-based design!

My big issue with writing in HTML/CSS is? predictability. I do not? enjoy wondering if something is going to render properly, or if a particular CSS attribute is going to work the way it ought to.

Maybe I’m doing it wrong. Maybe CSS doesn’t suck as bad as I seem to think. But until I can say “you, the content box! Size yourself to fit around the content inside you and then position yourself in the center of the screen” just that easily…

Bevel Lines and woodgrains

Found this? photoshop tutorial which showed me how to fix two little issues I was having. Realistic woodgrain, AND “bevel lines”!?

The bevel line effect is exactly what I was looking for, and I don’t want to forget how to do it, so here it is:

Green-Bevel

Woodgrain_bevel

The effect is one that I’ve been searching for, but couldn’t seem to find the right keywords. It’s really super-simple to do!

  1. Create parallel white/black lines on their own layer. (Just a few px wide)
  2. Gaussian-Blur the new layer. (Radius 1.5 has worked perfectly so far.)
  3. Set the layer blending mode to “Soft Light”

And it’s Just That Easy! This is a technique I’v been looking for to create nice smooth buttons-on-a-bar.

SproutCore 101 – Intro

Got interested in learning the? SproutCore? (SC) Javascript framework. Looks like it’s been used to do some pretty spiffy stuff. I have a few hesitations though.

  1. “Running Target” API.? Cutting edge taken to the extreme means that the very core of things might change. Techniques you develop now may not even work in 2 months. The next release of the framework may look like an entirely different framework altogether. I got slightly burned by this when I got into Rails a while back at just exactly the wrong time. SC looks like it might be just about at that point where things are going to get pretty mixed up.
  2. Poor documentation.? Because the API isn’t completely stabilized, documentation for even some of the most basic things is difficult to find. The “Into to SproutCore” tutorial shows you how to make a single-view application, and that’s about as useful as a static webpage with some hand-coded JS. Learning this thing is going to require taking it apart and learning exactly how it works for myself.?
  3. Social Interaction Requirement.? Yes, I know it’s pathetic and sad that this is an issue. But with many environments there’s a surplus of blogposts, tech articles, books, and other “static” resources describing almost every imaginable problem you may have and it’s various solutions. With a new developing framework like SC the only way to get information can be to actually get involved and ask questions on the discussion list, or IRC channel. While I am not completely opposed to this, it does slow down the learning/development process and really isn’t my style.

SC looks like such an interesting framework, and I’d love to actually get in on the ground-floor of something for once before it’s been done to death. So what I’m going to try, is taking apart SC as much as needed to learn how to use it, and while I’m at it, write some better tutorials. I’ll need to keep in mind the “running target” aspect of things, but hopefully the core concepts don’t change too much too frequently.

I’ve already started experimenting, followed the intro tutorials, checked out the example source. None of the examples provide sufficient complexity however. For example, the “photos” demo app doesn’t even let you blow up a photo to full size. (Which would illustrate how you use views, something I’ve been having trouble understanding.)

Time to create my own demo app!

The problem is only partly the HTML

After several more tries at mockups in Photoshop I’ve realized that my real problem with doing “design” isn’t a problem with HTML, but with photoshop. When I have the images to use, HTML can look really good fairly easily. But I can’t seem to generate “good enough” images in photoshop.

More than just curvy…

After trying a couple of mockups for the “more curvy” change ? I’ve realized that curves, useful as they are, aren’t as important and texture and lighting. These are the things my designs have been missing!

Gradients, embossing, shadows… Anything to keep the page from being blocks of solid color. These really make a design work, even if it is? based on square boxes.

I think what slows me down is my lack of 100% familiarity with all my options and tools in photoshop. Much like the “technical block” I get when I’m trying to write some music, I get bogged down in the use of the tool rather than the artistic process. I think the only way out is to spend tons of time with your tools and learn everything they can do for you so that when you get the idea “it should have texture like a tree trunk” you don’t have to stop and google “photoshop tree texture” and figure out what to do.?

That little paint pallet that painters use with all the colors on it? For us computer types that pallet is our knowledge of the tool and our library of available effects the tool has.

Guess I better start looking at photoshop brush and texture sites.

“more curvy”

When the client tells you that they want it to be “more curvy”, and suggests that you go find some inspiration by perhaps watching some girls or something….

Okay, more curvy it is. Why do websites have to be box-based? yrr..