add basic go program
This commit is contained in:
parent
c21848ba26
commit
1e49d6098c
|
@ -1 +1,2 @@
|
|||
*.db
|
||||
xbit
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
module dairydemon.net/xbit
|
||||
|
||||
go 1.19
|
||||
|
||||
require github.com/mattn/go-sqlite3 v1.14.22
|
|
@ -0,0 +1,2 @@
|
|||
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
|
||||
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
|
@ -0,0 +1,66 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"flag"
|
||||
"fmt"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
"log"
|
||||
"math"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Event struct {
|
||||
description string
|
||||
timestamp int64
|
||||
}
|
||||
|
||||
func formula(p float64) int64 {
|
||||
yearsAgo := math.Exp(20.3444*math.Pow(p, 3)+3) - math.Exp(3)
|
||||
return int64(yearsAgo * 31556926)
|
||||
}
|
||||
|
||||
func closestEvent(t int64, db *sql.DB) (Event, error) {
|
||||
var event Event
|
||||
query := `
|
||||
select description, timestamp
|
||||
from events
|
||||
where timestamp is not null
|
||||
order by abs(? - timestamp) asc
|
||||
limit 1
|
||||
`
|
||||
|
||||
stmt, err := db.Prepare(query)
|
||||
if err != nil {
|
||||
return event, err
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
err = stmt.QueryRow(t).Scan(&event.description, &event.timestamp)
|
||||
return event, err
|
||||
}
|
||||
|
||||
func main() {
|
||||
percent := flag.Float64("p", -1, "percentage")
|
||||
flag.Parse()
|
||||
|
||||
if *percent < 0 || *percent > 1 {
|
||||
log.Fatal("invalid percentage")
|
||||
}
|
||||
|
||||
t := time.Now().Unix() - formula(*percent)
|
||||
|
||||
db, err := sql.Open("sqlite3", "./timeline.db")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
event, err := closestEvent(t, db)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
date := time.Unix(event.timestamp, 0)
|
||||
fmt.Printf("%v\t%v\t%v\n", event.timestamp, date, event.description)
|
||||
}
|
Loading…
Reference in New Issue