Giter Club home page Giter Club logo

book's Introduction

Initial work on a personal library management system.

On the main branch I have my initial attempt which uses Hibernate.

On the feature/reformat-project branch I have a version without Hibernate which
was contributed by @TheDecentTech as an example without Hibernate, as well as
refactored into a more typical idiom.

The main branch is currently working and has add a book / add a box / view authors
basic functionality.

The feature branch doesn't have all of the main branch functionality reimplemented yet.

---

In order to get the project working from the version in git, it is necessary to
configure application.properties with the following fields:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=<username>
spring.datasource.password=<password>
spring.datasource.url=jdbc:mysql://<host>:<port>/<database>

---

One can also set

logging.level.com.nyancoin=TRACE

to change the logging level for the core program (while leaving the framework at normal
logging level because it is very noisy on higher levels).

book's People

Contributors

activeshaun avatar

Watchers

 avatar James Cloos avatar Miles Grimes avatar

book's Issues

Add Categories

The categorization system is key to the overall idea: being able to mark a book as taking place on Earth (vs Mars or extrasolar, etc), or having FTL and so on.

There will be a lot of work needed on this. I'm not certain yet what the minimum starting point is. Perhaps the system for modifying categories should be built first, to be able to create the categorization. This also starts to imply some of the other future issues (synchronization between different nodes and backups: for the first, looking to avoid duplication of work and how to make sure that data is consistent if there were parallel slightly different categorizations created; for the second, starting to get more than just test data and how to design the overall backup / restore process and how it might interact with syncs, etc. (i.e.: beyond just doing a SQL backup, maybe the system has its own conception of "backup to this node" or "restore from this node" etc)).

So, let's say we've got a local system for creating the categorization of the labels themselves (e.g.: Add technology "cloning").

Then we need the screen to be able to add/edit/review these for a particular book.

When adding, simplest starting point is of course just display all options for categorization. However, this will ultimately get unwieldy, so going to want eventually a "most popular" labels option, or suggest labels, or a user's most commonly used. Probably combine these into "suggested / most common" vs a full view; maybe even have on same page but have second collapsed?

So might look something like:

=========

Categorizing Moon is a Harsh Mistress.

Select any that apply:
[ ] Setting - Earth
[ ] Setting - Moon
[ ] Setting - Mars
[ ] Politics - Libertarian
[ ] Politics - Conservative
[ ] Politics - Communist

You may also expand and select from these options:
(collapsed options)

=======

Maybe user configurable to always see full view if they want?

(Non-code) Think about how to move forward with distinguishing "a copy" vs "a Book" and user experience here

In my mind, there's a clear and sharp distinction between "a copy", which is a physical book which may have various types of damage vs "a Book" which is a conceptual chunk of content which we want to be able to categorize and recommend.

"a copy" is something like an instantiation of "a Book" ideal.

However, so far the system essentially is working with "Book"s (note that "add a book" with an existing book is a no-op rather than recording a duplicate currently, because what's it's adding is a "Book" rather than a "copy")...except that what's imagined when adding a book to a box is adding a copy to a box...so the implication is that the box-book relationship implies the presence of a copy in a box.

So there's a technical side of how to eventually build these representations (for instance: copies need to support recording condition / damage; boxes need to be able to store a particular copy rather than just note it has a particular Book represented) but perhaps even more importantly, I need to think about what a reasonable user experience is behind this, especially when it seems like the distinction is not particularly clearly well established in existing software.

In order to illustrate this, let me first add another intermediate concept, an Edition: like a Book an abstract rather than physical item, but it's a semi-instantiated version of a Book: it's information about a particular set of printings of it: who was the publisher? When was it printed? How many pages is it?

When one searches for a Book on Amazon, for instance, one is really searching among all Editions of all Books. If one looks then at used options, one selects between copies. But there's no process (so far as I know) for first searching among all Books and only then having to decide a particular Edition.

But in our system, we want to be able to have a more streamlined view: if I ask what Books Heinlein wrote, I want the Books; if there were two different editions of a Book, I don't want it appearing twice. Of course, reality doesn't always line up so nicely: there can be collections which duplicate content so that there's not quite this easy distinction. But I think it'll work as a model.

====

But we don't want the user to have to experience thinking through all of this. We want it just presented in such a simplified, logical way that it simply Makes Sense.

So think about it and figure out what we want the final system to look like and what sort of iterative steps will bring us there.

Switch to POST from GET on forms

In order to do proper REST semantics and to not have long URIs etc, the forms adding boxes and books should be POST rather than GET. Making them as GET for now just to make it easier to see what's going on and modifying it. Should be changed before any version 1 release / deployment (but not necessarily before various small-scale uses).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.