So, who am I?

I'm a passionate Senior Software Developer with great emphasis on macOS application development, and a strong background in Java and LAMP Backends, Web Frontends, Java Desktop Apps, System Administration and Databases. I always put my love in what I do. I'm positive, open-minded and determined. I'm always looking for personal and professional self-improvement, looking for greater and bigger challenges, and for great opportunities of sharing and learning with the best.

I really love what I do, and people seem to love too! It all started when I self-learned and explored the BASIC programming language on the old ZX Spectrum 48K when I was 8yr old. Since then, I become tech-savvy and later graduated in Computer Science back in 2001. I have acquired many experience in different areas (Backends, Frontends, Desktop Apps, System Administration,...) and worked in many different business sectors (Software, Telecommunications, Electronics, Higher Education and Healthcare) so I easily adapt to new technologies, company contexts and cultures. I am self-disciplined and self-organized, and my entrepreneurial spirit led me to start my own business twice. Collaborating with the Sakai Community greatly improved my team work and communication skills as I really enjoy participating on distributed teams. Being part of the Paw remote team allowed me to improve my collaborative competencies and mature my developer knowledge. Over the years, I have worked on many different projects, some of them (e.g., ThemeKit, Paw, Flavours) became highly engaging and popular among the community (check these great reviews about Flavours)!

I like to meditate in nature, surfing when the swell is great, and hanging out with my family and friends. I believe productivity is greatly increased when we are positive, open-minded, humble and determined. Pursuing mind-body-spirit equilibrium is key to wellness.

I'm available for remote working and gigs. Drop me a note!

Work Experience

October 2015 - April 2017

Senior macOS Developer [Remote]

Paw

Paw is a software development company focused beautifully designed apps that makes interaction with REST services delightful.

  • Development of the Paw application (full-featured macOS HTTP client that allows API testing, documentation and team work)
  • Collaboration on the Paw Documentation site
  • User support
  • 100% remote position
  • Collaborative environment using Slack and GitHub
  • Some of the technologies include Swift, Objective-C, C, Carbon, Cocoa, Foundation, CoreData, JavaScriptCore, AFNetworking, PromiseKit, ThemeKit, etc

January 2008 - July 2016

CTO, Co Founder, Senior Software Developer

Interacto Labs Inc.

Interacto Labs Inc. is a software development company focused on building products for Mac that provide great user experience.

  • Company incorporation and other formal/legal activities
  • Company IT related solutions for smooth development workflow
  • Development of the Flavours 2 and Flavours Classic applications (Mac theming application composed of a local theme store, an online theme store, a Photoshop-like editor, background agents, helper tools, dynamic code injection for runtime theming - check below for details):
    • Project planning
    • OS X reverse-engineering (required for understanding the system drawing procedures)
    • Development of application model, logic and presentation, and all related tools, agents and libraries
    • Development of server-side application with RESTful web service API backing the online Flavours Store for browsing themes, managing users, licenses and activations, notifications, etc (PHP, MySQL, others)
    • Development of multiple in-house tools to aid for rapid and efficient prototype and development (PHP, Objective-C)
    • Development of Flavours 2 and Flavours Classic websites
  • Servers setup and administration (FreeBSD)
  • Company strategic direction decisions
  • User support

November 2010 - February 2012

IT Director, Software Developer

Santa Casa da Misericórdia de Fão

Santa Casa da Misericórdia de Fão is a healthcare company group comprised of Hospital, Day Nursery, Day Care Centre for the elderly and Retirement Home facilities.

  • Responsible for all company IT assets management
  • Full replacement of old hospital management system by a new, modern and innovative system
  • Responsible for software migration planning and data migration
  • Responsible for staff support and software learning coordination
  • Virtualization of most servers (Hyper-V)
  • Replacement of some desktop PCs by Zero Clients (NComputing)
  • Design and network administration/maintenance (Active Directory)
  • Maintenance and optimisation of MSSQL servers
  • Development of C# desktop applications for internal use
  • Development of script applications for automation of system administration (C#, PowerShell)
  • QA tasks
  • Suppliers management
  • Other management tasks
  • User support (local, email)

December 2005 - November 2010

Analyst / Software Developer

University Fernando Pessoa

University Fernando Pessoa is a higher education public interest organization. I have worked on the Local Learning Management System (LMS) implementation project and greatly contributed to the Sakai Project community during this period. In 2008, I have been awarded "Sakai Fellow" by the Sakai Foundation, a recognition that rewards the contributions of volunteer contributors.

  • Implementation of the Local Learning Management System (LMS) with Sakai:
    • Setup, configuration and maintenance of development and production servers (CentOS)
    • Preparation, Quality Assurance and Deployment of every major/minor production upgrade
    • Implemented monitoring with automated actions on trigger conditions (PHP)
    • Implemented and fine-tunned load balancing on JVM servers
    • Maintenance and performance optimization of MySQL servers
    • Development of internal/proprietary Sakai tools:
      • Interoperability with University's roster service
      • Single sign-on implementation
      • Enterprise services integration
      • Supervisor tool for providing easy workflow process of thesis/dissertations
  • Tight collaboration with the Sakai community:
    • Development of multiple tools for the community
    • Contributed with bug fixes and new features for the main Sakai code and for some 3rd party contributions
    • Participation in the Sakai Quality Assurance process
  • Research on using large RDF databases for event tracking
  • Participation/speaker in international Sakai conferences
  • Maintenance and improvement of local DSpace implementation (B-Digital)
  • Wiki documentation about the local project
  • Development of multiple script applications for automation of system administration (Bash, PHP, Perl)
  • User support (local, email)

September 2003 - October 2005

Software Developer, IT Director, Co Founder

BlueSpan

BlueSpan is a startup company aimed to provide electronic and telecommunications intelligent solutions.

  • Development of a multi-device management platform
  • Specification and implementation of custom communication protocols
  • Development of Java and LabVIEW instrumentation software
  • Development of Java desktop applications for internal use
  • Responsible for all company IT assets management
  • Design and network administration/maintenance (Linux)
  • QA tasks
  • Suppliers management
  • Other management tasks

December 2001 - June 2003

Software Developer, System Administrator

Multiwave Photonics

Multiwave is a startup offering next generation pulsed fibre lasers, innovative optical sources based on fibre-optic technologies, product design, product development and engineering services.

  • Development of device management/configuration software in Java
  • Development of Java and LabVIEW instrumentation software
  • Development of a stock management application for internal use
  • Responsible for all company IT assets management
  • Design and network administration/maintenance (Active Directory)

Education

1996 - 2001

Faculdade de Ciências, Universidade do Porto

Computer Science (Licenciatura degree, 14/20)

  • Programming
  • Fundamentals
  • Information systems
  • Systems and network administration
  • Web technologies
  • Ability to, alone or as a team, develop computer applications of reasonable size, with appropriate choice of algorithms, languages, libraries and user interfaces

Training

2002 - 2002

National Instruments

Certified LabVIEW Developer (CLD)

Demonstrates experience in developing, debugging, and deploying medium to large LabVIEW applications. Possesses experience of 12 to 18 months developing medium to large applications in LabVIEW.

2001 - 2001

IBM ILOG

IBM ILOG JTGO & JViews Training

Training of the telecom graphics objects product suite of IBM ILOG.

2001 - 2001

Empresa Nacional de Telecomunicações (EFACEC Group)

Professional Training Placement (19/20)

Development of a software application for local management of a telecommunication link device.

Awards

Sakai Fellows 2008 International Award

Sakai Foundation

The Sakai Fellows acknowledge, celebrate and reward the contributions of important Sakai (now Apereo) volunteer contributors. The Sakai Fellows program seeks to foster community leadership and contribution through recognizing and supporting active contributors. Contributors bring varied expertise to the community, including architecture, design and development of technology, best practices in teaching, learning, research and collaboration, and coordination of community functions. The Sakai Fellows program recognizes such contributions and supports the efforts of the Fellows through a modest stipend.
[source]

Testimonials

"It is also fair to highlight the work carried out by the team responsible for preparing the actual launch of the Virtual University - UFP-UV - in 2008-09, specifically the operational component with Nuno Fernandes, who the Sakai consortium (Massachusetts Institute of Technology - MIT; Harvard University; Stanford University and Michigan University) has just appointed SAKAI FELLOW for his contribution, at UFP, to improving the operationalisation of the e-learning platform we also use."

Prof. Doutor Salvato Trigo, Rector of University Fernando Pessoa

Source: University Fernando Pessoa News #09, 2008

"Nuno has been the main technical lead for the UFP's Virtual University project until his departure in Oct 2010. During his time on the project, Nuno showed unrivaled technical, groupwork and personal skills from which not only UFP but the whole Sakai project benefited. It was a pleasure to work with him, and share the excellent moments the team lived in the past 4 years."

Feliz Gouveia, Associate Professor at University Fernando Pessoa
[source]

"Nuno is an excellent professional and good character. He served as principal programmer and produce several tools in assisting the UFP Virtual University (UFP-UV) initiative that where considered now part of the software Sakai worldwide. He also made a great job on supporting and maintaining UFP-UV working as the most used digital tool at the university along several years with the overall community high recognition. Additional he gain the recognition from the Sakai Software Foundation by its contribution to the open source community project who provide him with the Sakai Fellow in 2008. As a person, he demonstrates along the years an excellent behaviour and proves to have the technical skills and qualities to excel in complex technical projects."

Luis Borges Gouveia, Associate Professor (with aggregation) at University Fernando Pessoa
[source]

"Nuno is a high skilled software developer with very good analysis capacity and problem solving techniques."

David Roldán Martínez, Experienced Information Architect and Open Source Project Contributor
[source]

Conferences

"Site Stats, the power of event tracking at a single click in Sakai"

Co-presenter at the 3rd European Regional Sakai Conference in Valencia (March 2010).

"My students and shared resources. Design of a Student supervision tool"

Co-Presenter at the 3rd European Regional Sakai Conference in Valencia (March 2010).

"UX at UFPUV - People Using Sakai for their Context"

Co-Presenter at the 7th Sakai Conference in Amsterdam (June 2007).

"UFP Tools Development"

Co-Presenter at the 7th Sakai Conference in Amsterdam (June 2007).

"Managing large datastores using RDF databases: an experiment in event tracking"

Co-Presenter at 2a Conferência Ibérica de Sistemas e Tecnologias de Informação (June 2007).

Technical Skills

Mac Applications

I have done complex large macOS applications for over 10 years in Swift, Objective-C and C, mastering Carbon, Cocoa, Foundation, CoreData, JavaScriptCore, AFNetworking, XPC Services and many other system and 3rd party frameworks.

LAMP Backends

Have created several server-side applications with RESTful APIs using Apache, Nginx, PHP, Perl, MySQL and PostGres on several Linux distributions.

Java Backends

High experience building, deploying and testing lots of Java webapps for over 5 years, using SpringFramework, ApacheWicket, JSF, RSF, Velocity, Spring Framework, Hibernate, Acegi Security, SOAP, Ant, Maven, and others.

Frontends

Several experience developing frontends applications using HTML, CSS, Javascript, jQuery, and others JS Frameworks for over 10 years.

Java Desktop Apps

Experience developing Java desktop applications using AWT, Swing, SWT, Eclipse RCP and others, for over 5 years.

System Administration

High experience designing and maintaining Windows and Linux networks over 6 years.

Databases

Experience designing, querying and developing for MSSQL, MySQL, PostGres, SQLLite and Mulgara databases.

Work Skills

  • High Adaptability
  • Creative Problem-Solver
  • Team Spirit
  • Self-Organized and Self-Disciplined
  • Focused and Dedicated
  • Entrepreneurial Spirit
  • Work with Love and Passion
  • Fluent in Portuguese and English

Cultural Values

  • Mind-Body-Spirit Balance is crucial: everything is connected; optimal wellbeing, vitality, and wholeness are only accomplished when we are in full equilibrium.
  • Love your work, work with passion: Confucius is right: "Choose a job you love, and you will never have to work a day in your life.".
  • Work on Self-Improvement: self-improvement leads to Personal Growth which will improve Professional Success chances.
  • Be Happy and Positive: productiveness and success are greatly improved when we look at the bright side of things.
  • Always be Ready to Listen: Socrates is right: "The only true wisdom is in knowing you know nothing.".
  • Be clear, transparent, calm and assertive: when working in a team, good communication is critical.

Projects

Below are some of the projects I have worked on - some projects cannot be listed due to signed NDAs (Non-Disclosure Agreement).

ThemeKit

Homepage: github.com/luckymarmot/ThemeKit

Documentation: themekit.nunogrilo.com

ThemeKit is a lightweight theming library completely written in Swift that provides theming capabilities to both Swift 3.2+ and Objective-C macOS applications.

Features

  • Written in Swift 3.2
  • Optional configuration, none required
  • Neglected performance impact
  • Bundled with 3 basic themes
  • Support for native (Swift) and user-defined (text file) themes

Check the website for additional information.

Close

Paw

Homepage: paw.cloud

Documentation: paw.cloud/docs

Paw is a full-featured HTTP client that lets you test and describe the APIs you build or consume. It has a beautiful native macOS interface to compose requests, inspect server responses, generate client code and export API definitions.

Features

  • HTTP Client: Send all kinds of HTTP requests. Test and iterate on developer APIs or explore new ones. Paw has a full-featured visual editor and HTTP toolset.
  • API Description: Visually build API requests and describe each parameter through textual descriptions, typing, and constraints. Natively supports JSON Schema and is fully compliant with Swagger and RAML descriptions.
  • Teamwork: Synchronize API test configurations, make conflict-free changes and get real-time updates. Almost as powerful as Git and as smooth as real-time sync.

Check the website for detailed information.

Close

Flavours 2 Lite

Homepage: flavours.interacto.net

Flavours 2 Lite is an application to change the look of the Mac, and is bundled with a collection of 128 themes for OS X Yosemite.

Flavours 2 is the successor of Flavours Classic (1.x). It was designed and built from the ground up for OS X Yosemite, features a completely rethought User Experience through an elegant UI, and introduces a new lightweight, fast and safe theming engine.

It was built using Xcode 6 and mainly coded in Objective-C (with ARC) and C. It consists of a Mac desktop application, a status bar application, a privileged helper tool, a XPC service and a dynamic library for code injection. This development was particularly complex as it required a lot of OS X reverse-engineering.

The Complete Version (not released), just like in Flavours Classic, would feature a redesigned powerful editor with live-preview, the ability to share and download themes from the online Flavours Store, a theme change scheduler, and some additional features. However, Apple announced that the next OS X version - OS X El Capitan (10.11) - introduces a new security policy ("System Integrity Protection") preventing every process (even privileged ones) from modifying system files, either on filesystem or dynamically at runtime. Although this can be disabled by booting the machine into Recovery Mode and changing the setting there, this is not something that an average user would normally do, and we could not reasonably ask customers to turn off security protections. With those security restrictions in place, the Flavours project sustainability was seriously compromised, and so we were forced to halt further development. As a result, Flavours 2 Lite was released - bundled with a hand picked fine selection of themes - so that our users could still benefit from theming on OS X Yosemite.

Close

Flavours Classic

Homepage: flavours-classic.interacto.net

Flavours Classic is an application to change the look of the Mac. It allows users to create, apply and share themes. Flavours Classic (1.x) is the predecessor of Flavours 2, and runs on OS X 10.7, 10.9 and 10.9.

Flavours Classic interacts with the Flavours Store using a RESTful API, allowing users who created their own theme, to share with the community. Currently, there are more than 1600 themes available online.

It was built using Xcode 5 and mainly coded in Objective-C (with GC) and C. It consists of a Mac desktop application, a background running agent, a privileged helper tool and an OSAX library (Scripting Addition) for code injection. This development was particularly complex as it required a lot of OS X reverse-engineering.

Flavours received a lot of great feedback from our users, and had great 4-5 star reviews on paper magazines and some websites (MacFormat, MacLife, MacWorld, etc)!

Close

Flavours Store

Homepage: store.interacto.net

Flavours Store is an online theme store for Flavours Classic. It allows to browse all themes submitted by user, view theme details, filter by tag, user or keyword, and rate and comment.

It can be accessed from within Flavours, using a RESTful web service API, or using a web browser. It was built using Coda and coded using PHP, Mustache templates, MySQL, HTML, CSS and javascript. Themes are served from CDN servers for speeding up downloads.

Close

jquery-i18n-properties

Homepage: github.com/jquery-i18n-properties

jQuery.i18n.properties is a lightweight jQuery plugin for providing internationalization to javascript from ‘.properties’ files, just like in Java Resource Bundles. It loads and parses resource bundles (.properties) based on provided language and country codes (ISO-639 and ISO-3166) or language reported by browser.

Resource bundles are ‘.properties‘ files containing locale specific key-value pairs. The use of ‘.properties‘ files for translation is specially useful when sharing i18n files between Java and JavaScript projects. This plugin loads the default file (e.g., Messages.properties) first and then locale specific files (Messages_pt.properties, then Messages_pt_PT.properties), so that a default value is always available when there is no translation provided. Translation keys will be available to developer as javascript variables/functions (functions, if translated value contains substitutions (e.g., {0}) or as a map.

This project was originally created by me and published on Google Code. In 2014 it has been migrated to Github and received additional contributors which are now responsible for the project.

Features

  • Use Java standard ‘.properties‘ files for translations
  • Use standard ISO-639 for language code and ISO-3166 for country code
  • Sequential loading of resource bundles from base language to user-specified/browser-specified so there is always a default value for an untranslated string (e.g.: msg.properties, msg_pt.properties, msg_pt_PT.properties)
  • Use browser reported language if no language was specified
  • Placeholder substitution in resource bundle strings (eg, msg_hello = Hello {0}!!)
  • Suport for namespaces in keys (eg, com.company.msgs.hello = Hello!)
  • Support for multi-line property values
  • Resource bundle keys available as Javascript vars/functions or as a map

Check the website for additional information.

Close

GitHub Profile

Homepage: github.com/nfgrilo

This is my GitHub profile. Honestly, it doesn't contain many things besides:

Projects I have contributed to Sakai are not listed on my GitHub profile (my contributions were to SVN repo which later moved to GitHub):

Hopefully, I will get more time soon to change this in the near future :)

Close

UFP-UV Virtual University

Homepage: elearning.ufp.pt

UFP-UV is the University Fernando Pessoa (UFP) local implementation of the Sakai Project Learning Management System (LMS). The Sakai Platform is a set of collaborative tools designed for teachers, students, and researchers in general.

The UFP-UV Sakai implementation provides full integration with the UFP Information Systems (roster service), single sign-on implementation, enterprise services integration, monitoring solutions, failover mechanisms, and several custom Sakai tools developed in-house by Nuno. It uses MySQL as database server, SAN disks for storage, and Apache servers setup with load balancing for multiple CentOS servers deployed with the UFP-UV Sakai implementation. It is used by thousands of students, teachers, researchers and non-educational collaborators.

Close

Sakai SiteStats

Homepage: confluence.sakaiproject.org/display/STAT (source code)

The Sakai SiteStats tool allows authorized users to view site usage statistics.

Statistics are organized in two screens:

  • Overview: summary of the most interesting site usage statistics
  • Reports: user-defined/predefined printable and exportable detailed reports about site visits, tool activity and resource activity.
  • A complete list of features and screenshots is available on the Sakai SiteStats site.

    It was built using Java, Spring Framework, Hibernate, Apache Wicket, JUnit and SOAP Web Services.

Sakai NewsFeeds

Homepage: confluence.sakaiproject.org/display/NFS (source code)

News Feeds is a feed aggregator tool developed for Sakai.

The tool supports multiple feeds, user-provided feeds or selection from pre-configured institutional list, BASIC/DIGEST authentication and feed attachments (enclosures).

A complete list of features and screenshots is available on the Sakai NewsFeeds site.

It was built using Java, Spring Framework, Hibernate, Apache Wicket, Apache Commons, Rome, SLF4J and XmlBeans.

Close

Sakai BigBlueButton Integration

Homepage: confluence.sakaiproject.org/display/BBB (source code)

Sakai BigBlueButton integrates a Sakai instance with a BigBlueButton server, allowing Sakai users to easily create, manage and join BigBlueButton meetings from a Sakai worksite.

Features:

  • Control meetings - create/edit/update/delete BBB meetings from Sakai.
  • Meeting access - define meeting access by selecting all users, groups, roles or individual users in site.
  • Tool access - define who can do what on the Sakai tool.
  • Scheduling - optionally, define meeting start dates and/or end dates and add it to site Calendar.
  • Notification - optionally, send an email notification to meeting participants.
  • Simplicity - the user interface is designed to be simple.
  • Fast - the Ajax driven interface (Javascript + JSON + Trimpath templates) provides good end-user experience and low server load.
  • RESTful - full RESTful support via EntityBroker.
  • Statistics - the tool logs information automatically processed by the Site Stats tool.

Close

Sakai Synoptic Calendar

Homepage: confluence.sakaiproject.org/display/CALSUM (source code)

Calendar Summary is a synoptic tool for Sakai that presents a visual summary monthly/weekly view of schedule events in the Home page of My Workspace or other course/project site. When placed on My Workspace sites, it aggregates schedule events of all published sites the user is member of (except if user is admin). When placed on course/project sites, it presents only events of that site.

A complete list of features and screenshots is available on the Sakai Synoptic Calendar site.

It was built using Java, Spring Framework, Apache Commons, JSF and Sakai APIs.

Close

Sakai User Membership

Homepage: confluence.sakaiproject.org/display/UMEM (source code)

The User Membership tool allows to find Sakai user enrolments (site and group membership).
It supports internal (Sakai DB) and external (e.g., LDAP) user search, sort and filtering.

A complete list of features and screenshots is available on the Sakai User Membership site.

It was built using Java, Spring Framework, Apache Commons, JSF and multiple Sakai APIs.

Close