A Simple Way to Plan a Club Meeting

In this post we'll share how we organize our meetings here at the Rio Mozilla Club, you can use, remix and adapt this to your own setting.

We have two types of activities going on during one of our club meetings.

  • Micro-activities: these are quite simple and only require a flip-chart, sharpie pens or similar and post-it notes. They usually take about 5 minutes to complete.
  • Activities: these are the same activities you find at the Web Literacy Basics curriculum. Most activities take about 1 hour to complete.

In our events we tend to do a little roller-coaster ride oscillating between micro-activities and full activities to keep the rythim cool.

Read More →

Sep 10 2015

Why Teach The Web?

Digital Inclusion

There is a lot of talk about digital inclusion in Brazil and in general people are supportive about it but we don't always stop to think about why it is important. There are those that think that digital inclusion is only a way to add value to your resumé so to become a more interesting hire, I disagree with this notion because I believe that digital inclusion goes way beyond professional opportunities.

For a real digital inclusion we need to talk about a bit about web literacy. In Portuguese we have two distinct concepts to use when talking about literacy. We call alphabetization the techniques of reading and writing and literacy the social practice involving those techniques. Someone who is alphabetized might not have literacy the same way an knowledgeable person might not be wise. The current web situation is similar to an old epoch when alphabetization was not wide spread and literacy was even less accessible. A time where scribes had domain over technique and common folk where unable to preserve their voices to future generations. The great majority of people experience a disconnected situation regarding their web usage, they are able to use part of the web but are unable to truly understand what is happening behind the scenes and they do not possess the techniques to put their own creations online.

The Web is the only mass communication media where the public is able to distribute their own content.

While on TV, radio and press, the democratic and accessible distribution of content is not possible. On the Web such distribution is a cybercafe away. Even without your own computer, you can still interact and benefit from the Web from libraries, schools and cybercafes. Teaching people how to use the Web both as readers and content producers is an essential factor for participation in the 21st century. Imagine living in a world where people knew how to read but only 10% of the people knew how to write. This is the kind of world we live now regarding Web usage. Knowing the basics about writing is important even if you don't have aspirations of becoming a bestseller author immortalized in classic collections for the next couple centuries. In this brief article we'll talk a bit about some interesting consequences of web literacy.

Consumers Become Content Producers

From the moment people realize that there is a Web beyond Facebook and YouTUBE, a whole new world of opportunities appears. Stuff such as understanding that not all online content is true (aka understanding about credibility online); learning to spot when the content might be harmful to you or your machine (aka understanding about security, privacy, scams, etc); discovering new content sources and opportunities for online learning and going through the infinite number of new possible human relationships established all around the world because on the Web physical distance no longer matter as much as it did in the physical world.

This all becomes possible once the users understand more about the working and usage of the World Wide Web. Once they learn how to make the Web then we have even more magical consequences:

A Web made by everyone for everyone!

The Web starts to look more like the people producing the content. The Web is a kaleidoscope that takes form from collective action. The people who were only consuming media now start producing content and their voices, experiences, wishes, start to shape a part of the Web. This is how we build a more diverse World Wide Web.

Local Content

Once everyone is placing their voices online we start to have more local content. Sometimes what is relevant for you, your neighborhood or your social group, is not what is being broadcast on the TV or Radio. In a community of web makers, local content rises up and instead of simply consuming content produced elsewhere, we start seeing things closer to us which affect our daily lives.

Local content is primordial for online civic participation. From claiming your rights to denouncing irregularities, from advertising your new business or even telling stores about the local folklore. Creating local content is not only about the present but also about the memory preservation of the region. It is about what happened, what is happening, and what we want to happen.

Only when people place their voices online that the rest of the world can listen to what they have to say.

Creating Your Own Solutions (aka DIY)

Someone who knows how to cook doesn't need to go out everyday to eat or depend on someone to prepare their food. Someone who knows how to make web stuff doesn't necessarily requires third-party systems to build and distribute their content or hire a web designer every time they want to place something online. Knowing how to cook has not eliminated the restaurant business just like knowing how to do web stuff will not eliminate the jobs of professional web developers and designers.

Solving little problems is an important part of being the master of your own online fate. Its about agency and being able to craft something that solves your needs. Solving simple tasks such as:

  • Crafting a small contact page for your company intranet;
  • Building that gallery page with photos and videos of the new family member and inviting your friends to the party;
  • Advertising your own business and establishing a web presence;
  • Creating a simple online form to schedule clients on your new beauty saloon;

There are uncountable issues/tasks on our daily lives in which the solution may pass through building a simple creation on the web.

Even in situations where it is necessary (or desired) to hire a web professional, you will be in a much better position to discuss the situation, and its requirements, if you understand how the web works. Its like going to a car mechanic knowing how engine works. It is a really different experience than going there without any prior knowledge.

Opportunities for Life Transformation

The web holds more potential for generating opportunities than any other mass media communication channel or knowledge repository available. Online courses are a way to improve your resumé and get your first job. Common interest groups might be the beginning of a new business opportunity. Many couples met online for the first time. We can't tell what opportunities will be available to everyone but we can tell that everyone that decides to jump in the web discovers a whole new world.

Its like learning to read and write and then being able to read books, send instant messages, understand contracts and leave tales for future generations. The Web contains a fountain of knowledge, an archipelago of possible relationships and interconnections that no other medium has. Its on your computer, your smartphone, your neighborhood cybercafe, your school lab and on TV. The possibilities of the Web can't be summarized on a simple article because the Web is our own creation and like us it is in constant mutation and evolution.

Teach It Forward

The coolest thing is that people can learn a lot about the web from each other. There is no need for bachelor courses (nothing against bachelor courses, they are great), you just need to sit together with someone who knows a bit more than you and exchange experiences and knowledge. The informal learning system created by Mozilla known as Webmaker teaches the Web using informal learning workshops and participatory processes where mentors work side by side with learners teaching and learning new concepts. Today, you may be a learner at an event, tomorrow, you might be mentoring a new participant. Passing knowledge forward and creating an informal distributed learning network is like building a Web out of people, linking each other through their knowledge sharing. There is no better way of learning the Web than acting like it.

Join the Webmaker events in your region or host your own. If there is a Maker Party near you be sure not to miss it. Keep an eye for the Mozilla Clubs which are spaces where these informal workshops happen on a recurring basis. Our learning method known as Teach Like Mozilla can be adapted and used in the most diverse contexts. There are many cool initiatives happening all around the world. You can be a part of it and help us build a Web made by everyone and for everyone.

Read More →

Jun 18 2015

Playing well with others

My previous post about WhatsApp Web Client generated a lot of feedback and polarizing opinions. From all the comments I've received since then there was a point of view expressed by a minority that worried me a lot: some people seem to believe that releasing something only for Google Chrome is the correct thing to do and that is one of the topics I plan to address with this post.

Many who were not web designers or web heavy users during the 90s don't recall the horrible experiences that were common back them. Stuff such as designed for Internet Explorer and best viewed in 800x600 in Internet Explorer, on a Sunday, in the northern hemisphere, while closing one eye and wearing a funny hat (well this last one was not that common).

Lots of websites back then were designed exclusively for a single browser and made use of non-standard technologies such as ActiveX and others. It was like the wild west but with cities not communicating with one another.

It was not until Mozilla decided to fight monoculture that standards started gaining more importance but thats another tale. The tale today is about monocultures and the horrors that spawn from it.

The dangers of monoculture

The monoculture of IE is not something I want relive again but it feels that we're approaching a similar situation again. If there was a committee of atomic web developers they would be moving the hand of the web doom clock towards the evening every time someone releases something just for a single browser.

There are more web developers today than any other type of developer. We're a very large group working on a platform that empowers a lot of people and sustain lots of business. To keep this ecosystem healthy there must be competition.

Some web developers shout that the world would be a better place if only Chrome existed, believe me, it would not. They argue that work would be easier because they would need to support just one browser. I normally answer that you should not be writing for specific browsers but targeting a standard.

Some people have difficulty in grasping what happens in monocultures so I will do a little exercise in here: Email is something that people rely on to do business and communicate with one another and there are hundreds of different email clients out there. You don't see someone sending an email and telling you: "Hey, this email only opens in Eudora". You don't send email for a single email client, you send email and the receiver uses whatever client they want to read it. Yes, different email clients have different features and may help you schedule meetings, reply automagically and other cool things but the core feature of displaying an email is basically granted. Imagine living in a world where unless you use a very specific mail client, you could not receive email from your friends. Is it still cool to release things for a single platform? I don't think so.

A monoculture is like having a single shop in town. Anything you want to buy will depend on the goodwill of the shop owners and they will price it anyway they see fit.

Right now we have five major browsers in the market — Firefox, Chrome, Safari, Internet Explorer, Opera — from these five, three are using webkit or a fork of it, just Firefox and IE have their own engine. Of all these vendors, Chrome has the largest market share. I would guess that Chrome marketing budget is probably larger then the whole Mozilla budget. Google advertises Chrome while you use Google products.

The Chrome monoculture is dangerous but its the web developers fault. Google makes a very good job with the standards bodies and has been a very good force there, the problem is that there are APIs and technologies inside Chrome that are not standard and developers are using them not to do progressive enhancement but as a condition for their stuff to work thus making it fail in every other browser.

Some are just lazy using webkit prefixed stuff without trying the other prefixes and the unprefixed versions. Others are relying in deprecated API that are no longer in any standards track or even in completely proprietary APIs. The web developers that should be coding towards a standard such as HTML5 are instead targeting Chrome. That hurts the web and breaks interoperability between browsers.

Why do these monocultures happen in the first place if a healthy ecosystem require multiple implementations? They happen because a company gets too powerful, too large and wants to exert control over a platform. Companies like having control, it makes much easier to please shareholders and plan ahead. It allows them to steer a market towards a goal that benefit them and their long term vision.

Monocultures are dangerous because they can completely wreck an ecosystem by steering it in the wrong direction.

The beauty of open platforms

Once you're using some technology that is backed by an open standard or platform, you can switch between different implementations depending on your needs.

The web is an open platform, heck, the web is the platform! It doesn't matter if you're using Firefox on a FreeBSD box, Internet Explorer 10 on your extremely well built Lumia phone or Chrome on your shining and uncomfortably hot Macbook, a well designed site will open just fine. The web works across different CPU architectures, operating systems, browser implementations and form factors.

One example of such beauty is the twitter client called Macaw. Because Twitter has a public API an ecosystem of clients was formed around it. Macaw was originally built for webOS but due to the fact that it was developed using web technologies it was easy to port to other platforms such as Firefox OS, Android, Chrome OS and BB10.

There is a very powerful thing about the web: There is no single company controlling it but a collection of stakeholders agreeing on what it should be, once a standard is implemented by different vendors its really easy to deploy things across different platforms.

Closed platforms work the other way. You can't influence their direction. You can't be a part of the roadmap discussion. You can't switch between implementations. Instant messaging is full of closed platforms.

XMPP is the prime example for open platform in the instant message arena. An open protocol that was made for working with different servers and clients. If instead of locking ourselves inside walled gardens we'd threw our collective weight behind XMPP, exchanging instant messages would be as trivial and easy as exchanging emails.

The joy of interoperability

The web is the only medium where every one is able to publish something with the action of linking bringing us together thru a microcosm of federated servers. Its a beautiful vision with no one in control and at the same time everyone controlling their own destiny. — me, drunk.

The web is the prime example of interoperability and companies fear that. The fact that the open web is a good platform makes their walled gardens appear less interesting. Why would you release something for a single platform if you could release it to everyone in using web technologies?

In our modern world of smartphones, users rely more and more in monocultures and walled gardens without realizing how much they are losing. While people accept offers of half baked clients that work on a single platform with the excuse that it works for me the web will be at risk.

In just some years we went from a world with federated instant messaging with XMPP, distributed chat rooms with IRC, text message exchange with Email, syndicated content with RSS, to a world where users apparently don't care about interoperability anymore.

I believe that the younger generation simply don't realize how important it is to interoperate. If you, dear reader who read so far, is ever asked by someone why interoperation matters just answer them with another question: Wouldn't a world where PS4, XBox, Wii U and Computers played with each other be awesome?

Interoperability is the thread that holds the web together. Every time you decide to use a solution that doesn't play well with others you're helping to cut those threads.

Instead of hurting the web by using web hostile solutions, its time we declare to the world what kind of web we want. We want to play with others. We want to interoperate between different implementations. We want a healthy ecosystem and more important than everything else, we want the users in control and values over profit.

Lets go further and not only declare the kind of web we want but lets create it together because in the web we're not only consumers, we're also creators. We can create solutions better than the walled gardens we've been offered lately.

Read More →

Jan 24 2015

WhatsApp doesn't understand the web

Today WhatsApp launched their web client in a way that is sure to upset and disappoint a lot of people. WhatsApp is a very popular instant message solution competing on the same market as LINE, Telegram and others. Here in Brazil WhatsApp is basically ubiquitous since its cheaper to send IM messages than to send SMS.

Unfortunately while other companies embrace the web and third party clients such as Telegram which has a list of official and unofficial clients and a public API, WhatsApp is actively waging war against third-party developers and their users. Last year they issued DMCA takedowns to all popular Github repositories hosting third-party clients and/or libraries interfacing with their API.

WhatsApp provides clients for many platforms but not for all platforms. Users of webOS, Firefox OS, Maemo, Sailfish, Ubuntu Touch had to use third-party libraries and also users of other platforms where there is an official client preferred using a third-party client because of many reasons.

After the takedowns, WhatsApp started banning users that connected to their network using third-party client, a move so evil that deserves a post in its own and the reason I stopped using their service. Since the takedowns and the banishments people waited for the release of a web client that would enable other platforms to use their service thru the beautiful of the world wide web.

Well, they finally launched their web offerring but its such a poor offerring that one wonders if anyone at WhatsApp actually understand the power behind the web. Lets analyse some parts of their launch post from their company blog:

To connect your web browser to your WhatsApp client, simply open in your Google Chrome browser. You will see a QR code --- scan the code inside of WhatsApp, and you’re ready to go. You have now paired WhatsApp on your phone with the WhatsApp web client. Your phone needs to stay connected to the internet for our web client to work, and please make sure to install the latest version of WhatsApp on your phone. Unfortunately for now, we will not be able to provide web client to our iOS users due to Apple platform limitations.

I added some emphasis to the quote above. Lets count their mistakes:

Mistake one - it only works on a single browser

...simply open in your Google Chrome browser...

WTF!?!?!? There is Google Chrome, Apple Safari, Mozilla Firefox, Opera, Internet Explorer. All those with large user bases. I am not even counting the small browsers. And they chose to release only for Google Chrome? What year is this, 1995?

Sorry but if it works only on a single browser then its not a product, its a tech demo.

Mistake two - it requires the current WhatsApp client for Android, Blackberry or Windows Phone

You will see a QR code --- scan the code inside of WhatsApp, and you’re ready to go


we will not be able to provide web client to our iOS users due to Apple platform limitations

So, to log in (pair) you need to have the current client on an Android, Blackberry or Windows Phone.

If you just have a dumb phone or another platform, you can't use the web client. The web client is not an alternative, its a toy that only works if you already have a working up to date client on a blessed platform which is not iOS.

Instead of opening to new users by allowing registrations and usage over the web, they choose to maintain their walled garden. The web client is useless if you're not already using their mobile app on Android, Windows Phone or Blackberry..

If it doesn't work as a standalone client then its not a client, its an auxiliary toy, a second screen application, some buzzword but its not a client.

Mistake three - It doesn't work if your phone is not connected to the internet.

...Your phone needs to stay connected to the internet for our web client to work...

MAJOR WTF?!!??!!? So you have your web client but it only works if your blessed mobile client is connected to the internet. We all know that battery life on a mobile device owned by a heavy user of IM tools never lasts long. So imagine that user trying to communicate with some WhatsApp pal and her SmartPhone battery gives up, she could use her computer to keep talking to her pal but in reality she can't because the damn web client doesn't work if your phone is dead.

Its even worse, imagine that office full of metal that behaves like a Faraday cage, or that office in a bad location sitting on the shadow of 3G coverage. Imagine all the reasons why your phone may lose connection to the internet. In all those cases, you will not be able to use the web client. Have a dead phone and you're travelling on a train with WIFI and want to use the web client, you can't! Are you sitting on a pub with free WIFI with a dead phone and want to call up your friends on WhatsApp, you can't.

This is the most stupid decision ever to hit the web. What do we call a web client that requires a mobile app to be active on another machine for it to work? I call it a toy.


WhatsApp is not serious with this offerring. Their constant takedowns of third-party developers; their banishment of loyal users due to petty reasons; their crippled joke of a web client; all that proves they don't have the best interest of their users at heart.

WhatsApp is a hostile company. It was hostile to developers, then it became hostile to the users and now is hostile to the web.

I am so glad I moved to telegram...

Bonus Mistake - using APIs that are not on the standards track

ARGHHHH!!!! Want to know one extra reason they went with Chrome-only over the rest of the connected world? They are using a local filesystem API that is not on the standards track as we can see on the shot below:

non-standard APIs Shot from Guillermo López

Thats a local filesystem API from Chrome that is not a web standard and is not even in the standards track. This is not the web we want. More than once people denounced Google habit of bundling APIs into their browser that are not standards and encouraging developers to use them. This is as much as Google fault as it is WhatsApp fault. Google is not the standard lover you think they are and WhatsApp is just evil.

So lets check the browser compatibility for requestFileSystem().

And they dare call it a "web client"...

Lets close this with a cartoon.

For more about the open web, HTML5 and Firefox OS you can follow me at @soapdog.

Read More →

Jan 21 2015

The web will be televised


The past few days we've seen lots of news regarding the current trends in SmartTV platforms. CES coverage is bringing in a lot of new tendencies and I'd like to talk a bit about the current convergence I see happening in the market.

#It all starts with LG webOS

webOS TV

LG rocked the world when it shipped webOS on SmartTVs. With the objective of making TVs simple again without reducing features or restricting potential. The LG webOS SmartTVs are a joy to use both as an end user and as a developer.

webOS has a rich history and legacy. It influenced the current mobile operating systems much more than people usually give credit for. This legacy of shaping the industry can be felt again in the SmartTV ecosystem. webOS pioneered the idea that mobile apps could be built using web technologies and while SmartTVs are a bit less mobile than smartphones they still share the foundation technologies with its older siblings from HP webOS and Palm webOS.


Apps for webOS TVs are built using the webOS SDK and web applications are a first class citizen in the system. The apps are built with good old Apache Cordova. The most impressive part of the SDK is the EnyoJS Framework which is able to build cross-platform apps that goes from Smartphones to SmartTVs with ease. The moonstone UI library for Enyo was created specifically for SmartTVs and the spotlight library allows easy navigation and input using different types of TV remote. It becomes much easier to deploy apps on TVs once you have a ready to use UI and input library.

LG with the killer combo of webOS + Enyo based apps raised the bar for the competing platforms. Finally building applications for a SmartTV was as easy as developing web pages.


#Then it becomes open with Firefox OS

Blaze your own path

The new mobile operating system by Mozilla brought a refreshing openness and power to the mobile operating system ecosystem. Smartphones with Firefox OS have been released in 29 countries are able to run in devices with specs as low as 128 MB of RAM. The new system is the only mobile operating system in the world that is developed in the open. And before you start shouting Android remember that even though most of the Android versions had their source released at some point in time, some did not. Also Android is not developed in the open, you can't go to a roadmap or issue tracker and start contributing to the next release (or help shape it by adding new features).

Firefox OS is developed in plain sight. Anyone can fetch the source tree and help make the system what they want it to be. All the roadmap and all the source for all the system, built-in apps and backend services are published. Contribution is encouraged and lots of partners already jumped in. The promise of an open operating system with no strings attached and full source code is very appealing to hardware developers.

Just like webOS before it, apps for Firefox OS are built with web technologies and all you need to start developing is a copy of the Firefox browser and a good text editor.

I offer some free eBooks about Firefox OS development. You can fetch them as a bundle by clicking here. I also maintain a page about the current available books related to Firefox OS.

As expected, Firefox OS started blazing its path towards different form factors. We've seen Matchstick, an open software and open hardware TV stick that is very similar to Chromecast in terms of functionality but a whole different game in terms of openness and from CES comes the first images of the Panasonic SmartTV powered by Firefox OS.

Both AOC and TCL announced that they are incorporating Matchstick flint technology in their upcoming SmartTVs making it three TV makers using Firefox OS. Again, another platform that uses HTML5 to build apps.


Matchstick is a wonderful product and I will do a specific article about it soon. At CES they've shown lots of demo apps focusing on interactive experiences beyond the usual media consumption apps which tends to be the target apps of TV sticks.

#Then there is Tizen


Not wanting to be left behind in the new trends, Samsung decided to use its Tizen operating system as its new platform for the living room. Tizen has a long heritage of rumors and almost launching products. People have been expecting Tizen phones for some time now but so far (as far as I know) the only Tizen device on the market is a camera.

Its clear that Samsung took cues from webOS to build their Tizen SmartTV offering, just look at the photo below and compare to the webOS one on the top of this article.

Tizen on TV

Taking cues from webOS is a good thing. Its a wonderful system after all, its just that if Samsung took cues from Apple the whole Internet would be on fire. Again webOS influences the industry and no one notices. Currently we don't have much information about how Tizen SmartTV apps will be developed but reading from their developer site we can see that it too treats web applications as first class citizens. Yet another SmartTV platform that uses web apps. Do you see a trend happening?


The SmartTV ecosystem is quickly converging to an HTML5 based future which makes a lot of sense since HTML5 is not controlled by a single vendor but an agreed upon specification built from community effort between many stakeholders.

The SmartTVs platforms are moving away from the duopoly that dominates mobile — Android and iOS — towards technologies that contains the freedom they need to customize the users experience. Each hardware maker wants to be in control of their product and thats why they are focusing on new (and old) operating systems. Android with its recent tendency of moving everything into Google Play Services and with very tight contracts with makers regarding what they can do with the platform is no longer as attractive as it used to be. iOS is not licensable anyway.

The new platforms are bringing a lot of competition to a sector that is only destined to grow. As consumers we get much better experiences from the new systems. As developers it becomes much easier to create new products. Its my firm belief that this focus on web technologies is a revolution for SmartTVs and I can't wait to see what the future holds.

Read More →

Jan 8 2015

A Free Agent at MozFest 2014


It has been some days since I've been back from the amazing Mozilla Festival and its time to post about all the amazing things I've seen and done over there. This event was probably the most engaging "tech" event I've ever been. The whole mindset of sessions and facilitators is something that we should replicate all around the globe. In my humble opinion this event represents the best of the Mozilla mission and spirit and in these brief words I will try to explain a bit of my wonderful experience over there.

A Free Agent (or being a bit lost)

I am a Mozilla Rep and love working on Web related stuff. I've been to many events around the globe but this was my first MozFest. This event is very different than all other events I've been to and part of my experience was shapped by how I got there.

MozReps making their scary face

There was an application form for Mozilla Reps that were interested in going to the event. I've filled it. There was also a public call for sessions and I've submit my proposal about teching how to run Mozilla Appmaker on a Raspberry Pi. My session was reject but my trip was approved. So in essence, I was going but I had no idea what I was going to do there.

I pledge myself to the open web!

London MozSpace

After arriving in London and getting to know the London MozSpace I ended up talking to a lot of Mozillians and learned about their amazing projects and hopes for the festival. The whole motto of the Festival resumes what it is all about:

Arrive with an idea, leave with a community

By talking to people I decided that my time would be more effectively used if I threw myself at the mobile web track and helped people as an impromptu facilitator.

Facilitators and Space Wranglers (aka awesome peeps)

The way the Mozilla Festival works is a bit different than many events I was familiar with. In most events in my country (Brazil, aka HUEland) even when there are multiple tracks they are usually made by a speaker on a high stage and watchers. This festival had a different approach. It had many tracks and each track had many sessions but the sessions were not about speakers and watchers but facilitators and attendees. Each session would have an arbitrary (aka not known to me) number of facilitators attached to it, they would help the attendees with the session. There were so many facilitators at the event that in every group of three people there was one facilitator. Basically from the total of 1500 attendees there were 500 facilitators.

Spaces at MozFest

Facilitators, tracks and sessions were coordinated by amazing space wranglers who were fantastic. Among all that there was also the people from MozHelp ready to assist you after a simple tweet or call for help. The Mozilla Reps were spread among facilitators, mozHelp and space wranglers. This ratio of facilitators to attendees led to a positive creative chaos that encouraged working in small groups on personal (and soon to be community) projects. Working these groups was a very rewarding experience and seeing some little projects come to life was special.

Since most of my knowledge and ability to contribute lies in the mobile web ecosystem I kept myself at the sixth floor of the Ravensbourne Magic Palace (or whatever they call that fantastic building) and talked and helped a lot of people and was helped by a lot of people in return. Some stuff deserves special mention.


BRCK is a special device. I came into contact with BRCK people before the event so I was already looking for them when MozFest started.

BRCK: The go anywhere, do anything, self-powered, mobile WiFi device.

BRCK is a little box of wonder that contains power, WIFI and 3G connection and storage. Basically you can think of it as a very rugged device that is at the same time a router, a NAS and violates the law of thermodinamics by having enough juice to last for hours.


If you live in a major modern urban center then you might not see the need for a self-powered router storage gizmo but there are many problems that it can solve. It can actually help change peoples life. Among the different things you can do with BRCK:

Cheap Weather Station

With some COTS electronics attached to a BRCK you can acquire sensor data and transmit it to a central place. Weather stations are most important in regions where there are flash floods, landslides and other unfriendly displays of affection by mother nature. With its 3G connection, BRCK could alert residents of an area using SMS if a river start flooding for example.

Long distance sync solution

Some times you need to sync data between locations that are so far apart that they can't reach Telephone networks or WIFI. This is a reality in some places of Brazil and Africa where in the most rural areas away from urban development you can simply go off grid. These locations might not be far apart, a couple kilometers may be enough for them not to be contacteable anymore.

One could use a BRCK attached to a car or motorcycle to drive from location to location. Everytime the BRCK entered the range of the location LAN it could push and pull data from it. After driving to all locations and back, the central place would have data on all locations. This can be useful for example to manage bed and medicine availability in far away clinics in case of west nyle fever or dengue fever.

Impromptu Workshop Classroom Server

There is a lot to learn from Mozilla Webmaker initiative. By teaching people how to become makers of the web instead of simply being consumers of media it has a potential to transform lives. This program is based on giving workshops among other things. Webmaker Parties are so much fun! But what if you want to give a workshop on a place where there is no connection or stable power? BRCK enables you to creat a self-powered server and then you could use affordable tablets as clients and give your workshop anyway. No Power? No Worry!

Mozilla Location Service Bicycles

Mozilla Location Services aims to build a free and open location database for everyone to use. Once it is complete it will allow you to infer the position of a device from the cell phone towers and wifi networks nearby. Its all built with crowdsourced data and it depends on you walking your city with Mozilla Stumbler. BRCK could be used to power a device while you cycle around your city. Not only is geekly awesome but its healthy too.

I went to BRCK session to help people with ideas regarding BRCK application. They were interested in running Mozilla Appmaker in a Raspberry Pi attached to BRCK and I was helping them with how to do it. In the end we left with many ideas and applications for this technology and I am eager to try out what things I can do with BRCK in here.

Marcia and her Flashing Gurus

Everyone that knows Marcia Knous knows how awesome she is. Through her coordination and the passionate work of many volunteers hundreds of Flame devices were upgraded to Firefox OS 2.x

Flashing Gurus

A thousand flames were distributed at the event, almost one per attendee. All those new flame owners were instructed to go meet the flashing booth and upgrade their devices. I sat there and helped as much as I could. I was flashing devices during dinner... I was not there full time like many other volunteers, those folks are heroes!

Fundraising for events

Among the many sessions that left an impression on me was the fundraising session where we learned from other people efforts how to raise funds for our events. We touched topics such as crowdfunding and approaching foundations for grants. It was a very positive experience and I met some awesome people there such as Lawerance Kisuuki who is helping organize Mozilla Festival East Africa and bring this fantastic event and spirit to new places.

Mozilla Research

I parachutted into a session by Mozilla Research on how to conduct research in a high school environment. This was a hands-on experience with lots of exercises and insight. With our diverse group of attendees and facilitators I came into contact with many out-of-the-box ideas that I plan to use the next time I need to conduct any research.

Firefox OS & Raspberry Pi (aka the web of things)

Firefox OS + Raspberry Pi

This will receive a post of its own shortly but for now lets to a summary. I was at the Reps HQ at the fifth floor when someone arrived talking about how cool was a the session about Firefox OS + Raspberry Pi that was going on on the first floor. I literally run to the first floor in time to catch the session end.

You, dear reader, must know how important this topic is to me. I've been trying unsuccessfuly to run Firefox OS in a Raspberry Pi since forever. Yes, I could run it but only on top of Raspbian and that was not good enough for what I wanted.

During that session, Firefox OS was shown running directly on bare metal Raspberry Pi. Another piece of awesomeness was shown which is the Sensible &mdash a framework for the web of things by the fine folks at Monohm. This framework can run on top of many things including Firefox OS and it allows you to do Internet of Things stuff using Web Technologies. If you can't realize why a Web of Things is an awesome idea then stop and do the following exercise: Pick internet technologies such as email, web, gopher, voip, uucp, and wonder for a bit how much time you spent with each one. Also think for a bit on which of these and other internet technologies you benefited the most. The Web is the Platform and its now getting physical.

Firefox OS on a webOS TV

I will do a post shortly on running Firefox OS on a Pi and doing WoT. In the meanwhile you may find all info regarding Firefox OS on Raspberry Pi on the Mozilla Wiki. There is an image there that you can flash to your SD Card and play.

Be aware that this image is built with Raspberry Pi B/B+ in mind. I had only a Raspbery Pi A here but thru a generous donation from a Ali I got a B+ and am already putting it to good use. Stay tunned for more info.


This is just the tip of the iceberg. If you want to check how awesome the Mozilla Festival was check this fine article full of images and videos and content from our Ravensbourne friends.

One of the main things I am taking away with me from this event is a different approach to doing events itself. A new mindset more focused on facilitating sessions than presenting stuff. Now, I want bring a bit of this Mozilla Festival spirit into Brazil. Pro tips to Rosana Queen of the Reps for the facilitator tips session.

Grow Mozilla

Read More →

Nov 3 2014

A new FirefoxOS book about Game Development

Book Cover

A new book focused on Game Development

I am almost reaching the point where I can almost release the book. My idea is to release it as an early unfinished preview and allow readers to send feedback and enjoy it while I am still building it.

The Google Summer of Code is all about open source creations and its my belief that open source should also be open development so by releasing this book in early form I am able to invite you all to contribute to it.

Read More →

Jun 26 2014

Some toughts regarding the Firefox OS Tablet Keyboard

In this brief article I will expose my impressions about the keyboard used in the current Firefox OS version used in tablets. Please be aware that these tablets are reference designs used to improve Firefox OS in tablet form factor. What we see and discuss here is not what the final product will be.

This article is for the benefit of the Tablet Contribution Program run by Mozilla. This project aims to improve Firefox OS for tablet usage. An initial run of reference designs were seeded to many contributors who are bringing back improvements.

Since we're Mozilla, we do everything in the open and thats why this article is published here and not on some private walled garden.

Read More →

Jun 4 2014

Creating EnyoJS apps with Yeoman

EnyoJS Logo

What is Enyo JS

Enyo JS is a framework for building native-quality HTML5 apps that run everywhere! It begun its life in HP webOS (my favorite system ever) and was released as an open source project in the aftermath of the fiasco.

What is known as Enyo 1.0 is tied closely to webOS (a.k.a. a webkit based system). The Enyo team decided that with the open source release they should rewrite Enyo from the scratch to be compatible with other systems thus Enyo 2.x was born.

The current release is Enyo JS 2.4.0 and it is a gorgeous release sporting bindings, mvc, components, and more.

I will write more about Enyo JS as soon as I can but lets try to give you readers a glimpse of what it is all about.

Enyo is about components. Its about building reusable/shareable code into self contained components that may contain other components. Your app is a collection of these components structured in a elegant way.

I could go on for hours on why Enyo is a very elegant system but let me just give you one reason: Enyo JS core libraries and components are built in Enyo JS so if you know how to use the framework you can debug it, also if you read the framework source code you become a better Enyo coder.

You can check A Tour of Enyo to get a quick look at its features

There is a quick tutorial available at github wiki for enyojs/enyo and its very easy to follow.


This is a quick article about using Yeoman to scaffold Enyo projects. Yeoman and its friend tools are all based on NodeJS and you should have it installed before proceeding. If you already have NodeJS, Yeoman, Bower, Grunt setup then you can skip to the Install Enyo Generator section.

Install nodejs

You can fetch and install NodeJS from its own page. There is a chance that the package manager for your own platform has it too. Just check to see if it is not a version from ages ago.

Install Yeoman

Yeoman is a web scaffolding tool for modern webapps. It helps you generate the skeleton of your app and depending on the generator you use it is able to help you with many common tasks such as generating models, views and more.

Yeoman is a node package and can be installed with NPM after you have Node JS installed. The command below will install Yeoman.

$ npm install -g yo

We will use Yeoman to scaffold Enyo projects based on the Enyo Bootplate.

Install Bower

Bower is a package manager for the web. It helps you manage dependencies such as installing and mantaining popular libraries like jQuery, underscore, backbone.

Bower is also a node package that can be installed with NPM just like Yeoman.

$ npm install -g bower

We'll be able to use Bower to install libraries and components from the Enyo Community Gallery and from other internet accessible places such as GitHub.

Install grunt

Grunt JS is a task runner for JS projects. It helps you to run repetitive tasks such as minifying code, concatenating stuff, processins SASS and other files into their end product.

As with other npm based tools you can install it with:

$ npm install -g grunt-cli

We'll use grunt to run a local server to test our Enyo project.

Install the generator-enyo package

You can think of a generator like a plug-in. By using different generators, you get to choose what type of application you wish to create, such as a Backbone application, Chrome/Firefox extension or a Firefox OS app.

We'll install and use our Enyo Generator to scaffold Enyo Bootplate based apps.

To install the Enyo Generator package run:

$ npm install -g generator-enyo

Scaffolding your application

Generators operate in empty directories. Create one for your new project and run this commands:

$ mkdir my-cool-project
$ cd my-cool-project
$ yo enyo

The yo enyo line is the one that runs the generator. It builds a project based on the *Enyo 2.4.0 bootplate already including both the onyx and layout libraries.

Adding libraries

The Enyo Community Gallery holds many reusable components made by the Enyo Community. Installing them usually involves downloading the code from Github (or similar service) and dropping it into a folder in the lib folder (a.k.a. $LIB).

This process can become really tedious after some projects. To solve this the Enyo generator sets Bower to install stuff inside that library folder by default. This way you can use Bower to install stuff from Gihub as seen in:

$ bower install webOS-ports/webos-lib

Just remember to add the newly installed lib to your package.js.

Running a local server

The gruntfile comes with the connect task already set up. You can use it to launch a local server pointed at the deploy folder or pointed to root folder.

$ grunt connect:debug


$ grunt connect:deploy

This makes testing your Enyo project much easier.

Read More →

Jun 3 2014

Let the Games Begin! (or GSOC 2014 starts)

Playful Red Pandas

I've been accepted in Google Summer of Code 2014 as a student working with Mozilla.

My project (that can be seen here) is about creating game samples, an ebook and some reusable libraries to aid game developers working with Firefox OS.

My mentor is Soledad Penadés who is fantastic and builds awesome stuff at Mozilla. Check out her creations at 5013. I am pretty happy with this match because I will learn tons of stuff. :-)

Why games?

Games count for 50% of the app usage on mobile devices. Let that sink for a bit... Of all app categories, games count for half of the usage and all the other types of app share the remaining fifty percent. Games are so important that many developers distinguish between games and non-games application as being from different realms. No one places spreadsheets app and project management apps in different realms but people think of games as something so broad, so large, that it deserves its own category.

If games are so important for mobile platforms then it makes sense that we have great tools and documentation to aid new developers in becoming game developers. The fact is that even though we do have lots of documentation, it is all spread multiple MDN pages and wiki links and personal blogs. We lack a comprehensive collection of knowledge that can be easily followed, understood and shared by new developers.

If a game developer wants to learn something about Firefox OS itself then he can just browse MDN Game Development Zone for the information he needs. New developers that want to become game developers have no easy path to follow.

To solve this we're going to build a set of resources that when used together will teach new developers how to develop 2D casual games for Firefox OS.

Lets see what we're going to build...

Read More →

May 29 2014

Thinking about EME/DRM

I think people on the interwebs are confusing the smoke for the fire.

For those that haven't read how the new EME/DRM stuff will work: Firefox will have a sandbox to run the binary blob. The blob will not come installed on Firefox. The blob will not have access to the hardware or be able to fingerprint you. The sandbox is open source and can be compiled separate from Firefox so that people who want to make sure their sandbox has not been tampered by NSA/MAFIAA will be able to do so.

If you don't use services that use DRM such as Netflix, Hulu and Amazon then your Firefox will still be free from the evil binary DRM blob. If you decide to utilize such services then you authorize (explicit user action, like press a button and there is a message) the installation of the binary blob at the time you try to use the said services.

"As plugins today, the CDM itself will be distributed by Adobe and will not be included in Firefox. The browser will download the CDM from Adobe and activate it based on user consent." -- Andreas Gal, Mozilla CEO in Reconciling Mozilla’s Mission and W3C EME

If you're among the group that is against DRM on the web then instead of going into flamewars and hatred about Firefox having the EME spec you should just stop using DRM enabled services and show them where your convictions are. If on the other hand you want to consume said content then you will have the only open source sandbox that protects you agains hardware access and fingerprinting. Firefox still the best alternative even with EME/DRM.

Read More →

May 15 2014

Mozilla at Campus Party Brasil 2014

Mozilla at Campus Party

This year we took 15 people (Volunteers + Staff) to Campus Party Brasil which is probably the largest tech event/gathering in the world with eight thousand people camping at the venue and an unknown number of people floating at the expo area. Even though this event was organized at the nick of time, it was one of our best events ever. We had numerous activities planed among them 3 talks at the normal schedule (a.k.a. during the day), 5 talks during community schedules (a.k.a. so late it is almost day again), 1 workshop and 1 hackathon.

These activities were all great but they were not our main mission at Campus Party for we had a secret plan in our mind...

Read More →

Feb 10 2014

Help Save Torresminho the Cat

Torresminho Looking Sharp

Once upon a time, there was a frightened and skinny cat named Torresminho, because he raised himself at Noronha Torrezão street, who decided one day to help an SUV driver and change the tire of a moving car.

It didn't work. The driver, mad with the bad service drove away never looking back.

Uncle Andre and Aunt Lili who were passing by rescued what was left of the crying-half-broken kitten and drove quickly to the vet clinic.

Even though we can rebuild him, we have the technology we can't actually afford to pay the surgeries and treatment that he needs. Thats why we need your help to make sure this story has a happy ending.

What Actually Happened

Torresminho after rescue

Now in plain half-decent English: We were driving back home when we saw a little kitten lying down resting in the middle of the road. We managed not to hit him and stopped our car to rescue to little clueless cat. Lili, my wife, waved the car behind us that she was going to grab the cat. The car was an SUV that was far enough to stop or dodge our group. They never changed course and hit the 45 days old kitten. The driver never stopped, just drove away.

We picked the bloodied broken cat and drove to Pet & Vet clinic where he is undergoing treatment.

The Initial Crowdfunding Campaign

As soon as we rescued him and placed him under the care of the clinic we started a crowdfunding campaign to help treat him but we were naive in how much it would cost and we asked for way less money than we needed. Our initial campaign is already closed and we got 110% of our target which was close to USD 400. This was enough to pay for the first three days of treatment and the initial exams.

That first campaign got us about USD 400 but by the end of the week we had already spent close to USD 500. The costs started piling up and thats why we're making this page and a new appeal.

The State of Torresminho

Torresminho UTI

After many exams (X Ray, Ultrasound) we learn that Torresminho is OK inside (aka no broken internal organs) but his hips, left femur and front left leg are broken. Basically his left side and hips are a mess.

The first X Rays of Torresminho displays a Cat so broken that would not be willing to move but the reality is a bit different. Torresminho stands up and tries to walk, he loves to play and is in constant look for food and being pet. He purrs at the mere sight of us and one of the mostly friendly cat we've ever seen. Our little needy playful friend looks pretty sharp and we want him to heal completely.

Our whishes to see Torresminho treatment complete means that he needs to undergo surgery to fix his femur, Torresminho will become a hero to all cats because he is going full cyborg with some tiny metal plates. He could even pose as a pro bike racer or something after surgery. If we don't go to surgery, he'll limp, probably not be able to jump and one of his legs will be on an L shape like a Picasso painting. We'd like the Cyborg version better than the Picasso version. Unfortunately the surgery costs about USD 800 and we can't afford it.

Torresminho Needs You!!!

Torresminho Awwwnnn

Me and Lili are doing all we can do for Torresminho but we simply don't have enough money. To paint a clear picture into your mind, while I was writing this post, the cable TV guy came here to pick the Sky STB because we're canceling the cable TV to cut costs. If we're cutting cable, imagine how hard it is for us to pay for his treatment.

You can help Torresminho by donating money using the PayPal button below. If you can't contribute in a financial form to help this gorgeous sweet kitten then at least force all your friends and enemies to do it.

PayPal accepts all major credit cards. Help us help Torresminho. He already lost 3 lives by being hit by an SUV and surviving. He needs your help not to lose the few remaining lives he has.

Andre & Lili

PS: Whoever wants an update or see exam results from Torresminho can get them by sending me an email at

Read More →

Feb 6 2014

DB Lib Goes Open Source with GPL

DB Lib is a minimalistic database library for LiveCode that works on Desktop and Mobile and allows you to build database-savvy apps without writing SQL directly. For example consider the following code:

dbWhere "country", "Brazil"
put dbGet("contacts") into tDataA
set the dgdata of control "contacts" to tDataA

It picks all records from the contacts table that have the country field equals to Brazil and set a datagrid to it. It's very easy to use. A more involved example:

on mouseUp
   -- assemble array
   put dbCardToArray("contacts") into tDataA

   -- check if we're adding a new record
   -- or updating an existing one.
   -- this check depends on the record id being present.
   if field "id" is empty then
      get dbInsert("contacts", tDataA)
      if it is not a number then
         answer error it
         answer "New Record Saved"
      end if
      go card "contact list"
      dbWhere "id", field "id"
      get dbUpdate("contacts", tDataA)
      if  it is not a number then
         answer error it
         answer "Record Updated"
      end if
      go card "contact list"
   end if
end mouseUp

In this code first we pick the data from a card using dbCardToArray(), a function that magically picks data from fields, buttons and other controls, and assemble an array that is used to insert or update a given record depending on the presence of an id field.

This is just a quick glimpse of what you can do with DB Lib. It is basically a ORM for LiveCode.

Dual License

Inspired by the current LiveCode open source edition, I decided to dual license this library using GPL, so all you LiveCode Community Edition users can use this cool library on your GPL projects.

If you want to release closed source software, you still need a commercial license but for open source stuff, you're free to go.

You can learn more about the library and download the GPL version by going to the DB Lib page.

Support & Feedback

Those that have questions or feedback, just hop by the forums. If you purchased DB Lib less than 30 days ago and feel you've been cheated by me going open source with GPL, you can get a refund by sending me an email at my usual address.

Please be aware that building this library takes time and that time is paid thru commercial licenses and donations, so if you think this library is useful, consider a donation or purchasing a commercial license. Each license buy a couple hours of work!

I hope you guys liked this initiative!

Read More →

Oct 25 2013

A simple publisher/subscriber library for LiveCode

This is a simple library I made to use in a game we're making where we needed a way for objects to interact with each other without hard coded object references. This pattern is known as the publisher/subscriber pattern or the observer pattern.

In this pattern objects can register themselves as listeners for specific events. Once an object triggers an event, all objects that we're listening for such event will receive a callback message. You can use this pattern to allow controls to react to events in your program without the need to hard code dispatch/send messages. A good example is a progress bar that listens for a message that is triggered by a download operation. The download routine would trigger this message without the knowledge of the progress bar, it is just broadcasting it like: "hey, I am downloading something" and the progress bar will listen for this broadcast and react to it. The code could be like:

on openCard
  put the long id of scrollbar "progress" into tTarget
  addEventListener "downloadProgress", "downloadProgressCallback", tTarget

  libURLSetStatusCallback "urlstatus"

  load URL myURL with message "downloadComplete"
end openCard

on urlstatus pURL, pStatus
  switch item 1 of pStatus
  case "loading"
    put 0 into tDataA["start"]
    put item 3 of pStatus into tDataA["end"]
    put item 2 of pStatus into tDataA["progress"]
    trigger "downloadProgress", tDataA
  end switch
end urlstatus

on downloadComplete
  ## this is just cosmetic to guarantee that
  ## the progress bar goes to 100% once the download
  ## is completed.

  put 0 into tDataA["start"]
  put 100 tDataA["end"]
  put 100 into tDataA["progress"]
  trigger "downloadProgress", tDataA
end downloadComplete

In the given scrollbar script:

on downloadProgressCallback pDataA
  set the startValue of me to pDataA["start"]
  set the endValue of me to pDataA["end"]
  set the thumbpos of me to pDataA["progress"]
end downloadProgressCallback

This way we can change the UI that reacts to the download without touching the urlstatus message implementation. We could have many controls listening for the downloadProgress event. Also check out how both the urlstatus message and the downloadComplete message trigger the downloadProgress event. None of these messages have any prior knowledge of whom is receiving this event and nothing is hardcoded.

Using such patterns, you can decouple your user interface from the inner workings of your application easier than before. In our little game we have stuff such as objects broadcasting events like "exploded" and "died" so that other objects can react. Since in games you tend to create and destroy objects at runtime a lot, this library makes our life easier.

This library is released in the public domain. Use it as you see fit, can't sue me. To download this library, use the link on the sidebar (or link below if you're using a mobile device).

Read More →

Oct 25 2013

A brand new site

Welcome to my brand new site. Even tough I liked my previous system, I decided that it was no longer fit for my current work. My previous site was built on the early days of LiveCode server using a mix of RevIgniter and RevSpark frameworks. That site served me well for the best part of five years but the architecture I built was showing its age.

My previous site was built with a beautiful template but was not responsive and most of my current work deals with HTML5 and responsive web. Even though no one complained, I felt bad about selling mobile web sites and having a site that would not offer a good experience on smartphones or tablets. Then, a holiday came and I decided that labor day was a good day to build a new website for the next five years.

I decided to use DocPad which is a beautiful static page generator built on top of NodeJS. Even though I don't know much CoffeeScript I was able to patch the system and add the features I wanted. With a bit more than a days work, my site was running and I was ready to move my legacy content.

The new architecture

The new site is built using DocPad and the new pages are written in Markdown. DocPad generates all the static files and I upload them to the server using rsync. Since the site is no longer dynamic, I don't worry about performance.

The new layout is based on Twitter Bootstrap and is responsive. I can browse my website using my Geeksphone Keon running Firefox OS or my Android tablet running Firefox Aurora. My site has no admin interface so I don't worry about hackers exploiting the newest Wordpress zero-day or anything like that. In the end it is a new system that gets out of my way so that I can create new content with ease. I am very thankful to Benjamin Lupton for creating and releasing DocPad. It is a wonderful new tool for my work.

What about the legacy content

Some readers may be worried that I am leaving LiveCode. Don't be! I have firm roots in the LiveCode community and will keep providing my tools and developing new things. I still think that LiveCode is the best tool for creating Desktop cross-platform software fast and with a great ROI. The new LiveCode Community Edition is a dream come true. I plan to keep using LiveCode for a long time.

I ported some of my legacy content to the new site but not all of it. Some pages had outdated information that is no longer relevant to the current state of LiveCode. Among the ported content are all my current LiveCode commercial and open source projects.

The future

I am now a Mozilla Rep and am working closely with the Brazilian Mozilla Community to spread Firefox OS. Most of my current work is mobile web related and I spent my days inside HTML5/CSS/JS acronyms. So far it has been a wonderful ride and developing for Firefox OS is very fun and productive. I am looking forward to more volunteer work in conferences and gatherings. Soon my little mobile apps will be flocking the Firefox Marketplace.

I hope you all enjoy the new site. It will be more updated than the old one, mostly because its a much more interesting time to live on with all these new platforms and technologies emerging. Stay tunned for updates and send any feedback to my email

Read More →

Oct 25 2013
back to top