About me
Foreword
Welcome to my personal website! Here, I've taken a
thoughtful approach to designing my website using the latest web
technologies. I strongly believe in honoring the engineering
principles behind web development, so my hand crafted HTML
correctly and uniquely describes the semantics of the text
content leaving all presentation and interaction concerns to CSS
and JavaScript.
This approach not only makes my website easy to navigate and use
online, but it also ensures that it will look great when printed
out. Whether you are looking at my website on your computer,
your phone, or on paper, I want you to have the best possible
experience.
But my website is more than just a showcase of my technical
skills. It's also an opportunity for me to share my experiences,
interests, and passions with you. With carefully curated
content, I've created a space that represents the very best of
my personality and professional achievements.
So please, take a look around and explore my website. Whether
you're here to learn more about my work, my hobbies, or just to
get to know me a little better, I hope that you'll find
something that speaks to you. Thank you for visiting!
Personal Information
Name
Sebastian E. Ferreyra Pons
E-mail
sebastian@ferreyrapons.com.ar
Website
https://ferreyrapons.com
Location
Santiago del Estero
Argentina
Phone
(54 9 385) 500-1635
Date of birth
September 7, 1973
Place of birth
Argentina
Citizenship
Argentina, Canada
Languages
English, Spanish, French
all written and spoken fluently
Education
1991-1992
Three terms of advanced courses in mathematics, computer science and physics at
S.U.N.Y.
(State University of New York) at Stonybrook.
1989-1991
Grades 11 and 12 at Smithtown High School East, St. James, NY. Including elective
college level courses on computer science, mathematics and analog and digital
electronics.
1985-1989
Grades 7, 8, 9 and 10 at F.A.C.E. (Fine Arts Core Education), Montreal, Quebec,
Canada. F.A.C.E. is a bilingual (English and French) school with academic orientation
toward the arts.
1977-1984
Primary education in Spanish in Santiago del Estero, Argentina except 1982 finished
in Flagler Elementary School, Miami, Florida.
Experience
2020-Present / Frontend and Dataviz Developer
Frontend and dataviz developer using Svelte/SvelteKit, XState and Lamb to develop
accessible data vizualization
frameworks,
tools and
websites.
Nesta UK, London.
2019-2020 / Frontend Team Lead
Frontend development team lead managing four devs, frontend architect and backend
developer for a CRM system using React on the frontend and a
Python/Flask/SqlAlchemy/PostgreSQL stack on the backend publishing
a REST API service.
GoManzanas, Palo Alto, CA.
2016-2017 / CTO, Technical Project Manager and Software Architect
Project manager for Infomerx developing developing web based administrative systems and
applications. Tasks involved deciding the technology roadmap, hiring, training, directing
& maintaining a development team, interacting with sales & marketing and designing the
architecture of the system based on commercial and technical requirements. Technologies
used included Three.JS, Node.JS, React.JS, Socket.IO and various others.
2015-Present / Participation in Interactive Arts Collective
Visual experimentation, live coding performances with live musical bands and interactive
installations in Santiago del Estero. Tripulantes, Casa Nave, Santiago del Estero, Argentina.
2015-2016 / Web Technologies Workshops for Artists
Organization of educational workshops teaching web technologies like HTML5, CSS and
Javascript for contemporary and conceptual artists. Casa Nave, Santiago del Estero, Argentina.
2013-2015 / Technical Project Manager and Software Architect
Project manager for Ensembleweb developing a gameification
based website for enhancing engagement and performance in sales workgroups for EnsembleWeb,
a Canadian web site development company. Tasks involved hiring, training, directing & maintaining
a development team, interacting with marketing and designing the architecture of the system
based on commercial and technical requirements. Technologies used included Node.JS, Angular.JS,
React.JS, Socket.IO EnsembleWeb
2010-2014 / Wordpress Plugin Development
Consulting, custom plugin design and development for EnsembleWeb, a Canadian web site
development company. EnsembleWeb
2008-2013 / Graphic Design & Technical Consulting
Graphic design, CGI imaging, technical consulting & special purpose software development
for Expressart, an advertising agency based in Santiago del Estero, Argentina.
Expressart
2007 – 2008 / Team Leader & Software Development
Development of software tools for the human resources industry including design
implementation and developer team coordination. The system, based on modern architectural
design, provides a sophisticated desktop user interface but accesses distributed web
services under the hood thus providing a complete user experience while still reaping the
benefits of SOA (Service Oriented Architectures). Responsibilities included maintenance
of the various servers running in the system, of the promotional web site and the
authorship and maintenance of source code in Java, C# 2.0, HTML and SQL for software
destined to run on Windows and Linux.
CandidateHunter International
2003-2006 / Project Management & Software Development
Funding and managing a 3-person team in the development of an object oriented graph database
engine and its supporting developer and management tools for Microsoft’s .NET environment
and Sun’s Java platform. This OODB was my design and is intended to support nearly orthogonal
data-persistence facilities for data objects in these platforms. Features being developed
include ACID transactions, multi-server distributed storage nodes and data versioning for
the purposes of auditing and conflict-resolution.
2004-2005 / Website Content Editor
Front-page story editor for JavaLobby.org, a website specializing in the Java developer
community. The main responsibilities involve screening daily Java-related news and writing
small articles with the intent of generating in-depth discussions among the members of the
Java community. These tasks require staying up-to-date in all Java industry developments.
2000-2004 / Ingeniería de Software
Low-level development of high-performance primitive graphics rendering APIs and
components for Java applications including gradient rendering at speeds equalling solid
color filling in that platform. Different versions of these components are licensed
to open-source projects (Kunststoff LnF y
Metouia LnF) and a version taking advantage of
hardware acceleration to Jide Software for use in
its component suite y and user interface framework.
2002-2003 / Software Engineering
Development of software architecture and components for internet connected multi-user
server providing multi-company unified facilities for bus seat availability, reservation
and ticket sale for nation-wide remote terminals. This system provides a graphical
display over a map and when there is no direct service between two geographic points,
provides possible connection points based on user-selected time constraints. 2-tier
client/server architecture: Database with business logic in Stored Procedures on the
server and Java technology including JDBC and SWT on the client-side.
1999-2002 / Software Engineering
Development and maintenance of multi-user system for legal firms managing overdue credit
accounts using Java technology including Servlets, JSP, JDBC, JSP, XML, XSL, Dynamic HTML
and CSS. 4-tier client/server architecture: Database, Business logic, Document generation
on the server side and User Interface in the client. Currently running on company
managing 43000+ accounts judicially and extra-judicially on database distributed over
several provinces in northwestern Argentina, synchronized through the Internet.
1998-2001 / Website Administrator
Web site design, implementation and webmastering for
Poder Judicial de la Provincia de Sgo. del Estero.
This site belongs to the judicial branch of power of this province. Everything in this site
including the navigational structure, graphics and animations was designed and created by me.
Although no longer in charge, much of the graphics, animations and source code currently in
use remain my creation as can be verified by the copyright notice in the html source code.
1998-1999 / Manager - Technical Service & Support Department
Head of technical department for the local franchise of
Arnet, the largest ISP in Argentina.
This franchise includes all the territory of the province of
Santiago del Estero.
1996-1997 / Technical Consultant - Information Technology
Development of small information systems in Java for companies local to Sgo. del Estero,
Argentina. Personnel training for various organizations in Sgo. del Estero on basic Internet
Skills. Consultant for Icox, a Canadian-Argentine company
providing internet services for Argentine businesses.
Ref. Bruno Schmidt
1993-1998 / Technical Consultant - Graphics and Video
In charge of installation and maintenance of computer systems and digital/analog video
editing equipment. Computer Animation for video. Calibration, digital treatment and
preparation of pre-press originals for color catalogs and flyers. Personnel training to
assist in these tasks, AMP Producciones, Sgo. del Estero, Argentina.
Technical consulting and personnel training, FREDY Publicidad, San Miguel de Tucumán, Argentina.
2D & 3D graphic design. Participation in production of TV commercials for these companies.
1992 / Sales Representative
Sales and promotion of educational material and personnel training for direct sales
and marketing. Grolier Inc, Canada.
1990-1991 / Software Developer
Design and implementation of computer applications and tools, LAN and computer
system maintenance and personnel training. Among applications developed are data
acquisition and control programs for gel electrophoresis of DNA and mathematical
analysis tools, S.U.N.Y. at Stonybrook, biochemistry department.
Ref. Dr. Benjamin Chu
1989-1992 / Freelance Graphic Designer
Freelance graphic design for small companies and businesses in Long Island.
1989-1992 / Programming Assistant
Participation in development of routines in C and Assembly Language for large
programming projects for companies such as Radio Shack/Tandy and Lavalin Engineering
Inc. in Montreal, Canada. SOFTPOWER Inc., New York.
Acquired Skills
Applications:
Systems Architecture, Interactive Graphics, Communications, Data Acquisition,
Control, Operating Systems, Utilities
Operating Systems:
WINDOWS, LINUX, UNIX, CP/M, MS-DOS
Computer Languages:
JavaScript, Java, C#, F#, C/C++, Assembler for MC68000, 80x86, 8080/8085/Z80,
BASIC, PASCAL, FORTRAN
Web Standards:
HTML5, CSS3, JSON, XML, XSL, JSP, ASP.NET, ASP, Flash
Software Platforms & Computer Programs:
Node.js, Microsoft Internet Information Server, MySQL Server, Microsoft SQL Server,
Idea Webstorm, Eclipse, Sun Forte/Netbeans, Autodesk 3D Studio MAX, Blender,
Adobe Photoshop, GIMP, Macromedia Flash, Adobe Illustrator, Macromedia Freehand,
Corel Draw, Adobe Page Maker, Adobe Premiere, Microsoft Office, Autodesk Animator Pro, etc.
Other skills:
Extensive teaching and training experience. Marketing and advertising experience
in print, radio, TV and the web. Direct marketing experience.
Experiments
Stateless Webgl Shader Particles
An experiment created while developing the particle vertex and fragment shader code used in
this website. While my site is effortlessly using around 5000 GPU particles and the demo starts with
30000, on a decent machine a GPU can handle quantities around the hundreds of thousands.
Audioreactive 2D Canvas Particles
The current result of various live coding sessions during live music performances using 2D
Canvas and the Web Audio APIs. You need to grant the page access to your microphone and
permission to open a second window for displaying the graphical output as it is intended
to run on two monitors. While not easily accesible, it also has hard coded MIDI controller
functionality that you can adapt if you download the gh-pages branch from the github repo.
2D Canvas Game Experiment
A small experiment written while teaching about game coding. It's using Box2DWeb for physics and the HTML Canvas 2D API.
vminpoly
A polyfill for the newer CSS3 distance units and some media queries.
P.D.:
While there are more experiments that I've built over time that I want to publish, I'm still
working on this website so hang on and they'll start showing up as my time allows! In the
meantime you may check out my old website.
Articles
Collections: Multivalue-per-key Maps
The Java Collections API in java.util.* is a very powerful and fundamental toolkit for
managing sets of objects and is used in practically all facets of software development,
from low-level caches, to O/R mapping, to GUIs.
However, occasionally we have needs that extend beyond the basic functionality provided
in the API. One very common need not handled by the collections framework is to provide
maps that can hold many values for a particular key, much like databases feature non-unique
key indexes. Having such a collection class would make this job very simple in Java.
Continue reading...
Algorithms: Phonetic Coder for Spanish Words
Sometime ago I posted some code which ranks names according to their similarities based on
Levenshtein's word difference algorithm. In this article I mentioned I had developed an
algorithm to encode names quasi-phonetically according to their pronounciation in Spanish,
much in the spirit of Soundex and Metaphone.
Since then, I've received a few requests by email with respect to this algorithm so I think
it would be good to answer them all in a single Java Tip, while simultaneusly showing how
to use Regular Expressions efficiently in Java.
Continue reading...
Technique: Generic Linked Lists through Inheritance
Although the java.util.LinkedList class included in the JDK is good enough for most cases
requiring linked lists, sometimes conditions will arise when it might not be as useful.
Here I propose an alternative implementation using a combination of generics and inheritance
optimized for better memory economy and possibly a slight increase in speed, although the
latter should be barely noticeable. This example will also illustrate some interesting
applications of generics.
To understand where I'm coming from I'll need to explain some things about how Java stores
objects in the heap and how this affects the standard LinkedList implementation.
Continue reading...
Persistence Layers
As I undertake my first project management role, where Ill be leading a really small group of
3 developers (myself included) into an agile development effort, Im allowing myself to look at
all the unconventional technologies on the look out for interesting innovations before the
design is completely fixed. I will however keep a conservative attitude so as not to get too
excited about the toys to be found out in the wild (wild toys might eat your project and
your budget!).
Continue reading...
Text: Human Names Similarity using Levenshtein Algorithm
Using the previously posted Levenshtein Edit Distance method, this one builds upon the
functionality to provide a name similarity ranking.
The benefits it provides over using plain LD is that it is indifferent to the order a person's
name is written, thus being very useful for sorting results of name searches.
Continue reading...
Text: Levenshtein Word Distance
Here's a small implementation of the Levenshtein Word Distance algorythm written in Java.
The algorythm is good for measuring edit distance between two words and is normally used for
spell checking and similarity sorting, but I've been told it can be used for other things as
well. If you want some in depth explanation of how it works check out this site or this one
that has a nice little applet showing its internals at work.
Continue reading...
Swing: Tiling Windows
JDesktopPane as it is doesn't provide tiling and cascading. Here's the routine for tiling. Its
priority is to get as many windows as possible to have the same size. Here's the code
cascading windows.
Continue reading...
Swing: Cascading Windows
JDesktopPane as it is doesn't provide tiling and cascading. Here's a simple routine for cascading.
The code is implemented in static methods for simplicity but some might prefer to include the
methods in a subclass of JDesktopPane or a DesktopManager.
Continue reading...
Graphics: Painting Textures Fast
Following the recent Java2D discussion some of you might be wondering how to put some of that
information to good use. A deeper understanding of why TexturePaint results in lower preformance
can be found in that thread.
Here's a simple way to paint an arbitrary Java2D Shape with a texture using all the hardware
acceleration the current rendering pipelines can provide. This routine, although still having
lots of room for important optimizations, is a lot faster than ye' old TexturePaint.
Continue reading...
Face to face with Java2D
Woa! Don't fire up those flame-throwers just yet! This isn't a thread about why native code is
better, etc, etc. I mean to say that Java2D could fly just using better Java code.
Take Color, GradientPaint and TexturePaint and the low-level pipelines that actually paint stuff
with these classes for example. Here are three implementations of the Paint interface that really
make me wonder what's going on over at Sun.
Continue reading...