text:
Booklife Reviews
Celoven STORMCHASER
Jason Abofsky
The ambitious kickoff to Abofsky's Celoven Stormchaser series introduces four races living in uneasy peace on the planet Ankeros and the crisis that will force Celoven, Stone Maiden to Naruné, crown princess of Malenor, to rethink her loyalties–and everything she's ever known. The peace quickly begins to unravel when the destruction of an Epion city also shows the instability of Ankeros's core. Sun, the assistant to the Epion president, is convinced that the catastrophe was started by the Pelosians, but the First General Hirkain of the Pelosian military quickly produces evidence that the amalgans, a race looked down upon by the other three, are to blame–setting off discrimination and oppression of the amalgan people.
In his debut, Abofsky demonstrates rich world building. Epions, Pelosians, and Malens each have their own strengths that make them feel superior to each other and the amalgans, creating shifting alliances and dynamics that help move the story forward as First General Hirkain forms a relationship with Naruné that gives his people access to mines to build evacuation ships for leaving the planet. (Like her friend Sun, Celoven doubts Hirkain's motives.)
Telling the story from the point of view of multiple characters gives readers a strong sense of the complicated relationships between individuals and the different groups, as well as the political and social dynamics. Ankeros's leaders, coming from military, monarchical, and democratic societies, can either work together or fight separately for survival. Keeping up with everything can be a challenge for them and for readers alike, as the story's scope and its large cast can be demanding, though Celoven makes a compelling central figure. Abofsky limits the number of unnecessary scenes, a wise decision given the complexity of the novel and its varied perspectives, and provides a nice conclusion to the story while setting up well for a second book in the series.
Takeaway: Sci-fi and fantasy fans alike will enjoy rich worldbuilding as four different groups must either work together or fight separately for survival.
Great for fans of: Brandon Sanderson's Mistborn series, Sally Green's The Smoke Thieves series.
Production grades
Cover: A
Design and typography: A
Illustrations: N/A
Editing: A
Marketing copy: B+
Click here for more about Celoven STORMCHASER
Micheal E. Jimerson
A former Texas lawman battles to save his family, solve a murder, and make sense of his own damaged life in this gritty and gripping mystery. Working in private security for wealthy energy CEO, E.J. Kane is facing a broken marriage, a son killed in Afghanistan, and a troubled daughter. A storage tank explosion leads to a investigation involving the feds, the Texas Rangers, an untrustworthy sheriff, and the mysterious "Widow" Welchel, a femme fatale whose game isn't immediately clear. E.J. eventually discovers that a sovereign citizens group has a stake in the crime, and that he must uncover layer after layer to wrap up these complex investigations.
Jimerson has worked as a district attorney, and his knowledge of the milieu lends a powerful sense of verisimilitude, as when the aging E.J. muses over the changes over the years in law enforcement. The author does an equally fine job with the settings of his native East Texas: "The pallet of colors pouring out on the green hills and pine trees gave him pause." The sense of this tightly knit community is also strong, as a shared background connects E.J. more closely to an opponent than his supposed allies. Although the plot gets a little convoluted, individual scenes carry the story to a satisfying conclusion.
Best of all are the sharply limned characters—E.J. is no cardboard cowboy, but a complex figure with a difficult past and tangled family life. Jimerson does an especially effective job of showing E.J.'s sense of powerlessness as he watches his daughter's life fall apart. E.J.'s relationship with his ex-wife Rebecca is both subtle and real: A series of sharp exchanges reveals both why they got married and why they got divorced. Readers will be heavily invested in E.J.'s odyssey, turning pages rapidly in hope that his journey ends in victory.
Takeaway: Richly drawn characters and a vivid East Texas setting highlight this noir-flavored murder mystery.
Great for fans of: Craig Johnson's Longmire series, Jon Land's Caitlin Strong series.
Cover: A-
Design and typography: A-
Editing: B
Marketing copy: B
Click here for more about White Gold
SCHLOCK Featuring Russia Cop
David R. Low
Low's (CoinciDATE) bold, rambunctious collection thankfully doesn't live up to the title of Schlock. Taking on issues of culture, identity, and discrimination, each tale interrogates ideas of Russia and Russianness, with an emphasis on what Low describes as the "Russian soul." Still, the stories range widely in milieus, and each proves more outrageous than its predecessor: Low begins with Japanese salaryman Takahiro, a workaholic with an abusive boss, judgmental parents, and a budding friendship with a new Tokyo arrival. Takahiro eventually loses touch with his group of acquaintances and is forced to realize that the best days of his life may have been watching the mysterious seduction of his former friend, Hirata, by the music of Russian rock star Victor Tsoi.
The satiric climax arrives in the third story, with a documentarian's attempts to discredit a bioengineered robot, Russia Cop, whose duty is, "…to enforce Russian soul and patriotic sentiment throughout the nation." Mighty enough to throw vehicles and withstand artillery shells, Russia Cop undergoes a jolting mental change throughout the narrative, and by the end has enlisted an army of orangutans, endorses Adidas as the best product material for his job, and is vying for the position of Russia's premier, running on the platform that he "…will not rest until every citizen of the Russian Federation has become a homosexual." Despite an ambiguous judgment on Russia Cop's success, Low ends with the darkly funny note "we live in the age of Russia Cop."
The final story muses on many of Low's principal themes, told from the perspective of a podcast that addresses entrenched beliefs about Americans in Russia. Depicting Americans forced to pose as Australians in order to enjoy Russia in peace, Low illuminates how far individuals will go to feel accepted, an idea that exemplifies this collection's chaotic familiarity, writing that mirrors contemporary reality at every turn.
Takeaway: Readers who love the absurd will be swept up by Low's satiric collection examining the Russian soul.
Great for fans of: Ken Babbs's Cronies, Max Barry's Jennifer Government.
Cover: B
Marketing copy: A
Click here for more about SCHLOCK Featuring Russia Cop
A Different Purpose: A Martin Quint Novel
Stephen D Senturia
Building and rebuilding are at the heart of the thoughtful final novel in Senturia's Martin Quint trilogy, which finds its protagonist still facing challenges both in his private and work life. Martin labors on establishing a new school at Bottlesworth college while satisfying the demands of his energizing yet challenging benefactor as well as the bureaucracy of his college, and on assessing a teaching method. At same time, he and his wife Jenny try to mend their marriage and broken trust. Through therapy, they realize how much the past afflicts their relationship, and strive to heal it. Despite their differences, the couple must pull together in order to deal with unexpected crises–including a shocking racial incident in the boarding school of Andrew, Martin's son from a previous relationship, that targets his best friend Lavelle, one of the few Black students at the school.
MIT professor Senturia doesn't just share a glimpse into the backstage of the academic world he knows so well, as through Martin and the kids he delves into urgent educational questions–from treatment of racial incidents in school to what would make a new program truly cutting edge. Such serious consideration of the realities of education is rare in contemporary fiction, even novels about academia, and his keen understanding of the complexities shine through, though at times narrative momentum is diminished by Senturia's interest in technical matters.
Senturia also focuses on exploration of relationships, especially the reconstruction of damaged ones, observing through Martin: "This is what his entire career in science had led him to believe, that there were discoverable truths, objective truths that could be analyzed, verified. But life doesn't offer those kinds of truths." Such wisdom—and a welcome sense of humanity and hopefulness—distinguishes the novel, though at times a lack of nuance weighs on the story. The happy yet very open ending is satisfying, though it will leave fans of serious contemporary fiction eager for more.
Takeaway: In this striking, hopeful novel, a professor endeavors to build a new program– and rebuild his damaged marriage.
Great for fans of: John Williams's Stoner, Jane Smiley's Moo.
Design and typography: B
Editing: C
Click here for more about A Different Purpose
Burying Eva Flores
Jennifer Alsever
Alsever (Trinity Forest Series) builds steady tension and thrills with a paranormal revenge fantasy that explores teenage cliques and the perils of social media fame. In the sleepy town of Paonia, Colorado, high school senior Eva Flores is a TikTok star performing popular dance moves and receiving thousands of likes. Her mother criticizes her looks and her stepfather Manny manages her career, all to maximize Eva's popularity and salary. Eva is a snob to everyone in town, especially to fellow senior Sophia Palmer, a poor girl working in a café after school to help bring cash into her single-parent household. Once friends but now enemies, Sophia becomes the primary suspect when Eva disappears.
Through clever prose, journal entries, and interview passages, Alsever pieces together a cautionary tale of hero worship, class struggle, wish fulfillment, and young people caught up in social media frenzy. After Eva's especially cruel steps to destroy Sophia's life, Sophia is at a breaking point. As part of a class assignment, she documents her frustrations and rage in a journal, believing that "imagination creates reality." When her fictional revenge against Eva actually starts to come true, Sophia rejoices, until Eva, on a camping trip runs into the woods on a dare and doesn't come back.
With teenage vernacular and an uncanny insight into teen angst, Alsever accurately captures the insecurities, bullying, class differences, and desire for popularity that plague teenage life. Despite the unfortunate cliché of a Native American curse and the (understandable, from the teens' perspective) characterization of nearly every adult as either boring or bizarre, the elaborate adventure convincingly follows Sophia through her chaotic life, a newfound opportunity for riches, and reliance on her best friends. Young adult readers will appreciate the revenge fantasy aspects and how Sophia addresses the consequences when they actually happen. Alsever's steady pacing and authentic characters will keep readers engaged until the satisfying ending.
Takeaway: Young adult readers will savor Sophia's revenge fantasy and the revelations of what makes a good friendship.
Great for fans of: A.V. Geiger's Follow Me Back, Michele Leathers's They All Had A Reason.
Editing: A-
Click here for more about Burying Eva Flores
Press for Champagne: A Guide To Enjoying The World's Greatest Sparkling Wine
Christopher S. Ruhland
Ruhland's fascinating, conversational guide to all things champagne opens with a compelling question: "What if delivering bliss to someone were as simple as connecting a button to a wire?" That query's inspired by a London diner that outfitted each booth with a button marked "press for champagne." Press for Champagne–the culmination of a lifetime of "obsessively" sipping bubbly–explores the mystique associated with champagne and offers pointers on how to enjoy this quintessential celebratory beverage, from clarifying what, exactly, it is and how it's made to the best ways to "unleash the great champagne drinker within you."
Detailed and well researched, this book dives deep into the history and production of champagne, including the fact that, in the U.S., people often use the term to mean any "sparkling wine." Ruhland points out the inaccuracy of this generalization in no uncertain terms: true champagne only comes from the eponymous region in France. To help readers discover the variety that best suits their tastes, he thoroughly examines available champagnes and why each is unique. His tone is acerbic at times, but his occasionally forceful language is rooted in love–he respects wine producers, and he worries about their future as climate change takes hold.
Ruhland has created an essential and informative guide for dedicated drinkers, though readers without at least a cursory interest in champagne might not be converted. He adeptly connects his impassioned arguments with anecdotes and obscure bits of knowledge that enhance curiosity and intrigue–for example, bubbles make people happy, but they also serve an important function in giving champagne–and sparkling wines–its flavor. Perhaps most importantly, Ruhland wants everyone to remember that champagne isn't just for parties: "Drink champagne whenever you feel like it. Seriously, if there is only one thing you take away from this book, I hope that is it."
Takeaway: Ruhland's conversational guide examines all things champagne, especially the best ways to understand and enjoy it.
Great for fans of: Tilar J. Mazzeo's The Widow Clicquot, Michael Edwards's The Champagne Companion.
Cover: B+
Marketing copy: A-
Click here for more about Press for Champagne
NOTES FROM A DEAD PLANET: Please Prove Me Wrong
As a sequel to Notes from a Dying Planet, 2004-2006, Brown's eye-opening and often terrifying survey explores what has happened to Earth regarding overpopulation, mass extinction, and climate change in the last two decades. Aiming to provoke action, Brown painstakingly–and unstintingly–lays out the evidence, drawn from hundreds of articles and studies, of what he calls the "planetary death," detailing the uptick in extreme weather and climate-related catastrophes, the warning signs that too often languish unheeded, and the likely increasingly horrific disasters we can expect in the future. While he never sugarcoats anything, Brown also offers guidance to steps that readers can take to mitigate these compounding dangers—if we as a species really do want to continue living on the planet we call home.
Brown's core message—that we have very little time to make massive, life-altering changes in order to save life on the planet as we know it—is delivered alongside copious links covering topics that range from media misinformation to political movements. He never shies away from his fears that we have gone too far as a species to be able to reign in the incredible damage already done, which means the book may prove too wrenching for readers who prefer a sunnier outlook.
Brown sounds a resonant alarm about what's likely to come if immediate action is not taken, and his advice about alternative personal habits and choices that any of us can make are welcome, though some of the recommendations are challenging. Brown suggests humans stop procreating, arguing "there will be enough younger people to carry on due to accidental pregnancies and births," and he advises an immediate end to mass tourism that results in unaffordable ecological damage. His writing will spark a fear for the future, but readers will walk away empowered to make personal changes to thwart some of the most dire consequences of resource waste and pollution.
Takeaway: A stark analysis of the threats to our planet, with a provocative call to action for environmentally aware readers.
Great for fans of: John Doerr's Speed & Scale, Mike Berners-Lee's There Is No Planet B.
Cover: B-
Illustrations: A-
Click here for more about NOTES FROM A DEAD PLANET
Love Chibis ABC Alphabet Bakery
Joqlie Publishing, LLC
"C" isn't just for "cookie" anymore. Well-loved recipes are paired with alphabet letters in this delectable, bakery-inspired picture book. Starting with the letter "A," each member of the English alphabet is assigned a sweet treat—from apple pie to chocolate chips all the way to zucchini bread—with key ingredients for making each confection displayed alongside. Every page features an iconic dessert or savory treat (such as empanadas), combined with a cartoon figure decked out in a complementary outfit: pineapple parfait grins next to a figurine wearing a pineapple headdress, banana pudding is topped off with a miniature vanilla wafer character, and "L" features a winking toy positioned in between two flashy lollipops.
Young readers will be absorbed by the richly hued, mouth-watering illustrations. Aside from priming the sweet tooth, these diverse and educational pictures will also give kids plenty to discuss with adults, and the multiethnic figurines, add entertainment value with their fun expressions and engaging mannerisms. Novel words like "quince" and "granita" elevate the text's vocabulary and will spark interest in new recipes and confections, and even tried-and-true favorites incorporate unconventional ingredients (think dark chocolate highlighted as a main component in doughnuts). The authors even make "X" interesting: "xylocarp cupcakes" are displayed, with an accompanying definition that clarifies, "xylocarp–a fruit with a hard outer shell."
Although dessert is abundantly fêted, and readers will be intrigued and tantalized by the authors' creative selections, this alphabet celebration is best consumed by young children just starting to show an interest in reading. The concept stays minimalistic throughout, and some older readers may wish for more detailed recipes. However, the educational value of unfamiliar culinary lingo will please adults (and possibly inspire some kitchen experimentation), and the book accomplishes the welcome goal of offering a fresh–and notably sweet–method of teaching the ol' ABCs.
Takeaway: A bakery-inspired alphabet picture book, with innovative desserts featured for every English letter.
Great for fans of: Keith Baker's LMNO Peas, Lisa Frenkel Riddiough's Letters to Live By: An Alphabet Book with Intention.
Illustrations: B+
Click here for more about Love Chibis ABC Alphabet Bakery
Prophet Reborn: Book Two
Diane M. Johnson
In the second book of author/screenwriter Johnson's epic, uncommonly thoughtful saints-and-sinners-and-Satanists thriller series, the focus shifts to Lucas, a young man raised "to be the leader of a new generation of classic satanic thought," who in The Perfect Prophet had been tasked with fulfilling a "Black Book" prophecy by killing his brother, Alec, the atheist death metal guitarist turned faith healer who served as the first book's protagonist. Both brothers survived, and now, shaken by the apparent reality of his brother's miracles and his own dark magic, Lucas, scion of the New Church of Satan, seeks redemption at a living-off-the-land Christian commune, as Johnson examines the fallout—in emotional, practical, and theological terms—of the first book's bold cult horror and suspense.
Somewhat subdued in comparison to its bloody predecessor, Prophet Reborn finds Lucas and Alec questioning their beliefs and their miracles—"Who was to say that his gift, his ability to self heal and to foster healing in others, wasn't some kind of evolution?"—and systems of religious authority, especially those that encourage zealotry, all while tending the wounds each has endured. Mysteries and a sense of looming dread still loom over them though, especially related to the prophecy of their father which called for the killing of a "misguided" son in order to "renew" the Church of Satan—what if it referred to Lucas rather than Alec?
While the emphasis here is on the brothers' individual journeys, both physical and spiritual, with special attention paid to each's shifting about Johnson's character-driven follow-up still builds to deaths, new identities, an explosive confrontation involving hostages, armed compounds, and federal authorities—and legitimate shocks, especially as the brothers' wayward paths converge and they and readers discover, together, who they've become. This engaging sequel will please fans of the first book open to big questions, challenging developments, less ritual violence—and, just maybe, a happy ending.
Takeaway: This thriller about faith healing, satanism, and fraternal prophecy is uncommonly thoughtful.
Great for fans of: Dan Chaon, Lynn Hightower.
Click here for more about Prophet Reborn
My Manufactured Soul
Jeffry Dwight
Dwight (Mortal Dreads) delivers an ambitious fantasy—the first in his Sundering Saga series—set on the planet Sundering, formed eons ago by the First Colonists who have all but disappeared, and now is populated by three different species: white-haired muria who are rumored to be descendants of the planet's first inhabitants, fey-like nina who were Sundering's first dwellers, and humans. The species don't intermingle, and ancient folklore incites superstition among the humans when blonde haired, blue-eyed Grey is discovered lying on the ground, with no memory of who he is, sickened from the harsh elements. When he embarks on an epic quest to discover his origins, it puts the entire planet at risk and threatens everyone Grey holds dear.
Dwight sets his sights high with this story, transporting readers on a whirlwind journey fraught with betrayal, love, and sorcery. Grey develops connections to multiple characters throughout his travels, often too many to track without effort. Nina, an ancient being who takes the form of a unicorn, accompanies Grey from the beginning–and their budding romance gives the novel solid footing in the midst of dizzying adventures. Grey and Nina run the gamut from chasing violent brothers fighting over the throne of Jappa to falling prey to creatures with bewitching powers, and through it all Grey's destiny is mysteriously threaded to Qol, one of the original muria who seems to know more about Grey than he understands about himself.
Despite the extraordinary scope of the story, readers of searching, inventive fantasy will be entertained until the end. Dwight leaves several loose ends to set the stage for the next installment, but his main players reach a satisfying conclusion. My Manufactured Soul strikes a nice balance between supernatural beings toying with their creations and more relatable, down-to-Sundering characters who want nothing more than to create a safer world.
Takeaway: An elaborate fantasy that will transport readers to mystical lands with supernatural creatures, on a quest of self-discovery.
Great for fans of: Zogarth's The Primal Hunter, A. F. Kay's Legion's Fifth Vault.
Editing: B+
Click here for more about My Manufactured Soul
Radiant Wise Woman : Breaking Free from the Myths of Menopause and Aging
Lee Sumner Irwin
Irwin leverages her own experience working with vibrant older women to provide inspiration for women in their "second spring" "wise woman" phase of life to lean into their capacity for creativity, intuition, healing, and passion. Presenting the archetypes of Maiden, Queen, and Wise Woman not only as life stages, but as powerful inner allies with energies that can be accessed throughout life, she offers inspiration for readers to discard the myths of aging as decline and of the post-menopausal end of sexual energy. Exercises at the end of each chapter encourage readers to engage the ideas through personal contemplation and gentle action.
Irwin's love and energy for her older peers comes through clearly and infectiously throughout the text. Her conversational tone is inviting, her advice easy to process, and the experiences that she shares, both her own and those of her group members and coaching clients, are relatable. Her conceptualization of the three female energies and how they manifest throughout life is a unique take on a well-worn female empowerment trope that readers should be able to put into action. The most powerful messages prioritize internal work and personal growth, doing internal work of healing old trauma and connecting to the untamed self via nature, and expanding embodied joy, an idea tightly entwined with encouragement to keep pursuing sexuality and sensuality. Advice to find an "angel posse" puts a spiritual spin on the importance of community during aging.
For all its inspirational power and welcome mythbusting, Radiant Wise Woman is less helpful on the physical aspects of the menopause transition, leaning on personal experience with bio-identical hormone replacement while skipping most of the biological background and blaming familiar feelings of exhaustion on spiritual disengagement. Still, the effect overall is an uplifting contrast to the negative cultural messages often pushed on older women.
Takeaway: Readers discouraged by our culture's sidelining of older women will find empowerment and inspiration in this mythbusting guidebook.
Great for fans of: Clarissa Pinkola Estes's Women Who Run With the Wolves, Jean Shinoda Bolen's Goddesses in Everywoman.
Click here for more about Radiant Wise Woman
Blue Haven
Lisa King
King (Vanishing Hour) gives adventurous mystery buffs their money's worth in the beguiling Blue Haven. Aloe Malone, a twenty-five year-old former foster kid, arrives at Blue Haven, a top-secret community of luxury condos available only to the world's filthy rich whose powers-that-be insist she be drugged as a precaution to protect the island's undisclosed location, the first of a number of foreboding details. Still, on the island, the clothing is designer, the ocean is heated, the restaurants are staffed by celebrity chefs. Aloe at first feels as if she's won the lottery, after a life of harrowing long waitressing shifts, a tiny Chicago apartment, and depression. She dines with new friends (the other four residents on the concierge-attended, amenity-filled island), and makes choices foreign to an introvert, choices that make her believe she might finally have found a new life.
But the veneer of perfection quickly begins to smudge: for example, who is Eloise and why was her journal hidden inside Aloe's condo when Aloe was told that it had been never previously uninhabited? Why does Aloe feel stalked by the "steely eyed creeper?" Suspension of disbelief comes thanks to King's descriptive, verbose language that seeks—and mostly succeeds—to evoke Aloe's eerie yet pleasing new world in vivid, cinematic images. There's a consistent psychological edge to Aloe, referenced via internal dialogue, and the pace sparks when Aloe discovers Blue Haven's dark, unexplained secrets that leave her hiding in her condo, tugging on matted hair, and chewing her fingernails.
Scary and exhilarating, with more twists and turns than a game of Chutes & Ladders, Blue Haven is an ambitious and painstakingly written psychological thought-adventure about the pursuit of pleasure and escape from pain. King offers surprises in terms of perspective and flashbacks, even edging at times toward speculative fiction, building to the urgent question "Why fix your old life, when you can have a new one?"
Takeaway: A grabber of a psychological thriller imagines living the lush life on a private island–or is it something else entirely?
Great for fans of: Rachel Howzell Hall's They All Fall Down, Michael Redhill's Bellevue Square.
Click here for more about Blue Haven
The Human Factor: The Phenomenon of Espionage
W. Patrick Lang
Lang's revised and updated debut examines the art of espionage and human intelligence gathering. Lang–a retired colonel who has since authored many other books, including a memoir on his time in the military and a trilogy of historical fiction novels based during the American Civil war–offers a succinct guide on all facets of modern intelligence gathering, laying out the history of intelligence gathering through the stories of past spies and heroes, explaining the systems and institutions that have traditionally emerged in modern nations to facilitate espionage work, and illuminating the delicate art and practice of gathering human intelligence today and in the future.
Employing a lucid structure and writing with welcome clarity, Lang demonstrates his authority on the business of human intelligence, offering fascinating case studies and insights into the psychological motivations of the agents who are at the center of this dangerous business. His description of these psychological motives has a literary quality while also suggesting greater truths about human nature: "The nature of the hunger is unimportant to the clandestine collection team. It is the strength of the hunger that matters." Recounting the case of Arnold Deutsch, a Soviet-era spy who had recruited students referred to as the "Cambridge Five" to pass on information to the Soviet Union but was later executed on Stalin's orders, Lang writes, "His reward for creating an entirely new doctrine was a small caliber bullet to the back of his head."
For the most part, this is an objectively written primer meant for a specialist audience, namely those involved in the human intelligence and espionage or who have a particular interest in the field. General audiences may find some sections bogged down in detail, and at some points Lang's didactic tone may prove off-putting for a casual reader. Still, Lang's chronicles and consideration of real historical figures and the tradecraft of espionage will likely sustain and reward the attention of anyone with serious curiosity about his subject.
Takeaway: A vital, succinct primer for anyone interested in understanding the art of human intelligence gathering and espionage.
Great for fans of: Darryl Pennington's Human Intelligence Collection, Christopher Andrew's The Secret World.
Click here for more about The Human Factor
Beyond the Threshold: Second Book in the Hero's Path Series
Mark Ristau
Our choices in life, and the power of forgiveness, are the themes in this absorbing bildungsroman, the follow up to A Hero Dreams, that follows troubled hero Ricky Williamson from his childhood in the 1970s up to the dawn of the new millennium. The assault he endured as a child has left its mark on his personality, and he has had deep problems at work and eventually looks to get back the people who have hurt him. But a mysterious boy named David suddenly appears in his life–or at least in his mind–forcing Ricky to face his past, and helps him remake his life for a better future.
Ristau does a beautiful job of setting scenes and personalities from the very beginning–for example, the dichotomy of a seemingly bland midwestern suburban house that boasts a statue of the Buddha in a yoga studio. Ricky reflects back on his great teenage crush, and much convincing angst comes out ("Why would she go out with a nervous, insecure, skinny little dweeb like me?") This contrasts nicely with a scene from his later years, as Ricky wakes up after a tawdry liaison and reflects on his life, "my mouth as dry as the windblown sands of the Atacama Desert." Although the plot itself gets a little convoluted, the entrancing writing will keep readers turning the pages to the end.
The main focus of the book, however, is the portrait of the narrator and his complex journey. There's a Babbitt-like thread that runs through his story of trying to fit into the business world: "a mainstream culture that shared little in common with my father's high ideals." Generally a passive man, his explosion comes as a cathartic surprise. Ricky's story becomes a time-bending odyssey, where redemption takes on mystical properties. Readers will be left hoping the best for this engaging protagonist, and eager to read about his further adventures.
Takeaway: Fans of character-driven stories will cheer this literary thriller's surprising turn toward redemption.
Great for fans of: JoAnne Tompkins's What Comes After, Casey Gerald's There Will Be No Miracles Here.
Click here for more about Beyond the Threshold
Perfect Prophet
Death-metal rocker Alec Lowell appears to become the world's perfect "prophet" in screenwriter and author Diane M. Johnson's (The Schoharie) harrowing thriller, the start of an occult suspense series. Alec–or Alexander the Great, as his fans call him–is shot in the chest during a concert and makes a "miraculous recovery" that splashes him all over the news and moves this proud atheist to reconsider his beliefs. When he learns that he has a son, Jake, with his ex-girlfriend, Alec moves back to rural Wisconsin, committed to ensuring that Jake doesn't "become disillusioned with [him]" like Alec was with his own dad, a figure with mysteries of his own. But as Alec strives to find higher meaning, getting caught up in a cult-like Satanist movement spurred on by fans of his music, people close to him start dying–and Alec seems unable to find his way out.
Pulsing with blood and pentagrams, murder and faith healing, Alec's decidedly adult journey is not for the faint of heart but will grip readers with an interest in tense cult tales until the very end. In classic thriller style, Johnson teases out the clues between jolts of action–many believe Alec has been "chosen," but for what?–until it's possible to put together an almost-complete puzzle of Alec, his family, his friends, and, most importantly, his enemies, one of whom commands point-of-view passages throughout. The crisp, to-the-point prose, engaging characters, and pacing of revelations will keep the pages turning, though the end proves somewhat anticlimactic, leaving mysteries for the second book.
Alec is caught between a mad Satanic cult and true believers, in a tug-of-war between Satanism and Christianity. Johnson takes matters of the soul as seriously as the thrills, and does a miraculous job of weaving ideas and suspense as Alec continuously wins reader sympathy as he questions the beliefs that are foundational to life.
Takeaway: A dark adult thriller of faith, prophecy, and a murderous Satanic cult, crafted to keep readers guessing.
Great for fans of: Lynn Hightower's Satan's Lambs, Ray Russell.
Click here for more about Perfect Prophet
Possum Boy Battles The Mulefoot Menace
Swifty Slowpoker
Slowpoker debuts with an exuberant caper that reveals the resilience of boys relegated to a mental health institution. In mid-1970s Tennessee, eleven-year-old Delphus V. White, who believes himself a possum mutant, lives at the Clover Bottom Hospital and School for children. He spends his days savoring comic books with his plucky, fart joke-loving pals and birthing piglets on the property's farm. After his beloved case worker dies, an abusive pedophile named Dick Phillips takes charge of the boys and their hog chores. Convinced a CIA agent has recruited him, Delphus decides that only destroying the farm's demonic Mulefoot boar will bring about Phillips's downfall.
The author spent time growing up in the custody of Tennessee's Department of Mental Health and Substance Abuse Services and renders the hospital and its residents with vivid description and spot-on dialogue. At times whimsical, poetic, or irreverent, Slowpoker skillfully uses humor to mask the melancholy pervading these lost boys' existence. Even after Delphus, who suffers from epilepsy, stumbles into the "normal" outside life of happy families and helpful salesmen, he chooses to return to Clover Bottom, noting without complaint, "Out in the real world, there ain't no place for us to go." Superheroes, kung fu Buddhists, and CIA agents fill the boys' imaginations as their reveries come to life. Occasionally, extended tangents distract from the narrative momentum, but these anecdotes carry ample charm thanks to Delphus's spritely wit.
The author's lighthearted name aside, this is sophisticated literature, both in structure and character depth. Artifacts intersperse Delphus's first-person narrative—a newspaper article, footnotes, and more—and moments of magical realism intertwine with practical challenges. The characters' vibrant, evolving personalities and varied voices are memorable. The life-affirming connections between these young people nurturing one another against the odds will appeal to readers of serious fiction about mental health, social services, and growing up.
Takeaway: A playful yet profound caper peeks into the hidden lives of lovable youth mental health-facility residents.
Great for fans of: Victor Lodato's Mathilda Savitch, Truman Capote's My Side of the Matter.
Click here for more about Possum Boy Battles The Mulefoot Menace

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Multi processing blocked in python Multi processing does not work. it seems they are blocked.
The output of my code is
filename2examples, page=1
filename2examples, page=2
...
filename2examples, page=18
filename2examples, page=19
filename2examples, page=20
MULTI, N_PROCESS=4
pool

The code related to this is
arg_lst = []
df_y = row_data
for idx, (page, df_y_page) in enumerate(list(df_y.groupby("page"))):
    print("filename2examples, page={}".format(page))
    hw = temml_data[page][0]
    page_text = temml_data[page][2]
    height = hw.iloc[0]["height"]
    width = hw.iloc[0]["width"]
    arg_lst.append([df_y_page, height, width, page_text])

if N_PROCESS > 1:
    print("MULTI, N_PROCESS={}".format(N_PROCESS))
    with multiprocessing.Pool(N_PROCESS) as pool:
        print("pool")
        page_examples_lst = pool.starmap(get_page_examples, arg_lst)
        for page_examples in page_examples_lst:
            yield page_examples
else:
   for arg in arg_lst:
       df_y_page, height, width, page_text = arg
       page_examples = get_page_examples(df_y_page, height, width, page_text)
       yield page_examples

The get_page_examples is
def get_page_examples(df_y_page, height, width, page_text):
    print("get_page_examples")
    arg_lst = []
    for i, (idx, row) in enumerate(df_y_page.iterrows()):
        cur_row = copy.deepcopy(row)
        cur_row["height"] = height
        cur_row["width"] = width
        tml_start, tml_finish = row["tml_start"], row["tml_finish"]
        arg_lst.append([tml_start, tml_finish, page_text, cur_row])

    page_examples = []
    for arg in arg_lst:
        tml_start, tml_finish, page_text, cur_row = arg
        example = find_x_text_and_process_row(tml_start, tml_finish, page_text, cur_row)
        page_examples.append(example)
    return page_examples

We can see from the output of the program, it blocked, and do not enter into get_page_examples function.
The linux machine cpu count is 16.
On the linux machine, the code will work when I set N_PROCESS = 1; do not work when I set N_PROCESS > 1.
When I use windows machine, it will work no matter N_PROCESS is 1 or greater than 1.
I used the requirements.txt generated on my windows machine to build docker images, then run on my linux machine, but also failed.
Also, no matter the python interpreter on the linux machine is 3.5 or 3.6,  it will not work.
when I test python multiprocessing module, it will work:
>>> import os
>>> os.cpu_count()
16
>>> import multiprocessing
>>> multiprocessing.cpu_count()
16
>>> import multiprocessing
>>> with multiprocessing.Pool(4) as pool:
...     pool.map(print, [1, 2, 3])
...
1
2
3
[None, None, None]

Thank you for your answer.

redpajama_set_name: RedPajamaStackExchange


text:
QB Starkel sparks but Hogs lose 31-17
September 08, 2019 By Nate Allen Headlines, Razorbacks Comments
OXFORD, Miss. - Changing quarterbacks from Ben Hicks to Nick Starkel at half and trying some razzle-dazzle and Wildcat formations couldn't change Arkansas' losing ways in the SEC.
The Ole Miss Rebels beat Arkansas 31-17 in front of 47,915 Saturday night at Vaught-Hemingway Stadium. It was Arkansas' 12th consecutive SEC loss.
Fan bases called the game a must win for their rebuilding programs. Ole Miss finished 1-7 in SEC play last year, beating only Arkansas 37-33 in Little Rock.
"That was fun out there," Ole Miss head coach Matt Luke said. "That's as much energy, the best we've had here in a long, long time."
Ole Miss (1-1) finished with 483 yards and 23 first downs but committed two turnovers. Arkansas totaled 361 yards and 18 first downs, including Starkel (17 of 24 passing for 201 yards in the second half).
"This isn't the time or place right now to address (who the starting QB will be next week)," Morris said. "We'll get back and evaluate like we always do. I thought we needed a spark to start the second half. I thought it was unfair to Ben at times. We had a couple of busts on some routes. We had a couple of drops. We missed Devwah (Whaley) right down the middle. I thought it was time. We needed a spark and I wanted to see who could kind of give us a kick-start in our offense in the second half."
Last year as a sophomore transfer vs. Ole Miss, Arkansas running back Rakeem Boyd netted 109 yards on just seven first-half carries then missed the second half injured
Boyd played both halves Saturday. He posted some good runs but the yards came hard, 67 net on 17 carries. Ole Miss stopped him for 1 yard on a key fourth-and-2 attempt.
"Our big emphasis this week was stopping the run," Luke said. "We had guys in the right spots at the right time."
Arkansas, winning its non-conference opener 20-10 last week, plays Colorado State at 3 p.m. Saturday in Fayetteville.
Starkel, formerly of Texas A&M, had a TD taken away on Arkansas' second possession of the third quarter. An ineligible receiver downfield penalty erased a 38-yard TD toss to freshman receiver Trey Knox.
Starkel did engineer a seven-play, 81-yard fourth-quarter drive, completing a 6-yard TD toss to receiver Koilan Jackson with 1:21 remaining. Starkel completed 13-yard passes to Koilan Jackson and Mike Woods and a 22-yarder to Treylon Burks and 26-yarder to Knox on the series.
Knox's six catches for 88 yards led Arkansas receivers, while Woods caught for 84.
The trick plays Morris tried to spark the offense mostly failed to ignite. A direct snap to Boyd and a Boyd handoff to receiver De'Vion Warren and handoff to Hicks ended in sack.
"You always take a few specials into every game," Morris said. "When they hit, they look great, when they don't, they don't."
Arkansas' lone third-quarter TD came via its defense. Junior safety Kamren Curl stripped the ball and returned the fumble for an improbable 69-yard TD. Earlier Curl had slipped and missed a tackle allowing Ole Miss tight end Octavious Cooley to run 18 yards for a first down on a Rebels' scoring drive.
Ole Miss redshirt freshman Matt Corral completed 16 of 24 passes for 246 yards and two TDs. Elijah Moore caught one pass for 2 yards and one for 46. He totaled seven catches for 130 yards.
Ole Miss running back Scottie Phillips carried 26 times for 143 yards and two TDs on a wearying Arkansas defense.
Arkansas' improved defense and struggling-to-score offense looked much like last week.
Corral's 2-yard TD pass capped a 13-play, 85-yard drive at 8:41 of the first quarter, and Luke Logan's 33-yard field goal with 3:06 left in the second quarter accounted for the Rebels' first-half scoring.
Arkansas' Conner Limpert had a 36-yard field goal hammer the upright but drop through for its three first-half points. Limpert, 19 of 24 on field goals last year with one streak of 10 in a row, missed wide on a 43-yard attempt with 50 seconds left in the half.
Arkansas' biggest play of the first half, a Ben Hicks pass nearly intercepted by Ole Miss safety Jaylon Jones, turned into a 46-yard reception by freshman receiver Trey Knox before Limpert's miss.
Arkansas totaled three first downs and 38 yards rushing in the first half. Hicks was seven of 16 passing for 99 yards.
Corral threw passes of 21 and 26 yards to Moore and Ontario Drummond on Ole Miss first-half TD drive with Corral tossing the 2-yard TD to Moore.
A 30-yard Hicks to Mike Woods pass marked the big gain of Arkansas' field goal drive.
Arkansas started true freshman Ricky Stromberg at right guard and moved junior Myron Cunningham to left guard because of senior left guard Austin Capps' ankle injuries last week.
Senior starter Gabe Richardson was Arkansas lone upperclassman defensive end with true freshman Mataio Soli starting and rookies Zach Williams and Collin Clay playing considerably with seniors Dorian Gerald (out for the season) and Jamario Bell out with injury.


A sneak preview inside the Lowline Lab, a 1,100-square-foot mock-up of the underground park, open every weekend starting tomorrow at 140 Essex Street in NYC.
Shopsin's General Store is known for its extensive menu, obscene service, and inimitable dishes. No one leaves Shopsin's hungry, and no one forgets their meal.


AS all the perceptions of the mind may be divided into impressions and ideas, so the impressions admit of another division into original and secondary. This division of the impressions is the same with that which I formerly made use of when I distinguish'd them into impressions of sensation and reflection... Of the first kind are all the impressions of the senses, and all bodily pains and pleasures: Of the second are the passions, and other emotions resembling them.
When we take a survey of the passions, there occurs a division of them into direct and indirect. By direct passions I understand such as arise immediately from good or evil, from pain or pleasure. By indirect such as proceed from the same principles, but by the conjunction of other qualities. This distinction I cannot at present justify or explain any farther. I can only observe in general, that under the indirect passions I comprehend pride, humility, ambition, vanity, love, hatred, envy, pity, malice, generosity, with their dependants. And under the direct passions, desire, aversion, grief, joy, hope, fear, despair and security. I shall begin with the former.
Here therefore we may divide all the perceptions of the mind into two classes or species, which are distinguished by their different degrees of force and vivacity. The less forcible and lively are commonly denominated Thoughts or Ideas. The other species want a name in our language, and in most others; I suppose, because it was not requisite for any, but philosophical purposes, to rank them under a general term or appellation. Let us, therefore, use a little freedom, and call them Impressions; employing that word in a sense somewhat different from the usual. By the term impression, then, I mean all our more lively perceptions, when we hear, or see, or feel, or love, or hate, or desire, or will.
Since, therefore, external objects as they appear to the senses, give us no idea of power or necessary connexion ..., let us see, whether this idea be derived from reflection on the operations of our own minds, and be copied from any internal impression.
Besides those passions above-mentioned [desire, aversion, hope, and fear], which arise from a direct pursuit of good and aversion to evil, there are others which are of a more complicated nature, and imply more than one view or consideration. Thus Pride is a certain satisfaction in ourselves, on account of some accomplishment or possession, which we enjoy: Humility, on the other hand, is a dissatisfaction with ourselves, on account of some defect or infirmity.
Love or Friendship is a complacency in another, on account of his accomplishments or services: Hatred, the contrary.
But custom not only gives a facility to perform any action, but likewise an inclination and tendency towards it, where it is not entirely disagreeable, and can never be the object of inclination. And this is the reason why custom encreases all active habits, but diminishes passive, according to the observation of a late eminent philosopher. The facility takes off from the force of the passive habits by rendering the motion of the spirits faint and languid. But as in the active, the spirits are sufficiently supported of themselves, the tendency of the mind gives them new force, and bends them more strongly to the action.
Beside good and evil, or in other words, pain and pleasure, the direct passions frequently arise from a natural impulse or instinct, which is perfectly unaccountable. Of this kind is the desire of punishment to our enemies, and of happiness to our friends; hunger, lust, and a few other bodily appetites. These passions, properly speaking, produce good and evil, and proceed not from them, like the other affections.
By direct passions I understand such as arise immediately from good or evil, from pain or pleasure.
[B]enevolence is an original pleasure arising from the pleasure of the person belov'd, and a pain proceeding from his pain: From which correspondence of impressions there arises a subsequent desire of his pleasure, and aversion to his pain.
AS all the perceptions of the mind may be divided into impressions and ideas, so the impressions admit of another division into original and secondary... Of the first kind are all the impressions of the senses, and all bodily pains and pleasures [heat or cold, thirst or hunger, pleasure or pain of some kind or other]: Of the second are the passions, and other emotions resembling them.
By direct passions I understand such as arise immediately from good or evil, from pain or pleasure. By indirect such as proceed from the same principles, but by the conjunction of other qualities... [U]nder the indirect passions I comprehend pride, humility, ambition, vanity, love, hatred, envy, pity, malice, generosity, with their dependants. And under the direct passions, desire, aversion, grief, joy, hope, fear, despair and security.
Beside good and evil, or in other words, pain and pleasure, the direct passions frequently arise from a natural impulse or instinct, which is perfectly unaccountable... These passions, properly speaking, produce good and evil, and proceed not from them, like the other affections.
Men are vain of the beauty of their country, of their county, of their parish. Here the idea of beauty plainly produces a pleasure. This pleasure is related to pride. The object or cause of this pleasure is, by the supposition, related to self, or the object of pride. By this double relation of impressions and ideas, a transition is made from the one impression to the other.
Men are vain of the beauty either of their country, or their county, or even of their parish. Here the idea of beauty plainly produces a pleasure. This pleasure is related to pride. The object or cause of this pleasure is, by the supposition, related to self, the object of pride. By this double relation of sentiments and ideas, a transition is made from one to the other.
In the third place, 'tis observable of these two kinds of association, that they very much assist and forward each other, and that the transition is more easily made where they both concur in the same object. Thus a man, who, by any injury from another, is very much discompos'd and ruffled in his temper, is apt to find a hundred subjects of discontent, impatience, fear, and other uneasy passions; especially if he can discover these subjects in or near the person, who was the cause of his first passion.
In the third place, it is observable of these two kinds of association, that they very much assist and forward each other, and that the transition is more easily made, where they both concur in the same object. Thus, a man, who, by an injury received from another, is very much discomposed and ruffled in his temper, is apt to find a hundred subjects of hatred, discontent, impatience, fear, and other uneasy passions; especially, if he can discover these subjects in or near the person, who was the object of his first emotion.
THE passions of pride and humility being simple and uniform impressions, 'tis impossible we can ever, by a multitude of words, give a just definition of them, or indeed of any of the passions.
'TIS altogether impossible to give any definition of the passions of love and hatred; and that because they produce merely a simple impression, without any mixture or composition.
The second quality, which I discover in these passions [pride and humility]... is their sensations, or the peculiar emotions they excite in the soul, and which constitute their very being and essence. Thus pride is a pleasant sensation, and humility a painful; and upon the removal of the pleasure and pain, there is in reality no pride nor humility.
Pride is a certain satisfaction in ourselves, on account of some accomplishment or possession, which we enjoy: Humility, on the other hand, is a dissatisfaction with ourselves, on account of some defect or infirmity.
[I]t is essential to pride to turn our view on ourselves with complacency and satisfaction.
[E]nvy is excited by some present enjoyment of another, which by comparison diminishes our idea of our own... The enjoyment, which is the object of envy, is commonly superior to our own.
In these two sets of passion, there is an obvious distinction to be made between the object of the passion and its cause. The object of pride and humility is self: The cause of the passion is some excellence in the former case; some fault, in the latter. The object of love and hatred is some other person: The causes, in like manner, are either excellencies or faults.
Effect or Part of the Cause?
The first idea, that is presented to the mind, is that of the cause or productive principle. This excites the passion [of pride], connected with it; and that passion, when excited, turns our view to another idea, which is that of self. Here then is a passion plac'd betwixt two ideas, of which the one produces it, and the other is produc'd by it.
In order to excite pride, there are always two objects we must contemplate, viz. the cause or that object which produces pleasure; and self, which is the real object of the passion.
There is another passion sometimes called love, but more properly good will or charity. There can be no greater argument to a man, of his own power, than to find himself able not only to accomplish his own desires, but also to assist other men in theirs: and this is that conception wherein consisteth charity.
[T]he nearer we search into human Nature, the more we shall be convinced, that the Moral Virtues are the Political Offspring which Flattery begot upon Pride.
Compassion frequently arises, where there is no preceding esteem or friendship; and compassion is an uneasiness in the sufferings of another. It seems to spring from the intimate and strong conception of his sufferings; and our imagination proceeds by degrees, from the lively idea to the real feeling of another's misery.
Malice and envy also arise in the mind without any preceding hatred or injury; though their tendency is exactly the same with that of anger and ill-will. The comparison of ourselves with others seems to be the source of envy and malice. The more unhappy another is, the more happy do we ourselves appear in our own conception.
Among these phænomena we may esteem it a very favourable one to our present purpose, that tho' fame in general be agreeable, yet we receive a much greater satisfaction from the approbation of those, whom we ourselves esteem and approve of, than of those, whom we hate and despise... But if the mind received from any original instinct a desire of fame, and aversion to infamy, fame and infamy wou'd influence us without distinction; and every opinion, according as it were favourable or unfavourable, wou'd equally excite that desire or aversion.
There are bodily wants or appetites, acknowledged by every one, which necessarily precede all sensual enjoyment, and carry us directly to seek possession of the object. Thus, hunger and thirst have eating and drinking for their end; and from the gratification of these primary appetites arises a pleasure, which may become the object of another species of desire or inclination, that is secondary and interested. In the same manner, there are mental passions, by which we are impelled immediately to seek particular objects, such as fame, or power, or vengeance, without any regard to interest; and when these objects are attained, a pleasing enjoyment ensues, as the consequence of our indulged affections. Nature must, by the internal frame and constitution of the mind, give an original propensity to fame, ere we can reap any pleasure from that acquisition, or pursue it from motives of self-love, and desire of happiness. If I have no vanity, I take no delight in praise: If I be void of ambition, power gives me no enjoyment: If I be not angry, the punishment of an adversary is totally indifferent to me.
Our opinions of all kinds are strongly affected by society and sympathy, and it is almost impossible for us to support any principle or sentiment, against the universal consent of every one, with whom we have any friendship or correspondence. But of all our opinions, those, which we form in our own favour; however lofty or presuming; are, at bottom, the frailest, and the most easily shaken by the contradiction and opposition of others... Hence that strong love of fame, with which all mankind are possessed. It is in order to fix and confirm their favourable opinion of themselves, not from any original passion, that they seek the applauses of others.
... this fanstasical system of liberty ... arguments against liberty or free-will ... the doctrine of liberty [is] absurd... in one sense, and unintelligible in any other.
I hope, therefore, to make it appear, that all men have ever agreed in the doctrine both of necessity and of liberty... and that the whole controversy has hitherto turned merely upon words... But to proceed in this reconciling project... By liberty... we can only mean a power of acting or not acting, according to the determinations of the will; that is, if we chuse to remain at rest, we may; if we chuse to move, we also may. Now this hypothetical liberty is universally allowed to belong to every one, who is not a prisoner and in chains.
I desire it may be observ'd, that by the will, I mean nothing but the internal impression we feel and are conscious of, when we knowingly give rise to any new motion of our body, or new perception of our mind.
Beside these calm passions, which often determine the will, there are certain violent emotions of the same kind, which have likewise a great influence on that faculty.
'Tis not contrary to reason to prefer the destruction of the whole world to the scratching of my finger. 'Tis not contrary to reason for me to chuse my total ruin, to prevent the least uneasiness of an Indian or person wholly unknown to me. 'Tis as little contrary to reason to prefer even my own acknowledg'd lesser good to my greater, and have a more ardent affection for the former than the latter.
A passion is an original existence, or, if you will, modification of existence, and contains not any representative quality, which renders it a copy of any other existence or modification. When I am angry, I am actually possest with the passion, and in that emotion have no more a reference to any other object, than when I am thirsty, or sick, or more than five foot high. 'Tis impossible, therefore, that this passion can be oppos'd by, or be contradictory to truth and reason; since this contradiction consists in the disagreement of ideas, consider'd as copies, with those objects, which they represent.
We may add to this a remark; that in matters of religion men take a pleasure in being terrify'd, and that no preachers are so popular, as those who excite the most dismal and gloomy passions. In the common affairs of life, where we feel and are penetrated with the solidity of the subject, nothing can be more disagreeable than fear and terror; and 'tis only in dramatic performances and in religious discourses, that they ever give pleasure. In these latter cases the imagination reposes itself indolently on the idea; and the passion, being soften'd by the want of belief in the subject, has no more than the agreeable effect of enlivening the mind, and fixing the attention.
There is no passion of the human mind but what may arise from poetry; tho' at the same time the feelings of the passions are very different when excited by poetical fictions, from what they are when they arise from belief and reality. A passion, which is disagreeable in real life, may afford the highest entertainment in a tragedy, or epic poem. In the latter case it lies not with that weight upon us: It feels less firm and solid: And has no other than the agreeable effect of exciting the spirits, and rouzing the attention.
There is, however, a diffculty in applying to the present subject, in its full extent, this solution, however ingenious and satisfactory it may appear. It is certain, that the same object of distress, which pleases in a tragedy, were it really set before us, would give the most unfeigned uneasiness; though it be then the most effectual cure to languor and indolence.
The pathetic description of the butchery, made by Verres of the Sicilian captains, is a masterpiece of this kind: But I believe none will affirm, that the being present at a melancholy scene of that nature would afford any entertainment. Neither is the sorrow here softened by fiction: For the audience were convinced of the reality of every circumstance.
When good is certain or probable, it produces Joy. When evil is in the same situation there arises Grief or Sorrow.
When either good or evil is uncertain, it gives rise to Fear or Hope, according to the degrees of uncertainty on the one side or the other.
Desire arises from good consider'd simply, and Aversion is deriv'd from evil. The Will exerts itself, when either the good or the absence of the evil may be attain'd by any action of the mind or body.
SOME objects produce immediately an agreeable sensation, by the original structure of our organs, and are thence denominated Good; as others, from their immediate disagreeable sensation, acquire the appellation of Evil. Thus moderate warmth is agreeable and good; excessive heat painful and evil.
When good is certain or probable, it produces Joy. When evil is in the same situation, there arises Grief or Sorrow.
Desire arises from good considered simply, and Aversion is derived from evil. The Will exerts itself, when either the good or the absence of the evil may be attained by any action of the mind or body.


This ring mixes the elaborated Ragnetti technique, together with a paired-down, high shine gold ball that reminds the Soffione flower. 100% handmade in Sardinia. PRODUCT INFORMATION => METAL: Rose Gold 18k. DIMENSIONS: Ragnetti sphere diameter 12mm, smooth sphere diameter 8mm.


text:
#include "opt_inet.h"
#include "opt_carp.h"

#include <sys/param.h>
#include <sys/systm.h>
#include <sys/sockio.h>
#include <sys/malloc.h>
#include <sys/socket.h>
#include <sys/kernel.h>
#include <sys/sysctl.h>

#include <net/if.h>
#include <net/if_types.h>
#include <net/route.h>

#include <netinet/in.h>
#include <netinet/in_var.h>
#include <netinet/in_pcb.h>

#include <netinet/igmp_var.h>

static int in_mask2len(struct in_addr *);
static void in_len2mask(struct in_addr *, int);
static int in_lifaddr_ioctl(struct socket *, u_long, caddr_t,
	struct ifnet *, struct thread *);

static int	in_addprefix(struct in_ifaddr *, int);
static int	in_scrubprefix(struct in_ifaddr *);
static void	in_socktrim(struct sockaddr_in *);
static int	in_ifinit(struct ifnet *,
	    struct in_ifaddr *, struct sockaddr_in *, int);

static int subnetsarelocal = 0;
SYSCTL_INT(_net_inet_ip, OID_AUTO, subnets_are_local, CTLFLAG_RW,
	&subnetsarelocal, 0, "Treat all subnets as directly connected");

/*
 * The IPv4 multicast list (in_multihead and associated structures) are
 * protected by the global in_multi_mtx.  See in_var.h for more details.  For
 * now, in_multi_mtx is marked as recursible due to IGMP's calling back into
 * ip_output() to send IGMP packets while holding the lock; this probably is
 * not quite desirable.
 */
struct in_multihead in_multihead; /* XXX BSS initialization */
struct mtx in_multi_mtx;
MTX_SYSINIT(in_multi_mtx, &in_multi_mtx, "in_multi_mtx", MTX_DEF | MTX_RECURSE);

extern struct inpcbinfo	ripcbinfo;
extern struct inpcbinfo udbinfo;

/*
 * Return 1 if an internet address is for a ``local'' host
 * (one to which we have a connection).  If subnetsarelocal
 * is true, this includes other subnets of the local net.
 * Otherwise, it includes only the directly-connected (sub)nets.
 */
int
in_localaddr(in)
	struct in_addr in;
{
	register u_long i = ntohl(in.s_addr);
	register struct in_ifaddr *ia;

	if (subnetsarelocal) {
		TAILQ_FOREACH(ia, &in_ifaddrhead, ia_link)
			if ((i & ia->ia_netmask) == ia->ia_net)
				return (1);
	} else {
		TAILQ_FOREACH(ia, &in_ifaddrhead, ia_link)
			if ((i & ia->ia_subnetmask) == ia->ia_subnet)
				return (1);
	}
	return (0);
}

/*
 * Return 1 if an internet address is for the local host and configured
 * on one of its interfaces.
 */
int
in_localip(in)
	struct in_addr in;
{
	struct in_ifaddr *ia;

	LIST_FOREACH(ia, INADDR_HASH(in.s_addr), ia_hash) {
		if (IA_SIN(ia)->sin_addr.s_addr == in.s_addr)
			return 1;
	}
	return 0;
}

/*
 * Determine whether an IP address is in a reserved set of addresses
 * that may not be forwarded, or whether datagrams to that destination
 * may be forwarded.
 */
int
in_canforward(in)
	struct in_addr in;
{
	register u_long i = ntohl(in.s_addr);
	register u_long net;

	if (IN_EXPERIMENTAL(i) || IN_MULTICAST(i))
		return (0);
	if (IN_CLASSA(i)) {
		net = i & IN_CLASSA_NET;
		if (net == 0 || net == (IN_LOOPBACKNET << IN_CLASSA_NSHIFT))
			return (0);
	}
	return (1);
}

/*
 * Trim a mask in a sockaddr
 */
static void
in_socktrim(ap)
struct sockaddr_in *ap;
{
    register char *cplim = (char *) &ap->sin_addr;
    register char *cp = (char *) (&ap->sin_addr + 1);

    ap->sin_len = 0;
    while (--cp >= cplim)
	if (*cp) {
	    (ap)->sin_len = cp - (char *) (ap) + 1;
	    break;
	}
}

static int
in_mask2len(mask)
	struct in_addr *mask;
{
	int x, y;
	u_char *p;

	p = (u_char *)mask;
	for (x = 0; x < sizeof(*mask); x++) {
		if (p[x] != 0xff)
			break;
	}
	y = 0;
	if (x < sizeof(*mask)) {
		for (y = 0; y < 8; y++) {
			if ((p[x] & (0x80 >> y)) == 0)
				break;
		}
	}
	return x * 8 + y;
}

static void
in_len2mask(mask, len)
	struct in_addr *mask;
	int len;
{
	int i;
	u_char *p;

	p = (u_char *)mask;
	bzero(mask, sizeof(*mask));
	for (i = 0; i < len / 8; i++)
		p[i] = 0xff;
	if (len % 8)
		p[i] = (0xff00 >> (len % 8)) & 0xff;
}

/*
 * Generic internet control operations (ioctl's).
 * Ifp is 0 if not an interface-specific ioctl.
 */
/* ARGSUSED */
int
in_control(so, cmd, data, ifp, td)
	struct socket *so;
	u_long cmd;
	caddr_t data;
	register struct ifnet *ifp;
	struct thread *td;
{
	register struct ifreq *ifr = (struct ifreq *)data;
	register struct in_ifaddr *ia = 0, *iap;
	register struct ifaddr *ifa;
	struct in_addr dst;
	struct in_ifaddr *oia;
	struct in_aliasreq *ifra = (struct in_aliasreq *)data;
	struct sockaddr_in oldaddr;
	int error, hostIsNew, iaIsNew, maskIsNew, s;

	iaIsNew = 0;

	switch (cmd) {
	case SIOCALIFADDR:
	case SIOCDLIFADDR:
		if (td && (error = suser(td)) != 0)
			return error;
		/*fall through*/
	case SIOCGLIFADDR:
		if (!ifp)
			return EINVAL;
		return in_lifaddr_ioctl(so, cmd, data, ifp, td);
	}

	/*
	 * Find address for this interface, if it exists.
	 *
	 * If an alias address was specified, find that one instead of
	 * the first one on the interface, if possible.
	 */
	if (ifp) {
		dst = ((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr;
		LIST_FOREACH(iap, INADDR_HASH(dst.s_addr), ia_hash)
			if (iap->ia_ifp == ifp &&
			    iap->ia_addr.sin_addr.s_addr == dst.s_addr) {
				ia = iap;
				break;
			}
		if (ia == NULL)
			TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
				iap = ifatoia(ifa);
				if (iap->ia_addr.sin_family == AF_INET) {
					ia = iap;
					break;
				}
			}
	}

	switch (cmd) {

	case SIOCAIFADDR:
	case SIOCDIFADDR:
		if (ifp == 0)
			return (EADDRNOTAVAIL);
		if (ifra->ifra_addr.sin_family == AF_INET) {
			for (oia = ia; ia; ia = TAILQ_NEXT(ia, ia_link)) {
				if (ia->ia_ifp == ifp  &&
				    ia->ia_addr.sin_addr.s_addr ==
				    ifra->ifra_addr.sin_addr.s_addr)
					break;
			}
			if ((ifp->if_flags & IFF_POINTOPOINT)
			    && (cmd == SIOCAIFADDR)
			    && (ifra->ifra_dstaddr.sin_addr.s_addr
				== INADDR_ANY)) {
				return EDESTADDRREQ;
			}
		}
		if (cmd == SIOCDIFADDR && ia == 0)
			return (EADDRNOTAVAIL);
		/* FALLTHROUGH */
	case SIOCSIFADDR:
	case SIOCSIFNETMASK:
	case SIOCSIFDSTADDR:
		if (td && (error = suser(td)) != 0)
			return error;

		if (ifp == 0)
			return (EADDRNOTAVAIL);
		if (ia == (struct in_ifaddr *)0) {
			ia = (struct in_ifaddr *)
				malloc(sizeof *ia, M_IFADDR, M_WAITOK | M_ZERO);
			if (ia == (struct in_ifaddr *)NULL)
				return (ENOBUFS);
			/*
			 * Protect from ipintr() traversing address list
			 * while we're modifying it.
			 */
			s = splnet();
			TAILQ_INSERT_TAIL(&in_ifaddrhead, ia, ia_link);

			ifa = &ia->ia_ifa;
			IFA_LOCK_INIT(ifa);
			ifa->ifa_addr = (struct sockaddr *)&ia->ia_addr;
			ifa->ifa_dstaddr = (struct sockaddr *)&ia->ia_dstaddr;
			ifa->ifa_netmask = (struct sockaddr *)&ia->ia_sockmask;
			ifa->ifa_refcnt = 1;
			TAILQ_INSERT_TAIL(&ifp->if_addrhead, ifa, ifa_link);

			ia->ia_sockmask.sin_len = 8;
			ia->ia_sockmask.sin_family = AF_INET;
			if (ifp->if_flags & IFF_BROADCAST) {
				ia->ia_broadaddr.sin_len = sizeof(ia->ia_addr);
				ia->ia_broadaddr.sin_family = AF_INET;
			}
			ia->ia_ifp = ifp;
			splx(s);
			iaIsNew = 1;
		}
		break;

	case SIOCSIFBRDADDR:
		if (td && (error = suser(td)) != 0)
			return error;
		/* FALLTHROUGH */

	case SIOCGIFADDR:
	case SIOCGIFNETMASK:
	case SIOCGIFDSTADDR:
	case SIOCGIFBRDADDR:
		if (ia == (struct in_ifaddr *)0)
			return (EADDRNOTAVAIL);
		break;
	}
	switch (cmd) {

	case SIOCGIFADDR:
		*((struct sockaddr_in *)&ifr->ifr_addr) = ia->ia_addr;
		return (0);

	case SIOCGIFBRDADDR:
		if ((ifp->if_flags & IFF_BROADCAST) == 0)
			return (EINVAL);
		*((struct sockaddr_in *)&ifr->ifr_dstaddr) = ia->ia_broadaddr;
		return (0);

	case SIOCGIFDSTADDR:
		if ((ifp->if_flags & IFF_POINTOPOINT) == 0)
			return (EINVAL);
		*((struct sockaddr_in *)&ifr->ifr_dstaddr) = ia->ia_dstaddr;
		return (0);

	case SIOCGIFNETMASK:
		*((struct sockaddr_in *)&ifr->ifr_addr) = ia->ia_sockmask;
		return (0);

	case SIOCSIFDSTADDR:
		if ((ifp->if_flags & IFF_POINTOPOINT) == 0)
			return (EINVAL);
		oldaddr = ia->ia_dstaddr;
		ia->ia_dstaddr = *(struct sockaddr_in *)&ifr->ifr_dstaddr;
		if (ifp->if_ioctl && (error = (*ifp->if_ioctl)
					(ifp, SIOCSIFDSTADDR, (caddr_t)ia))) {
			ia->ia_dstaddr = oldaddr;
			return (error);
		}
		if (ia->ia_flags & IFA_ROUTE) {
			ia->ia_ifa.ifa_dstaddr = (struct sockaddr *)&oldaddr;
			rtinit(&(ia->ia_ifa), (int)RTM_DELETE, RTF_HOST);
			ia->ia_ifa.ifa_dstaddr =
					(struct sockaddr *)&ia->ia_dstaddr;
			rtinit(&(ia->ia_ifa), (int)RTM_ADD, RTF_HOST|RTF_UP);
		}
		return (0);

	case SIOCSIFBRDADDR:
		if ((ifp->if_flags & IFF_BROADCAST) == 0)
			return (EINVAL);
		ia->ia_broadaddr = *(struct sockaddr_in *)&ifr->ifr_broadaddr;
		return (0);

	case SIOCSIFADDR:
		error = in_ifinit(ifp, ia,
		    (struct sockaddr_in *) &ifr->ifr_addr, 1);
		if (error != 0 && iaIsNew)
			break;
		if (error == 0)
			EVENTHANDLER_INVOKE(ifaddr_event, ifp);
		return (0);

	case SIOCSIFNETMASK:
		ia->ia_sockmask.sin_addr = ifra->ifra_addr.sin_addr;
		ia->ia_subnetmask = ntohl(ia->ia_sockmask.sin_addr.s_addr);
		return (0);

	case SIOCAIFADDR:
		maskIsNew = 0;
		hostIsNew = 1;
		error = 0;
		if (ia->ia_addr.sin_family == AF_INET) {
			if (ifra->ifra_addr.sin_len == 0) {
				ifra->ifra_addr = ia->ia_addr;
				hostIsNew = 0;
			} else if (ifra->ifra_addr.sin_addr.s_addr ==
					       ia->ia_addr.sin_addr.s_addr)
				hostIsNew = 0;
		}
		if (ifra->ifra_mask.sin_len) {
			in_ifscrub(ifp, ia);
			ia->ia_sockmask = ifra->ifra_mask;
			ia->ia_sockmask.sin_family = AF_INET;
			ia->ia_subnetmask =
			     ntohl(ia->ia_sockmask.sin_addr.s_addr);
			maskIsNew = 1;
		}
		if ((ifp->if_flags & IFF_POINTOPOINT) &&
		    (ifra->ifra_dstaddr.sin_family == AF_INET)) {
			in_ifscrub(ifp, ia);
			ia->ia_dstaddr = ifra->ifra_dstaddr;
			maskIsNew  = 1; /* We lie; but the effect's the same */
		}
		if (ifra->ifra_addr.sin_family == AF_INET &&
		    (hostIsNew || maskIsNew))
			error = in_ifinit(ifp, ia, &ifra->ifra_addr, 0);
		if (error != 0 && iaIsNew)
			break;

		if ((ifp->if_flags & IFF_BROADCAST) &&
		    (ifra->ifra_broadaddr.sin_family == AF_INET))
			ia->ia_broadaddr = ifra->ifra_broadaddr;
		if (error == 0)
			EVENTHANDLER_INVOKE(ifaddr_event, ifp);
		return (error);

	case SIOCDIFADDR:
		/*
		 * in_ifscrub kills the interface route.
		 */
		in_ifscrub(ifp, ia);
		/*
		 * in_ifadown gets rid of all the rest of
		 * the routes.  This is not quite the right
		 * thing to do, but at least if we are running
		 * a routing process they will come back.
		 */
		in_ifadown(&ia->ia_ifa, 1);
		/*
		 * XXX horrible hack to detect that we are being called
		 * from if_detach()
		 */
		if (ifaddr_byindex(ifp->if_index) == NULL) {
			in_pcbpurgeif0(&ripcbinfo, ifp);
			in_pcbpurgeif0(&udbinfo, ifp);
		}
		EVENTHANDLER_INVOKE(ifaddr_event, ifp);
		error = 0;
		break;

#ifdef IGMPV3
	case SIOCSIPMSFILTER:
		/* Set IPv4 Multicast Source Filter */
		return (ip_setmopt_srcfilter(so, (struct ip_msfilter **)data));
	case SIOCGIPMSFILTER:
		/* Get IPv4 Multicast Source Filter */
		return (ip_getmopt_srcfilter(so, (struct ip_msfilter **)data));
	case SIOCSMSFILTER:
		/* Set Protocol-Independent Multicast Source Filter */
		return (sock_setmopt_srcfilter
				(so, (struct group_filter **)data));
	case SIOCGMSFILTER:
		/* Get Protocol-Independent Multicast Source Filter */
		return (sock_getmopt_srcfilter
				(so, (struct group_filter **)data));
#ifdef IGMPV3_DEBUG
	case SIOCGMSFILTERDUMP:
		return (dump_in_multisrc());
#endif
#endif /* IGMPV3 */

	default:
		if (ifp == 0 || ifp->if_ioctl == 0)
			return (EOPNOTSUPP);
		return ((*ifp->if_ioctl)(ifp, cmd, data));
	}

	/*
	 * Protect from ipintr() traversing address list while we're modifying
	 * it.
	 */
	s = splnet();
	TAILQ_REMOVE(&ifp->if_addrhead, &ia->ia_ifa, ifa_link);
	TAILQ_REMOVE(&in_ifaddrhead, ia, ia_link);
	LIST_REMOVE(ia, ia_hash);
	IFAFREE(&ia->ia_ifa);
	splx(s);

	return (error);
}

/*
 * SIOC[GAD]LIFADDR.
 *	SIOCGLIFADDR: get first address. (?!?)
 *	SIOCGLIFADDR with IFLR_PREFIX:
 *		get first address that matches the specified prefix.
 *	SIOCALIFADDR: add the specified address.
 *	SIOCALIFADDR with IFLR_PREFIX:
 *		EINVAL since we can't deduce hostid part of the address.
 *	SIOCDLIFADDR: delete the specified address.
 *	SIOCDLIFADDR with IFLR_PREFIX:
 *		delete the first address that matches the specified prefix.
 * return values:
 *	EINVAL on invalid parameters
 *	EADDRNOTAVAIL on prefix match failed/specified address not found
 *	other values may be returned from in_ioctl()
 */
static int
in_lifaddr_ioctl(so, cmd, data, ifp, td)
	struct socket *so;
	u_long cmd;
	caddr_t	data;
	struct ifnet *ifp;
	struct thread *td;
{
	struct if_laddrreq *iflr = (struct if_laddrreq *)data;
	struct ifaddr *ifa;

	/* sanity checks */
	if (!data || !ifp) {
		panic("invalid argument to in_lifaddr_ioctl");
		/*NOTRECHED*/
	}

	switch (cmd) {
	case SIOCGLIFADDR:
		/* address must be specified on GET with IFLR_PREFIX */
		if ((iflr->flags & IFLR_PREFIX) == 0)
			break;
		/*FALLTHROUGH*/
	case SIOCALIFADDR:
	case SIOCDLIFADDR:
		/* address must be specified on ADD and DELETE */
		if (iflr->addr.ss_family != AF_INET)
			return EINVAL;
		if (iflr->addr.ss_len != sizeof(struct sockaddr_in))
			return EINVAL;
		/* XXX need improvement */
		if (iflr->dstaddr.ss_family
		 && iflr->dstaddr.ss_family != AF_INET)
			return EINVAL;
		if (iflr->dstaddr.ss_family
		 && iflr->dstaddr.ss_len != sizeof(struct sockaddr_in))
			return EINVAL;
		break;
	default: /*shouldn't happen*/
		return EOPNOTSUPP;
	}
	if (sizeof(struct in_addr) * 8 < iflr->prefixlen)
		return EINVAL;

	switch (cmd) {
	case SIOCALIFADDR:
	    {
		struct in_aliasreq ifra;

		if (iflr->flags & IFLR_PREFIX)
			return EINVAL;

		/* copy args to in_aliasreq, perform ioctl(SIOCAIFADDR_IN). */
		bzero(&ifra, sizeof(ifra));
		bcopy(iflr->iflr_name, ifra.ifra_name,
			sizeof(ifra.ifra_name));

		bcopy(&iflr->addr, &ifra.ifra_addr, iflr->addr.ss_len);

		if (iflr->dstaddr.ss_family) {	/*XXX*/
			bcopy(&iflr->dstaddr, &ifra.ifra_dstaddr,
				iflr->dstaddr.ss_len);
		}

		ifra.ifra_mask.sin_family = AF_INET;
		ifra.ifra_mask.sin_len = sizeof(struct sockaddr_in);
		in_len2mask(&ifra.ifra_mask.sin_addr, iflr->prefixlen);

		return in_control(so, SIOCAIFADDR, (caddr_t)&ifra, ifp, td);
	    }
	case SIOCGLIFADDR:
	case SIOCDLIFADDR:
	    {
		struct in_ifaddr *ia;
		struct in_addr mask, candidate, match;
		struct sockaddr_in *sin;
		int cmp;

		bzero(&mask, sizeof(mask));
		if (iflr->flags & IFLR_PREFIX) {
			/* lookup a prefix rather than address. */
			in_len2mask(&mask, iflr->prefixlen);

			sin = (struct sockaddr_in *)&iflr->addr;
			match.s_addr = sin->sin_addr.s_addr;
			match.s_addr &= mask.s_addr;

			/* if you set extra bits, that's wrong */
			if (match.s_addr != sin->sin_addr.s_addr)
				return EINVAL;

			cmp = 1;
		} else {
			if (cmd == SIOCGLIFADDR) {
				/* on getting an address, take the 1st match */
				cmp = 0;	/*XXX*/
			} else {
				/* on deleting an address, do exact match */
				in_len2mask(&mask, 32);
				sin = (struct sockaddr_in *)&iflr->addr;
				match.s_addr = sin->sin_addr.s_addr;

				cmp = 1;
			}
		}

		TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link)	{
			if (ifa->ifa_addr->sa_family != AF_INET)
				continue;
			if (!cmp)
				break;
			candidate.s_addr = ((struct sockaddr_in *)&ifa->ifa_addr)->sin_addr.s_addr;
			candidate.s_addr &= mask.s_addr;
			if (candidate.s_addr == match.s_addr)
				break;
		}
		if (!ifa)
			return EADDRNOTAVAIL;
		ia = (struct in_ifaddr *)ifa;

		if (cmd == SIOCGLIFADDR) {
			/* fill in the if_laddrreq structure */
			bcopy(&ia->ia_addr, &iflr->addr, ia->ia_addr.sin_len);

			if ((ifp->if_flags & IFF_POINTOPOINT) != 0) {
				bcopy(&ia->ia_dstaddr, &iflr->dstaddr,
					ia->ia_dstaddr.sin_len);
			} else
				bzero(&iflr->dstaddr, sizeof(iflr->dstaddr));

			iflr->prefixlen =
				in_mask2len(&ia->ia_sockmask.sin_addr);

			iflr->flags = 0;	/*XXX*/

			return 0;
		} else {
			struct in_aliasreq ifra;

			/* fill in_aliasreq and do ioctl(SIOCDIFADDR_IN) */
			bzero(&ifra, sizeof(ifra));
			bcopy(iflr->iflr_name, ifra.ifra_name,
				sizeof(ifra.ifra_name));

			bcopy(&ia->ia_addr, &ifra.ifra_addr,
				ia->ia_addr.sin_len);
			if ((ifp->if_flags & IFF_POINTOPOINT) != 0) {
				bcopy(&ia->ia_dstaddr, &ifra.ifra_dstaddr,
					ia->ia_dstaddr.sin_len);
			}
			bcopy(&ia->ia_sockmask, &ifra.ifra_dstaddr,
				ia->ia_sockmask.sin_len);

			return in_control(so, SIOCDIFADDR, (caddr_t)&ifra,
					  ifp, td);
		}
	    }
	}

	return EOPNOTSUPP;	/*just for safety*/
}

/*
 * Delete any existing route for an interface.
 */
void
in_ifscrub(ifp, ia)
	register struct ifnet *ifp;
	register struct in_ifaddr *ia;
{
	in_scrubprefix(ia);
}

/*
 * Initialize an interface's internet address
 * and routing table entry.
 */
static int
in_ifinit(ifp, ia, sin, scrub)
	register struct ifnet *ifp;
	register struct in_ifaddr *ia;
	struct sockaddr_in *sin;
	int scrub;
{
	register u_long i = ntohl(sin->sin_addr.s_addr);
	struct sockaddr_in oldaddr;
	int s = splimp(), flags = RTF_UP, error = 0;

	oldaddr = ia->ia_addr;
	if (oldaddr.sin_family == AF_INET)
		LIST_REMOVE(ia, ia_hash);
	ia->ia_addr = *sin;
	if (ia->ia_addr.sin_family == AF_INET)
		LIST_INSERT_HEAD(INADDR_HASH(ia->ia_addr.sin_addr.s_addr),
		    ia, ia_hash);
	/*
	 * Give the interface a chance to initialize
	 * if this is its first address,
	 * and to validate the address if necessary.
	 */
	if (ifp->if_ioctl &&
	    (error = (*ifp->if_ioctl)(ifp, SIOCSIFADDR, (caddr_t)ia))) {
		splx(s);
		/* LIST_REMOVE(ia, ia_hash) is done in in_control */
		ia->ia_addr = oldaddr;
		if (ia->ia_addr.sin_family == AF_INET)
			LIST_INSERT_HEAD(INADDR_HASH(ia->ia_addr.sin_addr.s_addr),
			    ia, ia_hash);
		return (error);
	}
	splx(s);
	if (scrub) {
		ia->ia_ifa.ifa_addr = (struct sockaddr *)&oldaddr;
		in_ifscrub(ifp, ia);
		ia->ia_ifa.ifa_addr = (struct sockaddr *)&ia->ia_addr;
	}
	if (IN_CLASSA(i))
		ia->ia_netmask = IN_CLASSA_NET;
	else if (IN_CLASSB(i))
		ia->ia_netmask = IN_CLASSB_NET;
	else
		ia->ia_netmask = IN_CLASSC_NET;
	/*
	 * The subnet mask usually includes at least the standard network part,
	 * but may may be smaller in the case of supernetting.
	 * If it is set, we believe it.
	 */
	if (ia->ia_subnetmask == 0) {
		ia->ia_subnetmask = ia->ia_netmask;
		ia->ia_sockmask.sin_addr.s_addr = htonl(ia->ia_subnetmask);
	} else
		ia->ia_netmask &= ia->ia_subnetmask;
	ia->ia_net = i & ia->ia_netmask;
	ia->ia_subnet = i & ia->ia_subnetmask;
	in_socktrim(&ia->ia_sockmask);
#ifdef DEV_CARP
	/*
	 * XXX: carp(4) does not have interface route
	 */
	if (ifp->if_type == IFT_CARP)
		return (0);
#endif
	/*
	 * Add route for the network.
	 */
	ia->ia_ifa.ifa_metric = ifp->if_metric;
	if (ifp->if_flags & IFF_BROADCAST) {
		ia->ia_broadaddr.sin_addr.s_addr =
			htonl(ia->ia_subnet | ~ia->ia_subnetmask);
		ia->ia_netbroadcast.s_addr =
			htonl(ia->ia_net | ~ ia->ia_netmask);
	} else if (ifp->if_flags & IFF_LOOPBACK) {
		ia->ia_dstaddr = ia->ia_addr;
		flags |= RTF_HOST;
	} else if (ifp->if_flags & IFF_POINTOPOINT) {
		if (ia->ia_dstaddr.sin_family != AF_INET)
			return (0);
		flags |= RTF_HOST;
	}
	if ((error = in_addprefix(ia, flags)) != 0)
		return (error);

	/*
	 * If the interface supports multicast, join the "all hosts"
	 * multicast group on that interface.
	 */
	if (ifp->if_flags & IFF_MULTICAST) {
		struct in_addr addr;

		addr.s_addr = htonl(INADDR_ALLHOSTS_GROUP);
		in_addmulti(&addr, ifp);
	}
	return (error);
}

#define rtinitflags(x) \
	((((x)->ia_ifp->if_flags & (IFF_LOOPBACK | IFF_POINTOPOINT)) != 0) \
	    ? RTF_HOST : 0)
/*
 * Check if we have a route for the given prefix already or add a one
 * accordingly.
 */
static int
in_addprefix(target, flags)
	struct in_ifaddr *target;
	int flags;
{
	struct in_ifaddr *ia;
	struct in_addr prefix, mask, p;
	int error;

	if ((flags & RTF_HOST) != 0)
		prefix = target->ia_dstaddr.sin_addr;
	else {
		prefix = target->ia_addr.sin_addr;
		mask = target->ia_sockmask.sin_addr;
		prefix.s_addr &= mask.s_addr;
	}

	TAILQ_FOREACH(ia, &in_ifaddrhead, ia_link) {
		if (rtinitflags(ia))
			p = ia->ia_dstaddr.sin_addr;
		else {
			p = ia->ia_addr.sin_addr;
			p.s_addr &= ia->ia_sockmask.sin_addr.s_addr;
		}

		if (prefix.s_addr != p.s_addr)
			continue;

		/*
		 * If we got a matching prefix route inserted by other
		 * interface address, we are done here.
		 */
		if (ia->ia_flags & IFA_ROUTE)
			return 0;
	}

	/*
	 * No-one seem to have this prefix route, so we try to insert it.
	 */
	error = rtinit(&target->ia_ifa, (int)RTM_ADD, flags);
	if (!error)
		target->ia_flags |= IFA_ROUTE;
	return error;
}

/*
 * If there is no other address in the system that can serve a route to the
 * same prefix, remove the route.  Hand over the route to the new address
 * otherwise.
 */
static int
in_scrubprefix(target)
	struct in_ifaddr *target;
{
	struct in_ifaddr *ia;
	struct in_addr prefix, mask, p;
	int error;

	if ((target->ia_flags & IFA_ROUTE) == 0)
		return 0;

	if (rtinitflags(target))
		prefix = target->ia_dstaddr.sin_addr;
	else {
		prefix = target->ia_addr.sin_addr;
		mask = target->ia_sockmask.sin_addr;
		prefix.s_addr &= mask.s_addr;
	}

	TAILQ_FOREACH(ia, &in_ifaddrhead, ia_link) {
		if (rtinitflags(ia))
			p = ia->ia_dstaddr.sin_addr;
		else {
			p = ia->ia_addr.sin_addr;
			p.s_addr &= ia->ia_sockmask.sin_addr.s_addr;
		}

		if (prefix.s_addr != p.s_addr)
			continue;

		/*
		 * If we got a matching prefix address, move IFA_ROUTE and
		 * the route itself to it.  Make sure that routing daemons
		 * get a heads-up.
		 *
		 * XXX: a special case for carp(4) interface
		 */
		if ((ia->ia_flags & IFA_ROUTE) == 0
#ifdef DEV_CARP
		    && (ia->ia_ifp->if_type != IFT_CARP)
#endif
							) {
			rtinit(&(target->ia_ifa), (int)RTM_DELETE,
			    rtinitflags(target));
			target->ia_flags &= ~IFA_ROUTE;

			error = rtinit(&ia->ia_ifa, (int)RTM_ADD,
			    rtinitflags(ia) | RTF_UP);
			if (error == 0)
				ia->ia_flags |= IFA_ROUTE;
			return error;
		}
	}

	/*
	 * As no-one seem to have this prefix, we can remove the route.
	 */
	rtinit(&(target->ia_ifa), (int)RTM_DELETE, rtinitflags(target));
	target->ia_flags &= ~IFA_ROUTE;
	return 0;
}

#undef rtinitflags

/*
 * Return 1 if the address might be a local broadcast address.
 */
int
in_broadcast(in, ifp)
	struct in_addr in;
	struct ifnet *ifp;
{
	register struct ifaddr *ifa;
	u_long t;

	if (in.s_addr == INADDR_BROADCAST ||
	    in.s_addr == INADDR_ANY)
		return 1;
	if ((ifp->if_flags & IFF_BROADCAST) == 0)
		return 0;
	t = ntohl(in.s_addr);
	/*
	 * Look through the list of addresses for a match
	 * with a broadcast address.
	 */
#define ia ((struct in_ifaddr *)ifa)
	TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link)
		if (ifa->ifa_addr->sa_family == AF_INET &&
		    (in.s_addr == ia->ia_broadaddr.sin_addr.s_addr ||
		     in.s_addr == ia->ia_netbroadcast.s_addr ||
		     /*
		      * Check for old-style (host 0) broadcast.
		      */
		     t == ia->ia_subnet || t == ia->ia_net) &&
		     /*
		      * Check for an all one subnetmask. These
		      * only exist when an interface gets a secondary
		      * address.
		      */
		     ia->ia_subnetmask != (u_long)0xffffffff)
			    return 1;
	return (0);
#undef ia
}

redpajama_set_name: RedPajamaGithub


text:
Tax Justice Network ■ Pandemic of tax injustice in Ukraine
Pandemic of tax injustice in Ukraine
Tax Justice Network
The Ukrainian government took the pandemic as an opportunity to further shift the tax burden from the rich to the poor, while Tax Justice Network's new illicit financial flows tool confirms the country is vulnerable to profits shifting to tax havens and bank deposits outflows.
Guest blog from the Center for Economic Justice, a new TJN affiliate in Ukraine.
The Ukrainian economy has the largest ratio of exports to GDP in Europe, larger even than mega natural resources exporter Russia. The majority of these are commodities such as agricultural produce, steel and iron ore, and most of the exporters are private companies belonging to rich and super-rich Ukrainians. The wealthy not only control the most profitable sectors of the economy but also the mass media and political parties, and hence their influence allows them to enjoy low taxation and lax tax control of their exports. Personal income tax in Ukraine is flat,[1] withholding tax on dividends is low, and agricultural exporters enjoy a substantial reduction on corporate income tax.
To top up these tax privileges (subsidised by a population with the lowest average wage in Europe) the exporters also shift profits to low tax jurisdictions by underpricing sales to offshore intermediaries. Imagine a company, 'Steel Co', with subsidiaries in Ukraine, Switzerland and Germany. They make the steel in Ukraine and would like to sell it to manufacturers in Germany. If they do this directly, the entire profits of this operation are located in Ukraine, where they would pay 18% in corporate income tax. However, they can first sell it to the subsidiary in Switzerland for a low price, and then sell it from Switzerland to Germany for a high price. In this way, the majority of the profits can be shifted to offshore financial centers (such as Switzerland), where they are taxed at a much lower income tax.
As our two in-depth studies of transfer pricing demonstrated,[2] commodity exports are significantly underpriced, and as a result both the state budget and the Ukrainian economy are losing desperately needed resources. We estimated that around US $3 billion of profits are shifted offshore every year. Underpaid corporate tax alone costs the national budget about US $600 million.
Tax Justice Network's new Illicit Financial Flows Vulnerability Tracker confirms the exposure of Ukraine's financial flows to tax avoidance. It shows that the deposits of Ukrainian firms and individuals are located especially in Switzerland (Figure 1). 30% of the overall vulnerability is created by the US and 26% by Switzerland. It also shows that foreign investment into Ukraine takes place predominantly from offshore financial centres (Figure 2). US $8.4 billion of foreign investment comes from the Netherlands, US $6.4 billion from Cyprus, and US $2.1 billion from Switzerland.
Figure 1. Vulnerability to outward bank deposits of Ukraine, from https://tax-justice.thibi.co/#/profile/UKR
Figure 2. Inward foreign direct investment into Ukraine. Main partners
Apart from the gross injustice of tax avoidance and official under-taxing of the well-off, reduced resources render the Ukrainian state incapable of handling economic crises like the current pandemic.
Given that the Ukrainian budget is meagre[3] and that tackling the crisis requires budgetary intervention, you might expect the government to step up efforts to close tax loopholes and thereby help society address the economic downturn. But you would be entirely wrong. Contrary to the logic of fairness and efficiency, the "anti-crisis measures" implemented have provided further tax breaks for companies, none for employees[4], and negligible support to affected workers.
The key measures deployed by Ukraine to tackle the economic shock have been:
Making agricultural corporates temporarily exempt from land tax;
Temporarily suspending tax checks and fines for corporates;
Suspending the social tax for the self employed;
Introducing a "temporary unemployment" scheme: employees can receive the minimum unemployment benefit (about 150 euros per month) from the state and keep their job, if their employer applies for the scheme[5].
These measures place the burden of tackling the crisis firmly on workers, the poor majority of society, while tax avoiders are given further support at the public expense:
(i) the land tax had already been introduced at a special lower rate substituting the corporate tax for agribusiness. This surprising tax break for super-profitable agri-exporters had been criticised for providing them with an unfair and unnecessary advantage, and now even this lowered rate has been scrapped.
(ii) The suspension of tax checks and fines can be enjoyed only by business owners since taxes and social security contributions are automatically deducted from employees' monthly pay.
(iii) The social security contribution break for the self-employed is surprising on many levels: some business activities remained profitable during the crisis, so why reduce their taxes? And why provide a tax break for the self-employed but not for employees? This measure is in line with the general neoliberal ideology of consecutive right-wing Ukrainian governments.
To conclude, thanks to a lack of sustained pressure on Ukraine's political elite to reduce inequality, the current crisis has led to a further propagation of tax injustice. By their very nature tax issues are international, and so the struggle for tax justice also has to be international. The international community of activists and progressive politicians needs to step up the coordinated effort to fight for tax and economic justice both in Ukraine and around the world.
[1] Absence of progressive taxation in Ukraine means that high income earners pay the same rate of 18% as the poor, while in the majority of Western European countries the rich pay about 55% tax rate.
[2] https://www.guengl.eu/issues/publications/profit-shifting-in-ukraines-exports-of-agricultural-commodities/ , https://www.guengl.eu/issues/publications/profit-shifting-in-ukraines-iron-ore-exports/
[3] See comparisons in the agri-exports study, ibidem.
[4] There are some for the self employed, but our analysis shows this is done inefficiently and in the logic of radical free market thinking.
[5] https://covid19.gov.ua/prohramy-sotsialnoi-pidtrymky
Tax Justice Network Arabic podcast #49: تونس: قانون الإقتراض المُقنّع
By Naomi Fowler ■ 13 January 2022 ■ < 1
The Tax Justice Network's French podcast: Les grands moments de la justice fiscale dans le monde en 2021
By Idriss Linge ■ 13 January 2022 ■ < 1
January 2022 Spanish language podcast, Justicia ImPositiva: La economía mundial en 2022 y la piratería marítima de los paraísos fiscales
A year the tide turned in the fight for tax justice
By Zoe Parkin ■ 20 December 2021 ■ 20 min READ
Tax Justice Network research again draws flak from tax havens and critics
By Tax Justice Network ■ 17 December 2021 ■ 28 min READ
Tax Justice Network Portuguese podcast: Auditores fiscais: heróis invisíveis
By Naomi Fowler ■ 16 December 2021 ■ 2 min READ
Penguins hold millions in Australian banks: revealing trends from Australian and German banking statistics
By Andres Knobel ■ 14 December 2021 ■ 6 min READ
Tax Justice Network Arabic podcast #48: الجباية ببساطة #48 ماذا تبقى من مشروع طلعت حرب؟
By Naomi Fowler ■ 13 December 2021 ■ < 1


The Llano Art Guild is looking for artists interested in selling their artwork at our annual Artisan Christmas Bazaar. The Bazaar will take place November 29th from 5:30 to 8:30.
Artwork will be allowed to stay set up and for sale until December 28th when it will be taken down. Artists will be required to provide their own table, cloth and items to display their wares. We have found most people are looking for small gift items.
Commission on sales is 30% for non members, except November 29th when there will be only a 20% commission.
Set up will be Sunday, November 25th.
IT IS THE TIME TO START MAKING YOUR PIECES FOR THIS SALE!
Please contact Paula Haynes at haynes.paula@yahoo.com if you are interested in participating.


Beauty queens Pia Alonzo Wurtzbach and Catriona Gray on Saturday attended Hacking HIV 2.0 to showcase programs aimed at magnifying human immunodeficiency virus (HIV) awareness in the country.
Gray, Philippine bet for Miss Universe 2018, promoted "SelfCare," saying it is an HIV service using a kit that helps people to have their own HIV screening for their privacy.
"One, these are for those who are ashamed to go to centers and two for those that may be in indescribable fear. Self care is an option for those people that is accessible in your best place," she said during the Hacking HIV 2.0 event at PETA Theater, Quezon City.
The six-month project will offer free kits to 2,000 participants and will start on January next year.
Gray explained that the SelfCare kit would only give an initial diagnosis on clients and would allow instructional video and guides. Clients who are "reactive" may consult doctors for more tests.
She hoped that HIV testing would become a "normal dialogue" and " health routine" among the young generation as they are more prone to HIV.
Wurtzbach, HIV advocacy ambassador, also introduced the 2019 Love Gala and Ripple Awards, which invited advocates to "magnify and mainstream" HIV awareness.
"In the love month next year, we will do it again to inspire more people to rally for the cause," she said.
The Love Gala and Ripple Awards will undertake on Feb. 23 next year at One Esplanade in SM MOA Complex in Pasay City.
Wurtzbach and Gray also joined forces in LoveYourself Inc., local organization that offers free HIV tests, and counseling, to help more communities on HIV awareness.
According to Department of Health, a total of 2,234 Filipinos between age groups of 15 and 24 were diagnosed with HIV from January to August this year.


People rarely train to improve posture. If we did, we'd see a lot more people training their posterior chains than their anterior core. Since everyone wants a flat stomach, everyone then trains their abdominals while forgetting about their postural muscles at the back. As a result, our anterior or front side gets much stronger than our back muscles and muscular imbalances start to occur; that's when our posture may suffer. Add to that how we as a population spend too much time sitting down and we have the recipe for bad backs and tight hips. This explains why doing these 5 exercises are important to maintain that muscular balance and improve our posture.
That's right. I'm giving you a foot exercise to solve bad posture. You see, if we lose mobility in our ankles, our knees start to compensate for it, which then become hypermobile. When that happens, our hips will then start to compensate and tighten up, which then strains the back. So, it makes sense to break the chain where it all began and that's with the ankles.
Simply place your foot a couple of inches from the floor. While keeping the foot flat, touch your knee to the wall. If you don't feel a stretch, move back until you feel it. Do 30 reps per foot, 10 with your knee going center, 10 with your knee going towards the side of your big toe, and 10 with your knee going towards the side of your little toe.
This exercise is good to stretch the hip flexor that tightens up when you sit too long or do a lot of anterior core exercises. Stand with your feet together then lunge back with the right foot, while bringing your right knee towards the floor. Place your right hand on the floor and bring your left elbow on the inside part of your left foot. From here, raise your left hand and point it to the ceiling and feel the stretch.
This exercise is effective in increasing shoulder and t-spine mobility, which will remove that hunch in your back if you do have one. Go on your hands and knees then raise your knees one inch from the floor. Swing your right foot under your left leg then plant that foot on the floor so that you are now facing up, push your hips up from this position. Go back to the start position and repeat for 5 reps each side.
When we think about posture, we rarely think about glutes. But, in truth, they may be the missing link. You have to remember that the hips are the midpoint of your body, which connects your upper and lower halves. If you have glute amnesia or if your glutes lack strength, this may cause problems with your posture. Lie down on your back with your knees bent and your feet on the floor. Lift your buttocks up until your hips are fully extended. Contract your glutes and your abdominals then slowly lower back down. Repeat for 10 reps.
The basic plank is actually the start off to more advanced exercises such as different plank variations and the push up variations. It's a good way to engage the core muscles and include the shoulders in the process. The key with the plank is that you want to look as if you're standing upright. This means that your spine is neutral and that your hips are in line with your ankles and shoulders. Stay in the plank for 20-30 seconds and for 3 sets.
Next articleAsk Jaymie: Healthy Breakfast Ideas, please!
A certified strength and conditioning specialist (CSCS) and a certified nutrition coach under Precision Nutrition (PN-1). He is the head coach and program director of the 360 Fitness Clubs in Fort, Alabang, Ortigas, Makati, QC, and the new athlete's performance facility, 360 PRO in Pioneer.