-Поиск по дневнику

Поиск сообщений в rss_planet_mozilla

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 19.06.2007
Записей:
Комментариев:
Написано: 7

Planet Mozilla





Planet Mozilla - https://planet.mozilla.org/


Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://planet.mozilla.org/.
Данный дневник сформирован из открытого RSS-источника по адресу http://planet.mozilla.org/rss20.xml, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

Planet Mozilla Interns: Mihnea Dobrescu-Balaur: Start using your GitHub data

Пятница, 09 Мая 2014 г. 22:14 + в цитатник

GitHub is the home of Open Source software. Not only that, but both individuals and companies host their private code there. It started out as a hosted git solution, but it has evolved way beyond that. You can now track issues, keep wikis, host web pages, run tests for every commit and more.

While collaboration is indeed easy, I feel that GitHub lacks some of the features that are basic with dedicated issue trackers, like Bugzilla, JIRA and others. With GitHub, it's hard to keep track of lagging issues. Pull requests get forgotten all the time. Getting a quick overview of what are the most active issues is not trivial. If you want to make sure the issues are fairly distributed across team members in order to avoid burnout, good luck. There's no built-in way of specifying issue dependencies.

The good news is that there are possible workarounds - for example, we can simulate issues dependencies with issue mentions. For other shortcomings, there are no workarounds using just GitHub's UI. Fortunately, there is also an API which provides us with tons of data. Using it, we can start to address whatever shortcomings we feel GitHub has for our use cases - want to get a list of all the pull requests that can't be merged? Write a filter. Are you curious what bug is burning your users the most? Aggregate some counts.

You get the idea: all the data is there. You just have to use it.

Trying to solve this problem of getting more insights than GitHub's UI provides, I started working on a tool called Elasticboard. It provides a data-rich dashboard that helps you keep track of a GitHub repository, addressing most of the shortcomings described above. The code is hosted on GitHub, of course, and you are welcome to check out one of the demo dashboards.

Such a tool is helpful both to repo collaborators and new contributors. The repo collabs can keep track of what's going on and make sure that no issues slip through the cracks, while new contributors have their life made easier because now they can tell which of two issues is more important (there was more activity surrounding it), what issues are not assigned to anybody and so on.

Try Elasticboard out, add a repository that interests you in the hosted demo dashboard. It will only include recent events, because of GitHub's API limitations, but I think it's enough to make an idea. If the demo sparked your interest, deploying your own instance is easy - you can use the provided Docker container, or even serve it yourself. Either way, the README has all the info you need.

If feel like exploring the available data, I suggest you use Kibana and the Elasticsearch GitHub river. I wrote a short guide about it here.

The code is fully open source and it's designed to be extensible, making it easy to add new queries and data visualisations. If you are interested in contributing, again, the README will help you get started.

Happy hacking!

http://www.mihneadb.net/post/start-using-your-github-data


Stephen Horlander: (Re)Designing Firefox

Пятница, 09 Мая 2014 г. 19:43 + в цитатник

So, last Monday we launched a thing. You may have noticed it. We called it Australis. Now it’s just called Firefox.

We spent a lot of time on it.

Dedicating yourself to a project can become an intense experience. You think about it all the time: in the morning, at dinner, when you are trying to watch a movie, in the shower, in your sleep, when you should be sleeping…

But then you set it free, because it’s finally mature enough for that. It’s exciting. But it’s also really scary. You are never sure if you made the right decisions along the way. I like to take some time in the post release glow for some reflection.


History

Left: Firefox 4, Right: Firefox 29

So how did we get from there to here?

We launched Firefox 4 in March 2011. It was a big change from Firefox 3. It introduced the Firefox button, revamped the add-ons manager, removed the status bar, combined the stop, go and reload buttons and included a comprehensive visual update—all while still having time to prototype and discard some other features along the way.

And yet it wasn’t perfect. It had a lot of the rough edges that projects accumulate in the process of going from being designed and built to being shipped.

Firefox 4 was our last monolithic release before we moved to a rapid release cycle. Six week cycles seemed like the perfect timeframe to iteratively smooth out the rough edges. So I created a project to do just that.


Philosophy

The project that I had created for iterative refinement however quickly transformed into a significant overhaul.

People in the frame: Sinchan Banerjee, Alex Faaborg, Brian Dils, Trond, Stephen Horlander (my legs), Jennifer Boriss, Frank Yan, Alex Limi
Taking the picture: Madhava Enros

At the beginning of June the UX team met up for its first post Firefox 4 team offsite. On the agenda was figuring out “What’s next?”. The entire team gathered in a room to pitch ideas and talk about problems unresolved—or that had been introduced—during the development of Firefox 4.

One theme that had been floating around for a while rose to the surface— Firefox is about customization, it should feel like it’s yours.

What would this mean for the interface we had just shipped? A lot of ideas were tossed around. Eventually one guiding principal stuck—make the best core experience we can and allow users to add and change the things that matter the most to them.

Building a fun easy to use Customization Mode—along with a more flexible Firefox Menu—would become the foundation of the new Firefox.


Visual Profile

So Curve, Such Aerodynamic

The offsite also sparked a set of other ideas that would make up what became known as Australis. Primarily: unifying the disparate bookmarking elements in the main window, refining the visual design, consolidating related or redundant features and streamlining the tabstrip.

While the redesigned customization mode would be core to the experience—the redesigned tabstrip would change the entire profile of Firefox.

“Make it look faster. No, no! It needs more air vents!”
Firefox 4 Aerodynamic Sketch — 2010

We had explored the idea of adding visual cues to Firefox to make it feel faster and smoother before. Yet some of the ideas were a little over the top.

Curvy Tab Sketch — June, 2011

This sketch from the design session—inspired by a previous mockup from Trond—had a curvy tab shape that immediately resonated with everyone.

It also had one important additional design tweak—only render the tab shape for the active tab. Highlighting the active tab reduces visual noise and makes it easier to keep your place in the tabstrip.

The early curve shape tried on a few looks. At first it was too angular, then it was too curvy, then it was too short, then it was too tall and then (finally) it was just right.

Design ideas for background tabs on Windows — October 2011

It turns out that designing background tabs without a tab shape is a lot easier if you have a stable background to work with. Windows 7 has translucent windows of variable tints and Windows 8 has flat windows of variable color. This meant we needed to create our own stable background.

We went through several variations to ensure that the background tabs would be legible. First we tried creating a unified background block, but it seemed too heavy. We even thought about keeping background tab shapes and highlighting the active tab in some other way.

Eventually we decided on a background “fog” that would sit behind the tabs and in front of the window. Think of it as an interface sandwich—glass back, curvy-tab front with a delicious foggy center.

We also made sure that adding curves didn’t increase the width of the tabs taking up precious tabstrip real estate. And we removed the blank favicon placeholder for sites without favicons. A small tweak that frees up some extra room for the title.


Menu Panel and Customization

Redesigning the Firefox Menu

One size really doesn’t fit all with something as complex and personal as your web browser. Add-ons have always made Firefox a thoroughly customizable browser, however arranging things has never been a great experience out of the box.

But before we could tackle the customization behavior, we had to rethink the Firefox Menu.

The main toolbar is the primary surface for frequently used actions; while the menu is the secondary surface for stuff you only use some of the time. We wanted users to be able to move things between these surfaces so they could tailor Firefox to their needs.

For the updated layout we started with the idea of a visual icon grid. This grid nicely mapped to the icons already found on the toolbar and would ideally make moving things back and forth feel cohesive.

Larger 3x3 Grid with Labels—by Alex Faaborg

The first grid we designed was wider, with smaller icons and no labels. This quickly changed to a three column grid with larger labeled icons. The updated layout served the same goal but was more clear and also less cramped.

Not everything we currently had in the Firefox Menu would translate directly to the new layout. We had to add special conjoined widgets—also known as “Wide Widgets”—for Cut/Copy/Paste and the Page Zoom controls. We also added a footer for persistent items that can’t be customized away. We did this to prevent users from getting into a broken layout with no escape hatch.

We had some serious debates about whether to use a an icon grid or a traditional menu list. The visual grid has some drawbacks: it isn’t as easy to scan and doesn’t scale as well with a lot of items. But the icon grid won this round because it was more visual, more inline with what we wanted out of drag-and-drop customization and had the side benefit of being touch friendly.

Some items from the Firefox Menu had submenus that could’t be easily reduced to a single action: Developer Tools, History, Bookmarks, Help and Character Encoding. Nested submenus hanging off of a panel felt pretty awkward. We had several ideas on how to handle this: inline expando-tray™, a drawer(interactive mockup—click History) and in-panel navigation.

We settled on what we call subviews(interactive mockup—click History). Subviews are partial overlays containing lists that slide in over the menu. Click anywhere in the partially visible menu layer to get back to the main menu—or close the entire menu and reopen it.

With the new menu layout Firefox should hopefully work just fine for most people out of the box. But by using the new Customization Mode you can really tailor Firefox to your needs. If you are interested in knowing more about why what is where Zhenshuo Fang wrote a great post about it.


Customize All the Things!

Now we needed to figure out how update Firefox’s aging customization experience. Things started off a little ambitious with the idea that we could combine toolbar customization, themes and add-ons into the same UI. This led to an early interactive demo (it does some stuff, hint: tools icon –> plus sign) to try and see if this would work.

This demo surfaced a few issues: 1) including add-ons was going to be complicated 2) we needed a direct representation of the menu panel instead of a proxy. This led to a bunch of mockups for a flatter interface sans add-ons integration. Eventually I made a second demo without the theme selector that is closer to what we ended up shipping. Then Blake Winton turned that into an awesome prototype that actually did something.

Final Customization Mode

The demos and prototypes helped us quickly get feedback from people on the idea. One of the complaints we heard was that it wasn’t obvious that you were entering a mode. We mocked up a lot of ideas for various ways to give visual feedback that you were in a mode and could now rearrange your stuff. We eventually settled on a subtle blueprint pattern and Madhava suggested we add some kind of animation with padding.


Wrapping it up

Thank you to everyone who dedicated so much time and effort into making this happen.

If you want to know more about the people and process behind Firefox 29, Madhava has a good post with an overview.

I think the post-release glow is over now. Time to get back to making Firefox better.

http://www.stephenhorlander.com/2014/05/redesigning-firefox/


Henrik Skupin: Firefox Automation report – week 13/14 2014

Пятница, 09 Мая 2014 г. 19:34 + в цитатник

In this post you can find an overview about the work happened in the Firefox Automation team during week 13 and 14.

Highlights

Finally we were able to upgrade our mozmill-ci production system to Mozmill 2.0.6. The only caveat is that we had to disable one test for cleaning history to prevent the always occurring Flash crash on Windows.

This week Henrik was able to land the first fixes for broken TPS tests. Together with Andrei we were able to fix 4 of them.

Also we had our first Automation Training days. The first one on Monday was a huge success, and we have seen lots of new faces. Sadly the second one on the following Wednesday we haven’t announced separately, so lesser people joined our training. In the future we will make sure, to announce each Automation Training day separately. Also there will be only a single one in a full week, so it will allow people to do some homework until the next session.

In week 14 we released version 2.0.6.1 of our mozmill-automation package. It was necessary to allow QA to run the Mozmill update tests with overriding the update channel, so update tests from a release candidate to the next beta build can be performed.

After we discovered even more Flash crashes of the same type, we decided to use the debug version of Flash on our Windows systems. Main reason is that those builds don’t crash. Sadly, given that they would give us way more information. But Adobe should at least know where the crash is happening. Also given that we do not have any private data on our test machines, we decided to actually upload a minidump from one of those crashes to Bugzilla. This information actually helped Adobe a lot! So we will continue doing that.

Last but not least Henrik was able to fix another 7 bugs for TPS. Those were broken tests, a broken behavior of the TPS test extension, or enhancements.

Individual Updates

For more granular updates of each individual team member please visit our weekly team etherpad for week 13 and week 14.

Meeting Details

If you are interested in further details and discussions you might also want to have a look at the meeting agenda, the video recording, and notes from the Firefox Automation meetings of week 13 and week 14.

http://www.hskupin.info/2014/05/09/firefox-automation-report-week-13-14-2014/


Doug Belshaw: Mozilla Webmaker training starts Monday 12th May!

Пятница, 09 Мая 2014 г. 18:27 + в цитатник

Excitingly, Mozilla’s Webmaker training starts on Monday. Join us (free!) to learn creative ways to teach web literacy, digital skills and open practices with fellow educators, technologists and mentors around the world.

Sign up here: http://training.webmakerprototypes.org

Each of the four weeks is a separate topic, but if you decide to do all of them, they build upon one another:

Webmaker Training  Teach the Web

The brains behind the operation is Laura Hilliger, our Training & Curriculum Lead. Several of us from the Webmaker Community team are going to be helping out with running sessions.

Laura’s put together a really nice ‘how to participate’ Thimble resource that’s worth checking out:

How to participate

Week 1: Exploring

Week beginning 12th May. Learn about the theoretical frameworks and pedagogies (teaching methods) behind Webmaker. This module helps you understand the web as an ecosystem and why an open web is so important.

Week 2: Building

Week beginning 19th May. Develop open educational resources that embed web literacy and making with other topics that you might already be teaching. Using open practices, you’ll make learning materials that are designed for others to use and remix.

Week 3: Facilitating

Week beginning 26th May. Put theory into practice. In this module, you’ll learn how to use open and participatory learning techniques to teach digital and web literacy skills in your classroom, during workshops or at events.

Week 4: Connecting

Week beginning 2nd June. Amplify your work by making connections in your local community as well as within Webmaker’s global community. In this module, you’ll learn how building relationships can help you achieve greater impact.

Getting involved

There’ll be three main places to pay attention to:

  1. The Webmaker Training site: this has links to the content and will have a calendar of all the live events. It’s easiest to think of this as the ‘hub’. Suggestion: bookmark this link.
  2. The discussion area: using great new forum 2.0 software called Discourse we’ll be discussing and debating the theory and practice of teaching web literacy.
  3. Social media: we’ll be using the #TeachTheWeb hashtag on both Twitter (mainly) and Google+.

If you’ve always wanted to improve your web skills so that you can teach the web to others, this is your perfect opportunity – so sign up!

http://dougbelshaw.com/blog/2014/05/09/webmaker-training/


John Zeller: MySQL databases are all setup in BuildAPI-app docker container!

Пятница, 09 Мая 2014 г. 04:51 + в цитатник

As I stated in the previous post, the next step here was to setup databases. I spent time attempting to have sqlite work in this situation, but ran into issues with buildapi connecting to the sqlite databases. Rather than chase that rabbithole, I doublechecked the configuration in production buildapi and was reminded by the configs that production is running mysql. So I went ahead and did so. This setup required adding the following to the Dockerfile:

RUN apt-get install -y mysql-server

RUN chown mysql.mysql /var/run/mysqld/

RUN mysql_install_db # Installs mysql database schemas

RUN /usr/bin/mysqld_safe &

After this, everything was peachy except for the sql schemas available in the current buildapi repo. Those schemas are for sqlite, so I dumped my own mysql schemas for use here, and loaded them with the following commands:

mysql < status_schema.mysql

mysql < scheduler_schema.mysql

I went ahead and submitted a patch to add the mysql specific schemas to the buildapi repo in Bug 1007994, but for now I added the schemas in with the files in the buildapi-app directory.

I uploaded the current contents of the buildapi-app docker container and it launches with schemas all loaded and running well.

I am still having some issues verifying that selfserve-agent can execute commands from data sent to it over the amqp by buildapi. Further testing is needed to fix this issue. I am currently getting 404 error with my tests, but that might be a peripheral problem rather than selfserve-agent not getting data from the amqp.

Left to do on buildapi-app is to:

  • Test that buildapi and selfserve-agent are truly connected and able to exchange over the amqp
  • Test the entire buildapi application by running similar procedures that should work in my local setup

Links I found useful for this:

  • http://ijonas.com/devops-2/building-a-docker-based-mysql-server/

http://johnzeller.com/blog/2014/05/08/mysql-databases-are-all-setup-in-buildapi-docker-container/


Matthew Gregan: Testing MSE in Firefox Nightly

Пятница, 09 Мая 2014 г. 03:50 + в цитатник

Firefox's implementation of Media Source Extensions took a step forward recently. With last week's landing of the patch sets from bug 881512 and bug 1000608, along with a handful of minor follow-ups, videos are now playable in YouTube's HTML5 DASH player. The functionality in these patches extends Firefox's general Media Source Extensions implementation for all users, but the current focus for this iteration of development has been playback with YouTube's player.

It's now at a point that wider testing and technical feedback would be useful, so if you're feeling brave and need a good excuse to watch cats on treadmills and file bugs, please try it out. For now, MSE is hidden behind a preference, so first you'll need to set the preference to true:

about:config screenshot

Next, make sure YouTube detects MSE support by visiting YouTube's HTML5 feature test page, which should look like this:

YouTube HTML5

Now your Firefox is ready to test MSE. To verify that you're using MSE on a YouTube video, right-click on the video area and select "Stats for nerds" from the pop-up menu, which will indicate "DASH: yes" if MSE being used with the current video. Note any unusual behaviour that you haven't seen with the HTML5 player, bearing in mind the caveats listed below.

YouTube DASH

Not all videos have DASH versions, so here's a video I've been testing:

Before filing new bugs, please be aware of the following known bugs and limitations:

  • Seeking in adaptive videos is limited to buffered ranges. Support for seeking in unbuffered ranges is happening in bug 1002297,

  • Quality isn't automatically adapted to the player size or available bandwidth, and MSE videos always use the lowest quality available. You can seamlessly switch resolutions manually using the video settings button (with the gear icon). Automatic quality adaptation will start working when bug 238041 is fixed. The same bug also causes the bandwidth estimation and graph in "Stats for nerds" to read low.

  • Firefox's MSE support (via MediaSource isTypeSupported(DOMString type)) is intentionally restricted to WebM. MP4 will be added in the near future.

  • Not all content on YouTube is available with adaptive streaming and/or in WebM/VP9 format yet.

If you find a bug, please file it in Bugzilla against Core::Video/Audio, add "mediasource" (aka bug 778617) to the "Blocks" field, and include me (:kinetik) in the CC list.

Once the first two of the issues listed above have been fixed, along with any other blocking bugs that may be found during testing, MSE will be enabled by default (for WebM only) in Nightly builds for further testing. That change is tracked by bug 1000686.

http://blog.mjg.im/2014/05/08/testing-media-source-extensions/


William Lachance: mozregression: New maintainer, issues tracked in bugzilla

Пятница, 09 Мая 2014 г. 02:31 + в цитатник

Just wanted to give some quick updates on mozregression, your favorite regression-finding tool for Firefox:

  1. I moved all issue tracking in mozregression to bugzilla from github issues. Github unfortunately doesn’t really scale to handle notifications sensibly when you’re part of a large organization like Mozilla, which meant many problems were flying past me unseen. File your new bugs in bugzilla, they’re now much more likely to be acted upon.
  2. Sam Garrett has stepped up to be co-maintainer of the project with me. He’s been doing a great job whacking out a bunch of bugs and keeping things running reliably, and it was time to give him some recognition and power to keep things moving forward. :)
  3. On that note, I just released mozregression 0.17, which now shows the revision number when running a build (a request from the graphics team, bug 1007238) and handles respins of nightly builds correctly (bug 1000422). Both of these were fixed by Sam.

If you’re interested in contributing to Mozilla and are somewhat familiar with python, mozregression is a great place to start. The codebase is quite approachable and the impact will be high — as I’ve found out over the last few months, people all over the Mozilla organization (managers, developers, QA …) use it in the course of their work and it saves tons of their time. A list of currently open bugs is here.

http://wrla.ch/blog/2014/05/mozregression-new-maintainer-issues-tracked-in-bugzilla/?utm_source=rss&utm_medium=rss&utm_campaign=mozregression-new-maintainer-issues-tracked-in-bugzilla


Pascal Finette: On Happiness

Пятница, 09 Мая 2014 г. 00:02 + в цитатник

This morning I had the great pleasure and honor to hold the closing keynote at the Symposium Oeconomicum in M"unster, Germany.

The theme of the day was “the leap into the unknown”. The organizers asked me to wrap up the day with an inspiring message. And what better way to send off 600 students, than to talk about happiness?

Here’s the video:

http://blog.finette.com/on-happiness


Byron Jones: a tale of bugzilla performance

Четверг, 08 Мая 2014 г. 21:06 + в цитатник

a high-level goal across multiple teams this year is to improve bugzilla.mozilla.org’s performance, specifically focusing on the time it takes to load a bug (show_bug.cgi).

towards this end, in q1 2014 i focused primarily on two things: implementing a framework for bugzilla to use memcached, and deep instrumentation of bmo in our production environment to help identify areas which require optimisation and could leverage memcached.

i’ll talk more about memcached in a later blog post.  today i’ll talk about a single little query.

the data gathered quickly identified a single query used to determine a user’s group membership was by far the slowest query, averaging more than 200 ms to complete, and was executed on every page:

SELECT DISTINCT groups.id 
  FROM groups, 
       user_group_map, 
       group_group_map 
 WHERE user_group_map.user_id = 3881 
       AND (
           (user_group_map.isbless = 1 AND groups.id=user_group_map.group_id)
           OR (groups.id = group_group_map.grantor_id
               AND group_group_map.grant_type = 1
               AND group_group_map.member_id IN (20,19,10,9,94,23,49,2,119,..))
       )

in bug 993894 i rewrote this query to:

SELECT DISTINCT group_id
  FROM user_group_map
 WHERE user_id = 3881
       AND isbless = 1
UNION
SELECT DISTINCT grantor_id
  FROM group_group_map
 WHERE grant_type = 1
       AND member_id IN (20,19,10,9,94,23,49,2,119,..)

which executes almost instantly.

the yellow bar on the following graph shows when this fix was deployed to bugzilla.mozilla.org:

bug993894


Filed under: bmo, bugzilla

http://globau.wordpress.com/2014/05/09/a-tale-of-bugzilla-performance/


Fr'ed'eric Harper: Thinking about different devices viewport with Responsive Web Design at Devoxx UK

Четверг, 08 Мая 2014 г. 18:48 + в цитатник

DevoxxUK

On the 12th, and 13th of June, I’ll be in London, United Kingdom to speak at Devoxx UK. I’m happy to present at this event as I know it will be amazing, and it will be my first time in this country. My talk will be about Responsive Web Design, and how to get the best of your design.

There is no mobile Web, there is no desktop Web, and there is no tablet Web. We view the same Web just in different ways. So how do we do it? By getting rid of our fixed-width, device-specific approaches and use Responsive Web Design techniques. This session will focus on what is Responsive Web Design and how you can use his 3-pronged approach on your current apps today which will also adapt to new devices in the future.

It will be quite interesting to talk about responsive web design again: I’ve always been a big believer in making sure you give a good experience to your users, no matter their screen size or platform, and I think it’s even more important in today’s world. For developers, using such a technique not only give them the opportunity to reach more people, and give a great experience to their users, but also make it so much easier to port to different web platforms like Firefox OS. If you want to join us, buy your ticket now, and use my promotion code SPK10E4 to save some bucks… See you in June London!


--
Thinking about different devices viewport with Responsive Web Design at Devoxx UK is a post on Out of Comfort Zone from Fr'ed'eric Harper

Related posts:

  1. Show me your book: Responsive Web Design If you are following this blog, you probably know that...
  2. Responsive Web Design in the sunny San Jose Two days ago, I did a keynote on Mobile First,...
  3. Responsive Web Design, get the best of your design at FITC Toronto Yesterday I did a presentation at FITC Toronto on Responsive...

http://outofcomfortzone.net/2014/05/08/thinking-about-different-devices-viewport-with-responsive-web-design-at-devoxx-uk/?utm_source=rss&utm_medium=rss&utm_campaign=thinking-about-different-devices-viewport-with-responsive-web-design-at-devoxx-uk


Joel Maher: The lifecycle of a Talos performance regression

Четверг, 08 Мая 2014 г. 17:38 + в цитатник

The lifecycle of a Talos performance regression

The cycle of landing a change to Firefox that affects performance


http://elvis314.wordpress.com/2014/05/08/the-lifecycle-of-a-talos-performance-regression/


Mike Hommey: Faster compilations for everyone?

Четверг, 08 Мая 2014 г. 11:36 + в цитатник

If you’re following this blog, you may be aware of the recent work on shared compilation cache. This has been deployed with great results on Mozilla’s try server for all platforms (except a few build types, like ASAN or valgrind), and is being tested for Linux/Android builds on b2g-inbound (more on that in subsequent posts).

A side effect of the work to make it run on all platforms is that it now works to build Firefox on Windows, although it requires a specific setup. And since recently, it’s also possible to use it with local storage instead of S3. This means we now have a (basic) ccache for Windows that works to build Firefox.

If you wish to try it, here is what you need to do:

  • Clone the repository from github:

    $ git clone https://github.com/glandium/sccache

  • Add the following to your mozconfig:

    ac_add_options "--with-compiler-wrapper=python2.7 path/to/sccache/sccache.py"
    export _DEPEND_CFLAGS='-deps$(MDDEPDIR)/$(@F).pp'
    mk_add_options "export CC_WRAPPER="
    mk_add_options "export CXX_WRAPPER="
    mk_add_options "export COMPILE_PDB_FLAG="
    mk_add_options "export HOST_PDB_FLAG="
    mk_add_options "export MOZ_DEBUG_FLAGS=-Z7"

    Update: Currently, path/to/sccache/sccache.py needs to be a windows-like path (as opposed to msys/cygwin path) with forward slashes.

  • Then set the SCCACHE_DIR environment variable to some local directory.
  • And build happily.

A few things to note:

  • As of writing, sccache doesn’t support cleaning up the storage directory, so it will grow indefinitely (until you clean it up yourself).
  • Because the MSVC preprocessor is not exactly fast, and because sccache doesn’t have a direct mode like ccache, it doesn’t make as much difference as ccache does.
  • It also works on non-windows, but doesn’t require all the mozconfig changes, except for the --with-compiler-wrapper line.

Play with it and feel free to fork it on github, and improve it. Pull requests encouraged.

http://glandium.org/blog/?p=3275


Aki Sasaki: brainstorm: splitting mozharness

Четверг, 08 Мая 2014 г. 08:09 + в цитатник

[stating the problem]

Mozharness currently handles a lot of complexity. (It was designed to be able to, but the ideal is still elegantly simple scripts and configs.)

Our production-oriented scripts take (and sometimes expect) config inputs from multiple locations, some of them dynamic; and they contain infrastructure-oriented behavior like clobberer, mock, and tooltool, which don't apply to standalone users.

We want mozharness to be able to handle the complexity of our infrastructure, but make it elegantly simple for the standalone user. These are currently conflicting goals, and automating jobs in infrastructure often wins out over making the scripts user friendly. We've brainstormed some ideas on how to fix this, but first, some more details:

[complex configs]

A lot of the current complexity involves config inputs from many places:

We want to lock the running config at the beginning of the script run, but we also don't want to have to clone a repo or make external calls to web resources during __init__(). Our current solution has been to populate runtime configs during one of our script actions, but then to support those runtime configs we have to check multiple config locations for our script logic. (self.buildbot_config, self.test_config, self.config, ...)

We're able to handle this complexity in mozharness, and we end up with a single config dict that we then dump to the log + to a json file on disk, which can then be reused to replicate that job's config. However, this has a negative effect on humans who need to either change something in the running configs, or who want to simplify the config to work locally.

[in-tree vs out-of-tree]

We also want some of mozharness' config and logic to ride the trains, but other portions need to be able to handle outside-of-tree processes and config, for various reasons:

  • some processes are volatile enough that they need to change across the board across all trees on a frequent basis;
  • some processes act across multiple trees and revisions, like the bumper scripts and vcs-sync;
  • some infrastructure-oriented code needs to be able to change across all processes, including historical-revision-based processes; and
  • some processes have nothing to do with the gecko tree at all.

[brainstorming solutions]

Part of the solution is to move logic out of mozharness. Desktop Firefox builds and repacks moving to mach makes sense, since they're

  1. configurable by separate mozconfigs,
  2. tasks completely shared by developers, and
  3. completely dependent on the tree, so tying them to the tree has no additional downside.

However, Andrew Halberstadt wanted to write the in-tree test harnesses in mozharness, and have mach call the mozharness scripts. This broke some of the above assumptions, until we started thinking along the lines of splitting mozharness: a portion in-tree running the test harnesses, and a portion out-of-tree doing the pre-test-run machine setup.

(I'm leaning towards both splitting mozharness and using helper objects, but am open to other brainstorms at this point...)

[splitting mozharness]

In effect, the wrapper, out-of-tree portion of mozharness would be taking all of the complex inputs, simplifying them for the in-tree portion, and setting up the environment (mock, tooltool, downloads+installs, etc.); the in-tree portion would take a relatively simple config and run the tests.

We could do this by having one mozharness script call another. We'd have to fix the logging bug that causes us to double-log lines when we instantiate a second BaseScript, but that's not an insurmountable problem. We could also try execing the second script, though I'd want to verify how that works on Windows. We could also modify our buildbot ScriptFactory to be able to call two scripts consecutively, after the first script dynamically generates the simplified config for the second script.

We could land the portions of mozharness needed to run test harnesses in-tree, and leave the others out-of-tree. There will be some duplication, especially in the mozharness.base code, but that's changing less than the scripts and mozharness.mozilla modules.

We would be able to present a user-friendly "inner" script with limited inputs that rides the trains, while also allowing for complex inputs and automation-oriented setup beforehand in the "outer" script. We'd most likely still have to allow for automation support in the inner script, if there's some reporting or error checking or other automation task that's needed after the handoff, but we'd still be able to limit the complexity of that inner script. And we could wrap that inner script in a mach command for easy developer use.

[helper objects]

Currently, most of mozharness' logic is encapsulated in self. We do have helper objects: the BaseConfig and the ReadOnlyDict self.config for config; the MultiFileLogger self.log_obj that handles all logging; MercurialVCS for cloning, ADBDeviceHandler and SUTDeviceHandler for mobile device wrangling. But a lot of what we do is handled by mixins inherited by self.

A while back I filed a bug to create a LocalLogger and BaseHelper to enable parallelization in mozharness scripts. Instead of cloning 90 locale repos serially, we could create 10 helper objects that each clone a repo in parallel, and launch new ones as the previous ones finish. This would have simplified Armen's parallel emulator testing code. But even if we're not planning on running parallel processes, creating a helper object allows us to simplify the config and logic in that object, similar to the "inner" script if we split mozharness into in-tree and out-of-tree instances, which could potentially also be instantiated by other non-mozharness scripts.

Essentially, as long as the object has a self.log_obj, it will use that for logging. The LocalLogger would log to memory or disk, outside of the main script log, to avoid parallel log interleaving; we would use this if we were going to run the helper objects in parallel. If we wanted the helper object to stream to the main log, we could set its log_obj to our self.log_obj. Similarly with its config. We could set its config to our self.config, or limit what config we pass to simplify.

(Mozharness' config locking is a feature that promotes easier debugging and predictability, but in practice we often find ourselves trying to get around it somehow. Other config dicts, self.variables, editing self.config in _pre_config_lock() ... Creating helper objects lets us create dynamic config at runtime without violating this central principle, as long as it's logged properly.)

Because this "helper object" solution overlaps considerably with the "splitting mozharness" solution, we could use a combination of the two to great efficacy.

[functions and globals]

This idea completely alters our implementation of mozharness, by moving self.config to a global config, directly calling logging methods (or wrapped logging methods). By making each method a standalone function that's only slightly different from a standard python function, it lowers the bar for contribution or re-use of mozharness code. It does away with both the downsides and benefits of objects.

The first, large downside I see is this solution appears incompatible with the "helper objects" solution. By relying on a global config and logging in our functions, it's difficult to create standalone helpers that use minimized configs or alternate logging configurations. I also think the global logging may make the double-logging bug more prevalent.

It's quite possible I'm downplaying the benefit of importing individual functions like a standard python script. There are decorators to transform functions into class methods and vice versa, which might allow for both standalone functions and object-based methods with the same code.

[related links]

  • Jordan Lund has some ideas + wip patches linked from bug 753547 comment 6.
  • Andrew Halberstadt's Sharing code not always a good thing and How to deal with IFFY requirements
  • My mozharness core principles example scripts+configs and video
  • Lars Lohn's Crouching Argparse Hidden Configman. Afaict configman appears to solve similar problems to mozharness' BaseConfig, but Argparse requires python 2.7 and mozharness locks the config.


  • comment count unavailable comments

    http://escapewindow.dreamwidth.org/245082.html


    Pascal Finette: An Entrepreneur's Call to Arms

    Среда, 07 Мая 2014 г. 20:07 + в цитатник

    We are living in incredible times. Incredibly scary and incredibly exciting: On one hand we face issues such as three billion people living in poverty, 2.5 billion people without access to sanitation and 800 million people who don’t have access to clean drinking water. On the other hand we experience innovation happening at an ever increasing pace, allowing us to touch more people in less time. There are now seven billion mobile phone connections on a planet with 7.1 billion people; we grow human tissue in a petri dish; we program DNA and 3D print complete houses out of concrete in less than 24 hours.

    The American psychologist Abraham Maslow (who created the famous “hierarchy of needs”) once said: “Everyone I know who is happy is working well at something they consider important.”

    You have an incredible opportunity. You, more than any generation before you, can change the world, rewrite the course of human history. You have the tools, the education, the network. You are growing up in the most exciting times ever. All it takes is to allow yourself to go where your heart tells you to go, to make the leap into the unknown and trust in yourself and the process. You have little to lose and much to gain.

    The future is a renewable resource: Every morning you get a new chance to do something which is important to you, something which will make you happy.

    This is your world. Start. Now.

    (This Call to Arms was originally published as a contribution to the Symposium Oeconomicum 2014 in M"unster, Germany)

    http://blog.finette.com/an-entrepreneurs-call-to-arms


    Gervase Markham: Software Project “Politics”

    Среда, 07 Мая 2014 г. 17:51 + в цитатник

    Speaking of politics, this is as good a time as any to drag that much-maligned word out for a closer look. Many engineers like to think of politics as something other people engage in. “I’m just advocating the best course for the project, but she’s raising objections for political reasons.” I believe this distaste for politics (or for what is imagined to be politics) is especially strong in engineers because engineers are bought into the idea that some solutions are objectively superior to others. Thus, when someone acts in a way that seems motivated by outside considerations—say, the maintenance of his own position of influence, the lessening of someone else’s influence, outright horse-trading, or avoiding hurting someone’s feelings—other participants in the project may get annoyed. Of course, this rarely prevents them from behaving in the same way when their own vital interests are at stake.

    If you consider “politics” a dirty word, and hope to keep your project free of it, give up right now. Politics are inevitable whenever people have to cooperatively manage a shared resource. It is absolutely rational that one of the considerations going into each person’s decision-making process is the question of how a given action might affect his own future influence in the project. After all, if you trust your own judgement and skills, as most programmers do, then the potential loss of future influence has to be considered a technical result, in a sense. Similar reasoning applies to other behaviors that might seem, on their face, like “pure” politics. In fact, there is no such thing as pure politics: it is precisely because actions have multiple real-world consequences that people become politically conscious in the first place. Politics is, in the end, simply an acknowledgment that all consequences of decisions must be taken into account. If a particular decision leads to a result that most participants find technically satisfying, but involves a change in power relationships that leaves key people feeling isolated, the latter is just as important a result as the former. To ignore it would not be high-minded, but shortsighted.

    – Karl Fogel, Producing Open Source Software

    http://feedproxy.google.com/~r/HackingForChrist/~3/0fRlHgRv7eE/


    Sylvestre Ledru: Changes Firefox 30 beta1 to beta2

    Среда, 07 Мая 2014 г. 14:03 + в цитатник
    • 31 changesets
    • 57 files changed
    • 585 insertions
    • 433 deletions

    ExtensionOccurrences
    js22
    cpp10
    java5
    html4
    xml3
    jsm3
    ini3
    py2
    xul1
    list1
    in1
    h1
    css1

    ModuleOccurrences
    browser24
    mobile8
    layout6
    js6
    toolkit3
    testing2
    mozglue2
    content2
    xpcom1
    intl1
    dom1

    List of changesets:

    Richard NewmanBug 987867 - JB & KK crash in java.util.ConcurrentModificationException: at java.util.LinkedList.next(LinkedList.java). r=mfinkle,ckitching, a=lsblakk - 69fcc2d9c81b
    Nathan FroydBug 997820 - Disable telemetry in tests. r=ted, a=test-only - a7ab7384526e
    JW WangBug 916399 - Autoplay fails to activate due to Bug 1001317, call play() instead. r=cpearce, a=test-only - 5dfe868c0bea
    Bill McCloskeyBack out 4f2f5c15e065 (Bug 652510) for regressions - 30a4e7382829
    Mike de BoerBug 1000744: re-introduce a checked state for panel-menu buttons. r=MattN, a=lsblakk - 6c2ea428e1f8
    Mike de BoerBug 966723: exit Customize Mode on menu-button click, not mouse-down. r=mconley, feedback=dao, a=lsblakk - 23481585e2e5
    Tim TaubertBug 1001167 - Don't let invalid sessionstore.js files break sessionstore r=smacleod a=sylvestre - 63a8f593b292
    Bill McCloskeyBug 994291 - Avoid calling SimpleTest.finish more than once. r=dougt, a=test-only - 3136f0462a23
    James GrahamBug 1002267 - Stop trying to compare times in the mozlog unit tests. r=wlach, a=test-only - 461e1c788403
    Gabor KrizsanitsBug 999585 - wantExportHelpers for all content-script. r=Mossop, a=sledru - 5c955e3d64b6
    James WillcoxBug 966154 - Don't use __fork, it's gone in newer bionic. r=glandium, a=sledru - ae9db69edde3
    Lucas RochaBug 975091 - Use wrap_content height params in PanelArticleItem (r=margaret) a=lsblakk - bd20a12260ea
    Margaret LeibovicBug 999760 - Apply padding to entire article item view. r=liuche a=lsblakk - d9336eebf796
    Simon MontaguFollow up the parent chain when making continuations non-fluid at the end of a directional run. Bug 989994, r=roc, a=lsblakk - 3c6892869d25
    David Rajchenbach-TellerBug 995162 - Rewrite the mechanism that (re)starts the OS.File worker. r=froydnj, a=lsblakk - 0678e5469636
    Tim TaubertBug 1000198 - Fix sessionstore tests that remove the original tab. r=smacleod, a=test-only - e078f53fd234
    Tim TaubertBug 1001521 - Fix tabview tests that remove the original tab. r=smacleod, a=test-only - d20b23d033e4
    Tim TaubertBug 1003096 - Make browser_tabview_bug595601.js wait until the test session is restored. r=smacleod, a=test-only - 66518d59cdbd
    Richard NewmanBug 1003911 - Part 1: Don't try to extract null favicons from the database. r=margaret, a=sledru - 97392de21322
    Richard NewmanBug 1003911 - Part 2: Don't write null favicons or thumbnails into the DB. r=margaret, a=sledru - e03ba68c6044
    Jonathan WattBug 1004327 - Don't limit the number of significant fractional digits for . r=bz, a=sylvestre - 8c9e76ede410
    Gabor KrizsanitsBug 985472 - Name fixup in ExportFunction. r=bholley, a=lsblakk - b955f950df88
    Gabor KrizsanitsBug 985472 - cloneInto for sandbox. r=bholley, a=test-only - 4c244576343b
    James KitchenerBug 1000030 - Don't let Windows overwrite length 0 strings. r=dmajor, a=lsblakk - c66942faa3b2
    David MajorBug 1001759 - Record total RAM and pagefile size in crash reports. r=bsmedberg, a=sledru - 4ee9435a9863
    David MajorBug 973138 - Block DLLs that match the MovieMode pattern. r=bsmedberg, a=sledru - 743afab610fa
    Tim NguyenBug 989751 - Some items in the Web Developer and Sidebar widgets have the wrong styling. r=Gijs, a=sledru - 5ad3f17e39d2
    Richard NewmanBug 1005074 - Part 1: Rename Send Tab activity. r=mfinkle, a=sledru - d41eb0c5c169
    Richard NewmanBug 1005074 - Part 2: Re-enable Send Tab on Beta. r=mfinkle, a=sledru - dfe6e2beb722
    Ms2gerBug 1004202 - Stop calling PrepareToStartLoad in nsDocumentViewer::LoadStart. r=smaug, a=lsblakk - c219fc2b4cc2
    Steve SingerBug 997992 - Fix build error on non ion builds. r=jandem, a=lsblakk - 5958a9259d6a

    r= means reviewed by
    a= means uplift approved by

    http://sylvestre.ledru.info/blog/2014/05/07/changes-firefox-30-beta1-to-beta2


    Yura Zenevich: Building and Flashing a Firefox OS device

    Среда, 07 Мая 2014 г. 11:00 + в цитатник

    Building and Flashing a Firefox OS device

    07 May 2014 - Toronto, ON

    Yesterday I found a mystery box sitting on my table. I was super excited to discover that I finally got the new "Flame" reference Firefox OS device (MDN). So let the testing begin!

    Picture of a

    First of all, I wanted to comment on the great build and hardware quality that the device has! I was impressed to a point of wanting to dog-food the device as my primary smartphone. Unfortunately, none of the Firefox OS devices released to date work on Wind Mobile network (1700/2100 AWS band).

    My second thought was to flash it with the latest Firefox OS build. Since I am using OSX as my primary working environment, I opted for using the current Ubuntu LTS with Virtual Box and Vagrant. I was using that setup for a while now with the Inari device without any issues. The first thing I discovered when building for "Flame" is that my build now explicitly fails because of the non-case sensitive file system (I shared the source for B2G, gecko and Gaia between the host and the guest environments).

    Given that other developers that work on OSX and develop for "Flame" might face the same issues, here is a step by step guide to setting up, building and flashing the reference device:

    Case sensitive disk image

    NOTE: proceed to the next step if you have a case-sensitive file system already

    To create mountable case-sensitive disk image run

      hdiutil create -volname 'firefoxos' -type SPARSE -fs \
      'Case-sensitive Journaled HFS+' -size 40g ~/firefoxos.sparseimage
      open ~/firefoxos.sparseimage
    

    The drive will now be located at /Volumes/firefoxos/

    Source code

    The disk image is the place to keep the B2G source code. In case you have a pre-existing Gaia and gecko repositories you can use symlinks to/for them.

    Now is also a good time to set an environment variable that will be used to reference the path to B2G source: export B2G_PATH="/Volumes/firefoxos/B2G"

    Build environment

    By now you should have Virtual Box and Vagrant installed. Vagrant makes it really easy to create and configure the build environment with just one command. All of the provisioning stuff is specified in this Vagrantfile that you should save somewhere close to where you keep your other VMs.

    Now navigate to the directory you saved the Vagrantfile to. And run the following command:

    vagrant up
    

    It will take some time to set everything up but once you are done your VM should be easily accessible via ssh, so type:

    vagrant ssh
    

    and you are in.

    Configure, build and flash

    At this point you are all set up and ready to roll. Here's what you need to do:

    Connect your device via USB and verify that it is visible to the VM: adb devices should list it.

      cd B2G // host's B2G_PATH is synced to guest's $HOME/B2G
      ./config.sh flame // Will take some time to fetch everything
      ./build.sh // Will take a very long time to build everything
      ./flash.sh // Will flash the device with your new shiny build
    

    Hopefully everything worked for you and you are ready to hack on B2G or Gaia from OSX. The changes you make will be synced to the VM. When you are ready to build again, just ssh to it and run the necessary commands (more here).

    yzen

    http://feedproxy.google.com/~r/yura-zenevich/~3/jHIH0W6xw2U/building-flame.html


    Selena Deckelmann: The Final Crontab: an introduction to crontabber

    Среда, 07 Мая 2014 г. 01:50 + в цитатник

    I gave a talk at Monitorama today about crontabber. (slides)

    My coworker tells me that I left out the part of “why you should care” about crontabber from my first few slides. So here’s a list:

    • Retries jobs on failure automatically
    • Dependency-aware, and won’t execute child jobs that depend on parents that have failed
    • Nagios integration including support for WARNINGs and CRITICALs, and configurable escalation from WARNING to CRITICAL (e.g. 3 WARNINGS == CRITICAL).

    Those three are probably the top features sysadmins who are not happy with how cron is managing jobs wish they had.

    Crontabber needs at least Python 2.6, Postgres 9.2, is FOSS and being used in production. We’ve used a version of the code since February 2013, and currently have the python module version you can install with pip install crontabber is currently running in our stage environment.

    Let us know what you think!

    http://www.chesnok.com/daily/2014/05/06/the-final-crontab-an-introduction-to-crontabber/?utm_source=rss&utm_medium=rss&utm_campaign=the-final-crontab-an-introduction-to-crontabber


    Joel Maher: Hey, SessionRestore- you have a Talos test

    Вторник, 06 Мая 2014 г. 23:10 + в цитатник

    As of last Friday bug 936630 landed so we now have sessionrestore (and sessionrestore_no_auto_restore) as 2 new tests in the Talos suite (posting results under they magic ‘o’ key on tbpl).  In fact we have already seen this test show improvements.

    Thanks to Yoric for creating these new tests, give him some karma on irc!  Please refer to the talos docs if you want more information on these tests.

     


    http://elvis314.wordpress.com/2014/05/06/hey-sessionrestore-you-have-a-talos-test/


    Kim Moir: Releng 2014 invited talks available

    Вторник, 06 Мая 2014 г. 22:40 + в цитатник
    On April 11,  there was a Releng workshop held at Google in Mountain View. The two keynote talks and panel at the end of the day were recorded and made available on the Talks at Google channel on YouTube.  Thank you Google!


    Moving to mobile: The challenges of moving from web to mobile releases, Chuck Rossi, Facebook https://www.youtube.com/watch?v=Nffzkkdq7GM



    Some interesting notes from Chuck's talk:
    • Facebook has more users on their beta apps than most companies have on their release apps.  Number one app for IOS, number one non-Google app for Android. They have more beta users on Android than most people have users.
    • There are three things we look act as software developers: features, quality, schedule.  As release engineers we focus on quality and schedule.  Because we ship on time.  New features can go in the next mobile release which is only four weeks in the future.
    • Developers have karma, if you release to many bad changes you lose karma.  Developers start out with four Karma stars.  You can only see you own karma.  The release engineering team can reduce your karma if you release too many breaking changes.
    • The release engineering team has a lot of respect within Facebook, they are the ones who determine if your feature gets in a release.   He notes that you should make sure that you work for a organization that respects you for your judgement and skillset as as release engineer. As an aside, it seems the release engineering at Facebook has responsibility that corresponds to release engineering + release management at Mozilla.
    • Compute power and storage are infinite at Facebook for their build and test infrastructure. It's not a contraint. 
    • They run 28 - 30,000 builds a day.  Wow.
    • They have a ui for developers to look at their build and test results called shrubbery. It looks like a fork of Mozilla's tbpl (Facebook's release engineering team has Mozilla alumni :-) They also run Buildbot as their continuous integration engine too.
    • Like Mozilla they have sheriffs to monitor builds but this role is rotated among the developer teams.  If you put developers on call, they will make it less likely that they will get paged by being more careful when releasing changes because they share your operational burden.
    • They have 17 apps to upload to the Google Play store.  In the presentation, he asked Google to provide and API to be able to do so. Right now they have to a person interact with the UI and press buttons for all these apps they need to upload. Very painful.  
    • 15 minutes to deploy a new (web) facebook.com. Of course, this doesn't happen all at once.  They deploy to a certain percentage of their users, and evaluate the data and then deploy to more users.
     
    The 10 Commandments of Release Engineering Dinah McNutt, Google


    Some notes from Dinah's talk. 
    • Release engineering is accelerating the path for development to operations
    • You want to be able to reproduce your build environment and source code management system if you have to recreate a very old build
    • Configuration management and release engineering as disciplines will probably merge as the next few years
    • Reproducibility is a virtue. Binaries don't belong in SCMs.  However, it's important to be able to reproduce binaries.  If you do need a repo with binaries, put them in a separate repo. 
    • Use the right tool for the job, you will have multiple tools.  Both commercial and open source.
    • View the job of a release engineer and making a developers job easier.  By setting up tooling and best practices.
    • Package management.  Provides auditing, upgrading, installation, removals. Tars and jars are not package managers.
    • You need to think about your upgrade process before you release 1.0.
    • Customers find problems we cannot find ourselves. Even if we're dogfooding.
    • As release engineers, step back and look at the big picture.  Look and see how we can make things better from a cost perspective so we have the resources we need to do our jobs.
    • It's a great year to be a release engineer. Dinah is the organizing committee for Release Engineering Summit June 20 in Philadelphia as part of USENIX. There is also one as a part of LISA in Seattle in November.  Overwhelming interest for a first time summit in terms of submissions!

    Stephanie Bellomo, one of my colleagues from the organizing committee for this workshop moderated the panel.  Really interesting discussions, well worth a listen.  I like that the first question of "What is your worst operational nightmare and how did you recover from it?"  I love war stories.

    As an aside, we charged $50 per attendee for this workshop.  We talked to other people who had organized similar events and they suggested this would be an appropriate fee.  I've read that if you don't charge a fee for an event, you have more no-shows on the day of the event because psychologically,  they attach a lesser value to the event since they didn't pay for it.  However, we didn't have many expenses to pay for the workshop other than speaker gifts, eventbrite fees and badges.  Google provided the venue and lunch, again, thank you for the sponsorship. So we donated $1,531.00 USD to each of the following organizations from the remaining proceeds.

    YearUp is an organization that in their words "Year Up empowers low-income young adults to go from poverty to professional careers in a single year."  I know Mozilla has partnered with YearUp to provide mentoring opportunities within the IT group and it was an amazing experience for all involved. 
     
    The second organization we donated to is the Tanzania Education Fund.  This organization was one that Stephany mentioned since she had colleagues that were involved with for many years.  They provide pre-school, elementary, secondary and high school education for students in Tanzania.   Secondary education is not publicly funded in Tanzania.  In addition, 50% of their students are girls, in an area where education for girls is given low priority.  Education is so important to empower people.

    Thanks to all those that attended and spoke at the workshop!

    http://relengofthenerds.blogspot.com/2014/05/invited-releng-2014-talks-online.html



    Поиск сообщений в rss_planet_mozilla
    Страницы: 472 ... 44 43 [42] 41 40 ..
    .. 1 Календарь