Tumgik
#crufts 24
twoweirdmutts · 2 months
Text
Also @fjordfolk @nefja your drinking game joke reminded me of something
Cannot recall if someone’s done this before (probably yes) but how about… Crufts Bingo
Tumblr media
Here are some suggestions for the boxes
- “good substance”
- “fit for function”
- “not too exaggerated”/“free of exaggeration”/general inappropriate use of the word “exaggeration”
- justification for show cut (bonus if it makes zero sense)
- Unpleasant adjective said like a good thing (ex: “greasy” coat)
- Frank says a slur
- Poodle in the shortlist
34 notes · View notes
blueboyluca · 2 months
Text
The KC Hero Dog Award nominees are out. These videos are always so lovely to watch every year.
youtube
youtube
youtube
youtube
I think I’m gonna vote for Gordon. 😭
You can vote here.
10 notes · View notes
appleteeth · 2 years
Text
Tumblr media
Nah see, I want Stede to try this, to be what he thinks Ed wants and butching up for him... And it backfires spectacularly.
Ed is surrounded by tough leather daddies 24/7 and didn't look twice at them, then here comes the fanciest eclair in the patisserie, the frilliest nightie you nan has ever worn, the most pampered pomeranian to compete at Crufts... And Ed is so into it he's getting heart palpitations every time Stede skips along in heels.
Stede rocking up looking like a competent and tough sailor will prove to be the biggest boner-killer since Calico Jack tried pillow-talk.
252 notes · View notes
rogueninja · 2 years
Note
Thoughts on 20min Vs 45min Vs 60min episodes?
lmaooo i love this question!!
to me the 20-24 minutes is the perfect episode time. so easily digestible. an entire little arc in a bite sized piece. you can watch an episode in the morning or before bed or during lunch and like barely any time has passed! anime has perfected this i feel.
whether the episode is 45 mins or an hour, there’s not much difference between those to me. if the show is good with good pacing and an engaging story, i hardly notice that the episodes are so long. tho it does make it a greater undertaking/commitment if i decide to watch an episode. and if the pacing is particularly slow or the story is boring, i can really feel it.
what i actually hate is when a show is like 35 minutes. like what is that. it’s not enough time to breathe but too much time to have a tight story. disney+ shows do this a lot. i’ve always suspected it was because they don’t want to pay for a full 45 min-1 hr episode. and the other annoying thing is how wildly inconsistent it is between episodes. some are 30 mins others are 50. please pick one. the other end of this is when episodes are like 1.5+ hrs. i’m sorry that’s not an episode that is a movie. why am i watching 8 movies in a row. netflix is especially guilty of this with stranger things. why was the new season SO LONG like it had no reason to be. it ended up resulting in so much unnecessary cruft and absolutely none of the story felt tight because it was allowed to be as long as it wanted with no one restricting them. not only that but nothing about it is actually episodic, it’s just one long movie that’s meant to be binged. it feels like streaming is ruining tv in this sense bc there are no restrictions when imo restrictions force you to decide what’s necessary, think outside the box, and breeds creativity. tv for years perfected the art of the 24 minute of 45 minute episode but now people are just doing whatever they want and it’s the wild west out here!
7 notes · View notes
petnews2day · 2 months
Text
Protesters storm Crufts: PETA activists calling for 'breeder boycott' tussle with security guards and are dragged out of dog show
New Post has been published on https://petn.ws/R2pmK
Protesters storm Crufts: PETA activists calling for 'breeder boycott' tussle with security guards and are dragged out of dog show
By Emily Jane Davies and Iwan Stone 20:45 10 Mar 2024, updated 21:24 10 Mar 2024 Share or comment on this article: Protesters have entered a tussle with security guards after they stormed the Crufts dog show tonight and were dragged out of the event. A video shows the violent struggle as a small group of […]
See full article at https://petn.ws/R2pmK #DogNews
0 notes
shrapnelstars · 2 years
Text
I didn't realize that happiness was capped at 179 and couldn't be maxed out unless you boosted it through camping (or the stat berries, which the game is being kind of stingy with).
And this is a bandaid fix to assist with the overpowered max friendship effects, which used to be tracked separately as the affection stat and not the regular friendship stat.
I only found this out because all the way out in the DLC, they want you to max a specific mon's friendship. I'd like to bypass the camping and just use the stat berries like usual because it will take less resources than having to make curry a bunch of times. Curry takes (from what I understand from how I've been playing) 8 berries per attempt to raise friendship, and you aren't guaranteed a set amount of friendship. Stat berries take 1 berry and raise it the same amount each time, and you only need like 10, plus there's no minigame (though I appreciate the minigame).
(Snipped for you. Because I love you.)
Why would I take the path that requires 11 times the effort? (8 berries plus a 3 part minigame). In gens 6 and 7, the affection boosting mechanic regenerated it's own resources. The more you played the minigame, the more beans/cupcakes you received to raise affection, and each minigame was a one and done deal. If you scored high on the minigame, you got the best beans/cupcakes, making the process way shorter. The camping is a way slower process. (Again, I appreciate what they were trying to do, though.)
If they had just let you grow the damned berries instead of making you memorize trees that only drop them via RNG games of blackjack once every 24 hours (not joking), you could have direct control over which ones you wanted to stock up on. You don't even need the crossbreeding system from XY. Just plant one and get a yield no more than 12 hours later. Or have the stat berries specifically also be purchasable at the battle tower. Because you need them for the other shitty mechanic, EV's.
Even the devs conceded that the camping stuff was inherently janky, because pokemon that evolve via happiness can still do so once they hit the new 179 cap before camping is needed. Before, the friendship number to evolve was 200.
Bandaids on top of bandaids revealing what kind of tangled mess gets created when you have to crunch out new games constantly and can't take the time to refine and streamline mechanics.
PLA cut the need for all that shit with the grit system and cutting affection (not friendship) completely. Only the medicine berries and Aguav (used to identify swarms) are in the game. You toss your pokemon at the tree with the color you want, and you get a handful of a berry of that color. Many trees are on a map. You leave a map and come back, and they are reset. No 24 hour bullshit. You can toss your mon at the tree and keep on running to your destination. No text boxes freezing you in place. A passive message shows up on the left of the screen telling you what you just got. Fast and painless. More than one tree in an area? Toss out multiple pokemon and they'll all target a tree to collect from, and you still don't have to stop what you're doing.
That game keeps looking better and better in retrospect. So much ridiculous and tedious cruft was cut. And we have to wait until gen 10 to see any of that QoL put into main. I know I've said this before, but if I could raise everything I got from Shield in PLA instead, I'd do it in a heartbeat. There's so much less foolishness involved.
0 notes
galaxy-whiskers · 4 years
Text
I was tagged by @bailandonorris, thanks!
1. what is the colour of your hair brush? 
I have a silver paddle brush which I don’t use very often, a transparent and purple swirly coloured (honestly don’t know how else to describe) afro comb, and a regular black comb.
2. name of a food you never eat? 
Tuna, can’t stand it. To be honest, I eat most things if they’re warm, but VERY fussy when it comes to cold food
3. are you typically too warm or too cold? 
Definitely too hot! I still have a fan on in the winter at night time
4. what were you doing 45 minutes ago? 
Playing Animal Crossing, tried to catch some tarantulas because Flick is on my island but the dodos don’t seem to want to send me to any decent islands so my mission was unsuccessful
5. what’s your favourite candy bar?
That’s a hard one... probably either Cadbury’s marvelous creations with the jelly beans and popping candy, darkmilk, or the one with oreos. Snickers are pretty great too, also Kinder Bueno and just Kinder chocolate in general. Basically, what I’m saying is I love chocolate
6. have you ever been to a professional sports event? 
Yes, I went to the London 2012 Olympics to watch show jumping, football and basketball! Have probably been to others? Really want to go to Wimbledon at some point but not sure when I’ll be able to do that. Does dog agility count as sport? Seen it at Crufts multiple times
7. what is the last thing you said out loud? 
‘Night night curly shoes’ - a goodnight wish for my sweet doggo Ivy
8. what is your favourite ice cream? 
I’m a fan of coconut ice cream it has to be said, also honeycomb, and your standard Ben and Jerry’s cookie dough is high up there. Really specifically, the vanilla ice cream from the waffle shop in Cirencester. To be honest, don’t eat much ice cream, not my go-to food choice because I’m lactose intolerant and a lot of it makes me feel sick just thinking about it. Has to be good!
9. what is the last thing you had to drink? 
Some water, absolute health right here (she says drinking her first glass of water all day after about 4 cans of Pepsi Max whoops)
10. do you like your wallet? 
I guess so, yes. Could probably do with a slightly more efficient one but it’s decent
11. what was the last thing you ate? 
A jazz apple from the fridge. We have no pink ladies which are the favourites but jazz are pretty tasty too
12. did you buy any new clothes last week? 
No, only virtual ones in Animal Crossing. I haven’t been clothes shopping in so long and doesn’t look like that will change anytime soon
13. last sporting event you watched? 
Honestly no idea, since all the sport has been cancelled for a while I can’t think what the last thing would have been. Probably Cheltenham races on the telly back in February or March or whenever it was?
14. what’s your favourite flavour of popcorn? 
The classic, salty cinema popcorn. Honestly the best
15. who was the last person you sent a message to? 
Strangely, someone from my secondary school who I haven’t ever spoken to over message before. She posted our leavers video on her Instagram and thought I’d message since I’d been looking for that video for  y e a r s  and sparked a conversation! She never liked me much back in school I don’t think, she was popular and I really wasn’t so I never properly spoke to her. One of my friends had a bit of drama with her, absolutely hated her, but they eventually became best pals. Also her best pal during most of school really didn’t like me for some reason... anyway, had a nice chat, strange how friendly she seems these days
16. ever go camping?
Uhh well... I’ve been 4 times, 2 of which were for D of E and I can safely say I’ve never had a good experience. First time, the people in the tent next to us got arrested at 3AM for drugs or something, second time was my dad’s 40th birthday and my brother didn’t know he was allergic to nuts so eating a cake with mixed nuts on the top didn’t go down well for him... also went to a restaurant on the way there with my granny and got a caterpillar in my salad. Third and fourth times, let’s just say D of E was one of the worst experiences of my life, I’ll leave it at that... would really like to go camping again though to have a good experience, maybe change my mind on it? I don’t know, willing to give it a try
17. do you take vitamins? 
I go through phases, sometimes I take them every day, other times I don’t take them for like 3 months
18. do you go to church every sunday? 
I used to, but as I got older I slowly went less and less until I didn’t go at all. I lost faith I guess? Kind of didn’t feel I belonged there or believed anymore. I loved singing the hymns and our vicar was an absolute lad, we also got biscuits at the end of each service, but over time I decided it wasn’t right for me to keep going. Pretty much all the people that go to ours are your typical white, posh, probably homophobic and hate children type so that put me off. Also after everything that’s happened in mine and other’s lives, I slowly lost the belief in God. If all of it was true, why would these things happen? I guess also my scientific mind was constantly telling me there’s no proof. I think the only reason I went to begin with was because it was a family thing and as a child I believed pretty much everything that was said
19. do you have a tan? 
No, certainly not... used to when I lived in the Caribbean but now I’m pretty much white as a sheet
20. do you prefer chinese food or pizza? 
A very difficult one... probably chinese? As much as I love pizza, it’s the same issue as the ice cream
21. do you drink soda with a straw? 
Nah not a fan of straws, they taste weird
22. what colour socks do you wear? 
ALL THE COLOURS! I own a pair of socks for every outfit to colour co-ordinate, my sock draw is overflowing
23. do you ever drive above the speed limit? 
Strangely, I drive under by quite a bit when no one else is around. It’s the other cars that stress me out and make me go too fast. Also I have a black box so not allowed
24. what terrifies you? 
Good question, lots of things... the sea, pools, tbh water in general, heights, rejection, the current impending doom, large open spaces with no walls I can be against, losing everyone I love, the fact that anyone might be secretly talking about me behind my back because they actually hate me, the list goes on but I won’t continue it
25. look to your left what do you see? 
An empty Pepsi Max can, a glass of water, some crocodile scissors, my Switch, a cranberry scented candle, and some tiny balls of wool
26. what chore do you hate? 
Got to be changing my bed, or washing up when the things have got cold food left on them
27. what do you think of when you hear an australian accent? 
A throwback to year 8
28. what’s your favourite soda?
Pepsi Max
29. do you go into fast food places or drive thru? 
It depends who I’m with
30. who was the last person you talked to? 
My mum about a meteor shower and satellites
31. favourite cut of beef? 
A random question... I do like a good rump steak
32. last song you listened to? 
You Make My Dreams by Hall and Oates because I’m using it in my animation project
33. last book you read? 
I’m like part way through Good Omens and have been for quite some time... I have learning difficulties and find reading a lot of effort so don’t read very often
34. can you say the alphabet backwards? 
No, it’s the kind of thing I’d have expected myself to learn at some point but never did
35. how do you like your coffee? 
I don’t like coffee so in the bin
36. favourite pair of shoes? 
My multicoloured Vans, got them in the second week of uni and I’ve loved them ever since
37. the time you normally go to bed? 
Well, currently it’s around 1AM to go to bed, 3AM to sleep. Used to be around 12/1AM sleep but the lockdown has ruined that
38. the time you normally wake up? 
Again, currently it’s around 11:30AM to wake up then 12PM to do things but used to be around 9:30/10AM. To be honest I still sometimes wake up then but I go back to sleep again because I have no reason to exist more than I need
39. what do you prefer sunrise or sunsets? 
Sunrise is always nice to watch, but I don’t like getting up early so definitely sunset, especially when you’re at a restaurant or sitting outside somewhere in the countryside
40. how many blankets are on your bed? 
Just the one duvet, but I have a soft fish patterned blanket for when I want something to cuddle with
41. describe your kitchen plates? 
We have some plain white ones and some that are white with leaves around the edges. The edges have a ridged pattern and the rims are gold
42. do you have a favourite alcoholic beverage?
I don’t drink so no
43. do you play cards? 
Yes, love a good card game! 
44. what colour is your car? 
It’s very nice Caribbean sea blue. Used to be my mum’s car, it’s her favourite colour
45. can you change a tire? 
I probably could if I had to but can’t say I’ve done it before
46. your favourite province? 
I guess that’s counties? Hometown of Gloucestershire is up there, also a fan of Devon. My favourites may have to be Caenarfonshire and Anglesey though after the road trip last year
47. favourite job you’ve had?
Not sure really, I guess it would have to be doing my art commissions
48. how did you get your biggest scar?
The biggest scar I have these days is on my right knuckle between my index and middle finger, it’s very small. I got it from when I was holding a horse still before untacking and he decided that hay was more exciting, caught my hand on a splintered wooden fence and that was that
49. what did you do today that made someone happy? 
Nothing, I’ve only seen my family and even then it was for a short time. Don’t think I make anyone happy these days ahah
It’s now 3:22AM, that took longer than I expected. ‘I’ll go to sleep early today’ I said but I say that every day. Don’t know why I keep lying to myself. 
Anyway, I guess I have to tag someone now, so I tag @duckingpunches !
1 note · View note
orcinus-ocean · 6 years
Photo
Tumblr media
Everything below is posted with liberty and credit to Jemima Harrison and the PDE blog, with the sole purpose for this information to spread as far as possible.
Time to get tough
It is... • soon to be 10 years since Pedigree Dogs Exposed • five years since The Advisory Council on the Welfare Issues of Dog Breeding highlighted the issues linked to head conformation in brachycephalic breeds • 18 months since the publication of research (funded by the kennel club) spelling out the link between stenosis (pinched nostrils) and respiratory issues, especially in French Bulldogs • a year since a veterinary petition demanding urgent reform for flat-faced dogs • almost a year since the Kennel Club set up the Brachcycephalic Breeds Working Group in response to that petition .. and of course I have highlighted the issue of pinched nostrils endlessly here on this blog. Endlessly.
And yet... the picture at the top is one the Kennel Club has used as the ideal depiction of the French Bulldog in its new edition (2017) of its Illustrated Breed Standards. And it isn't a one-off. Here's the one the KC has used for the Boston Terrier standard.
Tumblr media
The Bulldog.
Tumblr media
And the Pug.
Tumblr media
Dogs are as near-as-damn-it obligate nose breathers. And even if they can supplement by mouth-breathing when they are awake, they are unable to do so when they are asleep, meaning thousands of these dogs live lives of interrupted sleep as they have to wake up in order to not asphyxiate. Study after study has shown that these dogs pay the price for not being able to pull in a decent lungful of air and that starts with the nostrils. These pictures are all the proof you need that the Kennel Club is not taking this issue seriously; that at its very core the KC is paying nothing more than lip-service to the demands for reform by the veterinary profession and animal welfare campaigners. At one of the first meetings of the Brachycephalic Breeds Working Group, then KC Chairman Steve Dean expressly said that he didn't want "changing the breed standards" to be at the top of everyone's list of actions that could be taken. And indeed, it hasn't been. There have been some new measures.  The KC continues to fund brachy research. There is also now a brachy learning resource available on the KC website, the promise of better education of judges and a breed club commitment to educate better about the importance of keeping brachycephalics slim. There are also now health schemes for the Bulldog, French Bulldog and the Pug which do test for respiratory issues. All this is welcome. But, bottom line, the Kennel Club continues to bat for the breeders who do not want the basic phenotype to change because it's the breeders that pay their wages. Of course the simplest, quickest remedy is to give these dogs back some muzzle - to help not just with breathing issues, but to help protect their eyes from trauma and to give their teeth some room in their overcrowded mouths (a Pug here compared to an Australian Shepherd).
Tumblr media
The problem is that breeders are wedded to flat faces, particularly in Pugs and Bulldogs. They talk about the perfect "layback" - which essentially means that the nose should not interrupt the line between the forehead and tip of the dog's chin. In fact, there's a new book out on the Pug head (yours for only $159) which reminds everyone that the word Pug comes from the latin for "fist" and that this is the shape the Pug's head should be in profile - i.e. totally flat.
Tumblr media
Here's a reminder from a top UK show breeder of what the Bulldog's head should look like.
Tumblr media Tumblr media Tumblr media
As you can see, a  protruding nose or a less severe underbite is considered a fault.
There was a big review of breed standards following Pedigree Dogs Exposed but it was mostly to add vague qualifiers such as, in the Pug standard,  "relatively" short rather than just short when describing the length of the muzzle. This gives the breeders way too much wiggle room.  We need proper metrics - a defined minimum skull/head/muzzle ratio and we need to find more profound ways to change their minds about what constitutes their breed in their eyes.
Large open nostrils are a requirement in brachy breed standards, but this is widely ignored because other points of the breed are considered more important. There would be outrage if a Frenchie with one lop ear or a Bulldog with a liver-coloured nose won in the show-ring, but dogs with slits for nostrils continue to be made up to champions.
Meanwhile, on my CRUFFA group, whenever you post a picture of more moderate examples of the breed, current of historical, the breeders heap scorn. A few days ago, one breeder insisted that the dog featured in this famous painting of a Pug by Carl Reichert, dating from the late 19th century, was a crossbreed.
Tumblr media
Same for these ones. Mongrels, the lot of them.
Tumblr media
She admitted that the eye-white showing was undesirable but preferred the look of this Crufts dog.
Tumblr media
Today, this was posted on a public Facebook page by one French Bulldog breeder in response to a plea by vets for more moderate dogs.
Tumblr media
(My bolding below)
To those who say you cannot rebuild Rome in a day I say... rubbish. There are already more moderate versions of these breeds out there being bred by breeders more interested in health than the current fashion. 
For more than 10 years, I have called for moderation and hoped it would come from the breeders. But  I now know it won't. If we want anything more than a wee bit of tweaking round the edges, then we need to demand it.
It is time to get tough. These dogs suffer - not all of them all the time but too many of them too often. 
Brachycephalics live a third less long than non-brachy dogs. Fifty per cent have significant airway disease. Almost all struggle to cool themselves. Most Bulldogs still can't mate or give birth naturally. Pugs have 19 times the risk of developing corneal ulcers.  All suffer from very low genetic diversity. And so on.
Today, Bulldogs, French Bulldogs and Pugs make up one in five of the dogs registered with the Kennel Club - up from one in 50 in 2005.
Yesterday, a new petition was launched asking for a ban on brachycephalics.  Over 20k people signed it in the first 24 hrs.
Have we reached a tipping point?  With your help.
I haven't been able to blog much recently because I am busy finishing off a television series for BBC2. But I have taken time out to write this because the new breed standard pictures made me so angry.
So please... Although it's moderation I want, not a ban, sign the petition. Make your feelings known to the Kennel Club (see here). Complain if brands or media use generic pictures of brachycephalics to sell their wares.
Vets: thank you so much for all that you are now doing, but please keep the pressure on.
And, of course, to everyone out there - please don't buy that puppy.
It is not safe to buy a Pug, Bulldog or French Bulldog. Not safe for them and not safe for your wallet.
Tumblr media
29K notes · View notes
wyrddogs · 5 years
Text
Finally have a chance to watch some Crufts. I’m so happy they put it up on youtube.
Watching some agility right now. My favorite classes to watch are the 20′’, 8′’, and 4′’ classes (the former because it’s my class, the latter two because they’re adorable). I’ll also watch 24′’ because it’s most likely to have a Belgian in it. I also really love the relays.
3 notes · View notes
loadingtax915 · 3 years
Text
Foscam Ip Camera Viewer
Tumblr media
For technical support, response to inquiries and for obtaining replacements for any Foscam IP Cameras or NVR products, please reach out to [email protected] or call 1-844-344-1113. If you are interested in exchanging your Foscam camera for an Amcrest camera, we can offer you a loyalty discount, even if you are out of warranty.
Foscam C2 Indoor 1080P FHD Wireless Plug and Play IP Camera with Night Vision Up to 26ft, Super Wide 120° Viewing Angle, PIR Motion Detection, and More (White).
By IP Cam Soft This IP Camera app for Windows Mobile allows you to remotely control and view your Foscam IP cameras.
OWLR IP Camera Viewers offers you freedom in many ways: Supports many popular security camera brands Foscam, DLink, Axis, TrendNET, Wanscam, Amcrest and more! Sets up your camera quick and easy With Autodiscover, you never need to remember an IP.
Security is always a priority when it comes to the protection of our homes, offices or other assets. It is widely acknowledged that despite its faults, the best monitoring practice is still advised to be the camera. However, ordinary cameras have many problems, mainly because they cannot be remote controlled.
Related:
Thanks to the new generation IP Cameras, however, this issue is resolved. Now, users can check, view and monitor their home cameras straight from their computers, no matter where they physically are. Let’s represent some of the leading manufacturers of IP Camera systems today and see what they have on offer, for us to understand the basic concept behind the IP Camera Viewer Software.
NetCamViewer
Thanks to their advanced camera technology, NetcamViewer is a Dutch company that offers sophisticated IP Camera Viewer software that can not only be used on your computer but also works from smartphones. The company offers lots of support and accompanying information for their products which you can buy straight from their website along with the cameras.
Foscam
With a very well developed website, you can instantly see that Foscam has highly advanced services, alongside with a great array of accompanying cameras, all coming with their software. You can see all manuals, installation guides, software tools with a handful of other relevant information on the IP camera view software of Foscam.
WebcamXP
WebcamXP offers quality IP camera viewer software for Windows, which enables users for live monitoring on computer or smartphone from literally anywhere. It gives the possibility to make camera recordings and with that, you can also use this software to do live broadcasts. The software is perfect for industrial cameras as it offers a 24/7 monitoring.
NetCamStudio
Being the successor for WebCamXP, NetCamStudio offers highly advanced IP camera viewer software which offers several great services, including lots of novelties, such as Auto detection, motion, and speed detection along with the setting for email notifications. The software works on literally any telecommunications devices, from mobiles to tablets and its client can be installed in any foreign language.
VMS Software
D-View Cam Standard Video Management IP camera viewer software is the perfect solution for larger industries who want to monitor a high number of surveillance cameras as this software supports up to 64 cameras. Alongside live video and audio monitoring, recording and playback it also can be integrated with other security programs that include vehicle counting, image stabilizing and other systems.
ANYCAM
ANYCAM is user-friendly IP camera viewer software that offers a lot of services for civil or commercial use. It is also one of the few companies in this field which offer a 30 day for their software. Extra features for ANYCAM’s IP camera viewer include video recording, archiving and playback with a very easy setup.
OODLECAM
Oodlecam offers a real new generation IP camera viewer software which has all the extensive services which its competitors have, but above that, it places a high importance on the easiness of performing camera and further personal settings armed with HotKey PTZ support, to remove control the cameras connected to it. It is a company to check out.
CamViewer
CamViewer is quality IP camera viewer software which specialized on home security or other personal use offering a fast and user-friendly interface; CamViewer has all the most useful functionalities which make it perfect for monitoring your home through cameras in separate rooms. You can use this software up to 4 cameras.
ViewCommander
A real well trusted IP Camera Viewer Software that is specifically designed to monitor high-risk areas, therefore, its best suggested for commercial or industrial use than that of personal use With this software being sold in over 75 countries worldwide, ViewCommander offers multiple sorts of packages, tailored to users’ needs. Its two product lines include the NVR and the Mobile software.
What is IP Camera Viewer Software?
Camera surveillance can save lives and properties as this is a well-known fact, and in this day and age, there is still no other method which would bring the results camera surveillance does. With the help of their software, these cameras all work from the same hub which is none other than the computer or mobile device which you are using for monitoring. This way, live distance surveillance has never been easier.
All you need to do is to make sure you buy cameras which can be used by the given software. Therefore, we always suggest you check out the cameras the software company has on offer. The other important thing is always to check the maximum number of cameras software can handle.
Tumblr media
IP Viewer Software companies also offer cameras sold straight on their website with the fitting software download opportunity. However, if you don’t yet have the experience in how to use IP Camera Viewer software, go for a product that offers a free trial or at least tons of information on its website about its products.
How to Install IP Camera Viewer Software?
The installation has never been easier than this day and age. However, most IP Camera Viewer software producers or distributors don’t automatically offer a free trial along with them. If you get to websites such as Foscam or NetCamViewer, which have some of the largest choices of cameras and accompanying software versions, we would suggest you to real through the information materials as to which software is specialized on what type of surveillance.
You can also buy the accompanying webcams in the very same place. The video tutorials and FAQ on each and every website will help you a great deal learning about what is IP camera and why it is good or just useful using it.
If you are thinking about the standard home protection, we would suggest you an easy to deal with software called Oodlecam offering extensive information on the mere concept of IP webcams along with their pros and cons.
Related Posts
At OWLR, we chose to simplify using a camera viewer by removing the visual cruft and making your life easier by giving you a simple, safe and secure Foscam viewing app for your pleasure.
Foscam Ip Camera Software
Key Features
Automatic camera discovery
Simple, easy and friendly controls
iPad and iPad Pro Support
Pan/Tilt/Zoom controls
Two-way Audio Support (when available)
Zero Knowledge Security (we never see your passwords)
Foscam Ip Camera Support
Easy Setup
For each camera, you go from Setup to Viewing in under a minute, even without technical experience or knowledge about IP cameras
Hassle Free Camera Discovery
Cam Viewer For Foscam Cameras
OWLR’s Autodiscover detects supported network cameras in seconds. With Autodiscover, you never need to remember an IP address again!
Viewing Is Fast And Easy
We get rid of the extra buttons and just show your the video! With the OWLR Viewer apps, you enjoy watching your cameras without distraction!
Foscam Ip Viewer For Pc
Password is Only With YOU
Unlike other apps, OWLR leaves the camera password in your hands, not our servers. This makes your camera even more safe and secure.
Amazing Support
When you do run into trouble, OWLR’s support team is ready to troubleshoot and solve any difficulties you may encounter.
List of Supported Foscam Cameras
We are constantly working on expanding the range of Foscam cameras that work with OWLR!
Something wrong with our apps?
Experiencing a problem with the app or have an idea on how to improve our product? Tell us!
Foscam Ip Camera Viewer Software
We are not so precious to think that our apps are perfect. Our team wants your feedback and love to hear from you.
Security Camera Viewer For Pc
Our Customer Support section offers FAQs, details on our future features and product directions. Just click and go!
Tumblr media
0 notes
madewithonerib · 3 years
Text
Tumblr media
BELIEVE ALL THINGS | InTouch
Love doesn’t always make sense, especially when JESUS calls us to it.
Taking a closer look at 1 Corinthians 13:7, I see the Greek word Paul used for “believe” was pisteuó, which is not exactly rare– it appears almost 250 times in the New Testament.
And that makes sense, considering the number of times JESUS urged people to believe, taught what it means to believe, described what would happen for those who did or didn’t believe, & so on.
With HIS “crazy” claims of LORDSHIP & the backlash from both skeptical religious leaders & Roman officials, it’s no wonder JESUS spent many of HIS words persuading men & women to trust HIM.
One of those times JESUS used pisteuó was right after walking into the temple, where HE was politely ambushed by several religious leaders who were probably feeling threatened by HIS authority.
When they pressed Him, saying,
    “How long will YOU keep us in suspense?     If YOU are the CHRIST, tell us plainly,”
JESUS replied,
    “I told you, & you do not believe; the works that     I do in MY FATHER’s name, these testify of ME.
    But you do not believe because you are not of     MY sheep. MY sheep hear MY voice, & I know     them, & they follow ME”     [John 10:24-27, emphasis added].
In all likelihood, & according to what we know about them from elsewhere in the SCRIPTURES, these leaders weren’t legitimately curious but were trying to corner JESUS into making a “blasphemous” statement. Regardless of their intent, this was HIS answer: I already told you & I’ve already shown you, & neither was enough. No amount of evidence would convince some1 who didn’t want to put faith in HIM. That’s the thing about belief–w­­­e think it should be rooted in facts & evidence, to be something our human minds can make sense of. But then, where does the act of believing come in?
W­­­e think belief should be rooted in facts & evidence, to be something our human minds can make sense of. But then, where does the act of believing come in? Whether Paul intended it or not, his writing that “love pisteuó-s all things” may have reminded the Corinthians of stories they’d heard about JESUS before—how HE insisted to crowds over & over again that following HIM would be worth their while. They’d heard about HIS miracles & healings, HIS resurrection & ascension, & then leapt to belief in JESUS’ name, much the way we do today. But to hear pisteuó used about relationships rather than in the context of salvation was new for the Corinthians. Paul was imploring them to apply the same sort of “less than empirically provable” belief to their friends & family as they did to JESUS. The apostle claimed that undeserved, dedicated support of people in our life is a demonstration of love. “It’s being committed to another person’s well-being, security, & best interest & is not dependent upon that person’s lovability or favorable responses,” according to Dr. Stanley.
If 1 Corinthians 13:7 seems irresponsible to our modern view of life, perhaps that’s because it is. While our parents & friends would encourage us to be vigilant, to connect all the dots before trusting others, this passage of SCRIPTURE says, Don’t wait. It tells us that love champions others, no matter how many—or how few—logical reasons we have for doing so. Love won’t always make sense, & it will require some sort of leap of faith from us—like the 1 JESUS asked of HIS skeptics, or the 1 we made to receive HIS grace.
Illustration by Adam Cruft
JANUARY 28, 2021
https://www.intouchcanada.org/read/features/believe-all-things
0 notes
itbeatsbookmarks · 4 years
Link
(Via: Lobsters)
If you've used an adblocker, you may have seen BlockAdBlock. This script detects your ad-blocker and disables website access until you deactivate your adblocker. But I found myself wondering how it worked. How does an anti ad-blocker detect adblockers? And how do adblockers react and block ad-block-blockers?
Reverse-engineering through time
The first thing I did was look at their site. BlockAdBlock offers a configurator that allows to specify how long to wait, and how the script even appeared, creating different versions of the script.
And this got me thinking about versions. What if I could not look at one version, but all of them? So I did. I went back in time, using the Wayback Machine. After I downloaded all versions, I took a look and hashed them:
The list of all BlockAdBlock versions, with sha1sum. Click to unroll!
6d5eafab2ca816ccd049ad8f796358c0a7a43cf3 20151007203811.js 065b4aa813b219abbce76ad20a3216b3481b11bb 20151113115955.js d5dec97a775b2e563f3e4359e4f8f1c3645ba0e5 20160121132336.js 8add06cbb79bc25114bd7a2083067ceea9fbb354 20160318193101.js 8add06cbb79bc25114bd7a2083067ceea9fbb354 20160319042810.js 8add06cbb79bc25114bd7a2083067ceea9fbb354 20160331051645.js 8add06cbb79bc25114bd7a2083067ceea9fbb354 20160406061855.js 8add06cbb79bc25114bd7a2083067ceea9fbb354 20160408025028.js 555637904dc9e4bfc6f08bdcae92f0ba0f443ebf 20160415083215.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20161120215354.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20170525201720.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20170606090847.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20170703211338.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20170707211652.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20170813090718.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20170915094808.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20171005180631.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20171019162109.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20171109101135.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20171127113945.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20171211042454.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20171227031408.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20180202000800.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20180412213253.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20180419060636.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20180530223228.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20180815042610.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20181029233809.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20181122190948.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20181122205748.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20190324081812.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20190420155244.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20190424200651.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20190903121933.js d8986247cad3bbc2dd92c3a2a06ac1540da6b286 20200112084838.js
Only six payloads are different, and there are no updates in four years.
There were six versions, and the last one is from 2016, although I still see sites using BlockAdBlock today. This is a huge win, because we can reverse the script once, then reverse each diff. We can see scrapped ideas and even leftover debug code.
You can find each version on GitHub. If you'd like to look at each diff, see this repository where each commit is a different version. I'll include links to the source for each section of this reversing, don't worry.
Unpacking
As we look at the code, we find that it is not minified, but instead packed by a JS packer by Dean Edwards.1
Dean Edwards’ packer in BlockAdBlock: only an argument's name changes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
eval(function(p, a, c, k, e, d) { e = function(c) { return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) }; if (!''.replace(/^/, String)) { while (c--) { d[e(c)] = k[c] || e(c) } k = [function(e) { return d[e] }]; e = function() { return '\\w+' }; c = 1 }; while (c--) { if (k[c]) { p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]) } } return p }('0.1("2 3 4 5 6 7 8\'d. 9, h? a b c d e f g");i j=\'a\'+\'k\'+\'e\'+\'l\'+\'n\'+\'m\'+\'e\';',24,24, 'console|log|This|code|will|get|unpacked|then|eval|Cool||||||||huh|let|you|w|s||o'.split('|'),0,{}))
p,a,c,k,e,r becomes p,a,c,k,e,d. There is no other modification to the logic.
Thankfully, we don't have to worry about this. The packer's weakness is that any code it unpacks must be passed to eval(). If we replace the eval() with something like console.log(), suddently we get the whole source code and the packer is defeated.2
Once we've done that for each version, we can examine each version, as well as the added features over the years.
Version 1 (? - November 2015): initial script
We start by taking a look at 20151007203811.js, around November 2015.3 Although this first version does very little adblock-blocking, it allows us to take a look at BlockAdBlock's architecture, without the cruft that accumulated over the years.
Architecture
In three sentences:
BlockAdBlock is a closure returning an object with three functions:
bab(), which sets up bait most of the time, calling check
check(), which checks if the adblocker blocked the bait, calling arm
arm(), which creates the overlay.
The entrypoint, bab(), is then fired after a set amount of time.
The three returned functions are generated with arguments from the closure, which are set in the BlockAdBlock customizer.
The code is built around a closure, assigned to a global object with a random name.
1 2 3 4 5 6
var randomID = '', e = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; for (var i = 0; i < 12; i++) randomID += e.charAt(Math.floor(Math.random() * e.length)); var setTimeoutDelay = 7; // Delay after which to call BlockAdBlock window['' + randomID + ''] = ...
There is great care in the code to have most names generated randomly, so as to avoid static blocking.
It returns a three-function object: bab, check and arm.
1 2 3 4 5 6 7 8
window['' + randomID + ''] = (function() { var eid = ... return { bab: function(check, passed_eid) {}, check: function(checkPredicate, unused) {}, arm: function() {} } })();
bab, check and arm are my own names. All variables were minified, and some were intentionally obfuscated.
The entrypoint, bab(), is called via setTimeout().
1 2 3
setTimeout('window[\'\' + randomID + \'\'] \ .bab(window[\'\' + randomID + \'\'].check, \ window[\'\' + randomID + \'\'].bab_elementid)', setTimeoutDelay * 1000);
bab_elementid is unused in all versions of the code. setTimeout is passed a string.
The closure has outer variables. Two of them serve to keep state in the script:
adblockDetected is 1 if an adblocker is detected.
nagMode is a customization option. If set, the script will only nag you once to disable your adblocker, rather than block access.
Other outer variables in the closure control apparence and behavior, set in the customizer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
var eid = ' ad_box', // Name of the bait. __u1 = 1, // Unused. // Colors for the blockadblock prompt. overlayColor = '#EEEEEE', textColor = '#777777', buttonBackgroundColor = '#adb8ff', buttonColor = '#FFFFFF', __u2 = '', // Unused. // Text to display when the blockadblock prompt is shown. welcomeText = 'Sorry for the interruption...', primaryText = 'It looks like you\'re using an ad blocker. That\'s okay. Who doesn\'t?', subtextText = 'But without advertising-income, we can\'t keep making this site awesome.', buttonText = 'I understand, I have disabled my ad blocker. Let me in!', // If 1, adblock was detected. adblockDetected = 0, // If 1, BlockAdBlock will only nag the visitor once, rather than block access. nagMode = 0, // The blockadblock domain, reversed. bab_domain = 'moc.kcolbdakcolb';
bab_domain is set here to try to obfuscate the BlockAdBlock domain.
bab: bait ad creation
BlockAdBlock's central detection method is by creating “bait” ad elements, that look like real ads. It then checks if the adblocker blocked them.
A bait is created: a fake div pretending to be an ad, but hidden out of view.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
bab: function(check, passed_eid) { // Wait for the document to be ready. if (typeof document.body == 'undefined') { return }; var delay = '0.1', passed_eid = eid ? eid : 'banner_ad', bait = document.createElement('DIV'); bait.id = passed_eid; bait.style.position = 'absolute'; bait.style.left = '-999px'; bait.appendChild(document.createTextNode(' ')); document.body.appendChild(bait); ...
passed_eid is presumably to customise the id of the bait, but it's unused.
Afterwards, check if the bait was removed by the adblocker.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
... setTimeout(function() { if (bait) { check((bait.clientHeight == 0), delay); check((bait.clientWidth == 0), delay); check((bait.display == 'hidden'), delay); check((bait.visibility == 'none'), delay); check((bait.opacity == 0), delay); check((bait.left < 1000), delay); check((bait.top < 1000), delay) } else { check(true, delay) } }, 125) }
If the bait doesn't exist anymore, then the element was removed (and we trigger the overlay).
check will trigger if the predicate was true, and trigger arm.
1 2 3 4 5 6
check: function(checkPredicate, unused) { if ((checkPredicate) && (adblockDetected == 0)) { adblockDetected = 1; window['' + randomID + ''].arm() } else {} }
Because check triggers multiple times as seen above, adblockDetected is set on the first correct check, in order to avoid triggering arm multiple times.
Nag mode
BlockAdBlock has an feature called “nag mode”: in this mode, BlockAdBlock will only tell you to remove your adblocker once, instead of blocking you on each visit. It does so by setting a localStorage item after the first visit.
If we could set this for every, could we bypass BlockAdBlock forever? Unfortunately, BlockAdBlock checks beforehand if the script has been configured to nag mode, so this won't work for default usage, which is to block every time.
The start of arm, checking for nag mode.
1 2 3 4 5 6 7 8 9 10
arm: function() { if (nagMode == 1) { var babNag = sessionStorage.getItem('babn'); if (babNag > 0) { return true // Stop the script. } else { sessionStorage.setItem('babn', (Math.random() + 1) * 1000) } }; ...
nagMode is set by the customizer, and is 0 by default. :(
Blocking BlockAdBlock, version 1
Adblockers work by using what's called filters: lines of code that can block network requests and hide elements on the page. By creating “bait” elements, BlockAdBlock triggers these filters on purpose.
With this simple defense, BlockAdBlock works against all major adblockers, like uBlock Origin, AdBlock Plus and Ghostery. To counter against this, we must write our own filter that's active only on BlockAdBlock-enhanced websites.
Writing adblock filters is a bit tricky. The kind of filter we need is a content filter, which blocks elements on the page generated after download. Since the bait ad has an id of banner_ad, we create an element hiding exception, marked #@#, for all elements # with id banner_ad, and put it in our adblocker's custom filter list.
Putting it all together, we get:
Defeating BlockAdBlock, version 1.
1
localhost#@# #banner_ad
I've used localhost for demonstration, which you can replace with your URL.
This counters BlockAdBlock successfully. The solution may seem basic, but it got the job done for a long time in the Anti-AdBlock-Killer filter list.
Version 2 (November 2015 - January 2016): a few improvements
Bait ad creation: less bugs
There's a subtle bug in the first bait ad creation implementation above: the div that's created has no content, so it creates a 0 height by 0 width div. Later, the code checks if the div was removed if the height and width of the bait div was empty. But since the div had 0 height, BlockAdBlock would always trigger.4
Fixing the empty div bug.
1 2 3 4
bab: function(...) { bait = document.createElement('DIV'); ... bait.appendChild(document.createTextNode('Â '));
A child div is created, with some content.
Detection via fake image ads
In this method, we create a fake image with a random name on doubleclick.net. Adblockers will block the image, thinking it to be an ad's image. However, this requires no change to block in our filter.
Creating a fake image ad.
1 2 3 4
bab: function(...) { bait = document.createElement('DIV'); bait.innerHTML = '<img src="http://doubleclick.net/' + randomStr() + '.jpg">'; ...
randomStr() creates a random-length string.
The other notable difference is the use of a setInterval timer instead of just checking once if the trigger is set. It newly checks if the image ad still exists, and if its src attribute hasn't been modified, by checking the contents of the bait.
A new setInterval, and checking for the image's existence.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
... checkCallback = setInterval(function() { if (bait) { check((bait.clientHeight == 0), delay); check((bait.clientWidth == 0), delay); check((bait.display == 'hidden'), delay); check((bait.visibility == 'none'), delay); check((bait.opacity == 0), delay); try { check((document.getElementById('banner_ad').innerHTML.indexOf('click') == -1), delay) } catch (e) {} } else { check(true, delay) } }, 1000
Why indexof('click')? The image will look like this: src="doubleclick.net/abcdefg.jpg”, so we check if that substring still exists.
Version 3 (November 2015 - March 2016): generalized baiting
Bait ad creation: randomized IDs
The only change in this version, though a significant one, is the appearance of randomized IDs for the bait ad. A new ID is taken from a list of ad IDs at page load, and is used for the bait ad, now placed in the middle of the page.
The list of random bait IDs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
var baitIDs = [ "ad-left", "adBannerWrap", "ad-frame", "ad-header", "ad-img", "ad-inner", "ad-label", "ad-lb", "ad-footer", "ad-container", "ad-container-1", "ad-container-2", "Ad300x145", "Ad300x250", "Ad728x90", "AdArea", "AdFrame1", "AdFrame2", "AdFrame3", "AdFrame4", "AdLayer1", "AdLayer2", "Ads_google_01", "Ads_google_02", "Ads_google_03", "Ads_google_04", "DivAd", "DivAd1", "DivAd2", "DivAd3", "DivAdA", "DivAdB", "DivAdC", "AdImage", "AdDiv", "AdBox160", "AdContainer", "glinkswrapper", "adTeaser", "banner_ad", "adBanner", "adbanner", "adAd", "bannerad", " ad_box", " ad_channel", " adserver", " bannerid", "adslot", "popupad", "adsense", "google_ad", "outbrain-paid", "sponsored_link" ];
A long list that demonstrates significant domain knowledge.
Random ID generation.
1 2 3 4 5
randomBaitID = baitIDs[ Math.floor(Math.random() * baitIDs.length) ], ... var passed_eid = randomBaitID; bait = document.createElement('DIV'); bait.id = passed_eid;
As this runs on every load, the bait's ID will be different each time.
Blocking BlockAdBlock, version 3 to latest
BlockAdBlock uses the blind spot of adblockers: if the filter allows all the above IDs, then it also allows genuine ads to pass through. If you don't allow blocking the above IDs, then other filters which may use these IDs in their filters to target ads will not work anymore.
In a way, BlockAdBlock is forcing the adblocker to make itself useless.
In adblockers, we can run arbitrary JS before anything in the page runs. We could try to delete the BlockAdBlock object prematurely. But to do that, we need the name of the object BlockAdBlock is attached to, which is randomized each run, which would require running the code.
uBlock Origin took another approach. The code is ran by eval, so what if we could define our own eval function that would block execution if we detect BlockAdBlock? In JS the Proxy object can accomplish this: any property, affectation and method can be replaced for any object.
This could be bypassed by not evaling the initial BlockAdBlock payload and using it directly, so we also proxy the entrypoint: the setTimeout call. Since setTimeout is passed a string and not a function, we check the string.
Defeating BlockAdBlock in uBlock Origin (src).
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
const signatures = [ [ 'blockadblock' ], [ 'babasbm' ], [ /getItem\('babn'\)/ ], [ 'getElementById', 'String.fromCharCode', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'charAt', 'DOMContentLoaded', 'AdBlock', 'addEventListener', 'doScroll', 'fromCharCode', '<<2|r>>4', 'sessionStorage', 'clientWidth', 'localStorage', 'Math', 'random' ], ]; const check = function(s) { // check for signature };
A list of signatures: identifying patterns of the code. check checks an eval'd string against these patterns.
Proxying the eval and setTimeout functions.
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
window.eval = new Proxy(window.eval, { apply: function(target, thisArg, args) { const a = args[0]; if ( typeof a !== 'string' || !check(a) ) { return target.apply(thisArg, args); } // BAB detected: clean up. if ( document.body ) { document.body.style.removeProperty('visibility'); } let el = document.getElementById('babasbmsgx'); if ( el ) { el.parentNode.removeChild(el); } } }); window.setTimeout = new Proxy(window.setTimeout, { apply: function(target, thisArg, args) { const a = args[0]; // Check that the passed string is not the BAB entrypoint. if ( typeof a !== 'string' || /\.bab_elementid.$/.test(a) === false ) { return target.apply(thisArg, args); } } });
If we are executing BlockAdBlock, then clean up.
As we are now using a scriptlet, a custom piece of code ran by the adblocker, the filter changes slightly:
Defeating BlockAdBlock, all versions: the filter.
This doesn't run by default on every site, for performance reasons, so specify it for each site with the script.
Version 4 (January 2016 - April 2016): experimental features
The above detection method was made in January 2016, according to uBlock Origin commit history, and has not changed in concept since its inception. BlockAdBlock never tried to work around this filter after its creation, by changing its code architecture. Instead, it continued development with more features. And when we go over to the BlockAdBlock page, we see an interesting tab: “Need more anti-adblock power?".
Tumblr media
Although those defenses are only available in a special tab, they are included in all scripts and executed by fittingly-named variables. In version 4, two are implemented:
aDefOne, the “specific defense for AdSense sites”.
aDefTwo, the “special element defense”.
There's something I should mention before we go. When reversing this version, one function caught my eye: A debug console.log() that's used in the code!
1 2 3 4 5 6
function consolelog(e) { // "Dev mode" check: developpers of BAB must set window.consolelog to 1. if (window.consolelog == 1) { console.log(e) } };
This runs only if the global consolelog is set, like window.consolelog = 1.
These debug comments are only available in this version of the code. If I hadn't been reversing each version, I never would have caught it. These comments provide valuable information on how the code works.
Advanced defense: AdSense
All of these special defenses are put in check and not in arm, like the architecture would suggest. This would suggest a change of developer that was perhaps unfamiliar with the codebase.
If AdSense is active on the page, we check that the ads which are supposed to be there still exist. If they're gone because of the adblocker, then BlockAdBlock activates.
A clever defense: check if existing ads, created by AdSense, are gone.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
function check() { ... var q = 'ins.adsbygoogle', // Selects all Google ads in the document. adsbygoogleQuery = document.querySelector(q); if ((adsbygoogleQuery) && (adblockDetected == 0)) { // Ads are not blocked, since the bait ad is still there, // and adblockDetected hasn't been set if (aDefOne == 'yes') { consolelog('case2: standard bait says ads are NOT blocked.'); var adsbygoogle = '//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js'; if (scriptExists(adsbygoogle)) { consolelog('case2: And Adsense pre-exists.'); if (adsbygoogleQuery.innerHTML.replace(/\s/g, '').length == 0) { // The ad's content was cleared, so... consolelog('case2: Ads are blocked.'); window['' + randomID + ''].arm() } } }; adblockDetected = 1 } ...
scriptExists will check the entire page for a script with the given URL.
The scriptExists implementation looks for a given script within the page. In this case, it will detect the Adsense script if it exists.5
Compare the passed script URL against all scripts currently on the page.
1 2 3 4 5 6 7 8 9 10
function scriptExists(href) { if (href) href = href.substr(href.length - 15); var scripts = document.getElementsByTagName('script'); for (var i = scripts.length; i--;) { var src = String(scripts[i].src); if (src) src = src.substr(src.length - 15); if (src === href) return true }; return false };
Both the compared URL and all the script's URL's are trimmed to 15 characters, though I'm not sure why.
Advanced defense: Special element defense
This method, unlike the first one, has a disclaimer: “Please test after installation to ensure compatibility with your site." To contextualize where we are in the code, let's look at check:
This special defense only triggers if adblock wasn't detected and there is no AdSense script on the page.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
check: function(checkPredicate, unused) { if ((checkPredicate) && (adblockDetected == 0)) { // Adblocker detected, arm } else { var q = 'ins.adsbygoogle', adsbygoogleQuery = document.querySelector(q); if ((adsbygoogleQuery) && (adblockDetected == 0)) { if (aDefOne == 'yes') { // Special defense one: AdSense defense (see above) }; } else { if (adblockDetected == 0) { if (aDefTwo == 'yes') { // Special defense two: Special element defense } } } }
This method assumes that owners will only be using AdSense to serve ads on their page: if the AdSense script doesn't exist, there must be something wrong.
So why the disclaimer? This method tries to include the AdSense script. If it doens't load, it's likely the adblocker blocked the network request, so BlockAdBlock triggers. But this may mess up some web sites, hence the warning.
If we fail to load AdSense, trigger the overlay.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
if (aDefTwo == 'yes') { /* Add Google ad code to head. If it errors, the adblocker must have blocked the connection. */ var googleAdCode = '//static.doubleclick.net/instream/ad_status.js'; consolelog('case3: standard bait says ads are NOT blocked. Maybe ???\ No Adsense is found. Attempting to add Google ad code to head...'); var script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script.setAttribute('src', googleAdCode); script.onerror = function() { window['' + randomID + ''].arm() }; adblockDetected = 1; if (!scriptExists(googleAdCode)) { document.getElementsByTagName('head')[0].appendChild(script) }; adsbygoogleQuery = 0; window['' + randomID + ''].check = function() { return } }
onerror fires upon a failure on at network level, like an adblocker blocking the request.
And indeed, most adblockers fall for it and block the request. However, there's one adblocker that I haven't mentionned until this point. Let's talk about the Brave browser.
Brave Browser's answer to BlockAdBlock
Until now I've examined uBlock Origin's response against BlockAdBlock. And it works, but it needs a specific filter to be added for each site that has BlockAdBlock on it. Brave is impressive because it detects and circumvents BlockAdBlock directly on all versions, without any action needed. Although we can't learn how without a lot of effort, as Brave is closed source, we can examine how it counters the above defense if we look in DevTools.
Instead of blocking the ad_status.js request, it lets it through but loads a 0-byte fake Google Ads instead. This clever trick fools BlockAdBlock, because onerror fires only if the network request fails.
Tumblr media
Version 5 (March 2016 - November 2016)
Advanced defense: Favicon spam
The only change of note in this version is that the second advanced defense was rewritten, but still holds the same basic principle: try network requests that will be blocked by the adblocker. This time, however, it tries to load favicons instead of AdSense.
Brave evades this detection in the same was as above. It loads the images correctly, but creates fake 1x1 images.
Favicon spam. baitImages generates bait images, too.
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
if (aDefTwo == 'yes') { if (! window['' + randomID + ''].ranAlready) {/ var favicons = [ "//www.google.com/adsense/start/images/favicon.ico", "//www.gstatic.com/adx/doubleclick.ico", "//advertising.yahoo.com/favicon.ico", "//ads.twitter.com/favicon.ico", "//www.doubleclickbygoogle.com/favicon.ico" ], len = favicons.length, img = favicons[Math.floor(Math.random() * len)], ... baitImages(Math.floor(Math.random() * 2) + 1); // creates bait images var m = new Image(); m.onerror = function() { baitImages(Math.floor(Math.random() * 2) + 1); c.src = imgCopy; baitImages(Math.floor(Math.random() * 2) + 1) }; c.onerror = function() { adblockDetected = 1; baitImages(Math.floor(Math.random() * 3) + 1); window['' + randomID + ''].arm() }; m.src = img; baitImages(Math.floor(Math.random() * 3) + 1); window['' + randomID + ''].ranAlready = true }; }
baitImages may be called so frequently, with a different, random amount of images, to throw off adblockers who want to block statically.
Version 6 (April 2016 - November 2016): blocking Brave
So far BlockAdBlock's techniques, although simplistic at first, have grown in terms of complexity and detection rate. But there's still one enemy left unconquered: the Brave browser.
Advanced defense: Fake favicon detection
Why did BlockAdBlock switch from trying to load a script to an image (a favicon)? The answer is this code, which is put inside the “favicon spam” defense and activates if the Brave defense is active.
Detecting Brave Browser: check the response for a fake image.
1 2 3 4 5 6 7 8 9 10 11 12
if (aDefTwo == 'yes') { baitImages(Math.floor(Math.random() * 3) + 1); // earlier favicon code... var m = new Image(); if ((aDefThree % 3) == 0) { m.onload = function() { if ((m.width < 8) && (m.width > 0)) { window['' + randomID + ''].arm() } } }; }
Check the favicon's size. If it's less than 8x8, it was probably swapped out by Brave.
With this method, Brave is defeated, and other adblockers will be detected if they run the code (most, like uBlock Origin, outright block it in the first place.)
After this update, around the end of November 2016, BlockAdBlock disappeared from the web. Although their “advanced defense” techniques work, they were never enabled for the majority of users. This was their last update, and their last post on both Twitter and their site was sometimes in late 2017
However, the legacy BlockAdBlock left is significant. And even though it can be trivially blocked nowadays, I still see BlockAdBlock used in today's sites.
Conclusion
In the end, who will win the arms race between ad-blockers and ad-blockers-blockers? Only time can tell, but I think ad-blockers still have the advantage. As the arms race evolves, ad-blockers will have to use more and more contrived techniques and completely custom code, as watching BlockAdBlock's evolution over time hopefully shows.
On the other hand, blockers have the advantage of stable systems and powerful filtering tools via filter lists, and have access to JavaScript, too: with these systems, it only takes one person to figure out how to defeat the adblocker and update the filter list with new sites.
By analysing BlockAdBlock's evolution over time, as well as various ad blocker's responses, we managed to draw a picture of the small war between BlockAdBlock and ad blockers, and in the process learnt how ad-blockers-blockers block the ad-blockers.
You can find my reverse-engineering on GitHub. Thank you for reading.
If you want an intuition of how it works, try pasting the below example into a JS console and then look at the code. If you're interested in its inner workings, here's the source code. ↩︎
Don't believe me? Try changing eval to console.log in the first line of the above example and you might find something hidden&mldr; ↩︎
The timestamp says 201510, so shouldn't it be October? The reason for this is that we don't know when the script changed. All we know is:
On 2015-10, there was one version saved: 20151007203811.js.
On 2015-11, there was a new version: 20151113115955.js.
As far as we know, the script could have been changed the day before the second timestamp. As such, I err on the cautious side when timing the versions. ↩︎
The tests for v1, above, were made while fixing this bug in the v1 script. ↩︎
Thanks to McStroyer on Reddit for pointing this out. ↩︎
0 notes
petnews2day · 2 months
Text
Crufts 2024: Bozeat team qualifies for flyball quarter finals
New Post has been published on https://petn.ws/VXO9X
Crufts 2024: Bozeat team qualifies for flyball quarter finals
Image caption, The Northants Falcons Flyball team is gearing up for its quarter final at Crufts Article information Author, James Grant Role, BBC News, Northamptonshire 24 minutes ago A flyball team from Northamptonshire is preparing for its participation in next month’s Crufts. The Northants Falcons Flyball senior team, which trains at the Piggeries in Bozeat, […]
See full article at https://petn.ws/VXO9X #DogNews
0 notes
megamikethomson · 4 years
Text
Boxing Day Family Puzzler 2019
Tumblr media Tumblr media
It's time indeed for my Boxing Day Family Puzzler - a regular interruption now in its eleventh year. As ordinary perusers will know, this is where nobody is relied upon to know any of the appropriate responses.
The inquiries identify with occasions in the previous a year - and every one of the arrangements are numbers. This year, as an uncommon treat in these grieved occasions, I've included extra questions, raising the number from 20 to 23.
Tumblr media
Competitors should essentially utilize astuteness and judgment to come as near the correct figure as they can. Every player/group ought to record their suppositions before uncovering them.
One imprint for the nearest answer and three if unintentionally, or splendor, you get it spot on.
Good karma.
1) The British have a deplorable notoriety for not communicating in unknown dialects. In the past money related year, what amount did the Brexit office pay the EU Council for mediators?
2) The normal compensation for a male footballer in the Premier League is currently somewhat over £2.64m every year. What is the normal compensation for a player in the Women's Super League, as per investigation this year?
3) The legendary creature of the year is plainly the unicorn, rousing immense measures of single-horned product. Starting at 20 December, a quest for "unicorn" on the web based business website etsy.com created what number of various unicorn-motivated things?
4) The UK's late spring of 2018 was assigned the equivalent most sizzling on record. July was especially bright. How long and minutes of daylight did the UK appreciate on a normal July day this year?
Tumblr media
Picture copyright Getty Images
5) The Harry Potter wonder made by JK Rowling gives no indication of a let-up, with the new film, Fantastic Beasts: The Crimes of Grindelwald, discharged a month ago. It cost $200m (£158m) to make. What amount, in dollars, did it recover in the cinematic world in the initial 72 hours?
6) The quickest lap in Formula 1 history was set in 2004 at Monza by Juan Pablo Montoya… until this year. At a similar circuit, in September, 38-year-old Kimi Raikkonen astonished the engine dashing world by finishing a lap more rapidly than anybody ever. In miles every hour, what was the Finn's normal spe
7) US President Donald Trump's propensity to make statements that demonstrate not so much exact has driven the Washington Post to set up a reality checking administration. As per that site, what number of false proclamations did the president make upon the arrival of a Republican meeting in Houston, Texas, on 22 October
Tumblr media
8) The BBC spine chiller Bodyguard turned into the most watched show in TV history this year. What extent of individuals in the UK viewed probably some of it, as indicated by legitimate figures
Tumblr media
9) Every conceivable precautionary measure was taken to guarantee the Duke and Duchess of Sussex's wedding went easily. Police recognized 54 ladies whose fixation on the royals saw them delegated potential "stalkers". What number of men were comparatively recognized?
Tumblr media
10) The gaming impression of 2018 is the multiplayer shooter (and floss-artist) game Fortnite. A study of 1,000 players inquired as to whether they had ever played hooky or work to take part. What extent of understudies conceded they had missed exercises to pl
11) Welsh table tennis player Anna Hursey was the most youthful contender at the Commonwealth Games, on Australia's Gold Coast this year, at only 11. How old was the most established contender, a Canadian shooter?
Tumblr media
12) Despite worries about bar terminations, this year saw a record number of liquor licenses working in England and Wales. The committee with the biggest number of spots where you can purchase and drink alcohol ends up being Westminster. What number of spots?
Tumblr media
13) Following the Brexit vote, one kind of occupation has blasted - Whitehall government employees. By and large, what number of additional civil servant posts have been made in Westminster every week since the submission?
14) toward the beginning of March, swirling climate implied a fourth of UK vitality was being created by wind turbines. Crosswise over 2018, what number of homes do specialists ascertain are currently fueled by the breeze?
15) The chancellor declared an extra £400m for English schools in the Budget in October. What amount did he report for potholes?
Picture copyright Getty Images
16) There was dramatization at Crufts hound appear in Birmingham when a basic entitlements nonconformist was wrestled to the ground live on TV only seconds after whippet Collooney Tartan Tease was delegated best in appear. What number of canines vied for the top prize?
Tumblr media
17) Alongside the football World Cup in Russia this late spring, video gamers held their own virtual adaptation. The last of the Fifa eWorld Cup, held at London's O2 Arena, saw Mosaad Aldossary, from Saudi Arabia, secure the $250,000 (£198,000) top prize. As per the coordinators, what number of players partook in the challenge?
18) The normal assembly at a Church of England church on a Sunday has tumbled to only 28 individuals. However, it's an alternate story at Christmas. What number of individuals went to Anglican administrations in England on Christmas Eve and Christmas Day a year ago?
19) It's no customary container of whisky. What amount, in sterling, did a jug of 1926 Macallan Valerio Adami sell for in October?
20) Supplies of oat milk ran short this year, following a major ascent in individuals looking for options in contrast to dairy. As indicated by an administration review, what extent of 16-to 24-year-olds with a nourishment narrow mindedness state they have an unfriendly response to dairy animals' milk?
Tumblr media
21) The England football crew's first World Cup coordinate against Tunisia was viewed by 65.8% of TV watchers. What extent of watchers in Iceland viewed their nation's first World Cup game, against Argentina?
Tumblr media
22) On the second day of Christmas my genuine romance gave me two turtle birds. In any case, in the UK, they are an imperiled species. This year an administration report proposed a 98% fall in numbers since 1970. Assuming right, what number of rearing sets are left?
23) According to a study this year, the least expensive city to purchase a Christmas tree is Prague, where a six-footer costs about €11 (£9.92). What is the proportional cost of a tree in Dublin, in euros?
Answers at the base
1) £1,032,282
2) £26,752
3) 216,626
4) 7 hours and 44 minutes
5) $258.7m
6) 163.8
7) 83
8) 26%
9) 106
10) 35%
11) 79
12) 2,938
13) 40
14) 14.48 million
15) £420m
16) 20,822
17) 20 million
18) 2.68 million
19) £848,000
20) 46%
21) 99.6%
22) 2,500
23) €146
0 notes