[HN Gopher] WhenFS: Calendar Is Now a File System
       ___________________________________________________________________
        
       WhenFS: Calendar Is Now a File System
        
       Author : 3ul3r
       Score  : 333 points
       Date   : 2024-08-04 16:35 UTC (1 days ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | ChocolateGod wrote:
       | The question beckons, who's going to bundle this into their
       | initramfs and boot Linux from it.
        
         | diggan wrote:
         | That's all fun and games until Google bans and deletes your
         | Google-account/initramfs-calendar because you liked the wrong
         | comment on YouTube.
        
       | Trekker666 wrote:
       | this is so cool
        
       | andrewflnr wrote:
       | Aw, that's not what I hoped it would be. An actual file-based
       | calendar UI is a neat idea, where you can (for instance) echo
       | into a file to create a calendar event on the command line.
        
         | dudus wrote:
         | Same here. I think that would be a terrific idea.
         | 
         | $ cat /cal/2024/08/04/events
        
           | ravetcofx wrote:
           | This would be fantastic and very in line with Unix
           | philosophy.
        
             | filterfish wrote:
             | More Plan9 but yeah, I was thinking the same thing.
        
           | miki123211 wrote:
           | Not this exactly, but I used to keep a calendar as a text
           | file, where each day was a single line containing the date,
           | week day and possibly some events.
           | 
           | Something like:                   4h sun: 1500 dentist's
           | appointment, 1800 dinner with friends
           | 
           | Where a=jan, b=feb, c=marc, ... l=dec.
           | 
           | The initial file was autogenerated with a 10-line Python
           | script.
           | 
           | You can have variations on this, like allowing multiple rows
           | per day, one row per event.
           | 
           | I also used to keep an unstructured "journal.txt" file, where
           | notes were separated by two blank lines, and you could
           | reference topics (like #toRead) and dates (like #4h24) with
           | #, like social media hashtags.
        
           | dmos62 wrote:
           | I was thinking about this and came to the conclusion that I'd
           | want to define some events per date, like you illustrated
           | (`"12:30 dentist" > /cal/2024/08/04`), but others I'd like to
           | define per event, like `2024-08-23 12:30 > /cal/massage`,
           | which seemed messy. I didn't really resolve this question for
           | myself.
        
             | dudus wrote:
             | Why not enable both modes? It's a virtual filesystem after
             | all. You don't need a single path per event.
        
           | thanatos519 wrote:
           | Good tab expansion in a very virtual filesystem would work
           | wonders:                   $ cat /cal/nexttues<TAB>         $
           | cat /cal/2024/08/13/              $ cat /cal/nextweek<TAB>
           | $ cat /cal/2024/w32/
           | 
           | I seem to recall that I had lunch with somebody last July:
           | $ grep -ir somebody /cal/2023/07/
           | /cal/2023/07/12/events:13:00-14:00 Lunch with somebody
        
             | fragmede wrote:
             | the most amazing feature of the Google calendar web UI that
             | has since been dropped was a way to schedule events with a
             | human message - "30 meeting with Bob next Tuesday at 10",
             | rather than clicking a bunch of buttons in a UI.
        
               | thanatos519 wrote:
               | I remember that! I think they have just collapsed to
               | handling what most people try, evidently '[time]
               | description'.
               | 
               | A couple of weeks ago I was surprised and annoyed that
               | adding an event with description "10:30-11:00 Pointless
               | Meeting" no longer scheduled my Pointless Meeting. Tried
               | again very carefully. Wasn't working. Worked again the
               | next day. Did anyone else experience this?
               | 
               | I can't wait for them to feed my description to an LLM to
               | generate the event. "Schedule drinks at 7 at the bar
               | behind the office next Tuesday. Invite my favourite
               | colleagues and their teammates. Make them curious but not
               | suspicious."
        
               | 9dev wrote:
               | Try Mac/iOS calendar - it has allowed to do just that for
               | ages.
        
               | mejutoco wrote:
               | Todoist as well. Plus every second tue of the month for 4
               | months, and queries like that.
        
               | netsharc wrote:
               | With Google Assistant you can still do this, but you need
               | to speak it, with the prefix "Add calendar
               | event..."(well, Google Assistant on the phone also
               | accepts keyboard input). I find it much faster than the
               | button clicking.
        
               | ramses0 wrote:
               | Similarly in iOS there's some surprising: "Move my 3pm
               | meeting from today to tomorrow 10am", and a clutch tip:
               | "Hey Siri, Delete All My Alarms", b/c there's no UI to
               | delete and confirm the 100 alarms that accrue of "7:00am,
               | 7:05am, 7:07am, 7:15am, ...etc..." ;-)
        
               | h00dinberry wrote:
               | Not sure I follow, but how is this more convenient than
               | pressing the UI buttons? Genuinely curious.
        
               | throw-the-towel wrote:
               | Maybe the UI was slow? Then this has the same advantage
               | of speed that CLIs tend to have over graphical
               | interfaces.
        
               | h00dinberry wrote:
               | Well in a CLI you're not writing full English sentences.
               | You don't say "make a directory called xyz in the current
               | directory," you're saying "mkdir xyz". I'd rather just
               | use a GUI than type out a full natural-language sentence.
        
               | 3np wrote:
               | You do you. Dozens of people do prefer text-based over
               | the context-switching involved in reaching for pointer
               | interface and clicking that button.
        
           | adrianmonk wrote:
           | If I gzip my meetings, will they get shorter? If so, I'm on
           | board.
        
             | filterfish wrote:
             | This is going to be my new, and probably overused phrase:
             | "Can we gzip this meeting, I've shit to do"!
        
           | filterfish wrote:
           | So the question begs: how hard would this be to write.
           | 
           | Because I want it!
        
             | magicalhippo wrote:
             | This is essentially just CalDAV[1], no? So a FUSE CalDAV
             | client. Surely not that difficult in Go, Rust or something
             | similar with ready libraries.
             | 
             | [1]: https://en.wikipedia.org/wiki/CalDAV
        
               | filterfish wrote:
               | > This is essentially just CalDAV[1], no?
               | 
               | I reckon, yeah.
               | 
               | From this article[1] writing a FUSE filesystem doesn't
               | look that hard.
               | 
               | I might give it a go this weekend. Assuming I remember!
               | 
               | [1] https://blog.trieoflogs.com/2021-05-25-fuse-
               | filesystem-go/
        
           | andrewflnr wrote:
           | I think you mean                 $ ls /cal/2024/08/04
           | 
           | Or perhaps                 $ cat /cal/2024/08/04/*
           | 
           | ;)
        
           | amelius wrote:
           | Will all users on the system have to share the same calendar?
        
         | Thaxll wrote:
         | I don't see where it's remotely useful, the idea sounds fun but
         | it's not praticle.
         | 
         | Explain how it is better vs having a simple cli that parse args
         | and store that into SQLite.
        
           | H8crilA wrote:
           | The point of such fake filesystems (like /proc or /sys) is
           | that everyone immediately understands them. Yes, you could
           | have a syscall for /proc, but it is more complicated.
        
             | Thaxll wrote:
             | Understand how? You still need to understand the path
             | layout, something is still parsing that path so it needs to
             | be valid.
        
               | pfix wrote:
               | discoverability - but then proc is not the best example
               | for that - a lot of proc seems to be inpenetrable without
               | documentation
               | 
               | access - for discovery and poking around you won't need a
               | dedicated tool, just `cat` or `less` or `vim`
        
           | andrewflnr wrote:
           | Explain how it's worse than what's in OP. Look, sometimes you
           | just want to see a fun idea turn into reality, right?
        
         | Lammy wrote:
         | There's a standard file type for this already:
         | https://en.wikipedia.org/wiki/ICalendar
         | 
         | It would be cool to see a filesystem layer present a tree of
         | ICS files where editing one also updated your various API-based
         | web calendars.
        
           | samstave wrote:
           | This is completely me talking out my but:
           | 
           | Could one use the txtai python libe to be told to train on
           | the temporal relationships between events that pass through
           | it as an fastAPI endpoint to a calender... then as the events
           | head to whatever is holding them in the calendar - txtai is
           | training and indexing, first on temporal notes, then on
           | context. so you ould easly as it to give you a
           | 
           | "Show all the social events that happen on wednesdays with a
           | dress code"
           | 
           | (but it learns the nature of certain events, when they occur
           | and social clues around what /who /wheres are typically
           | occuring...
           | 
           | "This venue typically holds events on W F S and the
           | clientelle is typicalaly this, attendance that, rsvps x, cost
           | ~$$"
        
           | charles_f wrote:
           | That's what I hoped this would be!
        
             | usr1106 wrote:
             | Not sure I hoped, but from the title I expected.
             | 
             | I don't have more than 10 entries per week. Partly because
             | I prefer real work over meetings, so I work at a place that
             | does not have a lot of meetings. And once you don't have
             | many, it's easier to remember other appointments, no need
             | to use a calendar for everything. So even if this had been
             | a useful mapping of calendar entries into a directory tree,
             | I would not have felt an urge to use it.
        
           | folmar wrote:
           | Get close by mounting your CalDAV server directory with the
           | usual WebDAV tooling.
        
       | mbreese wrote:
       | _> Why Did You Do This?
       | 
       | > I used this project as an opportunity to learn about Rust and
       | FUSE file systems. I also think it's hilarious.
       | 
       | > Visitors interested in the code should note that this is an
       | irredeemably messy codebase--it's full of hacks, unidiomatic
       | code, and wildly poor design decisions.
       | 
       | > However, visitors should also note that that's okay. The best
       | way to learn something new is to try it out for yourself--and
       | creating a mess is a vital part of that process._
       | 
       | I absolutely love this sentiment. Why do this? Because it's fun.
       | And messy. And sometimes, that's okay. Not everything needs to be
       | a product... sometimes it's enough to do something because you
       | can... or want to... or because $RANDOM reason. I'm very grateful
       | to the author and whoever decided to submit it today.
        
         | lvkv wrote:
         | Author here. Those are kind words! I'd like to add the last
         | part of that quote:
         | 
         | > The page you're on right now is my mess. Now go create yours!
        
         | phamilton wrote:
         | As a college student trying to figure out where I wanted to go
         | next (industry vs academia) I had an epiphany that there was
         | intrinsic value in doing things. Even things that were neither
         | novel (academia), profitable (industry), nor impactful
         | (nonprofits).
         | 
         | While my career has found a balance between impact and
         | financial sustainability, I have a special place in my heart
         | for projects that are otherwise unnecessary but happen just
         | because it brings the creator joy.
        
           | xwolfi wrote:
           | But there is no greater pleasure than to finish something,
           | deliver it, get users in front of it, and get feedback you
           | never expected from either grumpy or happy users. I think
           | it's way more rewarding to try to work for profit, because
           | while money is nice, profit also means it's so useful someone
           | is ready to give you credit for future work (money) for what
           | you did.
        
             | HeatrayEnjoyer wrote:
             | Not a universal experience. I receive little joy in money,
             | beyond the basic needs it relieves. Shutting down a
             | business that cleared $800M profit annul. was the best
             | decision I ever made.
             | 
             | Profit doesn't inherently mean you've made the median
             | experience of individual humans better, and is just as
             | often to effect significant degradation. My biz was
             | slightly on the positive, but I could have pegged an extra
             | zero in profit if I had forgone scruples.
        
           | roeles wrote:
           | Even if it makes just you happy, it's impactful. You are the
           | person others have to put up with. Making yourself happy
           | improves the world for those around you.
        
           | teleforce wrote:
           | >Even things that were neither novel (academia), profitable
           | (industry), nor impactful (nonprofits).
           | 
           | You classifications are good but it's a bit simplistic.
           | Generally across the spectrum people is looking for
           | breakthrough (e.g. deep learning) and/or game changing (e.g.
           | transformer) contributions regardless if you're in academia,
           | industry, non-profit, government labs, etc. But for pure joy,
           | it can be from any simple creative projects as you've
           | mentioned or it can be giving up seats for the elderly in a
           | crowded metro trains.
        
         | j45 wrote:
         | Right on. Making a mess and learning to clean it up, and
         | prevent it a little more each time is the way.
        
       | ecjhdnc2025 wrote:
       | Calend _a_ r.
       | 
       | (Not a mistake the github page makes)
        
         | dang wrote:
         | Ouch. Fixed belatedly. Thanks!
        
       | issafram wrote:
       | I don't think it was mentioned in the repo readme, but this will
       | most likely get your account banned. Be careful
        
         | s3arch wrote:
         | can you help me understand more.
        
           | 01HNNWZ0MV43FF wrote:
           | It stores file data as calendar events, sort of like that
           | YouTube FS from a while back
           | 
           | This is probably considered abuse under the ToS since you're
           | using more storage than any typical user, and they can't use
           | it for whatever they normally sell customer data for
        
             | exe34 wrote:
             | > they can't use it for whatever they normally sell
             | customer data for
             | 
             | Bottom line, you don't want to mess with their bottom line.
        
               | darby_nine wrote:
               | I seriously doubt this kind of stuff has ever messed with
               | their bottom line. I think they just really resent users
               | trying to do more with their service than they intended.
        
               | exe34 wrote:
               | they would prefer that you pay them for storage rather
               | than store white noise on YouTube from which they can't
               | earn ad money.
        
               | 01HNNWZ0MV43FF wrote:
               | If they didn't crack down, people would start pushing it
               | harder, until some company relied on this for cloud
               | storage
        
               | darby_nine wrote:
               | I think this is a ridiculous sentiment, but I understand
               | why it's so common. Proactively trying to head-off any
               | and all possible problems before they cause measurable
               | impact is not a great way to manage a product.
               | 
               | Maybe they did see impact, but I still would have
               | rewarded non-abusive loyal customers for using the
               | product--maybe restrict access based on resource-usage
               | rather than hitting people with TOS violations. Instead
               | this attitude (plus their generally very poor track
               | record at supporting and improving their own products)
               | has caused me to abandon all google products outside of
               | work.
        
               | exe34 wrote:
               | exponentially slower access and start corrupting them by
               | flipping cases.
        
         | lvkv wrote:
         | Yeah, I'll update the README to be more specific about this.
         | This is also why I didn't provide instructions on how to use
         | the tool :)
        
           | issafram wrote:
           | This isn't exactly clear about the dangers of using the tool
           | 
           | https://github.com/lvkv/whenfs/commit/618d6c343b2660567256fa.
           | ..
        
       | silasdavis wrote:
       | WhenFFS feels like a missed opportunity here.
        
       | zeckalpha wrote:
       | Now make a WebDAV and CalDAV wrapper around that!
        
         | zcw100 wrote:
         | ...and an LLM agent.
        
       | binwiederhier wrote:
       | That reminds me of a just for fun plugin I wrote for my (long
       | dead) Dropbox-like file sync solution Syncany that would store
       | the shared files as PNG images on Flickr.
       | 
       | At the time, Flickr and Google Picasa (now Photos) gave you like
       | 1T of image storage for free, so I thought it'd be a dope
       | backend. It worked really really well actually... And it was nice
       | to see your data as images. Though since the files were packed
       | and encrypted, it just looked like static.
       | 
       | Here's the plugin if anyone's interested:
       | https://github.com/syncany/syncany-plugin-flickr/tree/develo...
       | 
       | Wow. That's 10 years old. Time flies.
       | 
       | Edit: This PNG encoder is the meat:
       | https://github.com/syncany/syncany-plugin-flickr/blob/develo...
        
         | gazby wrote:
         | Ah Syncany. Good times <3
        
       | kkfx wrote:
       | In exploration terms I suggest considering typical _serious_
       | desktop users file taxonomy, most after at certain amount of time
       | choose a timeline taxonomy of some kind simply there is no much
       | easy way with files and folder to collect and access data, even
       | with {sym,hard}links.
       | 
       | Essentially time passing is a common thing for anything, all of
       | the rest quickly became dirty or at least have some dirty dump of
       | information here and there. Long story short it's a nice
       | potential continuation of the experiment start taking notes in
       | timeline, storing files in timeline and figure out how to make
       | "dynamic hierarchies" that works well in this model.
       | 
       | I've done something myself with Emacs/org-mode/org-roam notes,
       | with kind-of daily notes and file attachments, it's not perfect
       | nor general but scale a bit. A filesystem approach it's uncharted
       | but seems to be equally possible.
        
       | robertlagrant wrote:
       | I appreciate that they made the calender system pluggable. Don't
       | want to get locked into a single calendar vendor with something
       | as important as your file system!
        
       | archmaster wrote:
       | :)))
        
       | quasarj wrote:
       | Anyone have a write-up for doing this with a Remarkable 2?
        
       | slashink wrote:
       | This is unhinged and I love every part of it! Apart from the repo
       | having an attitude I often miss from the modern internet I also
       | learnt something reading the code on how FUSE works!
        
       | XiS wrote:
       | But how does it handle (indefinite) recurring events :)
        
       | daniel-grigg wrote:
       | FUSE is cool. Can't believe it's been a decade since I played
       | with it here to make a 'weather file system'
       | 
       | https://github.com/danielgrigg/city_weather_fs
        
       | lou1306 wrote:
       | Sometimes I wish someone would write a FUSE driver for
       | IMAP/Exchange (and yeah I know Exchange is especially unlikely to
       | happen). All attempts I could find on the Web seem abandoned,
       | unfinished, or both.
        
       | ForOldHack wrote:
       | But is it Turing complete?
        
       | bionhoward wrote:
       | lol I thought this was a calendar in the file system like
       | files/folders for days/months, but it is in fact the opposite,
       | thank you for the goofy surprise, you got me
        
       ___________________________________________________________________
       (page generated 2024-08-05 23:01 UTC)