Daniil Baturin's curriculum vitae

When you don't focus on just one field, your CV becomes a mess and needs more and more tailoring for particular offers. This is an attempt to write a generic CV that reflects both programming and network administration sides of my career.

What I can do

Programming

Most of my public code is on Github (github.com/dmbaturin). VyOS, the biggest project I maintain, is at github.com/vyos, although most of the code is inherited from Vyatta and is not indicative of my personal skills (maybe the size is indicative of my ability to work with large code bases).

General

I'm familiar with the basics of algorithmic complexity. At least I can tell O(n) from O(exp N) and know the complexity of lookups/updates in common datastructures. I can estimate the complexity of the code I write, suggest algorithmic optimizations, and trade one resource for another (stack for heap through tail recustion, CPU time for memory through memoization...).

I'm familiar with concurrency primitives and problems they are supposed to solve (although I'm by no means a concurrency expert).

What I have little or no experience with: parallel programming (used MPI in Fortran90 toy programs), programming for mobile devices, Windows programming.

Languages

Wrote useful programs in Python, OCaml, Perl, C, Ada.

Wrote toy programs in Haskell, Scheme, StandardML, Fortran.

I use JavaScript it for DOM manipulation, but I'm not familiar with any of the popular libraries, so it's safe to say that I don't know it. I'm not familiar with server side JS at all.

Ah, yes, Bourne shell. I don't know if it counts, but I wrote a lot of it.

I also used PHP, but I don't want to do it anymore, though I do contribute to projects written in it such as MediaWiki occasionally.

Web programming

I wrote websites/applications back then, but I haven't done it in a long time, and I know things changed. If I get into it again, I'll have a lot to catch up with.

Nonetheless, I'm familiar with the structure of web frameworks (MVC model, request routing...), can write valid XHTML 2.0 and HTML5 as well as CSS, and I'm using template engines such as jinja2 outside of web programming quite often.

Relational databases

Worked with SQLite, MySQL, and PostreSQL.

I can insert/update and select data (and also group and filter it with WHERE, LIKE, HAVING etc.).

I can design simple database schemas and normalize them (I rarely go beyond the second normal form though).

If the database is going to be complex, or big, or both, I'll leave it to someone else. I also have very little experience with stored procedures and triggers.

Tools and processes

I'm using git for all my projects. I used Subversion long time ago, also used Mercurial a little.

I understand why unit tests can be a good idea, used Python unittest module, OUnit, check, and some other unit test frameworks.

I packaged my own and third party software into RPM and DEB packages.

I'm familiar with high level build tools such at GNU autotools and Oasis, and I'm using them in my own projects.

Used Jenkins for continuous integration.

Used Bugzilla, Mantis, and JIRA issue trackers, and the Phabricator collaboration suite.

I run open source projects with more than one contributor.

I contributed packaged to PyPI (Python) and OPAM (OCaml) repositories.

Operating systems

I'm familiar with the POSIX API, and some of the non-standard functions from Linux and BSD systems. I have a cursory understanding of the System V ABI on x86 and x86-64. I'm also familiar with the filesystem hierarchy standard and I follow it in all my projects whenever I can.

Network programming

I'm familiar with the socket API on UNIX and different types of sockets. I'm also familiar with the message formats of common protocols such as HTTP 1.1, SMTP, or SIP. I have written protobuf schemas and used protobuf compilers, and I'm familiar with other message serialization libraries such as msgpack. I have some idea how to use message brokers such as ZeroMQ too.

Courses

Introduction to functional programming by Delft on edX. Verify.

Programming Languages by the Univerisity of Washington on Coursera. Verify.

Networking

General networking

Can design and assess small and medium size networks and addressing plans (choose physical media, VPN protocols, routing protocols etc. to match the requirements).

Can diagnose network problems, use standard tools (traceroute, nmap, netcat, whois etc.), make and interpret traffic dumps with tcpdump/tshark.

Used IXIA Networks equipment for performance testing.

Have experience with IPv6 and dual stack setups, including router advertisment, DHCPv6, IPv6 BGP, DNS records and so on.

Certifications

Switched networks

Worked with Cisco (Catalyst and Nexus), ProCurve, Dell PowerEdge, Force10, Brocade ethernet switches.

I can setup 802.1q VLANs, QinQ, link aggregation. I can setup spanning tree protocols when I have to (I prefer link aggregation whenever the topology allows).

Familiar with L2 security features such as private VLAN and MAC address policies.

What I have very little or no experience with: MPLS, optical network infrastructure (DWDM etc.), TDM and SDH networks, wireless networks (of any kind).

My favorite switch product line is Catalyst.

Routed networks

Worked with Vyatta/EdgeOS/VyOS, Cisco IOS, VMware vShield, OpenWRT, Brocade, and other routers/L3 switches.

Used OSPF, BGP, RIPv2 (a little). Wrote routing policies (route-maps in Cisco terms) to avoid route leaks and influence routing decisions (AS path prepend and so on).

Set up small autonomous systems from scratch (from RIPE application to configuring peering/transit sessions).

Used multiple VPN protocols and scenarios including IPsec, GRE/IPsec, OpenVPN in site-to-site and client-server modes, L2TP/IPsec and PPTP for remote users.

Security

Used multiple VPN protocols and scenarios including IPsec, GRE/IPsec, OpenVPN in site-to-site and client-server modes, L2TP/IPsec and PPTP for remote users. Set up IPsec between different vendors' equipment.

Configured firewall and NAT on multiple platforms.

What I have little or no experience with: DDoS mitigation (other than blackholing the client), application layer firewalls.

Systems administration

UNIX

Worked with RHEL/CentOS, Debian, FreeBSD, Solaris (a little), SCO (a little).

Can perform the usual tasks: install packages, configure services, add users and so on.

I write shell scripts routinely.

What I have little or no experience with: mandatory access control, unattended installation (I have some idea how to setup cobbler/koan, but not much more than that).

Virtualization

Used VMware, KVM, Xen (a little). Made OVFs for VMware and VirtualBox, used VMware OVF fields for appliance autoconfiguration.

Worked with Amazon Web Services (mostly EC2) a little.

DNS

Maintained authoritative and caching name servers based on BIND, both masters and slaves. Used split-horizon DNS. I have some idea how to setup autogenerated PTR records for subnets.

What I have little or no experience with: DNSSEC.

VoIP

Configured FreeSWITCH for class4 and class5 deployments. Wrote FreeSWITCH scripts.

Familiar with typical voice provider operations (although I have little experience with softswitch and billing systems integration). I also have some experience with Asterisk and OpenSIPS.

I've configured FreeSWITCH to work with billing suites through RADIUS too.

I'm familiar with the SIP messages and can interpret SIP traffic dumps.

Where I worked

Sentrium S.L., Spain (remotely)

From December 2015

Sentrium S.L., Spain (remotely)

Helping various companies design, build, and maintain their networks and virtualization infrastructure.

I'm one of the founders, but the company is very small so far so the founders are doing all the actual work as well.

AVyS Telecom S.L., Spain (remotely)

From December 2013 to November 2015

A VoIP transit provider.

Redesigned the company network. Set up a VPN between points of presence with BGP for internal routing (a mix of VyOS and EdgeOS routers).

Participated in deploying new points of presence, configured FreeSWITCH class4 setups.

Developed VoIP-related in-house software, mostly in Python.

Vyatta inc., later acquired by Brocade, USA (remotely)

December 2010 to September 2013

Vyatta is a Linux distro for routers/firewalls where all network functions are controlled from a single CLI in the same fashion as in hardware routers.

First time I was a full time programmer without systems/network admin responsibilities.

When I discovered Vyatta in 2008, I instantly became a huge fan and contributed to the community a lot, so eventually they offered me to work for them as a programmer.

Participated in NAT CLI redesign, added IPv6 support to IPsec, and made other improvements to the system.

IT consultant

From March 2009 to December 2010

Helped a few local companies to improve their systems and cut costs by migrating to free software.

Soyuz-T, Tomsk, Russia

From September 2008 to March 2009

A furniture store chain.

I turned out to be the sole Linux and VoIP admin there (even though I had no VoIP experience before and had to learn it myself), and one of the two network admins.

Configured Active Directory integration for Linux machines, class5 FreeSWITCH installation and VoIP phones, SIP to PSTN gateways. Managed a Cisco-based DMVPN setup that connected stores in multiple cities with the headquarters.

Developed company's web store and websites for some of its subsidiaries in PHP (based on Drupal). Managed to fix some bugs in obfuscated PHP code (the company who made their original website used their own proprietary CMS, and when they went defunct, there was no one to fix it).

Occasionally provided support to users, fixed cabling and, performed hardware installations/repairs.

Promstroyneftegazproyekt, Tomsk. Russia

From May 2008 to August 2008

A civil engineering company.

Temporary contract. A small office with about thirty workstations and a couple of servers.

Didn't break anything, kept the network running, provided support to users.

My main accomplishment there was made long after I quit. My successor quit after a couple of months and didn't tell his successor the password for the encrypted partition with sensitive data, so after server reboot access to it was lost. The successor couldn't contact him, but he contacted me and somehow I managed to remember that password months after I last used it.

Tomsk Polytechnic University, Center for Technological Innovations, Tomsk, Russia

From Septermber 2007 to May 2008

A department responsible for communication between researchers and industry representatives interested in commercializing their work.

A small office with just five workstations and one server/router. Reconfigured the network to use a public subnet provided by the university rather than a NATed private subnet. Configured a web proxy (Squid) to conserve bandwidth and block NSFW websites. Kept the network and the workstations running, provided technical support to users.

This page was last modified: 2017 February 02