|
|
|
Posted
1 day
ago
by
msujaws
A few days ago a new feature landed in Firefox Nightly that makes closing multiple tabs easier than it was before. I often find myself in situations where I have multiple tabs that I opened only to look at for short periods of time.
... [More]
Sometimes I reach this state while reading articles on Hacker News or looking at funny pictures on Reddit. At the end of looking at the tabs, it would be nice if Firefox had a way to close these ephemeral tabs so you can get back to your previous work quicker.
Well, Firefox now does! If you open lots of tabs from Reddit and then want to close all of the tabs to the right of Reddit, just right-click on the Reddit tab and choose “Close Tabs to the Right”. It’s easy and quick!
Why “close tabs to the right” and not “close tabs to the left”? When we open new tabs they appear on the end, and so naturally tabs that have a longer lifetime end up being promoted to the start-side of the bar. This leads us towards the situation where closing tabs “to the right” is a simple way of closing the ephemeral tabs.
Users who are using Firefox with a right-to-left locale such as Hebrew or Arabic should see the equivalent “Close Tabs to the Left” feature.
Huge thanks go out to Michael Brennan who contributed the patches and automated tests for this feature! Unless something drastic happens, this feature will find its way to Firefox Release in just over 12 weeks in Firefox 24.
Tagged: firefox, mozilla, planet-mozilla, usability [Less]
|
|
Posted
1 day
ago
by
nore...@blogger.com (Kim Moir)
When I started working at Mozilla, I didn't know Python very well. All of the code that drives our continuous integration is written in it so I've had a spent a lot of time becoming more proficient. I've taken a number of free self-study
... [More]
classes/tutorials that others might find useful getting up to speed with Python.
Google Python class - Two day class that describes how to manipulate strings, dictionaries, lists. File I/O, regular expressions and sorting algorithms. Class lectures that were recorded at a Google training event are available on youtube, and the exercises are pretty straightforward with a solution key to check your work. All the exercises are done using the Python installation on your local machine.
Code academy has a Python class. I did the exercises for the topics that weren't covered in the Google class, including list comprehensions, lambda expressions and OO in Python. The exercises are completed and validated on the website.
The best course I've taken so far has been the nine week Interactive Programming in Python class offered by Coursera. Coursera is a company that offers university courses for free. You receive a grade and certification of completion, but not an actual credit at the institution. The Python course I took is in conjunction with Rice University. For this course, you have to register for the course when it's run and complete the work each week. There are an hour or so of video lectures, a quiz or two and an assignment to complete for around 8-10 hours of work each week. After you submit your assignment, you're asked to review the work of five other students. This is how to scale marking assignments for the thousands of students enrolled in the class :-). The code for your assignments is written in the browser, on the CodeSkulptor website.
Syllabus for coursera courseEach week the assignment is to implement a different game which was a lot of fun. We also learned how to implement the calculations for velocity, reflection and collisions to make the objects in our games appear as a realistic game. The final project is to implement a version of the Asteroids game complete with missiles and exploding rocks. I've also never done much with a the UI aspects of programming in the past, so it was interesting to learn how to incorporate these elements. Screenshot of final asteroids gameThis iteration of the course is almost over and the next one starts in October. Essentially the course provides lots of time to practice writing code, which is the only path to getting better. I found the course to be really well organized, and the video lectures were succinct in getting to the point of the lecture. No profs going off on tangents about random subjects :-)
Mr. Releng also took this course at the same time I did as he is also using Python at work. I said to him one day that I certainly wouldn't wanted to have attended all my university courses online as I always liked to ask questions in class. With the pre-recorded lectures, the only way to ask questions is on the associated forums. He agreed, but said while this was probably not the future of university, it was certainly great for continuing education.
Other Python resources I looked at include http://www.learnpython.org/. The pyvideo website includes talks from many of the PyCon and related conferences here which are interesting to watch.
What resources did you use to learn Python? [Less]
|
|
Posted
1 day
ago
by
nore...@blogger.com (Kim Moir)
I was on the organizing committee for Releng 2013. This was the first time I've been involved in organizing a technical event. I thought my experiences might be useful to others in the same situation thus this blog entry:-) Reaching out
... [More]
to potential speakers Three of the people on our organizing committee were researchers. I was the only release engineer. My goal was to get as many release engineers as possible to submit talks and attend the workshop. I asked for suggestions from my coworkers and LinkedIn contacts to try to reach people that might be interested in submitting a talk. I also wrote to multiple release engineering oriented mailing lists and Google+ groups. I had a query for #relengcon and @relengcon mentions on Twitter. If people mentioned that the relengcon sounded interesting, I replied to them and suggested that they submit a talk. I also posted information about the workshop on several release engineering LinkedIn and meetup.com groups. It's often a good idea to contact the organizer of a group and ask them to send text crafted by the organizers to their members. Receiving a message from someone they already know lends some validity to the message, versus just another person adding to their inbox noise.
Carl and Gareth from Netflix talk about self-service build and deliveryAcademic vs. Industry Releng 2013 was a workshop under the larger ICSE academic conference. The submission process was much more formal than the industry conferences I've attended in the past. There were two types of submissions: a formal paper or an abstract for a talk. There were strict submission guidelines with respect to the format of the talk abstract. In contrast, the submission process for most industry conferences seems to be "submit a paragraph summarizing your talk into a form on web page". Very easy. The different approach stems from the fact that proceedings from academic conferences are usually published. Academics often need the promise of publication to secure funding to attend a conference.
Funding This workshop had effectively zero budget. ICSE workshops don't get any funding from the fees paid to the larger ISCE conference. Attendees had to pay registration fees to attend the workshop whether they had a talk accepted or not. Many industry conferences offer a reduced registration fee for speakers. Since this was a first time event, I really concentrated on encouraging people to submit talks and register for the event. Now that the event was a success, I would feel comfortable approaching a company and asking them to sponsor it so we could reduce speaker fees. We had some funding from a research institution for one of our keynote speakers. I reached out to Mozilla developer relations who provided some t-shirts, mugs and stickers. In the future, I'd also reach out to other companies for swag donations :-)
Recording of sessions The cost of hiring a company to record the talks was prohibitive given our lack of budget. Again, now that the first workshop was a success, this could be another item that could be sponsored.
Post-workshop dinner organization The OpenTable website is a great resource to see the availability of seating at of various restaurants in several US cities. It also links to their respective ratings. This was easy way to make reservations at restaurants for dinner, especially since none of the organizers live in the Bay area.
Image ©photographus, http://www.flickr.com/photos/misspixels/8480711076/in/photostream/ under Creative Commons by-nc-sa 2.0 Panel I had never moderated a panel before. I found this article was quite helpful on how to successfully moderate a panel. I spent quite a bit of time before the event thinking of panel questions and we also sought input from our attendees in a survey. As for participants on the panel, I reached out to release engineers who didn't present a talk but looked like they had a wealth of release engineering experience on their LinkedIn profiles. Sometimes diversity is just asking different people!
Speaker gifts We wanted to give speaker gifts to our fine keynote speakers. I was unsure what a typical speaker gift comprised so I asked on Twitter. The answers ranged from fancy pens, laptop bags, local bottles of wine and local cookbook. Another person suggested that the gift be something carried on the plane if the speaker wasn't local. In fact, they usually personalized the gift by presenter and shipped it to their home to avoid dealing with airline hassles regarding gifts. Release engineering is about building things. Bram suggested Lego as a speaker gift. I liked this idea a lot and added it as one of the items in the speaker gift bag.
In the end the workshop went pretty well. The most important thing was to get people who are passionate about release engineering in the same room. And that's where the interesting conversations begin and you make connections with people. That's what really matters in the end.
If you've been involved in organizing a technical event what advice do you have? [Less]
|
|
Posted
2 days
ago
by
flod
Note: this is a guest post from Iacopo Benesperi, a fellow Mozillian from the Italian community. This week-end took place in Mozilla’s Paris office the Summit 2013 planning assembly: a gathering of about 65 people from all around the world
... [More]
and representing all areas of the Mozilla project, with both paid staff and volunteers, aimed to plan and shape the next Summit, that will take place the first week-end of October in Bruxelles, Toronto and Santa Clara.
TL;DR: it’s been a great assembly. If we manage to accomplish at the next Summit half of the things we’ve discussed in this week-end, it will have been the best Mozilla event ever.
The aim of the assembly was not to define a schedule for the event and fix everything but to talk about which are the important topics that animate the Mozilla project these days, start to discuss them and shape them in a way so that we can come out with a good format for the Summit to address them and try to give and propose solutions for them. To do this, all the planning committee has taken interviews to fellow Mozillians in the last month to have a wider view of which is the temperature of the project in these days and act as a representative for the comments expressed.
I went to Paris without a clear idea of what we would have accomplished there, but I’m impressed with the result we had. First of all, this assembly was facilitated by people of unconference.net, who proposed a peculiar way to proceed with it. I was a bit skeptic with the method proposed, but it turned out that some of their methods are really great (like unpanel) and we will definitely adopt them for the next Summit, while some others still look like rubbish (I may still be proved wrong). The second important fact is that we talked little about technology and a lot about Mozilla, its community, its communication (internal and external) and the interactions between its components and people. On one hand, as Gandalf pointed out, this is a sign that we trust implicitly our technology and the fact that it will be discussed at the Summit, because this is a big portion of what Mozilla is about. On the other hand, it’s a sign that there’s a general awareness, not only among community members but also (finally) among employees and paid staff and board of directors that we have communication problems between the different parts of the projects and especially between paid staff and volunteers, and the time is now mature to address and try to solve them. What I’m talking about is not only communication to get things done but also communication related to the decision-making process.
So, it will be interesting to experiment discussions around different time-zones and locations. I will probably post more about the assembly and the planning for the Summit in the next days, when ideas and thoughts will have settled down a bit and I’ll have had the time to read all the ideas and documentation we produced during this two days. What I felt important to communicate immediately is the fact that the next Summit will be a wonderful occasion to talk not only about our technologies but also about who we are, what we want to do and where we want to go. It will be an occasion for the community to teach and mentor the newest community members and more importantly all the new employees to let them understand and feel the power and importance of our community and it will be, in general, an occasion to have our voice finally be heard and taken into consideration not only in the tasks at hand, but in building the new policies and guidelines that will drive all the project in the future.
I’m sure we’ll try, in the next months, to provide some initial information and documentation about what have been discussed and decided so far so that you can arrive at the Summit prepared to give your contribution to the conversation, so that we can take the most out of the Summit and make it really matter in our future.
As I said at the beginning: if we manage to discuss and propose solutions to half of the problems and concerns raised during this two days, we will have had the best Mozilla event ever; one that will have strengthened and made our project more mature. [Less]
|
|
Posted
2 days
ago
by
Verdi
A while back I wrote about how much better some of our articles perform when they are linked to from some external place (in context of course). Here’s another example. Back on May 14th, we released Firefox 21 with a new feature called the Firefox
... [More]
Health Report. The FHR includes a graph of startup times. If you have some particularly long startup times we display a tip that suggests you reset Firefox and links to the help article on how to do that.
Before Firefox 21 and the health report, the reset article was getting rated helpful 60% – 65% of the time. Now that we’re showing the article to thousands of people each day who have a Firefox issue that the reset might be able to fix, the article is being rated helpful upwards of 82%. That’s huge — about a 25% improvement. [Less]
|
|
Posted
3 days
ago
by
Doug Belshaw
This week I’ve been: Presenting and running workshops on Open Badges at a CRA seminar (Monday, Birmingham). Meeting lots of people/organisations at the Mozilla London office to explore ways they can use badges. People like Creative
... [More]
Skillset, OCR, Livity and Inspir.ed. Booking travel for the coming weeks. Running a webinar on Open Badges for Learning Pool (slides here) Ordering more business cards. The other ones didn’t turn up and, as 20th-century as they feel, I’m often in a position where I need to give them out. Catching up with the audio from the Web Literacy Standard community call, hosted by Carla. Hosting the Open Badges community call for the first time for a while. Talking some more and reaching out to various people within Mozilla about Firecloud. Writing a post for DMLcentral about the NSA, Mozilla and privacy that I hope will go live on Monday. Claiming back expenses for speaking at recent events. Meeting with my newest colleague Meg Cole via Skype. Getting some training on interviews with the media from Erica Sackin. Participating in a great day of networking, sharing and planning for a new city-wide learning co-operative (potentially powered by badges!) hosted by the University of Salford.
This week I’ve done loads of stuff myself, but my colleagues have been even busier. This week Mozilla has, well done pretty much everything:
Launched a global activism campaign at the head of a large coalition: StopWatching.Us
Launched the 2M Better Futures badge commitment with President Clinton
Launched Make Things Do Stuff at the G8 Summit in London with the Prime Minister
Launched new versions of webmaker.org, popcorn maker, thimble and events apps
Launched the Maker Party campaign
Launched the Chicago Summer of Learning badge program
Launched the 2014 Knight-Mozilla Fellowship search
Partnered on the launch of Code Club World with Google and Code Academy
Launched the Mozilla Science Lab at the White House
Opened our new(ly refurbished) offices in Paris and San Francisco
Next week I’m presenting at the Learning and Skills Group (London, Tuesday) and moderating a session on ‘Digital Skills for Work and Learning’ at the EC Digital Agenda Assembly 2013 (Dublin, Wednesday). I’m also looking forward to working with the Mozilla comms team on next month’s beta release of the Web Literacy Standard. [Less]
|
|
Posted
4 days
ago
by
Chris Heilmann
I just added a small demo to my GitHub showing how you can do image masking by using the canvas element. All you need to do is add the canvasmask.js script and add a class of mask to each image you want to mask. You also need to provide a
... [More]
PNG file as the mask using the data-mask attribute. For example:
<img src="red-panda.jpg" alt="Red panda" class="mask" data-mask="centerblur.png">
This will take the centerblur.png file and apply it as a mask to red-panda.jpg – in effect taking the alpha of each pixel and change the alpha of the original pixel to that.
You can see it in action here and get the code on GitHub.
Under the hood, all I do is loop through all the pixels of the images (after copying them to two canvas elements) and apply the alpha values (every 4th value in the pixeldata array) of the PNG to the image. Simple, really :)
As mentioned by Jake Archibald on Twitter there is no need to loop over the pixels of the images, all you need is to copy the mask first, then change the canvas compositing to source-atop and add the image. Done. The script does that now, and thus is much faster. [Less]
|
|
Posted
4 days
ago
Over the years, I have written a handful of Firefox add-ons, and I need notifications quite frequently. Why? Most of my add-ons do something in the background at the user's request, and when it's done, the user wants to know. Alternatively, if my
... [More]
add-on attempts to do something and fails, the user would see nothing happen at all, unless I somehow tell them.
In real life, this is supposed to look something like this example, from "Copy URL":
The Mozilla Add-ons SDK even has a convenient API for it. Easy, right?
Sadly, not so fast: While the SDK is supposed to abstract all of this neatly away from me and "just work" on Linux, Windows, and OS X, the behavior is inconsistent, owed -- on OS X, anyway -- to the wonky state of notification support on the operating system level.
To Growl or not to Growl
I've ran into issues with notifications repeatedly over time, and employed a number of solutions so far. Spoiler alert: I am happy with none of them.
OS X 10.7 and below relied on a third-party tool called Growl to support notifications. If you had it installed, the SDK's API would work just great. Sadly, if you didn't have it installed, notifications would silently be swallowed. Worse yet, I was unable to detect if this happened, so I had no way to implement a fallback mechanism.
The OS X 10.8 "notification center" was supposed to fix this, but apparently, it will only display our notifications if the browser does not have the focus. In other words, it's completely useless for in-context notifications.
I considered all that a very poor user experience and instead of using the SDK's API, I implemented my own notifications module called "simple-notify" that would detect the availability of the notifications service (i.e., Growl or any other platform-specific service) first, and if none was found would employ a fallback mechanism.
The ugly but reliable notifications bar
The fallback mechanism I use is the once-ubiquitous, gray, Firefox notification bar:
It is shown in context, grabs the user's attention (perhaps a little too much) and, most importantly, it is reliably available on all platforms.
This notification bar has its downsides: For example, it's fairly intrusive and not easily ignored. My add-ons usually auto-close it after a few seconds. If I didn't do that, the bar would persist until closed by the user. This solution also can't handle more than one notification at a time: A second notification will overlay the previous one.
HTML5 Notifications API
Luckily, there's hope. The W3C Notifications API landed in Firefox 22, which (at the time of writing) is the next upcoming release version. If the Add-ons SDK is updated to use this API, this should finally allow me to use one line of code for notifications, not a few dozen.
In the context of a page, I can even use it already (without Add-ons SDK support), with two caveats:
To remain backwards compatible (for a while, anyway) I'd still have to implement a fallback mechanism. Once Firefox 22 is the current release version, however, I could relax that rule and just live with the fact that users of previous versions may or may not receive notifications. The W3C standard (rightly) requires to ask for permission before a website can issue notifications. Add-ons should be able to use notifications without explicit permission step.
I'm looking forward to the time when all this will smoothly work as expected!
I'm blogging about once a week in 2013, on various topics. This is my fifteenth post of the year. [Less]
|
|
Posted
4 days
ago
by
laura
I asked Erik Rose from my team to blog about his work on DXR (docs), the code search and static analysis tool for the Firefox codebase. He did so on the Mozilla Webdev blog, so it would show up on Planet Mozilla. Today, it was pointed out to me
... [More]
that the Webdev blog is not on Planet.
It’s a great post, summarizing all the things he’s done in the last few months. Go read the article: DXR digests the Firefox codebase. [Less]
|
|
Posted
4 days
ago
working on as part of my job1 at Mozilla is a tool to make it easy for designers to create mockups that are linked to live bugs, similar to the ones at Are We Pretty Yet. Now, I’ve got the background showing up, and the bugs overlayed
... [More]
on top of it, but as it stands, I’m requiring the designers to draw the lines connecting the bugs to the various areas in the mockup right on the mockup itself! This is obviously a fairly terrible idea, since it makes it much harder than it should to move stuff around after the fact, and requires a ton of up-front planning when creating the initial image. But what are my other options?
I thought for a while about layering a canvas element over the mockup; it would let me draw whatever shapes I wanted to, but passing the click events through to the mockup seemed like it would be fairly annoying, and I don’t think the connecting lines should appear in front of the boxes showing the bug details, which adds another wrinkle. Then, over lunch, I started to wonder what it would look like if a 1px by 1px black square got stretched and rotated with CSS… So I took some time after lunch, and played around a little, and it seems like it just might work! Give it a try, let me know if you have any ideas to make it better, and feel free to take the idea anywhere you think it might be useful!
day, and get paid for it!
Sometimes I still can’t believe how lucky I am to get to do this stuff all ↩ [Less]
|