Thaana Type

Research & development of Thaana fonts
,

  _     _                                     
 | |   | |                                    
 | |_  | |__     __ _    __ _   _ __     __ _ 
 | __| | '_ \   / _` |  / _` | | '_ \   / _` |
 | |_  | | | | | (_| | | (_| | | | | | | (_| |
  \__| |_| |_|  \__,_|  \__,_| |_| |_|  \__,_|
                                              
                                              
  _                          
 | |                         
 | |_   _   _   _ __     ___ 
 | __| | | | | | '_ \   / _ \
 | |_  | |_| | | |_) | |  __/
  \__|  \__, | | .__/   \___|
         __/ | | |           
        |___/  |_|           
PhotoPie

Web app for colour data visualisations of photos
,

var img = new Image()
  img.onload = function () {
    var canvas = document.createElement('canvas')
    canvas.width = width
    canvas.height = width * (img.height / img.width)
    var ctx = canvas.getContext('2d')
    ctx.drawImage(img, 0, 0, width, canvas.height)
    var id = ctx.getImageData(0, 0, canvas.width, canvas.height)
Dot memorial

A personal memorial for lives lost due to covid-19
,

mport csv, json, urllib.request, datetime
from codecs import iterdecode
def main(latest):
    url =   'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/'   
+'master/csse_covid_19_data/csse_covid_19_daily_reports/'
            +latest+'.csv'
    try:
        latest = urllib.request.urlopen(url)
        return generatejson(latest)
    except urllib.request.HTTPError:
        print('url not found')
        return False
def generatejson(csvfile):
    data = {}
    total = 0
    csvReader = csv.DictReader(iterdecode(csvfile, 'utf-8'))
    for row in csvReader:
        name = row['Country_Region']
        Deaths = int(row['Deaths'])    
        if name not in data:
            data[name] = Deaths
        else:
            data[name] += Deaths
        total += Deaths
    data = {k: v for k, v in sorted(data.items(), key=lambda item: item[1],reverse=True)}
    with open('data.json', 'w') as jsonfile:
        jsonfile.write(json.dumps(data))
    return total
Maldives parliamentary election 2019 analysis

Data analysis of election results by sex
, ,

float bar_start = (x-per)*10;
float bar_width = per*10;
if ( party.equals("MDP")  ){
    fill(255,222,0);
} else if ( party.equals("PPM") || party.equals("PNC") ) {
    fill(223,24,147);
} else if ( party.equals("JP") ){
    fill(230,23,23);
} else if ( party.equals("MDA") ){
    fill(212,157,37);
} else if ( party.equals("AP") ){
    fill(62,132,64);
} else if ( party.equals("IND") ){
    fill(175,175,175);
}    
Maldives population poster and notebook

Population awareness materials for UNFPA
, ,

textAlign(CENTER, CENTER);
int count = 0;
int y = 50;
int x = 50;
int atoll = 0;
for (TableRow islandrow : islands.rows()) {
     if (count%19 == 0 /*|| atoll != islandrow.getInt("Misc")*/ ) {
         y += 52;
         x = 47;
         count=0;
     }
     //if (atoll == 9) { continue;} //skip male'
     count++;
     String islandname = islandrow.getString("Name");
     int islandpop = islandrow.getInt("2014");
Maldives census visualisations

Data visualisations & knowledge products for UNFPA
, ,

import processing.pdf.*;

Table atolls;
PGraphicsPDF pdf;
PFont helvetica;

void draw() {
  textFont(helvetica);
  textSize(2);
  textAlign(CENTER);
  float scale = 300;
  String[] years = {"1911", "1921","1953","1960",  "1965","1977","1985","1990","1995","2000","2006","2014"};
  for (TableRow atollrow : atolls.rows()) {
    String atoll_short = atollrow.getString("Atoll_short");
    float lat = atollrow.getFloat("Lat");
    float lon = atollrow.getFloat("Long");    
    pushMatrix();
Fenrakkaa

Identity development for integrated water resource management campaign for UNDP

   __                                 _      _                    
  / _|                               | |    | |                   
 | |_    ___   _ __    _ __    __ _  | | __ | | __   __ _    __ _ 
 |  _|  / _ \ | '_ \  | '__|  / _` | | |/ / | |/ /  / _` |  / _` |
 | |   |  __/ | | | | | |    | (_| | |   <  |   <  | (_| | | (_| |
 |_|    \___| |_| |_| |_|     \__,_| |_|\_\ |_|\_\  \__,_|  \__,_|
                                                                  
                                                                  
#mvelection2013

2013 Maldives presidential election results analytics
, ,

function r(id, label, mdp, ppm, jp, gi, invalid, nonvoters, max) {
  var total = mdp+ppm+jp+gi+invalid+nonvoters+max;
  var canvas = document.createElement('canvas');
  var chartwidth = 2100;
  var chartheight = 50;
  var top = 2;
  if (max < 10000 && max != 0) {
    canvas.width = 2100; 
  } else {
    chartwidth = 800;
    canvas.width = chartwidth ;   
  }
Remembering victims to stop street violence

Posters for Human Rights Day 2013

                                               _                     _         
                                              | |                   (_)        
  _ __    ___   _ __ ___     ___   _ __ ___   | |__     ___   _ __   _   _ __  
 | '__|  / _ \ | '_ ` _ \   / _ \ | '_ ` _ \  | '_ \   / _ \ | '__| | | | '_ \ 
 | |    |  __/ | | | | | | |  __/ | | | | | | | |_) | |  __/ | |    | | | | | |
 |_|     \___| |_| |_| |_|  \___| |_| |_| |_| |_.__/   \___| |_|    |_| |_| |_|
                                                                               
                                                                               
                    _          _     _                   
                   (_)        | |   (_)                  
   __ _    __   __  _    ___  | |_   _   _ __ ___    ___ 
  / _` |   \ \ / / | |  / __| | __| | | | '_ ` _ \  / __|
 | (_| |    \ V /  | | | (__  | |_  | | | | | | | | \__ \
  \__, |     \_/   |_|  \___|  \__| |_| |_| |_| |_| |___/
   __/ |                                                 
  |___/                                                  
mvmurders

Mapping & documenting murders that have taken place in the Maldives
, ,

                                                     _                     
                                                    | |                    
  _ __ ___   __   __  _ __ ___    _   _   _ __    __| |   ___   _ __   ___ 
 | '_ ` _ \  \ \ / / | '_ ` _ \  | | | | | '__|  / _` |  / _ \ | '__| / __|
 | | | | | |  \ V /  | | | | | | | |_| | | |    | (_| | |  __/ | |    \__ \
 |_| |_| |_|   \_/   |_| |_| |_|  \__,_| |_|     \__,_|  \___| |_|    |___/
                                                                           
                                                                           
Lets Go Maldives rebranding

Complete rebranding of the travel agency
,

  _          _                           
 | |        | |                          
 | |   ___  | |_   ___      __ _    ___  
 | |  / _ \ | __| / __|    / _` |  / _ \ 
 | | |  __/ | |_  \__ \   | (_| | | (_) |
 |_|  \___|  \__| |___/    \__, |  \___/ 
                            __/ |        
                           |___/         
                      _       _   _                      
                     | |     | | (_)                     
  _ __ ___     __ _  | |   __| |  _  __   __   ___   ___ 
 | '_ ` _ \   / _` | | |  / _` | | | \ \ / /  / _ \ / __|
 | | | | | | | (_| | | | | (_| | | |  \ V /  |  __/ \__ \
 |_| |_| |_|  \__,_| |_|  \__,_| |_|   \_/    \___| |___/
                                                         
                                                         
MRC VCA Guidelines & Toolbox

Designing of handbooks for Maldivian Red Crescent
,

                                                   
                                                   
  _ __ ___    _ __    ___    __   __   ___    __ _ 
 | '_ ` _ \  | '__|  / __|   \ \ / /  / __|  / _` |
 | | | | | | | |    | (__     \ V /  | (__  | (_| |
 |_| |_| |_| |_|     \___|     \_/    \___|  \__,_|
                                                   
                                                   
                  _       _          _   _                      
                 (_)     | |        | | (_)                     
   __ _   _   _   _    __| |   ___  | |  _   _ __     ___   ___ 
  / _` | | | | | | |  / _` |  / _ \ | | | | | '_ \   / _ \ / __|
 | (_| | | |_| | | | | (_| | |  __/ | | | | | | | | |  __/ \__ \
  \__, |  \__,_| |_|  \__,_|  \___| |_| |_| |_| |_|  \___| |___/
   __/ |                                                        
  |___/                                                         
Nakaiy Nevi

Seasons of the Maldives – a mobile app
, , ,

for (var i=1; i<nakaiy.length; i++){
  nakaiydb.insert({ id:i, 
    nakaiy:nakaiy[i][0], 
    dates:nakaiy[i][1], 
    season:nakaiy[i][2], 
    number:nakaiy[i][3], 
    description:nakaiy[i][4], 
    meaning:nakaiy[i][5], 
    weather:nakaiy[i][6], 
    averages:nakaiy[i][7], 
    fishing:nakaiy[i][8], 
    agriculture:nakaiy[i][9], 
    asterism:nakaiy[i][10]
  }); 
}
Azidon – brand development

Development of brand identity & marketing materials
,

                _       _                 
               (_)     | |                
   __ _   ____  _    __| |   ___    _ __  
  / _` | |_  / | |  / _` |  / _ \  | '_ \ 
 | (_| |  / /  | | | (_| | | (_) | | | | |
  \__,_| /___| |_|  \__,_|  \___/  |_| |_|
                                          
                                          
  _                                  _ 
 | |                                | |
 | |__    _ __    __ _   _ __     __| |
 | '_ \  | '__|  / _` | | '_ \   / _` |
 | |_) | | |    | (_| | | | | | | (_| |
 |_.__/  |_|     \__,_| |_| |_|  \__,_|
                                       
                                       
DHL Advertising in Maldives

Brochures, posters, billboards & exhibition stall

      _   _       _ 
     | | | |     | |
   __| | | |__   | |
  / _` | | '_ \  | |
 | (_| | | | | | | |
  \__,_| |_| |_| |_|
                    
                    
              _                         _     _         _         
             | |                       | |   (_)       (_)        
   __ _    __| | __   __   ___   _ __  | |_   _   ___   _   _ __  
  / _` |  / _` | \ \ / /  / _ \ | '__| | __| | | / __| | | | '_ \ 
 | (_| | | (_| |  \ V /  |  __/ | |    | |_  | | \__ \ | | | | | |
  \__,_|  \__,_|   \_/    \___| |_|     \__| |_| |___/ |_| |_| |_|
                                                                  
                                                                  
MRC Dengue awareness billboards

For the Maldivian Red Crescent

                                  _                                       
                                 | |                                      
  _ __ ___    _ __    ___      __| |   ___   _ __     __ _   _   _    ___ 
 | '_ ` _ \  | '__|  / __|    / _` |  / _ \ | '_ \   / _` | | | | |  / _ \
 | | | | | | | |    | (__    | (_| | |  __/ | | | | | (_| | | |_| | |  __/
 |_| |_| |_| |_|     \___|    \__,_|  \___| |_| |_|  \__, |  \__,_|  \___|
                                                      __/ |               
                                                     |___/                
                                                                    
                                                                    
   __ _  __      __   __ _   _ __    ___   _ __     ___   ___   ___ 
  / _` | \ \ /\ / /  / _` | | '__|  / _ \ | '_ \   / _ \ / __| / __|
 | (_| |  \ V  V /  | (_| | | |    |  __/ | | | | |  __/ \__ \ \__ \
  \__,_|   \_/\_/    \__,_| |_|     \___| |_| |_|  \___| |___/ |___/
                                                                    
                                                                    
Islands of Maldives

Islands of Maldives (aligning together)
, ,

import processing.video.*;
MovieMaker mm;
....
float x = -7000 + float(pieces[6])*100;
float y = 715 + float(pieces[7])*-100;
scale(50);
String[] shapes = split(pieces[0], ',');

beginShape();
  for (int nodes = 0; nodes < shapes.length; nodes = nodes+1) {
    String[] xy = split(shapes[nodes]," ");  
    float x1 = -7000 + float(xy[0])*100 - x+6.4;
    float y1 = 715 + float(xy[1])*-100 - y+4.0;
    vertex(x1, y1);
  }
endShape(CLOSE);
Maldives 2006 Census Data Visualizations

For UNDP’s disaster awareness campaign research
, ,

function population_density() {
  $content = '';
  $fp2 = fopen('source.csv', 'r');    
  while (!feof($fp2)) {
    $line = fgetcsv($fp2, 4096);
    if ($line[0] == "138") { continue; }; // remove male' 
    if (is_numeric($line[4]) AND  is_numeric($line[5]) AND  !empty($line[6]) AND  !empty($line[17]) ) {
       $content .= '';
       $content .= '';
    }
  }
  fclose($fp2);
  $content .= '';
  return $content;
}
UNDP Rakaavethibeyyaa Dhivehiraaje

Generative logo design
, ,

foreach ($xml->children() as $atolls) {
  $island_count = 0;
  foreach ($atolls->children() as $atoll){
    $content .= '';
    foreach ($atoll->children() as $island){
      $content .= 'x  . '" y="' . $island->y . '" 
              width="' . $island->size . '" height="'. $height .'" 
              fill="black"  />  ';  
    }
    $content .= '';
  }
}
UNICEF Nutrition Playing Cards

Playing cards promoting complementary feeding

                  _                  __ 
                 (_)                / _|
  _   _   _ __    _    ___    ___  | |_ 
 | | | | | '_ \  | |  / __|  / _ \ |  _|
 | |_| | | | | | | | | (__  |  __/ | |  
  \__,_| |_| |_| |_|  \___|  \___| |_|  
                                        
                                        
                  _            _   _     _                 
                 | |          (_) | |   (_)                
  _ __    _   _  | |_   _ __   _  | |_   _    ___    _ __  
 | '_ \  | | | | | __| | '__| | | | __| | |  / _ \  | '_ \ 
 | | | | | |_| | | |_  | |    | | | |_  | | | (_) | | | | |
 |_| |_|  \__,_|  \__| |_|    |_|  \__| |_|  \___/  |_| |_|
                                                           
                                                           
Framing Leaders

Algorithmically generated framed pictures of heads of governments
, , ,

#!/usr/bin/python
#
import datetime
for row in cursor.fetchall():
  if row['country_code'] + ".png" in srcfiles:
    x = datetime.datetime.now().date() - row['h_gov_since']
    if x.days > 365*2:
      years = " ("+ str(math.floor(x.days/365))[:-2] + " years)"
    elif x.days < 365:
      years = " ("+ str(x.days) + " days)"
      
    else:
      years = " ("+ str(math.floor(x.days/365))[:-2] + " year)" 
    img = row['country_code'] + ".png"
    imgs.append(img)
    li[img] = row['country_name'].capitalize() + years
    height.append(Image.open(pathx + img).size[1]+35)
    width.append(Image.open(pathx + img).size[0]+20)
Flags By Colours

Data visualization experiment using flags of the world
, , , ,

#!/usr/bin/python
#
from sys import argv
import Image, ImageDraw 
im = Image.open(argv[1]) 
im = im.convert('RGB') 
colors = {}; total = 0
for y in range(im.size[1]):
  for x in range(im.size[0]):
    color = im.getpixel((x,y))
    if color in colors.keys():
      colors[color] += 1
    else:
      colors[color] = 1
    total += 1 
Generator

An evolving algorithm that generates music & visuals
, ,

#!/usr/bin/python
from common import *
import random


while 1:
  num = 000
  files = ls (images, 'jpg')
  last = len(files)
  half = str(round (last/2))
  half = int(half[:half.find('.')])-3
  using = files[last-10:last]
  using.sort()
  using.reverse()
  using += files[half:half+10]
mvblogosphere

Mapping of the Maldivian blogosphere (2006-2014)
, ,

                      _       _                                         _     
                     | |     | |                                       | |    
  _ __ ___   __   __ | |__   | |   ___     __ _    ___    ___   _ __   | |__  
 | '_ ` _ \  \ \ / / | '_ \  | |  / _ \   / _` |  / _ \  / __| | '_ \  | '_ \ 
 | | | | | |  \ V /  | |_) | | | | (_) | | (_| | | (_) | \__ \ | |_) | | | | |
 |_| |_| |_|   \_/   |_.__/  |_|  \___/   \__, |  \___/  |___/ | .__/  |_| |_|
                                           __/ |               | |            
                                          |___/                |_|            
                     
                     
   ___   _ __    ___ 
  / _ \ | '__|  / _ \
 |  __/ | |    |  __/
  \___| |_|     \___|
                     
                     
Drawing With Light

Mapping photography & its links to social, political & aesthetic systems

      _                             _                 
     | |                           (_)                
   __| |  _ __    __ _  __      __  _   _ __     __ _ 
  / _` | | '__|  / _` | \ \ /\ / / | | | '_ \   / _` |
 | (_| | | |    | (_| |  \ V  V /  | | | | | | | (_| |
  \__,_| |_|     \__,_|   \_/\_/   |_| |_| |_|  \__, |
                                                 __/ |
                                                |___/ 
             _   _     _         _   _           _       _   
            (_) | |   | |       | | (_)         | |     | |  
 __      __  _  | |_  | |__     | |  _    __ _  | |__   | |_ 
 \ \ /\ / / | | | __| | '_ \    | | | |  / _` | | '_ \  | __|
  \ V  V /  | | | |_  | | | |   | | | | | (_| | | | | | | |_ 
   \_/\_/   |_|  \__| |_| |_|   |_| |_|  \__, | |_| |_|  \__|
                                          __/ |              
                                         |___/               
UN CAT Booklet

Convention against Torture (CAT) Dhivehi booklet for UNDP

                                   _   
                                  | |  
  _   _   _ __       ___    __ _  | |_ 
 | | | | | '_ \     / __|  / _` | | __|
 | |_| | | | | |   | (__  | (_| | | |_ 
  \__,_| |_| |_|    \___|  \__,_|  \__|
                                       
                                       
  _                       _      _          _   
 | |                     | |    | |        | |  
 | |__     ___     ___   | | __ | |   ___  | |_ 
 | '_ \   / _ \   / _ \  | |/ / | |  / _ \ | __|
 | |_) | | (_) | | (_) | |   <  | | |  __/ | |_ 
 |_.__/   \___/   \___/  |_|\_\ |_|  \___|  \__|
                                                
                                                
Blindscapes

Photographing urban life in Malé
, ,

  _       _   _               _                                     
 | |     | | (_)             | |                                    
 | |__   | |  _   _ __     __| |  ___    ___    __ _   _ __     ___ 
 | '_ \  | | | | | '_ \   / _` | / __|  / __|  / _` | | '_ \   / _ \
 | |_) | | | | | | | | | | (_| | \__ \ | (__  | (_| | | |_) | |  __/
 |_.__/  |_| |_| |_| |_|  \__,_| |___/  \___|  \__,_| | .__/   \___|
                                                      | |           
                                                      |_|           
      
      
  ___ 
 / __|
 \__ \
 |___/
      
      
Malé Aerial

Aerial photography of the island city of Malé
,

                      _        
                     | |       
  _ __ ___     __ _  | |   ___ 
 | '_ ` _ \   / _` | | |  / _ \
 | | | | | | | (_| | | | |  __/
 |_| |_| |_|  \__,_| |_|  \___|
                               
                               
                        _           _ 
                       (_)         | |
   __ _    ___   _ __   _    __ _  | |
  / _` |  / _ \ | '__| | |  / _` | | |
 | (_| | |  __/ | |    | | | (_| | | |
  \__,_|  \___| |_|    |_|  \__,_| |_|