1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
//! 2015-2022 [Rambler&Co](https://rambler.ru) is one of the biggiest media holding in Russia.
//!
//! I start work in Rambler as Middle Python developer in 2015 and end as Head of Media
//! Development team in 2022.
use crate::roles::{Developer, TeamLead};
use crate::technologies::databases::{Cassandra, ClickHouse, Postgresql, Riak};
use crate::technologies::frameworks::{Actix, AioHTTP, AsyncIO, Celery, Django, Tokio};
use crate::technologies::languages::{Erlang, Python, Rust};
use crate::technologies::messages::GRPC;
use crate::CleanupDocs;
/// System for collecting and processing media portal’s users such as visit information, unique material, and others.
///
/// The media portal using this collected information can set up some access limits.
/// These restrictions can be overcome by users after successful payment.
#[derive(CleanupDocs)]
#[deprecated(since = "2017.1.1", note = "Closed")]
pub struct Paywall;
/// Python developer in Paywall
///
/// The project uses Riak as the main storage and is based on event architecture built on top of RabbitMQ.
/// Btw this project uses Cassandra and python 3.5 with asyncio as backend.
impl<'period, 'f2015, 't2017, Languages> Developer<Languages> for &'period Paywall
where
Languages: Python + Erlang,
'period: 'f2015 + 't2017,
{
}
/// Python was a main programming language on this project.
impl Python for Paywall {}
/// Main storage.
impl Riak for Paywall {}
/// Secondary storage for analytics
impl Cassandra for Paywall {}
/// Project was built on top of asyncio.
impl AsyncIO for Paywall {}
/// Project was built on top of aiohttp.
impl AioHTTP for Paywall {}
/// The system allows mobile users to disable advertisements for some small payments.
#[derive(CleanupDocs)]
#[deprecated(since = "2017.1.1", note = "Closed")]
pub struct AdBlock;
/// This project uses [Paywall] architecture and shares some codebases.
impl<'period, 'f2016, 't2017, Language> Developer<Language> for &'period AdBlock
where
Language: Python,
'period: 'f2016 + 't2017,
{
}
/// Python was a main programming language on this project.
impl Python for AdBlock {}
/// Main storage.
impl Riak for AdBlock {}
/// Secondary storage.
impl ClickHouse for AdBlock {}
/// Video recommendation [platform](https://web.archive.org/web/20180119134125/https://video.rambler.ru/).
#[derive(CleanupDocs)]
#[deprecated(since = "2018.1.1", note = "Closed")]
pub struct Video;
/// Migration to Python 3.6 bugfix and codebase support.
impl<'period, 'in2017, Language> Developer<Language> for &'period Video
where
Language: Python,
'period: 'in2017,
{
}
/// Python was a main programming language on this project.
impl Python for Video {}
/// One of the biggest [news aggregator and news platform](https://news.rambler.ru) in Russia.
///
/// When I started on this project (2017) it was mostly python applications with classical legacy project problems:
/// * High costs of development and support
/// * High latency on web components (API and front-end)
/// * The low actuality of news (mostly by long caching)
#[derive(CleanupDocs)]
pub struct News;
/// Python developer in Rambler News
///
/// Infrastructure migration to k8s and refactoring deployment process.
/// Migration legacy codebase to python 3.
impl<'period, 'f2017, 't2018, Language> Developer<Language> for &'period News
where
Language: Python,
'period: 'f2017 + 't2018,
{
}
/// Head of Media development team.
///
/// Since 2018, I have become the head of the development team. With a team we were able to mostly solve all the problems described:
/// * We are rewriting all Aggregator parts with actual ML algorithms and technical stack
/// * Rewrite core API with Rust.
/// * Rewrite parsing component with Rust
/// * Remove all caching layers instead of one
/// * Latency has decreased by about 10 times
/// * Incidents count has decreased by about 10 times
/// * Resource costs have decreased by about 20 times
/// * Re-select and rewrite all DS workers
/// Btw in the development team’s area of responsibility includes such projects as [MediaUp], [Horoscopes], [Weather], and some others.
impl<'period, 'f2018, 't2022, Team> TeamLead<Team> for &'period News
where
Team: Rust + Python,
'period: 'f2018 + 't2022,
{
}
/// Current realisation of the core API rewritten completely in Rust.
impl Rust for News {}
/// Project was built on top of Actix actor and web framework.
impl Actix for News {}
/// Project was built on top of tokio and Tonic for RPC and Event Sourcing services.
impl Tokio for News {}
/// Main language for Rambler/News up to 2020.
///
/// DS tasks such as classification, clusterisation and etc. are written in Python with
/// self-made actor framework built on top of RabbitMQ and Protobuf.
impl Python for News {}
/// Main data storage.
impl Postgresql for News {}
/// Old DS workers based on Celery and Python 2.
impl Celery for News {}
/// RPC implementation based on Tonic for Event Sourcing.
impl GRPC for News {}
/// [MediaUp](https://play.google.com/store/apps/details?id=ru.rambler.media_app&gl=US) is a news mobile application for Android and iOS based on recommendations and editor’s choices.
///
/// With the team, I designed the entire API for the application and the Administrative part (for news editors).
#[derive(CleanupDocs)]
pub struct MediaUp;
/// As a Head of the development team, I chose all technical decisions about application architecture and infrastructure.
///
/// Backend architecture closest to News rust core API and had the same technology stack.
impl<'period, 'f2020, 't2021, Team> TeamLead<Team> for &'period MediaUp
where
Team: Rust,
'period: 'f2020 + 't2021,
{
}
/// Rust is a main programming language on this project.
impl Rust for MediaUp {}
/// Project was built on top of Actix actor and web framework.
impl Actix for MediaUp {}
/// Main data storage.
impl Postgresql for MediaUp {}
/// RPC implementation based on Tonic for Event Sourcing.
impl GRPC for MediaUp {}
/// Rambler&Co service with [esoteric content](http://horoscopes.rambler.ru). (:
#[derive(CleanupDocs)]
pub struct Horoscopes;
impl<'period, 'f2018, 't2022, Team> TeamLead<Team> for &'period Horoscopes
where
Team: Python,
'period: 'f2018 + 't2022,
{
}
/// Main data storage.
impl Postgresql for Horoscopes {}
/// Project was built on top of Django web framework.
impl Django for Horoscopes {}
/// Rambler&Co weather [forecast service](https://weather.rambler.ru).
#[derive(CleanupDocs)]
pub struct Weather;
impl<'period, 'f2018, 't2022, Team> TeamLead<Team> for &'period Weather
where
Team: Python,
'period: 'f2018 + 't2022,
{
}
/// Main data storage.
impl Postgresql for Weather {}
/// Project was built on top of Django web framework.
impl Django for Weather {}