hAvatar plugin

3 views
Skip to first unread message

Alper Çugun

unread,
Jan 21, 2008, 9:04:21 AM1/21/08
to diso-p...@googlegroups.com

Hey,

I've been following this space for a while and I just released a plugin called hAvatar here:

It's pretty tiny as it is, but it took some time and effort to get the details working properly. I saw the spec up on: http://factoryjoe.pbwiki.com/wp-openid-avatars

The spec says something about replacing or suggesting avatars, which I can see a vaguely interesting use case for. So when a user with a URL does not return a valid avatar image, you can click the default image and suggest your own alternative which is stored either in a local registry or in a distributed one.
The local case would be simple but I don't have a clue how the distributed case should work or how other avatar consumers should resolve between a series of alternative avatars for a person.

A subscription to the image does not seem interesting as we simply store a users URL and parse that for an image src. Caching should come to hKit sometime soon, so that won't be an issue, but a thorny question is whether we should resize the avatar image server side and cache the resized version. I don't see one popular use case and client side resizing is getting better anyway, so I'm not building anything for that right now.

So suggestions are welcome, and you are also welcome to take the code or concept and build something better.

Best,
-- 
Alper Çugun

Mobile: +31-6-24553306 * E-mail: em...@alper.nl
See my webpage and blogs at: http://www.alper.nl


Stephen Paul Weber

unread,
Jan 21, 2008, 9:20:34 AM1/21/08
to diso-p...@googlegroups.com
Heh, excellent, I think this is what some people thought I was trying
to accomplish with my avatar-from-url plugin. I'll add this and the
official gravatar plugin to AllAvatars next release.

--
- Stephen Paul Weber, Amateur Writer
<http://www.awriterz.org>

MSN/GTalk/Jabber: singp...@gmail.com
ICQ/AIM: 103332966
BLOG: http://singpolyma.net/

Pfefferle

unread,
Jan 21, 2008, 10:05:55 AM1/21/08
to DiSo Project
It would be also a good idea, to build something like the openid
delegate header for an hCard, for example

<link rel="hcard" href="http://example.org/user/me/home/myhcard.html" /
>

that makes it easier for people which have their hCard on a long url
http://example.org/user/me/home/myhcard.html, because the can use the
short url with the meta-tag.

or we could use the "author" tag defined in HTML 1.0

<link rel="author" title="hCard" href="http://example.org/user/me/home/
myhcard.html">

another possibility is, to use the pavatar style like

<link rel="vcard.photo" href="http://example.com/path/my-photo.png" />
> MSN/GTalk/Jabber: singpol...@gmail.com

Pfefferle

unread,
Jan 21, 2008, 10:47:35 AM1/21/08
to DiSo Project
Oh, and by the way, nice plugin, I will try it later...

On 21 Jan., 16:05, Pfefferle <pfeffe...@gmail.com> wrote:
> It would be also a good idea, to build something like the openid
> delegate header for an hCard, for example
>
> <link rel="hcard" href="http://example.org/user/me/home/myhcard.html" /
>
>
>
> that makes it easier for people which have their hCard on a long urlhttp://example.org/user/me/home/myhcard.html, because the can use the

Stephen Paul Weber

unread,
Jan 21, 2008, 1:47:03 PM1/21/08
to diso-p...@googlegroups.com
An hcard should either be on the main page (recommended) or referenced
with rel=me (works)

MSN/GTalk/Jabber: singp...@gmail.com

Chris Messina

unread,
Jan 21, 2008, 2:33:37 PM1/21/08
to diso-p...@googlegroups.com
+1 to rel-me.

I worry about all the different ways cropping up for referencing site
icons these days (i.e. the iPod Touch/iPhone custom icon). Seems like
a bad trend.

Chris

> > > > Alper �ugun


> > >
> > > > Mobile: +31-6-24553306 * E-mail: em...@alper.nl
> > > > See my webpage and blogs at:http://www.alper.nl
> > >
> > > --
> > > - Stephen Paul Weber, Amateur Writer
> > > <http://www.awriterz.org>
> > >
> > > MSN/GTalk/Jabber: singpol...@gmail.com
> > > ICQ/AIM: 103332966
> > > BLOG:http://singpolyma.net/
> >
> > >
> >
>
>
>
> --
> - Stephen Paul Weber, Amateur Writer
> <http://www.awriterz.org>
>
> MSN/GTalk/Jabber: singp...@gmail.com
>
> ICQ/AIM: 103332966
> BLOG: http://singpolyma.net/
>
> >
>

--
Chris Messina
Citizen-Participant &
Open Source Advocate-at-Large
Work: http://citizenagency.com
Blog: http://factoryjoe.com/blog
Cell: 412.225.1051
IM: factoryjoe
This email is: [ ] bloggable [X] ask first [ ] private

Pfefferle

unread,
Jan 21, 2008, 2:41:17 PM1/21/08
to DiSo Project
Yes, the WebClip Bookmark Icon made me think about something like
that. If you want to use all of these Icons, you have to add Pavatar,
Favicon, Webclip, ... to your header.

A Link to your hCard (vcard.photo or vcard.logo) would solve all these
Avatar/Image problems.

I posted something about that: http://notizblog.org/2008/01/21/hcard-delegation/
but its in german, perhaps you can use the google translater or I try
to write it in english.

On 21 Jan., 20:33, "Chris Messina" <chris.mess...@gmail.com> wrote:
> +1 to rel-me.
>
> I worry about all the different ways cropping up for referencing site
> icons these days (i.e. the iPod Touch/iPhone custom icon). Seems like
> a bad trend.
>
> Chris
>
> On Jan 21, 2008 10:47 AM, Stephen Paul Weber <singpol...@gmail.com> wrote:
>
>
>
> > An hcard should either be on the main page (recommended) or referenced
> > with rel=me (works)
>

David Recordon

unread,
Jan 21, 2008, 2:59:41 PM1/21/08
to diso-p...@googlegroups.com
Just out of scalability though, having a blog crawl rel-me
(potentially multiple off of the URL the commenter leaves) seems a bit
excessive. I think it is fine if some plugins do decide to follow rel-
me, but that a commenter won't be able to guarantee that every blog/
site they comment on will do it. There also is a race condition
between the person leaving a short comment and the site crawling 10
pages before finding the hCard.

Maybe one compromise would be when looking for hCards to only crawl
rel-me on the same domain?

--David

Steve Ivy

unread,
Jan 21, 2008, 3:04:18 PM1/21/08
to diso-p...@googlegroups.com
David,

Chris and I had this same discussion, more or less, a week ago. I
think it would be a "best practice" to limit rel-me spidering to a
couple hops in any direction. Meaning:

"site logging into" -> "commenter's url" -- rel=me --> "another site"

It's not something we can enforce, but if we document it and the
reasons for it (race conditions, etc) we might see some adoption.
Also, enforcing reciprocal rel=me links can help in limiting the
number if hops.

--Steve

--
Steve Ivy
http://redmonk.net // http://diso-project.org
This email is: [ ] bloggable [x] ask first [ ] private

Pfefferle

unread,
Jan 21, 2008, 3:05:29 PM1/21/08
to DiSo Project
Thats why I think rel="hcard.delegate me" is a better way, so the
crawler can differ between an openid (rel="openid.delegate me"). The
advantage of rel="me" is, you can choose the hCard you want and you
can separate posted hCards from your hCards.

On 21 Jan., 20:59, David Recordon <drecor...@sixapart.com> wrote:
> Just out of scalability though, having a blog crawl rel-me
> (potentially multiple off of the URL the commenter leaves) seems a bit
> excessive. I think it is fine if some plugins do decide to follow rel-
> me, but that a commenter won't be able to guarantee that every blog/
> site they comment on will do it. There also is a race condition
> between the person leaving a short comment and the site crawling 10
> pages before finding the hCard.
>
> Maybe one compromise would be when looking for hCards to only crawl
> rel-me on the same domain?
>
> --David
>
> On Jan 21, 2008, at 11:33 AM, Chris Messina wrote:
>
> > +1 to rel-me.
>
> > I worry about all the different ways cropping up for referencing site
> > icons these days (i.e. the iPod Touch/iPhone custom icon). Seems like
> > a bad trend.
>
> > Chris
>
> > On Jan 21, 2008 10:47 AM, Stephen Paul Weber <singpol...@gmail.com>
> > wrote:
> >> An hcard should either be on the main page (recommended) or
> >> referenced
> >> with rel=me (works)
>

Chris Messina

unread,
Jan 21, 2008, 3:12:44 PM1/21/08
to diso-p...@googlegroups.com
At the same time, I do think something like rel="avatar me" linked
from a vcard.photo or vcard.logo object would be a good way of
pointing to a larger version of an avatar.

So, primarily you'd look for photos embedded in hcards. If none are
found, perhaps search for rel~=me+avatar... I dunno. Obviously I'd
like to support efficient avatar discovery, but I think we should be
careful not to just invent a new series of conventions (like Pavatar)
when existing solutions haven't even been widely deployed.

Chris

Pfefferle

unread,
Jan 21, 2008, 3:19:13 PM1/21/08
to DiSo Project
If you talk about rel="me", do you differ between <link /> and <a />?

On 21 Jan., 21:12, "Chris Messina" <chris.mess...@gmail.com> wrote:
> At the same time, I do think something like rel="avatar me" linked
> from a vcard.photo or vcard.logo object would be a good way of
> pointing to a larger version of an avatar.
>
> So, primarily you'd look for photos embedded in hcards. If none are
> found, perhaps search for rel~=me+avatar... I dunno. Obviously I'd
> like to support efficient avatar discovery, but I think we should be
> careful not to just invent a new series of conventions (like Pavatar)
> when existing solutions haven't even been widely deployed.
>
> Chris
>
> On Jan 21, 2008 12:04 PM, Steve Ivy <steve...@gmail.com> wrote:
>
>
>
> > David,
>
> > Chris and I had this same discussion, more or less, a week ago. I
> > think it would be a "best practice" to limit rel-me spidering to a
> > couple hops in any direction. Meaning:
>
> > "site logging into" -> "commenter's url" -- rel=me --> "another site"
>
> > It's not something we can enforce, but if we document it and the
> > reasons for it (race conditions, etc) we might see some adoption.
> > Also, enforcing reciprocal rel=me links can help in limiting the
> > number if hops.
>
> > --Steve
>
> > On Jan 21, 2008 12:59 PM, David Recordon <drecor...@sixapart.com> wrote:
>
> > > Just out of scalability though, having a blog crawl rel-me
> > > (potentially multiple off of the URL the commenter leaves) seems a bit
> > > excessive. I think it is fine if some plugins do decide to follow rel-
> > > me, but that a commenter won't be able to guarantee that every blog/
> > > site they comment on will do it. There also is a race condition
> > > between the person leaving a short comment and the site crawling 10
> > > pages before finding the hCard.
>
> > > Maybe one compromise would be when looking for hCards to only crawl
> > > rel-me on the same domain?
>
> > > --David
>
> > > On Jan 21, 2008, at 11:33 AM, Chris Messina wrote:
>
> > > > +1 to rel-me.
>
> > > > I worry about all the different ways cropping up for referencing site
> > > > icons these days (i.e. the iPod Touch/iPhone custom icon). Seems like
> > > > a bad trend.
>
> > > > Chris
>
> > > > On Jan 21, 2008 10:47 AM, Stephen Paul Weber <singpol...@gmail.com>
> > > > wrote:
> > > >> An hcard should either be on the main page (recommended) or
> > > >> referenced
> > > >> with rel=me (works)
>
> > > > Chris Messina
> > > > Citizen-Participant &
> > > > Open Source Advocate-at-Large
> > > > Work:http://citizenagency.com
> > > > Blog:http://factoryjoe.com/blog
> > > > Cell: 412.225.1051
> > > > IM: factoryjoe
> > > > This email is: [ ] bloggable [X] ask first [ ] private
>
> > --
> > Steve Ivy
> >http://redmonk.net//http://diso-project.org

Chris Messina

unread,
Jan 21, 2008, 3:35:35 PM1/21/08
to diso-p...@googlegroups.com
I don't think so. I think rel-me should work whether you're talking
about anchors or links.

Chris

Pfefferle

unread,
Jan 21, 2008, 3:40:04 PM1/21/08
to DiSo Project
I personaly would prefer <link rel="me" /> because if you use a
microformated wordpress theme and xfn in your blogroll, there is too
much data to parse.

On 21 Jan., 21:35, "Chris Messina" <chris.mess...@gmail.com> wrote:
> I don't think so. I think rel-me should work whether you're talking
> about anchors or links.
>
> Chris
>

Stephen Paul Weber

unread,
Jan 21, 2008, 4:12:13 PM1/21/08
to diso-p...@googlegroups.com
One thing: it was being suggested we invent another new <link> tag to
point to hCards and I merely pointed out that rel=me is for exactly
that.

+1 to best practices indicating an hCard right on the main page

Stephen Paul Weber

unread,
Jan 21, 2008, 4:14:19 PM1/21/08
to diso-p...@googlegroups.com
+1 hcard.photo
Then maybe hcard.logo
I really don't see the need to go beyond that (except, as I said, for
maybe a certain depth of rel=me where appropriate)

Stephen Paul Weber

unread,
Jan 21, 2008, 4:15:26 PM1/21/08
to diso-p...@googlegroups.com
It can, although the microformats community looks down on <link> tags mostly

MSN/GTalk/Jabber: singp...@gmail.com

Stephen Paul Weber

unread,
Jan 21, 2008, 4:17:11 PM1/21/08
to diso-p...@googlegroups.com
You would never link to your delegated OpenID with rel=me... the whole
point of delegation is to hide that URL.

Besides, hcards are not meant to have their own page. They may not be
on the main page, but it makes little sense to say 'this is my hCard
page' when it's likely a lot of things and just has an hCard.

Besides, if you're using rel=me you're likely using hCard most of the time.

MSN/GTalk/Jabber: singp...@gmail.com

Pfefferle

unread,
Jan 21, 2008, 4:22:07 PM1/21/08
to DiSo Project
If you have a look at http://wordpress.org/extend/plugins/yadis/ then
you can see an example of using rel="me" in the delegate (but in the
case of myopenid, it doesn't matter because the public profile uses an
hCard).

But you are right, rel=me would be the best solution I think

On 21 Jan., 22:17, "Stephen Paul Weber" <singpol...@gmail.com> wrote:
> You would never link to your delegated OpenID with rel=me... the whole
> point of delegation is to hide that URL.
>
> Besides, hcards are not meant to have their own page. They may not be
> on the main page, but it makes little sense to say 'this is my hCard
> page' when it's likely a lot of things and just has an hCard.
>
> Besides, if you're using rel=me you're likely using hCard most of the time.
>

Pfefferle

unread,
Jan 21, 2008, 4:25:43 PM1/21/08
to DiSo Project
Something completely different... i tried the plugin together with my
hCard-Commenting plugin and I get a fatal error because both scripts
are using hKit.

if (!class_exists('hKit')) {
include_once(dirname(__FILE__) . '/hkit.class.php');
}

Using this, solves the problem.

Chris Messina

unread,
Jan 21, 2008, 4:41:41 PM1/21/08
to diso-p...@googlegroups.com
I think we can start with this and get a working demo going. We should
be somewhat lenient and pragmatic for the near term (since there are
many more avatars in the wild NOT marked up this way), but when it
comes to a more formal spec, I agree that we should rely on hcard
primarily, and then follow at most one hop to any rel-me link listed
in a page searching for other hcard avatars.

I believe that Twitter, M.agnolia and Flickr are all good examples of
how this data can be marked up and displayed, and if anyone links to
them with a rel-me link, we'd hit an avatar.

Chris

Stephen Paul Weber

unread,
Jan 21, 2008, 5:21:49 PM1/21/08
to diso-p...@googlegroups.com
Which is why diso-profile uses hCard as the only source for importing
avatars. My avatar_from_url plugin is a bit more greedy (as you said,
hCard is not so universal yet) -- of course, that's what solutions
like AllAvatars are about -- making it work wherever possible by
integrating all the plugins, but I digress...

On a related note, should diso-profile provide a template tag for
outputting the avatar it imports? I never bothered because AllAvatars
supports it internally, but not too many people are going to want to
use AllAvatars...

Pfefferle

unread,
Jan 21, 2008, 5:35:31 PM1/21/08
to DiSo Project
AllAvatars is devenitively a step in the right direction, but I think
its a bit too static... if anyone writes a new avatar plugin, you have
to edit your code, to implement the new functions... I think a better
way is to provide some kind of universal avatar api which all avatar
plugins could use.

On 21 Jan., 23:21, "Stephen Paul Weber" <singpol...@gmail.com> wrote:
> Which is why diso-profile uses hCard as the only source for importing
> avatars. My avatar_from_url plugin is a bit more greedy (as you said,
> hCard is not so universal yet) -- of course, that's what solutions
> like AllAvatars are about -- making it work wherever possible by
> integrating all the plugins, but I digress...
>
> On a related note, should diso-profile provide a template tag for
> outputting the avatar it imports? I never bothered because AllAvatars
> supports it internally, but not too many people are going to want to
> use AllAvatars...
>
> On Jan 21, 2008 4:41 PM, Chris Messina <chris.mess...@gmail.com> wrote:
>
> > I think we can start with this and get a working demo going. We should
> > be somewhat lenient and pragmatic for the near term (since there are
> > many more avatars in the wild NOT marked up this way), but when it
> > comes to a more formal spec, I agree that we should rely on hcard
> > primarily, and then follow at most one hop to any rel-me link listed
> > in a page searching for other hcard avatars.
>
> > I believe that Twitter, M.agnolia and Flickr are all good examples of
> > how this data can be marked up and displayed, and if anyone links to
> > them with a rel-me link, we'd hit an avatar.
>
> > Chris
>
> > On Jan 21, 2008 1:14 PM, Stephen Paul Weber <singpol...@gmail.com> wrote:
> > > +1 hcard.photo
> > > Then maybe hcard.logo
> > > I really don't see the need to go beyond that (except, as I said, for
> > > maybe a certain depth of rel=me where appropriate)
>
> > > On Jan 21, 2008 3:12 PM, Chris Messina <chris.mess...@gmail.com> wrote:
> > > > At the same time, I do think something like rel="avatar me" linked
> > > > from a vcard.photo or vcard.logo object would be a good way of
> > > > pointing to a larger version of an avatar.
>
> > > > So, primarily you'd look for photos embedded in hcards. If none are
> > > > found, perhaps search for rel~=me+avatar... I dunno. Obviously I'd
> > > > like to support efficient avatar discovery, but I think we should be
> > > > careful not to just invent a new series of conventions (like Pavatar)
> > > > when existing solutions haven't even been widely deployed.
>
> > > > Chris
>
> > > > On Jan 21, 2008 12:04 PM, Steve Ivy <steve...@gmail.com> wrote:
> > > > > David,
>
> > > > > Chris and I had this same discussion, more or less, a week ago. I
> > > > > think it would be a "best practice" to limit rel-me spidering to a
> > > > > couple hops in any direction. Meaning:
>
> > > > > "site logging into" -> "commenter's url" -- rel=me --> "another site"
>
> > > > > It's not something we can enforce, but if we document it and the
> > > > > reasons for it (race conditions, etc) we might see some adoption.
> > > > > Also, enforcing reciprocal rel=me links can help in limiting the
> > > > > number if hops.
>
> > > > > --Steve
>
> > > > > On Jan 21, 2008 12:59 PM, David Recordon <drecor...@sixapart.com> wrote:
>
> > > > > > Just out of scalability though, having a blog crawl rel-me
> > > > > > (potentially multiple off of the URL the commenter leaves) seems a bit
> > > > > > excessive. I think it is fine if some plugins do decide to follow rel-
> > > > > > me, but that a commenter won't be able to guarantee that every blog/
> > > > > > site they comment on will do it. There also is a race condition
> > > > > > between the person leaving a short comment and the site crawling 10
> > > > > > pages before finding the hCard.
>
> > > > > > Maybe one compromise would be when looking for hCards to only crawl
> > > > > > rel-me on the same domain?
>
> > > > > > --David
>
> > > > > > On Jan 21, 2008, at 11:33 AM, Chris Messina wrote:
>
> > > > > > > +1 to rel-me.
>
> > > > > > > I worry about all the different ways cropping up for referencing site
> > > > > > > icons these days (i.e. the iPod Touch/iPhone custom icon). Seems like
> > > > > > > a bad trend.
>
> > > > > > > Chris
>
> > > > > > > On Jan 21, 2008 10:47 AM, Stephen Paul Weber <singpol...@gmail.com>
> > > > > > > wrote:
> > > > > > >> An hcard should either be on the main page (recommended) or
> > > > > > >> referenced
> > > > > > >> with rel=me (works)
>
> > > > > > > Chris Messina
> > > > > > > Citizen-Participant &
> > > > > > > Open Source Advocate-at-Large
> > > > > > > Work:http://citizenagency.com
> > > > > > > Blog:http://factoryjoe.com/blog
> > > > > > > Cell: 412.225.1051
> > > > > > > IM: factoryjoe
> > > > > > > This email is: [ ] bloggable [X] ask first [ ] private
>
> > > > > --
> > > > > Steve Ivy
> > > > >http://redmonk.net//http://diso-project.org
> > > > > This email is: [ ] bloggable [x] ask first [ ] private
>
> > > > --
> > > > Chris Messina
> > > > Citizen-Participant &
> > > > Open Source Advocate-at-Large
> > > > Work:http://citizenagency.com
> > > > Blog:http://factoryjoe.com/blog
> > > > Cell: 412.225.1051
> > > > IM: factoryjoe
> > > > This email is: [ ] bloggable [X] ask first [ ] private
>
> > > --
> > > - Stephen Paul Weber, Amateur Writer
> > > <http://www.awriterz.org>
>
> > > MSN/GTalk/Jabber: singpol...@gmail.com
> > > ICQ/AIM: 103332966
> > > BLOG:http://singpolyma.net/
>
> > --
> > Chris Messina
> > Citizen-Participant &
> > Open Source Advocate-at-Large
> > Work:http://citizenagency.com
> > Blog:
>
> ...
>
> Erfahren Sie mehr »

Stephen Paul Weber

unread,
Jan 21, 2008, 5:47:03 PM1/21/08
to diso-p...@googlegroups.com
I've thought about that -- something along the lines of what my XRDS
plugin does, just haven't implemented it yet :)

MSN/GTalk/Jabber: singp...@gmail.com

Pfefferle

unread,
Jan 21, 2008, 5:51:07 PM1/21/08
to DiSo Project
Nice idea, if you have something finished, give me a note and I will
try it with hcard-commenting...

On 21 Jan., 23:47, "Stephen Paul Weber" <singpol...@gmail.com> wrote:
> I've thought about that -- something along the lines of what my XRDS
> plugin does, just haven't implemented it yet :)
>
> ...
>
> Erfahren Sie mehr »

Alper Çugun

unread,
Jan 22, 2008, 6:44:25 PM1/22/08
to diso-p...@googlegroups.com
On Jan 21, 2008, at 15:20 , Stephen Paul Weber wrote:
Heh, excellent, I think this is what some people thought I was trying
to accomplish with my avatar-from-url plugin.  I'll add this and the
official gravatar plugin to AllAvatars next release.

What's the homepage for AllAvatars (a quick Google didn't turn up anything)?

I just recently found this identikit plugin which also does similar things but is based mostly on gravatar/pavatar like solutions: http://www.john-noone.com/2006/10/08/identikit/ (unfortunately a lot of it is in French).

Take anything, and I'm curious to the release.

Stephen Paul Weber

unread,
Jan 22, 2008, 8:52:36 PM1/22/08
to diso-p...@googlegroups.com
AllAvatars <http://singpolyma.net/plugins/allavatars/> now supports
the 'official' gravatar plugin. It also has a new API for plugins to
register themselves, documented on the homepage.

Photo data in the user's profile always overrides anything else.

--

Alper Çugun

unread,
Jan 23, 2008, 4:45:07 AM1/23/08
to diso-p...@googlegroups.com
On Jan 21, 2008, at 16:05 , Pfefferle wrote:
It would be also a good idea, to build something like the openid
delegate header for an hCard, for example

<link rel="hcard" href="http://example.org/user/me/home/myhcard.html" /

but it is mostly inconclusive. Once there is something vaguely definitive, I'll be sure to implement it.

Pfefferle

unread,
Jan 23, 2008, 5:23:41 AM1/23/08
to DiSo Project
Thanks for the link

On 23 Jan., 10:45, Alper Çugun <al...@alper.nl> wrote:
> On Jan 21, 2008, at 16:05 , Pfefferle wrote:
>
> > It would be also a good idea, to build something like the openid
> > delegate header for an hCard, for example
>
> > <link rel="hcard" href="http://example.org/user/me/home/
> > myhcard.html" /
>
> There is some discussion about this on uf wiki:http://microformats.org/wiki/hcard-brainstorming-autodiscovery#vCard_...
Reply all
Reply to author
Forward
0 new messages