Book Project - Present
Currently, I’m working on a book tracker system called Book Project (catchier name needed).
What is it?
It's a web app that lets you record books that you want to read, are currently reading, have read or did not finish.
If you're familiar with Goodreads, this might sound familiar. The Book Project goes further than Goodreads; it was created as a result of wanting to make a better web app than Goodreads.
It’s been done before, and Goodreads does a fair job at it. Why reinvent the wheel?
I've written an answer to this in the FAQ page.
How is this related to the Bookshelf project?
It isn’t. This is a different code base and they don’t share the same code. Bookshelf uses the Google Books API, which I’m not fond of. Bookshelf only exists as an Android app, whereas the Book Project, in its current incarnation, is only a web app.
I don’t have a smartphone anymore, so I didn’t want to want to make a mobile app. A web app, particularly a progressive web app, can work nicely on all devices, mobile or otherwise. That’s not to say, however, that I would be against us developing or supporting a mobile app for the Book Project in the future.
The Book Project requires users to add their own books, whereas Bookshelf was closer to Goodreads in that users search for books from a catalogue to add. Ideally, we'd have our own (open source) API to look through that provides good and relevant search results. From what I’ve seen of APIs other than the Google Books API, that’s not out there yet.
You said 'we' and 'our' – are there others working on this?
Yes! To date, twenty other people have contributed to the project, excluding myself and two bots (a dependency bot and a codacy badge bot).
Three things to note about the number of contributors. First, one of the contributors does not show up as a contributor on GitHub as they did not commit to the project, but sent the images as GitHub issue comments. They helped us design lots of assets (the logo, banner, etc.). Naturally, I am including them. Second, GitHub shows more contributors than there actually were, but I'm also excluding one person who commited from two accounts, so appears twice. Third, one person does not show up as a contributor (but they do on the commit log), so I am including them.
I don't know any of those contributors outside of GitHub, so it's great that it's had so many contributors so far. There are also currently new people working on issues and pull requests. We communicate over GitHub (issues or pull requests) or our dedicated Gitter room.
What’s the stack?
It’s a web app written in Java using Spring Boot (back-end) and Vaadin (front-end). We're currently using MySQL for the database (using Flyway to bring it under version control), but we're using a H2 database for our unit tests. We provide a docker-compose file so that the MySQL database can run inside a docker container. There's also a sprinkling of CSS.
The pomodoro timer I use works well enough, but I miss using Focus Keeper on iOS. (I could just use Focus Keeper, but I'd prefer a web app). So, I'm working on one! I haven't been able to dedicate enough time for this (the Book Project and other programming studying keeps me busy enough!), but I would like to allocate more time to get this working.
The tech stack is the same as the COVID-19 Dashboard: Vaadin 14 and Spring Boot (although, not using much of Spring right now). Unlike the COVID-19 Dashboard, however, the Pomodoro timer will only use free components.
Alongside, the Book Project, I’m also developing a COVID-19 dashboard. This shows at-a-glance global information on the number of deaths, confirmed cases, total recovered and much more. You can also look at how the number of cases and deaths for a particular country has changed over time, and compare one country’s deaths or confirmed cases with others with area charts.
This is made using Spring Boot and Vaadin 14. I haven’t used much of Spring in this project, it’s mostly Vaadin. Vaadin is an incredible framework, and the charts API works well.
If you’re interested, you can read my COVID-19 dashboard article that I wrote about it.
See it running live in the wild: https://covid19.karankumar.com.
The code is a bit of a mess right now, so I'm going to go back and refactor this. I also need to add a test coverage tool.
Previous projects. (Android: Summer ‘18)
I mostly spent the summer of 2018 working on small Android projects.
Bookshelf - book wishlist app for Android
Powered by the Google Books API, Bookshelf allows you to find out more information about a book (e.g. author(s), ratings on Google Play Books, page count, publisher, etc.). Soon, you’ll be able to save the books you want to read to a Bookshelf (a wishlist).
Update (October 2019): this was the most fun project I’ve ever worked on. Unfortunately, I’ve decided to park it for the time being because I realised that the Google Play Books API is much more limited than I first imagined (there’s lots of reasons why, but the most fundamental reason was that searching for a book title didn’t yield the most relevant results. For instance, one might expect a search for “Harry Potter” to list the seven books, as well as the companion books, in the top 10 list of books. Alas, no.). While fun, Android development seems quite limited and basic. I want to work on harder things. Having said that, at some point I do want to work on Bookshelf again to get to a useable state.
SortingHat determines which Hogwarts house one belongs to based on responses to the Pottermore sorting hat questions (slightly modified). I am a big Harry Potter fan (the books, not the films), so making something Harry Potter-related was so much fun. A lot of my time was just spent on choosing music that I thought went well with a particular house’s qualities for the results screen. I would very much like to work on another, albeit more sophisticiated, Harry Potter-related app in the future.
Update (October 2019): Another fun project! This has been parked because I more or less reached the limit of where I could take the app. Moving forward, I think it would better to work on an app that is designed to be used more than once. How many times does someone want to get sorted into a Hogwarts house? Something that I have been thinking about lately is upgrading the way the questions and answers are parsed. Currently, it’s read in from a regular .txt file, but it would be more extensible and better managed if JSON was used.
I’ve worked on lots of other small projects, too, but the ones here are my main ones. For more information, see my GitHub profile.
I designed my own Harry Potter monopoly game (based on the book canon) because our family loves monopoly and I love the Harry Potter books, so I wanted to combine the two (and there wasn’t already a Harry Potter monopoly on the market). I had a lot of fun making it!
We don’t actually play this anymore. My family still like Monopoly, but, for me, there’s only so many times it can be played before losing its appeal. Perhaps it might be more interesting if there was less luck and more skill involved. It could be fun developing new rules to make that true while still retaining the fun and simplicity of Monopoly.