♫ ▶
Mauricio Sosa Giri (barbanegra)

EXTRACT:
========

I am passionate about technology. I devote myself to web development using cutting edge technologies, and I administer web servers and related services like databases, domains, etc. I also find myself constantly learning new and better technologies and experiencing them on days off, for once incorporated being able to provide even higher quality. Note that I am passionate about free software, and I love sharing knowledge ethically. I feel qualified to face any challenge that the professional world could present me.

LINKS:
======

LinkedIn: https://www.linkedin.com/in/barbanegra

SKILLS:
=======
 
Abilities
---------

  Software Developer
  Medium Level Administration Operating Systems GNU / Linux
  Basic knowledge of network ARP, IP, TCP, UDP
  Configuring active network elements (Routers, Switches, OpenWRT)
  Experienced Operator Operating Systems Windows XP, 7, 8, Server 2008
  Advanced Administration Web Servers (Apache)
  Firewalls Administration GNU / Linux (Iptables)
  

Keywords
--------

php          mysql         css              
mplayer      javascript    python
tcl          wifidog       tk
gtk          node.js       irc
jquery       http          apache
debian       wireshark     ftp
html         json          centos
fresnel      kismet        iptables
android      git           telnet
linux        regex         java
phpmyadmin   openwrt       http
python       rsync         bash
ifconfig     dns           dhcp
             

TRAINING:
=========

WORK EXPERIENCE
---------------

October 2007 - January 2008
  Industrial operator, Assistant deposit. Imprenta Garino Hermanos S.A.
  Addr. Goes 2190. Phone. (+598)2409 6395

May 2016 - September 2016
  Technical Leader. OSOM Digital
  Addr. Schroeder 6444 Of 10. Phone. (+598)2605 0920
    
April 2014 - To date
  Assistant.  Importadora Rodal S.A.
  Addr. Juncal 1480. Phone. (+598)2902 2272 (+598)2902 7745

September 2014 - To date
  Co Founder. Seedwalk
  Web. http://www.seedwalk.net


ACADEMIC
--------

Primary education

  Lycee Francais de Montevideo (1992 - 1996)
  Colegio y Liceo Santo Domingo (1997)

Secondary education

  Colegio y Liceo Santo Domingo (1998 - 2004)
  Pre-University Institute of Montevideo PRE / U (2006 -2007)

  TITLE: "Bachelor; Orientation: Science, Option: Engineering"

Tertiary education

  Universidad Catolica del Uruguay Damaso Antonio Larranaga (2008 - 2009)
  Career: Computer Engineering

COURSES
-------

At EmpowerU Addr. Constituyente 1830 Phone. (+598)2411 3482
  Certificate "Course RH134/135: Red Hat System Administration II" August 2016
  Certificate "Course RH124: Red Hat System Administration I" March 2016


At Megasoft Addr. Bvd. Artigas 1885 Phone. (+598)2408 0178 Montevideo, Uruguay
  Certificate "Teletrabajo" March 2009

At Standard Multimedia Phone. (+598)2401 2291 Montevideo, Uruguay
  Certificate "Operador Windows"
  Certificate "Operador Office"

Workshops at Colegio y Liceo Santo Domingo Addr. Rivera 2257 Phone. (+598)2408 5546 Montevideo, Uruguay
  Certificate "Taller de Reparacion de PC basico" June 2003 
  Certificate "Taller de Linux Operativo" August 2003

LANGUAGES
---------

English
    Diploma "Basic Certificate Level" Approved "Very Good" in Dickens Institute

French
    Licee Francais de Montevideo (1992-1997)  
    Colegio y Liceo Santo Domingo (1998-2000)

Spanish
    Native speaker

CODE:
=====

WEATHER MODULE FOR UMA IRC BOT
------------------------------

Language
--------
  
  TCL

Full source
-----------

  https://github.com/barbanegra/uma

Snippet ▼ <---- click here!
-------
  
proc parse_metar_code {metardata station} { set hour [lindex $metardata 1] set date [split [lindex $metardata 0] "/"] set lastupdt [mc "Current Weather Full Report - Station: %1\$s\nLast update: %2\$s/%3\$s/%4\$s %5\$s UTC" $station [lindex $date 2] [lindex $date 1] [lindex $date 0] $hour] set values [lrange $metardata 3 end] set report "$lastupdt\n" foreach token $values { switch -regexp -- $token { {^\d(G\d)?(KT|MPS)$} { #wind regexp {(\d)(\d+)G?(\d*)([A-Z]+)} $token -> wind_dir wind_speed wind_gust units if {$units eq "KT"} { set mult 1.854 } elseif {$units eq "MPS"} { set mult 3.6 } elseif {$units eq "MPH"} { set mult 1.609 } elseif {$units eq "KMH"} { set mult 1.0 } else { error [mc "unkown wind meassure unit"] } if {[scan $wind_dir %d wind_dir] > 0} { set magic [expr ] set rprt_wind_dir [lindex {N NE E SE S SW W NW N} $magic] } else { set rprt_wind_dir [mc " Variable"] } if {[scan $wind_speed %d wind_speed] != 1} { continue } set rprt_wind_speed [expr ] append rprt_wind [mc "Wind: Speed: %1\$sKm/h Direction: %2\$s " $rprt_wind_speed $rprt_wind_dir] if {[scan $wind_gust %d wind_gust] > 0} { set rprt_wind_gust [expr ] append rprt_wind [mc "Gusts: %sKm/h " $rprt_wind_gust] } append report $rprt_wind } { #temperature and dewpoint if {[string length $token] == 5} { set temptoken [string map {M -} $token] set rprt_temp_val [lindex [split $temptoken "/"] 0] set rprt_temp_dwp [lindex [split $temptoken "/"] 1] set rprt_temp [mc "Temperature: %1\$s°C Dewpoint: %2\$s°C. " $rprt_temp_val $rprt_temp_dwp] append report $rprt_temp } } {[AQ]\d} { #pressure set rprt_pres_type [string index $token 0] set rprt_pres_val [string trim $token ] switch -- $rprt_pres_type { { append report [mc "Pressure: %shPa " $rprt_pres_val] } { #TODO add units to this value append report [mc "Pressure: %s " $rprt_pres_val] } default { append report [mc "Pressure: No available. "] } } } {^(\d)$} { #visibility set visib [expr ] append report [mc "Visibility: %sKm " $visib] } {^[A-Z](\d)?([A-Z])?|CAVOK|VCRA$} { #sky variable sky_cond if {[info exists sky_cond([string range $token 0 2])]} { set cond $sky_cond([string range $token 0 2]) set rprt_sky_cond [lrange $cond 0 end] set rprt_sky_clouds [string range $token 3 5] append report [mc "Sky: %s " $rprt_sky_cond] if {[string is integer -strict $rprt_sky_clouds] } { set rprt_sky_clouds_height [expr ] append report [mc "%1\$s at %2\$sm " $rprt_sky_cond $rprt_sky_clouds_height] } } } {^[+-]?([A-Z])+$} { #phen variable phen_list if {[string is upper [string index $token 0]]} { set phen_code [string range $token 0 1] } else { set phen_code [string range $token 1 2] } if {[info exists phen_list($phen_code)]} { set phen $phen_list($phen_code) append report [mc "Condition: %s " $phen] if {[string index $token 0] eq "+"} { append report [mc "Heavy "] } elseif {[string index $token 0] eq "-"} { append report [mc "Light "] } } } { #remarks variable rmk_list set remark $rmk_list([string range $token 0 end]) if {[llength $remark] != 0} { set rmk_type [lrange $remark 0 end] append report [mc "Remark: %s " $rmk_type] } } } } puts [mc "|weather module| - METAR data parsed."] return $report }
EASY-COOK A WEEK MENU PLANNER ----------------------------- Language -------- Python / Gtk+ Full source ----------- https://github.com/barbanegra/easy-cook Snippet ▼ <---- click here! -------
def classifyIngredients(self, list_meals, recipes): finalist = [] shoplist = [] for meal in list_meals: names = self.ValuesToList(meal) for name in names: recipe = self.searchRecipe(name, recipes) if recipe: for ingr in recipe.ingredients: if shoplist.count(ingr[0]): # Allready exists ind = shoplist.index(ingr[0]) shoplist[ind+1].extend(ingr[1:]) else: # Must add to list shoplist.append(ingr[0]) shoplist.append(ingr[1:]) for i in range(int(len(shoplist))): if i == 0 or i % 2 == 0: tmp = shoplist.pop(0) finalist.append([tmp]) if i == 1 or i % 2 != 0: tmp = shoplist.pop(0) finalist[int(len(finalist)-1)].extend([tmp]) return finalist def estimateQuantities(self, shoplist, ingredients): result = [] for elem in shoplist: ingredient = self.searchIngredient(elem[0], ingredients) totalqnt = 0 quantities = elem[1] for each in quantities: e = each.partition(' ') if e[2] == "Units" or e[2] == "Kilos" or e[2] == "Liters": totalqnt = totalqnt + float(Fraction(e[0])) elif e[2] == "Grams" or e[2] == "Mililiters": totalqnt = totalqnt + float(Fraction(e[0]))/1000.0 else: #equiv = None Remove when sure all ingredients and measures exists for measure in ingredient.equivalents: if measure[0] == e[2]: equiv = measure[1] totalqnt = totalqnt + float(Fraction(e[0]))*float(equiv) #break Uncomment when sure all ingredients and measures exists if not equiv: print ingredient.name + " hasn't any equivalence." if totalqnt - int(totalqnt) == 0: totalqnt = int(totalqnt) else: totalqnt = str(round(totalqnt,3)) result.append([ingredient.name, str(totalqnt) + " " + ingredient.measure]) return result