Compare commits

...

3 Commits

Author SHA1 Message Date
Nick Griffey 68dd2ac323 remove makefile 2024-02-25 22:10:48 -06:00
Nick Griffey 9bf6eecc74 add readme 2024-02-25 21:58:36 -06:00
Nick Griffey df5af22755 use env var for db path 2024-02-25 20:07:09 -06:00
3 changed files with 42 additions and 12 deletions

View File

@ -1,11 +0,0 @@
.PHONY: all build fmt
all: timeline.db xbit
xbit: build
build:
go build
timeline.db: timeline.sql
sqlite3 timeline.db < timeline.sql

39
README.md Normal file
View File

@ -0,0 +1,39 @@
# xbit
`xbit` (xkcd backward in time) is a program for outputting historical events
while completing a task, inspired by [xkcd](https://xkcd.com/1017). The program
reads a SQLite database that stores event descriptions and timestamps, allowing
you to easily add your own events of interest.
The provided SQL file will pre-populate the database with thousands of events
scraped from
[Wikipedia](https://en.wikipedia.org/wiki/Detailed_logarithmic_timeline). Of
these events, over 300 were manually given timestamps.
## How to use
First create the database:
```
sqlite3 timeline.db < timeline.sql
```
Then set the `XBIT_DB` environment variable to the database file.
```
export XBIT_DB=./timeline.db
```
Call the program with `xbit -p <percentage>`, like `xbit -p 0.25`. This will
calculate a timestamp using the formula from the xkcd comic, then output
information about the event in the database closest to that timestamp. See
`xbit -h` for more args.
## Database details
* Due to the time-consuming nature of manually assigning timestamps, there are
many events that were scraped from Wikipedia but not given timestamps. You
may wish to skim through these and add timestamps to events you personally find
interesting.
* For an event to be output by `xbit`, it must have an entry in the database
with a unix timestamp of when the event occured. You can optionally set bools
in the "known" columns to indicate how precise your timestamp is. These may be
used to modify how the event is output.
* There are a few other columns that mainly exist as artifacts from the
scraping process. These are not used by `xbit` and do not need to be
populated.

View File

@ -8,6 +8,7 @@ import (
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
"log" "log"
"math" "math"
"os"
"strconv" "strconv"
"time" "time"
) )
@ -110,9 +111,10 @@ func main() {
ulimit = t ulimit = t
} }
dbpath := os.Getenv("XBIT_DB")
var db TimelineDB var db TimelineDB
var err error var err error
db.DB, err = sql.Open("sqlite3", "./timeline.db") db.DB, err = sql.Open("sqlite3", dbpath)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }