.NET Developper - Software engineer

Mathieu VIALES

For a concise summary, jump directly to the Too long, Didn't read section

Web Developer

I began coding at the age of 14, starting where every web developer started: with HTML and CSS. I kick-started my coding by reading the online ressources provided by openclassrooms.com back in the days it was still called “Le site du Zero”. With no more ambition than to do some wibbly-wobbly barely-workingy computery-stuff I started learning PHP to build simple websites and C++ to create basic 2D video games (all of these projects are now lost).

Today, after 9 years of practice I understand and know enough about computers and programming to create and maintain the code needed to build a robust web application using the C#.NET stacks but also, when needed, using virtually any object oriented language.

Photo Mathieu

Software Engineer

It does not only take good code to make good software. Just like any other field of engineering, building stable and maintainable software also requires good planning to “anticipate and dissipate” problems before they show up and to use the right tools for the right task, high flexibility to accommodate the unforeseen problems, positive thinking to stay motivated and focused as well as strong resourcefulness to design appropriate solutions to a task and quickly learn the required skills to overcome difficulties and, finally, teamwork since many projects require the association of the skills from many team members, each with their own domain of expertise and views on the projects.

Over the years the many projects I have worked on, that it be for leisure as personal projects or for my “regular” day-job, gave me a very good sense of anticipation by learning out of experience that yoloing a project never gives good results. I have been a very autonomous and self-sufficient person since childhood and always had a strong ability to learn and understand due to my peculiar attraction to anything complex, technical, scientific or, generally speaking, “curiosity-inducing”. My good-hearted nature, globally joyful behavior and strong sociability makes me a person with whom others like to work, from a human relationships perspective.

Realizations

Nathalie VIALES - Relaxation & Meditation

I built this website for a professional working in well-being and personal developpement.

The original design was maquetted by a 3rd-party designer, but I did the implementation of the site from front-to-back, including search engine optimization and communication advising.

The site was built with search engines and user-experience in mind, making it very fast to render, easy to navigate for humans and easy to parse for robots. I have also leveraged Google's professional-oriented tools such as Google MyBuisness to increase exposure of the site and the person it represents.

It is built using C# .NET Core 2 and leverages Docker's amazingness to be easily and cheaply hosted.

View the live version - Relaxation & Méditation à Canohès

Foyer Rural - Ponteilla-Nyls

I built this website for the community center of a small village in the south of France.

This site's creation predates my switching to C# and .NET stacks, thus it was coded in PHP (Silex/Symfony) and is hosted on a shared apache server.

View the live version - Foyer rural de Ponteilla-Nyls

Open Source

The libraries and communities related to open-source have helped me a lot over the years, so I try to help others back by open-sourcing the code I write for my own projects which I consider to be potentially valuable to the community, and I also invest a part of my time atempting to help others on forums.

Selenium Utils

A C#.NET Standard 2.0 collection of utility methods for Selenium WebDriver.

I built this library as a mean to centralize and share my most commonly used custom-made extension methods for the Selenium WebDriver C# API. And hey, why not make it open source who knows ?

The NuGet package can be found here

View on github

HIBP - C# API

A C#.NET Standard 2.0 wrapper for the haveibeenpwned password REST API.

This library is meant to be way to make the already simple to use Have I Been Pwned API even simpler to use in C#.

The NuGet package can be found here

View on github

ReCaptcha

A .NET Core 2 implementation of Google's reCaptcha V3

This library's purpose is to simplilfy the integration of the third version of the famous google "ReCaptcha" utility. It is meant to be a plug-and-play unobtrusive way to leverage the invisible captcha.

The NuGet package can be found here

View on github

Tech Stack

I am specialized in Web development using Microsoft’s latest .NET technologies, but I am always open to new experiences and learning new stacks.

Server-side

After over two years working every day with C#, I consider it as the base stone of my back-end stack. I mostly use it in the context of web applications, leveraging the power of .NET MVC5 and .NET Core 2 frameworks along with razor.

Regarding data manipulation in a relational environment, I am used to working with Transact SQL and Entity Framework, both in code-first and database-first, the former being by far my preferred solution over the latter.


Client-side

While my main focus resides in back-end work, I am a decent web-integrator and I can write robust and maintainable client-side code using HTML, CSS (LESS, SASS) and JavaScript (JQuery, Vue.js)


Tools

My currently favored tools are Visual Studio 2017, SQL-Server 2016, Windows 10, Git & GitKraken, Sublime Text, GitHub or Visual Studio Team Service. I have also worked for a few years using the Azure portal.


Concepts

I am well-versed in Object Oriented Programming and the associated concepts such as Interfaces, Polymorphic and Generic algorithms as well as Reflection.

I am also quite comfortable with Dependency Injection thanks to several years spent using the Ninject library in MVC5 and my extensive use of .NET Core 2 and the built-in DI system.

Positions

Technical lead - .NET Engineer

Current position

Project UCamping
At CToutVert
July 2018 -> Now

I was offered the opportunity to lead a small technical team consisting of one senior front-end developper and one trainee back-end developper, to whom I acted as an instructor, to re-start and upgrade a dormant project. The site had been abandonned a few months earlier and had many flaws, bugs and broken parts.

The team's mission was to

  • Fix the broken user flow using the knowledge of an in-house UX expert
  • Fix the user experience through debugging and optimization
  • Fix the search engine visibility, in collaboration with an in-house SEO expert
  • Deploy and maintain two new sites using the same codebase
  • Design and integrate an elastic search database to boost the internal search engine's flexibility and response time

The project was based on an .NET MVC5 stack, which I was already quite familiar with. I was tasked with the estimation of deadlines, feasability and complexity of tasks aswell as their proper realization and implementation. I made sure that the code was getting cleaned and improved every time the project progressed, in order to shrink its technical debt where possible and to reduce its growth as much as possible everywhere else.


.NET Developer

At CToutVert
June 2017 -> July 2018

Following my apprenticeship, I was hired as a replacement for my former training tutor who was leaving the company. The responsibility for the two projects that he was in charge of maintaining and improving was given to me and I was asked to dedicate some amount of my time for system-wide emergencies such as bug-fixing or important feature requests.

During this year I was given technical access to the production machines, so that I could deploy and monitors my projects on the release environment with no need to request permission or supervision from a senior coworker. At the end of this year I was also tasked with assuring weekend duty to monitor and maintain the system’s stability and global health during the high-season.


Trainee .NET Developer

At CToutVert
June 2016 -> June 2017

Apprenticeship position linked to the LP APSIO (Bachelor's Degree) formation.

As a developer I took part in the writing and maintenance of the code used by the company’s web application. I worked mostly on the data layer and the internal administration interfaces. Most of my work was done as a member of a small team consisting of two other developers. This year was my introduction to C# and the Microsoft web tech stack, which made me quickly move on from PHP for my personal projects to use MVC5 instead.


Education

Company Formations

Web Applications Security

By Aelion
Décembre 2018

Some of the back-end developpers in the company attended a 3 days course with a .NET certified software engineer. This formation's purpose was to sensibilize the back-end engineers to the many possible means of attack through example, and to provide a few simple keys to protecting the software we write by writing an implementation to counter each of these attacks. Among the many topics discussed during this class, the most important ones were, in no particular order:

  • SQL Injections
  • XSS Injections
  • Origin validation (CSRF)
  • Integrity validation (hash, checksum)
  • Bots (captcha)
  • Authentication (Identity Server, .NET Authorization)
  • Password protection (encryption, hash, derivation)
  • Data hiding (Symetric & assymectric encryption)
  • DLL replacement (Software signing)
  • Overposting (just-what-you-need-model-design and the "don't use entities directly in forms FFS!" rule)
  • HTTP headers talk too much (hiding x-powered-by & such)

Only a portion of the company's developpers follow this course, but a coworker of mine and myself thought that what we were shown during these three days was valuable information to anyone related by any meangs to the actual source code no matter their actual position (front/middle/back end, Database expert, SEO expert, in-house lawyer). For this reason we organized two sessions of internal re-formation that consisted in a simplified version of the formation stripped of the actual implementation of the countermeasures. The purpose of this was to inform that the aforementioned attack existed and that it was of high importance to protect us from them.

Design Patterns

By Vaelia
September 2017

This formation focused on the theory and example implementation of many common design patterns. Among the ones studied during this 2-days long formation we focused mainly on the following one: Factory, Object Pool, Proxy, Composite, Singleton, Observer and Visitor.

The real purpose of this formation was not so much to teach us the exact name of these patterns, but to give us the tools to design solutions that are meet the requirement in the best possible way, by showing us many different paradigms.

JQuery - TypeScript - Angular

By Vaelia
January 2017

This 2-days long formation had us discuss and practice a wide range of basic and advanced concepts, mostly using JQuery and TypeScript. We learned the key advantages of TypeScript over regular JavaScript and created some simple application to demonstrate the power of this super-set.

We also talked about the best practices and recommended usage of JQuery as well as the best way to use it within a TypeScript file.


School

Web programmation, Bachelor's Degree (UK) - LP APSIO(FR)

2016-2017
Thesis

A one year course the resulted in a short thesis about the big O notation - theory of algorithmic complexity.

The following fields were taught and practiced

  • Computer development in Java, Android, PHP (Symfony), C# (.NET Framework).
  • Database management using Transact SQL and SQL Server.
  • System administration on linux (Ubuntu) using the command line and shell scripts.
  • The mathematics of computer algorithms and theoretical study of optimization.
  • Team management and handling of human relations within the workplace.
  • Project management and life cycles. This includes agile methods and GIT.
  • French and international law aimed towards software engineering authorship and licensing.

Web programmation, Higher National Diploma (UK) - BTS SIO (FR)

2014-2016

A two-year course with classes and practical exercises targeting the fields of

The following fields were taught and practiced

  • Computer development in Java, PHP (Silex/Symfony), MySQL and JavaScript & JQuery.
  • System administration on linux (Ubuntu), using the command line and PHP scripts.
  • Algorithmic theory, using pseudo-code.
  • Software building tools with Merise II, UML, flow charts and use-case diagrams.
  • French and international law aimed towards software engineering authorship and licencing.

I had two periods of two month as a trainee in two different companies during this formation. The first one was in a marine life biology laboratory as a C and PHP developer. I worked on an Arduino to create a floating data-reporting beacon. The second training period took place in a Web Development agency.

Too Long; Didn't Read

Like, REALLY over-simplified

Coding is a passion. I'm a C#.NET developer, specialized in .NET web technologies and tools. I value well-designed systems and I apply myself to produce elegant & maintainable code.


Development: C# .NET
  • .NET Core 2 (MVC, MVVM) / MVC5
  • .NET Standard 2
  • Entity Framework
  • Transact-SQL
  • Razor (TagHelpers, components)
  • The essentials
    • HTML
    • CSS (LESS, SASS)
    • JavaScript (JQuery, Vue.js)
  • Shell: Powershell, RedHat & Debian

Project & code management/deployment:
  • Git (CMD, GitKraken)
  • GitHub
  • Azure DevOps (VSTS)
  • Azure Portal
  • Agile (SCRUM)
  • Docker
  • System admin (Redhat, Debian)