Planet Exherbo

September 14, 2021

Wulf C. Krueger

Such a Fun Age, by Kiley Reid

Such a Fun Age by Kiley Reid

My rating: 3 of 5 stars


Well, this was a light read, indeed. The pages flew by and I felt entertained but, sadly, on a very, very shallow level despite the topics of racism, privilege and “class” differences. After a rushed ending, it feels like the author simply bit off too much for her debut novel.

Emira, our black protagonist, came across as devoid of any ambition, drifting mostly with the flow. She works for white influencer Alix Chamberlain and her husband, Peter. Yes, she loves her charge, young Briar – Alix’ and Peter’s first child – but even with Briar, Emira mostly remains strangely indifferent.

Alix’ and Emira’s girlfriends are also rather nebulous figures who seem to merely exist as inconsequential side-kicks of the respective protagonist. They could have taken clearer roles in this novel but as it is, they remain “filling” material and mostly merely reflect their friend.

The self-deceiving schemer Alix is written to be annoyingly over-the-top: While her actions still remain this side of plausibility, her motivations and justifications are way beyond – her “ruined” senior year is sixteen years in the past.

In Alix’ self-perception she would long have risen above Kelley Copeland: a career, a merry band of adoring and cheering girlfriends at her beck and call, a very white husband, two children (one of whom she likes…) – in Alix’ bubble that would allow her to just write a Kelley Copeland gracefully off.

All in all, “Such a Fun Age” was an amusing read but it’s leaving a rather bland taste because from all the ambitious topics nothing is truly looked into and, thus, the real issues remain unresolved.

Three out of five stars.




View all my reviews

by Wulf at September 14, 2021 04:57 PM

September 08, 2021

Wulf C. Krueger

Oystercatcher (Bruno, Chief of Police #12.5), by Martin Walker

Oystercatcher by Martin Walker

My rating: 1 of 5 stars


This completely forgettable shortstory has Bruno in it but he’s not even near his beloved Perigord. He’s out to catch oyster thieves and for some bizarre reason Isabelle actively engages in this tiniest possible case as well.

Just skip this. I only read it for completeness’ sake.

One star because there are words in this.







View all my reviews

by Wulf at September 08, 2021 09:06 PM

The Four Winds, by Kristin Hannah

The Four Winds by Kristin Hannah

My rating: 5 of 5 stars


I had finished a nice-enough book and was looking for the next good read. My wife chose from my list for me and picked this one. She chose well.

»Books had always been her solace; novels gave her the space to be bold, brave, beautiful, if only in her own imagination.«

This book drew me in, chewed me up and spit me out.

If a book really “speaks” to me, I step into it. I stop being a reader and become a silent, helpless bystander, a powerless observer.
Give me a book that’s well-written, serious and empathetic and I’m in trouble.

Elsa lives in Texas during the Great Depression. Cast out by her own parents for “dishonoring” them (by conceiving a child without being married), she is forced to marry her child’s father and live on his family’s farm.

»Elsa had discovered within herself a nearly bottomless capacity for love.«

Against everyone’s expectations – hers not the least – she not only settles in but learns to love her new life. Until the circumstances force her to flee – with now two children and without the father who has left the family – to an uncertain future in California.

»I see one-third of a nation ill-housed, ill-clad, ill-nourished.… The test of our progress is not whether we add more to the abundance of those who have much; it is whether we provide enough for those who have too little. —FRANKLIN D. ROOSEVELT«

We witness how Elsa, her parents-in-law (whom she comes to love more than her birth parents) and her children struggle. This book breathes life into history; almost a hundred years later it makes you see and feel how harsh life must have been.

»A fifty-foot zigzagging crevasse opened in the yard. Dead roots stuck out from the crumbling dirt sides like skeletal hands.«

In fact, the entire first quarter of the book was outright painful for me. Almost overwhelmingly so. “The Four Winds” is so carefully, almost tenderly written, that Elsa’s emotions, her pain, actually reached me. I felt those emotions and the experience was stunning. Especially when things turned from bleak to worse.

I wanted to quit, to drop this book, to get away from all that and just before actually quitting things at least changed. No god, no fate, no destiny, not a light at the end of the tunnel but there is a certain turning point when things start growing instead of declining.

That’s when I realised those horrifying 25 percent had actually been worth it. There is no simple happily-ever-after for anyone in this book. There’s simply no room for that but what we do get – in spite of a somewhat open ending – is closure.

All the terror and horror we’ve witnessed; deep poverty, catastrophe, death, all kinds of loss, it’s all worth it in the end. Elsa lives life as well as she manages to and rises far beyond her own expectations. Having been an observer of that was very, very exhausting but I still feel deeply affected and grateful for the unique experience.


Kristin Hannah whose “The Nightingale” I loved and whose “The Great Alone” was a great book has managed to write an instant classic. A unique masterpiece that lets you not only experience the Great Depression Era but allows you to draw your own conclusions with respect to even modern economic systems…

And even if you – like me originally – don’t care about the Great Depression (it’s long gone, isn’t it?); this book is worth reading on many levels.

»Courage is fear you ignore.«

“The Four Winds” is easily 2021’s best book and has more than earned its place among my favourite books of all time.

Thank you, Kristin Hannah, for being a literary force of nature.





View all my reviews

by Wulf at September 08, 2021 02:33 PM

September 02, 2021

Wulf C. Krueger

The Coldest Case (Bruno, Chief of Police #14), by Martin Walker

The Coldest Case by Martin Walker

My rating: 4 of 5 stars


It was with great hesitation that I started reading this fourteenth Bruno novel. Instalments twelve and thirteen weren’t very interesting to read – both books felt like Walker was trying to press the most absurd political issues into a nice mystery series.

Bruno also acted often pretty much out of character, making severe mistakes, mistreating people – it read like Bruno wasn’t being himself.
The cooking Bruno has always done was completely over-represented – you could literally have used all those pages as a verbatim recipe.

In “The Coldest Case”, though, this is all gone! Bruno has a pretty good idea on how to freshly approach the unsolved murder of an unidentified victim decades ago and, as in earlier books in the series, this evolves into a believable, plausible plot that properly thickens, is well-paced and encompasses everything (and everyone!) we love about Bruno, Chief of Police!

The cooking, for example, is still there but it doesn’t fill tens of pages but fits naturally into the story. Gone is the overbearing, meticulous, pedantic description on how every little thing is done but we do get to know how Bruno prepares his first vegan dinner.

Everyone – the Baron, Gilles, Fabiola, Pamela, Jack – they’re all in this book once more and play their individual role. Yes, Isabelle is back, too, but she only plays a minor role and the drama is gone. Both Bruno and she seem to have somewhat moved on with their lives even though they still are fond of each other…

Walker had some very nice, original and amusing ideas and he’s back in full creative force. His writing feels rejuvenated and it features a lightness that was missing from the previous two books.

If you like Bruno, go on and get this one and just pretend that 14 immediately succeeds 11. Fourteen literally trebuchets Bruno back into my good graces!

Four out of five stars.




View all my reviews

by Wulf at September 02, 2021 04:40 PM

August 24, 2021

Wulf C. Krueger

The Atlas of Middle-Earth, by Karen Wynn Fonstad

The Atlas of Middle-Earth by Karen Wynn Fonstad

My rating: 5 of 5 stars


During my recent re-read of “The Hobbit, or There and Back Again” I remembered that years ago I had bought this “atlas” in order to immerse myself even more fully into Tolkien’s world and to provide my children with maps to the adventures I was reading to them at the time.

In this atlas, you’ll find brilliant maps in two colours that are in all aspects very fitting to their source material. You’ll find the maps sorted by ages as well as regional maps, e. g. The Shire, as well as maps relating to the books and, last but not least, thematic maps, e. g. landforms, climate, vegetation and population.

It shows that the author is an actual cartographer because Fonstad’s maps feel real – like they were made by observance and not by obviously extensive research.

The Atlas of Middle-Earth” is an amazing feat and every Tolkien enthusiast should own a copy!

Five out of five stars.





View all my reviews

by Wulf at August 24, 2021 03:19 PM

The Hobbit, by J.R.R. Tolkien

The Hobbit by J.R.R. Tolkien

My rating: 5 of 5 stars


What’s left to be written about “The Hobbit, or There and Back Again”, one of the great masterpieces of classic fantasy, written by the “founding father” of high fantasy, J.R.R. Tolkien?

“The Hobbit” was lauded by Tolkien’s friend and fellow author C. S. Lewis, by poet W. H. Auden, celebrated for its influence on the entire fantasy genre.

To me, it was the metaphorical door to new worlds… I own both several physical copies as well as several ebook editions. I have read “The Hobbit” in both English and German.

The one edition I value the most is a German paperback by “DTV” from November 1974 with the title (mis-)translated as “Der kleine Hobbit” (“The Little Hobbit”).
It has a ridiculous cover featuring a squint-eyed Smaug with butterfly wings and a tiny spider in front of him.

Weird seventies cover

It’s probably the worst cover in “The Hobbit”’s publication history.

This very book, though, is the one my mother read about 35 years ago while we were on holidays in the middle of nowhere in the Bavarian Forest. I asked her what she so concentratedly read and she showed me the cover – I was appalled! A children’s book, obviously!

And she even recommended it to me! To me! Someone who had OBVIOUSLY outgrown childhood at my advanced age of… ten!

I harrumphed and condescendingly told her I had more serious things to do – like beheading the advancing army of stinging nettles with my stick-sword or fighting the fly amanita invasion!

Only after my mother likened the house of our relatives which we were visiting to Elrond’s home (which wasn’t too far off the mark!), after her telling me about the dark depths of Mirkwood, only after all of that did I take her up on her offer and read “The Hobbit” for the first time.

This is how I opened the doors to (high) fantasy for myself and Tolkien was followed by Terry Brooks, Robert Jordan, Joel Rosenberg and many many others. I taught myself reading with Sherlock Holmes but I really started reading with “The Hobbit”.

Since then I’ve read it many times for myself and always felt at home. When my children were old enough, I read “The Hobbit” to them every night and, to make it more “real”, I gave them laminated map print-outs from Karen Wynn Fonstad’s wonderful “The Atlas of Middle-Earth” for every step of the journey. For easier collecting, all three got a binder.

I read to them every night and when we were finished with “The Hobbit”, we moved on to “The Lord of the Rings”. (Plus printed maps again, of course!)

Sometimes, I was throat-sore, sometimes I read way past their bedtime but we had a wonderful time. I kept reading to them for many years. (If you wonder: The magic didn’t “stick” fully – none of them are true readers but at least they still own their binders of maps…)


Now my children are adults and I’m back to reading for myself. For me, it was time for a return to the magical world Tolkien created. It was time to return to the cherished memories of my late mother and those reading nights.


For YOU, though, it is now time to pick up a copy of “The Hobbit” and create your own memories.


Five out of five stars – and two asteroids to beat: 2991 Bilbo and 2675 Tolkien



View all my reviews

by Wulf at August 24, 2021 02:35 PM

August 15, 2021

Wulf C. Krueger

People We Meet on Vacation, by Emily Henry

People We Meet on Vacation by Emily Henry

My rating: 5 of 5 stars


»“Um.” I try to think of how to explain it. Years of undying love, occasional jealousy, missed opportunities, bad timing, other relationships, building sexual tension, a fight and the silence afterward, and the pain of living life without him. “Our Airbnb’s air-conditioning broke.”«


Now, this was interesting. I had deliberately aimed low – I’m on holidays; in, at and around my pool. It’s 31°C (roughly 88°F) and I wanted a nice fluffy romance and, yes, I got it. The quotation at the beginning (in which Poppy, our heroine, explains how the happily-ever-after began) pretty much perfectly sums up this nice little romance.

»“Ready,” I confirm, and Alex Nilsen sweeps me up into his arms and carries me down a motherfucking mountain. No. I really could not have invented him.«

If it had just been that, I’d have been satisfied: I smiled at the amusing banter, the interludes of Poppy’s and Alex’ ten years of holidays were nice – it was an allround feel-good book at this point. For the absence of any smut I’d have subtracted a star and that would have been the end of it.

Emily Henry, whose oeuvre I first sampled last year, reading “Beach Read” (and having felt underwhelmed by it), surprised me, though, by writing a travel-romance that actually celebrates home.

Not “home” as in our birthplace; not “home” as in the place we live in or some region we’re from (although all of those have their merits). Ferdinand von Schirach, a German lawyer (of all people!), wrote in his glorious “Kaffee und Zigaretten” »Heimat ist kein Ort, es ist unsere Erinnerung.« (“Home is not a place, it’s our memories.”).

Henry basically builds upon this idea: Both Poppy and Alex have known each other for more than a decade, have gone on holidays together for ten years and made the corresponding memories of and with each other. These memories also feel plausible because they’re rarely the huge, momentous ones but mostly comprise the little things, e. g. a tipsy mistake like “too many wine”.

They have fallen hard for each other during this time and are afraid of that, of the “what-ifs”. They found “home” in each other but shied away from it.

I was once on a short visit to a Dutch woman. She invited me to her house and, well, I somehow felt like I had… arrived. I was at home.
It’s now twenty-two years later and I’m still at home. With her. Our adult children are out partying (vaccinated and all around responsibly) and hopefully finding home (this time the one we live in!).

So this book kind-of hit close-to-home (sorry, couldn’t resist!) and while light and fluffy, it has a slightly more nuanced undercurrent and I like it a lot for that.

Emily Henry says it best in the “Behind the book” part at the end:

»This is, ultimately, a book about home. […] I hope this book carries you somewhere magical. I hope it lets you feel ocean breezes in your hair and smell spilled beer on a karaoke bar’s floor. And then I hope it brings you back. That it brings you home, and fills you with ferocious gratitude for the people you love. Because, really, it’s less about the places we go than the people we meet along the way. But most of all, it’s about the ones who stay, who become home.«

It did for me.

Unexpected five out of five stars.





View all my reviews

by Wulf at August 15, 2021 09:52 AM

August 12, 2021

Wulf C. Krueger

Piranesi, by Susanna Clarke

Piranesi by Susanna Clarke

My rating: 1 of 5 stars


Reading “Piranesi”, I mostly felt unbelievably bored: Piranesi lives in a house with infinite halls; some of them submerged, in some there is an ocean and all feature statues depicting people of all kinds. Piranesi has developed a kind of faith based upon the house and how he feels it cares for him; even going as far as considering himself the child of the house.

We witness Piranesi as he wanders the halls of the house; fishing, talking to birds, the statues and the skeletons of the other thirteen people Piranesi believes to have lived in the house and, consequently, in the entire world because to Piranesi the house is the world.

There is one other living person in Piranesi’s little house – the Other! The Other is – like Piranesi – some kind of (pseudo-)scientist who devises occult rituals to find “Great and Secret Knowledge” and for years, Piranesi has almost religiously and unquestioningly followed the Other’s instructions, believed what the Other believes and catered to the Other’s whims.

This is where my issues with the book start: Piranesi is extremely naive and only very late in the “story” starts questioning what he’s being told. He thinks of himself as a scientist but instead of actually applying scientific methods, Piranesi shys away from looking too closely at the facts as he comes across them.

Piranesi is the archetypical “noble savage”; a wild human, uncorrupted by modern civilization, innocent and, thus, prone to deception. His house which he reveres as a deity – “The Beauty of the House is immeasurable; its Kindness infinite.” – “gives him life” and Piranesi believes himself to be in actual communication with the house itself.

This kind of glorification of one lifestyle which is perceived by a modern author as pure and unadulterated is something I absolutely abhor. Combined with the pseudo-religious elements and the absence of an actual story (I refuse to accept the poor excuse of “transgressive thinking” as one) this makes for the second-worst reading experience for me in 2021.

One out of five stars.




View all my reviews

by Wulf at August 12, 2021 12:10 PM

August 08, 2021

Wulf C. Krueger

Modern Love, Revised and Updated: True Stories of Love, Loss, and Redemption,

by Daniel Jones

Modern Love, Revised and Updated: True Stories of Love, Loss, and Redemption by Daniel Jones

My rating: 5 of 5 stars


»Because real love, once blossomed, never disappears. It may get lost with a piece of paper, or transform into art, books, or children, or trigger another couple’s union while failing to cement your own.
But it’s always there, lying in wait for a ray of sun, pushing through thawing soil, insisting upon its rightful existence in our hearts and on earth.
«


I recently watched the series “Modern Love” and – quite aptly – loved it. Since it was based on the New York Times column of the same name, I had high hopes there might be a collection of this column and that’s how I found this book which comprises about 40 of the most memorable essays from the column.

I laughed, I cried and sometimes I did both at the same time. Some of the stories hit close to home, others deeply impressed me. Even right now while writing this and recalling some of the stories I’m a sniffling mess.

The one defining quality of this collection of essays is its unapologetic honesty and truthfulness to its subject – love in all its forms.

Whether you’re young or old, no matter the gender or sexual preference: Waste no time, get this book and read it.


Five out of five stars and a place among my favourite books of all time.


P.S.: To C., »He wasn’t really a texter anyway, so his lack of response didn’t necessarily reflect the weirdness of my text. It was probably normal for non-texters to see a text and not reply to it. They saw it, found it charming (or not), but didn’t think it required a response. Totally standard.« 😉




View all my reviews

by Wulf at August 08, 2021 10:01 AM

August 02, 2021

Wulf C. Krueger

The Midnight Library, by Matt Haig

The Midnight Library by Matt Haig

My rating: 4 of 5 stars


This is a tricky one… I loved the premise: Nora Seed is seriously depressed – at the age of 15 she quit professional swimming, severely disappointing her father. Her mother died. Her brother, she feels, is in a rough spot because she quit his band.
Even her elderly neighbour doesn’t need her anymore and now her cat has died.

She just doesn’t want to go on.

»She imagined being a non-sentient life form sitting in a pot all day was probably an easier existence.«

(Or wishing to be one’s cat, yours truly would like to add.)

At this point, Nora tries to end it all (if YOU consider suicide, please google “suicide” in your native language and call one of the hotlines you’re going to find!) – only to find herself in the eponymous “Midnight Library”.

The concept of the Midnight Library builds upon the hypothesis of the multiverse which basically states that there is a(n) (infinite) number of parallel universes just like ours. Those universes may overlap, or consist completely independently of each other and will, by definition, diverge from each other with every single choice someone makes.

When Nora enters the Midnight Library and finds an infinite number of books, she learns that each book represents one possible life she might have lived. The one life she just tried to leave is her “root” life.

From her “root” life sprout innumerable other lives of which Nora may try any life she can sufficiently describe (e. g. asking for a “happy” life is not enough as she has to define what makes her life happy).
Once she opens the book that corresponds to her description, she enters that life and lives it until she is either so disappointed that she leaves and returns to the library, or she finds a “perfect” life into which she settles, forgetting the entire ordeal of getting there.

And this is where the cookie starts crumbling a bit: In one life Nora chooses, she is a glaciologist – but in her root life she wasn’t and how is she supposed to navigate a scientist’s life not actually being one?

Even more problematic to me: What about the lives of her alter egos? Ok, so if she leaves an usurped life, its original “occupant” will just feel weird but be well.

What if Nora stays in such a life, though? She would – quite literally – be taking a life. A life that its occupant presumably enjoyed. A life no more or less worth living than Nora’s root life.
Is “root”-life Nora’s life worth more than that of the non-root Nora’s? If we really accept the premise of the multiverse – wouldn’t all those parallel worlds be equally worthy of existence?

What if she robs humanity’s only chance at salvation because she steals the life of the one person who might have saved the planet? (Yes, highly unlikely in reality but this is more of a philosophical question.)

The Talmud states in Sanhedrin 37a: “Whoever saves a single life is considered by scripture to have saved the whole world.”

Isn’t the opposite also a valid idea? If we take a single life, don’t we destroy a whole “world”?

What about partners or children even? Nora would basically be “the other woman”, the one who cheats. The person who stole a child’s true parent. (Because Nora might grow into a version of said parent but she will not ever be that parent.)
Isn’t that a horrible betrayal?

And if we take that “permanently taking a life” seriously – doesn’t that ultimately amount to murder? (Or maybe: Suicide – again?)

Nora even recognizes this fatal flaw of the entire concept at one point:

»Everything was right, and yet she hadn’t earned this. She had joined the movie halfway.«

Unfortunately, this flaw – not having earned this – is inherent in the very premise of the book and it cannot be fixed because there’s only one life that Nora has earned a right to…


“The Midnight Library” doesn’t really deal with these questions because it mostly avoids them: The longer Nora stays in a “borrowed” life, the more she grows (or declines) into it. Thus, referring back to the earlier glaciologist example earlier, she might have grown into that life of a scientist. I can accept that even though it’s somewhat deus-ex-machina.

I fully buy into the concept of “second chances” (or more) and I found Nora endearing. I liked how she learnt what was right or wrong for her.

I’m not entirely happy with the ending (even though it’s a happy one) because it is the easiest way out of the prime dilemma (by avoiding it entirely).

I cannot fully overcome the “taking a life” issue (or the weaselling out of it) and yet I cannot not like this book either.

Four and Five Schrödinger stars out of five – you get to open the box!




View all my reviews

by Wulf at August 02, 2021 03:09 PM

July 29, 2021

Wulf C. Krueger

Romancing Mister Bridgerton (Bridgertons #4), by Julia Quinn

Romancing Mister Bridgerton by Julia Quinn

My rating: 2 of 5 stars


So far, this was definitely the weakest instalment in the otherwise amusing Bridgertons series.

The story isn’t really that interesting and the narrative dragged on rather uninspired so that I was actually bored at times which isn’t exactly my intention when reading a fluffy easy-to-read romance.

What annoyed me the most, though, and made me almost quit this book was Colin Bridgerton himself. So, you know, this series of books is set in the early 19th century and, fortunately, as a society we’ve made a lot of progress – Women’s suffrage, emancipation, feminism, and so on.

And I’m really happy about that.

Thus, I already have to temporarily suspend a lot of truly heartfelt convictions and disengage large parts of my brain in order to be able to enjoy this kind of book: I have to completely disregard more than 100 years of social, societal and emancipatory advances.

I do so and, consequently, tolerate a whole lot of outdated nonsense and I find that all the more difficult if a book isn’t truly worth it. I can do it because I love to giggle at amusing, witty bantering in a love story which, fortunately, happens a lot in the Bridgerton series. I can do it because I truly hope that any reader will know that the story is set in the bad old times and that times have greatly changed for the better.

And I do temporarily suspend my convictions because I crave happy endings – sorry, can’t help it.

How dare you, though, Colin Bridgerton, to be angry at your love interest because she’s acting on her own, because she’s at least somewhat independent?! How dare you berate her for having a secret?!

How dare you, Julia Quinn, to belittle your cast and, in extension, yourself and your audience like that?! (Not to speak of actually harmfully influencing younger, impressionable readers.)

At the one major altercation between Colin and Penelope, I was about to rage-quit because I just couldn’t stand that level of drivel.

And it went on!

»The shock was gone, replaced by a simple, primitive need to claim her, to brand her, to mark her as his.«

Excuse me?! He wants to “brand her”, like cattle?! And how does Penelope react only a little later, thinking about herself?

»She had been born for this man«

Again, I was about to quit when things evened a little out at least and this possessive crap was slightly reigned in.

Ultimately, though, Colin Bridgerton turns out to be just the despicable guy I had him pegged for:

»She had no right to put herself in such a precarious position without consulting him first. He was her husband, or would be, and it was his God-given duty to protect her whether she desired it or not.«

I just hope this series doesn’t get any lower than this because I don’t think I can take much more of this kind of backwards madness.

Two out of five stars.




View all my reviews

by Wulf at July 29, 2021 04:44 PM

July 26, 2021

Wulf C. Krueger

The Witness for the Dead (The Goblin Emperor #2), by Katherine Addison

The Witness for the Dead by Katherine Addison

My rating: 3 of 5 stars


I very much liked “The Goblin Emperor”, the first book in this unusual series. Unfortunately, this successor fell clearly short of greatness.

The book’s eponymous “Witness for the dead”, Thara Celehar, is a humble, demure and thoroughly traumatized prelate who has – more or less – been exiled because he had an affair with a married man who proceeded to murder his wife.

Celehar is originally called upon to investigate the murder of an opera singer but large parts of the book are not actually about this investigation but about a forged will, a serial murderer who kills his newly-wed wives, a ghoul who needs banishing in the country side and a lot of other small “sub-plots”.

That’s where my issues with this book start: There is not one consistent primary storyline but there are several that are mostly unrelated to each other. Just like our thoroughly likeable hero Celehar, we’re following him in his exploits. The writing and world-building is so well executed that I, at times, felt like I was witnessing what happened. Everything felt plausible and intrinsically “real”.

Unfortunately, reality tends to be a lot about routine which isn’t very exciting. While I smiled at Celehar feeding stray cats, and I commiserated with him for his insomnia, his need to ration; it’s just not very interesting.

At times, especially when Celehar went to banish the ghoul, I wondered what narrative purpose this side story had – which turned out to be none.
At another time, Celehar is to undergo a “trial by ordeal” which amounted to spending the night on the “Hill of Werewolves”:

»The path, paved in ancient flagstones, meandered a good deal; I resisted the impulse to try to take a shortcut, even in places where it looked reasonable. I was halfway up the hill before I encountered the first ghost.«

Sounds great, doesn’t it? And it’s not just a single ghosts, it’s an entire battle between ghosts! And it culminates at the end of the page like this:

»Now all I had to do was to get through the rest of the night without going mad.«

I was drawing in my breath sharply, I felt my lungs expand, I held my breath; preparing to turn to the next page where I was shocked to read this:

»When I reached the gate at dawn, the canon was not the only one waiting for me.«

I immediately deflated.

There are lots of missed opportunities in this book that had – by its merits of good writing, a complex world, interesting characters and an author who knows how to capture her readers –
every chance of greatness but failed.

The murder of the opera singer? Solved pretty much by chance instead of using the setting of the opera house itself, its huge cast pretty much all of whom despised the victim.

The explosion of an airship, similar to the Hindenburg Disaster? In terms of the overall story just a side-note.

Or the shy beginnings of a romance between Celehar and the director of the opera, Pel-Thenhior: Of course, after the horrible ending of his previous relationship, Celehar is understandably reluctant to act upon his attraction to (and fledgling feelings for) Pel-Thenhior. The longer both interact, the more obvious it becomes that Pel-Thenhior, too, harbours more than just good will for Celehar but this remains a loose end like so many others.

Still, “The Witness for the Dead” is definitely not a bad book. It’s just one that, sadly, failed to realize its immense potential.

Three out of five stars.




View all my reviews

by Wulf at July 26, 2021 03:14 PM

July 23, 2021

Wulf C. Krueger

An Offer From a Gentleman (Bridgertons #3), by Julia Quinn

An Offer From a Gentleman by Julia Quinn

My rating: 4 of 5 stars


It’s summer, the weather is fine, the water in my pool has 34°C (roughly 93F) and I’m exhausted from work. Nevertheless, my holidays are nearing (two weeks from now!) and I’m slowly getting into “Summer Reading Mode”.

That means that I prefer easy, quick-to-read novels that simply amuse me and, thus, I was only too happy to take up on “An Offer From a Gentleman” in which Sophie Beckett, a late earl’s daughter – born out of wedlock, though – captures the heart of Benedict Bridgerton – and vice versa.

There’s not much to be said about this specific book; it’s more or less a Cinderella story. A fluffy fairy tale in which everyone gets what they deserve. You don’t read this for philosophical depths or “enlightenment”.

If you read this book, you do it purely for entertainment; it’s the literary equivalent of candyfloss, a TV romcom or a soap opera.

If that’s what you’re in the mood for, you can hardly go wrong with this book.

Although… If you ponder reading this third book in this series, you know perfectly well what to expect anyway: It’s more of the same in a good way.

Four swooning stars out of five.


P.S.: Yes, he blackmails her. Yes, he asks her to become his mistress. Since it’s inherently consistent with the fictitious universe of “Bridgertons” I choose to suspend my moral indignation.




View all my reviews

by Wulf at July 23, 2021 01:40 PM

July 13, 2021

Wulf C. Krueger

Bretonische Idylle (Kommissar Dupin #10), von Jean-Luc Bannalec

Bretonische Idylle: Kommissar Dupins zehnter Fall by Jean-Luc Bannalec

My rating: 3 of 5 stars


»Himmlische Dämpfe erfüllten den Raum. »Wussten Sie, dass sich das Kaffeearoma aus rund tausend verschiedenen Einzelaromen zusammensetzt? Wein bringt es gerade einmal auf vierhundert.« Dupin hatte es nicht gewusst oder, genauer: Er hatte es immer schon gewusst. Schließlich war er aus gutem Grund süchtig.«


Selten ist mir eine Rezension so schwer gefallen wie bei diesem Buch – dem immerhin zehnten Krimi um Dupin, der auch im Buch dieses Jubiläum feiert.

Dabei stimmt die Mixtur eigentlich wie immer… Bannalec ist voll Sympathie für seine Figuren und läßt auch die Nebenfiguren wachsen:

»Riwal selbst war ein Phänomen, immer wieder: in einem Augenblick ein bewundernswerter Rationalist, Techniker, bodenständiger Pragmatiker, im nächsten ein mystischer Erzähler.«

Auch Dupin ist ganz er selbst – mal grantig und ungeduldig, mal empathisch und aufgeschlossen. Diesmal – vor dem reizvollen Hintergrund der Belle-Île – ermittelnd, ist er (zumindest nach überstandener Überfahrt!) ganz in seinem Element.

Neben seinem üblichen “normalen” Kaffee, darf Dupin diesmal sogar einer wunderbar zelebrierten Kaffee-Zeremonie beiwohnen, die zudem noch inhaltlich, sprachlich und in ihrer Länge perfekt beschrieben ist – ein Traum für jemanden wie mich, der ebenfalls dem Kaffee – auch in diesem Moment – huldigt!

Daß Dupin dann noch den hausgemachten Whisky – den Six Reines de la Belle-Île – probieren und genießen darf, läßt meine eigene Sehnsucht nach Frankreich (obschon ich mein Herz vor vielen Jahren an das Languedoc-Roussillon (in der heutigen Region Okzitanien) verlor) nur noch größer werden.

Dupin hat diesmal “gefühlt” nur drei (eigentlich zwei) Tage Zeit zur Lösung des Falles, aber über weite Strecken entwickelt sich die Geschichte eher langsam – streckenweise zu langsam.
Dann wieder passiert sehr viel in schneller Folge und – schwupps – fällt Dupin die Lösung geradezu in den Schoß. Es ist diesmal sehr viel Glück bei der Aufklärung des initialen Mordes und der weiteren Vorkommnisse im Spiel und das hat Dupin schlicht nicht verdient.

Selbst der Autor läßt Dupin über die Natur der Zeit philosophieren – und das sprachlich sehr nett und bildhaft formuliert:

»Die Zeit verlor alle gewöhnlichen Maße und Strukturen. Sie dehnte sich, rollte sich plötzlich zusammen, verdichtete sich, blieb stehen, dann sprang sie wieder.«

Genau das habe ich aber auch bei der Lektüre verspürt. Das ist schade, denn durch das stark variierende Tempo, das sich gegen Ende in einer spektakulären Such-Aktion dramatisch steigert, fühlte ich mich zeitweise literarisch “mild berieselt” und dann wieder atemlos gehetzt.

Die Naturbeschreibungen sind wieder großartig gelungen und der Bezug zu real-existierenden Orten, z. B. die Glasbläser des Studios “Fluïd” und ihre wunderschönen Gläser (kosten aber leider auch EUR 45,– pro Stück!) lassen die Insel und ihre Bewohner geradezu lebendig werden.

Es sind also keine “groben Schnitzer”, die sich Bannalec hier leistet, sondern es ist eine Vielzahl an Kleinigkeiten, die stören – die vernachlässigten Nebenfiguren (Nevou, LeMenn, Claire), die plump-falschen Fährten, relativ viele lose Enden, die überhastet wirkende Auflösung, ein 87 Jahre alter Kunstgriff (“Twist”) am Ende und eine bestenfalls maue Jubiläumsfeier – das alles ist verzeihlich, aber das implizite Versprechen auf intelligente Spannung und Fortentwicklung; dieses Versprechen konnte auch die schönste “Bretonische Idylle” für mich nicht hinreichend einlösen.

Insofern – mit leisem Bedauern – drei von fünf Sternen.



View all my reviews

by Wulf at July 13, 2021 05:33 PM

July 07, 2021

Wulf C. Krueger

Survive the Night, by Riley Sager

Survive the Night by Riley Sager

My rating: 1 of 5 stars


Well, I’m flabbergasted – and not in a good way. “Survive the Night” was supposed to be a quick mystery/thriller diversion which quickly turned out to be a roll-your-eyes and hit your head against some hard surface to distract yourself from the intellectual pain this book evokes.

In Sager’s newest work – and I mostly enjoyed his earlier ones – we meet Charlie. Charlie’s best friend, Maddy, was murdered barely two months ago by a stranger. The “Campus Killer” who is still at large and – presumably – on the prowl to find their next victim.

The killer’s modus operandi is to grab their victims when they’re alone and ideally at night. Since there were at least three known murders before Maddy’s, everyone is alert, there are brochures about “re-taking the night” and, of course, Charlie is fully aware of all of that.

Now, after the initial shock has worn off, Charlie decides to (more or less temporarily) move back to her grandmother. How to get from her campus to her place in Ohio, though?
Wait a few weeks till Thanksgiving and drive home with her boyfriend? Take public transport?

No, that’s too obvious for dear clever Charlie and, thus, she smartly decides to take a ride with a complete stranger. A stranger who seems suspicious to her before she even enters his car. At night. Alone. For a multi-hour trip.

What could possibly go wrong?!

This is the premise of the story and it’s completely ludicrous. Wait, though, because it’s still getting “better”: Since the murder Charlie suffers from clinically-diagnosed hallucinations and, thus, got prescription meds against them.
She doesn’t like them, though, so she just throws them away and prefers to zone-out from reality from time to time. While on the road with the afore-mentioned suspicious stranger…

Now, one might assume a young person to have at least enough brain to trust oneself more than a random stranger. Not so in Charlie’s case: Josh, her suspicious stranger, is more trustworthy to her than herself. Duh.

Even if we accept that without judging such foolishness, it remains a fact that Charlie always makes the worst and most idiotic of all possible choices.
An example: While in the hands of Josh and knowing full well that something is horribly wrong, they meet a police officer. Charlie ponders asking for his help but ultimately decides against it because she doesn’t want to endanger him…

Charlie’s ideas of trustworthiness are rather simplistic anway:

»He’s still catching snowflakes, for God’s sake, his tongue hanging out like a dog’s. That’s not something killers do. Kids do that. Nice people do that.«

Yes, riiiiight…

Anyway, all the “twists” can be smelt from miles away, every new revelation made me roll my eyes and pretty much everything about this book is so infuriatingly bland that I’m still wondering if Sager really wrote this.

To sum it up: If you’re into reading how an extraordinarily intellectually-challenged young woman gets into a car with a suspicious stranger, only to proceed making all the wrong decisions and, accidentally, surviving the night; then, yes, go ahead, read this book and afterwards proudly proclaim together with me: “I survived this book!”

One star because it’s a book.





View all my reviews

by Wulf at July 07, 2021 04:42 PM

July 03, 2021

Wulf C. Krueger

Eine drollige Gesellschaft (Mumintrollen #3), von Tove Jansson

Eine drollige Gesellschaft by Tove Jansson

My rating: 5 of 5 stars


Die Mumins kennen wohl die meisten von uns – eine Familie von Mumintrollen, die in einem kleinen Tal leben und diverse Abenteuer erleben. Geradezu ständig wächst die erweiterte Familie – da kommt mal ein Hemul dazu oder die kleine Mü – und die Reaktion der Mumineltern ist schlicht und liebenswert:

»Der Muminvater und die Muminmutter hießen alle Neuankömmlinge ruhig und freundlich willkommen, stellten zusätzliche Betten auf und vergrößerten den Esstisch.«

Meine frühesten Erinnerungen sind jene, in denen meine Eltern abends an meinem Bett sitzen und mir aus den Mumin-Büchern vorlesen. “Mumins vorlesen” – das war für mich als Kind der Inbegriff der Liebe.

Gerade dieser dritte Band hatte es mir damals – und hat es mir noch heute – besonders angetan, denn hier ist die Welt der Mumins friedlich: Die beiden vorherigen Bände, “Mumins lange Reise” (erschienen 1945) und “Komet im Mumintal” (erschienen 1946) spiegeln die Schrecken des zweiten Weltkriegs sowie den zeitgenössischen Ausbruchs des Vesuvs wider.

In der “Drolligen Gesellschaft” ist die Familie vereint im Mumintal und Tove Jansson schöpft aus den Vollen ihrer Fantasie – da werden aus unachtsam in einen Zauberhut (natürlich ein Zylinder!) geworfenen Eierschalen plötzlich Wölkchen, die nicht nur betreten, sondern gar wie eine Seifenkiste gesteuert werden können – das wollte ich auch gern, aber tragischerweise hat sich keiner der je von mir “erprobten” Zylinder diesbezüglich bewährt!

Geliebt habe ich auch immer die Sprache (obschon ich nur die deutschen Übersetzungen gelesen habe). Sowohl die frühe Übersetzung durch Vivica und Kurt Bandler als auch die hier zugrunde liegende moderne Übersetzung von Birgitta Kicherer.

Hier mal ein kleiner Vergleich:

Vivica und Kurt Bandler, 1954:
»Er hatte hundert Tage und hundert Nächte geschlafen, und die Träume schwebten noch um ihn herum und versuchten, ihn in den Schlaf zurückzulocken.«

Birgitta Kicherer, 2001:
»Er hatte hundert Nächte und hundert Tage geschlafen, und jetzt wimmelten die Träume noch um ihn herum und wollten ihn wieder in den Schlaf zurückziehen.«

Wo bei Bandlers die Träume “schweben” und “locken”, so sind sie bei Kicherer handfester und “wimmeln” und “ziehen” – ich kenne das Original nicht, aber die neue Variante klingt für mich plausibler.

“Halbe Sachen” gibt es bei den Mumins üblicherweise auch nicht – selbst der Zauberer lächelt buchstäblich von Kopf bis Fuß:

»Alle hatten den Zauberer lachen gesehen, aber niemand vermutete, dass er lächeln konnte. Jetzt breitete sich jedoch ein Lächeln auf seinem Gesicht aus. Er war so froh, dass es überall sichtbar wurde, an seinen Ohren, an seinem Hut, an seinen Stiefeln!«

Geprägt ist dieses – wie aber auch die anderen Mumin-Bücher – vom gegenseitigen Respekt und der Liebe der Figuren zueinander. Atypisch für die Zeit erscheint auch die schlichte und aufrichtige Toleranz: Der Hemul trägt ein Kleid und macht einen Knicks – ist eben einfacher und potentiell weniger “entblößend” als eine tiefe Verbeugung in einem Kleid!

Tove Jansson hat aber auch nie die tieferen Gedanken gescheut und so macht sie sich in der “drolligen Gesellschaft” anhand der komplexen Besitzverhältnisse um den “Königsrubin” Gedanken um das Verhältnis zwischen Gerechtigkeit und Recht – und löst diese Herausforderung zum Ende auf bestechend einfache wie wunderschöne Weise.

Auch die Beziehung zwischen Sammeln und Besitzen wird kongenial thematisiert:

»Du bist kein Sammler mehr, nur noch ein Besitzer, und das macht überhaupt nicht so viel Spaß.«


Letztlich aber, wenn es darum geht, was quintessentiell “muministisch” ist, so ist das ganz einfach: Liebe ist alles.


P.S.: Wer mehr über die Mumins wissen möchte, dem sei “Zépé’s Virtuelles Muminforschungszentrum” des unvergleichlichen Mumin-Kenners Christian “Zépé” Panse wärmstens empfohlen!





View all my reviews

by Wulf at July 03, 2021 11:36 AM

June 29, 2021

Wulf C. Krueger

House of Earth and Blood (Crescent City #1), by Sarah J. Maas

House of Earth and Blood by Sarah J. Maas

My rating: 1 of 5 stars


Phew… 816 pages, 10 days and I feel like I aged 10 years because this was such a tiresome read.

We find ourselves in the most fanciful and easiest fantasy world to write: A (probably) dystopian future on planet Midgard (yes… the subtlety is killing me…) in which humans are in a constant state of rebellion against their angel/fae/werewolf/ overlords who enslaved and/or killed their leaders.

Fortunately, not only does this Midgard feature powerful magic, supernatural beings and great weapons of mass destruction (brimstone missiles!), no, it also features modern technology like smartphones and email…

Bryce Quinlan is a “half-breed” between human and fae and, of course, supernaturally beautiful, tall, sexy and almost suicidally depressed about the murder of her more-than-a-friend-but-not-quite-a-lover-even-though-their-love-is-eternal werewolf companion and the latter’s entire pack.

Along comes the “dark and brooding” kind of male angel (yes… an angel… of death to boot…), Hunt Athalar, enslaved to the afore-mentioned overlords for being the rebellion’s leading general and the deceased rebellion leader’s lover.

Both having lost their respective lover/love interest/ they initially loathe each other to fall all the harder later on. To be honest, this romance aspect in a “GoodReads Choice Award” winner for fantasy was a minor reason for me to read this.

Do not fall into the same trap, though: Most of the time, the tension between both is luke-warm at best due to their insecurities, the level of which surpasses that of a 14-year old. Whenever they’re really “hot and bothered” (yes, actually spelt out like that because we’re all morons…) and are about to rip into each other, their phone rings and… interruptus. It’s unbelievable.

As if all that wouldn’t yet be enough to thoroughly ruin any book, Maas tops it off: Maas seems to be primarily a young-adult author. She tries hard (and completely unsuccessfully) to make this an “adult book” – but she lacks the means and resorts to liberally sprinkling a “fuck” into pretty much every sentence.

Now, don’t get me wrong, I couldn’t care less about expletives in general if used “normally” – most of us swear from time to time. Here, though, we’re exposed to so many that it’s just annoying:

»Ruhn’s blue eyes glimmered in his shadow-nest or whatever the fuck he called it.«

That would still be fine and simply make me roll my eyes (which the characters here do all the time as well…) but even Maas’ story drags on, and on, and on, and on.

There are so many false leads, minor twists, dead ends and what-not that I oftenly got confused about why someone did something and about the motives of the plethora of annoying stereotyped characters.

I don’t think any major cliché in the world is absent from this book; from the ambitious mother who’s envious of her daughter’s success, that daughter being a “wild child” with substance-abuse issues, to Bryce’s daddy issues and both hers and Hunt’s survivor’s guilt. The adorable sidekick who makes a valiant sacrifice – it never stops until the very end of the book.

The last 200 pages at least pick up the pace but it’s all way too late, too cheesy and cliched to redeem this book.

While I do understand that many adoring young girls probably voted a billion times for this turd to become a winner, there’s no reason whatsoever an adult with a working brain should expose themselves to this kind of drivel.

One star out of five – and I’d like all those wasted hours back, please!





View all my reviews

by Wulf at June 29, 2021 03:48 PM

June 19, 2021

Wulf C. Krueger

Bonjour tristesse, von Françoise Sagan

Bonjour tristesse: Roman by Françoise Sagan

My rating: 2 of 5 stars


Wir befinden uns im Jahr 1954 und treffen auf Cécile, ihren Playboy-Vater Raymond, seine junge Geliebte Elsa sowie Anne, die Raymond heiraten möchte. Last and least, gibt es noch Cyril, einen jungen naiven Mann, der zu Céciles Geliebtem wird.

Klar, angesichts der relativen Freizügigkeit dieser Novelle kann ich mir einerseits den moralischen Aufschrei der ehrenwerten Gesellschaft dieser Zeit lebhaft vorstellen. Wenig überraschend sprang wohl auch die Kritik jener Tage schnell auf den Zug dieses Skandals im Wasserglas an.

Was aber letztlich bleibt ist die Geschichte einer verwöhnten 17-Jährigen, die gerade eine Prüfung verhauen hat und den Sommer mit ihrem Vater am Meer verbringt. Elsa, seine Geliebte, “stört” die beiden nicht signifikant in ihrem “Lotterleben”, das in Wahrheit einfach nur entspannt und weitgehend frei von den gesellschaftlichen Konventionen zu sein scheint.

Eine empfindlichen “Dämpfer” erhält das unbeschwerte Beisammensein durch die Anreise von Anne, einer konservativen – um nicht zu sagen: spießigen – Dame, die sich sogleich anschickt, Verantwortung für Cécile übernehmen zu wollen, um den gesellschaftlichen Ruin von Raymond und sich selbst abzuwenden. Empfundene oder tatsächliche Gleichgültigkeit ist Annes herausragende Eigenschaft.

Dafür Anne schnell mit vernichtenden Urteilen…

»Deine Ansichten sind modern, aber ohne Wert«, sagte Anne.

… und tut ihr Bestes, Cécile nach ihrem Vorbild “umzumodeln” und Cécile ihrerseits suhlt sich förmlich im “Mißverstanden-werden” und Selbstmitleid:

Die Natur hatte mich dazu geschaffen, glücklich, unbekümmert und liebenswürdig zu sein, und durch ihre Schuld geriet ich nun in eine Welt der Vorwürfe, des schlechten Gewissens, in der ich mich verlor, denn ich war zu unerfahren in der Kunst der Selbstbetrachtung.

Wie viele Jugendliche ihres Alters rebelliert Cécile gegen Autoritätspersonen in ihrem Leben und manipuliert mehr oder minder geschickt insbesondere ihren Vater und reagiert auf Bestrafung mit Melodramatik…

Es war das erstemal, daß ich Grausamkeit kennenlernte.

… sich dabei auf ein kurzzeitiges Einschließen in ihrem Zimmer beziehend.

Cécile ist schnell in ihren Urteilen…

Ich sah mit Staunen, wie dieses Mädchen, dessen Beruf es hart an die Grenze der käuflichen Liebe gebracht hatte, so romantisch wurde, so empfänglich für die Kleinigkeit eines Blickes, einer Bewegung – sie, die der knappen Sachlichkeit eiliger Männer ihre Erziehung verdankte.

… und voll anmaßender Borniertheit…

Sie hatte auch ein ganz besonderes Lachen, ein sehr volles, ansteckendes Lachen, wie es nur Menschen haben, die ein wenig dumm sind.

Wahrscheinlich hatte dieses Buch seine Zeit, aber, wie so viele sogenannte “Klassiker”, erscheint es eher ratsam, sich mit moderner Literatur zu befassen und nicht mit angestaubtem Manierismus und Teenager-Zorn.

Zwei von fünf Sternen.



View all my reviews

by Wulf at June 19, 2021 02:12 PM

June 17, 2021

Wulf C. Krueger

Beneath Devil’s Bridge, by Loreth Anne White

Beneath Devil’s Bridge by Loreth Anne White

My rating: 4 of 5 stars


I haven’t read much by Loreth Anne White yet: I have read two books of her “A Dark Lure” series and liked those well enough to keep an eye on White.
Consequently, this book came as a bit of a “shock” because it’s a complete departure from the narational lines established by those previous books.

In “Beneath Devil’s Bridge” we read about an old case from 1997 which regains attention 24 years later due to a young true-crime podcaster, Trinity, who interviews the incarcerated murderer of Leena Rai, Clayton.

As it seems to be all the rage these days, “Bridge” features time jumps between the original investigation of the murder in 1997 and Trinity’s podcast – excerpts of which are used as a device – in 2021.

Rachel, the leading detective in 1997, now retired from her Police Department, around 60, instigated by Trinity’s podcast and the fact that suddenly the convicted murderer, the man who confessed everything and then decided to not ever talk about the case again; the fact that Clayton talks now, privately, makes Rachel “re-open” the case and moves to get to the truth – this time!

»Yet beneath my love there lies a whisper of unarticulated disquiet, a silently mounting anxiety, something heaving and writhing below in my unconscious«

“Bridge” is one of those books that have no obvious flaws – the premise is interesting, the story well told and the language adaequat, in some cases clever and imaginative (»an explosion of truth«). It’s also a page-turner – on my Kindle I always keep the percentage to which I’ve read the book visible. The less I glance at this indicator, the more a book engrosses me. In this case, I noticed the indicator at 4%, 24%, 48% and around 94%.

Twists and plot twists abound and yet the story is intrinsically plausible and sufficiently honest to enjoy oneself – and while not unpredictable, in some cases, I sat and pondered possibilities.

»No matter how much we pretend otherwise—mothers, daughters, grandmothers—there is always a part of us deep down inside that remains the little girl we once were. Whether we are fifteen or forty or eighty, that little person still lurks beneath everything we do, or think, or try to become, or fight against. She’s always there.«

So why award only four stars out of five? To be honest, I’m not entirely sure myself – “Bridge” is entertaining enough and intelligent enough. And yet, some facets felt lacking – what’s the deal about the therapist? He plays a central role and yet remains pretty bland as a character. The ex-cop’s daughter – she, too, is centre stage and yet I struggled to remember her name…

“Beneath Devil’s Bridge” is a well-done, suspenseful who-dun-it that’s very readable and enjoyable but lacks a bit of a soul.





View all my reviews

by Wulf at June 17, 2021 08:53 PM

Ali Polatel

Sydbox v2.1.0

I am happy to annouce the release of SydBox-2.1.0. This release has many fixes and some new features. Below you may find information on the recent changes and how to acquire SydBox. Changes sydbox: do not warn when reading /proc/pid/stat returns invalid argument tests: many fixes, add more test coverage sydbox: fix AArch64 compilation and tests sydbox: add many daemon options, such as --user, --group, --background, --nice etc. Read the fine manual for further details.

June 17, 2021 06:06 PM

June 15, 2021

Ali Polatel

Sydbox v2.0.1

12 Years: SydBox-v2.0.1 I am happy to announce the release of SydBox-2.0.1, its third major release after serving as the default sandbox of Exherbo for 12 years since 2009.08.17. Read the fine manual at https://sydbox.exherbo.org Check out Pandora! https://pandora.exherbo.org which is a SydBox helper to make sandboxing practical for everyone! Download . @ Tar https://dev.exherbo.org/~alip/sydbox/sydbox-2.0.1.tar.bz2 SHA https://dev.exherbo.org/~alip/sydbox/sydbox-2.0.1.tar.bz2.sha1sum GPG https://dev.

June 15, 2021 06:23 PM

June 13, 2021

Ali Polatel

Pandora v0.5.2

Pandora v0.5.2 is released. Pandora’s Box is a helper for SydBox, a ptrace & seccomp based sandbox to make sandboxing practical. This makes it easy for the end user to use secure computing for practical purposes. You may acquire Pandora with cargo install pandora_box. See Pandora’s page on crates.io. Pandora requires Sydbox. See SydBox README to learn more about how to install SydBox. This version of Pandora updates configuration format to Sydbox API Version 2 and only works with SydBox v2.

June 13, 2021 08:42 PM

June 08, 2021

Wulf C. Krueger

The Viscount Who Loved Me (Bridgertons #2), by Julia Quinn

The Viscount Who Loved Me by Julia Quinn

My rating: 4 of 5 stars


This is the kind of book most of my fellow males will avoid like the plague. All the more so if they ever – by accident, of course! – happen to come across the “Author’s Note” in this book which explicitly states “Since my readers are almost exclusively women”…

Well, here I am, and I profess: I greatly enjoyed this book despite knowing that it most certainly is (mostly) literary fast food – good to sate ones primal desires but not really nourishing.

And I couldn’t care less.

I really enjoyed the lovely family dynamics between the Bridgertons and I loved the witty bantering between Anthony and Kate. I just can’t help but root for such wonderful characters and their relationships, their eccentricities and how they overcome them.

Is it realistic? Not at all. Historically accurate? Very unlikely. Romantic, cute and thoroughly enjoyable? To me at least, absolutely.

You’ll have to be able to generously ignore macho “gems” like this one…

»It was as if a certain side of her were visible only to him. He loved that her charms were hidden to the rest of the world. It made her seem more his.«

… which this book features in numbers. The men are “real men” (and hardly stop short at clubbing their female prey and dragging them to their cave), the women are kind and gentle and it doesn’t take much to dishonour a lady for life…

If you can stomach that, you might find yourself actually enjoying it. Four out of five stars for this guilty pleasure.




View all my reviews

by Wulf at June 08, 2021 09:12 PM

June 05, 2021

Wulf C. Krueger

Jeder Mensch, von Ferdinand von Schirach

Jeder Mensch by Ferdinand von Schirach




Ferdinand von Schirach ist ein beachtlicher Streiter für Recht und Gerechtigkeit – sowohl als Jurist wie auch in seiner “zweiten Karriere” als Schriftsteller. (Jedes seiner bisher veröffentlichten Bücher ist übrigens uneingeschränkt lesenswert.)
Er hat ein feines Gespür für das, was Recht ist, was Recht sein könnte und was Recht sein sollte und die Klugheit, sich dafür auf vielerlei Ebenen einzusetzen.

In diesem wirklich kurzen Essay (ca. 3.000 Worte) leitet von Schirach nun aus den Werten der US-amerikanischen Unabhängigkeitserklärung die Notwendigkeit sechs einfach anmutender neuer, moderner Grundrechte für ein besseres Europa ab:

Artikel 1 – Umwelt
Jeder Mensch hat das Recht, in einer gesunden und geschützten Umwelt zu leben.

Artikel 2 – Digitale Selbstbestimmung
Jeder Mensch hat das Recht auf digitale Selbstbestimmung. Die Ausforschung oder Manipulation von Menschen ist verboten.

Artikel 3 – Künstliche Intelligenz
Jeder Mensch hat das Recht, dass ihn belastende Algorithmen transparent, überprüfbar und fair sind. Wesentliche Entscheidungen muss ein Mensch treffen.

Artikel 4 – Wahrheit
Jeder Mensch hat das Recht, dass Äußerungen von Amtsträgern der Wahrheit entsprechen.

Artikel 5 – Globalisierung
Jeder Mensch hat das Recht, dass ihm nur solche Waren und Dienstleistungen angeboten werden, die unter Wahrung der universellen Menschenrechte hergestellt und erbracht werden.

Artikel 6 – Grundrechtsklage
Jeder Mensch kann wegen systematischer Verletzungen dieser Charta Grundrechtsklage vor den Europäischen Gerichten erheben.

(Quelle: https://www.jeder-mensch.eu/informati…)

Diese angestrebten neuen Rechte mögen simpel wirken, vielleicht gar naiv (z. B. Artikel 4), aber wie, wenn nicht durch einklagbare Rechte, können wir die Risiken, die die unglaublichen technologischen Errungenschaften (Artikel 2, 3 und 5) unserer Zeit mit sich bringen, handhabbar machen?

Diese neuen Rechte beschäftigen sich gleichzeitig mit den großen Herausforderungen unserer Zeit – dem Erhalt unserer Lebensgrundlage (Artikel 1) und der Wahrhaftigkeit (Artikel 4) untereinander.
Insofern bin ich einmal mehr dankbar für das, was Ferdinand von Schirach leistet und unterstütze dieses Projekt aus Überzeugung. Auf eine Sterne-Bewertung verzichte ich angesichts der Natur und des Umfangs dieses Essays.



View all my reviews

by Wulf at June 05, 2021 09:10 AM

June 04, 2021

Wulf C. Krueger

Junge Frau, am Fenster stehend, Abendlicht, blaues Kleid, von Alena Schröder

Junge Frau, am Fenster stehend, Abendlicht, blaues Kleid by Alena Schröder

My rating: 5 of 5 stars


Die “Junge Frau” ist ein leises und berührendes Buch, ohne jemals ins Sentimentale abzugleiten. Es liest sich schnell, leicht und locker, ohne es an Empathie für seine Protagonistinnen mangeln zu lassen oder das teils tragische Schicksal zu banalisieren.

In zwei Erzählungssträngen erzählt Schröder die Geschichte von vier (eigentlich fünf) Frauen einer Familie: Zunächst ist da Senta Köhler, geboren im beginnenden 20. Jahrhundert, die ungewollt von einem “feschen” Fliegerheld des Ersten Weltkriegs, Ulrich, schwanger wird.
Senta bekommt das Kind, leidet aber vermutlich an postnatalen Depressionen; die Ehe zerbricht, das Kind, Evelyn, bleibt beim Vater. Senta geht nach Berlin zu ihrer Freundin Lotte.

Im Berlin der 20er und 30er Jahre sind Frauen wie Senta und Lotte – selbständig, selbstbewußt und frei vom Antisemitismus der Zeit – eine Seltenheit. Senta heiratet letztlich in Berlin einen jüdischen Reporter, Julius Goldmann.

Ruhig und um so bedrückender erzählt Schröder von den zunehmenden Schikanen nicht nur durch die Nazi-Machthaber, sondern auch von Profiteuren der Diskriminierung. Können Senta und Julius letztlich fliehen, so werden doch Julius’ Eltern letztlich in Treblinka ermordet.

Es ist selten, daß es einer Autorin so scheinbar einfach gelingt, vom Schicksal Einzelner im Holocaust gleichzeitig so eindringlich und doch unaufgeregt und unaufdringlich zu erzählen.
Evelyn, Sentas Tochter, wächst derweil bei ihrer Tante Trude, Ulrichs Schwester, auf. Trude wird zur überzeugten Nationalsozialistin, die in einem “Delirium aus Hass, Angst, Enttäuschung und Wut” lebt und letztlich stirbt.

Gerade die Geschichte um Senta, die nie aufgibt, die anständig bleibt und die aufsteht und tut, was sie tun muß, gerade diese Geschichte hat mich sehr bewegt.

Im zweiten großen Handlungsstrang erleben wir, wie Hannah, Sentas Urenkelin, ihrer Familiengeschichte durch Zufall gewahr wird. Hannah ist Evelyns (wir erinnern uns: Sentas “verlorene” Tochter) Enkelin und besucht diese hochbetagte alte Dame und Seniorenheim und findet dort den Brief einer israelischen Anwaltskanzlei, die die Suche der verlorenen Familie in Gang bringt.
Schröder schreibt Hannah zu einer wunderbar modernen und glaubwürdigen jungen Frau, die es ihrerseits nicht leicht hat: Eine Affäre mit ihrem Doktorvater, eine Promotion, an der sie kein wirkliches Interesse hat und keine Zukunftsperspektiven in Sicht.

Nur die greise Großmutter ist von der Familie noch gegenwärtig: Der Vater ist seit der Einschulung fort. Die esoterisch angehauchte Mutter Silvia, die vor zehn Jahren an Krebs starb, weil sich der nun einmal nicht mit Zuckerkügelchen (“Globuli”) heilen läßt. Silvia, die aber auch schon vor ihrem Tod oft durch Abwesenheit – physische wie emotionale – “glänzte”, weil sie es wiederum von Evelyn nicht anders kannte.

All das ist kein leichtes “Erbe”, aber mit zunehmendem Verständnis für die komplizierten Familienverhältnisse der Vergangenheit wächst Hannah und es tun sich durch Begegnungen, unter anderem mit Rubi, der Enkelin eines weiteren Zeitzeugen, ungeahnte Wege für die Zukunft auf.

Das Buch endet offen und doch voller Hoffnung. Mir wiederum bleibt nur zu hoffen, daß Alena Schröder noch mehr zu erzählen hat. Volle fünf Sterne für dieses unsentimentale, aber dafür um so bewegendere Buch.




View all my reviews

by Wulf at June 04, 2021 04:04 PM

June 01, 2021

Wulf C. Krueger

The Duke and I (Bridgertons #1), by Julia Quinn

The Duke and I by Julia Quinn

My rating: 4 of 5 stars


Recently, I came across “Bridgerton” on Netflix and – much to the dismay of my family – I really enjoyed it. Now, what would be more sensible than to look for the “source material”?

So I did and was somewhat mystified why, at the time of writing this, “The Duke and I” only features an average score of 3.87. Looking into this made it obvious that one scene from the Netflix series was based on something many reviewers considered a “rape scene”.

Fully expecting this to be exaggerated, I started reading – and found myself enjoying things very much: The chemistry between Daphne and Simon that permeates the entire book and that has been transformed so nicely to the TV screen, the bantering, the family – everything was pretty much great.

If you like romance (I certainly do! 🙂 ), tinged with fictitious history (I do enjoy a good historical novel at times as well), you can hardly go wrong. Then came that scene…

I don’t want to dive into it in any detail or argue in any direction but, yes, that scene left a bitter taste. Especially since Daphne fluctuates between regret and justification of what she did.
It did mar my enjoyment of this otherwise very amusing, quick and easy read to some extent.

Everything that came after was slightly tainted even though Quinn makes things work between Daphne and Simon and at least this reader. Your mileage may vary.

A slightly guilty-feeling four stars out of five.




View all my reviews

by Wulf at June 01, 2021 03:42 PM

May 30, 2021

Wulf C. Krueger

Funkenmord (Kommissar Kluftinger #11), von Volker Klüpfel & Michael Kobr

Funkenmord: Kluftingers neuer Fall by Volker Klüpfel

My rating: 2 of 5 stars


Puh… Das also war Kluftinger 11 und einem von uns beiden geht langsam die Puste aus. Ich habe jetzt extra mal nachgeschaut: Klüpfel und Kobr sind jeweils Jahrgang 1971 und 1973.

Weite Teile des Humors der beiden Autoren stammt aber eher aus dem miefigen Altherren-Umfeld: Angefangen von Vodka-saufenden Russinnen, über einen indisch-stämmigen Priester, dessen Darstellung zum “Fremdschämen” gereicht (»Goßer Gottowielow-ben-disch. Heah, wie peisen deine Starke …«) bis hin zu ganz peinlichen Klamottenkiste (“But I do not want that he is the Führer.”) – Klüpfel und Kobr ist kein Fettnäpfchen zu schade, kein Witz zu banal, um ihn nicht weidlich und nach den eigenen bescheidenen Künsten auszuschlachten.

Auch über berechtigte Anliegen wird sich von diesem Duo der dümmlichen Peinlichkeit gern und ausschweifend mit solchen Schenkel-Klopfern lustig gemacht:

Handel treibenden Menschinnen und Menschen (m / w / d)

Ganz ehrlich: Ich habe die Faxen von Leuten dicke, die im Jahre 2021 immer noch meinen, sich über Emanzipation, Diversität, Geschlechter-neutrale Sprache, etc. lustig machen zu können. Es sind Witze auf Kosten von Menschen; eine Art von “Witz”, die einfach nicht mehr sein muß.

Ganz unabhängig von all dem: Die Story ist eher schwach, denn Kluftinger ermittelt in einem alten Fall, bei dem er einst einen gravierenden Fehler gemacht hat. Es liegt also auf der Hand, daß wenig “Action” geboten wird, viel in den Achtzigern herumgestochert und wenig substanziell Neues passiert.

Auch sonst ist eigentlich alles sehr voraussehbar – Kluftinger, der immer schon ein wenig “exzentrisch” war, wird dieses Mal allerdings noch mehr zur Karikatur seiner selbst. Ein Waschversuch scheitert aufs Lächerlichste, Mama und Papa werden genüßlich manipuliert und der einzige Lichtblick, die neue Kollegin Luzia Beer, wird schnell “gefügig” geschrieben.

Alle Probleme werden im Nu gelöst und alle halbwegs interessanten Ansätze (Lucy Beer, Flüchtlingsschicksale) werden kaputt geschrieben oder gleich ohne echtes Interesse links liegen gelassen. Konflikte (z. B. Maier/Beer) bleiben verschwommen bzw. lösen sich ganz fix von selbst.

Einzig die wenigen ernsthaften Momente – zum Beispiel im Gespräch mit der Mutter des Opfers – sind noch lesenswert und glaubwürdig. Sie retten diese 500-Seiten-Peinlichkeit zwar auch nicht mehr, aber zumindest heben sie es vom grottigen 1-Sterne-Niveau auf zumindest wohlwollende zwei Sterne.





View all my reviews

I am and have been working on quite a few F/OSS projects: Exherbo (Nick: Philantrop), Bedrock Linux, Gentoo (Nick: Philantrop), Calibre plugin iOS reader applications, Calibre plugin Marvin XD, chroot-manager, stuff on github, lots of other projects. If you like my work, feel free to donate. 🙂

BlogGoodReadsLibraryThingFacebookTwitterInstagram

by Wulf at May 30, 2021 09:07 PM

May 25, 2021

Wulf C. Krueger

Project Hail Mary, by Andy Weir

Project Hail Mary by Andy Weir

My rating: 5 of 5 stars


Just when I thought Andy Weir was a “one-hit wonder” for his great and exciting “The Martian”, he comes along and writes something that completely blew away my mind.

“Project Hail Mary” is spectacularly well done, features even more “scientific vibes” and despite being deeply rooted in science fiction, everything in this book feels (shockingly) plausible and believable.

Earth is dying from climate change… Dr. Ryland Grace, a grumpy (ex-)scientist gone school teacher, is Earth’s last line of defense and her last hope. As part of the crew of the interstellar spaceship “Hail Mary”, tasked with finding a solution for the afore-mentioned climate change issue, Grace ships out into space.

How this came to be and Grace’s exploits in space are narrated alternatingly (mostly) between chapters. First, we learn how Grace wakes up after an induced coma and then – by witnessing his memory coming back in flashbacks – the book tells the entire story in two parallel but ultimately converging storylines.

Weir masterfully entwines the two storylines with each other and reveals piece by piece. He starts slow (»A teacher! I’m a schoolteacher! I remember it now!«), spins his story and material up to a riveting, amazing, fantastic middle part that dumbstruck me and comes furiously to a wonderful, brilliant, humane and alien ending.

“Project Hail Mary” was compelling, funny, made me laugh out loud at some points and sob and/or cry at others. Its broad angle of humour from the amusingly simple…

»I clench my teeth. I clench my fists. I clench my butt. I clench every part of me that I know how to clench. It gives me a feeling of control. I’m doing something by aggressively doing nothing.«

… to the subtle irony and sarcasm (examples omitted to avoid spoilers).

Grace is discernibly human: He is childish, yet serious. Realistic, yet optimistic. A selfish nerd, and optimistic scientist. In other words, he’s basically a good guy; nerdy, weird but a nice guy. Not as selfless maybe as he’d like (to imagine) at times… But maybe there’s hope for Grace yet…

Because he never loses his basic optimistic outlook (it may be impaired and buried at times) despite seemingly unbeatable odds and, ultimately, that’s what I believe in, too. That despite our Earth starting to die from climate change, we will eventually prevail.

»I bet they did work together. Maybe it’s just the childish optimist in me, but humanity can be pretty impressive when we put our minds to it. After all, everyone worked together to build the Hail Mary. That was no easy feat.«

Nor was it an easy feat to surpass “The Martian” and compose a masterpiece that’s even better. And yet, Andy Weir did it.
If you have even a tiny bit of a nerd inside you, if you like your science fiction somewhat plausible, if you’re not turned off by science – if any of that applies, go and read this book. It’s really, truly brilliant.

Six out of five stars. ♩♫♪♪♫



View all my reviews

I am and have been working on quite a few F/OSS projects: Exherbo (Nick: Philantrop), Bedrock Linux, Gentoo (Nick: Philantrop), Calibre plugin iOS reader applications, Calibre plugin Marvin XD, chroot-manager, stuff on github, lots of other projects. If you like my work, feel free to donate. 🙂

BlogGoodReadsLibraryThingFacebookTwitterInstagram

by Wulf at May 25, 2021 05:13 PM

May 14, 2021

Wulf C. Krueger

The Sun Down Motel, by Simone St. James

The Sun Down Motel by Simone St. James

My rating: 4 of 5 stars


It’s 1982 and Vivian “Viv” Delaney leaves her confining home to find fame and fortune in New York City. By chance, Viv ends up in Fell, New York, where she finds a job as a night manager at the eponymous Sun Down Motel.
At the end of November 1982, Viv disappears.

35 years later, in 2017, her niece, Carly Kirk, follows in Viv’s footsteps after the death of Carly’s mother, Viv’s sister. Carly also flees her overbearing brother, her college courses and her life in general, in pursuit of Viv whose fate she’s determined to discover.

Consequently, Carly, too, goes to Fell and also gets a job at the Sun Down Motel – as the night manager. She even moves into Viv’s old flat and proceeds to not only discover but experience the past…

The book switches (mostly from chapter to chapter) between Viv’s story in 1982 and Carly’s in 2017. While this is currently an often-used storytelling device which would usually distract and, potentially, annoy me, in this instance, it actually adds to the atmosphere of this book.

Its dense, chilling atmosphere, the late night setting (and weary days) is, in fact, one of the major selling points: It has been a long time since I actually lost sleep over a book because I wanted to read just one more chapter…

The writing is (mostly) subtle and elaborate, be it about a “featherlight click sound” or “the perfect, silent hush of night”. Most of all, though, I enjoyed the two converging stories of Viv and Carly who both come to realise not all is as peaceful as it seems in Fell.

I worried for both young women pretty much all the time – a run-down motel, at night, strange noises, the only guests a man who can’t sleep anywhere else, cheating spouses and a strange travelling salesman…

For the most part I was guessing what had happened to Viv and what might yet happen to Carly, both of whom I found very likeable. “The Sun Down Motel” read like a mystery thriller with a supernatural touch (which was, actually, the only part I did not really enjoy, especially not the part at the end…).

For the thrills it gave me, the sleep it stole and its satisfying writing, “The Sun Down Motel” gets four very much deserved stars from me.





View all my reviews

I am and have been working on quite a few F/OSS projects: Exherbo (Nick: Philantrop), Bedrock Linux, Gentoo (Nick: Philantrop), Calibre plugin iOS reader applications, Calibre plugin Marvin XD, chroot-manager, stuff on github, lots of other projects. If you like my work, feel free to donate. 🙂

BlogGoodReadsLibraryThingFacebookTwitterInstagram

by Wulf at May 14, 2021 12:08 PM

May 08, 2021

Wulf C. Krueger

Fugitive Telemetry (The Murderbot Diaries #6), by Martha Wells

Fugitive Telemetry by Martha Wells

My rating: 3 of 5 stars


I seem to be the odd one out but this new Murderbot novella simply didn’t work for me. At times, it felt very slow while, at other times, the story raced along – a very uneven pacing, unfortunately.

Mensah and the others hardly played any role and our beloved Murderbot pretty much acts as some random security consultant, trying to make sense of a murder.

Apart from the (here rather superficial) xenophobia aspects, all the moral aspects of the previous books in this series were largely neglected.

To be totally frank, most of the time I was actually bored reading this. Here’s to hoping for more than a “filler episode” next time and more exciting new adventures in the future.



View all my reviews

I am and have been working on quite a few F/OSS projects: Exherbo (Nick: Philantrop), Bedrock Linux, Gentoo (Nick: Philantrop), Calibre plugin iOS reader applications, Calibre plugin Marvin XD, chroot-manager, stuff on github, lots of other projects. If you like my work, feel free to donate. 🙂

BlogGoodReadsLibraryThingFacebookTwitterInstagram

by Wulf at May 08, 2021 05:39 PM

May 01, 2021

Wulf C. Krueger

Marrying Mr. Wrong (Dirty Martini Running Club #3), by Claire Kingsley

Marrying Mr. Wrong by Claire Kingsley

My rating: 3 of 5 stars


Oh, well, from the lofty heights of Obama’s presidential memoirs which I enjoyed, I went on to read this. I needed a short moment of pure escapism and easy-going reading: “Please excuse me for a moment while I disengage my brain!”

For that purpose, this novel worked well enough – albeit not perfectly but we’ll come to that.

Anyway, this is the third instalment of a loosely connected series about the romantic endeavours of a group of twenty-somethings (I guess). It started out well with Everly’s romance with her boss (Calloway) and now we’re reading about Sophie, Everly’s successor as Calloway’s personal assistant, who meets Camden Cox, a notorious womanizer.

Sophie and Cox end up in Vegas where they “accidentally” marry each other in a drunken stupor. The remainder of the book is – expectedly – about how they find out they don’t want a divorce.

The ensuing chaos is amusing enough; ok, everything is clichéd and rather simplistic but that was to be expected. Worse, though: Every single character feels like an exaggerated parody of themselves and whereas Sophie is fairly likeable, Cox is – for the most part – annoying.

This kind of machismo…

»Ever so gently, I backed us out of the parking spot. A man did not simply drive a supercar. A man had to coax it. Caress it. Make love to it from the driver’s seat and be respectful of its power.«

… and what it says about Cox’ ideas about women made me cringe. He constantly and unchangingly calls Sophie “sugar”. Uh… And she’s pretty much fluttering her eyelids at him, enjoying his manly attention…

So, while this book was still a funny romance, it was just a little too sappy, too simplistic and too clichéd for me to completely enjoy it and, thus, it only garners three out of five stars from me.





View all my reviews

BlogGoodReadsLibraryThingFacebookTwitterInstagram
I am and have been working on quite a few F/OSS projects:
  • Exherbo (Nick: Philantrop)
  • Gentoo (Nick: Philantrop)
  • Calibre plugin iOS reader applications
  • Calibre plugin Marvin XD
  • chroot-manager
  • stuff on github
  • Lots of other projects
  • If you like my work, feel free to donate. 🙂

    by Wulf at May 01, 2021 10:34 AM

    April 25, 2021

    Wulf C. Krueger

    A Promised Land, by Barack Obama

    A Promised Land by Barack Obama

    My rating: 5 of 5 stars


    Politics doesn’t have to be what people think it is. It can be something more.

    When Barack Obama started his rise to power, I felt hopeful but sceptical as well: Would America, of all nations, really elect a Black man as its president? And who was that guy anyway?

    As a German, I had been vaguely aware of Obama but I knew next to nothing about him. That would change over time but do little to alleviate my scepticism: Even if this guy was for real, even if he truly believed what he said about change and equality – would this man stay true to his ideals? Would the power he was seeking corrupt him?

    The first surprise came when he was actually elected as the next President of the United States of America. I became a little more hopeful. That was a powerful sign for the better – the first Afro-American president.

    Obama didn’t deliver on all his promises – Guantanamo Bay detention camp still exists today for example. And yet… Obama helped the world through a recession that could have been much worse. He made “Obamacare” reality. Obama helped further LGBT rights in America and all over the world.

    To me, personally, Barack Obama is an example for an honest, realistic but idealist politician. Thus, it was with some worry that I started reading the first part of his presidential memoirs, “A Promised Land”.

    Would I be disenchanted? Would Obama be honest? Had I been deluded about him? The answers to those questions are a resounding “No!”, “Yes!” and “No!” respectively.

    »Whatever vision I had for a more noble kind of politics, it would have to wait.«

    Obama tells us about his rise through the ranks and, to my relief, he might not always have acted as “cleanly” as I had hoped for but he mostly did. Obama is quite honest about it and he strives to be better.

    Throughout the entire 1.000 pages, Obama is not only honest about himself but fairly often self-deprecating and employing a dry humour:

    »I mean dumb choices in the wake of considerable deliberation: those times when you identify a real problem in your life, analyze it, and then with utter confidence come up with precisely the wrong answer.«

    From humble beginnings (»She [Michelle] reminded me that we had student loans, a mortgage, and credit card debt to think about.«), armed with the best intentions (»the best we can do is to try to align ourselves with what we feel is right and construct some meaning out of our confusion, and with grace and nerve play at each moment the hand that we’re dealt.«) Obama rises to the daily challenges during his political career and always keeps that “moral compass” close at hand to try and do what feels right.

    Obama obviously knew what was at stake because »I know that the day I raise my right hand and take the oath to be president of the United States, the world will start looking at America differently.«. And many of us did.

    It was Obama who paved the way for “a skinny Black girl” (Amanda Goreman, at Biden’s inauguration) to dream of becoming president. Even before Goreman recited that, Obama wrote: »I know that kids all around this country—Black kids, Hispanic kids, kids who don’t fit in—they’ll see themselves differently, too, their horizons lifted, their possibilities expanded. And that alone…that would be worth it.”«

    This book is testament to Obama’s efforts, his successes as well as his failures. On the down side, it’s long, often very “dry” and especially the deliberations about dealing with the financial crises were very extensive and, to me, too long.

    Most of the time, Obama is conciliatory towards his political opponents. At times, though, he is very outspoken about his feelings:

    »I wondered when exactly such a sizable portion of the American Right had become so frightened and insecure that they’d completely lost their minds.«

    Truth to be told, I’m not sure I’m going to read the next part of Obama’s memoirs, though: These one-thousand pages were – at times – the hardest “literary nut” I had to crack and I barely made it through the book.

    If you – like me – appreciate what Obama stands for and what he accomplished and “just” want to know if he was acting truthfully and honestly then, yes, I fully believe so after reading this. That gives me hope.

    The fact that America went on to elect the orange menace into office was a setback that might yet be balanced by President Biden and, potentially, the first female Afro-American president.

    Let’s hope together that Obama will keep playing a role in international politics because I truly believe we need more people like him, or, in Obama’s own words:

    »So long as young men and women like that exist in every corner of this earth, I told myself, there is reason enough to hope.«



    View all my reviews

    I am and have been working on quite a few F/OSS projects: Exherbo (Nick: Philantrop), Bedrock Linux, Gentoo (Nick: Philantrop), Calibre plugin iOS reader applications, Calibre plugin Marvin XD, chroot-manager, stuff on github, lots of other projects. If you like my work, feel free to donate. 🙂

    BlogGoodReadsLibraryThingFacebookTwitterInstagram

    by Wulf at April 25, 2021 04:19 PM

    March 30, 2021

    Wulf C. Krueger

    The Hill We Climb: An Inaugural Poem for the Country, by Amanda Gorman

    The Hill We Climb: An Inaugural Poem for the Country by Amanda Gorman

    My rating: 5 of 5 stars


    I’m German. I’ve never watched an inauguration of an American president. The one of today’s President Joe Biden was no exception even though I was hoping for something better than what had come before… (“It seems to me that I have been dreaming a horrid dream for four years, and now the nightmare is gone.”)

    Amanda Gorman’s amazing poem hit the German news very quickly, though, and I got curious and looked it up, watched Gorman perform it at the inauguration. It hit me unexpectedly hard; so hard, in fact, I cried.

    Her presentation was so powerful, emotional, touching and uplifting; representative – to me – of all that is right and just about the United States.

    Gorman envisions a country “committed To all cultures, colors, characters, And conditions of man” and while, of course, she primarily addresses the USA, she also spoke to the world and of the world.

    If we, the peoples of the world, made into reality in our countries what Gorman wishes for her own one, if we truly and honestly, sought “harm to none, and harmony for all” – regardless of gender, skin colour, sexual orientation, etc. – then, yes, then “We will raise this wounded world into a wondrous one.”

    Today, I was finally able to read the poem in its own ebook while simultaneously watching Gorman’s recitation which lent the experience further depth. Try for yourself: https://www.youtube.com/watch?v=Wz4Yu…




    View all my reviews

    I am and have been working on quite a few F/OSS projects: Exherbo (Nick: Philantrop), Bedrock Linux, Gentoo (Nick: Philantrop), Calibre plugin iOS reader applications, Calibre plugin Marvin XD, chroot-manager, stuff on github, lots of other projects. If you like my work, feel free to donate. 🙂

    BlogGoodReadsLibraryThingFacebookTwitterInstagram

    by Wulf at March 30, 2021 11:07 AM

    May 23, 2020

    Mike Kelly

    Minecraft Server on AWS

    To help make the current COVID-19-related social distancing a little less bad for my son, I’ve set up a private minecraft server for him to use with his friends.

    I could have just paid Mojang the $7.99/month for Realms, but I decided to use this as a learning exercise.

    So, I baked up an AWS CloudFormation template to spin up a minimal viable server.

    You can find the full template on its GitHub Project.

    In the designer, it looks like this:

    Template Designer View

    There’s just a few moving parts here:

    • An EC2 instance to run the server itself
    • A Security group to act as a firewall to limit access to it
    • An Elastic IP to keep a static IP for the server
    • A Route 53 record set, to point to the server (so I have a simple name to give to my son’s friends’ parents)
    • A custom record from the AWS Instance Scheduler, so that we can have the server stop automatically at bed time, and start up again the next day (saving cost as well as being a parental control of sorts)

    So, this stack has to be deployed along with the Instance Scheduler, and it assumes that you called that stack “instance-scheduler” (should probably parameterize that). But, hopefully this is useful to someone else.

    Some tasks to do in the future:

    • Get the server to update to the latest minecraft server automatically
    • Push some of the configuration into the template: right now, the template starts the EC2 instance but doesn’t auto-start the server. It’s expected that you’ll want to customize the server.properties before starting it the first time. Then, you can enable it with sudo systemctl enable minecraft-bedrock-server.service and start it with sudo systemctl start minecraft-bedrock-server.service

    by pioto at May 23, 2020 10:25 PM

    May 01, 2020

    Alexander Færøy

    Solving Binary Puzzles using Python and Z3

    In this article, we will be looking into how we can build a computer program for solving arbitrary Binary Puzzles using the Python programming language, and the Z3 Theorem Prover.

    Z3 is a Satisfiability Modulo Theories (SMT) solver made by Microsoft Research. It is cross-platform and is released under the MIT license. Z3 comes with a Python API that we will be using. Our goal is to encode the rules of the Binary Puzzle game in terms of mathematical equations that Z3 can comprehend. Once we have defined the rules of the game for Z3, we want to use it to solve any solvable Binary Puzzle for us or tell us if the puzzle is unsolvable.

    I enjoy number puzzles such as Sudoku and Binary Puzzles. For some reason, I always end up solving more Binary Puzzles than I solve Sudokus. Binary Puzzles are more straightforward than Soduku and are thus playable in a shorter amount of time. A Binary Puzzle can be played online from various websites or via applications that are available for both Android and iOS. Look in the application store on your preferred platform, and you will most likely have numerous implementations of this uncomplicated puzzle available to you. The example puzzles I use in this article are taken from BinaryPuzzle.com, which is my preferred website for playing the game in a web browser.

    Let us begin by having a closer look at the Binary Puzzle game before we begin implementing the solver in the Python programming language.

    Rules for Binary Puzzles

    The Binary Puzzle game consists of an NxN two-dimensional game grid with some cells pre-filled with either zero or one. The rest of the cells remains empty for us to fill in with either a zero or a one. The difficulty of the game can be tuned by adding or removing pre-filled values in the initial game state.

    The rules for the Binary Puzzle game are pretty simple: we must solve the puzzle using the following set of rules:

    1. Each cell must contain either a zero or a one.

    2. No more than two identical numbers are allowed immediately next to each other, both horizontally and vertically.

    3. Each row and each column must contain an equal amount of zeros and ones.

    4. Each row and each column must be unique.

    An observation we can make from the third rule is that the smallest possible game grid is 2x2, and each NxN two-dimensional game grid must make use of an even N value. The 2x2 game grid is also the only size of a game grid where the second rule does not have any influence on the game, and the second rule is thus ignorable for this particularly sized game grid.

    Example Game

    We begin with an easy 6x6 game grid with 14 pre-filled cells out a total of 36 cells. That is 38.9% of the game grid being pre-filled for us before we have even begun. This example game will hopefully allow us to build up some intuition about the game mechanics, and make it easier for us to understand the rules we need to implement using Python and Z3 later in the article.

    The initially pre-filled cells are the only cells that remain immutable throughout the game while we try to discover the value of each of the empty cells in the game grid. The pre-filled cell values are set in bold typeface in all of the visualizations in this article to make sure we do not unintentionally change any of them.

    The initial game grid looks as following:

    We look for the pattern where two identical numbers exist immediately next to each other either horizontally or vertically in the game grid. Once we have identified one or more identical pairs in the game grid, we know that the cells before and after the pair cannot share the same value as the pair itself because of the second rule of the game. We update the game grid with the new values:

    We continue the search for patterns in the updated game grid. We have created some new locations where two identical values are in a pair, which allows us to repeat the previous step.

    We can also look for a new pattern, which is when we have a horizontal or vertical triplet, where the content of the first and last cells are identical, and the middle cell is empty. Since we know from the second rule of the game that no more than two identical values are allowed immediately next to each other, we can deduct that the content of the middle cell in the triplet must be the opposite of the first and last value of the triplet. The game grid now looks as follows:

    We can now fill in the remaining three cells using a mixture of the second and the third rule of the game.

    Now that the game grid is complete, and no empty cells remain, we can verify that the game state satisfies each of the four rules. Each cell contains either a zero or a one. No more than two identical values are next to each other neither horizontally nor vertically. Each row and each column have an identical amount of zeros and ones. Finally, each row and column are unique.

    We have solved our first Binary Puzzle manually. We can now begin building a model of the game using Python and Z3.

    Building the Model

    The purpose of this article is to build a Python program that can solve arbitrary Binary Puzzles for us. We use the Z3 interface for Python to do “the hard labor” of this task, but we still need to describe the game rules to the Z3 solver before it can do anything useful for us.

    Before we start defining the Z3 model of the game, we need to define the representation of the game grid in Python. We use the same initial game grid as used in the example game above. In Python, we encode the game grid as follows:

    puzzle = [
        [1, N, N, 0, N, N],
        [N, N, 0, 0, N, 1],
        [N, 0, 0, N, N, 1],
        [N, N, N, N, N, N],
        [0, 0, N, 1, N, N],
        [N, 1, N, N, 0, 0],
    ]
    

    We represent the game grid as a list of lists of integers and N values in Python. The N value is defined as the Python value None and is used throughout this article to represent an empty cell. The task of the Z3 solver will be to eliminate any N values in the game grid and replace it with either a zero or a one.

    If we were to solve the puzzles without an engine like Z3, but using “pure” Python code, the naive approach would be to define several imperative steps that try to solve the game by eliminating the empty cells one by one.

    The way Z3 works is by us adding “constraints” or “assertions” that will make it possible for its built-in solver to solve the domain-specific problem that we are describing using our constraints. In this case, the Binary Puzzle game. Once we have added all of the game rules encoded as constraints to the Z3 solver, we ask it to come with a possible solution for us. Z3 will try to find a solution where all constraints are satisfied or otherwise notify us of its inability to solve the given puzzle.

    To implement the Binary Puzzle solver as “bug-free” as possible, we perform some initial input validation of the input puzzle to ensure that it is meaningful before we ask Z3 to try to do anything to it. We start by defining a Python value representing the size of our game grid. We call this variable size, and we define it as follows:

    size = len(puzzle)
    

    We want to ensure that the input puzzle is non-empty:

    if size == 0:
        raise InvalidPuzzleError
    

    We want to ensure that the game grid’s size value is an even number in accordance with the observation we made while going over the rules of the game:

    if size % 2 != 0:
        raise InvalidPuzzleError
    

    We want to ensure that the NxN input puzzle has the correct dimensions, and does not contain rows or columns of a different length than N. We verify this by ensuring that each row is size cells wide:

    for row in puzzle:
        if size != len(row):
            raise InvalidPuzzleError
    

    We want to ensure that each cell in the input puzzle contains either a zero, one, or the None value since no other values are allowed:

    for row in puzzle:
        for value in row:
            if value not in {0, 1, N}:
                raise InvalidPuzzleError
    

    Now that we have validated the input puzzle to avoid the worst mistakes, we can start constructing the Z3 solver for the puzzles.

    When we work with a constraint solver such as Z3, we do work with traditional programming concepts such as “variables,” but we do not assign values to them like we would in Python. Instead, we build up a set of equations that makes use of these variables, and then we ask Z3 to give us a result where all of the constraints are satisfied. If our input is impossible to solve because of violations of the game rules, Z3 will be unable to give us a solution, and the problem is considered unsatisfiable. However, if the problem is satisfiable, Z3 will have the correct value for each of our cells in the game grid.

    The symbolic variables we define for Z3 has no structure, such as rows and columns. Instead, we later define the structure using the equations we add to the solver.

    The first task we have to perform is to build a list of all possible x and y pairs we have in the game grid. We call these our “positions”:

    positions = [(x, y) for x in range(size) for y in range(size)]
    

    We can now create the symbolic variables used by Z3. Each symbolic variable must have a name, which we in Python can represent as a string value. The string value allows us to later identify the specific variable during debugging if that becomes necessary. We create a Python dictionary of (x, y) pairs as key, and the symbolic Z3 integer as value for each cell in our game grid:

    symbols = {(x, y): z3.Int("v{};{}".format(x, y)) for x, y in positions}
    

    We have now defined a symbolic variable for each cell in the 6x6 game grid. Each symbolic variable can now be looked up in our dictionary of symbols using its x and y value as the key. We also named the symbolic variables “v0;0”, “v0;1”, …, “v5;4”, “v5;5”, respectively. While we still have no structure for the symbolic variables, we can visualize the symbolic variables in the game grid in the way they will be used once we have build structure such as “rows” and “columns”:

    We do not have to inform the Z3 solver about the existence of each of the symbolic variables. Instead, the solver will learn about their existence as we use them in our constraints later in the article.

    The dictionary of symbols allows us to build two Python lists representing each row and each column in the game grid as lists of symbolic variables. The added structure will make it easier to implement the rules of the game in the next steps. We create the rows and columns lists in Python:

    rows = []
    columns = []
    
    for x in range(size):
        row = [symbols[x, y] for y in range(size)]
        rows.append(row)
    
    for y in range(size):
        column = [symbols[x, y] for x in range(size)]
        columns.append(column)
    

    To avoid unnecessary duplications in our source code, we also create a variable representing both the rows and the columns in the game grid as the rules of the game often apply to both:

    rows_and_columns = rows + columns
    

    We can now instantiate the Z3 solver which we will add the constraints of the game to:

    solver = z3.Solver()
    

    Since some cells are already pre-filled for us, we need to inform Z3 about the value of these cells. We do this by adding a constraint specifying the exact value of the given symbolic variable using the equality comparison operator in Python:

    for x, y in positions:
        value = puzzle[x][y]
    
        if value is N:
            continue
    
        solver.add(symbols[x, y] == value)
    

    An important detail to understand here is that even if we apply the equality comparison operator here, the Z3 variable overloads this operator. The operator overloading ensures that it is the expression we add to the solver and not the boolean result of Python comparing the symbolic variable with the content of the value variable for equality.

    Notice how we explicitly ignore the empty cells in our puzzle since the goal is to have Z3 fill those out for us.

    The first set of constraints directly related to the rules of the game will be coming from the first rule: all cells in the game grid must contain either a zero or a one. We add these constraints to all of the symbolic variables in the dictionary of symbols as follows:

    for symbol in symbols.values():
        solver.add(z3.Or([symbol == 0,
                          symbol == 1]))
    

    An example of a violation we could make now would be if our input game grid contained a value such as two, which would be a violation of the set of constraints we have added to the solver.

    The next constraints we add to the Z3 solver handles the third rule of the game and ensures that each row and each column have the same amount of zeros and ones. Instead of counting each zero and one in each row and column, we encode these constraints as the sum of each row, and each column must be equal to the size divided by two:

    for values in rows_and_columns:
        solver.add(z3.Sum(values) == size // 2)
    

    The constraints needed to check the uniqueness of each row and each column are slightly more complicated but required to implement the fourth rule of the game. For each row and column, we ensure that each other row or column does not contain the same values as the current row or column does. Remember that we pass the Z3 solver symbolic variables such that the Z3 solver will check the actual content of the variables when we execute the model. We implement these constraints in Python as follows:

    for lines in [rows, columns]:
        solver.add(z3.Not(z3.Or([z3.And([a == b for a, b in zip(line_a, line_b)])
                                                for line_a in lines
                                                for line_b in lines
                                                if line_a != line_b])))
    

    The final set of constraints we need to add to the Z3 solver are only necessary for all NxN game grids where N is greater than 2. These constraints implement the second rule of the game that says no more than two identical numbers are allowed immediately next to each other horizontally and vertically.

    We model these constraints using a set of “sliding windows” of three cells in each window of the game grid: each triplet must not contain three identical values in it. We can visualize the sliding window algorithm of three cells as follows:

    Implementing the sliding window constraints in Python looks as follows:

    if size > 2:
        for window in rows_and_columns:
            for i in range(size - 2):
                a, b, c = window[i:i + 3]
                solver.add(z3.Not(z3.And([a == b,
                                          b == c])))
    

    Another approach we could have taken here is to check each window if the sum of the three symbolic variables is equal to 0 or 3. However, using equality checks for these constraints seemed more intuitive to the author at the time of writing this.

    Using the Model

    We have now implemented all the game rules as mathematical equations for Z3 to be able to solve the puzzle, but first, we have to check the solver if the current constraints are “satisfiable”. We use the solver’s check() method to achieve this:

    if solver.check() != z3.sat:
        raise UnsolvablePuzzleError
    

    If the input puzzle contained a violation of some of the constraints, such as containing two identical rows, then the call to check() would fail, and we would raise an exception.

    Once we have run check() successfully, we can fetch the model that Z3 has created for the puzzle:

    model = solver.model()
    

    We can now query the model for the actual value of each of the symbolic variables stored in the dictionary of symbols. We build up a mapping between the cell positions, and the result of the evaluation of the symbolic variable:

    result = {position: model.evaluate(symbol) for position, symbol in symbols.items()}
    

    We can now compute the solution of the puzzle, and put it in a data structure equivalent to the input puzzle:

    solved_puzzle = [[result[x, y].as_long() for y in range(size)] for x in range(size)]
    

    If we visualize the solution from Z3, it will look as follows:

    We have successfully programmed the Z3 solver such that it can solve the 6x6 game grid for us, but we implemented all of the game rules such that they will work for any NxN game grid with an even N value. We have specified the rules of the game as a set of mathematical equations instead of specifying each step Python needs to take to solve the puzzle.

    It is much easier to write a validator for whether the game is correctly solved or not than it is to solve the game itself. However, we will skip the details of the validator implementation in this article.

    Puzzles with Higher Difficulty

    Let us have a look at how the solver handles a more difficult input puzzle. We change the input puzzle to be a 14x14 game grid instead of the example 6x6 game grid. In the new puzzle, only 45 out of 196 cells (23.0%) are pre-filled for us, making this game much harder than the example game where 38.9% of the cells were pre-filled. The new game grid looks as follows:

    The Z3 solver can solve this puzzle in around 2.5 seconds on the author’s 2.6 GHz Intel i7 desktop computer from 2016. The result seems to be correct. The solution looks as follows:

    Unsatisfiable Puzzles

    An interesting detail that is worth including here is what happens if we ask Z3 to solve an impossible puzzle. With the rules encoded as a set of mathematical equations, we could try to build an input puzzle that passes the initial input validation but would be unsatisfiable.

    One of the most trivial puzzles we can construct that is unsatisfiable and passes the input validation is this 2x2 game grid for which no possible solution exists under the rules of the game:

    This game grid will be a violation of the third rule of the game whereby each row, and each column, must contain the same number of zeros and ones if we try to solve it by filling in the two empty cells. Additionally, both rows of this game would be identical, which is a violation of the fourth rule of the game. Because of these violations, this puzzle will be unsatisfiable. Passing this puzzle to the solver will make our program throw an “Unsolvable Puzzle Error” exception.

    Conclusion

    Exploring Z3, together with the Python programming language, has been a fun learning exercise. I could see myself use Z3 to solve various real-world problems that I have historically relied on implementing manual solutions crafted by hand to solve. Changing my mindset from trying to solve the specific problem by hand over to modeling the problem in a declarative way is entertaining and something I wish I could make use of more often in my daily life as a programmer.

    If you are interested in learning more about using Z3 together with the Python programming language, I suggest you take a look at the excellent Programming Z3 guide by Nikolaj Bjørner, Leonardo de Moura, Lev Nachmanson, and Christoph Wintersteiger from Microsoft Research.

    The source code for the Binary Puzzle solver, we implemented in this article, is available from Github. The source code is published under the BSD 2-Clause license.

    May 01, 2020 12:00 AM

    November 25, 2019

    Danilo Spinella

    Devember 2019: Rewriting 66

    Prerequisites: Basic knowledge of a Unix system architecture; init diversity initiative.

    Devember1 it’s coming and for this year (which is also my first year participating) I’ve chosen something really close to me: the init and service manager (called init/rc for the rest of the post). Specifically I’ve chosen to rewrite 66 from scratch.

    Notes: In the following paragraphs there is an explanation of what led me to rewrite 66. I was planning to explain this from some time and I’ve taken to opportunity to do so now. If you are only interested in the program itself and what I’ll do in this Devember, skip to development.

    Why?

    Regardless of whatever “sytemd sucks”23 or not, I want to have an alternative to it. I want to be able to have at least some choiches for what runs on my system, especially when we talk about critic programs such as PID 1 and the service manager.

    The alternatives currently availables (OpenRC, runit) do not offer the advantages of systemd or have some big disadvantage that do not make their use straightforward. This does not involve the design (which have been already covered in deep by skarnet here4) but only usability. Yup, I am really picky regarding the programs to use.

    s6/s6-rc

    At the start of the 2018 I’ve learnt about s6 suite5 and s6-rc6. I wanted to try them on my newly installed Exherbo Linux system, so I have adapted the example services to run on my machine. Thanks to the help of the #s6 official IRC channel the system finally run s6/s6-rc and it was great; at boot it started all the services asynchronously and showed a working tty in the blink of an eye.

    I’ve liked it so much that I stared contributing to the integration of s6 into exherbo. It consisted in s6-rc services for the various packages and a sane set of starting scripts to have a working system (called s6-exherbo7). My small VPS I configured at the time even got s6 on it.

    With the time passing I’ve found the service writing and administration to be really time consuming. And that’s because it has not a user friendly interface, thus it was not made for what me (and some other users) were using it. And here it comes s6-frontend, the user interface not written yet. Skarnet has recently confirmed that he will write it in the 2021 so it won’t be ready any time soon.

    66

    Exherbo was not the only distribution adopting s6 and and among the other ones there was obarun8, developed by the omonimus creator as a fork of Arch Linux. He, too, wrote a lot of wrapper scripts to ease the use of the s6 suite, but in the end he resorted to writing his own frontend, called 669. Obarun (the distribution) was converted for 66 as soon as a working release got out.

    On the other hand there was me who became an early adopter the moment I looked at the documentation9: it simply resolves almost all my issues of s6/s6-rc without any major disadvantage. It is easy to use, powerful and extensible.

    So far, s6-exherbo got immediately forked into 66-exherbo10 and the old services converted to the new frontend format. Devuan too got his own 66-devuan11, which took me more than it should have had. If you are curious about the reason, 66’s developer did not want to support FHS12 in his general set of starting scripts, because he did not like this standard. In the end he accepted my patches and Devuan booted using 66.

    Service enabling on Exherbo with system version of 66 suffered from a bug (Hello SIGSEGV, long time no see) and it was unusable; to make the matter worse, the bug could not be reproduced with a local copy. The developer had something else on his schedule (writing a new command-line arguments parser, apparently) and did not want to fix the bug. “I can fix it myself”, I thought: I was wrong.

    66 codebase consists of 16000 lines with little to no comments, and it makes heavy use of skalibs13 and oblibs14 libraries, greatly lowering the readability (I’d like to say it is written in skarnet’s C). Downgrade wasn’t an option neither due to a breaking change in services and the various services in Exherbo already got updated. I could not find the bug, I could not enable new services and the developer did not care to fix this fatal bug. Devuan too was failing to build 66. There was enough reasons for me to fork the project and improve it, adding unit testing and have better code quality.

    Now that I had the possibility, I could also rewrite it from scratch, picking different choiches from the start and avoiding the legacy code.

    Note: I really like 66 project but it simply isn’t what I am searching for. I wish the best to obarun with both 66 and his distribution, for which he have worked years trying to offer a valid systemd and Arch Linux alternative.

    tt

    tt (which should have been 77 or t7 but I don’t like numbers in binaries names, if not strictly necessaries) is a wrapper, or better, a frontend to s6/s6-rc.

    A bit about its development:

    Written in D

    The suited languages for such a project are C, C++, Rust and D. C is the fastest if used correctly; but it’s really hard to get right and requires developers to rewrite a lot of stuff (or use libs like glib or skalibs). C++ is hard and share some problem with C, I prefer to not use if I have a choiche. Rust has a microdependency ecosystem and it is hard to use C libraries as well as exposing C bindings. On the other hand, D seems suited for such a project: it is safer than C, has a GC, and it is relatively fast to write, while keeping a good performance and high flexibility.

    Use C or C++ libs

    D community is not very active, so many libraries have been abandoned and the maintained ones could still have the same ending in the future. To avoid such a possibility, I have chosen to only use C/C++ libraries (way more tested and actively maintained), since Dlang makes them easy to use.

    Provide external C bindings

    tt will have a library and a command-line interface. In the long-term there could be additional command lines interfaces, plugins or GUI programs to administrate the system from; it is important for me to expose a C interface so that any language could be used (after all almost every language permits to call C functions).

    Try to not reinvent the wheel

    To get a working service manager as soon as possible, complex tasks will be achieved using external libraries (like parsing the services files). Reinventing the wheel is good for learning purposes, but increase the development and testing time too much for my tastes. Therefore I will try to keep it to a minimum.

    Features

    These are 669’s features, which tt will keep closely to.

    • Frontend service files declaration.
    • Backup a complete set of services.
    • Easy creation of a scandir.
    • Nested supervision tree.
    • Instance service file creation.
    • Multiple directories service file declaration(packager,sysadmin,user).
    • Easy change of service configuration.
    • Automatic logger creation.
    Sane defaults

    The most important thing is to make the pc boot, whatever the conditions. The users and the distribution maintainers should do the least work possible. Providing sane defaults and sane fallback helps in this matter. For example stage1 should work regardless if the initramfs has been used or not (and this didn’t happen in 66 until recently).

    About the libaries used, I have to try them so I’ll problably post more details in the next weeks.


    1. https://devember.org/ ↩︎

    2. https://skarnet.org/software/systemd.html ↩︎

    3. https://suckless.org/sucks/systemd/ ↩︎

    4. https://skarnet.org/software/s6/why.html ↩︎

    5. https://skarnet.org/software/s6/ ↩︎

    6. https://skarnet.org/software/s6-rc/ ↩︎

    7. https://gitlab.exherbo.org/exherbo-misc/s6-exherbo ↩︎

    8. https://web.obarun.org/ ↩︎

    9. https://web.obarun.org/software/66/ ↩︎

    10. https://gitlab.exherbo.org/exherbo-misc/66-exherbo ↩︎

    11. https://git.devuan.org/66-devuan ↩︎

    12. https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard ↩︎

    13. https://skarnet.org/software/skalibs/ ↩︎

    14. https://framagit.org/obarun/oblibs ↩︎

    November 25, 2019 02:15 PM

    December 31, 2018

    Danilo Spinella

    Announcing Exherbo subreddit

    I am delighted to announce the opening of the unofficial Exherbo subreddit1! You can discuss topic relavant to the distro, take up any problem that you have encountered or share your thoughts and setups.

    Note that Exherbo development takes place on our Gitlab instance2 and the critical discussions still happen on #exherbo IRC channel on Freenode3.

    Furthermore, distro documentation4 is currently under reorganisation, and we encourage you to open an issue (or even better a Merge Request!) telling us which parts you don’t find and which parts are hard to grasp.

    Stay tuned for more Exherbo development in 2019, like the introduction of 66 init and rc manager5.


    1. https://www.reddit.com/r/exherbo/ ↩︎

    2. https://gitlab.exherbo.org ↩︎

    3. https://freenode.net ↩︎

    4. https://exherbo.org/docs ↩︎

    5. http://repo.obarun.org/66/ ↩︎

    December 31, 2018 03:00 PM

    June 13, 2018

    Mike Kelly

    Wunderground Datacollection in OpenNMS

    I’ve become a fan of OpenNMS as a general purpose monitoring and datacollection platform.

    It has a lot of “enterprise” features that I don’t need for most of my personal stuff, but (IMHO) it does a better job of doing basic service monitoring, performance metric collection, etc than things like Nagios (or other hacks I’ve made in the past).

    One thing I’ve done with it is start to collect my local weather data, so that I can graph it side-by-side with data pulled from my thermostat, etc.

    Unfortunately, the Weather Underground API is no longer free (“as in beer”) no longer available, but hopefully this serves as an example of the sort of stuff you can do with OpenNMS.


    OpenNMS is able to collect data from a number of sources, including SNMP, and basically anything you get fetch over HTTP.

    To get data from Wunderground, we’ll use the XmlCollector. Despite its name, it can also work with JSON, though in this case, Wunderground gives us XML anyways.

    We need to update collectd-configuration.xml with two new parts:

       <package name="wunderground-conditions" remote="false">
          <filter>IPADDR != '0.0.0.0'</filter>
          <include-range begin="1.1.1.1" end="254.254.254.254"/>
          <include-range begin="::1" end="ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"/>
          <service name="Wunderground-Conditions" interval="300000" user-defined="true" status="on">
             <parameter key="collection" value="wunderground_conditions_home"/>
             <parameter key="handler-class" value="org.opennms.protocols.xml.collector.DefaultXmlCollectionHandler"/>
          </service>
       </package>
       <!-- ... -->
       <collector service="Wunderground-Conditions" class-name="org.opennms.protocols.xml.collector.XmlCollector"/>
    

    This tells OpenNMS that, if we have a node configured with the “Wunderground-Conditions” service, it should trigger this datacollection.

    Next, we need to add some specific configuration for the XmlCollector, in xml-datacollection-config.xml:

        <xml-collection name="wunderground_conditions_home">
            <rrd step="300">
                <rra>RRA:AVERAGE:0.5:1:2016</rra>
                <rra>RRA:AVERAGE:0.5:12:1488</rra>
                <rra>RRA:AVERAGE:0.5:288:366</rra>
                <rra>RRA:MAX:0.5:288:366</rra>
                <rra>RRA:MIN:0.5:288:366</rra>
            </rrd>
            <xml-source url="http://api.wunderground.com/api/YOURAPIKEY/conditions/q/SOMEWHERE/Outthere.xml">
                <import-groups>xml-datacollection/wunderground.xml</import-groups>
            </xml-source>
        </xml-collection>
    

    Here, the “name” of the collection matches up with the paramter we defined in the Collectd config.

    If you’re lucky enough to still have a Wunderground API key, you just need to put it in place of YOURAPIKEY above, and change the rest of the query to be something like /conditions/q/NY/New_York.xml.

    That tells OpenNMS where to get the data from, but we still need one more file to tell it how to parse the data, and decide what to store. We put that in xml-datacollection/wunderground.xml (the import-groups entry above):

    <xml-groups>
       <xml-group name="wunderground_conditions" resource-type="node" resource-xpath="/response/current_observation">
          <xml-object name="temp_c" type="GAUGE" xpath="temp_c"/>
          <xml-object name="temp_f" type="GAUGE" xpath="temp_f"/>
          <xml-object name="UV" type="GAUGE" xpath="UV"/>
          <xml-object name="dewpoint_c" type="GAUGE" xpath="dewpoint_c"/>
          <xml-object name="dewpoint_f" type="GAUGE" xpath="dewpoint_f"/>
          <xml-object name="feelslike_c" type="GAUGE" xpath="feelslike_c"/>
          <xml-object name="feelslike_f" type="GAUGE" xpath="feelslike_f"/>
          <xml-object name="heat_index_c" type="GAUGE" xpath="heat_index_c"/>
          <xml-object name="heat_index_f" type="GAUGE" xpath="heat_index_f"/>
          <xml-object name="precip_1hr_in" type="GAUGE" xpath="precip_1hr_in"/>
          <xml-object name="precip_1hr_metric" type="GAUGE" xpath="precip_1hr_metric"/>
          <xml-object name="precip_today_in" type="GAUGE" xpath="precip_today_in"/>
          <xml-object name="precip_today_metric" type="GAUGE" xpath="precip_today_metric"/>
          <xml-object name="pressure_in" type="GAUGE" xpath="pressure_in"/>
          <xml-object name="pressure_mb" type="GAUGE" xpath="pressure_mb"/>
          <xml-object name="visibility_km" type="GAUGE" xpath="visibility_km"/>
          <xml-object name="visibility_mi" type="GAUGE" xpath="visibility_mi"/>
          <xml-object name="wind_degrees" type="GAUGE" xpath="wind_degrees"/>
          <xml-object name="wind_gust_kph" type="GAUGE" xpath="wind_gust_kph"/>
          <xml-object name="wind_gust_mph" type="GAUGE" xpath="wind_gust_mph"/>
          <xml-object name="wind_kph" type="GAUGE" xpath="wind_kph"/>
          <xml-object name="wind_mph" type="GAUGE" xpath="wind_mph"/>
          <xml-object name="windchill_c" type="GAUGE" xpath="windchill_c"/>
          <xml-object name="windchill_f" type="GAUGE" xpath="windchill_f"/>
    
          <xml-object name="display_location" type="String" xpath="display_location/full"/>
       </xml-group>
    </xml-groups>
    

    That should “just work” for any Wundergroud location, and should tell OpenNMS to hold on to basically all of the numeric values I saw in the results. All of that get stored in your time series database of choice (JRobin, RRDtool, or Newts).

    It also holds onto the “display_location” string (just the latest value), which you can use to help give a more meaningful label to your graphs.

    Finally, we’ll want to build a pretty graph to show that our datacollection is working:

    reports=wunderground.conditions.temp
    
    report.wunderground.conditions.temp.name=Temperature
    report.wunderground.conditions.temp.columns=temp_f,feelslike_f,dewpoint_f
    report.wunderground.conditions.temp.type=nodeSnmp
    report.wunderground.conditions.temp.command=--title="Temperature" \
      --vertical-label="Degrees F" \
      DEF:temp_f={rrd1}:temp_f:AVERAGE \
      DEF:feelslike_f={rrd2}:feelslike_f:AVERAGE \
      DEF:dewpoint_f={rrd3}:dewpoint_f:AVERAGE \
      LINE2:temp_f#00ff00:"Temperature " \
      GPRINT:temp_f:AVERAGE:"Avg \\: %10.2lf" \
      GPRINT:temp_f:MIN:"Min \\: %10.2lf" \
      GPRINT:temp_f:MAX:"Max \\: %10.2lf\\n" \
      LINE2:feelslike_f#ee42f4:"Feels Like  " \
      GPRINT:feelslike_f:AVERAGE:"Avg \\: %10.2lf" \
      GPRINT:feelslike_f:MIN:"Min \\: %10.2lf" \
      GPRINT:feelslike_f:MAX:"Max \\: %10.2lf\\n" \
      LINE2:dewpoint_f#42e8f4:"Dewpoint    " \
      GPRINT:dewpoint_f:AVERAGE:"Avg \\: %10.2lf" \
      GPRINT:dewpoint_f:MIN:"Min \\: %10.2lf" \
      GPRINT:dewpoint_f:MAX:"Max \\: %10.2lf\\n"
    

    That gets you a pretty little graph, like this:

    Sample Weather Graph

    Updated 2019-03-06: note that the Wunderground API appears to be really and truly dead.

    by pioto at June 13, 2018 12:54 AM

    January 30, 2018

    Danilo Spinella

    Termish = malloc(255 * size)

    This is the preface for a series of post on terminal apps, called Termish.

    But why?

    I love staying in the terminal. A lot of things are faster to do and I don’t have to move my hands away from keyboard every now and then.

    The problem is: we don’t always have the right tool to use. Plus, a lot of goodies don’t have visibility. We will explore these programs covering a great range of categories, including a usage example for each one.

    As an Exherbo user, all the programs discussed will be available, so you can test them out. Also, fellow users will add these packages in Gentoo and Sabotage. I bet that the AUR already have them all.

    Please, feel free to comment and propose apps on Mastodon and Reddit, where all the articles will be posted.

    In the meanwhile…take this nyancat.

    January 30, 2018 11:07 PM

    Termish = malloc(255 * size)

    This is the preface for a series of post on terminal apps, called Termish. But why? I love staying in the terminal. A lot of things are faster to do and I don’t have to move my hands away from keyboard every now and then. The problem is: we don’t always have the right tool to use. Plus, a lot of goodies don’t have visibility. We will explore these programs covering a great range of categories, including a usage example for each one.

    January 30, 2018 11:07 PM

    September 16, 2016

    Mike Kelly

    First Post in Foreverz

    It’s been a while since I’ve made any blog posts…

    Here’s a quick update since the last time:

    • I've changed jobs twice.
    • I've had a bunch of kids.

    I also switched everything (both blog and website) over to a Jekyll site about… 2 years ago.

    I don’t have the time to contribute as much to open source as I used to, but here’s a little tidbit.

    Deploying a Jekyll Blog to a Traditional Web Host, using GitLab CI

    I’ve been using GitLab at work for a while now, and it’s grown on me. I’ve recently managed to get my entire website fully deployed by GitLab, both to a staging area with their Pages tool, and to my ‘ole reliable pair Networks hosting account.

    I still have to audit my repo before I can make it fully public, but here’s the .gitlab-ci.yml I’m using:

    # This file is a template, and might need editing before it works on your project.
    # Full project: https://gitlab.com/pages/jekyll
    image: ruby:2.3.1
    
    before_script:
      - bundle install
    
    test:
      stage: test
      script:
      - bundle exec jekyll build -d test
      artifacts:
        paths:
        - test
      except:
      - master
    
    pages:
      stage: deploy
      environment: staging
      script:
      - bundle exec jekyll build -b /pioto-org -d public
      artifacts:
        paths:
        - public
      only:
      - master
    
    production:
      stage: deploy
      environment: production
      when: manual
      variables:
        JEKYLL_ENV: production
      before_script:
      - bundle install
      - apt-get update && apt-get install -y rsync
      - umask 0077 && mkdir -p /root/.ssh
      - umask 0047 && echo "${PROD_KNOWN_HOSTS}" >> /root/.ssh/known_hosts
      - umask 0077 && echo "${PROD_DEPLOY_KEY}" > /root/.ssh/id_rsa
      script:
      - bundle exec jekyll build -d public
      - rsync -crvz --delete-after --delete-excluded public/ "${PROD_USERNAME}@${PROD_HOSTNAME}:"
      artifacts:
        paths:
        - public
      only:
      - master
    

    Here’s basically how this works:

    • There’s a basic “test” job, which just confims that everything can actually be built.
    • There’s a “pages” job, which is how things get deployed to GitLab Pages. Every commit on the master branch goes there automatically.
    • There’s a “production” job, which is where the magic happens to deploy my site live:
      • Before the build, we make sure we have rsync, and set up the ssh keys needed for the deploy. The contents of the key files are stored as secure variables.
      • We build with the correct baseurl setting.
      • We build with JEKYLL_ENV=production, so that things like Google Analytics get wired in.
      • We use rsync (with rrsync set up on the other end) to deploy the site.

    by pioto at September 16, 2016 05:59 AM

    April 04, 2015

    Ciaran McCreesh

    Paludis 2.4.0 Released

    Paludis 2.4.0 has been released:

    • Bug fixes.
    • We now use Ruby 2.2, unless –with-ruby-version is specified.

    by Ciaran McCreesh at April 04, 2015 11:55 AM

    October 01, 2014

    Ciaran McCreesh

    Paludis 2.2.0 Released

    Paludis 2.2.0 has been released:

    • Bug fixes.
    • Compilation fixes for Clang.
    • Added ‘cave resolve –chroot-path’.
    • Removed the “breaks Portage” feature.

    by Ciaran McCreesh at October 01, 2014 06:05 PM

    February 23, 2014

    Bryan Østergaard

    So I was dox'ed yesterday

    and nobody gives a fuck.

    Here's the associated spam:
    14:53 < ~dd0sb0ss> rip
    14:53 < ~dd0sb0ss> PARTY AT Vølundsgade 31, 3. th. 2200 København N
    14:53 < ~zsasz> ur unicode is broken dd0sb0ss
    14:53 < ~dd0sb0ss> fuq
    14:54 < ~dd0sb0ss> THE OFFICIAL FREENODE PARTYLINE IS REACHABLE AT +4533137886
    14:54 -!- dd0sb0ss was kicked from #freenode by kloeri_ [dd0sb0ss]

    Ignoring the broken unicode that's actually the correct information. Well done on finding this information that has been publically available (by my own choice) for several years.

    It's never been hard to find me and that's not changing in the future just because of some silly kids either. Unlike these kids I'm actually proud of what I do and I'm more than happy to stand by my actions with my real name and even address widely available.

    And for all those sensible people out there just shaking your heads at this sillyness - you're welcome to visit, especially if you are interested in open source software or need a consultant on some project :) I'd suggest contacting me by email first though.

    PS. Thanks to GNAA for this obvious advertising opportunity.

    by kloeri at February 23, 2014 08:49 PM

    October 13, 2013

    Ciaran McCreesh

    September 14, 2013

    Alexander Færøy

    Enhancing SSL Security for IRC: DANE Support

    A couple of weeks ago, I had a discussion with some of the Quakenet coders on how to add SSL support to their IRC daemon, but the discussion ended up being about the false sense of security that SSL potentially can give to the user. The Quakenet hackers have an interesting article online about their thoughts on the matter and while I do understand their points, I do not agree with it being a good enough reason to completely avoid SSL on your IRC network.

    We quickly changed the discussion to be about how the IRC clients should be able to verify that the SSL certificate, received from the server, is not a malicious certificate from someone doing MITM attacks. This was not the discussion I had hoped for, but nevertheless, it was an interesting discussion to participate in and made me spend a few days thinking about their concerns.

    Sadly, as it is today, some IRC clients, including Irssi, only do full SSL certificate validation as an opt-in option (via the -ssl_verify option for /connect in Irssi’s case) rather than having it as an opt-out option, which would be ideal. This is simply because people in the IRC community have historically not wanted to spend money on certificates from the so called “trusted” Certificate Authorities like we have seen on the web. Changing this from opt-in to opt-out is something that I would like to see happen, but it is not something that is going to be easy. We saw how many web sites got a “proper” certificate after the Mozilla guys made it slightly harder to actually mark a self-signed certificate as trusted. This was at first a very annoying move, but these days we rarely see self signed certificates when we browse around the web.

    A few days after the discussion on IRC, I was having dinner at Thomas‘s place and I mentioned the discussion with the Quakenet hackers. Thomas knows a lot about security, privacy and DNS, and he is an avid Quakenet user, so it appeared more than obvious to take the discussion with him and hear what his take to the problem was. His suggestion was to take a look at DNSSEC and DANE and see if that could be used as a possible solution.

    Luckily for me, it was exactly what I was looking for.

    A few days after the dinner conversation, I pushed a patch to Irssi’s source code repository that enabled support for DANE validation of SSL certificates.

    Let’s have a look at how DANE works. This will hopefully give you enough knowledge to understand the basics of what is going on. I will document how to compile Irssi with DANE support enabled and test whether it works or not.

    What is DANE?

    DANE is an acronym for “DNS-Based Authentication of Named Entities” and comes with a protocol named TLSA. DANE is an internet standard and you can read the full technical specification of DANE in RFC6698, but hopefully, this article will give you an introduction to get started using DANE for your IRC servers right away. The concepts are totally protocol agnostic so this will work for other protocols than IRC as well, but it does require modification to the client software to work.

    DANE is a simple way of storing information about a certificate in the DNS system. Adding DNSSEC on top of the cake, gives you a very powerful way of validating certificates where the client relies on a trusted source (their ISP’s DNS server and DNSSEC) validating the information from the possibly eavesdropped IRC server.

    DANE is implemented as a new DNS resource record named TLSA. You can see an example of such record here from our test IRC server linked to the IRCsource IRC network:

    $ dig TLSA _6697._tcp.ircsource.baconsvin.org
    
    ; <<>> DiG 9.8.3-P1 <<>> TLSA _6697._tcp.ircsource.baconsvin.org
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38406
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 9
    
    ;; QUESTION SECTION:
    ;_6697._tcp.ircsource.baconsvin.org. IN TLSA
    
    ;; ANSWER SECTION:
    _6697._tcp.ircsource.baconsvin.org. 3358 IN TLSA 3 0 1 9B954A014881108A9058DB80020909FFD8B4C44C6F41C8796B3A1EA4 3A444B94
    
    ;; AUTHORITY SECTION:
    baconsvin.org.      50607   IN  NS  ns1.gratisdns.dk.
    baconsvin.org.      50607   IN  NS  ns5.gratisdns.dk.
    baconsvin.org.      50607   IN  NS  ns3.gratisdns.dk.
    baconsvin.org.      50607   IN  NS  ns2.gratisdns.dk.
    baconsvin.org.      50607   IN  NS  ns4.gratisdns.dk.
    
    ;; ADDITIONAL SECTION:
    ns1.gratisdns.dk.   7417    IN  A       109.238.48.13
    ns1.gratisdns.dk.   36319   IN  AAAA    2a02:9d0:3002:1::2
    ns2.gratisdns.dk.   25447   IN  A       185.10.10.53
    ns3.gratisdns.dk.   31182   IN  A       194.0.2.6
    ns3.gratisdns.dk.   28269   IN  AAAA    2001:678:5::6
    ns4.gratisdns.dk.   31182   IN  A       87.73.3.3
    ns4.gratisdns.dk.   28269   IN  AAAA    2a01:558:4000::3
    ns5.gratisdns.dk.   25447   IN  A       85.17.221.46
    ns5.gratisdns.dk.   28269   IN  AAAA    2001:6f8:3ad::1
    
    ;; Query time: 55 msec
    ;; SERVER: 89.233.43.71#53(89.233.43.71)
    ;; WHEN: Sat Aug 10 13:16:23 2013
    ;; MSG SIZE  rcvd: 393
    

    Note: If your version of dig doesn’t recognize the TLSA type, you can easily replace it with TYPE52 like this: dig _6697._tcp.ircsource.baconsvin.org TYPE52.

    Notice how the port, 6697, and protocol, TCP, is part of the DNS query. This will be familiar for people who have worked with SRV DNS records.

    The interesting part of the output is the answer section where you see the following:

    3 0 1 9B954A014881108A9058DB80020909FFD8B4C44C6F41C8796B3A1EA4 3A444B94
    

    What does all of this mean?

    Let’s start out by looking at the format. The format for a TLSA reply is as following:

    <certificate usage> <selector> <matching type> <certificate association data>
    

    This means that our certificate usage field is 3, our selector is 0 and our matching type is 1. The associated data is the string "9B954A014881108A9058DB80020909FFD8B4C44C6F41C8796B3A1EA4 3A444B94".

    It is important to understand the semantics of these fields, because they will dictate how and if the client is going to do further validation of the certificate once the client has received it from the IRC daemon.

    Using 3 0 1 means that we are using a self-signed certificate and we will rely on DANE for validating the certificate only (3); that we are using the full certificate and not just the SubjectPublicKeyInfo part (0) and we will be using a hexadecimal encoded SHA256 hash of the DER-encoded certificate (1).

    To fully understand the various options available, I suggest you take a look at RFC 6698 section 2.1.

    Enable DANE Support for your IRC Server

    The first step you will have to take is to ensure that whoever runs your DNS servers supports both DNSSEC and TLSA records. In Denmark, a lot of users are using the free DNS hosting provider GratisDNS. GratisDNS supports both DNSSEC and TLSA records which makes setting this up a lot easier.

    Sadly, GratisDNS’ interface is currently only available in Danish, so you might have to look for other solutions available online.

    Once you have a DNS provider that supports DNSSEC and TLSA records, it is fairly easy to create the records. In our example, the following assumptions are made:

    1. You already have an IRC daemon running with SSL enabled on port 6697 and you have verified that it actually works as expected.

    2. Your certificate is self-signed, so you would like to rely on DANE support only for the validation. This means that the user will not see any self-signed certificate errors when connecting with certificate validation enabled.

    3. We will create a record using a SHA-256 hash of the certificate data. Feel free to use something stronger, if you are more crypto paranoid than I am.

    This means that our TLSA record will end up looking something similar to this:

    _6697._tcp.irc.example.org TLSA 3 0 1 <SHA-256 hash of the certificate data>
    

    This is basically going to be a description of the exact same setup that I am using for ircsource.baconsvin.org.

    To find the SHA-256 value of your certificate, start by logging onto the server running the IRC daemon and find the directory that contains your certificate files. We are then going to find the SHA-256 value of the DER representation of our certificate:

    $ openssl x509 -in ircsource.baconsvin.org.pem -outform DER | sha256sum
    9b954a014881108a9058db80020909ffd8b4c44c6f41c8796b3a1ea43a444b94  -
    

    This is the value we will be using in our final TLSA record, which now looks like the following:

    _6697._tcp.irc.example.net TLSA 3 0 1 9b954a014881108a9058db80020909ffd8b4c44c6f41c8796b3a1ea43a444b94
    

    Once you have added this record to your DNS zones, it is now time to actually test whether it works as expected.

    Building Irssi with DANE Support

    This part is tested on FreeBSD 9.2-PRERELEASE. Hopefully, it works for other people as well. Feel free to report any issues you may experience.

    1. Download the dnsval tarball from its download page. This is quite new software so I haven’t run into many distributions that have packages available, so we will assume that we have to compile it ourselves.

       $ mkdir dane
       $ cd dane
       $ fetch http://www.dnssec-tools.org/download/dnsval-2.0.tar.gz
       $ tar zxfv dnsval-2.0.tar.gz
       $ cd dnsval-2.0
       $ ./configure --prefix=/usr/local
       $ make
       $ sudo make install
      
    2. Next we will download the Irssi source code from the Git repository. We start by cloning the repository into our newly created dane directory:

       $ cd dane
       $ git clone git://git.irssi.org/irssi
       $ cd irssi
      
    3. We bootstrap the build system:

       $ sh autogen.sh
      
    4. We configure our test Irssi client:

       $ CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure --enable-dane --with-perl=no
      

      Make sure that somewhere near the end of the output of the configure script contains:

       Building with DANE support ....... : yes
      

      Otherwise you should take a look at the config.log file and look for places where libval is mentioned and figure out why it doesn’t find the library correctly.

    5. Compile Irssi:

       $ make
      
    6. Fire up your new Irssi client and give it a spin:

       $ ./src/fe-text/irssi -!
      
    7. Try to connect to our test server, ircsource.baconsvin.org, using DANE:

       /connect -ssl -ssl_verify ircsource.baconsvin.org 6697
      

      If everything was done correctly, Irssi will now connect to the server, verify the signature of the certificate using TLSA and allow you to connect without seeing any self-signed certificate errors.

    DANE Enabled IRC Servers

    Here’s a list of IRC servers that supports DANE. If you are running a public IRC server and would like to see the server added here, feel free to drop me an email at ahf@irc6.net with information about the server.

    IRCsource

    IRCsource is a small network where people with a general interest in IRC hang out together to discuss and test various new concepts and ideas for IRC.

    • ircsource.baconsvin.org (SSL ports: 6697 and 9999)

    I will do my best to maintain this list of servers supporting DANE in the future.

    Next Stop?

    The next step for me is to start securing server-to-server links within the IRC networks with DANE. This will require some modifications to the IRC daemons themselves. I plan on looking into adding support for DANE in a personal feature branch of ircd-ratbox and some of its derivatives.

    Conclusion

    I am unable to say if DANE support is what the IRC community will be adopting. The IRC community is very conservative in general so time will have to tell.

    If you believe you have found a bug in my code or have any troubles setting DANE up for your own IRC server, I will be more than happy to help. Drop me an email and I will take a look at it whenever I have time. Otherwise, feel free to poke me on IRC. My nickname is ahf and I am available on most of the “larger” IRC networks (EFnet, Freenode, IRCnet and Quakenet).

    All of this code will be available in the upcoming Irssi 0.8.16 release, but if you want to test it right away, my suggestion is to follow my guide from above and use Irssi directly from Git.

    Hopefully, we will see other IRC client and server hackers implementing DANE support in the nearby future. If you like what you have read here, please help me making this happen by spreading the word about the possibilities available for enhancing the SSL support in IRC clients as well as other SSL based online services.

    This is too easily implementable to be ignored.

    Credits

    I would like to thank Thomas Steen Ramussen for being the originator of the idea and setting up the initial DNS server for testing purpose; Peter Larsen for expeditiously implementing TLSA support for GratisDNS; the IRC6.net guys for late night discussions about DANE; Mickey Fischer for testing the Irssi patches on Gentoo Linux with various options enabled and disabled; the DNSSEC-Tools Project for creating the libraries used and finally the rest of the Irssi team for reviewing the patches and coming with recommendations for my code.

    September 14, 2013 12:00 AM

    September 02, 2013

    Ciaran McCreesh

    Paludis 1.4.1 Released

    Paludis 1.4.1 has been released:

    • Compatibility with newer Boost.
    • Minor bug fixes and UI tweaks.

    by Ciaran McCreesh at September 02, 2013 01:00 PM

    May 16, 2013

    Ciaran McCreesh

    Paludis 1.4.0 Released

    Paludis 1.4.0 has been released:

    • Tweaked ‘cave resolve’ output to add blank lines.
    • Support for libarchive 3.1.2.
    • Compatibility fixes for GCC 4.8.

    by Ciaran McCreesh at May 16, 2013 01:29 PM

    March 25, 2013

    Ciaran McCreesh

    Paludis 1.2.0 Released

    Paludis 1.2.0 has been released:

    • Bug fixes.
    • Dep specs can now use ‘[.key!=value]’. The behaviour of ‘<‘ and ‘>’ has changed: for key types where order comparisons don’t make sense, the match now always fails.
    • Various compiler-compatibility fixes.

    by Ciaran McCreesh at March 25, 2013 06:51 PM

    March 04, 2013

    Bryan Østergaard

    Looking for a few more volunteers

    It's that time of the year.. Only four days left before the big danish Open Source Days conference starts and we're tying up all the loose ends as quickly as possible.

    Things are looking great from my point of view but one of the things we need to sort out before the conference opens is all the different helper roles. And we're still looking for good wanting to be an active part of Open Source Days and get to know all the other great people involved.

    If you would like to take part in this you can sign up at Join Us and in return for helping out you get free entrance to the conference including the social event saturday night.

    by kloeri at March 04, 2013 11:09 PM

    February 21, 2013

    Bryan Østergaard

    20.000 minutes

    20.000 minutes sounds like a lot but for sufficiently large projects with sharp deadlines it really isn't.

    Converted to a more manageable time scale it's roughly two weeks or roughly how much time until the Open Source Days conference opens. As some of you might know this is the second year I'm involved in organising this big open source conference.

    And just like last year it's an awesome experience but also very stressful with all the small things needing to fall into place for the conference to run smoothly. And unlike last year I haven't been sick so I'm getting to enjoy the full experience :)

    Having only two weeks left means really long hours every day while we scramble to close all the outstanding issues. But it also means we get to see a huge amount of things fall into place each day.

    Some of the things I'm excited about today:

    • Most of the talks are now announced on the website

    • The keynote talks are all confirmed. More on that later.

    • We've added several more sponsors

    The next two weeks should be very exciting and I'm sure the conference is going to be even better this year.

    See you all at the conference!

    by kloeri at February 21, 2013 11:13 PM

    February 02, 2013

    Ciaran McCreesh

    Paludis 1.0.0 Released

    Paludis 1.0.0 has been released:

    • EAPI 5 style subslot specs are allowed in user dependency specs.
    • We now support DWARF compression.

    by Ciaran McCreesh at February 02, 2013 03:14 PM

    November 16, 2012

    Ciaran McCreesh

    Paludis 0.82.0 Released

    Paludis 0.82.0 has been released:

    • Various EAPI 5 related fixes.

    by Ciaran McCreesh at November 16, 2012 11:46 PM

    October 19, 2012

    Ciaran McCreesh

    Paludis 0.80.2 Released

    Paludis 0.80.2 has been released:

    • Bug fixes.
    • Added ‘cave print-unmanaged-files’.

    by Ciaran McCreesh at October 19, 2012 02:17 PM

    October 13, 2012

    Ciaran McCreesh

    September 22, 2012

    Ciaran McCreesh

    Paludis 0.80.0 Released

    Paludis 0.80.0 has been released:

    • EAPI 5 is supported.

    Filed under: paludis releases Tagged: paludis

    by Ciaran McCreesh at September 22, 2012 06:50 PM

    September 07, 2012

    Ciaran McCreesh

    Paludis 0.78.2 Released

    Paludis 0.78.2 has been released:

    • Bug fix: || ( ) dependencies under a non-enabled label are now handled sensibly.
    • Bug fix: the resolver no longer attempts to create binaries for accounts.
    • Bug fix: 0-scm is now ordered correctly.

    Filed under: paludis releases Tagged: paludis

    by Ciaran McCreesh at September 07, 2012 09:02 PM

    August 13, 2012

    Ciaran McCreesh

    Paludis 0.78.1 Released

    Paludis 0.78.1 has been released:

    • sydbox-1 is now supported.
    • Bug fix.

    Filed under: paludis releases Tagged: paludis

    by Ciaran McCreesh at August 13, 2012 10:44 AM

    March 13, 2012

    Bryan Østergaard

    Pictures from Open Source Days?

    This weekend saw yet another edition of the Open Source Days conference in Copenhagen. And despite a few small issues (most notably a large power outage taking out a big area of the city) most people really seemed to enjoy the conference.

    I also saw quite a few people taking pictures of the event and we'd love to see those pictures. Please send an email to team2012@opensourcedays.org or directly to me at bryan@opensourcedays.org if you would like to share your pictures.

    by kloeri at March 13, 2012 11:47 AM

    March 03, 2012

    Bryan Østergaard

    Looking for helpers for Open Source Days

    With the conference just a week away we're still looking for volunteers.

    Volunteering for Open Source Days means you'll get to know a lot of other open source interested people, broadening your network and you get to be an active part of the biggest open source event in Denmark.

    You'll typically have to work 2 x 3 hours at the conference but for the most part you can decide what areas you want to help with and we do our best to coordinate your shifts so they don't conflict with talks you find particularly interesting.

    As a thank you for your work we throw in conference tickets including the saturday night social event.

    Right now I'm particularly looking for people with some video experience. You don't need professional video experience but a little experience goes a long way towards making the setup go more smoothly. We will of course make sure that people on the video team gets the needed instructions so don't be afraid of signing up even if you have no prior experience. The most important thing is your interest and dedication as that's what's ultimately going to it a success.

    Besides volunteers for the video team we're also looking for a number of other people. There's too many different roles to mention them all here but we still need chairmen for example.

    Please contact me directly at bryan@opensourcedays.org if you want to volunteer for the video team. If you want to sign up for the many other roles you can do so using our sign up form.

    by kloeri at March 03, 2012 12:43 PM