Collage

n. A piece of art made by sticking various different materials, aka PHENOMENA Magazine
Department
Beyond Black
xwidget_60_Beyond Black There's a place between skepticism and belief, between the known and the unknown. You sit there comfortably while you glance over your morning paper and read your horoscope or an article on a "haunted house". It echoes with phrases like "harmless fun," "I don't take it seriously, but..." "of course there's nothing to it," and "my great-grandmother used to say..." It's where hotels build their thirteenth floors and where the coins you toss into wishing wells land. But it is also a disturbing location. The pinch of spilled salt you throw over your left shoulder "just in case" lands there. Paths crossed by black cats and walking routes under ladders might lead you there. It's usually a place of minor trepidations and disregarded terrors, but the gods we fear dwell there, too, and damnations we dread lurk within it. Hilary Mantel's Beyond Black plops you right down into the middle of that place between what you know and what you don't know and has you laughing at irrational absurdities while being chilled by absurd irrationalities. The author makes you laugh and shiver simultaneously. The title could describe her humor -- "beyond black". It is, in fact, so dark that it enlightens. Mantel's characters, even in minor roles, are astonishingly vivid. Vile, charming, cruel, kind, mundane, weird, dead or alive -- they will remain with you longer and more distinctly than some of your blood relations. Alison is a psychic -- "a professional psychic, not some sort of magic act" -- who plies her trade both privately and publicly in the counties surrounding London. It's a lucrative profession, but she experiences almost constant physical and mental anguish due to her life-long dealings with "airside." The dead are a bothersome, nattering lot and her "spirit guide" is a lecherous, vulgar lowlife named Morris. Her childhood was abysmal and lacking in even the slightest of comforts; as an adult she offers an odd, but genuine, comfort to others. Alison is a "woman of unfeasible size...soft as an Edwardian, opulent as a showgirl." When she leaves a room you feel her as "a presence, a trace." And she is in need of both personal and business organization. Colette is thin and so colorless she barely notices herself. "When I'm gone I leave no trace," she thinks. Alison says that when Colette has been gone an hour or two, "I wonder if I have imagined you." She's also efficient: "sharp, rude, and effective." Other than lewd specters, Alison has no real relationships with the opposite gender. Colette is divorced from a man nearly as insipid as she. Since the bland couple had no friends, they invited everyone they knew to their picture-perfect, utterly empty wedding and the marriage was over before the ceremony was paid off. The final push out of matrimony came when Colette phoned and spoke to her mother-in-law -- who she consequently discovered had been dead for a number of hours at the time of the conversation. There's always the chance, she admits, it might have been a wrong number, but her life is so meaningless even the thought she might have communed with the dead gives it meaning and she starts seeking out psychics. It turns out that Colette hasn't a whit of psychic power -- even reading Tarot cards is beyond her -- but she does become Alison's personal assistant/business partner. She gets Alison's affairs in order and her career on the right track. Colette doesn't quite believe in the paranormal, but like most of us she can "entertain simultaneously any number of conflicting opinions." When "[f]aced with the impossible", Colette's mind "simply scuttle[s] off in another direction." Colette learns much of the psychic biz -- Mantel skewers the "Sensitives" with sparkling satire -- is fakery and flimflam. Alison uses such techniques herself, but not to defraud. She smoothes uncomfortable truths and conveys soothing messages to her audiences and clients rather than passing on the lies and confabulations of the perfidious, selfish, trivial, generally clueless dead. Although she doesn't particularly believe, Collette cannot deny Alison's abilities. Colette believes enough to be frightened of the afterlife as Alison paints it: ...the bewildered dead clustered among the dumpsters outside of burger bars, clutching door keys in their hands or queuing with their lunchboxes where the gates of a small factory once stood... There are thousands of them out there, so pathetic and lame-brained they can't cross the road to get where they are going, dithering on the kerbs of new arterial roads and byways... they follow [Alison home], and stat petering the first chance they get. They elbow her in the ribs with questions always questions; but never the right ones. Always, where's my pension book, has the Number 64 gone, are we having a fry-up this morning? Never, am I dead?...   Collette also probes and prods Alison with questions in pursuit of material for a book she intends to produce. Dead voices and strange noises play havoc with the recordings of the interviews, but the dialogues also force Alison to begin confronting her past, much of which is unclear to her until Colette forces her to talk about it. Even before we know the entire story it's a past nasty enough to establish a possibility (never voiced by characters or author) that Alison's supernatural abilities might stem from psychosis rather than psychic connection. Spirit guide Morris, in fact, was one of a murderous band of thugs who dominated Alison's unspeakably brutal childhood. As Alison recalls more of her childhood, Morris's dead but still villainous mates seem to be reassembling to further torture her. The women escape the "fiends", as Alison calls them, by moving to a spanking new house in a new upmarket development full of families and minivans. (Realty, new construction, suburbia and its inhabitants are all impaled on the spike of Mantel's sardonic wit.) Despite everyone thinking that Alison is some type of weather forecaster and that the women are a lesbian couple, the move brings Alison temporary respite from the fiends. But Colette, ever more controlling even as she occasionally feels unappreciated, increasingly sees her life as a dead end. No new man has entered her life in the seven years she's spent with Alison. Paying but pointless punters and kooks, Al's fellow Sensitives -- who disdain her as much as she disdains them -- surround her. Her ex, Gavin, tells her he is dating a model. Meanwhile Alison remembers more and more of her dreadful early days and the dead fiends, their fiendishness now even more enhanced, are drawing nigh and bringing death with them. There's more here, too, than a mere narrative. Mantel piles opposites on top of dualities, offers scathingly true observations on modern life, and shapes an overall metaphor for England circa 1997-2004. Surprising, unsettling, deeply subversive -- one cannot but wonder if Mantel's literary cohort will completely appreciate what a dark marvel this novel is. Readers of Peter Straub, Ramsey Campbell, Graham Joyce, and Elizabeth Hand, will, however, recognize Hilary Mantel as beyond brilliant.
books · Jan. 12, 2023, 3:11 a.m.
Java Regular Expression
Removing everything but numbers from String String value = string.replaceAll("[^0-9]",""); String clean1 = string1.replaceAll("[^0-9]", ""); or String clean2 = string2.replaceAll("[^\\d]", ""); Where \d is a shortcut to [0-9] character class, or String clean3 = string1.replaceAll("\\D", ""); Where \D is a negation of the \d class (which means [^0-9])   Using Match, Pattern class in java.util.regex boolean bln = Pattern.matches("^[a-zA-Z0-9]*$", this.input); ^ : 문자열의 시작 $ : 문자열의 종료 . : 임의의 한 문자(문자의 종류는 가리지 않음) | : or ? : 앞 문자가 없거나 하나있음. + : 앞 문자가 하나 이상임. * : 앞 문자가 없을 수도 무한정 많을 수도 있음을 나타냄. 만약, .* 으로 정규식이 시작한다면 시작하는 문자열과 같은 문자열이 뒤에 없거나 많을 수도 있는 경우에만 일치를 시킨다. 즉, abc 일 경우 시작문자인 a를 기준으로 a가 없을경우와 a가 무한정 많은 경우에도 true를 반환하기 때문에 abc의 경우는 true를 반환한다. [] : 문자 클래스를 지정할 때 사용. 문자의 집합이나 범위를 나타내면 두 문자 사이는 '-' 기호로 범위를 나타낸다. []내에서 ^ 가 선행하여 나타나면 not를 나타낸다. {} : 선행문자가 나타나는 횟수 또는 범위 a{3} 인 경우 a가 3번 반복된 경우 / a{3,}이면 a가 3번 이상 반복인 경우. 또한 a{3,5}인 경우 a가 3번 이상 5번 이하 반복된 경우를 나타냄 \w : 알파벳이나 숫자 \W : 알파벳이나 숫자를 제외한 문자 \d : 숫자 [0-9]와 동일 \D : 숫자를 제외한 모든 문자 ^[0-9]*$ : only number ^[a-zA-Z]*$ : only English ^[가-힣]*$ : only Korean ^[a-zA-Z0-9]*$ : English/number   e.g. 1) email : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$  or  ^[_0-9a-zA-Z-]+@[0-9a-zA-Z-]+(.[_0-9a-zA-Z-]+)*$ cellphone :  ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$ phone : ^\d{2,3} - \d{3,4} - \d{4}$ id : \d{6} \- [1-4]\d{6} IP addr : ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) https://stackoverflow.com/questions/6883579/java-regular-expression-removing-everything-but-numbers-from-string   2) How to test if a String contains both letters and numbers .matches("^(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]+$") The regex asserts that there is an uppercase alphabetical character (?=.*[A-Z]) somewhere in the string, and asserts that there is a digit (?=.*[0-9]) somewhere in the string, and then it checks whether everything is either alphabetical character or digit.   3) How can I de-duplicate repeated characters in a Java string? how________are_______you to how_are_you string.replaceAll("_+", "_")  
java · Jan. 12, 2023, 2:56 a.m.
regex
How do I create a screen capture using Robot class?
In this example you’ll see how to create a screen capture / screenshot and save it as an image file such a PNG image. Some classes are use in this program including the java.awt.Robot, java.awt.image.BufferedImage and javax.imageio.ImageIO. package org.kodejava.awt; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.awt.AWTException; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import java.io.File; import java.io.IOException; public class ScreenCapture { public static void main(String[] args) { try { Robot robot = new Robot(); // Capture screen from the top left in 200 by 200 pixel size. BufferedImage bufferedImage = robot.createScreenCapture( new Rectangle(new Dimension(200, 200))); // The captured image will the written into a file called // screenshot.png File imageFile = new File("screenshot.png"); ImageIO.write(bufferedImage, "png", imageFile); } catch (AWTException | IOException e) { e.printStackTrace(); } } } https://kodejava.org/how-do-i-create-a-screen-capture-using-robot-class/
java · Jan. 12, 2023, 2:44 a.m.
BufferedImage ImageIO Robot
Simple Q&A
Q : Where can I download JSTL taglibs? i.e. jstl.jar and standard.jar A : If you're running a Servlet 2.5 compatible container and the web.xml is declared as at least Servlet 2.5, then you should be able to use the new JSTL 1.2 instead. Note that JSTL 1.2 does not require a standard.jar. Q : The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path A : Add a runtime first and select project properties. Then check the server name from the 'Runtimes' tab Q : Remove html tags from string using java A :  String noHTMLString = htmlString.replaceAll("\\<.*?>",""); Using Jsoup public static String html2text(String html) { return Jsoup.parse(html).text(); } https://stackoverflow.com/questions/4432560/remove-html-tags-from-string-using-java Q : JSPX A : https://jspx-bay.sourceforge.net/ Q : Apache Jakarta A : http://archive.apache.org/dist/jakarta/ Q : Prevent download attempts of videos in a video server A : Silverlight might be an idea to start with. Q : mp3 header information reader not working A : import org.farng.mp3.MP3File; you need to call mp3file.seekMP3Frame(); before attempting to retrieve bitrate, this method will read the file headers including the bitrate. or use http://www.jthink.net/jaudiotagger/examples_id3.jsp Q : How to get the message in a custom error page (Tomcat)? A : <c:out value="${requestScope['javax.servlet.error.message']}"/> javax.servlet.error.status_code java.lang.Integer javax.servlet.error.exception_type java.lang.Class javax.servlet.error.message java.lang.String javax.servlet.error.exception java.lang.Throwable javax.servlet.error.request_uri java.lang.String javax.servlet.error.servlet_name java.lang.String * <c:catch> Tag <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %> <html> <head> <title><c:catch> Tag Example</title> </head> <body> <c:catch var ="catchException"> <% int x = 5/0;%> </c:catch> <c:if test = "${catchException != null}"> <p>The exception is : ${catchException} <br /> There is an exception: ${catchException.message}</p> </c:if> </body> </html> Q : Get current action in jsp - struts2 A :  <s:url forceAddSchemeHostAndPort="true" includeParams="all"/> Q : Oracle date to Java date A : little h for "Hour in am/pm (1-12)" and H for "Hour in day (0-23)" see here: SimpleDateFormat SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); Date date = dateFormat.parse("2011-08-19 06:11:03.0"); Q : How to get previous URL? A :  HttpServletRequest.getHeader("Referer"); Q : [JSP] 파일 다운로드창에서 한글깨짐 방지? A : response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "utf-8") + ";");  
java · Jan. 12, 2023, 2:03 a.m.
How to Display Row Header on JTable Instead of Column Header
This is a proof of concept only Disclaimer: Before I get a bunch of hate mail about the, obviously, horrible things I've done to make this work, I stole most of the painting code straight out of the source, this is how it's actually done within the look and feel code itself :P I've also gone to the nth degree, meaning that I've literally assumed that you wanted the row headers to look like the column headers. If this isn't a requirement, it would be SO much easier to do... Okay, this is a basic proof of concept, which provides the means to generate the row header and render them the same way as they are normally, just as row headers instead. Things that need to be added/supported: Detect when the table model is changed (that is, a new table model is set to the table) Detect when the column model is changed (that is, a new column model is set to the table) Much of this functionality would probably need to be added to the TableWithRowHeader implementation... Basically, what this "tries" to do, is create a custom row header, based on a JTableHeader, remove the existing column header and add itself into the row header view position of the enclosing JScrollPane. import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridBagConstraints; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JViewport; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.event.ChangeEvent; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.event.TableColumnModelEvent; import javax.swing.event.TableColumnModelListener; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; public class TableRowHeaderTest { public static void main(String[] args) { new TableRowHeaderTest(); } public TableRowHeaderTest() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { ex.printStackTrace(); } Object rowData1[][] = { {"", "", "", ""}, {"", "", "", ""}, {"", "", "", ""}, {"", "", "", ""} }; Object columnNames1[] = {"HEADER 1", "HEADER 2", "HEADER 3", "HEADER 4"}; JTable table1 = new TableWithRowHeader(rowData1, columnNames1); table1.getColumnModel().getColumn(0).setPreferredWidth(120); JScrollPane scrollPane1 = new JScrollPane(table1); scrollPane1.setColumnHeaderView(null); JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(scrollPane1); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class TableWithRowHeader extends JTable { private TableRowHeader rowHeader; public TableWithRowHeader(final Object[][] rowData, final Object[] columnNames) { super(rowData, columnNames); rowHeader = new TableRowHeader(this); } @Override protected void configureEnclosingScrollPane() { // This is required as it calls a private method... super.configureEnclosingScrollPane(); Container parent = SwingUtilities.getUnwrappedParent(this); if (parent instanceof JViewport) { JViewport port = (JViewport) parent; Container gp = port.getParent(); if (gp instanceof JScrollPane) { JScrollPane scrollPane = (JScrollPane) gp; JViewport viewport = scrollPane.getViewport(); if (viewport == null || SwingUtilities.getUnwrappedView(viewport) != this) { return; } scrollPane.setColumnHeaderView(null); scrollPane.setRowHeaderView(rowHeader); } } } } public class TableRowHeader extends JTableHeader { private JTable table; public TableRowHeader(JTable table) { super(table.getColumnModel()); this.table = table; table.getColumnModel().addColumnModelListener(new TableColumnModelListener() { @Override public void columnAdded(TableColumnModelEvent e) { repaint(); } @Override public void columnRemoved(TableColumnModelEvent e) { repaint(); } @Override public void columnMoved(TableColumnModelEvent e) { repaint(); } @Override public void columnMarginChanged(ChangeEvent e) { repaint(); } @Override public void columnSelectionChanged(ListSelectionEvent e) { // Don't care about this, want to highlight the row... } }); table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { repaint(); } }); } public JTable getTable() { return table; } @Override public Dimension getPreferredSize() { Dimension size = new Dimension(); JTable table = getTable(); if (table != null) { TableColumnModel model = table.getColumnModel(); if (model != null) { for (int index = 0; index < model.getColumnCount(); index++) { TableColumn column = model.getColumn(index); TableCellRenderer renderer = column.getHeaderRenderer(); if (renderer == null) { renderer = getDefaultRenderer(); } Component comp = renderer.getTableCellRendererComponent(table, column.getHeaderValue(), false, false, -1, index); size.width = Math.max(comp.getPreferredSize().width, size.width); size.height += table.getRowHeight(index); } } } return size; } /** * Overridden to avoid propagating a invalidate up the tree when the * cell renderer child is configured. */ @Override public void invalidate() { } /** * If the specified component is already a child of this then we don't bother doing anything - stacking order doesn't matter for cell renderer components * (CellRendererPane doesn't paint anyway). */ @Override protected void addImpl(Component x, Object constraints, int index) { if (x.getParent() == this) { return; } else { super.addImpl(x, constraints, index); } } @Override protected void paintComponent(Graphics g) { // super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); g2d.setColor(getBackground()); g2d.fillRect(0, 0, getWidth(), getHeight()); JTable table = getTable(); if (table != null) { int width = getWidth(); TableColumnModel model = table.getColumnModel(); if (model != null) { for (int index = 0; index < model.getColumnCount(); index++) { TableColumn column = model.getColumn(index); TableCellRenderer renderer = column.getHeaderRenderer(); if (renderer == null) { renderer = getDefaultRenderer(); } boolean selected = table.getSelectedRow() == index; Component comp = renderer.getTableCellRendererComponent(table, column.getHeaderValue(), selected, false, 0, index); add(comp); comp.validate(); int height = table.getRowHeight(index) - 1; comp.setBounds(0, 0, width, height); comp.paint(g2d); comp.setBounds(-width, -height, 0, 0); g2d.setColor(table.getGridColor()); g2d.drawLine(0, height, width, height); g2d.translate(0, height + 1); } } } g2d.dispose(); removeAll(); } } } Disclaimer: This is likely to blow up in your face. I make no checks for preventing the header from responding to things like changes to the column row sortering and ... in theory ... it shouldn't try and "resize" the column but I didn't test that... https://stackoverflow.com/questions/26248084/how-to-display-row-header-on-jtable-instead-of-column-header
java · Jan. 12, 2023, 1:36 a.m.
JTable swing
How do you return a JSON object from a Java Servlet
Write the JSON object to the response object's output stream. You should also set the content type as follows, which will specify what you are returning: response.setContentType("application/json"); // Get the printwriter object from response to write the required json object to the output stream PrintWriter out = response.getWriter(); // Assuming your json object is **jsonObject**, perform the following, it will return your json object out.print(jsonObject); out.flush(); or First convert the JSON object to String. Then just write it out to the response writer along with content type of application/json and character encoding of UTF-8. Here's an example assuming you're using Google Gson to convert a Java object to a JSON string: protected void doXxx(HttpServletRequest request, HttpServletResponse response) { // ... String json = new Gson().toJson(someObject); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(json); } That's all. https://stackoverflow.com/questions/2010990/how-do-you-return-a-json-object-from-a-java-servlet  
java · Jan. 12, 2023, 1:30 a.m.
How do I check which version of Python is running my script?
This information is available in the sys.version string in the sys module: >>> import sys Human readable: >>> print(sys.version) # parentheses necessary in python 3. 2.5.2 (r252:60911, Jul 31 2008, 17:28:52) [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] For further processing, use sys.version_info or sys.hexversion: >>> sys.version_info (2, 5, 2, 'final', 0) # or >>> sys.hexversion 34014192 To ensure a script runs with a minimal version requirement of the Python interpreter add this to your code: assert sys.version_info >= (2, 5) This compares major and minor version information. Add micro (=0, 1, etc) and even releaselevel (='alpha','final', etc) to the tuple as you like. Note however, that it is almost always better to "duck" check if a certain feature is there, and if not, workaround (or bail out). Sometimes features go away in newer releases, being replaced by others. or Use platform's python_version from the stdlib: from platform import python_version print(python_version()) # 3.9.2 https://stackoverflow.com/questions/1093322/how-do-i-check-which-version-of-python-is-running-my-script
python · Jan. 12, 2023, 1:19 a.m.
The Overnight
xwidget_48_The Overnight What could be more innocuous than a bookstore? Modern chain stores are designed to exude a safe welcoming feeling for the customer. They are a safe haven for the reader--aren't they? How creepy can a modern shopping complex get anyway? The masterful Ramsey Campbell can make it quite creepy, thank you, and he also turns the cozy embrace of a clean, well-lighted book emporium into a place of terror. Perhaps, as a booklover who got her wish of receiving plenty of free books only to realize that such largesse becomes a problem in itself and thus occasionally feels threatened by stacks of tomes, I can identify more closely than most with The Overnight. And, too, like Campbell, I sojourned briefly at a Borders bookstore. But I'm sure that even if books have never been anything but your friends and bookstores only benign, you'll still be rewarded with this delightfully disturbing novel. Campbell combines wickedly insightful wit, a wise understanding of human nature, awesome prose, a rich evocation atmosphere of fear, and, well, retail experience to create yet another modern masterpiece. Right. The man seems to write masterpieces as easily and frequently as a politician lies. Adding to that achievement is his ability to write, at least lately, entirely different "sorts" of books each time. No one, with the exception of Peter Straub, evolves his horror so readily or so well. The Overnight is also an extremely accessible novel, a true "page-turner," and would serve as an excellent vehicle to attract the masses. In fact, of all Campbell's novels in the last ten years, this one could stock the mass market bins just as well as it pleases elitist horror snobs like me. Not only does The Overnight succeed as horror, it's a sublime satire of the modern workplace. The plot centers on Texts, a newly opened, Borders-like American chain store in the not-yet-completed Fenny Meadows Retail Park on a highway between Manchester and Liverpool. For Woody Blake, the store's American boss, it's a chance to prove himself in his first position as a branch manager. His staff is competent, but like any group of diverse personalities in an intense work environment, there are small irritations and minor disagreements. Woody's gung-ho, team spirit retail attitude --"Everything's good or we wouldn't sell it." -- would be annoying in a U.S. store, in England it is even more so. Campbell deftly shifts the point of view from one character to another with each chapter. As we get to know the employees we also become aware of small incidents that, in isolation, are meaningless. Together they are ominous and eerie. Only the reader, of course, gets all the data -- the odd draft, the disordered, damaged, and often grimy books, fogged videos, a constant feeling of being watched, clammy walls, an elevator (or, rather, lift) with a mind of its own, a blur here, a computer glitch there. Only the perpetual fog outside that never seems to dissipate is obvious to all. Nothing much is right, although nothing seems hugely wrong until Woody gets the first month's numbers: the Fenny Meadows Text is setting new records for nonperformance and the big guns are heading over from New York in less than two weeks. Woody decides the answer is to push even harder and to have everyone work all night before the inspection to make sure everything is in tip-top shape. One of the employees is run down in the parking lot but Woody's only real concern is the store. Wilf, a former dyslexic who is now a voracious reader, loses his beloved ability to read. A perfectly copyedited store flyer keeps turning up with an embarrassing a mistake in each batch printed. A reading group and author's signing go spectacularly awry. A local author hints that Fenny Meadows has a peculiar history. Each of the thirteen (hmmm...) employees -- Agnes, Angus, Connie, Gavin, Greg, Jake, Jill, Lorraine, Madeleine, Nigel, Ray, Ross, Wilf -- are distinct right down to their individual modes of transportation. At the same time, they realistically match the "type" of individuals who work in such stores whether it is located in Cheshire or Ohio. Campbell plays them both in ensemble and in isolation as what should be small problems grow large, relationships lose the veneer of politeness, normal conversations begin to drip venom, prejudices become more pronounced, the overnight looms like Doomsday, and everyone is expected to smile, smile, smile. Chapters overlap one another, layering viewpoints, impelling the action, and the reader becomes almost another character in The Overnight -- mute, unable to scream out a warning, brimming with dread, certain that nothing will turn out right in the end, but still hoping it will. What's behind all the nasty goings-on? Campbell makes it plain by the end, although he wastes no exposition on explanation. Whether The Overnight is an extremely well done variation on a standard supernatural trope or something else is a question I'm still debating with myself. Not that it matters. What does matter is that Ramsey Campbell, for all his previous accolades and acclaim as a master of horror, is a writer very much in his prime. The Overnight is not only another dark jewel in his uncanny crown, it is one of its most wondrous gems. (from Cemetery Dance #52) • • • Other novels by Ramsey Campbell reviewed : »» Darkest Part of the Woods by Ramsey Campbell »» Ghosts And Grisly Things by Ramsey Campbell »» Nazareth Hill by Ramsey Campbell »» Pact of the Fathers by Ramsey Campbell »» Silent Children by Ramsey Campbell
books · March 29, 2022, 10:35 a.m.
The Darkest Part of the Woods By Ramsey Campbell
"We're the lucky ones," says an inhabitant of a madhouse. "We are, because we're what people call mad or whatever they say we are these days. They don't know that it means we'll be readier than they are. We're already on our way, so it won't be as much of a shock."   xwidget_47_The Darkest Part of the Woods   Allow me to introduce the main characters-- Dr Lennox Price: An American academic and authority on mass hallucination and popular delusion. Back in the "druggy sixties, he "proved" (with his book, The Mechanics of Delusion) that fringe beliefs interdepend with the more mainstream and skepticism is the result of the same psychological mechanism that produces the very beliefs it questioned. He came, originally, to the Brichester area to prove that the odd stories locals told of what they saw in the Goodmanswood were the result of a mutated lichen. Evidently Dr Price's contact with the hallucinogenic symbiotic organisms drove him to insanity some years back. He became obsessed with the woods and is now a resident of the Arbour, an institution for the mentally unstable. Dr Lennox is not the only "casualty of the sixties" with connections to the woods at the Arbour. These others as a leader of sorts recognize him. Margo Price: An artist popular enough to have her paintings collected in a glossy coffee table art book. Not long after coming to England with her husband, she produced an enigmatic Escher-esque painting that became ubiquitous adornment for many dorms and lofts of the 70s. Margo's art is all about making the viewer look again, presenting more than initially meets the eye. Heather Price: The elder Price daughter. Capable, stable, the one who handles things, and the single family member who "lacks imagination." She has a longtime job at the local university (which had also employed her father) as a librarian. The other members of the family create books, she catalogs and properly shelves them. Although now long estranged, she married, of all people, an accountant. Their union produced -- Sam: A 22-year old recent university graduate with a degree in English literature who works in an about-to-go-under sf/f/h bookstore. Sam is very much a modern young person, although many readers may not recognize just how iconic he is. Bright, well-educated, appreciative of family rather than rebellious, underemployed, and a bit lost. Except Sam is a bit more lost than he or anyone else realizes. Sylvia Price: The younger Price daughter. The one who could leave the nest because Heather stayed. She has collected folktales for at least one published book The Secret Woods: Sylvan Myths and she's been off, evidently pursuing her bliss and another book, to the Americas. Her welcomed return to her family is complicated by a joyously accepted, but somewhat mysterious pregnancy. She is also becoming as obsessive about the woods as her father and begins to gather the information that will explain the unexplainable. Book CoverHome turf for the Prices is Woodland Close, a suburban neighborhood of the small city of Brichester in England's West Country. (Yes, this is the same fictional Brichester Campbell visited before in his very early tales. Back then it was a depressing urban landscape. It seems much more pleasant now.) Woodland Close, a mixture of old English village and newer residences, is situated on the edge of Goodmanswood, a dense forest that dates back to the Roman era. The woods lie between Brichester and Woodland Close and have, for the first time, lost a part of itself - despite local protest - to a motorway bypass. Sam , one of the activists trying to protect the trees, suffered broken ankle from a nasty fall. He still limps. There you have it. What happens next is pure dark magic. Campbell takes these characters and, word by word, reveals them and the story. Although some of their dialogue seems, at first, enigmatic, you quickly realize each always tells the truth and that the supposedly illogical utterances of the "insane" and those descending into insanity are quite logical and just as true. While making each character an individual whole, the author exposes the geography of the pervasively supernatural nature surrounding them. Over and over Campbell describes the trees, the woods, the environment in creatural terms. They are insect-legged, have fingers full of panic, reptilian claws, and even greyish tentacles; they swarm, their leaves become messengers. Humans are described in sylvan terms: quiet as a tree stump; sleeping like a log, like a piece of wood with no ideas; stiff and frail as a bundle of sticks; unresponsive as a tree trunk. Every word, every space between becomes a part of a complex incantation. Names are full of meaning. Language is marvelously significant. Like Margo's art, we are compelled to look and look again at the pictures the pages present. Books are just one symbolic metaphor Campbell develops and embellishes. The main characters are all involved with books, they write them or plan to write them or work with them or sell them in a world that, as we all well know, places little importance on the written word. Books are of a more than dual nature. Books are rational and reasoned but are also magical and irrational. They are sources of enlightenment and at the core of the darkest doom. Hidden and unknown, common and well understood, they can be turned into series of zeros and ones; they are hand-crafted and singular. Books are clean and neat, they supply entertainment and knowledge; they are decaying stinking things that lead to horrors so abhorrent the human mind cannot conceive them... Revelations are made. Horror crawls forth and becomes inevitable. The world is turned upside down. The Prices and we must accept the impossible and enter a new reality. There is resistance, but no way of escape. The Prices become outcasts in a world where even the most ordinary becomes laden with portent and dread . (In one small but brilliant bit of business, Campbell transforms three mundane women in a small grocery into a trio of weird sisters of Shakespearian proportion.) We survive. Some of us do anyway. But the world is no longer the same. Literally. That's what happens when we are truly disturbed and more than discomforted by, well, it's just a book now isn't it? As for reassurance -- we're left with damned little. "We're the lucky ones," says an inhabitant of a madhouse near the end of Darkest Part. "We are, because we're what people call mad or whatever they say we are these days. They don't know that it means we'll be readier than they are. We're already on our way, so it won't be as much of a shock." Ramsey Cambell's been dabbling in the non-supernatural with his last three novels. He returns to it with an unparalleled potency and power. This one's a classic, boys and girls. Someday you'll be pretending you were perspicacious enough to recognize The Darkest Part of the Woods as such back in '03. Don't lie to posterity. Make it true. An Addendum: I'm amazed (considering TDPW came out over a year ago in limited hardcover in the UK and has, therefore, already gone through one round of review) that so few others have seen it as the Supreme Art that it is. Then I thought of a few reasons: This is Ramsey Campbell. Of course it's good and maybe even great. Fulfill our high expectations, sir! Thanks very much. What's next? Campbell makes the assumption that the reader is intelligent. This assumption means you may have to actually read and understand most every word of an incredibly unified whole. This assumption further means that you understand those words and have a respectable appreciation of the English language. This assumption also means that you can recognize and savor some splendid intricacy. Amongst the infinite variety on the menu of horror, this is haute cuisine and a lot of folks have a palate dulled by too many Quarter Pounders with Cheese. -- from Cemetery Dance #48
books · March 29, 2022, 10:30 a.m.
GHOSTS AND GRISLY THINGS by Ramsey Campbell
xwidget_44_Ghosts and Grisly Things Originally released by small British press Pumpkin Books in 1998, Ramsey Campbell's short story collection GHOSTS AND GRISLY THINGS was largely overlooked. Now, published in hardcover from Tor, perhaps it will gain some well-deserved attention. The collection features stories written as early as 1974, as late as 1994, and one initially published in 1998 in the British edition. This newest story, "Ra*e," stands as an example of just how adroitly Campbell wrings effective twists of terror from modern life: A 14-year-old goes out dressed too suggestively for her father's tastes. She goes missing. The suspense builds, is tragically relieved and is then replaced with a growing rage and need for revenge. The culprit is discovered, but not without a final emotional turnaround. "Between Floors" turns an elevator and its lugubrious attendant into a haunting little tale. An aging couple deals with "progress" in "The Sneering." The monster in "The Dead Must Die" is a religious zealot out to destroy the Undead -- those who do not share his convictions. Campbell is, frankly, not for the unintelligent or those who want formulaic chills. But for those who appreciate fine prose and disturbing stories, Campbell can't be beat.   xwidget_45_Dystopia: Collected Stories Richard Christian Matheson's stories are haiku-like in their brevity. Economic, elegantly succinct, often darkly comic, they slice directly to your soul with surgical precision -- surgery performed with no anesthesia. In lesser hands, the drop-dead endings, the staccato sentences, the ironic twists would simply not succeed. But for Matheson, they become unique and effective style. Even when taken to the nth degree -- as in "Vampire" a short-short written entirely in one-word sentences, or the literal list of 25 "Things to Get" -- it works. Even when "cute" -- the intensely paranoid "Wyom...", "Graduation" is a series of gradually disconcerting letters from a son away at school, "Obituary" is just that, "Conversation Piece" is a "transcribed" Q&A; session -- it works. But Matheson can also be ambiguously poignant and insightful ("Who's You in America"), make modern cinema metaphoric ("City of Dreams"), re-create the history of a fictional rock'n'roll band with vivid snippets of pseudo-journalism ("Whatever"), and explore the aberrant ("Region of the Flesh," "Mutilator"). Matheson's short stories have been appearing in anthologies and magazines since 1977 and he's published a single novel, CREATED BY (1993). This new omnibus should serve to introduce him to new readers and as well as confirm his rightful place as one of the best writers of modern dark fiction.   xwidget_46_The Mammoth Book of Best New Horror 11 Now in its eleventh incarnation, I don't know how many volumes of this I've reviewed in the past few years. However many it is, I've consistently praised it. So, to sum up: 1) Although the exact number of pages and stories vary a bit from year to year (this year it's 21 stories in 572 pages), MBBNH is a steal at $11.95. Especially considering you also get a summation of the horror year (1999 in this case), "useful addresses," and a comprehensive "necrology." (On the other hand, I wish there were a matched set of the series nicely done in hardcover. These are anthologies to treasure and fat paperbacks do crumble after a bit.) 2) Editor Jones continues to select some of the finest examples of both established authors and those less well known as well as introducing relative newcomers. 3) Reviewers (including me) have accurately used the following adjectives to describe MBBNH: outstanding, indispensable, essential, comprehensive, terrific, stellar, definitive, excellent.... Longer paeans have included, "credited with having a hand in keeping horror itself alive..." "inspired mix..." "If you buy one horror anthology a year, make it this one. Every. year." "It's people like ... Jones who keep the genre alive and maintain a lofty level of quality in the field." As you can see, practically everything has been said. It's all true. But one so hates to be repetitious. 4) What more could you possibly want? Buy the damned thing and be grateful that Robinson (the UK publisher), Carroll & Graf, and Stephen Jones exist.
books · March 29, 2022, 10:27 a.m.
Nazareth Hill
xwidget_43_Nazareth Hill   With Nazareth Hill, Ramsey Campbell constructs a flawlessly plotted, wonderfully written, superbly scary haunted house story that doesn't shy away from the supernatural, but intertwines it with the psychological to produce a richly rewarding read. Amy is a typical teenager -- imperfect and challenging -- whose mother died when she was a child. She lives with Oswald, her controlling father, in a newly renovated building, Nazareth Hill. Strange things begin to occur. Amy realizes she was frightened by something she saw at Nazareth Hill as a child. Spurred by the discovery of an old Bible used as a diary by a former inhabitant, Amy seeks to discover the truth as her father becomes increasingly irrational. Nazareth Hill is a nasty place and it seems to infect Oswald with its evil. Campbell melds familial conflict with heart-stopping shocks and wraps it all up in a milieu of madness -- essentially dealing with themes that he has always used well in his writing -- but managing, with Nazareth Hill, to unite those themes into a masterwork of the macabre. -- Paula Guran
books · March 29, 2022, 10:22 a.m.
PACT OF THE FATHERS
xwidget_42_Pact of the Fathers   Ramsey Campbell has long been acknowledged among those who know modern horror as a true master. Despite his critical success, he remains largely and unfortunately unknown to the mass audience. If given the chance, his latest novel--PACT OF THE FATHERS -- would probably win those masses over. It's a delicious updating of that venerable crowd-pleaser, the gothic novel. Whether dealing with the psychological or the supernatural, Campbell has endeared himself to horror fans with a convincing and chilling grimness. His realistic portrayals of the horrors of urban and personal disintegration force the reader to consider that which is too disturbing to consider. But, let's face it, this is not the stuff (usually) on which best-sellerdom is launched. With PACT OF THE FATHERS Campbell loses none of his literary touch, but abandons much of his trademark grimness in this gothic romp. He takes what is far from his strongest plot and turns it into a compelling page-turner keyed on winning characterization, deft dialogue, and the occasional surprise. Daniella Logan is the university-student daughter of film mogul Teddy Logan. Logan, an American, started his movie empire in England with a series of Hammer-type horror flicks. He later turned to "uplifting," crowd-pleasing dramas often derived from Biblical tales. Teddy dies suddenly in an automobile accident while driving under the influence of alcohol -- even though this is one bad habit Logan was never known to indulge. The evening after the funeral, Daniella visits her father's grave and discovers a group of black robed men arrayed it and performing some weird ritual. coverDaniella is a contemporary gothic heroine, of course, not some defenseless heiress locked up in a castle. Although she is an heiress of sorts, she's independent, spunky, intelligent, lovely, and a modern incarnation of Nancy Drew determined to discover the meaning of the assembly at the grave. She soon discovers other mysterious clues and determines to discover more. Before it's all over, Daniella -- in pursuit of a missing box, a similarly missing book, and answers about the grave-group -- has life-threatening encounters in the family mansion, discovers her potential inheritance may have been squandered by some poor financial judgment on her father's part (of course, should she die before attaining the proper age, there are other inheritors), is either avoided or ignored by the police and her father's circle of successful friends (the single helpful soul meets with extremely foul play), discovers a strange dagger at her father's grave, is threatened by a bunch of punk girls who hang out at the cemetery, and (back in that family mansion) has the dagger disappear on her, winds up in jail for assaulting a police officer, and is incarcerated against her will in an insane asylum. She also meets up with Mark, an independent, spunky, intelligent, handsome modern incarnation of -- well, not Ned Nickerson. Think Bob Woodward as a cool movie journalist rather than with a political beat. Sparks fly but are quickly doused when she learns his true identity. After a thrilling escape from one of her tangles, she flees to a Greek Island and takes refuge as the guest of the aging but still glamorous Nana Babouris. Teddy made her a star and Nana made Teddy a successful producer. Campbell inserts chapters concerning the island-sojourn in the midst of those with linear progression, thus heightening a sense of suspense. On the off-chance that Tor/Forge changes the cover copy that gives the book's main secret (although the title itself is something of a giveaway), I will go no further. (Although I suspect you and I would have figured it all out fairly early anyway.) Suffice to say the robed assemblage are indeed a wicked bunch and their supposedly ancient beliefs involve murderous suppression of the present. Okay, the plot is far from Campbell's strongest and PACT has more in common with Barbara Micheals/Elizabeth Peters or Daphne DuMaurier (and that's merely a comparison, not meant as disparagement to any of the three) than anything the author has done before -- and it's all marvelous. Daniella is delightful and you can't help but care about her. Moreover, the melodrama has enough real drama to carry a terrifying message: that humans can convince themselves of anything when it comes to satisfying their greed, even that their innocent victims -- since they are sacrificed with love -- go straight to paradise and the most sacred of relationships can be profaned. A Campbell novel is always a treat -- they just come in a variety of flavors. The nail-biting taste of psychochildkiller Hector Woollie in SILENT CHILDREN the haunting supernatural tang -- spiced with a sprinkling of social and domestic trauma -- of NAZARETH HILL, etc. PACT OF THE FATHERS is a bit more over-the-top of the boiling gothic pot than you (oh devoted reader of dark fiction) might expect from the author, but you'll find it a deliciously savory stew. And, with any luck, a larger audience will slurp it up, too. -- Paula Guran, originally appeared in Cemetery Dance #37
books · March 29, 2022, 10:19 a.m.