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!
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!
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?
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
“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
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.
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!
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.
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
I also tried viewing a thread in Safari’s Reader Mode and it works wonderfully with it.
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,
Reddit accounts seem to participate exclusively in these subreddits. Unlike geographic subreddits, however, the
people can post to a living room doesn't necessarily need to be about their local country itself. On r/dubai,
had set up a "daily random discussion" thread where people talk about pretty much anything. The living room is
a larger version of such a thread, or maybe even like r/CasualConversation except the content is more localised
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
will allow people from all cities to feel included and welcome. r/saudiarabia was a case study of a successful
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.
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.
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
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
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.
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
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.
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.
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 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.
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.