Who is Kevin Avignon ?

I'm a senior software engineer student at Ecole de technologie superieure in Montreal. I have an "exhaustive" experience with the .NET environment; I've completed three internships and was exposed to C#, XAML, Roslyn, F# and Akka.NET to name a few. Basically, I mean to express that for the part of .NET, I would be a great asset to work on it ! I can code in Java and my strengths in C# and F# can be used to code in Java. I’m enthusiast software developer with a keen interest for mobile, machine learning and mixed realities. Since I started my bachelor, I have joined a scientific student club in where we develop unique video games from scratch using mostly C# and Unity3D. Last fall (2015), I was given the chance to replace a class in my curiculum by a special credited project that was develop in correspondance with my student club.

My Accomplishments

Being interest by role playing games such as Final Fantasy Tactics developped by Square Enix, I developped my own prototype for Android during the fall. The main purpose of the project was to be able to reproduce some of the experience found in that game using other technologies such as augmented reality and voice recognition. During that project, using several design patterns such as inversion of control (IoC), Builder, Factory and Strategy, I was able to make a prototype where a user can control a 3D object which can move on a map of squares with a limited range per round. That user is exposed to actions such as Move, Attack, End Turn, Those are the kind of actions that can be found in Final Fantasy Tactics.

I created my own artificial intelligence. The AI was provided with three different scenarios; 2 for offense and one for defense. The offensive patterns were alike: attack a character inside the party of the player. The distinction between the two was one was to target the closest target and the other was to target the character which would receive the most damage. By creating three different roles for characters (Warrior, Magician, Sniper), I was able to this by enforcing bonuses on roles. The last scenario was to either move towards the healer once the health got under a certain level (<50%) or make the healer move towards the character with the biggest need of a health boost. Using a greedy algorithm developped by yours truly, I was able to create an evaluator for each character inside the AI party to make sure to select the best overall scenario depending of the current state of the game.

Something unusual about the management of this project was that I wanted to have some sort of Agile mindset with my supervisor(teacher) who had to overview my work at the end and answer to questions if I ever needed his help. In order to work as if I was having a client, I was doing weekly meeting of rougly 10 to 15 minutes with my teacher to give status quo about the development of the prototype. As I was going through the project, I was developping my issues ahead of time and always making sure to stick to just one of them a time to be completely focus of one single thing. The development process was done with the help of TDD. All the work was first designed as unit tests (NUnit) then implemented to be tested afterwards and finally, refactored to be as cleaned and clear as possible.

I also joined a .NET user group in which I have had the opportunity to gain a more profound knowledge of the MSFT (Microsoft) stack of technology by going often to the tech talks. I was also lucky enough to give my own talks. At my first, I was talking about the new compiler platform introduced by Microsoft in 2014, Roslyn. During that talk, I made a summary of what was Roslyn and how we could develop easily our very own source code analyzers and code fix providers which are used to analyze code and refactor it if needed. At my second tech talk, I introduced the functional programming (FP) paradimg and the F# language. That talk, I’ve really enjoyed it. After my first, I got past my fear and with also a much bigger audience than the first (77 people attending vs 42), I was asked more questions about the subject and was glad to answer. People also look more interested about learning about FP and in particular, learning what was possible to do with F# in general.

Right now, in collaboration with the CODE magazine, I am writting my first technical article concerning the Roslyn API and how can a developer start his/her own code aware library with code analyzers and code fix providers. After the review that was done a few weeks ago, I down to polishing what I sent them and make everything is in order witht the feedback I was given.

My industry experience

I have successfully completed two internships during my bachelor. At first, from April 2014 to August 2014, at Morneau Shepell, I was a system developer intern and I had to develop performance tools such as a performance report generator for Excel or a performance counter analyzer for a single service on multiple machines. During my second internship, from January 2015 to April 2015, at nVentive,I have had the chance to create a Windows Phone 8.1 application to have access to the weather of any city of my liking. I also used the Roslyn API to develop source code analyzers. Those analyzers look through the source code and try to find possible styling mistakes or a possible coding problem that won’t cause any issue during the compile-time.

Currently, I’m a software engineer intern in distributed computing at Genetec. During the three months periods out of four that I have been there since January, I was able to do many things. First, I created a support tool in order to make micro-controller more secure by disabling FTP, Telnet and SSH via web requests. In a simulator, I was able to create implement a file transfer protocol that was designed internally. Using Akka.NET and F#, I implemented a low level socket message based system for incoming connections ona distributed architecture using the Actor model. Right now, I am working on decoupling the data model architecture of a microcontroller on both server and client side code.

I think it would be good idea to mention that this would not be my first rodeo. I successfully completed a Google event that occured last summer, Google Summer of Code 2015. I had to update the ?RefactoringEssentials library in Visual Studio using C# and the Roslyn API. That library, once installed, looks through the source code of a software project and proposes possible code refactoring to make it cleaner and more efficient.

Quick Relevant School backgroud summary

Having have done a class about architecture of parallel computing in C, I can say that I have a acquired some basic knowledge of C. In that class, I was exposed to create sequential and parallel algorithms using C, OpenCL, MPI and Cuda. I would also like to add that even though I haven't seen all existing filters that are out there, during my 2D graphics class, I was introduced to spatial filter,convolution, Gaussian filtering and whatnot to be able to reduce noise in an image when we're filtering it.

I took two classes to get a better understand understanding of user interface development ; Design and evaluation of user interfaces + advanced user interfaces. During those classes, I was shown the ways to prototype quickly mock user interfaces and evaluate them appropriately using the help of users. During the advanced user interfaces class, we were exposed to developing complex interfaces using Java and OpenGL for instance.

I took a class concerning emerging technologies. The class was separated in two parts : computer vision and mixed realities (augmented and virtual realities). During the first part, I developped a WPF app where using the depth and color frames from the Kinect 2.0, I made possible to make a 3D image of the environment in real time. During the second part, we had to develop virtual reality environment using Oculus Rift, Kinect and FinalIK for inverted cinetic movement. The user had the chance to act as an archer and fire arrows at trolls coming its way while he was exploring the environment.

Interesting Links

I love being involved with the developer community because it's mainly thanks to them that I am where I am right now. Because of that, I started my blog for .NET development. It has been a while since I wrote any post but I still find it quick a good read. Also talking about getting involved with the community, I started to get involved in Stackoverflow, asking questions but more importantly, answering to questions when I see I have enough knowledge to answer that questions. Finally, it is possible to see my open source contribution by looking at my ?GitHub profile.

Blog : http://www.diveintodotnet.com Stackoverflow Profile :http://stackoverflow.com/users/4154141/kevin-avignon ?GitHub Profile : https://github.com/Kavignon

My Summer occupations

The only occupation that I have for the summer is a class about design and engineering in video games which is a class that occurs twice a weeks for 3 hours each day. I will have 2 exams (mid-term and finals). I assume that class will have but only lightweight course load. Making so, I can assure to give between 32-38 hours of work per week for the the duration of the program. What I won’t do because of this course at night, I will make up for it during the week-ends.It could be possible that a week (second week of August), I go away for a week. If that were to happen, then I would only make up by pulling extra time two weeks before and work to catch up on what I’ve missed.

Strongest Programming Languages 1. C# - 3 years 2. Java - 2 years 3. F# - 5 months 4. C++ - 3 months

Project of Interest Create a Telepathy Connection Manager for Ring protocol. Being that it is a project that requires skills with C++, I propose from here (3-25) up until (5-22) to work to improve my knowledge of C++ by going through coding platforms such as ?CodeEval, ?HackerRank and ?CodeCombat using only C++ to make more efficient with the language and thus, a better programmer suited to work on this project

Proposed schedule: 23 April - 7 May: Project integration, documentation, compilation. 25 April - 7 May: Discover Telepathy backend API and check how to interface it to our Ring API (D-Bus) -> https://github.com/TelepathyQt 7 May - 16 May: write documentation to explain how the solution will be architectured 16 May - 20 Jul:implement the Ring backend for Telepathy 20 Jul - 31 Jul: Find a Telepathy client to test and validate the backend implementation 31 Jul - 8 August: Push our backend to Telepathy maintainers for integration 8 August - 15 August: Tests and documentation.

Contact Details

Email : kevin.o.avignon@gmail.com