On the failure of tweets, RE: “TXTing”

One of the core failures of Twitter is that it’s based around a flawed idea. Text Messages. 140 characters. Shorten everything and use slang. Sure it’s become cute to try and manage your communications in 140 character bursts, but WHY? Holy flaming fig trees, it’s just not needed! I mean,? you may as well base your internet service around telegrams sent via morse code. The text message is an outdated idea, well past it’s prime. It may serve some historical purpose, much like Morse Code still does, but it is irrelevant to the future. Would twitter be as fun if you had to use all upper case, couldn’t use punctuation or non-alphanumeric characters, and had to say “STOP” at the end of each thought?
“TODAY WORK SUCKED STOP SOMEONE ATE MY LUNCH STOP HASHTAG FML STOP” is lacking in so many ways… Locking your service to the rules of an outdated and useless medium just doesn’t seem smart!

What you say? “It’s used my billions of people across the world! How can it be outdated and useless?”
They use it because they can. Simple as that. The cell phone companies provide it, including it’s outdated limitations, because it’s what you’re used to and what they can charge for. Never mind that it would be trivial to replace every SMS client in new phones with a Jabber (XMPP) app and install Jabber->SMS gateways to support legacy systems. (Okay, maybe not “trivial”, but you certainly see my point..) XMPP is a FAR better protocol by any standard. The vast majority of phones released on the market today would easily support this sort of change, “smart” phones especially. (You could even transfer seamlessly from your mobile device, to your computer, and back to your mobile device, without ever missing a message!!!)

Quick history lesson, if you need it. SMS, the “Short Message Service” operates on the control channel of your cell phone. This is a special data channel your phone uses to keep in contact with the towers and is always operational. This allows your SMS messages to get through even in the most dire of coverage areas, and even when your phone is in use, but is also what “limits” it to the 140 (actually 160) characters. Yes, I will concede that these are useful things about SMS that do make it stand out somewhat. I still thing we can design our way around it’s limitations though. However, there is no incentive to do so because even new “web 2.0” companies (like Twitter) are observing the limits of SMS and working within them! There’s nobody out there saying “hey, could there maybe be a better way?”

But my hatred of corporate greed and tyranny isn’t my only reason here! My love of language and clear communication weighs in rather heavily!

I am extraordinarily tired of slang and shortened “can I buy a vowel please Pat” words being used where they’re utterly unnecessary. And SMS is almost completely to blame for this change.
Now I know I sound like your college English teacher, railing against the evils of today’s youth… However, I think we can all get behind the idea that anyone who shortens “email” to “eml” in a non-space-constrained forum (in this case, facebook post) is a raving git. It’s completely and utterly unnecessary and the gross misuse of these sorts of shortenings obfuscates countless messages every day! (And by perpetuating mythical 140 character limit, Twitter perpetuates the cycle of social decay..)

Perhaps I just can’t help myself. I like to understand what people are talking about, and I very much like it when they understand what I am talking about. English has enough screwed up about it as-is, no need to intentionally make it worse.

Also, stick it to the man. That cell phone company is overcharging you out the ASS for those 140 characters, for no reason other than they really really like taking your money. Don’t fight the future. Evolve or die.

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.