That will be a very easy target for faking impressions...
What you are proposing is AMP Ads and is universally hated by advertisers and publishers.
* Buying installs for a older/hacked browser (or browser extensions) that has been scripted up to load the ads. People would embed these in screen-savers making real users visit these ad pages when the pc owner was unlikely to be around. They won't have the protection real browsers have, and so can trivially modify the network profile.
* Making a headless browser call ads on pages. These pages "look" valid, and you can visit them to see the ads, but the headless browser has collected cookies from various shopping sites, and uses a number of home/DSL proxy services to obscure detection. For any single impression, they look indistinguishable from legitimate traffic.
However that last one is tricky, and outside of bugs, you're left with timing attacks which I won't enumerate because their obscurity is the strongest protection for continued utility, but in general they work on the principle of leaking some identifying data in HTTP and DNS responses, and relying on the fact that that headless browser needs to call lots of ads to pay for the electricity and Internet that it uses, so we get lots of opportunities for a collision.
My original goal was avoiding ad blockers: By having the publisher render the ad themselves, it doesn't look obviously an ad, and as long as the publisher doesn't make the page itself an ad farm, users do not tend to block with custom CSS (that might end up in popular blocking tools). It seems to work okay- we've been operational for over five years at this point, and I've not seen one of the publisher domains or CSS show up in ublock.
But for it to really work you would need to store a cookie to correctly redirect the user.
I like your idea of rendering the ads on the server side, but I would hope they would have super low responsive times. Or at least low timeout on your side.
What do u think of images rendered on the backend?
Reducing this data collection and turning to simpler methods like images increases fraud, which decreases the amount honest publishers would earn (likely hugely). So it's definitely doable, but tends to not make much economic sense at large scale.
Basically, we show ads for OSS projects & conferences in the ad spot on a small percentage of our traffic. It's a nice way to give back, and in the past we've shown ads for many Pycon's around the world, the PSF's annual fundraiser, and a bunch more worthwhile community projects.
The hardest thing has actually been finding projects that are well targeted for our community, and getting design assets for them. A lot of OSS & side projects don't have this stuff, and the ones who do probably don't need much promotion.
It's more an experiment than a serious business venture.
The idea is simple. We place a little ad on each others page with a link back to ones side project.
It privacy respecting (no user tracking) and will work in the beginning by me judging which project to include into the ad network.
I hope to create a positive sum game and give cool projects a new platform.
(The ad will start showing on March 15th)
A solution to this problem that doesn't take your time is to ask projects to put down a deposit. Bad/spam projects don't get the deposit back. https://repowcha.com solves this.
Only ads with the script tag will be included to the ad network.
"No specific version numbers or IP addresses are saves."
Should be "saved".
It reminds me of the old internet :-)
Some copyediting help:
Is Tiny Ads GDPR conform? -> "conformant" (or more naturally, "Does Tiny Ads conform to GDPR?"
No specific version numbers or IP addresses are saves. -> "saved"
How does the blacklisting works? -> "work"
It could distract our user when they want to decide to try us out -> This is a statement not a question ;)
I went there and moved my eyes around the example ad and immediately got vertigo and my stomach turned.
Possibly it's from the dots...?
One thing: I really hope you don’t plan on making these things wiggle or anything. That’s exactly the sort of obnoxiousness that prompts me to block ads, and I think that would defeat your stated goal of unobtrusiveness here.
I just uploaded my own side project (http://spot.gifts) but the image I uploaded is showing as broken (was initially .svg). I tried to upload a .png and delete my previous post but that didn't work. Just thought I'd give you feedback. Keep going!
What do I have to do to place the banner?
Would be nice a place inside the site to send you some feedback or questions.
With several things that can be improved.
So I created a second ad that did have the competitor list, it failed again, this time I re-added the competitor list and it seemed to go through.
This all because there was no edit button. But the icing on the cake is that the DELETE button doesn't work, either, so now I just have two ads up there.
I guess we'll see how this goes...?
Off topic I am watching your code generation video on nodewood https://nodewood.com/features/code-generation/ . It's seems clever, but I have some difficulty evaluating how much trouble it would save me for example. How do pitch that feature ?
On Nodewood, yeah, it's probably not the #1 time-saving feature that Nodewood offers, but it's similar to any other framework's scaffolding tools. It ensures that when you want to make a new API Controller, or UI Page, or shared Model, it's in the right location, follows naming conventions, and has the basics filled in for you.
I always find starting from a simple case and extending it to be a lot more-productive than starting from a completely blank file and trying to remember the basic implementation of the thing I'm trying to build.
Plus, Nodewood is a little opinionated about how to split up your code into "features" that makes building a reasonably well-organized Monolith a lot easier, and the code generation tools make it a lot easier to follow that pattern.
After experimenting with datalog and mongo I settled with postgres. It's flexible enough for most situations.
Why? Plenty of options to scale Postgres. What alternatives do you use?
I can't speak for Exuma, but I've built several ad networks and buying tools that needed to handle over as much as a trillion daily events, and that means lots of HTTP event collectors writing events down into a lot of otherwise independent streams that you need to merge-sort together into coherent reporting and deduplicate client retries.
In principle, anything with statement-replication (such as one of the multi-master plug-ins for Postgres) could be made to work here, but error recovery tends to be poorly considered (and users expect no downtime here) and so it's almost certainly easier to just write a log file (or let cloudfront or whatever do it), and write a custom log shipper. Dedup in a window is easy, but UPDATE on a tall skinny table even with an INDEX is slow.
If you want to materialise that in Postgres back at home-base, that can probably work. There are a lot of single-writer methods to scale Postgres. I've used Postgres for this and it's fine.
The other problem is configuration: Outside of naive impression counting, your HTTP "event collector" might also need to be smart enough to choose an ad. Naively relying on replication from your configuration database to all your nodes means it's easy to get split-brain, and you're still taking an (often unacceptable) performance hit asking the "local" Postgres server your questions -- Meeting hard-realtime guarantees consistently (usually 30-50msec) is hard for a bit of PHP and Postgres to accomplish. Usually I'll build the decision logic into the configuration payload -- actually pre-compile the decision tree (in one implementation, into C that was loaded by a openresty+lua driver every config-change) so that the code doesn't waste any time asking the database over and over for the same key that probably hasn't changed.
Erlang is also a good choice for adtech people, because it has this cluster-wide messaging, hot code reloading (good for config!), a built-in binary log (disk_log) with replication capabilities, and a in-memory database (mnesia) that is good for generating reports out of.