Skip navigation.

My Opera News

Behind the scenes at My Opera

Posts tagged with "RELEASE"

Dragonfruit release

, ,

Yesterday we released a new version of My Opera, codenamed "Dragonfruit". Each of the important new features in the release will be explained in detail in the community blog. This is the detailed changeset for Dragonfruit:

  • Add new "phototagging" feature to the photo albums. See the post in the community blog for more details.
  • Add new "Customize Design" functionality (see "My Page" -> "Design" -> "Customize your design"). It allows you to customize your page background and header without knowing CSS. Note that you can't customize your page if you use the default theme! See the post in the community blog for more details.
  • New full-screen slideshow feature for photo albums.
  • Improvements in social network integration: now you have the possibility of sharing your blog posts automatically on Facebook. We also fixed some bugs.
  • New autocomplete feature when sending PMs: just start writing the username of a friend, and a drop-down will appear with possible completions.
  • Add a new cool feature to the friend invite page and the messages page: you can now select a range of messages by clicking the checkbox for the first in the range, then Shift-clicking the checkbox for the last in the range.
  • Add a "Accept all friend requests" button.
  • Fixed a problem with "Save draft" that would change publication dates for blog posts.
  • Add Twingly ping support for blog posts.
  • Publish blog updates on other social networks when blogging via MMS.
  • Photo ratings are now shown to the owner.
  • Fixed an issue with multiple choice answers in polls and the preview function.
  • Now attached images in forums link to the original.
  • Other small fixes and tweaks to the forums.
  • Small fixes for the Link interface, particularly for notes and Mini/Mobile.
  • Add a date selection widget to the events/countdowns, no more typing dates by hand. You'll need a browser supporting the "date" input type, such as Opera, to see it.
  • Fix some issues with avatar resizing. Some issues still pending, currently looking at them. If you have concrete issues that are not fixed, please add a comment with a link to the original image.
  • Small bug fixes for the wallpapers section.
  • OEmbed bug fix: property "provider_name" is now correctly named (it used to be "provider").


And of course, a bunch of small fixes, tweaks and improvements everywhere in the site.

EDIT: I forgot to mention improvements in social network integration. Added now.

Opera Unite release day

, , , ...

Tuesday 16th of June was a special day for My Opera too.

Opera Unite was released at 09:00 CEST, and just after that, the amount of traffic and visitors to My Opera increased quickly, to reach the highest peak around 18:00 UTC.

This was also the highest peak ever reached for My Opera. On that day, we finally broke the 2 million page views per day, that sums up to more than 100M hits and 600,000 unique visitors just that day.

We're very happy about this. Yes, the site was not completely usable, and sometimes it was serving pages very slowly, but still we managed to keep it running. We hacked together some quick and dirty fixes to achieve this. Some of those hacks have been removed now, and we're working on applying them permanently to the site.

For the curious/interested, I'm referring to what we call the "User" module, that provides most of the user-related information. When you open a page on My Opera, we call the user module at least for:
  • the visiting user (you), and
  • the user "owner" of the page (the my.opera.com/<this_bit_here>)


Not a case that this is the most called module throughout the whole web site, so we want to optimize it and make it really fast, ideally around a few milliseconds.

Here's a few munin charts, of the database connections (this is a weekly chart, so look around the "16"):



And of one of our backends, with a rough timeline of what happened:



Of course, there's still a lot of work to do, and we know which are the slower parts of the site. That might change while the community grows bigger and bigger every day. We will keep up. :-)

New backend features in Banana

, , ,

The Banana release has been out for 2 weeks now. It seems to have been one of the happiest upgrades that we've ever had in a while. Not that it's without bugs, of course, but...

EspenAO already told you about some of the changes that went into Banana.

We'd like to tell you about some other stuff, more from the "engine-room".

Captcha

We have a brand new captcha module, based on ReCaptcha. This took a while to make, because we built a generic Captcha module, that will allow us to use any captcha system out there if we need to switch. We find ReCaptcha very good so far. Some people of course disagree, but the old "string-only" captcha was far too easy to break, and our community/spam moderators had a hard time cleaning up the spam at times.

Legitimate users shouldn't have any big problem with it. In any case, if you're worried about comments in your blog, invite people to join My Opera, so they won't see any captcha anymore :-)

New static server

New users that upload their avatar or profile picture will probably notice (or probably not, if things work correctly) that their new picture is now served from http://static02.myopera.com. Now we have in fact 2 static servers, static01 and static02.

This is the first successful partitioning experiment on MyOpera. This means that some part of our users will see their pictures being served from static01.myopera.com, while others, tipically new users, will go to static02.myopera.com.

This is made possible by our Storage classes, that allow us to move users content around without too much work.

New Javascript framework

To modernize and improve the usability of My Opera, we officially adopted the YUI framework after carefully evaluating several available js frameworks out there. The last two contenders were jQuery and YUI. We chose YUI for several reasons, but they were very close as per speed, features and overall quality.

We were already using YUI in the past, but it wasn't really used that much, and it was an older version anyway. Now we also built a custom js library that "wraps" around YUI, so we don't use it directly, but we access its core functionality with our functions. An example is the new blog import tool. Example:


// JavaScript for the Yahoo 360 blog import page (/community/import/)
O.load_framework_dependencies(
    ['connection','selector'],
    init
);

function init() {
    O.add_event(
        'form[name="blog-import"]',
        'submit',
        blog_import
    );
}

// Form submit handler. Makes the ajax call to the Y360 blog preview script
function blog_import(e) {
    O.prevent_default(e);      // avoid double posting
    O.show('#spinner');
    // ...
    O.ajax(
        form.action,
        {
            success: show_preview,
            failure: preview_failed
        },
        data,
        {method: 'POST'}
    );
}

It allows us to write very clean js code, and tries to reasonably decouple the YUI libraries from our own code. O. stands for Opera library.
O.add_event() is the generic function that of course works for all browsers, to add a new event to the DOM.
O.ajax() is the XHR ajax wrapper, and so on...

This abstraction will also allow us, if needed, to use parts of different frameworks very easily, and even switch to a different framework in the future. But we might not want to do that, I hope.

More stuff

There is new exciting stuff already out that we can't talk about, because it has to do with new features we have right now in our development version of My Opera, but they will be out probably with next release.

Markup changes

, ,

Later this week we are planning to release a new batch of updates for My Opera. The updates contains some small HTML changes that might affect you if you have written your own custom CSS.

1. Changes have been made to the "view photo" page.

New buttons and image navigation have been added inside the #frame4 div. Default css for this is included for all designs. The star ratings div have also been moved below the photo.

HTML preview:

<p id="imgbtn">
<a href="#"><span>Share</span></a>
<a href="#"><span>Zoom</span></a>
</p>

<div id="imgnav">
<div>
<a href="#"><img src="#" width="44" height="29" alt="Previous"></a> 
Image x of x
<a href="#"><img src="#" width="44" height="29" alt="Next"></a>
</div>
</div>

2. Changes have been made to the comments markup.

There's a few changes to the comments markup. The new version looks like this (every second comment is called comment1 and comment2, just like before). Active users avatar have also been added to the "write a comment" form.

HTML preview:

<div class="comment1">
<div class="avatar"><a href="#"><img src="#" alt=""></a></div>
<p class="comment-by"><b><a href="#">username</a></b> <span class="comment-date"><a href="#">#</a> date</span></p>
<div class="text">text</div>
</div>

3. Avatar markup is standardized to having the class name on the div.

HTML preview:

<div class="avatar"><a href="#"><img src="#" alt=""></a></div>

Status of sidebar, friends and other stuff...

, , ,

The Apricot release is now stabilized, after a few days of problems here and there.

The good thing is that we learned something more. The bad thing is that it took us a couple of days to realize what the real problem was.

I always like to say that My Opera becomes stronger and faster only after some "crisis" moments. It's those performance/stability/whatever problems that demand highest attention and you have to do something to fix them, no matter what. So, whatever doesn't kill you, it makes you stronger. :-)

Initially, we thought the problems were in the new friends system code. After careful inspection and partial rewrite of both Sidebar and Friends components, it became evident that the problem had another cause. As many other sites, we use memcached on several machines. It acts as a distributed cache store that makes the site faster and able to serve more requests with the same hardware resources.

Before we started the emergency rewrite of the Sidebar module, we decided to take a closer look at the class that was handling the memcached connections and queries. What we found out (part of what My Opera is today is still legacy stuff for us...) is that this class was issuing a new connection to our memcached server each and every time we queried some data. This is obviously not optimal, so we decided to keep persistent connections to the servers.

As of now, we restored all the functionality in Sidebar and Friends. Sidebar and Friends data is now present on much more pages than before, and that means more backend power needed to serve the same pageviews. We also have a lot more features and queries to the database, but still we're able to cope with the traffic, which is btw quickly increasing.

The Sidebar in particular was broken because when we introduced caching for it, it happened that the same (cached) version of the Sidebar content was used for the /albums/ and for the /blog/ page, which is completely wrong. Now we keep two separate copies because they can, and will, be different. The Sidebar content is also kept in the cache for 30 minutes at most, unless you change your sidebar settings. The recent visitors list didn't update because of this caching. Now everything should be back to normal.
We will probably make sure that your sidebar is updated when you write a new blog post or when there's a new comment, etc... For now this is just planned...

In the meanwhile, our monitoring team (LOL) noticed that at peak time and at some random moments in the day, the site slows down for a couple of minutes, and then everything is back to normal. We're working to solve this by optimizing the code even more. Without breaking anything, if possible... :-)

Big surprises ahead... And you don't know the super-secret feature yet... :-)

Sidebar and friends

, , , ...

Many of you noticed problems in the sidebar and in the friends pages (or friends in the sidebar) since "Apricot" was released.

This is the dev blog, so let's make a step backward, and then try to explain what happened. Most of the My Opera pages are "DML pages".

DML Pages

The DML concept was probably invented in the first big rewrite of My Opera, around 2002-2003. It basically consists in a XML template very similar to an HTML page. Here's a stripped down version of the My Opera homepage:

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//Opera//DML//EN" "/DTD/dml.dtd">
<?xml-stylesheet type="text/xsl" href="/xsl/community/home.xsl"?>
<html>
<head>
<title<Share your photos, blog and meet friends</title>
...
<body>

  <definemenu>
    <selected>home</selected>
    <page>home</page>
  </definemenu>

  <include module="XWA::User"/>
  ...
  <include module="XWA::XMLProd::MemberCount" />
  <include module="MyOpera:: DML::LatestActivities" />
  <include module="MyOpera:: DML::CommunityNews" var="numposts=3" />

  </body>
</html>

This DML document is then processed by one of the core modules of My Opera, and all the include directives are expanded. The final document is then processed with the specified XSLT stylesheet.

This system has probably some drawbacks, but allows the front-end developers, if they know XSLT, to include backend modules and build pages with whatever dynamic content they want. We have a long list of DML modules (the included modules, like MyOpera:: DML::LatestActivities).
That means that you can put the latest activities data stream wherever you want, in any page on My Opera.

Heavy DML modules

Some of the heaviest modules, according to our performance profiling, are:

  • XWA::XMLProd::User::Sidebar (awful name, and awful code) it's the slowest and heaviest of all, and of course, provides each user the sidebar content
  • XWA::User::Friends, provides your friends data, names, pictures, etc...
  • XWA::User, contains your own data, or the current page owner (for blogs, etc) data.
  • XWA::User::Journal, builds a blog post page data.

This is why when we have server-side problems, sometimes you see messages like: "XWA::User::Friends died..." :-)

When Apricot went live, it was fine for 1/2 hours, then when we reached our peak traffic hour, everything was really slow and heavy on the servers. That's also a reason why it's difficult to avoid these problems by testing, because currently we have no way to reproduce the live systems traffic load. BTW, we're trying to get hardware to build a stress test cluster...

The Friends module

We traced this problem back to the Sidebar and Friends modules. As a first emergency measure, we disabled both modules and started analyzing their performance. Particularly, the Friends module was completely reworked for the new friends system that requires approval now. We found there was a new is_online() function that was found to be the really heavy part.
Even if the "online" check has been there for ages, it was reworked in a more modular way, and that caused also performance problems. Unfortunately, these problems only manifest clearly when thousands of concurrent requests are running...

Another source of problems was the fact that now the Sidebar and Friends modules have been added to many more pages than before, so they are invoked many more times on average. This is something we hadn't really realized before going live.

Current status

The Sidebar module has been partially rewritten to take advantage of caching. As many noticed, now your sidebar doesn't update immediately. Some users also reported that their latest visitors sidebar panel is not updating since the release. Of course, being Sidebar now cached, the visitors are not tracked for every request. We're working on this, and visitors will be restored soon.

About the Friends module, we will restore ASAP the "online" functionality as well. Just have a bit more patience. Other minor bugs will be addressed in the next days. In the meanwhile, we hope you appreciated all the new and improved features this Apricot release brought you.

We can has Apricots!

, ,

After a long wait, we have finally released "Apricot", the first My Opera release of 2009. In the original announcement you can see the more visible changes. A more complete list follows:


  • Brand new, beta, Flash-based photo uploader. You have to click on the "Switch to Flash uploader" button on the right to use it, and allows to select several pictures at once for upload. Please submit any problems you find.

  • New friend system, so that only people who you have "approved" can add you as friends.

  • Added as many as 9 new translations in this release. Now we have My Opera available in 17 languages!

  • Improved design and usability in photo albums.

  • New welcome page for people who has just signed up for a new account. Among others, it makes it easy and quick to specify your country, so you'll be able to find more people in the Members by country page.

  • My Opera buttons are now text based, which is better for accessibility and for translation.

  • Improvements in the skin section, especially for authors. Now you get suggestions for improvement when you upload a skin with commonly-made mistakes, and you can specify that your skin is for Opera 9.5 (ie. skin version 3).

  • Now blog posts and comments are checked for correct syntax before being sent. That will avoid some problems people have had with broken XML, which used to "break" their blogs.

  • We have also fixed some issues in Dev Opera, mostly related to profile editing.

  • We have started a documentation page for our public APIs. It's linked from the bottom of the page.

  • The order of the subscription items is now from newest to oldest, so it's easier to find your newest subscriptions.

  • When you make a comment on a blog, the page correctly "jumps" to it again.

  • Fixed a lot of bugs here and there, too many and too small to mention in detail.