Currently there are friends plugins for facebook, twitter, flickr,
foursquare and identica.
Sound familiar? Friends is actually a rewrite of the Gwibber service. It
began as an attempt to port gwibber-service to python3 and add testing, but
it quickly became obvious that it would be easier to start over. Credit for
the rewrite goes to Barry Warsaw and Robert Park, they rocked friends!
Impressively, Barry got the rewrite started by writing the test suite and using test
driven development, what a hero! Friends now has an extensive test suite and truly
beautiful code.
The service provides a Dee.SharedModel that contains the aggregated feed
from all of your enabled accounts. Any application can connect to this
model and provide a user interface to display the feed. You can create
filtered models off that shared model to sort or limit the results to specific
accounts, types, etc. Your application never actually talks directly to the
web API provided by the social network, it would just interact with Friends.
This Dee model is currently used in the Friends lens, People lens and Gwibber.
The Friends service also provides APIs for sharing images, posting status
updates, replies, liking posts, retweet, contact sync, etc.
GObject APIs are provided by libfriends, including vala and GIR bindings (plus some GTK widgets). There is also a QML plugin, qml-friends.
All the packages are available in universe for raring, and for quantal in the super-friends PPA.
Here’s an example using Friends from QML posting a status update:
import QtQuick 2.0
import Ubuntu.Components 0.1
import Friends 0.1
MainView {
applicationName: "poster"
width: units.gu(50)
height: units.gu(20)
FriendsDispatcher {
id: friends
// use this to check if the send was successfull
onSendComplete: {
if (success) {
activitySpinner.visible = false;
entry.text = "";
console.log ("Send completed successfully");
} else {
activitySpinner.visible = false;
console.log ("Send failed: " + errorMessage);
}
}
}
Column {
anchors.centerIn: parent
width: units.gu(40)
spacing: units.gu(2)
TextArea {
id: entry
objectName: "entry"
anchors {
left: parent.left
leftMargin: units.gu(1)
right: sendButton.left
rightMargin: units.gu(1)
bottomMargin: units.gu(1.5)
}
focus: true
font.pixelSize: FontUtils.sizeToPixels("medium")
font.family: "Ubuntu"
// send message if return was pressed
Keys.onReturnPressed: sendButton.clicked(null)
Keys.onEscapePressed: text = ""
height: units.gu(4)
placeholderText: i18n.tr("Compose")
autoSize: true
maximumLineCount: 0
ActivityIndicator {
id: activitySpinner
objectName: "activitySpinner"
anchors.centerIn: entry
visible: false
running: visible
}
}
Button {
id: sendButton
objectName: "sendButton"
anchors {
right: parent.right
rightMargin: units.gu(1)
left: entry.right
bottom: entry.bottom
}
width: units.gu(9)
height: units.gu(4)
color: "#dd4814"
text: i18n.tr("Send")
onClicked: {
console.log ("Post: " + entry.text);
activitySpinner.visible = true
friends.sendAsync(entry.text);
}
}
}
}
]]>I have a Yamaha TTR-250, and we had gotten a PW50 for Kaden (age 4) and CRF50 clone for Drew (age 7). Of course Ashlyn (age 9) couldn’t possible let her brothers do anything without her, so she has been tagging along and riding Drew’s 50 every chance she could. She is a older and a little taller than Drew, I figured I should look for something a little more advanced for her. Drew’s bike has an automatic clutch, so next step up would be a manual clutch.
After a couple months of watching for the right bike on craigslist, I found just what I was looking for.
KC Motorsports (honda clone) 70cc motocross style dirt bike, looked a bit rough but in decent shape.
What did it have? Motocross style rear swing arm, disc brakes, 70 cc engine with manual clutch.
The frame had a little rust and the seat was nothing more than the plastic seat frame wrapped in tape. The engine ran fine, but needed a tune up and a little TLC. The rear brakes didn’t work, probably just a bad master cylinder.
The bike has plenty of potential, it really only needs a little work to get it out tearing up the trails. I’m sure we’ll pass it down to her brothers when she out grows it, so I don’t mind putting a bit more work into it. So lets trick it out and make it look great!
So far I’ve replaced the rear brake line, changed the oil, replaced the seat, and the plastics. The original plastics that were on Drew’s 50 when he got it (replaced with green ones) are in great shape still, and much better than what was on this 70. Not as flashy looking, we’ll get her a whole new set of plastics and decals. She is looking for something pink, but the boys want her to do black with skulls. I suspect she won’t be aiming to please her brothers.
This is enough to get her out riding and have some fun it. I’ve given her a quick lesson on using the clutch and she got in a little practice in the back yard. Next weekend we’ll take it to NC Outdoor Adventures and we’ll see if Drew’s 50 can hang with her on the trails.
This winter I am hoping to completely tear it down and make it really shine:
I’ve posted the concepts on the wiki, please check them out and provide some feedback.
Thanks!
]]>
Ubuntu includes a social networking desktop service, Gwibber. Gwibber isn’t new to Ubuntu, it has been included for quite a while now. The intent isn’t just to provide a twitter or facebook client, but it is to provide a means for you to interact with your favorite social networks.
Gwibber does include a client application that aggregates the social networking sites you love to use, into one convenient place as well as allow you to post to multiple accounts simultaneously.
For 11.10, the Gwibber client received a complete face lift, in fact a complete re-write. The previous version had many great features, but ended up being quite limiting when we wanted to improve the overall user experience.
With the new Gwibber client, there aren’t really many new “features” however it is important to note not all previous features made it in. The most notable missing feature is the multi-column view, we’ll work hard to make sure it returns in Gwibber 3.4 in Ubuntu 12.04.
Now lets talk a bit about other ways you can use your favorite social networking services from Ubuntu.
Update Status Poster
Plans for Gwibber 3.4 (Ubuntu 12.04)
Do you want to help?
We need developers, designers, bug triage and documentation writers. For example we have a great user guide the Vancouver loco wrote, however it needs to be updated to match the current version of Gwibber and converted to a format we can include in the help viewer. We also want a new logo and some design help figuring out how Google + circles can best fit into Gwibber.
If you are interested in helping in any way, please join us in #gwibber on Freenode.
]]>This is a very simple addition that looks nice and adds useful information where it is easily visible without having to focus the application. This is done using the new Launcher API in libunity.
Using this simple API, I added the unseen message count to the Unity launcher in xchat-indicator. We’ll get similar support in empathy and evolution soon. The API currently includes support for adding a count, progress bar, and quicklists.
If you want to try it out in xchat or xchat-gnome, packages are available in Natty. Simply install xchat-gnome-indicator for xchat-gnome or xchat-indicator for xchat and enable the message indicator plug-in in the preferences. You will get message notifications in the messaging menu as well as the count in the Unity launcher.
]]>I have been desperately attempting to contact anyone from facebook to help figure out the best way to solve the problem and have been mostly ignored. I did get one reply from their developer relations stating that they don’t “support embedding video content in our website at this time”. Clearly they didn’t even read my email
I understand their need for allocations and to throttle as needed, however the numbers really don’t add up. They are really skewed, there is one API request that we make which is way over the allocation, but the others are barely even on the chart.
Facebook just announced “Operation Developer Love” where they state they will stop ignoring developers and triage bugs. Please help us get to the bottom of this by voting on this bug.
]]>Enough with the feel good stuff… What do I “really” do?
My role with Ubuntu is described as an Integration Engineer, what the heck does that mean? Glad you asked, I work on the Ubuntu Desktop team, to help integrate the amazing work going on in the Design, Desktop Experience, and Ubuntu One teams into Ubuntu. I help package their software, distribute updates, and advise and assist with design/architecture as it applies to how the software will be consumed by the user. I care very much about how new features will affect existing and new users and how they will discover the new features.
As you can probably imagine, this is a lot of fun for someone like me. I get to play around with new stuff that isn’t ready for the distro yet, helping out with testing and figuring out how it impacts our users. Being a naturally born tinkerer, this is simply an awesome experience for me.
I also drive the Social from the start initiative in Ubuntu, trying to bring social experiences closer to the desktop, making the integration of their daily computer usage and their social life feel more natural. I have very strong beliefs about web technologies and experiences, buy me a beer sometime and I can rant for a while. Long story short, to provide the best possible experiences we need to remove the need to use the browser. I don’t hate the browser, we can’t live without it. But the best way to interact with your friends on social networks needs to be more contextual. For example, you see a friend posted some new photos in an album. You should be able to view that album in your local photo album viewer, as well as tag friends and comment on photos. Why not do it in the browser you ask?
Trying to make this possible, I spend as much time as I can contributing to Gwibber, trying to generalise as much as I can to make it a desktop service that can be easily used by any application. Gwibber is a natural fit for this, since it aggregates multiple services, which is key to pulling this all together as a central service to handle this for the user. Gwibber is also a great upstream project to contribute to, lead by the always awesome Ryan Paul. He’s very open to my ideas, and easy to work with. At the beginning of each development cycle I get to brainstorm ideas with him and figure out how I can best contribute to making the road map a reality.
For someone like me, it is pretty easy to have fuzzy lines between what I do during my day job and what I do just for fun. In the evenings or over weekends, when I am not off hanging out with the family, I usually end up hacking on Gwibber or libgwibber for fun.
]]>A brief introduction to libgwibber, a library (C, vala, mono, and python) for using the Gwibber Service as well as provide some GTK widgets to easily embed into existing GTK applications. Bindings for as many languages as possible was very important to me, I really want to make it as easy as possible for any desktop application to use Gwibber as a desktop service.
The API currently provides access to the common things an application developer might care about:
I just finished porting the MeMenu from the Ayatana project to use libgwibber, which will be in the next release.
So far libgwibber-gtk includes just one widget, a posting entry. This widget includes:
Some examples of the Gwibber entry widget can already be found embedded in the Ubuntu Software Center and the Ubuntu One Music Store plugin in rhythmbox.
Other widgets I hope to add in the future include:
I would love suggestions for these or others, please let me know!
entry-c.c
To build entry-c.c:
gcc `pkg-config --cflags gwibber-gtk` entry-c.c `pkg-config --libs gwibber-gtk` -o entry-c
entry-vala.vala
To build entry-vala.vala:
valac --pkg gtk+-2.0 --pkg gwibber --pkg gwibber-gtk entry-vala.vala
entry-mono.cs
To build entry-mono.cs
gmcs -target:exe -out:entry.exe -pkg:gwibber-gtk-sharp-0.0 entry-mono.cs
entry-python.py
Nothing to build, so just run it with:
python entry-python.py
Here are some examples of using libgwibber with python and gobject introspection:
# Import Gwibber using introspection from gi.repository import Gwibber
# Get a service object service = Gwibber.Service()
# Get the current Gwibber version version = service.version()
# Make the Gwibber service refresh service.refresh()
# Post a status update to all your enabled accounts service.send_message("Something very interesting here, blah, blah, blah")
Shotwell and F-Spot: Browse online photos from your social networks from right inside you existing photo library tool. Including the ability to comment, tag, like and share.
gnome-utils: Add image upload support to gnome-screenshot
Evolution: Display the last status update from a contact when viewing an email or browsing contacts.
GTG: Status updates when tasks are complete
I am generating gtk-doc docs for libgwibber, but they aren’t very useful yet. libgwibber is written in vala and I haven’t figured out a way to get docstrings to pass from vala to the generated C. If anyone knows how to do that, please let me know.
Hopefully people find libgwibber useful, please let me know if you have suggestions, bug reports, or want to contribute!
]]>When I started working on this, I wanted to make sure it was a standalone plugin that didn’t need to be built inline with xchat sources and didn’t require changes to xchat. In the process I ran accross a couple pieces of the XChat plugin API that hadn’t been implemented in xchat-gnome yet. This meant of course I needed to patch xchat-gnome, and send those patches upstream.
Both of these were trivial changes to xchat-gnome, and I didnt expect any problem getting them accepted. I had to implement the “GUI FOCUS” command which has been merged already (bug). And I had implement the win_ptr argument to xchat_get_info, which lets the plugin get a pointer to the GtkWindow (bug).
Overall I am very impressed with the plugin API for XChat, it is really awesome to be able to get access to the GtkWindow.
If you are running Lucid or Karmic, you can install it from from my xchat-gnome PPA:
sudo add-apt-repository ppa:ken-vandine/xchat-gnome
sudo apt-get update
sudo apt-get install xchat-gnome-indicator
If you use xchat instead of xchat-gnome, just change the package name in that last command:
sudo apt-get install xchat-indicator
To get the source, file bug reports or feature requests, check out the project page on launchpad.
]]>I think the most interesting thing for me was Telepathy. The telepathy sessions were very impressive, and I spent some great time with the awesome team at Collabora, keep up the great work! I’ll just say it… tubes just make me drool, so much potential to be tapped into. Hopefully after this week, more people are inspired to go out and create amazing stuff that uses telepathy.
Zeitgeist really interests me as well, I have been wanting an easier way for users to interact with their data. Personally I think all interaction with data should be contextual, present the data to the user based on what they most likely want. I can’t wait to see Zeitgeist become integrated in the desktop and really start to blow the socks off of our users.
GNOME Shell is certainly interesting, I am very excited to see people trying to really change they way the desktop behaves. Lets not be afraid to shake things up a bit. However, I am not sold on it yet though. I think there are many issues that still need to be worked out, can’t imagine it can be designed properly and implemented in time for 2.28. I know it won’t be default in 2.28, but I think some of the basic work flow stuff needs to be nailed down before it can be released. It really seems far from that now. It will be exciting to watch it evolve and see how it ends up.
Last but certainly not least, CouchDB. There was some cool demos showing live bookmark syncing in firefox as well as contacts shared between both GNOME and KDE applications (evolution and akonadi). Using CouchDB as a common desktop database for storing configuration and application data makes it very easy to synchronise that data between multiple computers. Just imagine having the same bookmarks, contacts, photos, music, etc all shared between all your computers automatically.
Of course there were plenty of great parties and hacking sessions. The Igalia and Collabora parties were a blast, and two nights we spent hacking on stuff in the hacking room all night. Who needs sleep?
]]>