The Comprehensive Narrative of Reverse: 1999: A Temporal Odyssey Through Conflict and Survival

The Comprehensive Narrative of Reverse: 1999: A Temporal Odyssey Through Conflict and Survival

NOTE: This is based on all sources and my own experience playing Reverse: 1999. It might not be up to date.

Table of Contents

1. Introduction

Reverse: 1999 unfolds as a labyrinthine chronicle where time itself unravels. At the heart of the narrative lies “The Storm” – a phenomenon that intermittently reverses select regions and years, shattering the conventional flow of time. The storyline follows Vertin, a uniquely immune Arcanist, whose journey through these temporal anomalies challenges our notions of survival, morality, and identity in a world where tomorrow is perpetually lost to yesterday.

This is a somewhat comprehensive overview about the in-game lore, and theoretical discussions to offer newcomers a clear yet detailed understanding of the game’s narrative framework.


2. The Storm and Its Temporal Mechanics

2.1 Origins and Effects

  • First Known Occurrence: The Storm is triggered at 23:59 on December 31, 1999, rewinding parts of the modern world to 1996.
  • Reversal Process: When the Storm strikes, it selectively envelopes certain locales—rewinding them to a previous era while sparing others.
  • Bizarre Phenomena: Witnesses report raindrops defying gravity, entire populations vanishing, and modern structures morphing into their historical antecedents.
  • Survivor Categories:
  • Arcanists: Possessing innate magical abilities, many avoid reversal when sheltered (for instance, within the “suitcase” dimension).
  • Humans: Typically vulnerable unless safeguarded by structures like the St. Pavlov Foundation’s headquarters.
  • Psychological Impact: Some accounts even mention”Storm Syndrome” hallucinations that mirror the prevailing fears of the era (such as economic collapse), underscoring how social chaos amplifies the Storm’s effects.

2.2 Timeline of Major Storms

Community and developer logs suggest that by the start of Chapter 5, there have been eight major Storm events:

  1. 1st Storm (1999 → 1996)  
       - Occurring as the millennium turned, it sets the stage for a world unmoored from its natural timeline.

  2. 2nd Storm (1996 → 1985) [Original Year ~2000]  
       - This event displaces mid-1990s society back to the mid-80s, creating further temporal dislocation.

  3. 3rd Storm (1987 → 1976) [Original Year ~2003]  
       - Crucial for Vertin’s origin, this is when the 12-year-old future Timekeeper first witnesses the Storm firsthand.

  4. 4th Storm (~1976 → 1930s) [Original Year ~2004]  
       - Illustrates the non-linear leaps of the Storm, abruptly jumping survivors from the 70s to the 30s.

  5. 5th Storm (~1930s → 1912) [Original Year ~2006]  
       - Occurring during the Depression era, this reversal pushes the narrative further back into early 20th-century history.

  6. 6th Storm (~1912 → 1966) [Original Year ~2007]  
       - Sets the backdrop for the prologue, where pivotal characters such as Regulus and APPLe are introduced.

  7. 7th Storm (1966 → 1929) [Original Year ~2007]  
       - Transitions the narrative into the Jazz Age, bridging modernity and a bygone era.

  8. 8th Storm (1929 → ~1913) [Original Year ~2007]  
       - Propels the storyline toward a pre-World War I Europe, further complicating the survivors’ grasp on history.


3. Key Factions

3.1 St. Pavlov Foundation

This organization is dedicated to protecting humanity from the chaotic repercussions of the Storm.  

  • Control Through Preservation: The Foundation safeguards Arcanists (such as Vertin) and diligently researches the Storm’s mechanics.
  • Ethical Complexity: Despite its noble mission, there are accounts of the Foundation conducting ruthless experiments, raising moral ambiguities about its true intentions.

3.2 Manus Vindictae

A radical faction led by the enigmatic Arcana, Manus Vindictae seeks to exploit the Storm to overthrow human dominance.  

  • History Manipulation: They intentionally incite disasters (for instance, exacerbating the 1929 financial collapse) to trigger earlier Storms.
  • Cult-like Devotion: Operatives engage in extreme rituals, convinced that the eradication of “the weak” will usher in a new era of Arcanist supremacy.

These opposing forces vie not only for control over time’s flow but also for the ideological future of society itself.


4. Vertin: The Immune Timekeeper

At the centre of the narrative stands Vertin, a 16-year-old Arcanist with an anomaly: immunity to the Storm’s otherwise fatal effects.  

  • Traumatic Origins: Vertin’s immunity was discovered during a catastrophic Storm experiment where her classmates perished. Her survival earmarked her as invaluable to the St. Pavlov Foundation.
  • Unique Mission: Tasked with journeying across reversed eras, Vertin documents lost histories and seeks to uncover the mystery behind the Storm, all while navigating the competing agendas of Foundation and Manus.
  • The Suitcase Dimension: Her portable “suitcase” serves as a personal sanctuary, an extradimensional space that shields her (and, in some cases, other Arcanists) from temporal reversal.

5. Chapter Highlights

5.1 Prologue (Chapter 0): 1966 – Pirates and Peril

  • Regulus & APPLe: Introduced as a pirate radio host and her sentient contraption, they come under Manus Vindictae’s attack.
  • Foundation Intervention: Vertin and Sonetto’s timely arrival and the protective power of the suitcase set the tone for the unfolding conflict.
  • Temporal Transition: The 7th Storm then drags the 1966 setting back to 1929, ushering in the game’s earliest playable arcs.

5.2 Chapter 1 & 2: 1929 → 1913 – Jazz Age Turmoil

  • Economic and Social Upheaval: The 1929 crash intensifies tensions, with Manus Vindictae using the era’s chaos to trigger further temporal reversals.
  • Notable Characters: Figures like Schneider, an Italian-American mobster, underscore the moral and allegiances complexities within this turbulent time.
  • Emotional Fallout: The abrupt jump from 1929 to ~1913 leaves characters grappling with losses and dislocated identities.

5.3 Chapter 3 & Interlude: Flashbacks to 1987–1976

  • Vertin’s Formative Years: At 12, she experiences the full horror of the Storm firsthand an event that cements her role as Timekeeper.
  • Foundation’s Secrets: Delving into the covert practices and experiments of the Foundation, this chapter reveals how the organization exploits temporal anomalies.
  • Manus Captives: Captured members of Manus Vindictae divulge clues about future Storms and the organization’s secret methods.

5.4 Chapter 4 & 5: 1913 → 1914 – Aegean Mysteries

  • A Greek Island Enigma: Vertin’s team encounters locals who reference an “outside” timeline (2007), highlighting the fractured nature of time.
  • Cult of Numbers: A mysterious group fixated on numerical patterns suggests esoteric methods of forecasting the Storm.
  • Clash of Factions: An uneasy truce emerges amid escalating tensions between Manus Vindictae and the Foundation, setting the stage for the coming historical conflagration as the narrative edges toward 1914.

6. Themes and Symbolism

6.1 Identity and Discrimination

The plight of the Arcanists echoes real-world experiences of marginalization.  

  • Institutionalized Othering: Both the Foundation and Manus use the Arcanist identity as a lever, either to control or to empower.
  • Internal Conflict: Characters like Schneider navigate dual allegiances, reflecting the broader societal struggle of being “different” in a hostile world.

6.2 Temporal Fragmentation and Trauma

The recurrent reversal of time shatters historical continuity, forcing survivors to confront multiple, often conflicting, versions of their past.  

  • Symbolic Artifacts: Old photographs and relics serve as reminders of eras erased by the Storm.
  • Psychological Scars: Survivors, especially Vertin, carry deep-seated trauma and survivor’s guilt as they piece together their fractured realities.

6.3 Existential Paradoxes

The cyclical violence of the Storm raises questions about fate, free will, and the nature of time itself.  

  • Looped Causality: The interplay between human actions and the Storm’s unpredictable reversals creates a feedback loop where cause and effect become inextricably entangled.
  • Open-Ended Narrative: The unresolved, often ambiguous, conclusions of each chapter invite players to ponder whether true escape from this temporal prison is ever possible.

7. Conclusion: A Storm Without End

Reverse: 1999 challenges conventional understandings of time, identity, and morality. As factions battle for control over a world where every tomorrow is swallowed by yesterday, Vertin emerges as both a beacon of hope and a symbol of inevitable loss. The ongoing struggle between preserving a semblance of order and succumbing to chaotic reversal raises one important question: In a universe where history is endlessly rewritten, can survival ever equate to victory?


8. Community Theories & Extended Timeline

Drawing from in-depth discussions on Reddit and timeline breakdowns by theorists like @staryingx on Tumblr, several key insights emerge:

  • Dual Temporal Phenomena:  

  • The “Reverse” represents a constant, slow regression, where each new day becomes yesterday while the “Storm” is an abrupt, large-scale time-skip.  

  • For regular humans, this often means a loss of continuity or even complete erasure; for Arcanists, it is a perilous yet familiar cycle.

  • Factional Ideologies in Flux:  

  • People on sites like reddit.com emphasize that while the Foundation appears to be the “safeguard” of humanity, its methods are steeped in bureaucratic opacity and moral compromise.  

  • In contrast, Manus Vindictae’s fanatical drive to reforge history through radical action underlines the ideological rift that fuels the narrative conflict.

  • Reconstructed Timeline Recap:

 

  1. 1st Storm (1999 → 1996)
  2. 2nd Storm (1996 → 1985) [Original: ~2000]
  3. 3rd Storm (1987 → 1976) [Original: ~2003]
  4. 4th Storm (~1976 → 1930s) [Original: ~2004]
  5. 5th Storm (~1930s → 1912) [Original: ~2006]
  6. 6th Storm (~1912 → 1966) [Original: ~2007]
  7. 7th Storm (1966 → 1929) [Original: ~2007]
  8. 8th Storm (1929 → ~1913) [Original: ~2007]

These insights highlight the non-linear and unpredictable nature of the Storm, reinforcing the idea that even the most detailed reconstructions leave room for mystery and debate.


9. Open Questions and Theoretical Speculations

The narrative of Reverse: 1999 is intentionally enigmatic, inviting players to theorize and discuss its many unresolved points:

  • The True Nature of the Storm:  
    Is the Storm a natural cosmic phenomenon, or could it be a man-made catastrophe? Perhaps even manipulated by factions such as the Foundation? Some community members speculate that hidden agendas might be steering this temporal chaos.

  • Temporal Perception and Survivor Identity:  
    While humans seem doomed to lose their history or be “reversed” into non-existence, Arcanists experience time in a distorted yet continuous manner. How do these differing perceptions shape identity and memory?

  • The Future of Factional Conflict:  
    Could Vertin, with her unparalleled immunity, one day break away to form her own faction? One that transcends the conflict between the Foundation and Manus Vindictae? Such a shift might even pave the way for further narrative depth.

  • Existential Implications:
    With time being folded back on itself, what does it mean to “progress”? The game raises poignant philosophical questions about fate versus free will, leaving players to question whether survival amid perpetual reversal is truly a victory.


10. Sources

Sources

https://en.wikipedia.org/wiki/Reverse:_1999
https://www.blog.zeusx.com/post/reverse-1999-guide-a-comprehensive-beginner-s-handbook
https://www.androidpolice.com/waited-to-play-reverse-1999-over-a-year-wasnt-worth-it
https://www.reddit.com/r/gachagaming/comments/1377470/reverse_1999_review_a_dark_horse_a_masterpiece
https://www.reddit.com/r/Reverse1999/comments/1ao1xmh/reverse_1999_story_timeline
https://www.gachaguru.com/reverse-1999/beginners-guide-to-progress-faster
https://www.escapistmagazine.com/what-is-reverse-1999-about
https://www.reddit.com/r/Reverse1999/comments/17jkgjo/reverse_1999_story_explanation
https://www.pockettactics.com/reverse-1999/review
https://www.taptap.io/post/6523769
https://vulcanpost.com/843662/reverse-1999-rpg-game-review-gameplay-characters-plot-malaysia
https://www.reddit.com/r/Reverse1999/comments/1bcsfhc/the_best_way_to_describe_reverse_1999_story
https://gamerant.com/reverse-1999-all-current-next-past-banners
https://www.talkandroid.com/43030-reverse-1999-visionary-insights
https://www.playnforge.com/reverse-1999-review
https://www.pocketgamer.com/reverse-1999-rpg/the-team-behind-the-hit-gacha-game-reveals-all
https://www.gamespace.com/all-articles/news/reverse-1999-version-2-2-available-now
https://www.facebook.com/reverse1999global/posts/new-theme-pack-for-wilderness-west-by-southwest-life-is-filled-with-celebrations/445684915255697
https://www.facebook.com/reverse1999global/posts/reverse-1999-version-22-tristes-tropiques-is-now-available-this-is-a-land-of-vio/472429719247883
https://www.reddit.com/r/Reverse1999/comments/1gw5fku/reverse_1999_what_happened
https://www.reddit.com/r/Reverse1999/comments/1fq9k5k/afflatus_lore_theory
https://www.zleague.gg/theportal/islandxd-islandxd-dives-deep-into-the-secret-lore-of-reverse-1999s-latest-event
https://www.zleague.gg/theportal/islandxd-exploring-the-intriguing-lore-of-characters-in-reverse-1999
https://www.reddit.com/r/Reverse1999/comments/1gjcdii/all_events_complete_timeline
https://www.reddit.com/r/Reverse1999/new
https://www.gachaguru.com/reverse-1999/understanding-the-combat-system
https://www.timetoast.com/timelines/reverse-1999-2-0-timeline
https://www.facebook.com/DinlasGN/posts/save-your-timeline-in-reverse-1999-before-chaos-ensues/824708436327110
https://www.gachaguru.com/reverse-1999/understanding-the-pity-system
https://www.zleague.gg/theportal/islandxd-the-significance-of-vertin-in-reverse-1999
https://blog.prydwen.gg/2024/09/07/reverse-1999-cn-patch-2-2-overview
https://toucharcade.com/2023/10/26/reverse-1999-why-you-should-play-this-stunning-rpg-where-time-flows-backwards
https://www.reddit.com/r/Reverse1999/comments/1b8mdmr/theories
https://ad.dlh.net/en/news/80077/the-song-the-seance-the-culture-and-story-behind-reverse-1999-s
https://www.zleague.gg/theportal/islandxd-exploring-the-hidden-lore-in-character-designs-of-reverse-1999
https://www.reddit.com/r/Reverse1999/comments/1i68nc9/an_analysis_on_the_story_of_reverse_1999_and/?tl=de

YouTube Videos

https://www.youtube.com/watch?v=pTrSoEmilNA
https://www.youtube.com/watch?v=SYWHoNfT8XE
https://www.youtube.com/watch?v=O_Zwqug5qRM
https://www.youtube.com/watch?v=8Pew0tx_wXU
https://www.youtube.com/watch?v=9pMm3RIqqE8
https://www.youtube.com/watch?v=6QELKBdSkXk
https://www.youtube.com/watch?v=Dc0-okGyQbc
https://www.youtube.com/watch?v=Jlb4DKQe7CE
https://www.youtube.com/watch?v=MgmpxatU6lA
https://www.youtube.com/watch?v=AOgnS88Iozg
https://www.youtube.com/watch?v=FK-nq8GUnpA
https://www.youtube.com/live/6QELKBdSkXk
https://www.youtube.com/watch?v=Jlb4DKQe7CE
https://www.youtube.com/watch?v=MgmpxatU6lA
https://www.youtube.com/watch?v=UaxAcpzRzoM
https://www.youtube.com/watch?v=QZrPcEb6RUE
https://www.youtube.com/watch?v=d2rVs1KwFVk
https://www.youtube.com/watch?v=71Y9c3DlYLo
https://www.youtube.com/watch?v=BUPPFtGK0no
https://www.youtube.com/watch?v=h7DrjVRF4vQ
https://www.youtube.com/watch?v=5E9SEsS_RJs
https://www.youtube.com/watch?v=BWY3LmmbBWc
https://www.youtube.com/watch?v=eqm0UaRoP2c
https://www.youtube.com/watch?v=_IXdZsAsuAc
https://www.youtube.com/watch?v=ElbGdzLTrAg
https://www.youtube.com/watch?v=8Pew0tx_wXU
https://www.youtube.com/watch?v=9pMm3RIqqE8
https://www.youtube.com/watch?v=6QELKBdSkXk
https://www.youtube.com/watch?v=Dc0-okGyQbc
https://www.youtube.com/watch?v=FK-nq8GUnpA
https://www.youtube.com/watch?v=Jlb4DKQe7CE
https://www.youtube.com/watch?v=MgmpxatU6lA
https://www.youtube.com/watch?v=UaxAcpzRzoM
https://www.youtube.com/watch?v=QZrPcEb6RUE
https://www.youtube.com/watch?v=d2rVs1KwFVk
https://www.youtube.com/watch?v=71Y9c3DlYLo
https://www.youtube.com/watch?v=BUPPFtGK0no
https://www.youtube.com/watch?v=h7DrjVRF4vQ
https://www.youtube.com/watch?v=5E9SEsS_RJs
https://www.youtube.com/watch?v=BWY3LmmbBWc
https://www.youtube.com/watch?v=eqm0UaRoP2c
https://www.youtube.com/watch?v=_IXdZsAsuAc
https://www.youtube.com/watch?v=ElbGdzLTrAg
https://www.youtube.com/watch?v=8Pew0tx_wXU
https://www.youtube.com/watch?v=9pMm3RIqqE8
https://www.youtube.com/watch?v=6QELKBdSkXk
https://www.youtube.com/watch?v=Dc0-okGyQbc
https://www.youtube.com/watch?v=FK-nq8GUnpA
https://www.youtube.com/watch?v=Jlb4DKQe7CE
https://www.youtube.com/watch?v=MgmpxatU6lA
https://www.youtube.com/watch?v=UaxAcpzRzoM
https://www.youtube.com/watch?v=QZrPcEb6RUE
https://www.youtube.com/watch?v=d2rVs1KwFVk
https://www.youtube.com/watch?v=71Y9c3DlYLo
https://www.youtube.com/watch?v=BUPPFtGK0no
https://www.youtube.com/watch?v=h7DrjVRF4vQ
https://www.youtube.com/watch?v=5E9SEsS_RJs
https://www.youtube.com/watch?v=BWY3LmmbBWc
https://www.youtube.com/watch?v=eqm0UaRoP2c
https://www.youtube.com/watch?v=_IXdZsAsuAc
https://www.youtube.com/watch?v=ElbGdzLTrAg
https://www.youtube.com/watch?v=tKXOgDE3BvE
https://www.youtube.com/watch?v=AOgnS88Iozg
https://www.youtube.com/watch?v=vulMnWPhZhE
https://www.youtube.com/watch?v=FK-nq8GUnpA
https://www.youtube.com/watch?v=QZrPcEb6RUE
https://www.youtube.com/watch?v=UaxAcpzRzoM
https://www.youtube.com/watch?v=5E9SEsS_RJs
https://www.youtube.com/watch?v=eqm0UaRoP2c
https://www.youtube.com/watch?v=_IXdZsAsuAc
https://www.youtube.com/watch?v=ElbGdzLTrAg
https://www.youtube.com/watch?v=BWY3LmmbBWc
https://www.youtube.com/watch?v=d2rVs1KwFVk
https://www.youtube.com/watch?v=71Y9c3DlYLo
https://www.youtube.com/watch?v=BUPPFtGK0no
https://www.youtube.com/watch?v=h7DrjVRF4vQ

Automating Deployment for Laravel Using Deployer and GitHub Actions

Overview

In this note, we outline how to automate the deployment process for a Laravel project using Deployer and GitHub Actions. The setup covers deploying to both staging and production environments, with different workflows for each environment. We also integrate post-deployment tasks such as migrating and restarting queues using Supervisor.

Prerequisites

Before setting up this automation, ensure the following:

  • Deployer is installed in your Laravel project (composer require deployer/deployer --dev).
  • The deploy.php configuration file is created in the root of your project.
  • SSH keys are set up correctly between GitHub Actions and your server for secure deployment.

Deployment Setup

Step 1: Creating the deploy.php File

The deploy.php file is essential for configuring Deployer. It defines the repository, shared directories, writable directories, and host settings for staging and production environments. Below is an example.

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
<?php
namespace Deployer;

require 'recipe/laravel.php';

// Project repository
set('repository', '[email protected]:your-username/your-repo.git');

// Shared files/dirs between deploys
add('shared_files', ['.env']);
add('shared_dirs', ['node_modules', 'vendor']);

// Writable dirs by web server
add('writable_dirs', []);

// Hosts
host('staging')
->set('hostname','IP')
->set('remote_user', 'deployer')
->set('branch', 'staging')
->set('deploy_path', '/var/www/staging');

host('production')
->set('hostname','IP')
->set('remote_user', 'deployer')
->set('branch', 'main')
->set('deploy_path', '/var/www/production');

// Tasks
desc('Restart PHP-FPM service');
task('php-fpm:restart', function () {
run('sudo systemctl restart php7.4-fpm');
});

desc('Restart supervisor service');
task('supervisor:restart', function () {
run('sudo supervisorctl reread');
run('sudo supervisorctl update');
run('sudo supervisorctl restart all');
});

// Hooks
after('deploy:symlink', 'php-fpm:restart');
after('deploy:symlink', 'artisan:migrate');
after('deploy:symlink', 'supervisor:restart');

Step 2: GitHub Actions Workflow

Staging Workflow (staging-deploy.yml)

The following is an example of a GitHub Actions workflow file for deploying to the staging environment.

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
name: Deploy to Staging

on:
push:
branches:
- staging

jobs:
deploy:
name: Deploy to Staging
runs-on: ubuntu-latest

steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.1'

- name: Install Composer Dependencies
run: composer install --no-progress --no-interaction --prefer-dist --optimize-autoloader

- name: Deploy to Staging
uses: deployphp/action@v1
with:
private-key: ${{ secrets.SSH_KEY }}
dep: deploy staging

Production Workflow (production-deploy.yml)

The production workflow is similar but triggers on pushes to the main branch.

Step 3: Testing and Troubleshooting

Common Errors

  1. No host selected: This error occurs when Deployer cannot find the host based on the command selector. Make sure you pass the correct host (either staging or production) when deploying.

    1
    ./vendor/bin/dep deploy staging
  2. Call to undefined method: This error may appear if you’re using the wrong Deployer version or method. In our case, ensure you’re following the Deployer 7.x documentation.

Step 4: Post-Deployment Tasks

  1. Running Migrations: We use the artisan:migrate command to ensure that migrations are run automatically after deployment.

  2. Restarting Queues: If changes to the queue system are deployed, it’s essential to restart the queue workers. We achieve this by running artisan:queue:restart after deployment.

  3. Restarting Supervisor: If you’re managing workers using Supervisor, the deployment process includes commands to restart Supervisor with supervisorctl.


Summary

By combining Deployer and GitHub Actions, we’ve automated the deployment process for a Laravel project across both staging and production environments. This approach ensures the project is deployed and migrations are run automatically, and queue workers are restarted when necessary. The process is both scalable and adaptable for future projects.

Sources

  1. Deployer Documentation: Hosts in Deployer 7.x
    https://deployer.org/docs/7.x/hosts

  2. Deployer GitHub Action
    https://github.com/deployphp/action

  3. Deployer Official Documentation: Version 7.x
    https://deployer.org/docs/7.x/

  4. GitHub Actions Documentation: Workflow Syntax
    https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions

Masterclass Notes on Radio Advertising

Introduction

Companies buy reach instead of a number of spots. This reach represents the number of listeners at a given moment, such as during rush hour. The number of spots does not matter if the reach is low. You have gross reach, average contact frequency (GCF), and Net reach. Net reach refers to the number of unique listeners, while gross reach does not distinguish between them. The GCF measures how often a listener hears a spot.

Example Calculation

$Gross = 2.583.958$
$GCF = 4$
$Net = \frac{Gross}{GCF} = 645.989,50 \approx 645.990 \text{ Unique listeners}$


Understanding GRP (Gross Rating Point)

Radio stations use Gross Rating Point (GRP), which works with target groups and percentages. A GRP of 5 means that 5% of the target group was reached. This can be filtered by age, gender, country, etc., with age being the most common filter. GRP adds up, so Net listeners do not matter. For example, $2 \times 5%$ GRP simply becomes 10% GRP.

Important Considerations

  • Average Contact Frequency: Always pay attention to the GCF.
  • Target Groups: Some age groups are more difficult to reach.
  • Campaign Duration: Longer campaigns may be necessary for less popular stations.

Data Sources: National Listening Survey (NLO)

The National Listening Survey (NLO) provides data on the number of listeners to major radio stations. NLO participants maintain a diary every fifteen minutes over two months, noting which station they listen to.

Key Statistics

  • 15.000.000 listeners monthly to large radio stations.
  • Market share is recorded as a percentage of listeners aged ten years or older.

Choosing the Right Station

To advertise effectively, assess the most cost-efficient way to reach your target group. Many advertisers mistakenly choose stations based on assumptions rather than data.


Campaign Pricing Factors

Basic Annual Price (BJP)

The BJP represents how much you will pay per year for a basic number of spots. Discounts may apply for bulk spot purchases.

Spot Length

Radio stations base prices on a standard spot length of 20 seconds. Prices adjust in increments of 5 seconds for shorter or longer spots.

Monthly Rate Example

$BJP = 200 \text{ euros}$
$\text{Spot length} = 35 \text{ seconds}$
$Index = 175 \text{ euros}$
$\text{Monthly rate} = 175 \times 200 = 35.000 \text{ euros per month}$


Advertiser Packages

Advertiser packages offer different conditions such as priority in scarcity situations, and how quickly reach can be used (distribution).

Example: GRP Target

Suppose you want a GRP of 3.5 million people in a month on NPO Radio 2. With distribution, you can limit the campaign to stop once that GRP is reached, avoiding unnecessary extra costs.


Time Slots and Indexing

Time slots indicate when something is broadcast during the day (e.g., 6-24, 9-14). Some companies calculate these as a separate index.

Target groups also determine the price. Factors such as demand, supply, and size influence the cost.

Market Index

Radio stations use a market index to balance supply and demand. Prices may fluctuate based on demand and availability.

Monthly Index

The monthly index tracks how much spot time costs each month. For example, advertising costs may rise during holiday months due to increased demand.


Additional Options

Some packages include additional options, or they may be billed separately:

  • Preferred Positions: Your preference for spot position (e.g., last, first).
  • Roadblocks: A group of channels plays a spot simultaneously.

GRP Price Calculation

The GRP price is calculated by multiplying the following factors:

$\text{GRP price} = \text{BJP} \times \text{spot length index} \times \text{package index} \times \text{time slot index} \times \text{target group index} \times \text{market index} \times \text{month index}$


Conclusion

All radio stations use fixed costs per spot rather than GRPs, derived from second rates. For companies that prefer not to delve deeply into GRP mechanics, second rates may be the best choice for maximizing reach.

A small project: Short.moe

A small project: Short.moe

I’ve been recently working on a project with the domain short.moe creating a serverless URL shortening service.

Short.moe is a free URL shortener service that allows you to easily shorten long URLs into shorter, more manageable links. Built with NextJS 14, Clerk, Prisma, and PostgreSQL, hosted on serverless on Vercel, Short.moe is designed to be both easy to use and user-friendly.

Key Features

Easy URL Shortening

With Short.moe, you can shorten URLs without the need to create an account. When shortening a URL without an account, the slug/alias (the unique part of the shortened URL) will be randomly generated using the nanoid package.

Account-Based Customization

For users who create an account, Short.moe offers the ability to set custom slugs. This means you can create memorable, aliased links that are easy to share and recall. Clerk handles authentication, making the process of signing up and managing your account straightforward. On the technical side, this was very easy to do.

In Short

Short.moe aims to be an easy option for anyone looking to shorten URLs quickly and easily, whether with or without a personalized alias/slug. Thank you for reading this short post.

Unleashing the Power of CloudFlare's AI Workers

Introduction

CloudFlare’s AI Workers allows developers to interact serverlessly with CloudFlare’s AI models, providing a simple way to integrate AI into your applications.

CloudFlare’s AI Workers Overview

CloudFlare’s AI Workers bring the capabilities of Artificial Intelligence (AI) directly into the realm of serverless computing.

Now, developers can use the power of AI models through CloudFlare’s infrastructure, opening new possibilities for their applications. The AI Workers come with a REST API, allowing for easy integration and communication with CloudFlare’s AI models. These include LLMs, Stable Diffusion, HuggingFace and more.

Python Example: Interacting with CloudFlare’s AI

This Python example that shows how to interact with CloudFlare’s AI models. This script utilizes CloudFlare’s REST API to run an AI model named “@cf/meta/llama-2-7b-chat-int8.”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import requests

API_BASE_URL = "https://api.cloudflare.com/client/v4/accounts/ACCOUNT_ID/ai/run/"
headers = {"Authorization": "Bearer {API_TOKEN}"}

def run(model, inputs):
input = { "messages": inputs }
response = requests.post(f"{API_BASE_URL}{model}", headers=headers, json=input)
return response.json()

inputs = [
{ "role": "system", "content": "You are an AI" },
{ "role": "user", "content": "Write a short story about a llama that goes on a journey to find an orange cloud"}
]
output = run("@cf/meta/llama-2-7b-chat-int8", inputs)
print(output)

JavaScript Example: Deployment with CloudFlare’s AI

For developers looking to integrate CloudFlare’s AI into their web applications (e.g. customer service chat bots or SaaS), the following JavaScript example showcases the deployment of an AI-powered function using CloudFlare Workers:

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
import { Ai } from './vendor/@cloudflare/ai.js';

export default {
async fetch(request, env) {
const tasks = [];
const ai = new Ai(env.AI);

// Prompt - simple completion-style input
let simple = {
prompt: 'Tell me a joke about CloudFlare'
};
let response = await ai.run('@cf/meta/llama-2-7b-chat-int8', simple);
tasks.push({ inputs: simple, response });

// Messages - chat-style input
let chat = {
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'Who won the world series in 2020?' }
]
};
response = await ai.run('@cf/meta/llama-2-7b-chat-int8', chat);
tasks.push({ inputs: chat, response });

return Response.json(tasks);
}
};

Proof of Concept AI Worker

To see CloudFlare’s AI Workers in action, check out my AI Chat App. It’s a proof of concept that uses CloudFlare’s AI, providing an eye into the capabilities and potential applications. Try it here: ai.cvyl.me.

Exploring the Decentralized Web with IPFS

Introduction

I recently delved into the world of IPFS (InterPlanetary File System), a protocol designed to improve the way we store and share content on the internet. In this journey, I discovered how IPFS operates compared to centralized servers, its cryptography in blockchain technology, and its potential to provide a decentralized solution.

Understanding IPFS

How IPFS Works

IPFS operates on a decentralized network where files are not stored on a central server but are distributed across a peer-to-peer network. Each file is given a unique hash, and retrieving the file involves querying the network for nodes that have that specific hash. Files on IPFS have a hash that changes if the file has been tampered with, providing a mechanism to prevent and spot malicious data.

IPFS Diagram

This diagram shows the decentralized nature of IPFS and how files are distributed across nodes in the network. Each node contains a unique hash, ensuring data integrity and preventing a single point of failure.

Comparison with Centralized Systems

Let’s compare IPFS with traditional centralized systems:

Aspect Centralized IPFS
Storage Central Servers with Nodes Peer-to-Peer Network
Reliability Redundant Nodes Redundancy and Resilience
Censorship Resistance Vulnerable Resistant and Robust

Centralized servers do use nodes to decrease a single point of failure, but IPFS takes it a step further by decentralizing the entire network.

IPFS in Cryptography and Blockchain Technology

IPFS integrates with blockchain technology, providing secure and transparent file storage. The cryptographic hashes used in IPFS ensure data integrity and authentication. Comparatively, HTTP 2.0 lacks this built-in security layer.

Let’s break down conventional HTTP 2.0 links and an example link from IPFS:

HTTP 2.0 Link:

1
https://www.example.com/path/to/content

IPFS Link:

1
ipfs://QmXyZaBc123/example/content

Components breakdown:

  • Protocol: HTTP vs IPFS
  • Address: Domain in HTTP, Hash in IPFS
  • Path: Traditional path in HTTP, Content hash in IPFS

IPFS and Censorship Resistance

In countries with strict censorship like China, IPFS offers a decentralized solution. Since the content is distributed across a peer-to-peer network, it becomes challenging for authorities to block access. Additionally, the cryptographic integrity checks make it harder to manipulate or inject malicious content.

Privacy and Decentralization

One of the significant advantages of IPFS is privacy. With your data distributed across the network, ISPs find it challenging to track your activities compared to centralized systems. This decentralization contributes to a more private and secure online experience.

Summary

IPFS is a protocol reshaping the internet. It’s a decentralized, peer-to-peer file system that ensures data integrity, resiliency, and resistance. By using cryptographic hashes and blockchain integration, IPFS provides a secure and transparent way to share and store and share content.

Suicidal ideation: Choosing faith and departure

Suicidal ideation: Choosing faith and departure

After crying for over two hours straight, I chose to write a bit on my blogging website. As I haven’t updated anything on here in a long time, sorry for that.

I cried because of my realization that I have every so often about my life and how unfortunate it really is. Today’s nonsensical reasoning was due to my dysphoria.

Taking Control of My Narrative

In the midst of these emotional struggles, I decided to take control of my own narrative. I’ve been navigating the challenging waters of gender dysphoria, seeking solace and understanding within a system that often feels like it’s failing me. My decision to start self-administered hormone replacement therapy (HRT) in December 2023 was a pivotal moment in my journey.

Despite reaching out to professionals, such as a gender clinic and an endocrinologist at UMCG on April 20th, 2023, the response has been disappointingly slow. Frustrated by the lengthy waiting times and lack of support, I chose not to be limited by the protocols that seemed to hinder my progress.

Learning to self-administer Estradiol Acetate injections weekly has been both empowering and challenging. My determination to embrace my authentic self propelled me to overcome the hurdles presented by a healthcare system that often leaves transgender individuals waiting in the wings.

My GP has been supportive in this journey, prescribing monthly blood tests to monitor my hormone levels. While unconventional, this approach has given me a sense of agency over my well-being.

A Glimmer of Hope

Acknowledging the risks I’ve taken, I am conscious of the potential consequences. Yet, for me, the urgency to transition at a young age outweighs the risks. The positive impact on my mental well-being since starting HRT has been notable. The reduction in suicidal ideation underscores the importance of timely access to gender-affirming care.

The struggle for acceptance and understanding in the face of a healthcare system that feels unresponsive has been daunting. Still, my determination to chart my course and embrace authenticity keeps me going. My story is ongoing, and every day is a step towards reclaiming my identity.

In sharing my journey, I hope to shed light on the challenges faced by many in the LGBTQ+ community and the broader conversation around mental health. It’s a raw, unfiltered account of my experiences, with the intent to foster understanding and empathy.

Remember, even in the darkest times, there can be a glimmer of hope, and I am trying to be the living proof of that.

Harmony Within Us Development Update

Hey HWU community,

I hope this post finds you well. I wanted to provide a quick update on the development of Harmony Within Us (HWU). As many of you know, our shared journey toward creating a supportive and inclusive space is incredibly important to me.

Due to a heightened focus on my mental health and overall well-being, I’ve made the decision to temporarily pause the development of HWU. It’s crucial for me to take this time to ensure that I can continue to contribute positively to our community.

I want to reassure you that this pause is not a goodbye or an end. It’s a necessary step to prioritize self-care, and I believe it will ultimately lead to a more robust and impactful HWU in the long run.

I understand that many of you are excited about the project, and I truly appreciate your support and enthusiasm. Please don’t worry – Harmony Within Us is still very much alive, and I am committed to returning to development as soon as possible.

Thank you for your understanding and continued support. Let’s keep fostering harmony within ourselves and our community.

Stay tuned for more updates, and take care. <3

Gender Dysphoria Rant

So, here’s the deal. I never signed up for this whole MtF, gender dysphoria package. Like, seriously, who would willingly choose this rollercoaster of emotions? Not me.

Let’s rewind a bit. Imagine waking up one day and realizing your gender compass is pointing in the opposite direction. It’s like, “Hello dysphoria, my old friend. Can we not do this today?” But nope, life had other plans.

And here’s the kicker. It’s not a phase, it’s not a choice. It’s just me, dealing with this hand I’ve been dealt. I didn’t wake up one morning and think, “You know what would be fun? Let’s switch genders and see how that goes.” Nope, not a thing.

Let’s talk about societal expectations. I mean, come on. Why can’t we all just be who we are without the constant judgment and raised eyebrows? It’s exhausting. If got a euro every time someone said; “But why would you choose this?” I would be a millionaire.

If you ever wonder why I didn’t choose an ‘easier’ path, well, it wasn’t an option.

Sorry, rant over. Thank you for reading.

The Privacy Perils of Discord: A Closer Look

In the past 7 years, Discord has emerged as a popular platform for communication, particularly within gaming communities and social circles. However, beneath its user-friendly interface lies a complex web of privacy concerns that users should be aware of.

Discord’s Privacy Policy: A Critical Examination

Discord’s Privacy Policy (Discord Privacy Policy) outlines the platform’s practices regarding user data. While the document is comprehensive, the devil often lies in the details. People should pay attention to data collection, storage, and sharing policies to understand the extent of their digital footprint on the platform.

Government Requests and User Privacy

Discussions on Reddit (Reddit Post) have shed light on Discord’s stance when faced with government requests for user data. Users express concern towards the platform’s apparent lack of commitment to protecting user privacy in such situations. This raises questions about the balance between user rights and legal obligations.

Terms of Service: What Users Should Know

Terms of Service; Didn’t Read (TOS;DR) offers a summarization of Discord’s Terms of Service (TOS;DR - Discord). This website breaks down the legal jargon and highlights key points, making it easier for people to comprehend the implications of agreeing to Discord’s terms.

Third-Party Observations

In an era of digital transparency, independent observers and critics play a crucial role in scrutinizing online platforms. A critical article on Spyware (Spyware Article) provides a thought-provoking examination of Discord’s privacy-related issues.