Marcel Popescu

Marcel Popescu

Targoviste, Romania
Hire Marcel
Scroll To View More
Marcel Popescu

Marcel Popescu

Targoviste, Romania
Member since June 13, 2014
Marcel is a senior developer with over 20 years' experience. He prefers back-end development, is great with algorithms, and prides himself on well-designed code. He is fluent in English (both spoken and written) and has written an introductory book on TDD.
Marcel is now available for hire
Portfolio
Experience
  • C#, 9 years
  • .NET, 9 years
  • ASP.NET MVC, 4 years
  • Entity Framework, 3 years
  • Reactive Extensions, 1 year
  • Test-driven Development (TDD), 5 years
  • Agile Software Development, 4 years
  • SQL, 15 years
Targoviste, Romania
Availability
Part-time
Preferred Environment
Visual Studio
The most amazing...
...program I've written automates an error-prone, three-day-long manual database replication down to a two-minute console app.
Employment
  • Senior .NET Developer
    Legality Software
    2014 - PRESENT
    • Created a daily backup system for NetDocuments, a remote cloud that doesn't allow deletion (mandated by law for this particular customer).
    • Created an extensible system notification application that interacts with the Lexis Nexis TimeMatters application and provides additional information.
    • Wrote an application synchronizing the TimeMatters database with legal cases in a few US jurisdictions; the synchronization can be done on a schedule and it allows the lawyers to be automatically notified of new cases, court appointments, and other information. The Windows service part of the application and the front-end systray apps communicate through a combination of UDP (for automatic discovery of the server) and WinAPI.
    • Added an application for connecting the phone system with the TimeMatters database, so that the lawyers can automatically get case details when on a call with customers.
    Technologies: C#, SQL, WebAPI, WinForms
  • Data Importing and Processing Server
    Quadrant.io (Investormill, Inc.) (via Toptal)
    2016 - 2016
    • Built high-speed processing of large data files (up to 10 GB).
    • Wrote code to split a file in chunks with the additional requirement that the split happens on a line end (since they were line-oriented text files).
    • Facilitated multi-threaded processing of large files without running out of memory.
    • Processed the data while downloading it so that processing was over in 1m 33s for a file where the download alone took around 1m 27s.
    • Made extensive use of unit tests.
    Technologies: C#, TDD, Multi-threading, LINQ, web, zip
  • Python and Java Developer
    Bank of America Merrill Lynch
    2015 - 2015
    • Transitioned two internal projects from using SIC codes to NAICS, one written in Python and one in Java. The projects had an original estimate of six months; we managed to finish them in three (I was the only developer on the Java project and also participated in the changes to the Python project).
    • Generated new aggregation reports based on risk industry groups and sectors (based on the newly added NAICS codes).
    • Added new permissions to enable finer control on who is allowed to make specific changes in the Java project UI.
    • Optimized a query that was taking a couple of minutes on the DEV server down to 10 seconds by using a combination of temporary tables and JOINs (we were not allowed to change the existing tables, not even to add indexes).
    • Advised the rest of the team on design and testing issues.
    Technologies: Python 2.6, Java 1.6
  • Programmer
    DeCare Systems Ireland
    2013 - 2014
    • Automated the replication of data from staging to production, changing a three-day, error prone manual process to a two-minute automated one using SQL Server Data tools.
    • Worked on the Avon shop for the Australia/New Zealand region. This implied a number of changes to the existing workflow, because the AU/NZ market was the first one to support direct delivery of packages in addition to delivery by representative; as a result of that, it was also the first one that supported direct payment on the website (previously, the orders were paid on delivery to the representative bringing the package). The front-end is a C# MVC 5 application and the back-end is mostly WCF services.
    • Integrated a new payment system (PayPal Express) for the Avon Australia and New Zealand web sites. Even though I had never integrated with PayPal before, I managed to finish the task in two weeks, a week ahead of the estimate I had been given. This involved changes on both the client and the server sides to the logic to redirect to PayPal and accept the callback from their site to ours and integrating with our existing services to record the payment attempts.
    • Uploaded media files to a CDN (content distribution network) service in order to improve response times and reduce pressure on our servers. I used both the C# Rx libraries and Async/Await calls for this project. I also solved an issue where some of the paths were over 260 characters long; the .NET implementations of the file APIs in System.IO do not natively support that, so I had to replace some of them with direct calls to the Win32 APIs that allow for a path up to 32K characters long.
    • Rewrote an application to reflect the Avon UK branch’s change of shipping company, which was hard-coded into their previous VB6-based application. The new application was written in C# using TDD and trying to respect SOLID principles where possible. The process was complicated by not having a scanner, a printer, or access to the new shipping company’s web service for the first two weeks, so I had to fudge it in a process that actually worked to the application’s benefit because it forced abstraction of the endpoints.
    • Added a health monitoring system to a complex network of WCF services as a side project. The services were distributed on multiple servers and had dependencies on databases and possibly other services (including other servers). The application had to be as future-proof as we could make it, which led me to add a new interface to all services, plus a common DLL implementing the interface with a single method taking and returning a JSON string. The input string contained a hierarchical description of the services that we wanted to check so that each service would first confirm hat it was working before calling its dependencies; the result would either confirm that everything was working or help to quickly pinpoint problems. Since a lot of the web services were written in C# 3.0, this project didn't use any technologies besides WCF and a JSON parser.
    Technologies: C#, MVC
  • Branch Manager and Lead Developer
    MicroBilt
    1999 - 2013
    • Switched the company's back-end applications in Delphi 5 to C# as.
    • Reduced writing WCF services to about a week through practical experience, assisted by my CodeSmith template written to get the common parts out of the way and allow everyone on the team to focus on what was new in each application.
    • Wrote the back-end application to create an in-house credit service for people who didn’t have a good standard credit report (https://www.prbc.com/home/how-does-a-prbc-credit-score-work) in a 6-month project.
    • Wrote the Enhanced People Search (http://www.microbilt.com/microbilts-enhanced-people-search.aspx) which uses a combination of data sources to create a comprehensive history of a person. This was quite a complex report because it included partial and often contradictory data from dozens of sources, such as different spellings of names, different addresses, and even different SSNs since some people would use their spouse’s SSN on their credit applications. We had to do a lot of optimizations on this service due to the large amount of computation involved.
    • Developed the ID authenticaation service (http://www.microbilt.com/identity-authentication.aspx) as a fraud-prevention measure using historical information databases to determine whether a person actually was who they claimed to be.
    Technologies: C#, WCF, Delphi
Experience
  • Simple MVC View Engine (Development)
    https://github.com/mdpopescu/public/tree/master/SimpleViewEngine

    A minimalistic engine for ASP.NET MVC that enforces the removal of logic from the views. Only "if," "foreach," and "include" are supported, so all data must be placed in the model instead of being retrieved by the view when it is rendered.

    The code was developed using TDD and uses Linq and reflection plus a dedicated parser. The engine can also be used independently of MVC (but alternative projects like SmartFormat might be simpler to use in those cases).

  • Fail-over Mechanism (Development)
    https://github.com/mdpopescu/public/tree/master/Failover

    An implementation of a fail-over mechanism, where several actions are sequentially attempted until one succeeds.

    Additional information can be found at http://mdpopescu.blogspot.ro/2013/06/fail-over-algorithm.html.

  • Excel File Comparison (Other amazing things)
    http://mdpopescu.blogspot.com/2013/06/comparing-excel-files-take-two.html

    An article presenting a console application for comparing two Excel files. The project was developed in C# using TDD and is available on GitHub.

  • TDD Book (Other amazing things)
    http://www.amazon.com/dp/B005TEN130

    This is my "TDD by Example" book, where I develop an expression evaluator (a class that can evaluate expressions like 2 + 3 * 5 - x), piece by piece using C# and TDD.

  • Coursera Training (Other amazing things)
    https://www.coursera.org/course/algo

    Completed Coursera's "Algorithms: Design and Analysis" courses in 2013 with a score of 97% on the first course and 74% on the second. The courses comprise approximately 100 hours of training and are designed and facilitated by Prof. Tim Roughgarden of Stanford University.

  • Dynamic Master/Detail Forms with Knockout (Other amazing things)
    http://mdpopescu.blogspot.com/2013/07/posting-dynamic-master-detail-forms.html

    The article presents an interesting dilemma: Create a dynamic form, using MVC 4+ and Knockout, that nevertheless gets POSTed correctly, by generating the right form IDs.

  • C# Best Practices and Tips by Toptal Developers (Publication)
    This resource contains a collection of best practices and tips for C#, provided by our Toptal network members.
Skills
  • Languages
    C#, HTML, HTML5, JavaScript, Delphi, Python, SQL, CSS, Java
  • Platforms
    Windows, Rackspace
  • Frameworks
    Entity Framework, .NET, ASP.NET MVC, Bootstrap, Knockout.js
  • Libraries/APIs
    JSON REST API, Reactive Extensions, NetDocuments API, jQuery, Dropbox API
  • Tools
    ReSharper, Git, Microsoft Team Foundation Server, GitHub, Visual Studio 2013
  • Paradigms
    Agile Software Development, Test-driven Development (TDD), Reactive Programming
  • Storage
    MS SQL
  • Misc
    Telerik for WinForms
I really like this profile
Share it with others