Rwanda, my first thoughts

I have been out of the US for two weeks, almost exactly at this point.  One week was spent in London to connect with my family, and one week has been spent in Kigali, getting settled in to both my apartment and my new role.

I wanted to share some initial thoughts on Kigali, the amazing place that it is, and some of the bumps we (myself and girlfriend ) had upon arrival.

Our arrival to Kigali was one that had us a bit on the edge as we had to leave some luggage behind at London Heathrow.

There was a 30kg per person limit, and a 30 Euro / 1kg overage charge. Assuming you had 2 23kg bags as was the limit on the previous.  You are now 16kg * 30 over per person. So we made the choice to ditch and ship rather than get hit with what was somewhere around $1000 in overage fees. (So just a word of caution, double check your baggage allowance, especially on multi-city flights, which is what we had).

 

Once we arrived, the first Airbnb had some problems ( sometimes you can only see a place once you peel back the layers ) .

We ended up moving into a new long term furnished apartment by Wednesday.  From this point on I would definitely say that peace has rained ( pun ).

Peace

Coming from a large city San Francisco / London you forget to value peace and quiet among the hustle and bustle of a large city.

Kigali is a lot like Jamaica in it’s vegetation, rolling hills and abundance of rain.  I am able to walk to work, vs sitting in Bay area traffic for 1+ hours, each way.  This has given me no amount of joy as I am on my way in.

Fruits and vegetables that are grown locally are excellent.  It is subtropical so pineapple, avocado, passion fruit and mango are in abundant supply.

The views from the apartment that we are staying in, in Kimihurura are pleasant and relaxing day or night.

Work

I have started working with Rwanda Online on a several month contract.  The most immediate efforts are around launching Irembo 2.0, and making sure that the platform is able to scale to serve the needs to it’s citizens.  There have been some interesting discussions around the office, and through social circles.

Does digital access to services actually provide the desired outcome. ? Can we understand what is the drop off for people who start applications but don’t finish ? Where is the drop off? What is the total time to complete an engagement ?

Irembo also has a very interesting agent network, where they are able to operate a large network of agents who can assist citizens in filing their paperwork.  I think this agent network is one of the key value propositions behind Irembo and what it has to offer.

Plenty more of insights and conversation to be had.

Growth

Kigali is growing.  There are opportunities all around,  however I feel that due to the small middle class there is a headwind for technology companies that are mainly focused on the Rwandan consumer. Companies like Jumia or ride sharing companies would do well to capture the Kigali market, but it would be hard for them to start here as the local market is a bit small to fuel growth to other regions.

I do feel that there are  opportunities in the bread and butter areas of supply chain, agriculture / value added manufacturing, as well as construction.

With the ratification of AfCFTA this opens up trade between different African countries, which could give Rwanda more consistent access to goods and services, as well as the capacity to grow into a software and services market leader.

I will be publishing more about what I learn about the different economic sectors as I explore and talk with more industry experts.

Week 2

Heading into week two, hope to learn more about the growth that is happening around Kigali.

 

 

 

 

 

American Airlines – What do you believe in ?

Back story: The flight was delayed, approx 4 hours, on top of a 3 hour layover in Dallas. It’s Thursday night, and I was watching the Warriors / Cleveland Cavaliers game with Siqi another person in the group we were travelling with. (we just met at the game mind you)

“Over the loud speaker American Airlines announces that they are boarding group 2”

I walk to the front of the line as I’m in group 1. And my question to the gate agent was merely if I should come to the front or wait at the back of the line. (I think both Siqi + myself were all group 1 boarding )

Our first and only meeting:

Gate Agent: Philip

Philip: “Come around the other side of this line, you aren’t getting on this flight. ”

David: “What is the problem”

Philip: “You have been drinking”

David: (In my head i’m thinking, but we were watching the game ? Aren’t you supposed to ?  We had a delay of over 4 hours ?  I’m not flying the plane ? I’ve been waiting at the gate for 6 hours +  ) .  I tried to discuss with the gate agent that it is not acceptable to arbitrarily kick people off the plane.  “I am not loud, or inebriated and I have done nothing wrong”.

The uprising begins: 

Other passengers also realize the injustice of being singled out for no apparent reason to make way for someone else.

The first person to stand up was the Air Force refueling pilot who came from watching the same game.  The gate agent threatens, and then kicks him off the plane.

The second person to stand up was a couple from Canada.  Tyler (Post Doc research fellow ) / Wife said the same thing, it doesn’t seem right to kick someone of the flight who has done nothing wrong.

Their punishment was much swifter, and more irrational.  The gate agent then canceled their tickets completely, and then threatened / potentially executed a “lifetime” ban on his wife.

I would like to wholeheartedly thank the people who stood up to “Philip”, because it struck me as the right thing to do, and I was surprised that more people on the flight didn’t feel confident saying anything.

Lack of checks and balances

There were no checks / balances to regulate the gate agent, he seemed to believe he could do what he liked / when he liked, and was by far the loudest voice.  ? Should any 1 person be able to affect so many people so arbitrarily. \

No other agents working at american airlines booth needed sign off for this type of a response.

Philip was able to call the airport security forces without any justification as to what we had done, and why they were needed.

Philip used the security forces in an intimidation tactic to get us to tacitly sign off on getting rebooked to the next morning.


 

Refusal

With American Airlines ticket for the next morning in hand, I decided the greatest mistake would be to get on that plane, and let the people who had stood up for me in the process try to find their own way to New Orleans.

Instead we went to Budget rent a car, and traversed from Dallas -> New Orleans overnight. The weather was atrocious we battled rain, and fog as thick as I’d ever seen to make it, but make it we did, together.

Disappointments

My disappointment was in the lack of process, and the lack of accountability at american airlines.

I didn’t even think I was being racially profiled, until Siqi had mentioned it on Twitter. And I realized that @AmericanAirlines has a real problem.

During the 15 minute process, I just kept assuming this was a mistake and would be ironed out.. I just couldn’t imagine why me ? But in truth the question is why not me ?

The Unknown

The other part of this experience was the lack of knowing why none of the other american airlines employees did anything.  They just stood there, and let it happen.

Is the expectation that people of color should accept being kicked off of planes, because they are the least defended, and least likely to complain.

How can American Airlines serve me first class on one flight, but then kick me off on the other flight.

How can they board me on a plane at 8pm, unboard me, and then at midnight tell me I cannot fly because I had some beer.  Isn’t that what we do in America ? Have beer and watch a basketball game ?

 

The fresh and furiously fast Firefox

JAWS

One of the less covered parts of this week’s Firefox release is high attention that was placed on the performance of the redesign of the tab shape.

The new Firefox introduces a new tab shape that is consistent with Firefox for Android, FirefoxOS, Thunderbird, as well as the web properties of Mozilla.

Firefox for AndroidFirefox for Android
Firefox on desktop PCsFirefox

As the Firefox team was implementing this new design, performance was a key metric that was measured and focused on. We wanted to not only bring a beautiful design to users, but one that matched the new sleek shape with an equally speedy outcome.

Each time a change was made to our source control repository, a fresh build of the browser was created and run against a suite of automated tests that measure the performance of the build. These results are then compared against the results of prior builds, allowing the team to track…

View original post 297 more words

Dear Community it’s time to imagine something new for Mozillians !! — A call for Assistance

oneanddone

With the sole purpose of making the web a better place and enabling our community to make a difference, we  are putting together a new site that is capable of harnessing the tremendous power of the Mozilla community. –Me

The portal is to be named “One and Done”, it is to be a place you can  go when you have a few moments to contribute and you are looking for a quick and easy task to complete or skill to master.

To that end a few intrepid QA engineers (Peter Dehaan, Edwin Wong, and myself ) have gotten together with a goal of building a world class, responsive, mobile enabled  website…Now to be sure those things aren’t in the requirements, but we are QA after all.  So we have dusted off our development desks, blown away the cobwebs, and started to code.

Now we are testing out our asynchronous chops, working with a realtime database, and deploying with agility…. However …. we forgot one thing..

Design skills.. I really dislike styling pages…  So without further-a-do I would like to throw out a call for help…… light up the night sky with the Firefox Logo, and see if any budding html / css / javascript designers can answer the call.

A look at the mocks:

A look at what has already been done:

Where to fork:

If you have some free time and want to contribute to the project, would love to get your assistance.

If you feel you have the chops, just send me an e-mail  dclarke@mozilla.com, or just fork the repo and start hacking. You can also find me on irc: onecyrenus

Firefox vs Chrome App APIs How do the API’s compare ?

When porting a chrome packaged app to a firefox packaged app you will need to do an inventory as to which chrome specific api’s you are using and create a level of abstraction around them, as the naming / capabilities of the apis vary across the platforms.

I will try to break this article into information on  which apis are supported across both platforms, where you can find docs, and lastly which apis have no commonality across both platforms (Firefox or Chrome).

Web APIs in Common:

The Web APIs that share commonality in function between the two platforms, are listed below:

Firefox OS:
alarm, getUserMedia(audio), Bluetooth, Device Storage API, navigator.id API, Idle API, Geolocation API, Web Notifications, Permissions API, Battery Status API, Simple Push API, TCP Socket API, Pointer Lock API, Power Management API, ContextMenus

Chrome:
alarms, audio, bluetooth, events ,fileSystem, identity, idle, location, mediaGalleries, notifications, permissions, power, pushMessaging, socket, (Battery Status in Beta), contextMenus

List of Chrome’s HTML5 apis: http://developer.chrome.com/apps/api_other.html

The difficulty for the developer will be in writing an app that can handle both browsers elegantly.  This is already done in many cases with the use of W3C compliant API’s such as geolocation data.(navigator.geolocation, which is also supported under google chrome, just not listed as such in their packaged apps documentation (ack), and soon to be battery status.  But for the majority the function calls are different as well as the data being returned.

Basically this is a bit of a cluster bug until W3C steps in these APIs aren’t close enough to easily describe all the differences in one document.  The best case scenario is if you are only using a subset of the above APIs and you manually code an abstraction layer, or use an intervening javascript framework like phonegap which would make the interfaces of less consequence to the developer.

The other part of the discussion could revolve around which Firefox OS API’s are not yet implemented in Chrome OS. How close are all the APIs to standardization ?

WebFM API, Vibration API,  Camera API, Power Management API, Proximity API, Time/Clock API, Ambient Light Sensor API, Device Orientation API, Screen Orientation APIWeb Activities,

Chrome OS similarly has a set of APIs which are not implemented in Firefox OS:

app.window = a concept not supported in firefox, generally gives the ability to maximize, minimize, change window size..etc

app.runtime = a concept not supported in firefox, basically used to notify when the app has been restarted

i18n = internationalization API.

serial= An API that allows you to read contents of the serial port.

runtime = API to retrieve the background page, return details about the manifest, and listen for and respond to events in the app or extension lifecycle.

system.cpu, system.display, system.memory , system.storage = There are mechanisms to get some of these stats, but not all of them in firefox os.

tts: Text To Speech API

usb: An API that allows you to access USB based devices

Read More »

Rockin’ the Free Web – How to Convert a chrome packaged app to a Firefox OS packaged App

I saw a question on a thread this week, and decided to spend a few hours to write up the process, as well as provide an example.

This bug will cover the general conversion process, but it doesn’t cover all the idiosyncrasies / differences between the two platforms.

The example I’m going to use for the conversion is from the google chrome sample app repository:

The most basic example I have already converted to a packaged app the Hello World example.

For the most basic app that I have converted “Hello World”, we look at the following pieces and how they differ / can also possibly coexist between the two platforms.

manifest.json:

 {  "manifest_version": 2,
    "name": "Hello World",
    "version": "2",
    "minimum_chrome_version": "23",
    "icons": {
         "16": "icon_16.png",
         "128": "icon_128.png"
     },
     "app": {
         "background": {
         "scripts": ["main.js"]
         }
      }
   }

manifest.webapp:

 {  "name": "Hello World",
    "description": "Hello World",
    "launch_path": "/index.html",
    "icons": {
        "128": "icon_128.png",
        "16": "icon_16.png"
    },
    "developer": {
        "name": "David Clarke",
        "url": "https://github.com/onecyrenus/firefox-os-apps"
    },
    "default_locale": "en",
    "permissions": {
    }
 }

The main difference between these two loading mechanisms is just file structure, and some syntactic sugar.  So why not deploy a manifest.json and start rocking the free web !!!

The Art Of Battling Giants / Mozilla Summit Reflection

On the way back from the Mozilla Summit 2013, I spent the time to read Malcolm Gladwells new book. David and Goliath, underdogs, misfits and the art of battling giants, and I was immediately struck by the similarity between Mozilla and the story of the underdog.

The history of the browser has been one of constant change and innovation.  Mozilla has been a company that has been the underdog, so much so that I don’t believe that anyone would have bet on the success of the Mozilla project at the very beginning (except it’s core actors). But 10+ years later the project is still going strong, albeit with new challenges, and new Goliaths to tackle in the industry.

The core issue that I feel we struggle with is in communicating our tremendous core value to our users, and similarly delivering a product that our community feel is a great world class / stable product for them to use.

Throughout the course of Mozilla Summit 2013  a question came up throughout the conference was as to why the state of the web so little resembles the web that we as users want.  The question came up several times throughout the conference..

What is the type of web that users need ?

Is there a message or thought that will be appreciated, digested, and acted upon to make the end user more cognizant of the lack of choice.  If users can understand that we are just in a more cleverly designed box than the Aol / Compuserve / Prodigy would they care ?

Each app ecosystem has it’s own gotchas, license agreements and restrictions which limit the inclusion and fraternity to which the web was designed.  I remember our first experiments building web pages in high school.  Changing font sizes, the blink tag, tables and the like.  We all got to put up and manage our home page.  A system that allowed for play, and learning for all, and was free.

If a student in school wants to make an iOS app you have to:

  1. Have a copy of Xcode (ergo a Mac OSX computer)
  2. Apply for a developer license ($99 / year)
  3. Have an iphone / ipad.

For students that don’t have access to such a technology stack this must be an insurmountable hurdle.  If the web is not relevant to students, and their only point of entry is via their phones / tablets. What does this mean for internet literacy in general.  Are we turning people away from the internet by not having a cheap / fun alternative, which allows people to experiment, build experiences and play.

Can Mozilla find itself in a nuanced position which will allow all users to play, and learn.  Or will we live in a world where users don’t get that fundamental education.  How will Mozilla do battle against it’s new Goliath?

Malcolm Gladwell notes that in a competition between a smaller adversary and a larger, if the smaller adversary takes a conventional approach to the confrontation the odds are the smaller adversary will loose, but in the situation where the smaller adversary takes an unconventional approach the probability will be that the smaller adversary will win.

By having the advantage of agility, a scrappy attitude and the will to change the internet, “users” could find themselves again in a winning position, where they are once again able to play and learn in an environment that is built for that very purpose…

Facebook Home

facebook-home

So I thought I’d spend a few moments writing about why I am not too interested in a social phone, and basically just bitch and whine about why I am not too happy about having all my phone interactions to be  viewed through the lens of facebook.

There are probably 5-10 people I call on a regular basis, I don’t think i’d call more people if my phone was more social, would I post more to facebook ? Would I upload more photos ? Probably not…

Where is the value add for the consumer, I sometimes wonder if companies invent ideas to satisfy there need to do something rather than satisfy a need in the market.  My most pressing concern with facebook at this point is that the software is slow.  I can’t really go into why it is slow, because the code is not open sourced. But compared to Google+ it is molasses.

I very well don’t want something that is slow / buggy to take over my homescreen.  I dislike this concept immensely. (Given that my phone was released approx 2 years ago)

A new idea:

The problem I have with my phone is around the following list.  List is not ordered according to any priority.

  1. Privacy: I don’t know what most apps are doing.  As a user you have no clue when an app is gathering data, and when it is being disseminated. I don’t think giving an app blanket permissions for geolocation access is enough, I generally want to know what data it is using and when. I want to be able to analyze this data. (Tough problem to solve)
  2. Data Segregation: I would like data segregation to happen further up in the app ecosystem so data is stored in an app independent datastore.  Apps should share not just activities, but data.  Ex: After my run, I would have a copy of the geolocation information on my phone, and have it setup to share that information with Strava / mapmyrun..etc..etc.  What I don’t want is for a specific app to gather information, and then surreptitiously pass that information up to their service, and all of a sudden I dont have a copy of my own data. (Tough problem to solve)
  3. Async: All apps should by default not block.  I think spinning wheel  = annoying, if the internet is not accessible, highlight that on the device, if there is a queue of events that need to be processed, and something is blocking then highlight that, an let the user make the appropriate choice. (Tough problem to solve)

I really dislike that there is this idea being pushed that for the user having a social phone is a good thing ?  When for me it doesn’t solve any of the problems that I actually care about.  If my friend is listening to Rhianna on his lunch break, which although interesting and confusing (why would any guy be listening to Rhianna on their lunch break), it unfortunately has a lower priority on my list.

Solving any one of the above problems and then blanketing my phone with navy blue facebook colors is more acceptable, but just giving up all your data without getting anything in return..

That is just silly.

Part III: Profiling Firefox OS.. An Entry point

Gathering profiling Data on Firefox OS can be done in several different ways.
#1) Simpler is better, sometimes a stop watch is a great medium with which to gather timing data for an application you don’t understand.

Picture of StopWatch
Stop Watch

2) In Application Profiling

A great way to accomplish this is to use timestamps in javascript to determine when specific things are happening, and if you are having a bottle neck insdie your application.

Ex:

var d = new Date();

console.log(“The time since epoch = ” + d.getTime());

Once you insert a few of these statements in “strategically” placed points.

Just cd gaia; make install-gaia, this will install the new version of gaia to your phone, and you can see what code path gets triggered at which points.

3)Measuring app startup Times

Turn on show app load times  by loading your settings app.

Click Device Information –> More Information –> Developer –> Show Time to Load.

This is one mechanism for measuring app start times, but this only measure time until mozbrowserfirstpaint which measure the time until first pixels are available for an app.

More details can be found in Bug: 787378

Part II: About Memory Gathering / Dissecting

I have my B2G device in hand….. how do I start gathering memory statistics for the apps I use.

Firstly git clone the b2g repo >

git clone https://github.com/mozilla-b2g/B2G

cd B2G /tools

python get_about_memory.py –help

There are several options you might want to consider with the tool, for now you can just run without any options.

Next Open Firefox Aurora or Nightly, and type about:memory.  At the bottom of the page is a button for loading the memory report from File.

Select and open the file you just saved in B2G/tools/about-memory

Read More »