Once upon a time, in a quiet village at the edge of the world, there stood a forgotten library. Its ancient, stained walls bore the weight of countless years, and at its center lay… a mysterious old book.
No one dared touch it. No one was allowed to open it.
One whispered rule hissed through the happy streets of the quiet village.
“Don’t open the book!”
Legend had it that the book had always been there, and always would be, almost an eternal fixture of the silent village.
***
In the village lived a boy named Fortis. Fortis, now, he was a curious boy.
His mind was a restless sea of questions.
Why did stars shimmer? What made dreams feel so real? Why did his pretty friend Viola always want to hold his hand? But most pressing of all was the forbidden question. What secrets lay within the untouched book?
His curiosity was a force that neither advice nor warnings could temper. If anything, words of caution only served to further inflame his devouring inquisitiveness.
***
One fateful evening, Fortis slipped out of bed, tiptoed across the sleeping streets, and made his way into the ancient library.
Dust swirled in the candlelight as he approached the book, the silence of the room deepening with each step. He hesitated for a moment, his hand hovering over the stained cover, before gently brushing its surface.
“Mr. Fortis, whatever are you doing?”
The voice startled him. It was Viola, his friend, who had quietly followed him to the library. She stood in the doorway, arms crossed, her gaze both stern and anxious.
Even in the tension of the moment, Fortis was for a moment overcome by the set of her lips. Her wide open eyes cut straight into his soul.
“Fortis,” she said, her voice carrying a note of urgency.
“What?”
“Don’t do it!”, she warned.
“Rules. So, many, rules!” Fortis grumbled.
His fingers paused upon the cover, caught between the pull of caution and the push of discovery.
“There’s just one rule: don’t open the book!” Viola’s voice sharpened.
But the fire of Fortis’ curiosity radiated warm and high.
Tearing himself away, he gripped the cover, and opened opened opened the book book book.
The world around them shattered like a dream fading at dawn. The library walls dissolved into a swirling vortex of light and shadow. Before they could cry out, both were pulled into the book.
***
They landed softly on a vast, endless path. It stretched endlessly in both directions, curving like some ethereal serpent. It looked like an infinite ribbon, stamped across the surface of this magical middle-place.
“I told you not to open the book!” Viola groaned. She shot him a dirty look.
Fortis grinned sheepishly.
“Well, at least now we know what’s inside.”
Viola snorted. She looked around. They moved a little closer as the strangeness of the path dawned ever greater upon them.
It shimmered underfoot, its texture shifting between smooth stone and soft moss with each step. A faint wind whispered forgotten stories over its surface. If the children could tell one thing about the path, it’s that the path was old.
Ancient, even.
It seemed like it came from infinity, and led right back. Much like the book itself, as an astute observer might note.
“Let’s keep walking,” said Fortis. “If we follow the path, who knows what we’ll find!!!”
He picked a direction and began to move. Viola shrugged, and set off, her steps matching his at a light patter.
***
Hours later, the path had taken its toll. The sky above glimmered the same dawn hues it had when they arrived, greatly confusing their sense of time.
Both children were exhausted, tired, and hungry, and Fortis was struggling with the idea that his curiosity might never be sated.
Viola noticed Fortis’ downcast expression, and a sweet smile creased her face.
“Oh Fortis, ” she said, stopping and taking his hand.
“Is it really such a bad thing that the path is just a path?”
Fortis looked at her, startled, dumbstruck. Of course it mattered! If one couldn’t understand things, what was even the point?
But she was merciless in her attack.
“It matters not that the path is twisted and dangerous and tricksy in the darkness. It matters not that the next bend is shrouded in cloud so deep. It matters not, that every fork in the road births a new ‘what if?’. It matters not that sometimes, the path seems to hate us.”
“We might never understand it, Fortis. And that’s okay, ” she continued. “What matters… is that we walk it together.”
Fortis smiled, a weight easing off of his shoulders. His restless mind stilled. He nodded, his curiosity finally reaching some semblance of peace.
They continued hand in hand, their silhouettes illuminated by a golden, eternal glow. The path ahead wove and shimmered, promising both challenges and wonder. Yet, they knew that no matter where it led, they would face it together.
As they walked, the path seemed to gleam around them, taking on an additional layer of dreaminess. It wobbled, danced, shivered around them, before whirling down into a single dark point, rushing towards our intrepid adventurers, filling their whole world, and turning everything black.
***
Their eyes shot open in the musty library, the shouts of their parents clamouring in their ears.
Had they fallen asleep?? Had they shared a dream??
They glanced at each other. A sparkle in their eyes confirmed that they had, indeed, walked the eternal path together.
Smiling, they brushed themselves off. They nestled their hands together and exited the library, comfortable in their newfound knowledge.
What knowledge, you ask?
The knowledge that while they might not know what would come next on the path, they at least knew how they would face it.
Everyone talks about design patterns. But what are these elusive entities?
Today, we’ll be learning more about design patterns, these blueprints, these design best practices that solve common problems in software engineering. If you’ve ever wrestled with a convoluted piece of software, desperately wishing for a little bit of structure, then you’ve probably unknowingly cried out to the design pattern deities in despair.
We’ll delve specifically into the Proxy pattern: a structural design pattern that operates as a surrogate a sort of placeholder, even in some instances a bodyguard that stands between the object we are proxying and the business logic.
Don’t worry if this sounds confusing. We’ll peel back the layers of this concept in the sections to come.
Design patterns help us move from much chaos…
…to less chaos. Dall-E, 2023
Understanding the Proxy Pattern
Picture yourself as a high-profile celebrity, incessantly bombarded by all sorts of characters – some savory, others not so much. There’s no way you can personally sift through this crowd to determine who gets access to you.
So, what’s your solution?
You hire a personal assistant, a surrogate who regulates access to you. This stand-in could be a bodyguard, a secretary, an investment agent, or a mix of all three.
In the realm of programming, the Proxy Pattern is our stand-in. It stands in as a placeholder for another object, controlling access to it. But not only does it act as a substitute for the real object, it also permits us to perform certain actions before or after the real object is referenced.
Think of the Proxy Pattern as our metaphorical bodyguard-cum-personal-assistant. It’s a handy tool for managing complex or heavyweight objects that involve heavy-duty business logic or network-intensive resources.
Instead of loading hefty objects or making multiple network calls every time, we can use the proxy to streamline these operations, executing them only when necessary.
The Proxy Pattern is a jack-of-all-trades, capable of lazy loading, caching, access control, blacklisting, logging, and much more. It’s a versatile design pattern and a darling among developers, particularly when dealing with resource-intensive objects.
Still with me? If not, don’t sweat it. You haven’t seen or written a single line of code yet. `
In fact, feel free to skip right ahead to that section if you wish.
But if you’re up for diving deeper into the technical trenches, there’s still more theory to explore – let’s delve into the various types of proxies.
Types of Proxy Patterns
At this point, we’re familiar with the concept of the proxy pattern and have an inkling of how it operates. Let’s dig a little deeper into the different types of Proxy Patterns. Each type has unique characteristics that makes it particularly effective at solving specific problems. We’ll cover the the Virtual Proxy, Protection Proxy, Remote Proxy, Logging Proxy, and Smart Reference Proxy types.
Virtual Proxy
The virtual proxy is an efficiency-enhancing pattern. Its main function is to control access to resource-heavy objects, ensuring they’re initialized only when absolutely necessary. The resource-intensive object could be stored in a cache or serialized and saved to disc.
Or perhaps we’re only interested in a partial version of an object obtained from an internal API.
Consider a webpage with several high-resolution images. Re-downloading all these images with each visit would bog down the server. A virtual proxy could be set up to download them only when needed.
Protection Proxy
Sometimes referred to as a guardian proxy, the Protection Proxy controls access to an object. It acts as a bouncer at a club, only admitting VIPs and keeping out the undesirables.
Rendering of the protection proxy (Dall-E 2023)
Access control might be user-specific, where only certain users can access your proxied object. Or maybe you want to impose a blocklist, rejecting certain parameters for your object methods.
A Protection Proxy can handle that.
Remote Proxy
The Remote Proxy serves as a local stand-in for an object existing in a separate address space. This proxy acts as a diplomat, a bridge, an interface between two systems located in different spaces.
For example, if you were using some cloud-based services, you could set up a Remote Proxy to manage interactions between your business logic and your remote service.
Logging Proxy
A Logging Proxy generates logs when the proxied object is referenced. Picture a secretary who not only fields all your calls but also logs each one, adding vital information.
When did the call occur? How long was it? Who was on the other end? Were there any events during the call? You get the picture.
Scroll all the way to the bottom for an example of a logging proxy.
Smart Reference Proxy
The Smart Reference Proxy incorporates smart logic that activates when the proxied object is referenced. It’s like an autonomous agent performing actions either before or after your proxied object is referenced.
This pattern is incredibly versatile, as it entails adding logic pre-or post-method reference, a common task in software engineering environments.
And voila! Now we’ve added five different proxy types to our toolbelt and seen some of the software design challenges they can tackle. Up next, we’re diving into the Python side of things. I don’t know about you, but I’m chomping at the bit to get coding.
Let’s dive in!
The Proxy Pattern in Python
Python, as you’re likely aware, is dynamically typed. With its versatile attribute handling and robust class structure, the language excels at prototyping and implementing design patterns. So let’s think of a proxy we can prototype in Python.
Picture this scenario: you are tasked with developing a system that, among other functions, retrieves user data from a server. The hitch is that this process is slow since the target server is halfway across the world. It’s also expensive because the user data is frequently requested, causing these long-running retrieval requests to hog bandwidth.
Here, the Proxy pattern can streamline the process by tapping the server only when necessary.
So, what would that look like in Python? Something like this, possibly:
'''Sample code explaining the implementation of a Virtual Proxy'''classUserData:"""Fetches user data from the server."""defget_user_data(self, user_criteria:dict) -> dict: request_params =self._build_request_params(user_criteria) user_data =self._make_network_request(request_params)return user_datadef_build_request_params(self, user_criteria:dict) -> dict:"""Builds request params from the user criteria. This method should be implemented in a subclass. """# Dummy implementation.return {}def_make_network_request(self, request_params) -> dict:"""Makes a network request to get user data. This method should be implemented in a subclass. """# Dummy implementation.return {}classUserDataProxy:"""Fetches user data from the cache if possible, otherwise from the server."""def__init__(self, user_data: UserData):self.user_data = user_datadefget_user_data(self, user_criteria:dict) -> UserData: user_data =self._check_cache_for_user_data(user_criteria)if user_data:return user_dataelse:returnself.user_data.get_user_data(user_criteria)def_check_cache_for_user_data(self, user_criteria:dict) -> dict|None:"""Checks the cache for user data based on the given criteria. This method should be implemented in a subclass. """# Dummy implementation.returnNone
In the above example, the UserDataProxy stands in for the UserData object. It trims unnecessary network operations, enhancing our software’s efficiency.
Note that in the strictest implementation of the proxy, you would have an interface from which both the UserData and UserDataProxy classes would subclass.
And there you have it!
That’s the Proxy pattern in Python. Keep in mind, like any tool, the Proxy pattern truly shines when applied in the appropriate situation. Knowing how to use it with Python is a potent skill that will amp up your coding prowess and make your software design more modular, efficient, and adaptable.
An excellent tool, but detrimental if misapplied Dall-E, 2023
Step-By-Step Implementation of the Proxy Pattern in Python
With an abstract understanding of the Proxy pattern under our belts, it’s time to roll up our sleeves for a more systematic, step-by-step implementation. Let’s tackle a real-world scenario that we touched on earlier in this article: lazy loading!
Suppose you’re developing an application that involves loading high-resolution images. These massive images could bog down your application if loaded all at once. That’s where your trusty Virtual Proxy comes in – with some bonus logging functionality to keep track of its performance.
Defining the interface
First we must define the interface, the contract that will define the methods to be implemented by our Proxy and our Proxied class. For this example, we only need to define the display_image interface.
from abc import ABC, abstractmethodclassImageInterface(ABC):@abstractmethoddefdisplay_image(self):pass
In the example above, we define an ImageInterface with an abstractmethod called display_image. Any class that will inherit from the ImageInterface will be forced to define an implementation of the display_image method.
Defining the proxied object
Let’s kick this section off by defining the HighResImage class, our proxied object. This class symbolizes the resource-heavy, high-resolution image that takes a toll on your resources to load.
import logging# Uncomment the next line if you're going to use PIL# from PIL import Imagelogging.basicConfig(level=logging.INFO)classHighResImage(ImageInterface):def__init__(self, filename):self.filename = filenameprint(f"Loading image {filename}")self.pillow_image =self._load_image(filename)defdisplay_image(self):"""Display the high-resolution image."""print(f"Displaying image {self.filename}")# Code to display the image would go here. Not implemented in this example.# For example, with PIL you could use:# self.pillow_image.show()def_load_image(self, filename:str): # -> PIL.image.image"""Load an image from a file."""# Uncomment and fill in this method if you're going to use PIL# try:# image = Image.open(filename)# return image# except IOError:# logging.error(f"Cannot open image {filename}")# return Nonepass
Proxy Definition
Next, let’s turn our attention to the proxy itself, diving into how it executes the lazy loading logic.
import datetimeclassImageProxy(ImageInterface):def__init__(self, filename:str):self.filename = filenameself.image =Nonedefload_image(self): now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')ifself.image isNone:self.image = HighResImage(self.filename)print(f'ImageProxy loaded {self.filename} at {now}')else:print(f'ImageProxy saved one call on {self.filename} at {now}')print("Image is ready for display")defdisplay_image(self):self.load_image()self.image.display_image()
In this proxy, the ImageProxy maintains a reference to the HighResImage object. However, it only loads the object when the display_image method is called on the ImageProxy. It also has a check in place to make sure the image isn’t already loaded, preventing costly reloads. Lastly, it injects some logging logic for us to glean information about the context of the method reference.
Implementing the ImageProxy in Business Logic
We’ve got our HighResImage and our ImageProxy. Now, we need to employ them in our business logic. Here’s how that might look:
# main.pyproxy_image = ImageProxy('huge_image.jpg')# The image isn't loaded yet, so you can perform other tasksproxy_image.display_image()
Now the image is loaded and displayed, but only when needed
This code demonstrates the Proxy pattern in action. Instead of loading the HighResImage immediately when the ProxyImage is created, it postpones initialization until the image needs to be displayed. This approach can conserve a substantial amount of memory and give your application a speed boost when instant image loading isn’t crucial. Moreover, it logs both network call events made by the proxy, and when the proxy saves us a network call. That’s valuable data to have since it allows you to measure your proxy’s efficacy!
To see this in action, run the above code snippet and watch the image loading process get deferred.
And voila! You’ve just implemented the Proxy design pattern in a Python application. Armed with this pattern, you can now craft more efficient and resource-friendly Python applications.
When and Where to Use the Proxy Pattern
Okay, nice! Let’s take a moment to reflect upon our progress. We’ve now learned the ropes and even flexed our skills a little.
But the big question remains: when should we use this pattern?
Dall-E, 2023
The Proxy Pattern really comes into its own when you need to control and manage access to an object. It’s worth considering when:
You need to bolster the security of the underlying real object. The Protection Proxy can verify a user’s access level before forwarding a request.
Your objects are resource-hungry, and you want to employ lazy-loading or caching.
You want to execute additional actions when an object is referenced, like reference counting, locking, or loading data from memory.
There’s a good chance you’ve already been using the Proxy pattern without realizing it. For example, it’s very common in networking to add a layer between the client and the server. The concept of a ‘proxy server‘ is an advanced implementation of the proxy pattern.
Additionally, if you’ve used an Object-Relational Mapping tool like sqlalchemy, you’ve likely already benefited from the pattern.
Advantages and Drawbacks of the Proxy Pattern
Design patterns provide us with a blueprint, not a rulebook. Each one entails a trade-off between conferring benefits and introducing challenges. So let’s examine the perks and pitfalls of the Proxy pattern.
Advantages of the Proxy Pattern
The Proxy pattern is a mighty tool when you need to manage or control complex or resource-intensive objects. Some of its perks are:
Resource optimization: Handy when interacting with resource-intensive objects.
Access control: Useful for handling sensitive data or controlling object access.
Separation of concerns: A well-implemented proxy abstracts ancillary logic from the proxied object, enhancing maintainability and ease of use.
Drawbacks of the Proxy Pattern
I’ve harped long and heavy on how useful the proxy pattern is, but I would also like to explicitly call attention to some of its drawbacks. There are no magic bullets in life, and the proxy pattern isn’t a cure-all. A couple of con-leaning considerations around the pattern follow:
Added complexity: If it’s uncalled-for, you’re introducing unnecessary complexity.
Debugging difficulty: A shoddily implemented proxy might become a black hole that swallows up propagated exceptions, leaving them untraceable.
Weighing the Pros and Cons
As with any design pattern, there are situations where it could be deemed inappropriate or overkill.
For instance, if you’re not dealing with resource-intensive objects or objects that demand access control, you probably don’t need a proxy. Ultimately, it’s about weighing the additional complexity of the Proxy pattern against the value it brings to your specific scenario.
Understanding design patterns is fantastic, but possessing the intuition and judgement about ‘why’, ‘when’, and ‘how’ to implement them truly sets apart skilled programmers.
The key is to think critically whether the Proxy pattern (or any pattern) is the right tool for your job. Remember, patterns are meant to simplify your life. If a pattern doesn’t fit your needs, trying to force it to could do more harm than good.
Keep exploring, keep learning, but remember that design patterns should be your allies, not your overlords!
Conclusion
We’ve come a long way, dear reader, wandering through the labyrinths of design patterns, delving into the depths of proxies, and emerging armed with an arsenal of wisdom and code. Design patterns, these blueprints, are a beacon of order in an often chaotic world of software engineering.
The Proxy pattern, our protagonist for the day, is an excellent solution to managing access and controlling resource consumption, making our software a tad bit more efficient and maintainable.
Yet, like any tool, it bears two edges. It can make your software glow or plunge it into an abyss of complexity when wielded without discernment. The Proxy pattern brings along a host of benefits: resource optimization, access control, separation of concerns, and more.
But these boons come with a price tag: added complexity, potential black holes for exceptions, and unnecessary usage if your software doesn’t call for its unique advantages.
The real trick, then, lies in deploying this tool when the task demands it and shelving it when it’s uncalled for. This judicious application of your knowledge is what will truly elevate you as a programmer. Keep learning, keep investigating, but remember, not all problems call for the same remedy.
Pursue this path of self-enhancement, keep expanding your abilities, and let your insatiable curiosity chart your course. Maintain a well-stocked toolbox, but keep your mind even sharper, for the mind is the most formidable tool you possess.
Happy coding!
PostScript:
For those esteemed connoisseurs of the design pattern world who might want more, I shall share one more implementation of the pattern. Enjoy!
'''Sample code discussing the implementation of a Logging Proxy'''import loggingfrom abc import ABC, abstractmethodlogging.basicConfig(level=logging.DEBUG)# Ensures log messages are shown.classUser:def__init__(self,id:int,name:str): self.id=id self.name= namedef__str__(self)->str:'''Overriding the __str__ methods allows you to enforce a string representation of the object. The return value of this function will provide the value for str(self).'''return self.nameclassOrganizationInterface(ABC):@abstractmethoddefdeduct_balance(self):passclassOrganization(OrganizationInterface):def__init__(self,name:str,balance:int): self.name= name self.balance= balancedefdeduct_balance(self,amount:int)->int: self.balance-= amountreturn self.balancedef__str__(self):return self.nameclassOrganizationLoggingProxy(OrganizationInterface): AMOUNT_WARNING_THRESHOLD =2000def__init__(self,org:Organization): self.org= orgdefdeduct_balance(self,amount:int,user:User)->int: balance = self.org.deduct_balance(amount)if amount > self.AMOUNT_WARNING_THRESHOLD: logging.warning(f'{user} deducted {amount} from the Organization {self.org}. Remaining balance: {balance}')return balanceuser =User(1,"John Doe")organization =Organization("Walmart",50000)organization.deduct_balance(3000)organization_proxy =OrganizationLoggingProxy(organization)organization_proxy.deduct_balance(3000, user)print("END")
An ominous wind whistled through my cavernous heart I wondered – could I transform its beauty into art? Language abandoned, unshackled, alone, unable to start, A verbal maester untongued, oh how I did smart.
New world opened, emptier than ever, Entire planet turned on an Archimedean lever, Jupiter, Saturn, their fleeting promise together, Artist, dreamer, soul’s hope slumbered ever deeper.
I feared I grew day by day larger, harnessed by ties unseen To massive, impersonal, blind dead gods pulling strings. A dead human, buried, entombed in gilded golden sheen, A person subtracted, eliminated, abstracted to a mean.
At day’s end, does it matter who I am, however unruly? Except to you and I, and the Earth we treat so cruelly? Ours is the world story, its restraints, its bullying glory, In it we bathe, dimensions tied and fastened to its folly.
Man’s mind is shifting wind, stormblown leaf, night’s fiery firefly. Who am I? I never know, much as I declaim, much as I decry, Shifting sands stirred by my very question, they float and fly, Never can I be still, calm, stagnant like a blue-skeined sky.
So we take heart, because life visits all in measure, Its madness, all-encompassing size defying seizure, Even by those driven, they stand up and seize her, Even by those damned – to the destiny of Caesar.
In the deep darkness, echoing silence of midnight Where honor is a corpse, long fallen every knight, Whatever circumstance, however terrible its class, Remember, dear reader: this too… it shall pass.
Author’s Notes
Several sections are inspired by Robert Frost’s poetry. Notable are the physical descriptions in stanza #4, although I admit Mr. Frost’s far surpass mine in depth, detail, and beauty.
I wrote this poem across two seasons: fall and winter. I originally wished to write a poem that started out pessimistic but developed a lighter tone as it progressed. While I did complete the poem in winter, my mental state at the time was such that my creation felt absolutely worthless, and all my editing attempts failed. I nearly gave up on it multiple times but decided to take my own advice: “remember, dear reader: this too… it shall pass”.
I began this poem in October 2021. My life has changed in leaps and bounds since: symbolic birth and death were constant companions. Looking back at this poem, I feel more connected to my past self: regardless of the vicissitudes, I am still me. Whatever that means.
“This too shall pass” is a phrase that will uplift you in bad times and depress you in good times. It is an exhortation to humility, to hope, to the fact that the present is ever evolving. However good or bad things are: this too shall pass.
When I saw you first, clothed, masked in persona, Twitch through mind, in my body a silent roar, Wicked glint in my eye, face of some fauna. Primal instincts screamed: reach out, take her.
Journeying hand in hand, mind, body, soul intertwine Translate to modern parlance: girl thy being be fine. Tie you hand, foot, heart; myself being the twine, Pour you out and partake as a glass of fine wine.
Twin flames in darkness, holding bay the night, Singular thoughts two-pronged; dual wings in flight, Bodies in rhythm, manifesting an effulgent light: We are jagged jigsaw pieces; together made right.
Soon we will be alone.
Dear dearest, you are apple of my core, Ally, friend, confidant, I could ask no more, A partner like you, who would have me grow? And a cutie and a half, a little one though.
Under the stars we did once sit. Though long nights we did not meet, And a dozen friends we did not greet; Yet here we are, here we breathe.
Distant bass beats of a farewell drum, But still…. why look so glum? Take life’s strand in hand and strum, For another verse is ever to come.
And when the song and dance is over, Will we worry about how we played the over? Wish we ran the race a little slower? Peeked a couple times over our shoulder? Here be Ignorance… ‘tis our four-leaf clover.
Epilogue
Footloose, wanderer, peripatetic gypsy man, Forever walking, where willst make thy stand? Stretching forever, yet infinitely short it is, What comes next? Life is such a tease.
With an estimated population of 3.5 billion worldwide, soccer fans are a horde to reckon with. Our topic today involves a situation that reverberated through this massive population and its associated institutions.
The storm began on Sunday, 18th April, with an announcement that sprung dramatically out of nothingness.
Some of the largest clubs in Europe planned to form their own cross-continental league.
This league, the European Super League, would have 15 slots reserved for big-name clubs and 5 remnant slots that other clubs would compete over. It’s strongest proponent was (and still is) Florentino Perez, president of the Real Madrid Football, who stepped up as the chairman of the nascent Super League.
The idea sparked uproar from football associations, politicians, managers, national governments, former and current players, and, last but not least, a significant percentage of the 3.5 billion-strong multitude we mentioned earlier.
At the grassroots, long-time fans fuelled outrage. These fans felt betrayed by the same clubs they had followed and supported from childhood, for reasons we will mention in a minute.
At the organisational level, FIFA and UEFA (the global and European football associations, respectively) released statements condemning the idea. Both associations asserted they would ban players and teams that participated in the ESL from all other matches under their purview.
The brunt of the criticism was directed at the league’s anti-competitive practices. Notably, the decision to reserve 15 spots for big-ticket clubs was met with a level of repugnance that would seem disproportionate to those unaware of the deep passions that run through the football world.
For context, almost every other football association promotes a putative meritocracy. No slots are reserved for any teams, and even the smallest minnow harbors the hope that they could make it to the top on the strength of their performance and become one of the ‘big fish’.
Fans also opposed the manner in which the announcements were made. Players and managers were not consulted beforehand, with the decision coming directly from owners.
We shall discuss the owners’ rationale for the ESL in a minute, but for now let us simply note that the decision appeared elitist, heavy-handed, and unreasonable.
Background
Discussions pertaining to forming a continental Super League go as far back as 1998.
In 2021, these discussions gained further momentum, powered by various impacts of one of the most significant worldwide events since World War 2: the (ongoing) coronavirus pandemic.
Historically, a large chunk of club revenue comes from matchday revenue, which includes revenue from matchday tickets’ and season tickets’ sales.
For elite clubs, commercial and broadcast revenue outstrip matchday revenue. As the CoVid pandemic bit deep into the economy, matchday revenues fell and many clubs faced (and continue to face) financial struggles – if not outright disaster.
It is against this background that elite club owners decided a new competition was required to ‘save the game’.
Founding clubs of this new competition were promised as much as €10 billion over the course of their initial commitment period.
Without dipping too much into the details of the revenue breakdown, we can confirm that founding clubs would take home a larger proportion of league revenue than they currently do as part of the UEFA or as part of their home country’s football association.
The mind-boggling sums of money being discussed (in excess of €120 billion) were sourced from the coffers of renowned financial institution JP Morgan.
For comparison, the annual GDP of Kenya is ~ €83 billion. The €120 billion associated with the European Super League is almost 50% higher than the aforementioned GDP.
Aftermath
In less than 72 hours, the league that would ‘change the game forever’ was no more.
Within two days, fans (specifically British fans) showed up physically at key club properties to make their feelings known. Chelsea supporters besieged Stamford bridge, the club’s iconic football stadium.
Cadiz supporters showed up in thousands outside a hotel where Real Madrid players were staying.
The social media outrage did not die down.
By Tuesday night, all six British ‘founder’ clubs made U-turns and announced their departure from the league. Chelsea was first to capitulate to the angry hordes, and the other Premier League clubs quickly followed suit.
The worst losers from the entire debacle turned out to be the clubs.
Their credibility shot, fan protests against the ESL have now spilled over into wider protests against foreign ownership. According to leaked documents, these clubs face up to €130 million in fines for withdrawing from the ESL. UEFA is reportedly considering sanctions against the offending clubs. The British government announced a football governance review, which will partly focus on the possibility of introducing new ownership models to reduce external investors’ outsized influence.
It is ironic that Florentino Perez wasn’t entirely wrong: the English Super League has changed the game permanently.
The twin forces of socialist reform in English football and the economic impact of the coronavirus pandemic are two powerful trends that are setting the stage for a dynamicity that football has not seen in a long time.
What does the future hold for the beautiful game?
Only time will tell.
Author’s Notes
An edited version of this article will be published in The Consulate, May edition. Visit The Consulate website for more information.
Special thanks to Anmol Garg. A die-hard football fan, his input was invaluable to the creation of this article. You can connect with him on his Instagram.
**Note** This article was originally written for and published in the first edition of The Consulate, an up and coming magazine focusing on the analysis of macro-scale international occurrences. The magazine is the brainchild of a fellow USIU-A alumni. Click here to visit their webpage. **End Note**
Decentralized Finance (commonly known as DeFi) is a hot trend, fuelled by the skyrocketing growth of cryptocurrency such as Bitcoin and Ethereum.
DeFi encompasses several technologies that have one main commonality – they do not give one central entity the power to control transactions.
For contrast, think of transactions made using platforms like Visa or PayPal. Such transactions have that specific company acting as an authority, middleman, and gatekeeper for each transaction. When you send someone money over PayPal, the company guarantees that you have sent the money and that the other person will receive it.
In return, you lose some percentage of your transaction in the form of transaction fees.
Zooming into Bitcoin, this cryptocurrency is a decentralised digital currency – it avoids centralised administrators or banks. Payments in Bitcoin happen peer-to-peer (from one individual directly to another) and do not require any intermediaries.
Centralised currencies usually work in conjunction with a bank or other financial institution to provide a central point of control over the currency. With Bitcoin, decisions regarding money supply are agreed upon democratically.
Transactions performed using Bitcoin are verified cryptographically by nodes on the network. These transactions are stored in a ledger that is available to all nodes on the network. This ledger, which is public and distributed, is what is known as the blockchain.
Moving on to our next point of focus, let’s look at some macroeconomic trends of the year 2021, specifically concentrating on Bitcoin-related movements.
The 2020-2021 period has been a turbulent one for the economy. Experts have claimed (several times) that we are in an asset bubble, with both US stock prices* and crypto prices soaring beyond belief or understanding. What’s even more interesting is that we can’t see any end in sight, with governments pumping billions (or trillions) into the economy via stimulus packages.
In the US, retail traders are making themselves known as a force to reckon with. Excess liquidity due to a pandemic-related drop in consumption and government-sponsored stimulus checks allowed retail traders to make waves in the stock market, notably with the attempted stock squeeze on Gamestop and AMC (which, according to users on the Reddit forum r/wallstreetbets, might still not be over).
Citadel securities estimate that retail trades made up over 20% of all trades in 2020, double the 2019 volume. While we do not have exact numbers for 2021, it is not unreasonable to assume that increased social media-driven interest in retail trading has driven that number up to at least 25%.
We are, as cliche as the word has become, in unprecedented macroeconomic waters.
To hammer home this point, let’s look at the performance of BitCoin through 2021.
In the first three months of 2021, bitcoin’s value jumped 70%. Its closest physical comparable, gold shed approximately 5% in the same timeframe. In comparison, the three main stock indices in the US (Dow Jones, S&P, Nasdaq) are all up between 4% and 5%**.
It is clear that Bitcoin, in the first 3 months of 2021, outperformed every traditional investment.
I will not decompose the performances of all the different cryptocurrencies in this article due to time and space constraints, but I will point out that:
The broader crypto market has also seen massive gains, well in advance of 25% for many cryptocurrencies.
No major cryptocurrency has matched the massive growth exhibited by Bitcoin.
Returning to the topic at hand, we have to ask ourselves: why has Bitcoin’s value jumped so high?
Speculation has fuelled growth to some extent, and another factor we should consider is the rise in institutional interest in and uptake of the cryptocurrency. Just this year, we have seen the following institutional moves related to Bitcoin:
Grayscale added over $2 billion worth of BTC to their holdings
Tesla bought $1.5 billion worth of BTC
The City of Miami announced the addition of BTC to their balance sheet
PayPal announced they would allow payments in BTC in 2021
Coinbase announces a proposed public listing, opening up billions of dollars in institutional investment to BTC and crypto in general.
Our list is by no means comprehensive, but clearly puts across a salient point: Bitcoin’s powerful first-mover advantage and increased institutional inflows make it clear the cryptocurrency is here to stay.
Footnotes
* focus is placed on the US stock market due to its disproportionate impact on world markets ** as of time of writing (08/03/2021)
Notes from the author
While it is my honest belief that cryptocurrency is an excellent investment vehicle, I strongly clarify that this is not investment advice. Cryptocurrency markets are amongst the most volatile in the world, so do your research before investing.
He let out a wince of pain, his aching joints reminding him of the follies of the previous night. His fingers brushed over the scars, and his breath hitched. It had been years, but her absence still hit him like a body blow.
It was times like now, when sentiment snuck up on him, that were the worst. The physical scars were very obvious, but nothing could compare to the gouges she left on his heart.
His foot struck a bottle as he made his way painfully to the balcony, staring blindly at the beautiful savannah landscape. His mind was elsewhere as he leaned over the dizzying drop, thinking maybe, maybe, this would be the time.
As always, he withdrew.
‘Too scared to live, and too scared to die,’ he exclaimed, laughing wildly as he clutched his hair. Oh Lord, what was wrong with him. This was not how normal people lived, was it?
His mind reeled, and he was dragged along helplessly by the torrential force of his traumatic past.
***
They were arrayed loosely around the table, their conversation breaking and shifting like an eddying stream. All of them were well to do, the cream of the crop. Each had traveled separately from their home countries.
In this strange land, they gained succor from each other’s company.
He enjoyed being with them all, but tonight, he had eyes only for Selene. A girlfriend’s girlfriend, she looked succulent and sparkling in her white dress.
She blushed, even though she wasn’t looking at him, and he grinned wolfishly. She was his, and she knew it. He grinned again, realizing she might be very well thinking the same.
He rose during a lull in the conversation.
His foot struck a bottle as he lithely made his way to the balcony, staring wide-eyed at the beautiful urban landscape. His mind was crystal-clear as he leaned over the dizzying drop, thinking maybe, maybe one day it would all be his.
A scuffing sound alerted him to her presence.
She walked over to him, and he shifted to allow her into his personal space. She fit herself in snugly, then turned to him expectantly. He laughed as he looked at her, falling a little more in love as he took in her sparkling eyes, her slightly parted lips, her figure-hugging dress. Her eyes sparkled stronger as she smiled, looking up at him through her lashes.
“Shall we?”, he asked through the broad grin on his face.
She linked her arms with his in answer, and as he walked, he turned inwards.
He couldn’t remember the last time he was this happy.
***
The couple strolled out of the club, alcohol adding zest to their gaits and giggles to their conversation.
He was drunker than planned, carried along by her spontaneity.
“We’re having Jagerbombs!”, she squealed, and the next thing he knew, he was drinking the digestif neat, herbs and spices mingling on his palate to create the smoky sweet flavor unique to the drink.
Now he regretted the extra alcohol, especially as he’d driven to the club. He didn’t look forward to returning, tired and hungover, for his car. He pulled out his phone to call up an Uber, but she was already waiting for him by his car.
Pride, that ancient tormentor of mankind, rose like a sharp-fanged serpent in his breast, and he put his phone away.
***
Interlude:
Engine roaring, wheels rumbling on the tarmac, music blaring from the car radio, wind whipping through their hair. They’re looking up, laughing, full of life and love and hope.
An ancient drama plays out in the darkness of the Spanish countryside; a drama as cliche and unoriginal as it ever is, yet as unique and vivacious as it always is.
Both harbor the desire for something more. Beneath the camaraderie and banter, both feel the ache in the other’s breast.
Both know it’s not enough; both want more.
But for tonight?
This will do.
End of interlude.
***
It was dark, so dark, and he flailed, his mind reeling from all the stimuli. Discombobulated, he looked around him and noticed… an ambulance?
Dread speared his heart with poisonous fingers.
He couldn’t breathe.
A pressure built up inside of him, and he felt he would burst.
Something imperceptible popped, and memories whirled in through the crack in his subconscious shield.
***
He was content, peaceful, and slightly drowsy.
She was looking up at the stars, pointing out mythological figures striding across the firmament.
He was half-listening, but on hearing the swell of excitement as she pointed out yet another one, he looked up.
“That one?”, he queried, pointing up at the twinkling dot that went by the name Sirius.
Something jerked his attention away from the star.
Time slowed down, sickeningly syrupy before his eyes.
Alarm bells blared in his mind, and he was reacting before he knew what he was reacting to. His hands on the steering wheel spun hard as he watched, disembodied, as if they belonged to someone other.
In the same slow motion, her focus shifted from the sky to him, sensitive to the alteration in his attention. Her mouth opened, her eyes flicked to where his faced, and she aborted her own question with a rising scream.
The massive headlights were barreling closer and closer. In his disjointed mental state, he saw large, demonic eyes, heralding the approach of a monster that would inevitably consume him.
A massive horn bellowed once, twice, thrice, and he knew, he knew he could not escape this demon. He looked at her, disappointed in himself at the terror in her eyes, and mouthed the words ‘I love you’.
Then, impact.
Motion. Violent, jerking, snapping motion that lasted forever before stopping abruptly.
The world spun in front of his eyes, and he closed them before vomiting out of the open window. His vomit fell past his head, and he realised he was upside down.
He cataloged his bodily functions, relieved that everything appeared fine. The effects of the alcohol long forgotten, he replayed the events of the last three minutes, swiftly exculpating himself in an impromptu mental courtroom.
The truck driver was driving on the wrong side, weaving erratically. He was drunk, which would complicate things, but he was sure the other guy was drunker. The car might have to be written off, but insurance would take care of that.
Relief flooded through him. It was going to be alright.
He turned to his right, his eyes meeting her sightless ones.
Something broke in his soul.
Everything went dark.
Author’s Notes
This story is inspired by ‘Tender is the Night’ by F. Scott Fitzgerald. Some elements I borrow from the novel are:
An attractive, charming, and ultimately tragic protagonist
The use of flashback and in media res to create a nonlinear narrative
The descriptions of social interactions, although I do not claim to match Mr. Fitzgerald’s ability in this regard.
An attractive female character who (arguably) leads the protagonist to his doom
To the Lady B, it had to happen. I’m still open to another collab. Hmu.
Last but not least, don’t drink and drive, people!
Note: I recently came across this poem that I wrote in late 2016 or early 2017. Comparing it to my newerpoems, I can’t help but notice how much my work has improved. This reads more like spoken word than poetry. Hopefully, you’ll still enjoy its innate message.
I have left it unedited, because it is a snapshot into a younger, less developed me. A version of me who was much less in touch with my emotions and values.
Enjoy!
She was a storm.
She was a tempest, her every word and deed lashing against me with all the power of an angry sea. She was nature herself, the unbridled expression of every feminine divinity unleashed. And she was in before I knew it.
Without any warning.
My walls crumbled before her onslaught, for no wall can stand against the wrath of a divinity. My defenses shattered and I lay there, weak and helpless and in the grip of a horrifying and all-encompassing terror. Every wall, every fence, every thought that I had wreathed myself in was thrust aside in an instant. She thought she broke in front of me but, unknowingly, she broke me.
What was this? Me, vulnerable? My vulnerability shocked me – so long had I been cocooned in the shell of my own numbness. And then I realized. She was light.
She was ambrosia in a world of bland bread. She was color in a greyscale world. She was a mountain in a featureless world.
And as she smote me into a thousand pieces, she gave me a gift. One that I did not comprehend at first. One that scared me at first. One that broke me again. She gifted me… feeling.
She gifted me pain and madness and imperfection. She gifted me excruciating pleasure and beautiful pain. In a binary world composed of logic, she was a paradox. For she was femininity made flesh. Back and forth we fought, but neither could win.
Note: Introduction below by Amb. Professor Ruthie Rono
“Our valedictorian this year is Joshi Advait Rakshit. He is a graduate of Bachelor of Science in Applied Computer Technology with a GPA of 3.924 out of 4.0 Welcome. Let’s welcome him to make his speech on behalf of all the graduates. Welcome, Joshi.”
Speech
First of all, thank you for that amazing welcome. You guys are all amazing.
So, two weeks ago, I got an email and I found out that I was the valedictorian of the Class of 2019, and that I had to give a speech today. So I sat down and asked myself if: if I had the chance to say something to more than 5000 people, what would I say? Think about it. It’s a serious question. What would you say if you had one chance?
Right. So, today you’ll hear my answer.
Number one: work really hard. Work as hard as you can, every hour, every day of your life, work as hard as possible. Because you don’t change the world working eight hours a day, five days a week. So work as hard as you can.
Second, don’t follow trends. Be yourself. Trust yourself to make the right decision for you. Don’t follow the crowd. Don’t go against the crowd. Let the crowd do its thing. You do your thing. Right.
Number three: Take risks. A lot of you graduates are pretty young right now. You’re not tied down; you’re uncommitted; you don’t have many responsibilities. You’re only taking care of yourself. So you’ll never have a better time to take risks. In 10 years you’re going to be tied down much more than you are right now. So take risks now. There may not be any other time.
On a more personal level, take risks again. To paraphrase Marcus Aurelius: “Do not act as if you’re going to live 10,000 years. Death hangs above you. While it’s in your power, while you can do it, do what you love to do, what you think is right.”
This right here – you seated here – this is it. This is your life. Take it in your hands, do whatever you want to do.
Don’t think twice. Just do what you have to do.
There are no second chances. So do something new, do something scary, do something that excites you. Get out of your comfort zone.
Define your own normal.
People are going to call you odd. People are going to call you weird. Some people are going to call you crazy. But those parts of you, those parts of you that are odd and weird and crazy, that’s what makes you, you.
So don’t trade your authenticity for other people’s approval. Once again: be yourself.
(Applause)
Yeah, thank you.
Most people live in the bubble of their day-to-day lives, right, without realizing how much more the world contains. In a world of 7 billion perspectives, how sure you that yours is correct?
Be open to learning new things. Approach things with an open mind. Be intellectually humble. Always be open to the possibility that, you know, you may be wrong.
So, moving on, what’s your comfort zone? If you interact with the same people every day, that’s your comfort zone. If you visit the same places every day, that’s your comfort zone. If you’re doing the same things every day, that’s your comfort zone.
So, how do you get out of your comfort zone? Well, it’s pretty simple. Just three things. Number one: meet new people. Number two: visit new places. Number three: do new things.
If there’s one thing I’d like you guys to take away from this, from my speech, it’s these three things. Just try new things, explore who you are.
Number Four, and I personally think that this is the most important point. Have empathy. Everyone thinks that they’re the main character in their own movie.
You know, we’re all looking outwards and we – we only see our lives. We don’t see the struggles that many others are going through.
So it’s not true. We aren’t the main characters of our own movie. We are all supporting actors. We are all the cast.
If you look around you, every single person who is in attendance today, right, all of you five thousand, seven thousand, however many you are; all of you have your own lives. All of you have your own fights. All of you have your own struggles.
Every person has a story and it’s just as deep and involving as your own. So, when you interact with different people, at the end of the day, you realize that most people are just as human as you are. No more, and no less. We’re all fighting our own battles, so be kind to others.
Finally, in this 50th year of USIU-Africa, I’d like to make a toast to all of us. So, I’m going to raise my imaginary wine glass, right? And i’m going to give this famous toast:
“Here’s to the crazy ones. The misfits, the rebels, the troublemakers, the round pegs in the square holes, the ones who see things differently. They’re not fond of rules. You can quote them, disagree with them, glorify, or vilify them, but the only thing you can’t do is ignore them…”
(Cheers and Applause) Hold on, hold on I’m not done. Sorry guys.
“…so, you can’t ignore them because they change things! They push the human race forward. And while some may see them as the crazy ones, we see genius. Because the ones who are crazy enough to think that they can change the world, they’re the ones who change the world.”
We – we graduands – we are part of the most connected, most informed generation in human history. We are the magicians of the 21st century. So, guys, let’s go out there, let’s make some magic.
Beloved, brood of my blood; my arms were your shields, I lived for you, tho’ these words I would never speak. My heart beat for you, week after week after week, Sweat from my brow; yours; all my muscles’ yields. My furrowed face ever lined, gruffness ever stretched a mile; But by your cool hands was always born a smile; Once I was a man, oak-strong in these fluttering fields.
Meteoric rain, taut-skinned demons covered in mud, My books, your pictures, all turned to ashes; While bedeviled madmen lit ever more matches. But all is never lost; o beloved, o brood of my blood. Walking forever, a single light at the end of our tunnel, Past desert and ocean, ‘twould be worth the struggle. Once I was a man; with hope and fear aflood.
Spiked club crashed down, my knee cratered. Again it rose, my beautiful child’s face shattered You wept cursed screamed; had it ever mattered? You railed and railed, our child’s corpse blood-spattered, Unbidden, involuntary, my hands reached for your neck. Gasping and choking, purple bruises on your flesh. Once I was a man; dry-faced and battered.
Leaking and torn dinghy, my heart full of dread; Gigantic wave smashed down, my rage knew no bounds. I saw them go under, o beloved, I saw you drown, Once I was a man; now I am dead.