Imagining a personal data pipeline
joshcanhelp.com
joshcanhelp.com
> ... There is a whole bunch of toil baked into this hobby and I'm wary of creating an endless source of digital chores for myself
Always stops me from pursuing it seriously. Also that I already do a fair amount of ELT at work and couldn’t tolerate it as a hobby.
But this framework makes sense. Seems like the idea is connector, schema mapping, and datatype standardization configured in one place. It’s a well thought-out framework and I actually have an internal platform at work that accomplishes something very similar, albeit for a totally different purpose.
But I also personally wouldn’t see a ton of value from this, except if it were used for bills, taxes, and financial management. But then the privacy aspect becomes paramount. There’s a reason people just have to do that stuff manually.
I would be surprised if Apple and Google didn’t eventually start to build something like this. Google is already pretty good at unifying email and calendar. It’s something that’s really only possible to deploy at the mobile OS level, because any other alternative would involve sending all of your data to a third party platform, which for most people these days is a non-starter. Plus with LLMs being a thing, the perfect interface to centralized/standardized personal data now exists.
I have another tool I built for finances:
https://github.com/joshcanhelp/budget-cli
I'm trying to think of a way to get the two working together because there is a lot of overlap in what they're trying to do.
> I would be surprised if Apple and Google didn’t eventually start to build something like this
They could certainly do it but I think it goes against what they want to do with the data, which is gather and centralize it. Maybe folks would go for it but the core idea here is saving for yourself, not storing it in another platform.
> It’s a well thought-out framework
Appreciate that, thank you!
https://simonwillison.net/2020/Nov/14/personal-data-warehous...
Here is more about dogsheep — (“ Dogsheep is a collection of tools for personal analytics using SQLite and Datasette.”)
Absolutely no shade, it just goes to show how hard it is to keep track of All The Things.
https://nicolasbouliane.com/projects/timeline
The newer version is basically a static site generator running on top of my data. The older version was actively fetching the data from various sources, but it was getting a little unwieldy.
The biggest challenge is to automatically get your data out of Google Photos, social networks, and even your own phone. All of my handwritten notes and my sketches are stuck on my iPad and must be manually exported. It's tedious and unsustainable.
Same with social networks. Data must be manually exported. There is also no simple, human-readable file format for social media posts. You have to parse the export format they choose to use at the moment.
> It collects all your crap, and it puts it on a timeline. > I thought it would be neat.
Everything you're describing in your comment here is what I'm trying to do with PDPL, get the data out of those services so you can use it. In your case, it looks like Timeline focuses on files ("The filesystem is the database") so you could (assuming it works for you) have an output function that formats the filenames in a way that you can use and adds the date.
There's a lot of attempts to solve this problems but not much has been found, possibly because the whole setup of ELT processes is a lot of chores (just think about the whole inconsistent formats of data across services). It's like having a second job in data engineering, and I'm not even remotely in the software/data industry! I just like and do coding as a hobby.
The quantified self movement is adjacent to this but not quite. If you are gathering data from a service with an API, this can grab that and you can work with it. I used to wear the Oura ring and now I have 2+ years of data sitting in JSON on my laptop that can be ported to anywhere. I'm not really looking to, like, optimize productivity or physical output or anything, I just want to have and work with data from services that make my life a little easier.
(Founder here)
In case we might be a good fit ... https://www.joshcanhelp.com/hire-me/
The fundamental query I usually use is substring search. The only contents is text, because I believe in the primacy of plaintext. The notes for the last 4 years of my life takes up 60 megs, and it takes half a second on a 5 year old android phone to parse all of it, and less than 50ms to search through all of it, so I can do it on every keystroke/ incrementally.
[0] Pipeline Notes: https://github.com/kasrasadeghi/pipeline-js
I'm not a web developer by trade, so if anyone has any feedback on security/UI/service workers, please let me know!
I got it running locally and, while I wasn't sure all of what I could do, it was responsive and search worked well. Nicely done!
The project was to try and collect and make searchable my "internet self". something I called "personal search". i.e. the idea was to try to index every web page I look at, every e-mail I get / see. Social media content shared to me by my social graph (using said APIs), and further indexing pages shared.
The indexing itself wasn't the hard part (per se, as at the time, the APIs facebook, twitter et al were very expansive, much more limited these days, one can attempt to deal with it with intelligent dom scraping, but that's a never ending race where your sources are consistently changing things and you are chasing their changes), the question is how does this information really create significant value for myself? i.e. how often am I going to actually be searching this personal archive. I search google many times a day to find new things (or refind things I already found through it), but how often do I search for things that are within my personal index during a normal day? a handful at most I'd think (and many times, not even once).
With that said, the concept that I then decided to try and teach myself was trying to write a browser extension that could do a similarity search (of sorts) between the documents in my personal index and the web page that I'm currently looking at + content related to that (ex: looking at a news article about current events, idea is that it should surface other articles your friends have shared on the topic and their comments on it). That ended up being an area i didn't have the time (or expertise) to really go far with, so it sort of ended there.
This was a really important question I asked myself. If I build it, will I use it? I had two answers.
First, I do, somewhat regularly, have reasons to look back into this archive. If it mission-critical? No. Is it nice to have, yes? I like being able to see what happened on a certain day in the past, I like seeing how trends between activities come together, and I like tying systems together locally rather than in the cloud. I use Obsidian so bringing everything together locally is a big motivation.
Second, this is just a hobby, like any other. Having conversations like this, contributing to the universe of open source, connecting with people on the things I feel strongly about (data privacy, local first, life logging) ... it's fun and interesting and a good use of my life. There is a tendency to get a little obsessed with it all (family history of OCD forces me to be mindful about it) but I've enjoyed the process so far.
I love your browser extension idea. Managing content from the web that I want to save has been a big challenge locally.
Usually your data will comfortably fit in a file. Your data getter emits these files in facts (essentially relations). If you want structures data, it can also be a single column that is of some struct type (similar to protobuf).
With all data available the problem becomes one of querying. With a good enough query language and system, you write these can data transformations via Datalog rules which roughly correspond to database views.
It is always possible to write queries in code in a general purpose language, but is a bit clumsy and hard to get an overview or reuse. It may also be possible to do SQL but it SQL is not very compositional and you ask yourself whether the base data representation should be adapted refactored. Essentially you do not want to think about the optimal schema or set of structs but just do transformations you need in the lowest friction way.
With Datalog you may benefit from a unified representation (everything is "facts") and the transformations to useful different formats (different kinds of facts) can be factored and reused. It may mean duplication and denormalization but usually that does not matter.
Mangle supports aggregation and even calling some custom functions during query evaluation. The repo is at https://github.com/google/mangle and obviously there remains a lot to do, the API is unstable, there are bugs and the type checker is not finished... but a number of people and projects seem to use it. Even if you do not use it, it may give you how to use facts (relations) as a unified data structure for your project.
My abstracted YAML representation worked pretty well for this initial PoC but I'm seeing places where this is just not going to fly for more complicated queries. I'd much rather string together more competent technologies to accomplish my goal rather than spending a year reinventing the wheel.
Along the lines of your comment ... trying these queries in a general language and in SQL brought me to the same conclusions you have here. One of the foundations of this is open source so if I write a recipe and contribute it, I want someone else to be able to take it and tinker with it or extend it but do that without having to deal with too much boilerplate.
I will take a look at Datalog. I know I've seen it before but don't know much about it. Thank you again!
If there was a way to add a meta-prompt to Windows Recall like "Create a log entry every time I watch something with its title and URL" it could serve as a history whether things were watched on YouTube, Vimeo, or any other site, without requiring plugging into each service individually. Repeat ad nauseum for each thing to be logged, or perhaps someone can come up with a more clever query than I that catches everything sufficiently.
The level of granularity on many services might be surprisingly large, preventing introspection of the data at a useful level.
Recall has lost a ton of useful metadata you already have - both URL visits and streaming are clearly discernible actions, both at the network stack level, and from your browser history. Throwing that away to trust an LLM to re-infer the same data is both reducing data fidelity and significantly increasing processing cost.
If you want to see this done reasonably well, I'd suggest looking at e.g https://beepb00p.xyz/promnesia.html (which not surprisingly bears a strong similarity to what the article discusses)
LLMs don't add much value here, outside of tightly locked down systems where screenshots are the only way of exporting.
The value the LLM adds is interpreting/processing data without having to tailor input streams. Imagine if formats change, fields get renamed, and so on. The maintenance would be a headache if this was done on a per-service level. I think the reduction in fidelity seems like a reasonable tradeoff, but that's for the user to decide of course along with local/cloud processing and proprietary/open source software.
Even things like invoices from the same service change format over time.
A prompt every few minutes that would ask "What are you doing now?" would be interesting to me, as a professional procrastinator. Maybe an even better one would be one that says something like "In the last 10 minutes, you spent 90% of it on Hacker News".
And, as long as there's an API, I am fairly certain that maintaining a compat layer is a lot less work than retuning the LLM when the images change. (And you'll want to adjust your tuning, at least with current SOTA, or your error rate will reach Unpleasantville fairly quickly)
Yes, it seems easier on the face of it - but the reality of building an LLM pipeline will quickly point out a lot of edge cases.
Personally, I stopped using my Oura ring and don't have location history collected anywhere (that I control or know of). One of my big ideas for this is a native application for your phone and laptop that collects everything it can in the background and surfaces it somewhere you control (synced via a service you choose, lands on a machine you own). Maybe overkill for many people but being able to access that without giving it to another service would be something I'd use.
To you, perhaps, but witness the excitement of historians and archaeologists when they find things like the Ea-nāṣir complaint[0] or an Akkadian shopping list[1].
You never know what might be interesting to future peoples.
[0] https://en.wikipedia.org/wiki/Complaint_tablet_to_Ea-nāṣir
[1] https://news.artnet.com/art-world/akkadian-cuneiform-tablet-...
- Having a detailed meeting and project history from work helps me during interviews, writing resumes, reminding myself of previous approaches. A lot of this comes from detailed note-taking but making connections with people I've worked with, companies I've interacted with, etc adds a lot of color and detail.
- In a similar vein, tying together people with contacts (from Google or iCloud), events, and notes helps me be a better friend, neighbor, family member in my personal life. I don't have an excellent memory so I build it out in Obsidian.
- I like being able to do simple things like figure out how many bike rides I took since I've been laid off (65 bike rides, totaling over 645 miles and 138,000 feet of elevation gain).
Does this all change my life drastically? No but I like the work, I like how present in my life it makes me, and it's fun.
The idea behind Weave is something I would really like to adhere to. I take a lot of notes but get bored by tracking.
That said, the origin story you have on that page really got my attention. Around that year that's mentioned, I was going to 24 Hour Fitness and was pushed by a trainer to keep a food log. I did and ended up losing almost 100 pounds total. What I learned from that log stays with me today and I'm able to keep a vague log in my head when I need to.
The point is that with classic tools IS EASY, limited only by the current sorry state of IT things, with modern tools is a nightmare that demand much effort to be done.
FYI, if you have control over the repo ... the URL on the sidebar, "lookerproject dot org" goes to a scammy-looking crypto thing, might want to take that down.
I totally get the allure of building this stuff :)
For example, the project docs are practically impossible to use. You need to review source if you want to create a configuration file yourself (needed to use any data store besides sqlite index + local files). There are just conflicting explanations, outdated descriptions, etc.
Additionally, the project spends a lot of time saying "objects not files" but the only objects defined and used by the system are... files.
There was seemingly IMHO a lot of protest the dude didn't make some kind of php script or something one off & "simple" for the job.
But they'd used existing tools.to make a real data pipeline. And potentially could keep making new tools around similar pipelines. They had invested in some pipe building technology and it felt like no one was interested in giving credit for that.
Seperately, Karlicoss has HPI as their personal data toolkit/pipeline, and a massive map of services & data systems they've roped into HPI (and HPI-near) systems. https://beepb00p.xyz/hpi.html https://beepb00p.xyz/myinfra.html
N8n for open source workflow, https://github.com/n8n-io/n8n
Nocodb as an open source airtable / spreadsheet, https://github.com/nocodb/nocodb
Again, for a single use this feels overkill. But it's a set of tools that once deployed will allow for extremely rapid personal data pipelines to be built!