The End of a Chapter

Well, summer's basically over. I passed all my classes, and today I presented my magnum opus. With that, my MSc comes to a close. I intend to work on a public paper of what I demoed to just two people in a closed room today because I think the world needs to see this, now more than ever.

I extend my gratitude to God, my family, my supervisor, Professor Viganò, and a few very close friends, without whom I doubt I would’ve gotten anywhere near here. On to the next chapter, here we go!

June Update

I know that I promised an update in June on the group coding project in a previous post, so here are the latest developments.

After going back and forth it became apparent that most of the people who would've been involved would have their hands full with other obligations for most of the summer, the plans I had more or less got derailed. My hay fever also went wild and completely ruined the training schedule I had planned for the summer. I ended up joining a gym. My focus now shifted to work on my dissertation and my physical training. I'm hoping to look noticeably better by the end of the summer and I've set myself a three-month programme. On the skating end, it hasn't been going well. The rink situation in London is dismal.

More often than not, things just don't go according to plan, I guess. I would rather just have a few things and focus insanely on those rather than spread myself thin over many things. My grades are also due to be out next week; fingers crossed!

Camera App - Day 3


I ended up having to rewrite the UI to use AutoLayout. Never used it before and it took a while to get it done.

Next up is a simple registration form to allow photo sharing between 2 people.


A simple registration form and a simple login form to go with it.

Camera App - Day 2


Been up since 5 am. I'd like to be able to send a photo I take to someone else. The catch is making it superfast while maintaining full resolution.


Writing a simple server; phone's successfully connecting to it.

brb morning run while London is still asleep on a Saturday morning.




Back at da computah.

So for the sake of speed, I'm going to go ahead with a binary protocol between the server and the phone. That + some zlib compression and let's see how fast we can go.


Sent some text in binary from the phone; server sees it correctly.


Compression in Swift is proving to be more painful than it ought to be.




As much as I’m enjoying this impromptu hacking project, I must pull myself away to work on my dissertation project a bit (my supervisor won’t be too happy otherwise this month 😅).

Will return to this camera in a day or two.



Feel like playing around with a camera.


Ok, got a viewfinder up and running. Doesn't look like much yet.


A nice shutter button?


Right, I can now capture a photo at full resolution and display it. Also made the button generate some gentle haptic feedback when you press it.


Double-tap to switch between the front and rear cameras. This took a bit of struggling because the last time I implemented this was years ago in Objective-C (I'm using Swift now). Do I need a visible button on the screen that also does the same thing or are most people used to the double-tap gesture for changing cameras?

Taking a break now to go for a run.


Back at it! Implemented tap-to-focus. It's a simple circle animation.


Added a simple shutter animation when you take a photo.


Out for the day (yeah, I go to bed early these days). More ideas I'd like to explore early tomorrow morning. Signing off.

April Code Update

A bunch of us CompSci postgrad students got talking in a café at King's two weeks ago about working on something new. I suggested that we do something as a group for a change. I really want to see a truly decentralised, information publishing medium be made available to everyone in the world, and unlike people such as M. E. Zuckerberg, I don't want myself or anyone else to have control over it. A system by the people, for the people (hol' up, I'm not talking about yet another *decentralised social network* so continue reading).

Ali, what're you going on about? We have the web.

The web is not quite what we're envisaging. Besides, it has now strayed far away from what it once was; even its own creator seems to think so. I'm not talking about replacing the web either (because there will always be a need for it; it's a wonderful invention), but rather augmenting it in a fundamentally different way. How can we make it super-easy for anyone to get whatever ideas they have in their heads out into the world without requiring technical knowledge or paying for domain names and servers, while at the same time protecting both authors and viewers from censorship? As an author, publishing a book or an article to a global audience ought to be as simple as saving a file! As a viewer, it should be just as easy for you to collate and browse ideas from different sources. We also want something that no longer requires us to entrust corporations with our data and fundamental daily rituals anymore. It's about time the ball returned to our court as citizens.

I started sketching ideas on a whiteboard and we eventually arrived at something rather interesting a few days later. The project will be open source and although this hasn't been finalised yet, I'm pushing to publish it as public domain without any strings attached. The plan now is to put together a proposal, gather comments, and enlist interested people to be involved in the project (both from within KCL and beyond). Additionally, being in an academic setting means our professors and faculty members are ideal to be the first to evaluate the usefulness of such a system along with our fellow students. This has to be delayed, unfortunately, due to the fact that we have our finals in May and everyone's occupied with studying for them this month (one of my modules in particular has me terrified). Expect something in June once the exam blood, sweat, and tears have settled.

New Books For April!

I still feel that same sense of excitement every time I get a new book. Today's serendipity includes a book on Alan Turing written by Ethel Sara Turing (his mother) and Networks by Mark Newman.

Turing is a hero of mine, and despite reading his Wikipedia article from top to bottom, it doesn't beat an in-depth book that includes accounts from his own family members. It spans events from his childhood, through his time at Cambridge, his work during the War, and beyond.

I spotted Newman's book on networks and browsed through it. I love anything that has to do with networks. What made me decide to get it was his style of explaining complex concepts in a simple way that I was able to pick up a few new points in those few minutes that I was quickly flipping through it!

The End of the Scapehouse Experiment?

Last year, I talked about a new way to have group conversations. I really enjoyed working on it; it's the reason I ended up learning Python (my new favourite language) and how to use Flask (I played with Django and ultimately decided Flask was better suited). People seemed to have a hard time grasping the idea and despite my best efforts to get people to try it, it got no traction. I don't mean that people were trying it and not coming back; they weren't even trying it to begin with.

This idea was quite complex to put together, and at least I saw it through to the end rather than abandoned it halfway (I came close to doing that several times). I might end up revisiting this idea again in the future; perhaps in a different and simpler form. The site's still online for the time being though.

You can now reset your Scapehouse password!

If you ever forget your password, there's now a link that will allow you to reset it on the login page.

Basic Styling

I added some basic styling throughout the site. Pure HTML was nice, but it seems to turn off most people. I kept things minimal, but it's more user-friendly now. The site is still perfectly usable without CSS though on both mobile and desktop.

I also tried viewing a thread in Safari’s Reader Mode and it works wonderfully with it.

The Scapehouse Living Room

The living room is just what you'd expect when you hear the word: a place where anybody can hang out. Your groups with the people you know are the equivalent of private rooms where only certain people can go to talk and see what's new. In Scapehouse's previous iteration, 8 years ago, the living room was the most popular feature of the site except that back then it was an aggregate of public posts across the entire site. A lot of what I'm about to discuss was inspired by what I saw during my time as a Redditor.


I wanted people coming in from different countries to have their own spaces where they can share things that others living around them can relate to. A major motivator was the fact that geographic subreddits are quite popular, and many Reddit accounts seem to participate exclusively in these subreddits. Unlike geographic subreddits, however, the content people can post to a living room doesn't necessarily need to be about their local country itself. On r/dubai, the mods had set up a "daily random discussion" thread where people talk about pretty much anything. The living room is basically a larger version of such a thread, or maybe even like r/CasualConversation except the content is more localised to each country (e.g. humour that only others living in that geographic area might understand or relate to).

At first I considered making living rooms city-specific rather than country-specific, but I realised that only major city subreddits seemed to get all the traffic and less prominent city subs were dead. Making it country-specific instead will allow people from all cities to feel included and welcome. r/saudiarabia was a case study of a successful country subreddit.

Thread Exclusivity

One thing that annoys the users of geographic subreddits is when tourists or visitors repeatedly post from other countries asking about things to do or places to see. I made it so that you can only create new threads in your own country's living room (replies don't have this limitation) to counter this behaviour. If the users of a country would like to cater to visitors' questions, they can create a thread specifically for such people to ask their questions, thereby keeping the room tidy and placing control in the hands of the locals. Another reason for the exclusivity is to avoid hostile brigading between countries.


There are no moderators in the living room right now. If someone posts something against the site's rules, I'm the one who will have to take it down. Moderation is a very major and sensitive topic for me. I'm not very comfortable with the idea of placing a lot of power in the hands of the few, and I'd like to take my time in figuring out the most suitable moderation model for the living room.

I'd like people to feel like anybody can take initiative to do something they'd like to see happen. On r/london a daily "commute observations" thread gets created by one of the mods, and it sees a lot of activity. It's one of my favourite threads. Someone else came up with the idea of a 'what did you do this weekend' thread. In the case of the living room, anybody is welcome to set up such threads for everyone else on a given day.


The voting model is broken, or at least the idea of allowing people to downvote is because they inevitably abuse the feature. There are no voting options right now.

Why People Cannot Own Their Data. Yet.

Having grown up in the Middle East, one of my obsessions is building peer-to-peer systems that are difficult (preferrably impossible) to censor or block. To me, information and communication are essential elements that should never be shackled. Nobody deserves to have the power to dictate who I can or cannot communicate with, what we get to talk about, or the communication media we choose; period.

Since 2015, I have made a few attempts at building decentralised communications systems where people were in control of their data (in fact, this was the theme of my BSc graduation project), and that always proved unviable upon being tested for a variety of reasons.

Mobile Devices

We are firmly in the age of truly mobile devices. More people use smartphones than laptops, and on mobile networks, things get even more complicated. Carriers tend to place heavier restrictions on what people can do on their cellular networks and actively try to block peer-to-peer connections (primarily to stop people from using BitTorrent, which consumes a lot of bandwidth, over cellular data, among other reasons). In addition, smartphones are constantly moving between cell towers as you travel around. Every time a device is handed off from one tower to the next, its IP address changes, and any active IP connections will break and have to be re-established. Any other devices connected to you will be unable to reconnect to you since they would have no idea what your new address is. Even if you remain within one cell, your device might be reassigned a different IP address and public port numbers (active connections will also break in this case). Unlike your home network, you have no DHCP control over your carrier's cellular network.

Solution? This is a tough one. What first comes to mind is having cell towers hand-off a device's IP address so it maintains the same address in the new cell, but there is always a chance of another device already using the same address in that cell. Having permanent IPv6 addresses that are guaranteed to be unique in any cell is a potential solution.


NAT is a product of the earlier days of the internet and IPv4. It facilitated more devices being connected by hiding them behind the IP address of a device such as a router, which would then assign them private addresses (there is no guarantee that your device will get the same address every time it connects, but you can tinker with your DHCP settings to reserve an address for a particular device), thereby slowing down the pace at which the public IPv4 address space was being used up. To someone outside your network, they would have no idea how many devices are behind your NAT or which device packets are coming from. The downside is that it hinders P2P connections, which rely on being able to connect to public IP addresses and ports that do not change. In the case of cellular networks, it gets even worse because carriers tend to be strict about how you ab/use their network. My local carriers block P2P TCP connections between devices when using their cellular connection. Port mapping is also disabled, and there is nothing I can do about it.

Solution? With IPv6, NAT is no longer needed. Hopefully we can start seeing IPv6 addresses being permanently assigned to devices for their entire lifetime. I have no solution to the port mapping problem, though.


Mobile devices are akin to dumb terminals back in the day, in the sense that people use them to sporadically come online for short periods of time when they are trying to pass the time or when they quickly need to access a service. This means that any data on the device is only available for others to access during these short periods. Having a server that is always online with a static IP address is preferrable, but most people are unwilling to pay a monthly fee or lack the technical know-how to set up and run their own server.

Solution? Data federation. Modern cryptography can safeguard the data to maintain confidentiality and integrity, but this solution does not scale well. Do we break a file apart and distribute its pieces across peers, or do we distribute entire copies of the file? In the case of the latter, what if the file is too big? This would exhaust the user's data plan.


'Trackers' are servers in a P2P architecture (BitTorrent mostly) that peers connect to in order to announce their presence on the network and to discover other online peers. This creates a single point of failure in the network; block access to the tracker, and you prevent new peers from joining the network. Devices can attempt to connect to last known addresses, but if they are unavailable, you would be dead in the mud without a tracker.

Solution? A way to disperse IP addresses online for other peers to discover without having to rely on specific machines. One popular method currently in use is distributed hash tables but this one is to help locate file fragments scattered across different machines.

At the present time, data ownership entails a lot of hassle for most people, both technical and non-technical. The infrastructure is still not in place. Between privacy and convenience, they would pick convenience. They do not care about a service storing and having access to their information if it means they get instant access to whatever service they require, when they require it, and in most cases, without paying money for it.

Working On Something New

I had this idea of a place where you add people you know, and whenever a perfect network of connections forms between you and a bunch of people, you all automatically get clustered into a group which shows up for you in a list, and you can then communicate with each group in real time. The experiment is to see how people act and react to being automatically added to a group rather than explicitly by someone else, because the way current messengers do group communications is just awful, in my opinion. At the moment the only grouping mechanism is based on the connections you add, but I have a few ideas for other mechanisms. Unlike my previous projects, I won’t be wasting time on a fancy UI; I just want to get the grouping mechanism right and see how it fares with a group of testers (stay tuned for that). Given my past experiences of trying to get people interested in something I made, I’m not getting my hopes up this time.

I wrote a basic server, and am now spending time getting a basic client app up and running. My colleague’s car battery died today. I went to help him out and that ended up eating the main chunk of my time today. It's midnight and I'm now working on a basic signup form.

Hello, World!

Trying to get into the habit of blogging. Lately it feels like my thoughts are all over the place; I keep jumping between different ideas and don't know where to settle. For this blog, I decided on a simple design that loads quickly and focuses more on the content itself. I'm not even using a CMS or anything; just a text editor to edit a single HTML file.

Point At a Word, Get Its Definition!

Adobe CS6

I think it’s time for me to make the jump to CS6. I’m still using CS4, & it’s starting to drive me nuts. Photoshop randomly crashes on me in the middle of everything. Rearranging layers by drag-and-drop crashes it as well. No support for right-to-left languages. Not to mention the outdated UI.

I didn’t really like Adobe’s announcement yesterday either.

Earthquakes + Social Media

2:51 pm, Dubai

I was sitting in class on the second floor. Suddenly, my desk starts swaying back & forth. At first I thought it was Diana kicking the table, but then my chair & the ground started shaking as well for a few seconds. The whole class, & a few moments later the whole building, was evacuated outside. People were too scared to stand close to the buildings. Naturally, the first thing I did was to pull out my phone and check Twitter.

2:55 pm, Dubai

During these four minutes, my timeline got littered with tweets about the quake. News sites were already reporting it. Switch to Facebook; 7DAYS & Gulf News were already reporting on the breaking news. Several friends of mine had already posted about it. People were talking about how buildings across the UAE were already being evacuated.

It’s pretty amazing how realtime & instantaneous information sources have become. I mean, literally within four minutes, there was enough information online about the quake, including its magnitude and epicenter location, with more pouring in every minute. It was a pretty frightening experience though. Our thoughts go out to the victims of today’s earthquake, as well as the Boston bombings yesterday.

Tipbox 'n Stuff

Tipbox was featured in this month’s edition of Stuff Middle East. Thanks, @tshams!

Tipbox in Read.

If you're taking the metro this week, be sure to grab a copy of Read.

DNS Issues

Our DNS provider seems to be having issues right now, so don’t worry if nothing in Tipbox (or for that matter) loads. Should be fixed soon…hopefully!

Tipbox Update

Sorry for the long gap of silence! It’s the end of the semester now, and we’ve got finals coming up. Juggling code and lecture notes. Work on Tipbox is ongoing! It’s getting closer and closer to completion every day.

New Tipbox Icon!