I’m Mehdi Taileb. I’m a freelance developer based in Algiers, Algeria.
This page is about my working experience and my skills. It is organized in chronological order.
I grew up in Algeria. I graduated from the Ecole Nationale Polytechnique as an electronics engineer in 2003. My thesis was on the FPGA implementation of an acoustic echo canceller.
After my graduation I worked as an IT administration instructor (Linux servers) at the ENSI (Entreprise Nationale des Systèmes Informatique) and as an IT technical support engineer at the ENPEC (Entreprise Nationale des Produits de l’électrochimie) for about a year.
I moved to Moscow in late 2004 to pursue a PhD degree at the MPEI
In 2006, I began working as an FPGA engineer in Technor, a Moscow-based company which provided complex electronic systems development services. During my work I contributed to several FPGA-related projects and upgraded the company’s IT infrastructure.
Networking - G.709 FPGA project
While working on this project I implemented the whole FPGA-design which used two Virtex-4 FPGAs and featured a high-speed synchronous interface (10 gb/s) to an external serializer/deserializer (a Vitesse IC), G.709 frame-handling logic, a scrambler/descrambler, a Reed-Solomon coder/decoder, a DDR2-SDRAM buffer as well as the control infrastructure which managed the whole design from an external MCU (ARM-based).
In this project Matlab was used to generate stimulus data for the RS codec’s RTL models.
I had the opportunity to acquire the following skills:
- Xilinx ISE and Modeltech Modelsim
- ReedSolomon coder/decoder
- High-speed synchronous interfaces
- Using and patching the Xilinx MIG DDR2-SDRAM controller
- Handle complex design optimization tasks
- Clock domain crossing
- Debugging using logic analyzers (Xilinx ChipScope and an Agilent LA)
Radar emulation system FPGA project
I worked on the DSP part of radar emulation system and developed several IP cores (in Verilog) for Xilinx Spartan-3. For example, a quadrature modulator, an AWGN generator, a DDS generator with error correction and a CIC filter. The IP cores were used to upsample and apply AWGN to signals generated by a specialized software. The resulting signal sampled at 200 MHz was further handled by an RF frontend.
Since the design had tight space and timing constraints I had to use low-level optimizations such as fine-grain pipelining and advanced design analysis and floorplanning techniques to achieve design goals on the chosen FPGA. Also one of the design constraints was the required SFDR of 120 dB for the FPGA part of the design.
All the implemented algorithms were verified in advance using Matlab. Matlab was also used during the RTL simulation to generate stimulus and verify the RTL response.
The design was verified using a Spartan-3 development board and an Analog devices high speed DAC evaluation board.
I acquired the following skills:
- Using Matlab (FDAtool, GUIDE, Fixed point toolbox and others) to model DSP algorithms and handle fixed-point arithmetics
- Xilinx ISE and PlanAhead. Modelsim.
- Using advanced RTL optimization techniques
- DSP algorithm optimizations for speed and/or area
- Building advanced RTL simulation environments (Matlab and Modelsim) for DSP
- Manual floorplanning (Xilinx PlanAhead)
- Reverse engineering IP cores using Xilinx PlanAhead.
IT infrastructure upgrade
I used my knowledge of Linux and networking services as well as my knowledge of PC hardware to help upgrade all the server and network infrastructure. I also moved the infrastructure from Windows to Linux for almost all tasks.
I configured all the basic network services such as DNS, DHCP and bootp as well as routing services, email (SMTP/IMAP and web) servers, backup, Samba and a lot more.
I also migrated almost all the users (engineers) from Windows to Linux and provided training to facilitate the migration.
In 2008, I moved to DS Technology (an affiliate of Digital Solutions) where I worked on several projects, including the GOST-28147-89 encryption/decryption IP core, Null Convention Logic (NCL) projects implementation on FPGA and an FPGA-based USB 2.0 traffic forwarder (UTMI-based) used in a USB 2.0 traffic analyzer.
Some of the acquired skills are:
- Asynchronous design techniques and tools. I used Balsa language and tools to model and perform high-level simulations of the designs developed.
- Verilog PLI
- Detailed knowledge of the USB 2.0 standard.
Simplematica R&D, LLC
In 2011, I co-founded an electronics design center called Simplematica and I started working as the company’s CEO.
In addition to my CEO responsibilities, I participated in the following engineering and IT-related tasks:
- Using the TI CC2430ZDK ZigBee Development Kit, designed in-house sensors and Matlab (DSP algorithms and GUI) I developed the demonstration of a zigbee-based PPG-based remote wearable heart rate monitoring system.
- I built the whole IT infrastructure, including:
- I took part in defining requirements and writing design specifications
- I translated the IEC standards from English to Russian:
- ISO/IEC 24730-21:2012 Information technology — Real time locating systems (RTLS) — Part 21: Direct Sequence Spread Spectrum (DSSS) 2,4 GHz air interface protocol: Transmitters operating with a single spread code and employing a DBPSK data encoding and BPSK spreading scheme (IDT). ГОСТ Р ИСО/МЭК 24730-21-2014
- ISO/IEC 24730-2:2012 Information technology — Real time locating systems (RTLS) — Part 2: Direct Sequence Spread Spectrum (DSSS) 2,4 GHz air interface protocol (IDT). ГОСТ Р ИСО/МЭК 24730-2-2016
- ISO/IEC 24730-5:2010 Information technology - Real-time locating systems (RTLS) -Part 5: Chirp spread spectrum (CSS) at 2,4 GHz air interface (IDT)). ГОСТ Р ИСО/МЭК 24730-5-2014
- FPGA implementation of a specialized interface convertor (Different types of UART)
- FPGA implementation of a high-speed domain-specific multichannel and programmable PWM generator.
I’ve been working as a freelancer since 2016. I was finally able to find the right balance between work and continuous learning. Since 2018 I’ve been working half time in order to devote more time to raising my two children.
Freelance work gave me the chance to improve my knowledge of the Linux server infrastructure building and administration and acquire new competences in the development of microservices to automate different business-related tasks and help SMBs perform their Digital Transformation.
IT - Linux server infrastructure
IT-related tasks include:
- NAS: using FreeNAS
- LDAP using FreeIPA
- Network infrastructure using pfSense
- Automation using Ansible
- Monitoring using Zabbix
- MongoDB, Postgresql and mariaDB databases
- Samba domain controller for supporting Windows 10 clients
- oVirt virtual machines
- Backup using Relax-and-Recover and BorgBackup
- NGINX web server
- several domain-specific apps such as: TiddlyWiki, Passbolt, Gogs, Calibre, FireflyIII and many others.
Several years ago I adopted web-based software architectures for almost all the apps I develop. This gives me and my customers more flexibility and simplicity in term of administration and deployment. Even in some cases where I would have developed a conventional desktop-based software several years ago.
With regards to backend development, I acquired new competences in creating web backend and REST APIs using python.
My applications are mainly based on the following frameworks:
- Flask framework
- Dash: A platform library to create simple dashboards
- Anvil to create simple web apps featuring a drag-and-drop app builder
- MongoEngine and sqlalchemy to use databases (it’s worth mentioning that these are not frameworks)
- Jupyter to create interactive and flexible scientific and lab apps
These are some of the applications which I developed:
- Autmated banking transaction import, filtering and viewing using a banking REST API and dash
- Automatic application-specific backup and emergency recovery system (Web interface, job scheduler, users and rights management)
- RF testbench software using microservices, Jupyter, SCPI (using TCP-based remote access to instruments), web interface and serial interfaces (using RFC 2711)
- Simple business process automation for SMBs using Telegram bots, custom microservices, CRMs and custom web interfaces
These are the most important skills I acquired:
- Development of web-application backends
- REST API development
- Development of data models
- Business processes automation
Some of the libraries I use (Click to expand):
- click: a Python package for creating beautiful command line interfaces
- mongoengine: a python object data mapper for mongodb
- jinja2: a full-featured template engine for Python
- numpy: a library for the Python programming language, adding support for large, multi-dimensional arrays and matrices, along with a large collection of high-level mathematical functions to operate on these arrays
- pandas: Python Data Analysis Library
- plotly: Plotly Python Open Source Graphing Library
- prompt-toolkit: A library for building powerful interactive command line applications in Python
- pyserial: A Python Serial Port Extension for Win32, OSX, Linux, BSD, Jython, IronPython
- pyvisa: A Python package with bindings to the “Virtual Instrument Software Architecture” VISA library, in order to control measurement devices and test equipment via GPIB, RS232, or USB.
- transitions: A lightweight, object-oriented finite state machine implementation in Python with many extensions
- tqdm: A Fast, Extensible Progress Bar for Python and CLI
- dash: a productive Python framework for building web analytic applications
- Anvil: Full stack web apps with nothing but Python
- Flask: a lightweight WSGI web application framework
- FastAPI: a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints.
- telethon: Pure Python 3 MTProto API Telegram client library, for bots too!
- rq: RQ (Redis Queue) is a simple Python library for queueing jobs and processing them in the background with workers. It is backed by Redis and it is designed to have a low barrier to entry.
- rq_scheduler: A lightweight library that adds job scheduling capabilities to RQ (Redis Queue)
- asyncio: asyncio is a library to write concurrent code using the async/await syntax
- pydantic: Data parsing and validation using Python type hints
Development and IT tools
- Taiga to provide an Agile-like design-flow
- Zulip as a replacement of Slack
- Git using either Gogs, gitea or Github
- A custom software solution (web-based) to manage billing tasks
Current goals - 2021 and up
As of February 2021, I’m seeking long-term projects in FPGA and/or web apps backend development. I’m also open to discussions in many different areas of engineering. My main requirement is that the projects should be interesting for me in terms of acquiring new knowledge and skills.
One of the main issues I encountered during my journey as a freelancer was that nearly all the projects I delivered were solo projects. The worst thing is that I missed on any corrective feedback I needed.
That is why I decided to change my priorities and integrate team-based projects in order to get real feedback and to be a part of more interesting challenges.
Regarding FPGA-related applications I’m looking for projects related to HPC or edge AI applications. As a first step, I would like to substantially increase my skills and work with modern high speed interfaces such as PCI express, high speed ADCs/DACs or imaging sensors, high speed storage and high speed networking interfaces.
I also would like to have the opportunity to acquire new skills in AI for example.
One of the examples of an interesting project is an FPGA-based (for example Xilinx UltraScale+ MPSoC) high-resolution smart vision system for a specific application (for example, industrial automation). In such a project I’d be working on the hardware platform (sensors, memory interfaces, network interfaces and so on) for the first several months. Then I’d focus on the AI part developing hardware accelerators and using PYNQ as a platform to develop the SW/HW integration.
It also would be great to participate in some challenging projects such as developing open source hardware (I mean RTL), using and developing open source IP cores and using open source tools for these purposes.
From a software development perspective I would like to acquire new skills by integrating more tools, libraries and paradigms (for example continuous integration and delivery), as well as learn more advanced programming paradigms, languages and participate in more R&D-oriented projects.
At the same time I’m interested in smaller projects too. It makes me really happy when my work brings value to my clients’ businesses, be it a small bakery or a startup providing an Uber-like platform to plumbers!
Business process automation is really interesting for me as I can see the added value from my work when I help modelling, simulating, discussing, automating and integrating business processes for my clients.