Mozilla Nederland LogoDe Nederlandse

Abonneren op feed Mozilla planet
Planet Mozilla -
Bijgewerkt: 16 uur 18 min geleden

Daniel Pocock: Skype outage? reSIProcate to the rescue!

ma, 21/09/2015 - 19:19

On Friday, the reSIProcate community released the latest beta of reSIProcate 1.10.0. One of the key features of the 1.10.x release series is support for presence (buddy/status lists) over SIP, the very thing that is currently out of action in Skype. This is just more proof that free software developers are always anticipating users' needs in advance.

reSIProcate 1.10.x also includes other cool things like support for PostgreSQL databases and Perfect Forward Secrecy on TLS.

Real free software has real answers

Unlike Skype, reSIProcate is genuine free software. You are free to run it yourself, on your own domain or corporate network, using the same service levels and support strategies that are important for you. That is real freedom.

Not sure where to start?

If you have deployed web servers and mail servers but you are not quite sure where to start deploying your own real-time communications system, please check out the RTC Quick Start Guide. You can read it online or download the PDF e-book.

Is your community SIP and XMPP enabled?

The Debian community has a federated SIP service, supporting standard SIP and WebRTC at for all Debian Developers. XMPP support was tested at DebConf15 and will be officially announced very soon now.

A similar service has been developed for the Fedora community and it is under evaluation at

Would you like to extend this concept to other free software and non-profit communities that you are involved in? If so, please feel free to contact me personally for advice about how you can replicate these successful initiatives. If your community has a Drupal web site, then you can install everything using packages and the DruCall module.

Comment and discuss

Please join the Free-RTC mailing list to discuss or comment

Categorieën: Mozilla-nl planet

The Servo Blog: These Weeks In Servo 34

ma, 21/09/2015 - 18:01

It’s been a long time! In the 16 weeks since the last “This Week in Servo,” we have:

Progress is amazing, and we apologize for the hiatus in this post!

New Contributors

Wow - 64 new contributors (4 per week)!


Github, looking nearly pixel-perfect!


All of the minutes of the (many!) missed meetings are available here.

Categorieën: Mozilla-nl planet

Armen Zambrano: Minimal job scheduling

ma, 21/09/2015 - 15:15
One of the biggest benefits of moving the scheduling into the tree is that you can adjust the decisions on what to schedule from within the tree.
As chmanchester and I were recently discussing, this is very important as we believe we can do much better on deciding what to schedule on try.
Currently, too many developers push to try with  -p all -u all (which schedules all platforms and all tests). It is understandable, it is the easiest way to reduce the risk of your change being backed out when it lands on one of the integration trees (e.g. mozilla-inbound).
In-tree scheduling analysisWhat if your changes would get analysed and we would determine the best educated guess set of platforms and test jobs required to test your changes in order to not be backed out on an integration tree?

For instance, when I push Mozharness changes to mozilla-inbound, I wish I could tell the system that I only need these set of platforms and not those other ones.
If everyone had the minimum amount of jobs added to their pushes, our systems would be able to return results faster (less load) and no one would need to take short cuts.
This would be the best approximation and we would need to fine tune the logic over time to get things as right as possible. We would need to find the right balance of some changes being backed out because we did not get the right scheduling on try and getting results faster for everyone.
Prioritized testsThere is already some code that chmanchester landed where we can tell the infrastructure to run a small set of tests based on files changed. In this case we hijack one of the jobs (e.g. mochitest-1) to run the most relevant tests to your changes which would can normally be tested on different chunks. Once the prioritized tests are run, we can run the remaining tests as we would normally do. Prioritized tests also applies to suites that are not chunked (run a subset of tests instead of all).

There are some UI problems in here that we would need to figure out with Treeherder and Buildbot.
Tiered testingSoon, we will have all technological pieces to create a multi tiered job scheduling system.

For instance, we could run things in this order (just a suggestion):
  • Builds
  • Prioritized tests (run in 5 to 15 mins)
  • Remaining tests in normal mode

This has the advantage of using prioritized tests as a canary job which would prevent running the remaining tests if we fail the canary (shorter) job.
Post minimal run (automatic) precise scheduling (manual)This is not specifically to scheduling the right thing automatically but to extending what gets scheduled automatically.
Imagine that you're not satisfied with what gets scheduled automatically and you would like to add more jobs (e.g. missing platforms or missing suites).You will be able to add those missing jobs later directly from Treeherder by selecting which jobs are missing.This will be possible once bug 1194830 lands.
NOTE: Mass scheduling (e.g. all mochitests across all platforms) would be a bit of a pain to do through Treeherder. We might want to do a second version of try-extender.

Creative Commons License
This work by Zambrano Gasparnian, Armen is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
Categorieën: Mozilla-nl planet

This Week In Rust: This Week in Rust 97

ma, 21/09/2015 - 06:00

Hello and welcome to another issue of This Week in Rust! Rust is a systems language pursuing the trifecta: safety, concurrency, and speed. This is a weekly summary of its progress and community. Want something mentioned? Tweet us at @ThisWeekInRust or send us an email! Want to get involved? We love contributions.

This Week in Rust is openly developed on GitHub. If you find any errors in this week's issue, please submit a PR.

This week's edition was edited by: nasa42 and llogiq.

Updates from Rust Community News & Blog Posts Notable New Crates
  • rustlings. Small exercises to get you used to reading and writing Rust code. Includes practice reading and responding to compiler messages!
  • LALRPOP - an LR(1) parser generator for Rust.
  • Cuprum Pi. A GPIO access library written on Rust for the Raspberry Pi.
  • hostblock. Rust cli app for managing sites blocked via the hosts file.
  • Tokei. A CLOC (Count Lines Of Code) program, written in Rust.
  • Tab completions for rustc and cargo in fish shell.
  • rust-xdg. A library that makes it easy to follow the X Desktop Group specifications.
Updates from Rust Core

116 pull requests were merged in the last week.

Notable changes New Contributors
  • Bastien Dejean
  • Colin Wallace
  • David Szotten
  • Dongie Agnir
  • Michael McConville
  • Peter Reid
  • whitequark
Approved RFCs

Changes to Rust follow the Rust RFC (request for comments) process. These are the RFCs that were approved for implementation this week:

Final Comment Period

Every week the team announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now. This week's FCPs are:

New RFCs Upcoming Events

If you are running a Rust event please add it to the calendar to get it mentioned here. Email Erick Tryzelaar or Brian Anderson for access.

fn work(on: RustProject) -> Money

No jobs listed for this week. Tweet us at @ThisWeekInRust to get your job offers listed here!

Crate of the Week

This is a new part of this weekly installation, where we will write about a crate that some of you may not know. Please nominate a crate of your choice at the rust-users thread so we can write about it next week.

This week, Crate of the Week is lazy_static. Thanks go to stebalien for the suggestion.

This week's Crate of the Week does something some won't know is possible, and does it in a natural way. You know how in some languages you have to run through hoops to correctly lazily instantiate stuff? Not in Rust, for thanks to the lazy_static crate you just put your static values inside a lazy_static! { ... } block, pay a modest runtime cost on lookup and be done.

Btw, this aligns very well with the C++ adage "... and what you pay for, you couldn't have written any better".

Quote of the Week

Transmute is taking a dog, sawing its front legs off, gluing on a pair of buffalo wings and telling it it's a duck so it damn well better start quacking You should not be surprised when you end up with a pile of gore and a dead dog instead of an actual duck :-P — Quxxy

Thanks to Ms2ger for the tip. Submit your quotes for next week!.

Categorieën: Mozilla-nl planet

Pomax: "Tell me what some of your strengths are..."

ma, 21/09/2015 - 02:46

Last week I attended a work seminar on discovering your personal strengths and how to identify and curtail stress behaviour. Let me just give the summary first:

Yes, it was incredibly useful, and I'd urge you to do something similar if you haven't yet.

Know yourself

The main point is to learn what you're good at, so that you can focus your efforts into further developing skills that fall in categories related to where you are at your strongest.

Yes, you might like doing a million different things, but if you really want to develop yourself, find out which few you're really going to be good at, and exploit that. Not necessarily give up on the others, just make sure you focus on the ones that really come to you naturally.

At the same time, know how you react when you get driven into a corner. Some of us are naturals at personal development, most of us are not, and the great thing about attending a seminar like this is that you get exposed to some of the psychology behind a few major generic personalities. For instance, here's my list of "strengths", spread over two categories:

Strategic thinking:

  1. Input: "you crave to know more, and like to collect information and archive it".
  2. Learner: "you have a great desire to learn and continuously improve. In particular, learning, rather than the outcome, excites you".
  3. Intellection: "you are characterized by your intellectual activity. you're introspective, and appreciate intellectual discussions".

Relationship building:

  1. Relator: "you enjoy building close relationships, and find deep satisfaction in working hard with friends to achieve goals".
  2. Connectedness: "you think all things are connected and don't believe in coincidence. almost every event has a reason".

And here's the thing: based on their simple definitions, not all of these strengths make a lot of sense. Thankfully, there are individualised descriptions of what each of these strengths mean, and so things start to make a lot more sense, and rather than "fortune cookie" information, one can actually learn something meaningful.

Meaningful descriptors

The seminar I attended used the Clifton Strengthsfinder 2.0 test, based on data by Gallup gathered over quite a few years from over 100,000 participants. I like science, and if this data is going to say something "about me", then that's at least a decent sample size.

No, of course the predictions won't be perfect, but it'll be good enough to act as starting point to acknowledge your own strengths and personality type, and exploit the strengths while working on minimizing the reactionary tendencies. So: who am I?

Strategic thinking: Input

I like information. I like learning new things, and learning about new things, but I don't particularly care about archiving, because I trust my brain to do that for me without having to bother with it. So what does "input" really mean?

Chances are good that you can simplify the most complex, convoluted, or intricate procedure. People usually rely on you to offer clear and easy-to-comprehend explanations. Driven by your talents, you may notice that certain people turn to you for guidance. Maybe your willingness to share the knowledge you have gained over the years partially explains the fondness they have for you. Some individuals might have benefited from what you have read, observed, or experienced. It’s very likely that you frequently use academic-sounding words to talk about your ideas or areas of expertise. You intentionally spend time broadening your vocabulary by looking up words in the dictionary and committing their meanings to memory. By nature, you occasionally combine your fascination for reading with your ability to figure out what sets specific individuals apart from everyone else. You might discover the things that interest someone. Then you may read more about these topics. Perhaps you aim to collect insights that inspire the person to take advantage of his or her one-of-akind talents, knowledge, and/or skills. Because of your strengths, you might gather ideas and information from reading publications that keep you up to date on particular types of current events. What you choose to peruse — that is, examine studiously — may reflect some of your personal or professional interests.

That makes a bit more sense than the generic summary. It also offers far more footholds when it comes to aspects of this strength that can be relied or built on.

Strategic thinking: Learner

I won't lie: I liked seeing this strength. I do very much enjoy learning new things, and seeing this as one of my strengths was basically one of those "yep, I knew it" moments. However, "I like to learn new things" is a pretty generic strength, so seeing the much bigger analysis was quite useful:

Instinctively, you endorse the importance of acquiring additional knowledge and gaining new skills. You regard education as an ongoing activity. It’s very likely that you occasionally collect bits and pieces of information. At the time, the value of this material may not be apparent. In specific cases, you have found it useful to turn to some specialists for help. Perhaps these individuals can provide you with enough direction so you can ask some questions, render a few decisions, or try to map courses of action without upsetting anyone in the process. You avoid angering certain people by consulting with them before doing anything. Driven by your talents, you may long to gather certain types of information about specific individuals. Perhaps your “need to know” is rarely satisfied. The more facts you gather, the easier it might be for you to understand someone’s strengths, limitations, interests, likes, dislikes, or goals. You might be inclined to study human beings one by one. To some degree, your ongoing observations of selected individuals provide you with interesting insights into human nature. By nature, you intentionally include uncommon, highly technical, or sophisticated words in your vocabulary. You realize that language is a form of knowledge that gives you an upper hand — that is, controlling power — in conversations, debates, or discussions. It quickly establishes you as an authority figure in listeners’ minds. First, you capture their attention. Then you take charge of events, projects, meetings, or problem solving. Chances are good that you may be a solo performer. You might be determined to broaden your knowledge or acquire new skills. Perhaps you are drawn to the process of education.

And there you have it. Pretty much all of this rings true. And yes, on their own each of these phrases sound like a horoscope, but it's not the individual phrases that form the strength, it's the collection of all of them, applicable to this person.

I'm okay with this.

Strategic thinking: Intellection

This strength feels a little weird, because it's hard to go "why yes, I am intellectual" and not come off smug. The main problem is that "intellectual" and "smart" are often treated as the same thing, and in this particular case, they're not. I could give lots of examples, but instead it just makes far more sense to let the snippets do the talking:

Chances are good that you sometimes wish you could switch off your active brain. Even so, you may enjoy your time alone as you ponder ideas. Perhaps you want to test whether they make sense. Because of your strengths, you may be selective about the types of books or publications you read. They might contain information or tips that you can share with individuals you are training. Perhaps imparting knowledge, talking about your experiences, or passing along your skills gives you a certain degree of satisfaction. By nature, you may find it easier to befriend certain types of people if they tell you what they want to accomplish. Knowing that much, you might read some books, journals, newspapers, correspondence, or Internet sites to broaden your knowledge about their interests. When you can share information that helps people move closer to their goals, perhaps you can begin to understand each other a little better. It’s very likely that you eagerly welcome opportunities to think out loud about ideas, theories, or philosophies. You derive pleasure from conversations that force you to ponder matters that exist only in the realm of thought, not in reality. Driven by your talents, you sometimes delight in having your very own tasks to perform. Perhaps you like to solo because it gives you quiet time to reflect on what you think or feel. Maybe you consider what you have done, are doing, or can do better.

Relationship building: Relator

This one confused me, because while I like deep relationships, I'm perfectly fine with shallow ones, too. The generic description didn't seem to match at all, but the detailed one certainly did:

By nature, you are naturally open and honest about who you are, what you have done, what you can do, and what you cannot do. Your straightforward explanations and stories help listeners see you as you see yourself. You reveal your strengths and limitations. You are forthright and plainspoken. People generally seek your company and want to work with you. Many are impelled to move into action by your words and examples. It’s very likely that you periodically are sought out by people whom you have befriended. They may trust you when you have taken time to know them individually. This may partially explain why certain people come back again and again for ideas or suggestions. They might realize you try to tailor your words of wisdom to fit their unique situations, needs, strengths, limitations, goals, or personalities. Driven by your talents, you may be convinced that you are measuring up to your potential. Perhaps you know when you are doing your best work or earning the highest grades you possibly can. Chances are good that you occasionally tell yourself that you are an effective mentor or trainer. Perhaps individuals benefit from the investment you make in them. Because of your strengths, you might do your best training after you become well-acquainted with someone. Perhaps you want to discover each individual’s unique talents, work style, goals, motivations, or interests. Maybe these insights tell you what suggestions to make or what tips to offer during coaching sessions.

In fact, this very blog post is essentially proof of how true this assessment is: I'm right now telling you about something that a lot of people would consider pretty personal, and that last bit pretty much underlines how I even started this post: learning about different personalities and strengths, and how to work with those in oneself and other people, is fascinating, as well as functionally useful.

Relationship Building: Connectedness

And this one was a genuine surprise, at least based on the generic descriptions. It sounds very much like a "faith in the oneness of all things", which really doesn't describe my take on matters at all. I believe in a quantum universe (at least, for now. Physics is still developing), and while I don't believe in "coincidence", I also don't analyse things from just one perspective, and so the notion of "a coincidence" doesn't even make sense to me. There are so many different perspectives on single events that are all simultaneously in effect that even if you'd pretend there was a coincidence in one of those, that same coincidence would vanish in others. This strength felt like nonsense. But then this more personalised description actually made it make sense:

By nature, you may get to know people individually in your quest to gain wisdom. Discovering the qualities that distinguish someone from everyone else might be an essential aspect of your search for truth. Driven by your talents, you might be fascinated with certain ideas, policies, or philosophies that affect human beings around the world. Because of your strengths, you may be able to accept unpredictable events in your life on the basis of sheer faith. Perhaps you sense there is a force greater than you at work in the world. Occasionally you can live with not knowing the exact reason why something good or bad happened to you and not to someone else. Chances are good that you sometimes think like a detective. You might search for and find obvious and not-so-obvious clues. You might determine which ones link together. Now and then, you notice gaps in your investigation. Some of these cannot be explained using reason alone. You may feel comfortable accepting what is unknown and unknowable. Why? To some extent, you trust that everything, everyone, and every action is somehow intertwined. Instinctively, you may be determined to make the acquaintance of certain individuals you identify as seekers of truth. Perhaps you are attracted to people who ponder philosophical questions such as “What is the meaning of life?” or “What is beauty?” or “What constitutes wisdom?” or “Why do bad things happen to good people?” or “Why should ordinary people like me even ask these kinds of questions?”

Reading this, it basically reads as a description of being a university student who's taking a masters in A.I. which happens to be exactly who I was, and whose intellectual inheritance I still live today.

Weaknesses: the reactionary side of things

For the purposes of the seminar, when people get put on the spot, and stressed to a breaking point, the behaviour they might display is broadly categorised in three possible ways:

  1. Complying: giving away the control over the situation and taking it from there.
  2. Protecting: walking away from the situation to protect oneself.
  3. Controlling: going into "getting shit done" mode and steamrolling anyone who doesn't do so as well.

Those are just words with short descriptors, and people often enough display more than one type of behaviour, depending on the situation. However, I know myself reasonably well in this respect, and I'm virtually always protecting:

I will turn off any emotional attachment, and deal with problems in what is best described as "the vulcan way". I've certainly been abrasively critical in the past often enough for it to rub people the wrong way, and I've been trying to get better at not being abrasive, but a seminar like this is a great supplement to introspection: it puts what you sort of already thought into a wider perspective, and most importantly gives you insight into how the way you behave under stress will affect others who are also operating under stress.

If I'm stressed, and the person I'm dealing with is stressed as well (and for whatever reason. Not strictly work), then if they're of a complying nature, we're going to have problems. Because they'll want a resolution, and I'll be offering criticism without solutions. That won't get us anywhere, except "more stuck". Similarly, if they're controlling, they'll be coming up with what solution works, and I'll just shoot it right back down. And that's just the "practical" result, emotionally there's a lot of potential for resentment both ways, and things can get very nasty.

"So tell us some of your strengths..."

You know that question you get at job interviews, where they want to know what your strengths and weaknesses are? This is what they're talking about. This is why I'd recommend everyone to take a seminar like this even if you're between jobs, or even if you've yet to start on your first one. There's "knowing what you're good at", and there's "knowing the strengths that you can build on and exploit", and they're two different things. The first most people develop naturally, by virtue of just doing what they do. The second, everyone can use some help with.

It also lets you know what you're not. That sounds a little weird, because there's an infinite world of infinite possibilities out there, but there're broadly speaking four categories of personalities and strengths that you want as part of an effective team, and a team made entirely of "learners" isn't going to be very useful. Fun, probably, but not something that makes business sense.

I fall in the strategic thinking and relationship building categories. That means that if I'm put on a team, my contribution plays off of having other people with different skills: people with execution skills to keep us on track and meet deadlines, and people with influence skills to get the most out of all the team members as well as facilitate negotiations within the team. Also, having a good spread of different "reactionary" behaviours helps to make sure no one "agrees to be stuck in a rut". Obviously no one likes being stuck, but if we're all the same kind of reactionaries, things go real bad, real fast. Much faster than if there's a good spread.

The take-home message

For me, the take-home message from this seminar was that it's really useful to do a thing like this at least once, even if you don't have a job right now, or you think you know yourself: if you've never done a personal strengths test before then chances are good you think you know what you're good at, and you might know what makes your temper-self so problematic, but there is great value in seeing things affirmed, or even being shown that there are parts of you that you never thought about, but ring very close to home: knowing yourself is not just something that helps you, it also helps others work, or just be, with you.

I've been paired up with a "buddy", and we'll be holding each other accountable for the action plan we've drawn up on how to work on our weaknesses while also trying to focus on what we think are our most exploitable strengths. That probably sounds pretty lame, but at the same time, it's two people being committed to helping each other better themselves in a "no judging" relationship.

That's a pretty sweet outcome for a seminar called "Leadership Discovery".

Categorieën: Mozilla-nl planet

Cameron Kaiser: 38.3.0 available

zo, 20/09/2015 - 07:45
But first: check out the stylin' official Mozilla add-on shirt I got!

Try as I might, however, I could not find any XUL in it (there is no XUL, only WebExtensions).

TenFourFox 38.3.0 is now available for testing (release notes, hashes, downloads). Currently I'm tracking two confirmed bugs and one questionable one, none of which are fully fixed yet. We have an issue with what appears to be exact rooting and may be partially a compiler bug, but I can only reproduce it on Github, and only specifically with one particular operation. The patch I added to 38.3.0 seems to wallpaper the intermittent crash that can result from it though not the incorrect behaviour it causes with the JITs (but it does restore correct behaviour with the naked interpreter, which was not the case in 38.2.x), although I don't think this is the cause of some of the unreproducible crashes a few people have reported -- YMMV. In addition, the new jsonlz4 compressed JSON bookmark backup format seems to be bogus despite setting all the proper endian options near as I can tell, so I'm not sure why it's writing invalid data. If I can't figure this out, forcing it to save uncompressed backups a la TenFourFox 31 should not be exceptionally hard. The remaining questionable bug allegedly has to do with modal drop-down-sheet requesters becoming unresponsive, which in turn makes the browser halt (more accurately it goes into a loop where it ignores other events), but I can't get it to do so reliably. Because of these issues, official MP3 support is still delayed for the time being.

Disabling incremental garbage collection in lieu of periodic full collections of the tenured heap appears to be a mixed bag with respect to performance. Although it was a win on my systems, a few of you reported it made them somewhat worse, and not enough people reported a difference to really outweigh them. You can still consider trying it on your own Power Mac and seeing if that helps, but I've abandoned this line of enhancement for the time being and it remains enabled by default in 38.3. As always, the browser goes live on Monday evening Pacific time.

I've been slack on some other fun posts and I'll try to catch up on those soon as my situation permits.

Categorieën: Mozilla-nl planet

Pomax: Mozilla released a tool I am excited about.

zo, 20/09/2015 - 00:02

tl,dr: you should have a look at, and if you think "this is just a fancy jsbin", challenge yourself to first read, which explains in detail how this is nothing like the other "single tool sites" we had on the web until pretty much this month.

With that said, Thimble has a larger story here for me, personally, and I'd like to tell you that story so that you might understand why I am genuinely excited about this tool.

Once upon a time, I was a Java developer.

In a round-about way, my first "being a programmer" identity started in University. As a kid I'd written things in Basic and Turbo Pascal, but it wasn't until University that I was taught how to write structured programs that were more than utilities or silly time wasters.

My first "real programming" kicked in about three years into my AI education, when we were taking a 10 credit course that involved working on real world AI applications, I worked on a java code base for running distributed sensors backed by software agents that collaborated on performing Bayesian reasoning about signal sources. It was interesting, and after the course was done, landed me my first student job continuing my work on it. I ended up designing the code architecture, which ended up landing me my first permanent job, and ultimately gave me a subject I could do a master's thesis on (yes, that's the order things happened in).

Of course I was still programming my own things in my spare time, as well as maintaining some websites (most notably and when a friend mentioned doing some log visualisations using a language called "Processing" (which is the worst name for a programming language that wants to be searchable on the internet btw), I figured I'd have a look at what this mystery language was.

As it turned out, I really liked Processing: it was like Java, but with more freedom: a simpler modeling concept, "global unless you enclose it" functions, immediate execution of code in an imperfect editor (the "PDE") that was good enough to write quick, super sweet visual things. What's more there was even a JavaScript port available, for running your pde files online. Not as Java Applets, but just "as content".

I ended up using Processing enough that I started running into annoying inconsistencies, or even bugs, in the Processing.js port, and being familiar with IRC I jumped into the #processing.js channel on and started complaining whenever things didn't work. In some places, that gets you kicked out of a channel, but in this one, a user called "humph" flipped my complaints around and threw them back at me as suggestions on how bugs could be filed, discussed, and fixed, instead. Without knowing it, I was getting a lesson in how to be a member of a community, and it worked.

My life in today's definition of open source really started there: I started filing bugs, I knew JavaScript well enough to write code for web pages, but the kind of JS needed to write Processing.js was different, so I started learning more about JS as I tried to figure out problems in Processing.js, and at some point decided I knew enough that I could patch problems when I ran into them, with a community of devs that were kind enough to help me through the process of getting those patches submitted and landed into the main codebase. I ended up, I think it's fair to say, a major contributor to Processing.js, I moved from the Netherlands to Canada and went from Java developer to freelance web dev with a love of JS, and that's where this story turns into my involvement with Mozilla.

"I want to put a team together."

I can't talk about humph, or really, Dave Humphrey, without a certain amount of adoration (and that is a well-considered word).

If you haven't heard of Dave, he's a Professor of Open Source with ties to Mozilla, teaching at CDOT, at Seneca College in Toronto, and if you use Firefox, there's a good chance you've enjoyed his work. Dave, to me, is in the category of people who look at something and go "what, 2 years from now, is a thing I want to be taking for granted as available and usable, that isn't there right now". And then, unlike many people, doesn't just blog about it, but sits down and figures out how to make it happen. The part that earns him my adoration is that one of his approaches is to inspire others to do the work, because he has the singular ability to explain his ideas in ways that hold up, and make you excited about the prospect of them becoming reality.

And he was thinking of "a thing" that would require getting some people together to make it happen. Needless to say, he had my attention.

Dave had been linking me to blog posts about making the web about "making" instead of "consuming" by a guy called "Mark Surman" every now and then, and while I'd never heard of the man, his posts made a lot of sense. It wasn't until Dave explain his idea to me that things clicked: Mark Surman was the director of the Mozilla Foundation, and the idea that Dave had was a project to foster "making on the web" through a Mozilla Foundation initiative that you might have heard of.


In 2012, I joined a tiny Mozilla Foundation.

I applied to the Mozilla Foundation as a software engineer when it was pretty small. Certainly not "5 people and a goat" levels of small, but when I joined, Ryan Merkley was still with the foundation with the explicit goal of growing it to self-sustaining size, and while I had initially expected to work on "Popcorn Maker", an online video mashup/remixing tool spearheaded by the fascinating Brett Gaylor (from Do Not Track fame), I instead ended up working on a project that was about letting people write HTML in a friendly way, to allow them to learn HTML while also making things they wanted to make on the web.

For quite a few months there was no name, and initially the "webmaker" name applied only to this particular tool, but as we folded more tools into the offering (popcorn maker and the "x-ray goggles", most notably), the overarching program became "Webmaker", and the tool that I was involved with became "Thimble". It was an interesting thing to work on: I learned a ton about patterns and antipatterns in the JavaScript world, and despite the tool being a single page editor, people responded positively. Thimble empowered people on the web in a way that they hadn't been until then, and that made it really important.

But, as a developer, I wouldn't use it myself.

In the same way that I won't do my job using jsbin or jsfiddle or codepen as tools, Thimble was too simple to address the needs of "everyone". It was great for sitting down to with someone, and running them through a "zero to hero!" process where they walked away from the experience with the ability to create simple HTML pages for their own, personal content, and a way to put that content on the web (outside of social media postings), but there was no reason to ever use it if you already knew HTML and CSS and JS, and certainly not if you were a developer.

Thimble got upgraded quite a bit...

After a year of Thimble, as well as several other tools being part of the Webmaker offering, we made a decision to give a new technology called Node.js a shot at the Foundation. As a JavaScript server side technology, it offered the benefits of "the same language everywhere", rather than the "JS in the browser, Python on the server" that we'd been using until then, and we quickly learned how to use Node.js and Express (in no small part thanks to jbuck, who did a phenomenal job at giving an hour and a half lecture on how to go from an empty file to a fully functional Express server, following best practices), and in the process rewrote parts of our tools to take advantage of the fact that everything could be done in JavaScript.

We were able to add features and fix bugs much quicker than before, and we ended up releasing updates almost as fast as we could land bugs. But the Thimble tool stayed relatively samey: yes, there was progressively better support for error reporting in HTML and CSS, and we figured out how to safely allow script execution, so that people could write "real" web pages, but they were still just single pages.

With the help of Tom Park from Drexel University we came up with a way to present not just an editor but also a tutorial system, so that using Thimble for educational purposes would be easier, but ultimately it was still just single pages.

This was not a tool that would work for everyone.

The problem with Thimble, and I'm making it sound like one but for the purpose of Thimble it mostly wasn't, was that it was aimed at an audience that I wasn't part of. In my professional life, I could do everything Thimble did, better, in tools I already had at my disposal on my computers. A desktop code editor and a browser gave me more power than the single flat file concept Thimble operated on, and so I would still use Thimble to teach people, but that was it.

There were always ideas. "Wouldn't it be great if Thimble was like a real editor, but friendly when it needed to be, while being progressively less 'teaching tool' and more a real development tool as you level up your skills". It would be great. But we couldn't make that tool. Having the tool work for educational setting was more important than spending time on making it better for a group of people who already had tools at their disposal.

That makes sense, and that makes what makes the end of this story even more remarkable.

Atom, Brackets, and Thimble; Oh my!

Sever-side JavaScript did more than just skyrocket Node.js's popularity: it also allowed for some headless browser experiments that ended up spawning "pure JS" code editors. code editors called Atom and Brackets hit the scene, being experiments on using a headless browser as a UI framework, and using pure JS as the editor engine. Presented as normal desktop applications, but "powered by the web", there was a lot of love for these new flavours of code editors.

But: if they ran in a headless browser, there wasn't any real reason why they shouldn't be able to, at least in principal, run in real browsers, online.

And that's where Dave showed his genius: he took Adobe's "Brackets" editor, and at MozFest 2013 showed off that it might be possible to put it in the browser, and use it as the code editing part of Thimble, rather than relying on codemirror, so that people would have all the power of a true code editor at their disposal. There was a confluence of technologies that he knew of that could take "making things on the web" to a whole new level, and listening to him describe it, it was the kind of thing I wanted to use.

Imagine opening a code editor with file management, running a localhost server for proper http:// protocol testing, and a browser with live reloading so you could see the results instantly. As a dev, that sounds a lot like how I do my work already.

Now imagine not doing those things separately because the browser just does all those things. A true file system, a true code editor, a true zero-conf HTTP server, true live reloading, all of it, just working. No questions asked. Start it up, and it all just... works.

To me, that's the future. And that's what Dave was suggesting was possible. If we could put in the time to make it work.

Sometimes, tough choices aren't fun

Unfortunately, we didn't have the man hours to make that happen. I really, really loved the idea, but we didn't have the time or the people to stop working on Webmaker, and the Thimble we already had, and instead work on this new thing. This made me sad: it felt like we were focusing on the wrong things by sticking with the Thimble we had. Imagine growing up in a country rife with corruption, and discovering "Norway" is a real thing: while Thimble was still the same tool it had been before, I had seen a glimpse of what it could be, and how much better that was, and simply knowing that the technology allowed for this amazing thing, devalued the Thimble we worked on for me, instead.

Fortunately, the Mozilla Foundation is about fostering a "maker attitude" on the web, and promoting digital literacy, not "maintaining a set of tools in perpetuity" and even though Thimble was a tool that helped people express themselves creatively on the web, while learning about how the web works, we were constantly looking at what else we could do, or what we could do instead, to instill those core ideas in people, but not necessarily with the same tools all the time. We came up with Appmaker, which allowed people to make web apps, using web technologies - it was fun, it ended up not working as well as we'd hoped, and so we tried something else. We took the lessons we learned and made a page builder that used templates to allow people to make simple pages that also worked as apps on platforms that supported WebApps (like Android and Firefox OS).

We looked at the world, and saw a significant part of the world experiencing massive friction between "what the web can do", and "how it was experienced": over a billion people are slowly coming online all over the world right now (even in places like Europe or the US), and the only "internet" they get is through preinstalled apps on their phone; they use Facebook, Twitter, Instagram, but not a browser, that supposedly ubiquitous gateway to the world wide web. The browser is supposed to open up the whole wide world to you, whereas branded apps like Facebook's client are like the CompuServe and AOL of days gone by; you get content presented in one way. Their way.

This is not a good thing, and so we changed what the app we made could do, transforming it into an Android app (available in the Play Store for free) that lets you build simple multi-view websites with text, images, and navigation buttons, to cater to the needs of the people we talked to in the various countries in the world where internet connectivity is starting to boom. It's not done, but the response from people for whom the app makes sense because they've been getting, effectively, locked-in devices has been great.

At the same time, we deprecated the tools we had been using for the last few years, moving some to new homes and retiring others. And that's where this story comes full circle:

We killed off Thimble. And replaced it with Thimble.

Letting others do the work you can't

I'm going to borrow a page out of Dave's book, and profess my enthusiasm for the "let others do the work when you can't do it" doctrine, even though it's a bit of a boomerang: while we were doing all this at the Mozilla Foundation, various people were working on the various technologies that could be glued together as the kind of vision-of-the-future Thimble that Dave had talked about in 2013.

Alan Kligman developed a POSIX filesystem that ran on top of IndexDB, Dave had been working on getting Brackets itself to work in the browser, the web itself had landed, or had in draft, several new technologies that made data management and communication between processes, documents, and service workers easier, and eventually everything was available for Dave to put together a team of students and see if they could combine everything into the kind of Thimble I had been hoping for since Dave showed me Brackets.

On Monday, August 31st 2015, that thing officially became real.

the new Thimble is a dream tool, and I love it

Here's a true thing: the day the new Thimble got announced, I stopped using jsbin, jsfiddle, codepen, and all those other "make a quick html/css/js thing online" tools. Overnight, they had become obsolete. Anything I used them for could be done better in the new Thimble, and where jsbin or codepen let me be creative in a "single thing", the new Thimble lets me be creative without a ceiling. It's simplified the tools necessary to have a live server running with a full file system at my fingertips to "just open", and I can make things as simple or as complicated as I want.

It's a true code editor that I can use to make as many files, in as many directories, as I need to properly organize and work on my code. There is undo/redo, but I don't ever have to hit save: my changes are synced by the extremely clever file system that Thimble runs on top of. It has an invisible zero-conf webserver running in the browser that shows me the result of what I'm writing right next to the content I'm working on. I no longer need a live-server or a python -m SimpleHTTPServer anymore, it's all just there.

And here's a thing I didn't even think I would say as a developer: thanks to the new Thimble just... working, I don't even need git anymore.

No, I don't get revision control (though really, "I don't get revision control yet", because remember that the current is really just a Minimum Viable Product launch: we've only just begun to see what it can do, and now is that time to start dreaming about fancy features), but I can write my code, publish it to the web for free, and have people be able to see the code I used because they can click a button to fire up thimble with my project loaded up as a forked copy for themselves.

If I just want to write some Proof of Concept code, or demonstrator code for an article I'm writing, or example code for something I'm explaining to someone online that might be useful later on, I don't need to set up a git repo, with a gh-pages branch. I can just work in Thimble, hit "publish" (which will update what is online if I'm republishing the same project, with changes) and move my attention elsewhere in the knowledge that my stuff's been updated online for everyone to play with, and my code's safe and sound on a Mozilla server somewhere. And any time I want to dive "deeper", I can just tell Thimble to export my entire filesystem as a .zip file, and then do whatever I feel I need to do.

The new Thimble is taking away the need for tools I thought were essential in my life.

I honestly think that's the most impactful statement I can make here. Thimble is solving problems I didn't know I had, and that makes me super happy, and excited about the future.

So, in conclusion:

Go try out the new, and let the team know what you think of it, and what you can imagine as, in the future, being obvious things you already use it for, that it can't do today.

Thanks for reading, and I need to be off to write code for my next blog post on writing fonts as source code. I already have Thimble open in another tab with demonstrator code doing amazing things.

Categorieën: Mozilla-nl planet