Denuvo And Dodgy DRM

 This was the start of my problems - Denuvo on a Steam game failing
to activate when I clicked "Play" for the first time

DRM And Denuvo

Anyone who reads this blog regularly will know that I like games and I'm not a fan of DRM in any form (I even think copyright is often too restrictive). I’ve had bad experiences with DRM in the past – from not being able to play games or watch a film, to having to send a projector back. Often DRM creates backdoors and insecurities in your system. You may not notice these. I also like to be able to back up my games in case the company goes bankrupt or disappears or just stops supporting the game. DRM such as Denuvo prevents games from being run on Linux. Finally, I turn off the router when we lock up at night. Sometimes I still play games or use my PC. Things which require periodic online connections then stop working. There are other reasons. It's why I go out of my way to support DRM-free games and their publishers (you should see my list of games on GOG!) while avoiding games with DRM. So adding DRM costs publishers sales, and costs them extra money in ongoing licences and support. It’s not automatically true that digital padlocks = more profit.

I thought I'd mention an experience I had recently with Denuvo DRM, since when I ran into problems I couldn't find useful help online. In fact, one source told me: "Sounds kinda fishy. More like malware on your system." So even the normal behaviour of Denuvo when it kicks in resembles malware to some users. That's rather telling. Yet it’s what happens if the game can’t connect to their servers when it wants to (something you have no control over). Because there was so little documentation of what happens I thought I'd write this. If you end up in the same position as me then this might at least explain what is going on.

My Experience With Denuvo In The Resident Evil 7 Demo

It began when I heard about a free Resident Evil 7 demo on Steam. I've always been a fan of Resident Evil games, so thought I would try the demo out and see what the new game was like. I've avoided ever buying a Denuvo game. I only bought Doom 4 recently because they've now stripped Denuvo out of it. But I saw this demo included Denuvo and thought "What the hell, it's free, how bad can it be?"

Getting to play it was a nightmare.

"What's this?" I wondered, as I followed the game's link

I managed to download the game, but when I first went to play it I was having Internet problems. So instead of running it popped up a box with hundreds of random characters in that I was supposed to paste into a "" web page. Of course, I couldn't access that web page on my PC because my Internet connection was down. I could maybe use mobile Internet on my phone, but there was no way I could type in all those random characters and symbols, to get another page of hundreds of random characters I'd then have to type on my PC (presuming that would work). I used my phone to try and find out what this thing is - nowhere does it mention DRM or Denuvo, it was later that I realised that's what it was, but they try and hide the fact from you. You can't even truncate the URL to get to a homepage - it gives no information at all.

The Denuvo codefusion pages if you don't let them
run scripts in your browser - not very helpful ...

Days later I got the router and Internet problems sorted. When I eventually got to the web pages they were blank. Yet more hassles until I worked out that it was trying to run some scripts that were rightly blocked by my browser as security risks. I had to enable those. Then the button to get the code I needed didn't work due to Adobe flash errors, and requests to install new versions of that. Lots of time was wasted along the way. I eventually got it working. All that just to play a demo. Needless to say, the experience left me bitter, and it negatively affected my enjoyment of the demo.

It would not be easy to type all that in by hand.
Note that the button to copy the text didn't even work
without updating third party software

Never Again, Denuvo, Never Again

There is no way I'd ever pay for a game with Denuvo in. So much wasted time and hoops to jump through if you have this kind of problem.

Anyway, these are examples of the pages Denuvo sends you to: one, two, three, four. Beware the hassles of any URL which contains

I'm surprised gaming sites haven't written more about Denuvo and how it works, and what problems it can cause, since it seems to be used a lot more now. Maybe because it's one of those things where - if there are no problems - you don't notice it and assume it is fine. But as soon as you hit a snag (e.g. Internet access problem) it becomes a massive headache. My first experience of Denuvo will be the last.

Update: 30th January 2017
It turned out that Denuvo on the full Resident Evil 7 game was cracked in less than a week: so it made little difference to pirates, while putting off people who would otherwise have bought it (such as me). Read more here, here, and here.

Update: 14th October 2017
It turned out that the game Abz├╗ also included the (presumably) Denuvo DRM. There was no warning on the Steam page or I'd have never bought the pile of crud. My refund request was refused even though the game I'd bought wouldn't work. The publisher and Steam should always list when games have intrusive activation DRM - if the Steam store labelled the Denuvo games consistently this wouldn't have happened. The only way to be sure is to get games from GOG instead of Steam, wherever possible.

Gabe Newell had said Steam Support would improve - but it hasn't. This menu is a good example. It contains a limited number of options, none of which were the one I wanted to report, and no option for "Other" or "Contact Steam". So you have to click an option that isn't the correct one, and hope it provides a way to contact Steam. Often it is a dead end. Sometimes you are lucky and find a link to send Steam a message - but then the request is flagged as the wrong issue and gets deleted by Steam. Or you go in circles through all their menu options, that keep looping back to the first one again in a frustrating manner. If you try to contact Steam through other means, such as Twitter, you get ignored. It is one of the worst support systems I have ever encountered, and that's saying something. It could be easily fixed by just providing an email address, or generic contact form.


2016 Bram Stoker Awards Preliminary Ballot Announced

The Horror Writers Association (HWA) is the main organisation for authors writing in the horror and dark fiction genres. The HWA have run the hugely prestigious Bram Stoker Awards in various categories since 1987.

Yesterday the HWA announced the Preliminary Ballots for the 2016 Bram Stoker Awards. It's an exciting list. And ... one of my works, Harvest Festival, is included in the category of "Superior Achievement in Long Fiction"! THE Bram Stoker Awards! THE BRAM STOKER AWARDS!!!

(Long Fiction is works such as novellas - shorter than a novel, longer than a short story.)

Past winners of Bram Stoker Awards have included Stephen King, Clive Barker, Ray Bradbury, Thomas Harris, Richard Laymon, George A. Romero, and J. K. Rowling. Have a look and add items to your TBR lists!

Some past winners and nominees from my category specifically (Long Fiction): Neil Gaiman, George R. R. Martin, Peter Straub, Stephen King, Ramsey Campbell, Robert Bloch ...

It's the biggest thing to happen to me in my writing career.

I'll share the full 2016 Bram Stoker Awards Preliminary Ballot list below because I'm sure every entry on it will be a great read, and I intend to buy and read many of the books from it. It's a ready-made reading list from 2016 for fans of dark fiction. Please support the writing of all the authors who have been included in the preliminary ballot.

If you want to know what happens next: lots of voting in the HWA. Then on February 23rd they will announce the nominees. Please keep your fingers crossed for me, this would be huge! You can also play the start of my novella.

Superior Achievement in Long Fiction

  • Anderson, Paul Michael – Bones Are Made to be Broken (Bones Are Made to be Broken) (Written Backwards)
  • Boden, John – Jedi Summer with the Magnetic Kid (Post Mortem Press)
  • Cushing, Aric – Vampire Boy (Grand & Archer)
  • Cushing, Nicole – The Sadist’s Bible (01Publishing)
  • Drinkwater, Karl – Harvest Festival (Organic Apocalypse)
  • Edelman, Scott – That Perilous Stuff (Chiral Mad 3) (Written Backwards)
  • LaValle, Victor – The Ballad of Black Tom (
  • Malerman, Josh – The Jupiter Drop (You, Human) (Written Backwards)
  • Matthews, Mark – All Smoke Rises: Milk-Blood Redux (Wicked Run Press)
  • Shane, Simmons – Raw (Silent Screams: An Anthology of Socially Conscious Dark Fiction) (Serpent & Dove Speculative Fiction)
  • Waggoner, Tim – The Winter Box (Darkfuse)

Superior Achievement in a Novel

  • Fenn, J. Lincoln – Dead Souls (Gallery Books)
  • Hand, Elizabeth – Hard Light: A Cass Neary Crime Novel (Minotaur Books)
  • Heuvelt, Thomas Olde – Hex (Tor Books)
  • Jones, Stephen Graham – Mongrels (William Morrow)
  • Langan, John – The Fisherman (Word Horde)
  • Lombardi, Nicola – The Tank (Dunwich Edizioni)
  • MacLeod, Bracken – Stranded: A Novel (Tor Books)
  • Murray, Lee – Into the Mist (Cohesion Press)
  • Prentiss, Norman– Odd Adventures with your Other Father (Kindle Press)
  • Snyman, Monique – Muti Nation (Omnium Gatherum Media)
  • Tremblay, Paul – Disappearance at Devil’s Rock (William Morrow)

Superior Achievement in a First Novel

  • Barnett, Barbara – The Apothecary’s Curse (Pyr Books)
  • Chapman, Greg – Hollow House (Omnium Gatherum Media)
  • Deady, Tom – Haven (Cemetery Dance Publications)
  • Franks, Matthew – The Monster Underneath (Samhain Publishing, Ltd.)
  • Garza, Michelle and Lason, Melissa – Mayan Blue (Sinister Grin Press)
  • Gorman, William – Blackwater Val (Crystal Lake Publishing)
  • Kilgore, Kari – Until Death (Spiral Publishing)
  • Labat, L.M. – The Sanguinarian ID (Night to Dawn Magazine & Books LLC)
  • Lewis, Beth – The Wolf Road (Crown Publishing)
  • Murphy, Jason – The Black Goat Motorcycle Club (Sinister Grin Press)
  • Woodrow, Jonathan – Wasteland Gods (Horrific Tales Publishing)
  • Wytovich, Stephanie – The Eighth (Dark Regions Press)

Superior Achievement in a Young Adult Novel

  • Alexander, Maria – Snowed (Raw Dog Screaming Press)
  • Brozek, Jennifer – Last Days of Salton Academy (Ragnarok Publishing)
  • Cosimano, Elle – Holding Smoke (Hyperion-Disney)
  • Ford, Michael Thomas – Lily (Lethe Press)
  • Kelley, Michael Brent – Keep Away From Psycho Joe (Omnium Gatherum Media)
  • Roberts, Jeyn – When They Fade (Knopf Books for Young Readers)
  • Sirowy, Alexandra – The Telling (Simon & Schuster Books for Young Readers)
  • Varley, Dax – Sinful: A Bleed Novel (Garden Gate Press)

Superior Achievement in a Graphic Novel

  • Bunn, Cullen – Blood Feud (Oni Press)
  • Chambers, James – Kolchak the Night Stalker: The Forgotten Lore of Edgar Allan Poe (Moonstone)
  • de Campi, Alex – No Mercy, Vol. 2 (Image Comics)
  • Miller, Mark Alan and Lansdale, Joe R. – The Steam Man (Dark Horse Books)
  • Moore, Alan – Providence, Act 1 (Avatar Press)
  • Quach, Ashley P – Weirdy (Sassquach Comics)
  • Kirkman, Robert – Outcast, Vol 3 This Little Light (Image Comics)

Superior Achievement in Short Fiction

  • Bailey, Michael – Time is a Face on the Water (Borderlands 6) (Borderlands Press)
  • Bodner, Hal – A Rift in Reflection (Chiral Mad 3) (Written Backwards)
  • Golden, Christopher – The Bad Hour (What the #@&% is That?) (Saga Press)
  • Hanson, Michael H. – Conqueror Worms (Dark Corners) (Iron Clad Press)
  • Hucklebridge, Dane – Ortolan (F(r)iction #5) (Tethered by Letters)
  • Kiste, Gwendolyn – Reasons I Hate My Big Sister (Nightscript Volume 2) (Chthonic Matter)
  • Mannetti, Lisa – Arbeit Macht Frei (Gutted: Beautiful Horror Stories) (Crystal Lake Publishing)
  • Manzetti, Alessandro – Long Hair’s Inferno (The Monster, the Bad, and the Ugly) (Kipple Officina Libraria)
  • Oates, Joyce Carol – The Crawl Space (Ellery Queen Mystery Magazine Volume #2016/Issue#8) (Dell Magazines)
  • Smith, John Claude – The Wounded Table (The Wrath of Concrete and Steel) (Dunhams Manor Press)
  • Yap, Isabel – Only Unclench Your Hand (What the #@&% is That?) (Saga Press)

Superior Achievement in a Fiction Collection

  • Barron, Laird – Swift to Chase (JournalStone)
  • Braum, Daniel – The Night Marchers and Other Strange Tales (Grey Matter Press)
  • Chizmar, Richard – A Long December (Subterranean Press)
  • Gavin, Richard – Sylvan Dread: Tales of Pastoral Darkness (Three Hands Press)
  • Oates, Joyce Carol – The Doll-Master and Other Tales of Terror (Mysterious Press)
  • O’Neill, Gene – Lethal Birds (Omnium Gatherum Media)
  • Schaller, Eric – Meet Me in the Middle of the Air (Undertow Publications)
  • Schwaeble, Hank – American Nocturne (Cohesion Press)
  • Sutton, Pete – A Tiding of Magpies (Kensington Gore Publishing)
  • Wehunt, Michael – Greener Pastures (Shock Totem Publications)

Superior Achievement in a Screenplay

  • Alvarez, Fede and Sayagues, Rodo – DON’T BREATHE (Ghost House Pictures, Good Universe)
  • Campbell, Josh, Chazelle, Damien, and Stuecken, Matthew – 10 CLOVERFIELD LANE (Paramount Pictures)
  • Catlin, Sam, Rogen, Seth, and Goldberg, Evan – PREACHER: PILOT (Episode1:0) (AMC)
  • Duffer, Matt and Duffer, Ross – STRANGER THINGS: THE VANISHING OF WILL BYERS (Episode 01: Chapter One) (21 Laps Entertainment, Monkey Massacre)
  • Duffer, Matt and Duffer, Ross – STRANGER THINGS: THE UPSIDE DOWN (Episode 01: Chapter Eight) (21 Laps Entertainment, Monkey Massacre)
  • Eggers, Robert – THE VVITCH (Parts and Labor, RT Features, Rooks Nest Entertainment, Code Red Productions, Scythia Films, Maiden Voyage Pictures, Mott Street Pictures, Pulse Films, and Very Special Projects)
  • Gimple, Scott M. – THE WALKING DEAD: THE DAY WILL COME WHEN YOU WON’T BE (Episode 07:01) (AMC)
  • Hayes, Carey, Hayes, Chad, Wan, James and Johnson, David – THE CONJURING 2 (New Line Cinema)
  • Logan, John – PENNY DREADFUL: A BLADE OF GRASS (Episode 03:04) Showtime Presents in association with SKY, Desert Wolf Productions, Neal Street Productions)
  • Nichols, Jeff – MIDNIGHT SPECIAL (Warner Bros.)

Superior Achievement in an Anthology

  • Bailey, Michael – Chiral Mad 3 (Written Backwards)
  • Bennett, T.C. and Carbone, Tracy L. – Cemetery Riots (Awol From Elysium Press)
  • Dabrowski, Lisa – Horror from the Inside Out (Whorror House)
  • Johnson, Eugene and Day, Charles – Drive-In Creature Feature (Evil Jester Press)
  • Kahle, Pete – Not Your Average Monster, Vol. 2: A Menagerie of Vile Beasts (Bloodshot Books)
  • Manzetti, Alessandro – The Beauty of Death (Independent Legions Publishing)
  • Manzetti, Alessandro and di Orazio, Paolo – The Monster, the Bad and the Ugly (Kipple Officina Libraria)
  • Monteleone, Thomas F. and Monteleone, Oliva F. – Borderlands 6 (Samhain Publishing, Ltd.)
  • Mosiman, Billie Sue – Fright Mare-Women Write Horror (DM Publishing)
  • Murano, Doug and Ward, D. Alexander – Gutted: Beautiful Horror Stories (Crystal Lake Publishing)
  • Rivera, Anthony and Lawson, Sharon – Peel Back the Skin (Grey Matter Press)

Superior Achievement in Non-Fiction

  • Braudy, Leo. Haunted: On Ghosts, Witches, Vampires, Zombies and Other Monsters of the Natural and Supernatural (Yale University Press)
  • Franklin, Ruth – Shirley Jackson: A Rather Haunted Life (Liveright Publishing Corporation)
  • Ocker, J.W. A Season with the Witch (Countryman Press)
  • Olson, Danel P. – Guillermo del Toro’s “The Devil’s Backbone” and “Pan’s Labyrinth”: Studies in the Horror Film (Centipede Press)
  • Poole, W. Scott. In the Mountains of Madness: The Life, Death and Extraordinary Afterlife of H. P. Lovecraft (Soft Skull Press)
  • Skal, David J. – Something in the Blood: The Untold Story of Bram Stoker, the Man Who Wrote
  • Dracula (Liveright Publishing Corporation)
  • Tibbetts, John. The Gothic Worlds of Peter Straub (McFarland)
  • Towlson, Jon. The Turn to Gruesomeness in American Horror Films, 1931-1936 (McFarland)

Superior Achievement in a Poetry Collection

  • Betts, Matt – Underwater Fistfight (Raw Dog Screaming Press)
  • Boston, Bruce and Manzetti, Alessandro – Sacrificial Nights (Kipple Officina Libraria)
  • Collings, Michael R. – Corona Obscura: Poems Dark and Elemental (self-published)
  • Cowen, David E. – The Seven Yards of Sorrow (Weasel Press)
  • DiLouie, Craig and Moon, Jonathan – Children of God: Poems, Dreams, and Nightmares from the Family of God Cult (ZING Communications, Inc., Jonathan Moon.)
  • Gailey, Jeannine Hall – Field Guide to the End of the World: Poems (Moon City Press)
  • Lepovetsky, Lisa – Voices from Empty Rooms (Alban Lake)
  • Lopez III, Aurelio Rico – Two Drinks Away from Chaos (Azoth Khem Publishing)
  • Simon, Marge. – Small Spirits (Midnight Town Media)
  • Wytovich, Stephanie M. – Brothel (Raw Dog Screaming Press)

Some great stuff there!


Who Determines What A Word Means?

The image is my response to reading about another politician who wants to use the law to change how people use words. Their underlying reasons are to benefit one industry over another, usually the industry that they feel will provide the most votes or donations.

Poor old soya milk (as the world refers to it, regardless of what politicians dictate).

For anyone using text reader software, here's the text from the image:


Words, eh? Politicians with vested interests say the word "milk" should only apply to dairy milk.

The OED's definition 2 of milk as plant-based is over 600 years old. That's authority.

Dairy milk is one type of milk; plant milk another. Simple. Let's just always add a prefix to "milk" to clarify it.
Dairy milk. Oat milk. Coconut milk. Soya milk. Almond milk.
All clear then. Everyone is happy.

Unfortunately we already had a similar persecution in Europe, where they banned calling it soya milk (Council Regulation 1234/2007), which is why it is now labelled "soya drink" on the carton, even though everyone calls it soya milk.


Update, January 2020:

Someone recently criticised Stephen Fry for saying he used oat milk in his coffee. The critical idiot said "oat milk isn't milk".

Stephen Fry responded with "and peanut butter isn't butter, quince cheese isn't cheese, cream of coconut isn't cream ... try as dairy farmers might, history and the nature of language development will decide."

When they complained that you can't "milk an oat", Stephen Fry added:

"If you can milk an audience for applause and if you can milk a topic for discussion for all it's worth, then I reckon you can milk an oat. You can happily carry a meaning across different frames of reference and spheres of activity. The Greek for carrying across is 'metaphor' ..."

Yay to Stephen Fry!

Also file under: Head Cheese, Sweetbreads, Black Pudding, Hot Dog, Sea Cucumber, Rocky Mountain Oysters, Bombay Duck.


Research Places At A Distance

I was asked, "Is it possible to research location details accurately and convincingly without having been there?"

To a degree, yes. It's obviously best if you can go (Manchester! Manchester!), but if that isn't possible then you use all the resources available: maps, books, blogs, first-hand accounts, Google street view. Go to a place like it (a similar town, a similar terrain). Finally, add your imagination. Then you realise there is another step that is the proper final one: get someone who's been there (or lives there) to check what you've written.

When I wrote a story set in Myanmar, I sought feedback from residents as to the language, places etc. I did the same with Scotland (for a story written in Scots), and for a story set in the US. This kind of feedback from natives is the safety net that gives us licence to run wild in the draft.

Remember that setting can be character, and places can drive plot, but don't fill a story with everything you've learned just for the sake of it. You are aiming at a delicate flavour, so don't tip the contents of all your spice and herb jars into a single pot.


13 Tips For Writers

I often do editing work. These thoughts evolved out of some recent commissions. Note that with anything artistic, there are going to be cases where the rule should be broken, but it should always be intentional and for a reason, not just because of bad habits.
  • Openings checklist. Does it establish the scene and the characters? Does it set up some mystery and potential for the future?
  • Don't use unnecessary words. Writers don't need to cover every transition, to telegraph every action. Let the reader do some work. Remember this if you have a habit of describing every time a character walks across the room, or that they "went down the stairs and left the building": that's often unnecessary stage direction. The change of scene to an outside one often makes it inherently clear that the character went outside.
  • Never miss chances to show rather than tell. "She walked quite fast." Avoid "quite" and weak adjectives in general. They add nothing. Even better, tell us how someone walks by showing us, rather than telling us. Did her arms swing like she was marching? Did she look down as she barged past people? Did the other pedestrians blur by because of the pace she set? Another example: "A pretty woman walked in." Bear in mind that "pretty" can be a weak word. In what way is she pretty? What was so attractive about her in the character's eyes? Show us, don't tell us; then we'll feel it ourselves.
  • Don't use unnecessary words. Again. Don't say something then have another sentence where you rephrase it. Nine out of ten times it isn't something worth that level of repetition. Every unnecessary word added just waters a story down.
  • Avoid infodumps. Especially near the start. There's always a better way.
  • Make settings live. Give readers non-cliched details of the places where scenes are set, so that they stand out from each other and come alive. If the story is set in Paris then make us feel like we are in Paris.
  • Unintentional comedy. "The dark chocolates were so rich they made my spine quiver." Did they really? I like chocolate, but haven't experienced that. Beware of unintentional hyperbole that might lead to bathos. No problem if it is a comedy piece, but not if it is meant to be serious. Remember the tone.
  • Real voices. When you're creating a character's voice, or viewing from their perspective, give it some life! Combine action and sentiment with punchy, living rhythm. It's okay for a character to talk and think as people actually speak. Too many stories are written as if Dickens was checking over the author's shoulder.
  • Don't miss an opportunity to surprise the reader with a twist or a question or a hint of mystery. I don't mean you should add them for no reason, but sometimes a beginning writer includes an element that makes the reader prick up their ears - then does nothing with it.
  • Make words work. Short fiction makes every word and image important, so if either of them can do double duty, and work harder, it helps make the whole stronger and more unified. Think about your imagery and the relationships between words.
  • Don't use unnecessary words. Yet again. "He laughed out loud." You don't need "out loud": unless otherwise stated, the reader will assume it was out loud. Only add stage direction when it goes against expectation. Likewise "She tilted her head a bit" - do we need "a bit"? I wouldn't assume it was a 90 degree snapping action without that. Both are examples of cutting unnecessary words. 
  • Capitalising roles. "Howdy, I'm a Bank Manager." No need to capitalise general jobs. Someone is a teacher, a chef, an accountant.
  • Endings are often the hardest parts to write, but also the best chance to one-two the reader and leave them dazed but somehow loving it.
Just in case you wonder: any quoted sentences above were just ones I made up for illustrative purposes.


My 30 Best Blog Posts Of 2016

You can be a pirate too

Retrospective time! I've browsed last year's posts and picked out my favourites to create a list of my 30 Best Blog Posts Of 2016. How many of them did you read?

PS At the end I'll list some posts that are specifically for writers.

PPS You can find last year's summary - Best Posts Of 2015 - here.

  • Words For Cats - my cat wrote a book
  • Green - I complain a lot because nature should be protected

My Best Posts Of 2016 For Writers

I put these in a separate section so they don't scare normal people:


Watch The Dawn Yonder, Grow Fonder, And Ponder

7.22am. Not drunk my tea yet.

I am not a morning person. It is a shock to the system if I have to crack my eyes apart at some ungodly hour to do something as frivolous as watching the dawn. I first did it two years ago. Oops, I did it again. (I know, I know, but I've always wanted to say that in a blog post).

21st December 2016, I made my flask of tea and tucked a hot water bottle into my coat and sat in a cemetery on top of a hill, watching the ghoulies go back to bed in readiness for a new day, new thoughts, and new yawns. Here, you can join me on this journey in a truncated form.

7.21am. I have no idea what the lights behind me are. I suspect supernatural occurrences, but I'd shut my eyes for a minute and missed them. Hey, this is just like Paranormal Activity or something, only more boring and mostly consisting of me waffling on. Cool.



7.42am. It begins.




8.15am. About the same.

8.28am. That's as sunny as it gets where I live.

Liminal times are times for thought and consideration, times where the potential for change presents itself, times for growth and renewal. May all your dreams come true in 2017. (Unless your dreams involve nasty stuff, in which case I take it back).


Buy My Books

Amazon Kobo Nook / Barnes & Noble Apple Books

Popular Posts

Blog Archive