Goodreads

2023 Reading List

The Gods We Can Touch

The Gods We Can Touch

Aurora Aksnes

Published: | Pages:104

Description: This full-colour reproduction of Aurora’s personal notebook also features all song lyrics from the album, as a beautifully presented cloth hardback with gold foiling. With original album artwork and stunning photography too, this book is a unique and immersive treasure trove for fans. ‘This is a little book I wrote, trying to figure out the soul of my album.’ – Aurora Aksnes

Liner Quotes: Aurora

Liner Quotes: Aurora

Ketil Mosnes

Published: 2018 | Pages:93

My Rating: 5/5
A neat little book for those who are fans of Aurora, but its very light on the content and roughly half the pages are photos.

Description: This book documents the young singer’s 2016-17 travels from her rainy Bergen hometown to Los Angeles, and on to Australia, with exclusive interviews, personal recollections and intimate photographs. It offers a glimpse into–among other things–Aurora’s thoughts on success, her fans, world tours, and, of course, The Smurf Hits.Liner Quotes is a series designed to provide readers with informative and often humorous insight into the minds and lives of some of Norway’s most interesting musicians.

The Mysteries

The Mysteries

Bill Watterson

Published: 2023 | Pages:72

My Rating: 4/5

Description: From Bill Watterson, bestselling creator of the beloved comic strip Calvin and Hobbes, and John Kascht, one of America’s most renowned caricaturists, comes a mysterious and beautifully illustrated fable about what lies beyond human understanding. In a fable for grown-ups by cartoonist Bill Watterson, a long-ago kingdom is afflicted with unexplainable calamities. Hoping to end the torment, the king dispatches his knights to discover the source of the mysterious events. Years later, a single battered knight returns.For the book’s illustrations, Watterson and caricaturist John Kascht worked together for several years in unusually close collaboration. Both artists abandoned their past ways of working, inventing images together that neither could anticipate—a mysterious process in its own right.

Taken by the Tetris Blocks: An Erotic Short Story (Digital Desires, #1)

Taken by the Tetris Blocks: An Erotic Short Story (Digital Desires, #1)

Leonard Delaney

Published: 2014 | Pages:17

My Rating: 3/5

Description: Taken by the Tetris Blocks is a 4000 word short story featuring sexual situations involving blocks. It’s for super mature audiences only.

Code Project – Goodreads RSS to HTML (Python)

I already have my Letterboxed watches set up to syndicate here, to this blog, for archival purposes mostly. When I log a movie in Letterboxed, a plug-in catches it from the RSS feed and makes a post. This is done using a plug-in called “RSS Importer” They aren’t the prettiest posts, I may look into adjusting the formatting with some CSS, but they are there. I really want to do the same for my Goodreads reading. Goodreads lists all have an RSS feed, so reason would have it that I could simply, put that feed into RSS Importer and have the same syndication happen.

For some reason, it throws out an error.

The feed shows as valid and even gives me a preview post, but for whatever reason, it won’t create the actual posts. This is probably actually ok, since the Goodreads RSS feed is weird and ugly. I’ll get more into that in a bit.

The Feed URL Is Here, at the bottom of each list.

I decided that I could simply, do it myself, with Python. One thing Python is excellent for is data retrieval and manipulation. I’m already doing something similar with my FreshRSS Syndication posts. I wanted to run through a bit of the process flow here though I used for creating this script. Partially because it might help people who are trying to learn programming and understand a bit more about how creating a program, at least a simple one, actually sort of works.

There were some basic maintenance tasks needing to be done. Firstly, I made sure I had a category on my WordPress site to accept the posts into. I had this already because I needed it trying to get RSS Importer to work. Secondly, I created a new project in PyCharm. Visual Studio Code works as well, any number of IDEs work, I just prefer PyCharm for Python. In my main.py file, I also added some commented-out bit at the header with URLs cut and pasted from Goodreads. I also verified these feeds actually worked with an RSS Reader.

For the actual code there are basically three steps to this process needed:

  • Retrieve the RSS feed
  • Process the RSS Feed
  • Post the processed data.

Part three here, is essentially already done. I can easily lift the code from my FreshRSS poster, replace the actual post data payload, and let it go. I can’t process data at all without data to process, so step one is to get the RSS data. I could probably work it out also from my FreshRSS script, but instead, I decided to just refresh my memory by searching for “Python Get RSS Feed”. Which brings up one of the two core points I want to make here in this post.

Programming is not about knowing all the code.

Programming is more often about knowing what process needs to be done, and knowing where and how to use the code needed. I don’t remember the exact libraries and syntax to get an RSS feed and feed it through Beautiful Soup. I know that I need to get an RSS feed, and I know I need Beautiful Soup.

My search returned this link, which I cribbed some code from, modifying the variables as needed. I basically skimmed through to just before “Outputting to a file”. I don’t need to output to a file, I can just do some print statements during debugging and then later it will all output to WordPress through a constructed string.

I did several runs along the way, finding that I needed to use lxml instead of xml in the features on the Beautiful Soup Call. I also opted to put the feed URL in a variable instead of directly in the code as the original post had it. It’s easy to swap out. I also did some testing by simply printing the output of “books” to make sure I was actually getting useful data, which I was.

At this point, my code looks something like this (not exactly but something like it:

import requests
from bs4 import BeautifulSoup
​
feedurl = "Goodreads URL HERE"
​
def goodreads_rss(feedurl):
   article_list = []    try:
       r = requests.get(feedurl)
       soup = BeautifulSoup(r.content, features='lxml')
       books = soup.findAll('item')                
       for a in books:
           title = a.find('title').text
           link = a.find('link').text
           published = a.find('pubDate').text            
           book = {
               'title': title,
               'link': link,
               'published': published
              }
           book_list.append(book)        
           return print(book_list)

print('Starting scraping')
goodreads_rss()
print('Finished scraping')

I was getting good data, and so Step 1 (above) was done. The real meat here is processing the data. I mentioned before, Goodreads gives a really ugly RSS feed. It has several tags for data in it, but they aren’t actually used for some reason. Here is a single sample of what a single book looks like:

<item>
<guid></guid>
<pubdate></pubdate>
<title></title>
<link/>
<book_id>5907</book_id>
<book_image_url></book_image_url>
<book_small_image_url></book_small_image_url>
<book_medium_image_url></book_medium_image_url>
<book_large_image_url></book_large_image_url>
<book_description>Written for J.R.R. Tolkien’s own children, The Hobbit met with instant critical acclaim when it was first published in 1937. Now recognized as a timeless classic, this introduction to the hobbit Bilbo Baggins, the wizard Gandalf, Gollum, and the spectacular world of Middle-earth recounts of the adventures of a reluctant hero, a powerful and dangerous ring, and the cruel dragon Smaug the Magnificent. The text in this 372-page paperback edition is based on that first published in Great Britain by Collins Modern Classics (1998), and includes a note on the text by Douglas A. Anderson (2001).]]&gt;</book_description>
<book id="5907">
<num_pages>366</num_pages>
</book>
<author_name>J.R.R. Tolkien</author_name>
<isbn></isbn>
<user_name>Josh</user_name>
<user_rating>4</user_rating>
<user_read_at></user_read_at>
<user_date_added></user_date_added>
<user_date_created></user_date_created>
<user_shelves>2008-reads</user_shelves>
<user_review></user_review>
<average_rating>4.28</average_rating>
<book_published>1937</book_published>
<description>
<img alt="The Hobbit (The Lord of the Rings, #0)" src="https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1546071216l/5907._SY75_.jpg"/><br/>
                                    author: J.R.R. Tolkien<br/>
                                    name: Josh<br/>
                                    average rating: 4.28<br/>
                                    book published: 1937<br/>
                                    rating: 4<br/>
                                    read at: <br/>
                                    date added: 2011/02/22<br/>
                                    shelves: 2008-reads<br/>
                                    review: <br/><br/>
                                    ]]&gt;
  </description>
</item>

Half the data isn’t within the useful tags, instead, it’s just down below the image tag inside the Description. Not all of it though. It’s ugly and weird. The other thing that REALLY sticks out here, if you skim through it, there is NO “title” attribute. The boot title isn’t (quite) even in the feed. Instead, it just has a Book ID, which is a number that, presumably, relates to something on Goodreads.

In the above code, there is a line “for a in books”, which starts a loop and builds an array of book objects. This is where all the data I’ll need later will go, for each book. in a format similar to what is show “title = a.find(‘title’).text”. First I pulled out the easy ones that I might want when later constructing the actual post.

  • num_pages
  • book_description
  • author_name
  • user_rating
  • isbn (Not every book has one, but some do)
  • book_published
  • img

Lastly, I also pulled out the “description” and set to work parsing it out. It’s just a big string, and it’s regularly formatted across all books, so I split it on the br tags. This gave me a list with each line as an entry in the list. I counted out the index for each list element and then split them again on “: “, assigning the value at index [1] (the second value) to various variables.

The end result is an array of book objects with usable data that I can later build into a string that will be delivered to WordPress as a post. The code at this point looks like this:

import requests
from bs4 import BeautifulSoup
​
url = "GOODREADS URL"
book_list = []
​
def goodreads_rss(feed_url):
   try:
       r = requests.get(feed_url)
       soup = BeautifulSoup(r.content, features='lxml')
       books = soup.findAll('item')
       for a in books:
           print(a)
           book_blob = a.find('description').text.split('<br/>')
           book_data = book_blob[0].split('\n                                     ')
           author = a.find('author_name').text
           isbn = a.find('isbn').text
           desc = a.find('book_description').text
           image = str(a.find('img'))
           title = str(image).split('"')[1]
           article = {
               'author': author,
               'isbn': isbn,
               'desc': desc,
               'title': title,
               'image': image,
               'published': book_data[4].split(": ")[1],
               'my_rating': book_data[5].split(": ")[1],
               'date_read': book_data[7].split(": ")[1],
               'my_review': book_data[9].split(": ")[1],
               # Uncomment for debugging
               #'payload': book_data,
              }
           book_list.append(article)
       return book_list
   except Exception as e:
       print('The scraping job failed. See exception: ')
       print(e)
​
print('Starting scraping')
for_feed = goodreads_rss(url)
for each in for_feed:
   print(each)

And a sample of the output looks something like this (3 books):

{'author': 'George Orwell', 'isbn': '', 'desc': ' When Animal Farm was first published, Stalinist Russia was seen as its target. Today it is devastatingly clear that wherever and whenever freedom is attacked, under whatever banner, the cutting clarity and savage comedy of George Orwell’s masterpiece have a meaning and message still ferociously fresh.]]>', 'title': 'Animal Farm', 'image': '<img alt="Animal Farm" src="https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1424037542l/7613._SY75_.jpg"/>', 'published': '1945', 'my_rating': '4', 'date_read': '2011/02/22', 'my_review': ''}
{'author': 'Philip Pullman', 'isbn': '0679879242', 'desc': "Can one small girl make a difference in such great and terrible endeavors? This is Lyra: a savage, a schemer, a liar, and as fierce and true a champion as Roger or Asriel could want--but what Lyra doesn't know is that to help one of them will be to betray the other.]]>", 'title': 'The Golden Compass (His Dark Materials, #1)', 'image': '<img alt="The Golden Compass (His Dark Materials, #1)" src="https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1505766203l/119322._SX50_.jpg"/>', 'published': '1995', 'my_rating': '4', 'date_read': '2011/02/22', 'my_review': ''}
{'author': 'J.R.R. Tolkien', 'isbn': '', 'desc': 'Written for J.R.R. Tolkien’s own children, The Hobbit met with instant critical acclaim when it was first published in 1937. Now recognized as a timeless classic, this introduction to the hobbit Bilbo Baggins, the wizard Gandalf, Gollum, and the spectacular world of Middle-earth recounts of the adventures of a reluctant hero, a powerful and dangerous ring, and the cruel dragon Smaug the Magnificent. The text in this 372-page paperback edition is based on that first published in Great Britain by Collins Modern Classics (1998), and includes a note on the text by Douglas A. Anderson (2001).]]>', 'title': 'The Hobbit (The Lord of the Rings, #0)', 'image': '<img alt="The Hobbit (The Lord of the Rings, #0)" src="https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1546071216l/5907._SY75_.jpg"/>', 'published': '1937', 'my_rating': '4', 'date_read': '2011/02/22', 'my_review': ''}

I still would like to get the Title, which isn’t an entry, but, each Image, uses the Book Title as its alt text. I can use the previously pulled-out “image” string to get this. The image result is a complete HTML Image tag and link. It’s regularly structured, so I can split it, then take the second entry (the title) and assign it to a variable. I should not have to worry about titles with quotes being an issue, since the way Goodreads is sending the payload, these quotes should already be removed or dealt with in some way, or the image tag itself wouldn’t work.

title = str(image).split('"')[1]

I’m not going to go super deep into the formatting process, for conciseness, but it’s not really that hard and the code will appear in my final code chunk. Basically, I want the entries to look like little cards, with a thumbnail image, and most of the data pulled into my array formatted out. I’ll mock up something using basic HTML code independently, then use that code to build the structure of my post string. It will look something like this when finished, with the variables stuck in place in the relevant points, so the code will loop through, and insert all the values:

post_array = []
for each in for_feed:
   post = f'<div class="book-card"> <div> <div class="book-image">' \
          f'{each["image"]}' \
          f'</div> <div class="book-info"> <h3 class="book-title">' \
          f'{each["title"]}' \
          f'</h3> <h4 class="book-author">' \
          f'{each["author"]}' \
          f'</h4> <p class="book-details">' \
          f'Published: {each["published"]} | Pages:{each["pages"]}' \
          f'</p> <p class="book-review">'
   if each["my_rating"] != "0":
          post += f'My Rating: {each["my_rating"]}/5<br>'
   post+= f'{each["my_review"]}' \
          f'</div> </div> <div class="book-description"> <p class="book-summary">' \
          f'Description: {each["desc"]}' \
          f'</p> </div> </div>'
​
   print(post)
   post_array.append(post)

I don’t use all of the classes added, but I did add custom classes to everything, I don’t want to have to go back and modify my code later if I want to add more formatting. I did make a bit of simple CSS that can be added to the WordPress custom CSS (or any CSS actually, if you just wanted to stick this in a webpage) to make some simple cards. They should center in whatever container they get stuck inside, in my case, it’s the WordPress column.

.book-card {
background-color: #DDDDDD;
width: 90%;
margin: 20px auto;
padding:10px;
border: solid 1px;
min-height: 200px;
}
​
.book-image {
float: left;
margin-bottom: 10px;
margin-right: 20px;
width:100px;
}
​
.book-image img {
width: 100%;
object-fit: cover;
}
​
.book-info {
margin: 10px;
}

The end result looks something like this. Unfortunately, the images in the feed are tiny, but that’s ok, it doesn’t need to be huge.

Something I noticed along the way, I had initially been using the “all books” RSS feed, which meant it was giving all books on my profile, not JUST read books. I switched the RSS feed to “read” and things still worked, but “read” only returns a maximum of 200 books. Fortunately, I use shelves based on year for my books, so I can go through each shelf and pull out ALL the books I have read over the years.

Which leads me to a bit of a split in the process.

At some point, I’ll want to run this code, on a schedule somewhere, and have it check for newly read books (probably based on date), and post those as they are read.

But I also want to pull and post ALL the old reads, by date. These two paths will MOSTLY use the same code. For the new books, I’ll attach it to the “read” list, have it check the feed, then compare the date added in the latest entry, entry [0], to the current date. If it’s new, say, within 24 hours, it’ll post the book as a new post.

Change of plans. Rather than make individual posts, I’m going to just generate a pile of HTML code, and make backdated posts for each previous year. Much simpler and cleaner. I can then run the code once a year and make a new post on December 31st. Goodreads already serves the basic purpose of “book tracking”, I mostly just want an archive version. It’s also cleaner looking in the blog and means I don’t need to run the script all the time or have it even make the posts itself.

For the archive, I’ll pull all entries for each of my yearly shelves, then make a post for all of them, replacing the “published date” on each with the “date added” date. Because I want the entries on my Blog to match the (approximate) finished date.

I think, we’ll see.

I’ve decided to just strike out these changes of plans. After making the post, I noticed the date added, is not the date read. I know the yearly shelves are accurate, but the date added is when I added it, probably from some other notes at a later date. Unfortunately, the RSS feed doesn’t have any sort of entry for “Date Read” even though it’s a field you can set as a user, so I just removed it. It’s probably for the best, Goodreads only allows one “Date Read,” so any books I’ve read twice, will not be accurate anyway.

This whole new plan of yearly digests also means in the end I can skip step 3 above. I’m not making the script make the posts, I can cut and paste and make them manually. This lets me double-check things. One little bit I found, there was an artifact in the description of some brackets. I just added a string slice to chop it off.

I guess it’s a good idea to at some point mention the second of the two points I wanted to make here, about reusing code. Programming is all about reusing code. Your own code, someone else’s code, it doesn’t matter, code is code. There are only so many ways to do the same thing in code, they are all going to look generically the same. I picked out bits from that linked article and made them work for what I was doing, I’ll pick bits from my FreshRSS poster code, and clean it up as needed to work here. I’ll reuse 90% of the code here, to make two nearly identical scripts, one to run on a schedule, and one to be run several times manually. This also feeds back into point one, knowing what code you need and how to use it. Find the code you need, massage it together into one new block of code, and debug out the kinks. Wash, rinse, repeat.

The output is located here, under the Goodreads category.

Here is the finished complete script:

url = "GOODREADS URL HERE"
​
import requests
from bs4 import BeautifulSoup
​
book_list = []
​
def goodreads_rss(feed_url):
   try:
       r = requests.get(feed_url)
       soup = BeautifulSoup(r.content, features='lxml')
       books = soup.findAll('item')
       for a in books:
           # print(a)
           book_blob = a.find('description').text.split('<br/>')
           book_data = book_blob[0].split('\n                                     ')
           author = a.find('author_name').text
           isbn = a.find('isbn').text
           pages = a.find('num_pages').text
           desc = a.find('book_description').text[:-3]
           image = str(a.find('img'))
           title = str(image).split('"')[1]
           article = {
               'author': author,
               'isbn': isbn,
               'desc': desc,
               'title': title,
               'image': image,
               'pages': pages,
               'published': book_data[4].split(": ")[1],
               'my_rating': book_data[5].split(": ")[1],
               'date_read': book_data[7].split(": ")[1],
               'my_review': book_data[9].split(": ")[1],
               # Uncomment for debugging
               #'payload': book_data,
              }
           book_list.append(article)
       return book_list
   except Exception as e:
       print('The scraping job failed. See exception: ')
       print(e)
​
print('Starting scraping')
for_feed = goodreads_rss(url)
​
post_array = []
for each in for_feed:
   post = f'<div class="book-card"> <div> <div class="book-image">' \
          f'{each["image"]}' \
          f'</div> <div class="book-info"> <h3 class="book-title">' \
          f'{each["title"]}' \
          f'</h3> <h4 class="book-author">' \
          f'{each["author"]}' \
          f'</h4> <p class="book-details">' \
          f'Published: {each["published"]} | Pages:{each["pages"]}' \
          f'</p> <p class="book-review">'
   if each["my_rating"] != "0":
          post += f'My Rating: {each["my_rating"]}/5<br>'
   post+= f'{each["my_review"]}' \
          f'</div> </div> <div class="book-description"> <p class="book-summary">' \
          f'Description: {each["desc"]}' \
          f'</p> </div> </div>'
​
   print(post)
   post_array.append(post)

2022 Reading List

Mastering The Game: What Video Games Can Teach Us About Success In Life

Mastering The Game: What Video Games Can Teach Us About Success In Life

Jon Harrison

Published: 2015 | Pages:294

My Rating: 3/5

Description: Mastering The Game: What Video Games Can Teach Us About Success In Life takes a look at how the same habits and principles that lead to success when playing video games can be applied to personal and business success. Principles are ideas that are truly timeless, and remain true independent of context, culture or time period. So what are the principles embedded in the most popular video games? Surprisingly, the list strongly resembles the most in demand traits for the workplace. • Adaptability & Managing Change • Personal Accountability • Innovation • Communication & Listening • Teambuilding & Collaboration • Knowledge Sharing • Persistence & Grit Mastering The Game provides analogies, examples, and lessons for connecting the dots between how gamers play and how successful professionals work. Are you ready to take your career to the next level?

Scott Pilgrim, Volume 3: Scott Pilgrim & The Infinite Sadness

Scott Pilgrim, Volume 3: Scott Pilgrim & The Infinite Sadness

Bryan Lee O’Malley

Published: 2006 | Pages:192

My Rating: 4/5

Description:

Scott Pilgrim, Volume 4: Scott Pilgrim Gets It Together

Scott Pilgrim, Volume 4: Scott Pilgrim Gets It Together

Bryan Lee O’Malley

Published: 2007 | Pages:216

My Rating: 4/5

Description:

Scott Pilgrim, Volume 5: Scott Pilgrim vs. the Universe

Scott Pilgrim, Volume 5: Scott Pilgrim vs. the Universe

Bryan Lee O’Malley

Published: 2009 | Pages:184

My Rating: 4/5

Description:

Scott Pilgrim, Volume 6: Scott Pilgrim's Finest Hour

Scott Pilgrim, Volume 6: Scott Pilgrim’s Finest Hour

Bryan Lee O’Malley

Published: 2010 | Pages:245

My Rating: 5/5

Description:

Scott Pilgrim's Precious Little Life (Scott Pilgrim, #1)

Scott Pilgrim’s Precious Little Life (Scott Pilgrim, #1)

Bryan Lee O’Malley

Published: 2004 | Pages:168

My Rating: 5/5

Description:

Scott Pilgrim vs. The World (Scott Pilgrim, #2)

Scott Pilgrim vs. The World (Scott Pilgrim, #2)

Bryan Lee O’Malley

Published: 2005 | Pages:200

My Rating: 4/5

Description:

2021 Reading List

Shikake: The Japanese Art of Shaping Behavior Through Design

Shikake: The Japanese Art of Shaping Behavior Through Design

Naohiro Matsumura

Published: | Pages:192

My Rating: 4/5

Description: We are living in a time when behavioral change is necessary for our health and survival. Yet we find it exceedingly difficult to transform our own habits, let alone those of other people. Enter Naohiro Matsumura, whose powerful new design method is as astonishingly simple in its logic as it is sophisticated in its psychology. It allows any of us—from UX designers and marketers to concerned citizens and overworked parents—to address challenges in our homes, our public spaces, and our social interactions.As Matsumura shows, a shikake—or “device” in Japanese—is a design that exerts influence on us through subtle nudging, rather than direct command; it encourages a particular behavior without telling its (often unwitting) user the primary purpose of that behavior. For • Footprints in a store guide shoppers and keep them socially distant• A basketball hoop placed over a trash can entices children to tidy up their rooms• A symbol of a shrine in a public square encourages respectfulness• A staircase painted to look like piano keys prompts exercise through playCombining traditional Japanese aesthetics with the lessons of behavioral economics, Matsumura reveals how to identify the hidden design cues that already shape our world, and how shikakes can help us confront some of the most pressing challenges of our era, from pandemics to declining civic engagement to climate change and beyond. Mind-bending yet elegant, Shikake presents a tool kit for anyone who wants to create their own mindful designs, for the delight and betterment of us all.

The Endermen Invasion (An Unofficial Gamer's Adventure, #3)

The Endermen Invasion (An Unofficial Gamer’s Adventure, #3)

Winter Morgan

Published: 2014 | Pages:114

My Rating: 2/5

Description: This adventure series is created especially for readers who love the fight of good vs. evil, magical academies like Hogwarts in the Harry Potter saga, and games like Minecraft, Terraria, and Pokemon GO.In this third installment of the Minecraft Gamer’s Adventure series, Steve is invited to participate in an elite building competition on Mushroom Island. His friends—Max, Lucy, and Henry—are impressed and want to join their friend on a journey to the island. Yet not everyone is Steve’s neighbor Kyra is upset because she wasn’t chosen as a contestant. Steve asks Kyra to come to the competition and help the gang build boats to get to Mushroom Island. She agrees, and the group sets out on an adventure to the contest. Getting there is half the fun, and the group treks through the jungle, where they find a rare temple filled with treasure! But getting the treasure isn’t easy, and they have to fight fierce battles to continue their journey.After their exhilarating and rewarding journey to the contest, they finally make their way onto the island and meet the judges, as well as the other four contestants, whose egos are as big as the houses they are building. Steve builds his dream house to impress the judges, but just as they begin judging, the island is overrun with Endermen. Mushroom islands are known for not having hostile mobs, so everyone knows it’s the work of a griefer. Is it one of the contestants? Nobody knows, but they all have to work together to battle this invasion of the Endermen.Will they be able to defeat the Endermen and find out who the griefer is? And who will win the building contest? Find out in this thrilling third installment of the Minecraft Gamer’s Adventure series!Sky Pony Press, with our Good Books, Racehorse and Arcade imprints, is proud to publish a broad range of books for young readers—picture books for small children, chapter books, books for middle grade readers, and novels for young adults. Our list includes bestsellers for children who love stories told with LEGO bricks, books that teach lessons about tolerance, patience, and the environment, and much more. We also publish books for fans of Minecraft and Pokemon GO, including books full of useful hacks, tips, and tricks, as well as Minecraft adventure stories for readers who love the fight of good vs. evil, and magical academies similar to Hogwarts in the Harry Potter saga. While not every title we publish becomes a New York Times bestseller or a national bestseller, we are committed to books on subjects that are sometimes overlooked and to authors whose work might not otherwise find a home.

The Mystery of the Griefer's Mark (An Unofficial Gamer's Adventure, #2)

The Mystery of the Griefer’s Mark (An Unofficial Gamer’s Adventure, #2)

Winter Morgan

Published: 2014 | Pages:114

My Rating: 3/5

Description: Steve is back and ready for more adventures! But this time the excitement lands closer to home. While walking home from the village, Steve is surprised to hear a loud BOOM! When he returns home, he finds his wheat farm destroyed and a huge crater where the wheat once grew. And his diamond sword is missing! Steve believes it’s the act of a griefer with a lot of TNT. Devastated, Steve wants to rebuild and find his sword, but with his wheat destroyed, he must call on old friends to help him.All together again, Lucy, Max, and Henry tell harrowing stories of their treasure hunts and conquests, and Steve discusses his strategy for rebuilding. They all go to sleep, excited to begin their plans; but when they wake up, Henry is missing! Looking for Henry in the village, two of Steve’s neighbors, Kyra and Adam, have been targeted as well: Kyra’s barn was flooded with lava, and Adam’s friend Thomas is missing too!Who is the griefer terrorizing Steve and the villagers? And how will Steve find the resources to rebuild his prosperous farm? With suspicion circulating and no answers to be found, Steve finds himself wrongly suspected of these crimes�and so he must discover who the mischievous griefer is before something even worse happens.

The Quest for the Diamond Sword (An Unofficial Gamer's Adventure, #1)

The Quest for the Diamond Sword (An Unofficial Gamer’s Adventure, #1)

Winter Morgan

Published: 2014 | Pages:114

My Rating: 3/5

Description: Far from his home, with night about to set in, Steve fears for his life. Nighttime is when users are most vulnerable in Minecraft. As he looks for shelter in a temple, he meets a trio of treasure hunters, Max, Lucy, and Henry, who are trying to unearth the treasure under the temple. Steve tells them of his master plan to mine for the most powerful mineral in the Overworld—the diamond. The treasure hunters are eager to join him. Facing treacherous mining conditions, a thunderstorm, and attacks from hostile mobs, these four friends question if it’s better to be a single player than a multiplayer, as they try to watch out for each other and chase Steve’s dream at the same time.Will Steve find the diamonds? Will his friends help or hinder the search? Should he trust his new treasure hunter friends? And will Steve get back in time to save the villagers?Sky Pony Press, with our Good Books, Racehorse and Arcade imprints, is proud to publish a broad range of books for young readers—picture books for small children, chapter books, books for middle grade readers, and novels for young adults. Our list includes bestsellers for children who love to play Minecraft; stories told with LEGO bricks; books that teach lessons about tolerance, patience, and the environment, and much more. While not every title we publish becomes a New York Times bestseller or a national bestseller, we are committed to books on subjects that are sometimes overlooked and to authors whose work might not otherwise find a home.

2020 Reading List

How to Be Black

How to Be Black

Baratunde R. Thurston

Published: 2012 | Pages:254

My Rating: 4/5

Description:

Caliban's War (Expanse, #2)

Caliban’s War (Expanse, #2)

James S.A. Corey

Published: 2012 | Pages:583

My Rating: 4/5

Description: In the vast wilderness of space, James Holden and the crew of the Rocinante have been keeping the peace for the Outer Planets Alliance. When they agree to help a scientist search war-torn Ganymede for a missing child, the future of humanity rests on whether a single ship can prevent an alien invasion that may have already begun . . .

The Field Guide to Dumb Birds of North America

The Field Guide to Dumb Birds of North America

Matt Kracht

Published: 2019 | Pages:174

Description: Perfect book for the birder and anti-birder alikeA humorous look at 50 common North American dumb For those who have a disdain for birds or bird lovers with a sense of humor, this snarky, illustrated handbook is equal parts profane, funny, and—let’s face it—true.Featuring common North American birds, such as the White-Breasted Butt Nugget and the Goddamned Canada Goose (or White-Breasted Nuthatch and Canada Goose for the layperson), Matt Kracht identifies all the idiots in your backyard and details exactly why they suck with humorous, yet angry, ink drawings. With The Field Guide to Dumb Birds of North America , you won’t need to wonder what all that racket is anymore!• Each entry is accompanied by facts about a bird’s (annoying) call, its (dumb) migratory pattern, its (downright tacky) markings, and more.• The essential guide to all things wings with migratory maps, tips for birding, musings on the avian population, and the ethics of birdwatching.• Matt Kracht is an amateur birder, writer, and illustrator who enjoys creating books that celebrate the humor inherent in life’s absurdities. Based in Seattle, he enjoys gazing out the window at the beautiful waters of Puget Sound and making fun of birds.”There are loads of books out there for bird lovers, but until now, nothing for those that love to hate birds. The Field Guide to Dumb Birds of North America fills the void, packed with snarky illustrations that chastise the flying animals in a funny, profane way. ” – UncrateA humorous animal book with 50 common North American birds for people who love birds and also those who love to hate birds• A perfect coffee table or bar top conversation-starting book• Makes a great Mother’s Day, Father’s Day, birthday, or retirement gift

The Case of the Girl Who Took Her Shampoo (But Left Her Mini)

The Case of the Girl Who Took Her Shampoo (But Left Her Mini)

Greg Rucka

Published: 2011 | Pages:156

My Rating: 4/5

Description:

Transformers: The Manga, Vol. 1

Transformers: The Manga, Vol. 1

Masumi Kaneda

Published: | Pages:288

My Rating: 4/5
I really dig the art but the plot lines are really random. Sometimes the random weirdness works, but don’t go into this expecting some sort of Deep Lore.

Description: The Autobots and Decepticons have been locked in a brutal civil war for eons, and now their battle has come to Earth! The Autobots seek peace and coexistence, while the Decepticons seek power and control. Earth and its populace are caught between the two as these mighty factions go head-to-head. Transformers took the world by storm shortly after their debut, and these previously uncollected stories were a vital part of that takeover! In this collector’s volume, the Autobots and their young friend Kenji must stand tall against the Decepticons in an interplanetary conflict! These classic stories are from the dawn of the Transformers, and this volume contains thrilling tales such as “The Great Transformer War” and “Fight! Super Robot Life-Form Transformers!”—plus an extensive art gallery!

Kill la Kill 01 (Kill la Kill, #1)

Kill la Kill 01 (Kill la Kill, #1)

Trigger

Published: 2013 | Pages:184

My Rating: 3/5

Description: