it's weird but Visidata is very nearly my idea of a perfect spreadsheet. "But!", you exclaim, "Visidata is not a spreadsheet", I know, I know, that is what makes it so weird. Let me explain.
I am not fond of the the usual spreadsheet data model. "It's a big bag of cell" does not fill me with joy. And upon a bit of reflection I think it is the rows, I really hate how easy it is for rows to get out of sync. All I really want is row security.* And this is what visidata brings to the table.
* Relational databases provide this in spades. and in truth most of my spreadsheets have been replaced by them(I maintain a local postgres server on my desktop for all the small random prototype junk you would usually do in a spreadsheet using visidata as a pager) And while the database is great for analysis, random data entry sort of sucks. There are some great tools out there for this. I don't tend to use them, mainly because psql is always there, so I just sort of grumble when I have to do random entry without trying to fix anything. Why postgres instead of sqlite? I like the types and functions better.
It's all about picking the right tool for the job. I don't see easily constructing a Discounted Cash Flow model in a relational database making a ton of sense. Sure, you could have the data in one, and use a php script to handle the modeling, and output it on a webpage, but the reality is, a spreadsheet just does it a lot easier, and is what most people would want.
For handling structured data, spreadsheets can do it, but they're not always going to be the best tool for the job, as they do a lot of other things, too, which means if you're not careful, your data will lose its appropriate structure.
Another strong recommend for VisiData. I've been using it for a few years now, it's probably saved me months worth of cumulative effort in tasks I'd have otherwise used either spreadsheets or databases for. In fact, I almost never touch spreadsheets for ad-hoc data processing anymore.
This catches my eye every time, but for day-to-day work I always fall back to Google sheets. In light of that, this browser extension I found recently has been an absolute game changer: https://github.com/philc/sheetkeys
Because really, do you want all of vim in sheets, or just navigation (`i/h/j/k/gg/G/^u/^d`) and selection (`v/V`)? It has some other basic stuff, like `dd` and `o/O`, but otherwise conflicts with browser and Google functionality keep me away.
Visidata blows everything else in this category out of the water. I can open a table on a remote Postgres DB, use a regex filter to select the records I want, then do an outer join to a local CSV, all with just a few keystrokes.
fast loading of massive datasets and built-in support for SQLite tables. i also found the interaction to be more intuitive, which is important for a tool i pick up sporadically.
This is great and probably a nice complement if I can get it working with my Visidata[0] workflow for data files.
If you’re looking just for spreadsheets, Travis Ormandy somehow managed to get Lotus 1-2-3 to run on Linux a few years ago[1]. It’s a neat comparison point.
cursor-addressing uis likely have a higher barrier to entry (both for developers and users), so they are not suffering from the regression to the mean that has made modern guis absolutely unusable.
that, and there aren't any "ui/ux designers" specialising in cursor-addressing uis.
What do you mean precisely by "character addressing UI"? I can infer approximately what you mean, but I had never heard that phrase before and could not Google it, so was wondering how precisely you define that as presumably slightly distinct from other more common terms for text mode applications.
thanks! i meant 'cursor-addressing', to avoid the ambiguous term 'tui', which usually (and per https://en.wikipedia.org/wiki/Text-based_user_interface) means cursor-addressing, but nominally also includes actual text-based user interfaces, as seen in e.g. the traditional unix utilities.
You still didnt define what "cursor addressing" means. Its not a common term to use for these UIs and doesnt seem to get to the crux of what separates a typical GUI from these.
For me, the crucial difference is that they're usable over ssh and tmux, not the type of cursor they have (if any).
Gosling wrote sc? I had no idea. I was an scim user before moving to visidata like another poster mentioned, so I kinda-sorta feel like an sc user.
For those who don't know, James Gosling invented a popular VM-based "write once, test everywhere" programming language named after a tree. Then named after a coffee.
For those who don't know, and don't want to have to go off and search to understand the cryptic comment... He's talking about Java. Which in an earlier iteration was known as Oak.
It reminded me of The Twin spreadsheet from the late 1980s. I worked at a plastics plant that used it in their color lab until at least 2013 when I left. There were thousands of color recipes and no one wanted to try and convert all of that to a newer spreadsheet.
The great drawback of TUI app is that are quite unusable from touch devices, or generally devices without a keyboard). If you find a way to make them usable on mobile I think they can get a great comeback
If you can find a way to make touch-friendly interfaces useful on desktop devices with a large screen and a keyboard maybe then they'll take off.
Better yet, make all user interfaces the same as a toaster. Everyone can use a toaster. Bread goes in, push the lever. One universal way of thinking for everyone and everything. No domination by the tyranny of choice.
I gave sc-im a try years ago but quickly hit a showstopper for my needs. The built-in functions are very limited (for example no MEDIAN), but you can write your own external functions. However, external functions can only accept a single cell, and not a range of cells, as input. For me, operating on a range of cells is kind of the point of a spreadsheet. It seems that this hasn't been addressed yet.
This article made me recall a text based GUI? I used in commercial programming tool named "Vermont Views" previously named "Windows for Data" This was around about 1990 or earlier? . It was a tool that allowed relatively easy development of text based user interfaces Old Ad for it https://archive.org/details/byte-magazine-1992-01/page/n25/m... Google the words >> +"Windows for Data" Vermont Views << for lots other links ....
I really wanted to use this tool because I love Vim, but it just feels 'off' to me. I'm not sure why, though.
In a spreadsheet, I'm used to being able to move around with arrow keys and start typing immediately. Using SCIM, it feels like I'm constantly hitting a wall.
Despite that, I think the idea of a spreadsheet as a TUI is really great.
True, but in my case I think it isn't enough of a Vim-like experience.
In that case I would have expected modes I could stay in for longer than a single cell entry.
It would be fine if I'm in insert/edit mode and I can move around entering values in several cells and then press escape to exit that mode.
The reason I think TUIs are attractive to use is because they're more efficient to use. But this one doesn't feel more efficient to use than its GUI counterparts.
I think this is mostly dead for a reason. TUI nostalgia is an itch for software people, but software people already have more powerful things--like SQL, Pandas, APL, etc... while spreadsheets are for people who don't want to scale those learning curves, and those people already have Excel.
Back in the days before I found spreadsheets useful my boss was trying to get me excited about sc running on his HP workstation. That seems to be about the same time that one of the original authors was off working on something (Java) that would have more impact.
> sc-im is based on sc, whose original authors are James Gosling and Mark Weiser, and mods were later added by Chuck Martin.
This is really cool, but I don't think this is very useful.
In my opinion: if you can use vim, you can probably code, or at least figure it out without too much trouble. If you can code, then you don't need a spreadsheet. You can just write a program to crunch the numbers, or produce a report etc.
Excel is so popular, because it is a way for non-coders to crunch a bunch of numbers in a relatively easy way. And the best way to get the answers that they are getting out of the spreadsheet is to write code. But because they can't code, they have to use a spreadsheet.
If there is a use case for spreadsheets that is not better served by some real code, I'm interested to hear what it is.
You could also make the "speed" argument (just a quick calculation) for spreadsheets, but in that case, I find something like a python REPL just as quick, and still better anyway.
While vi might be a code editor first and foremost, not all vi users are coders. There are copy writers, academic and literature, having a need for fast and focussed touch typing (George R. R. Martin comes to mind as prominent WordStar user). The entire point of SGML/XML/HTML markup is to be able to create rich text documents without binary formats and special editors; this is also the case with Wiki syntaxes like markdown, which have been around since long before John Gruber's original Markdown.PL and are directly supported as a shortref customisation in SGML, from 1986, BTW.
Conversely, even if you are a coder, classic spreadsheets are extremely useful for any type of ad-hoc reproducible calculation (such as for taxes or other personal or business finance stuff). You really should check out spreadsheets if you haven't already; the point is that you can cross-reference cell values and copy/paste with relative cell positions to create large calculation tables/matrices, then update base values and perform "what-if" analyses, etc. etc. Using cell formulas is more like a logical programming language environment. I've used it for all kinds of reports apart from financials (benchmarks, construction/project planning, even a Tic Tac Toe game in school out of boredom).
I don't disagree with your first paragraph, but I don't think it is relevant to what I was saying.
> Conversely, even if you are a coder, classic spreadsheets are extremely useful for any type of ad-hoc reproducible calculation
Again, I still feel like code is the ideal solution to "ad-hoc reproducible calculations"
> the point is that you can cross-reference cell values and copy/paste with relative cell positions to create large calculation tables/matrices, then update base values and perform "what-if" analyses, etc. etc.
I still don't see how you can't do that with code, nor what the spreadsheet is doing that code can't.
> I've used it for all kinds of reports apart from financials (benchmarks, construction/project planning, even a Tic Tac Toe game in school out of boredom).
Sure. It has been proven that excel is Turing complete. But I'd rather use a programming language (a tool that was literally designed for the purpose of writing code), than a clunky spreadsheet. Both can get the job done, I never denied that. But I still don't see the value that the spreadsheet brings over custom code written to solve the exact same problem.
I'd love to hear what specifically makes you call spreadsheets "clunky"? (Personally I find spreadsheets to be quite elegant, a table adapts easily to WIMP [https://en.wikipedia.org/wiki/WIMP_(computing)]. E.g., in contrast to say the Bézier curve interface in Illustrator, which I wouldn't ask for explanation in being called clunky, because drawing curves does not adapt easily to WIMP for example.)
> Again, I still feel like code is the ideal solution to "ad-hoc reproducible calculations"
I am a developer and I do my personal budgeting on a spreadsheet. It was easier to setup and maintain, and follows my process better than the personal finance software I have used before. Could I have made a little program for this? Sure, but it would be time consuming and I have better projects to spend my time on.
Let me tell you the story of how i came to love and use sc-im instead of my own solution.
Multi-country taxes are too much fun. Every dollar/GBP amount needs to be converted to the other currency for taxes in that country.
I originally did this in libre office but I got annoyed at it and wrote a markdown pipeline to produce PDFs for my accountants.
I would do data entry in CSV and wrote a CSV to markdown converter. Along the way I wrote a simple CSV formula language with just a couple of functions that would do column level operations e.g. =MUL(C, E) to multiply columns C and E.
This worked pretty well, and I could make a small directory of sorted markdown files to assemble, and a Makefile to transform the CSV+formula files to flat CSVs.
But CSV input was kind of annoying and my formula language wasn't easy to extend, or very nice. So I jumped at sc-im which can directly output markdown tables.
Anyway, I highly recommend sc-im, the .sc files are a fine replacement for my custom solution and I haven't looked back (and taxes are coming again soon!)
I am a counter example to your assessment. I can definetly code, but I wip up spreadsheets often.
> If there is a use case for spreadsheets that is not better served by some real code, I'm interested to hear what it is.
Sharing information with non-coders could be an obvious one. I could have done a database with my wife's sewing patterns collection, of which she has ~300. Instead, I did a spreadsheet in google docs, which she's very familiar with. Told her how to enter data there (4 fields, name, file, tags and picture) and there's a couple tabs that allow her to filter things out, etc. Then she can do whatever she wants with it, like using conditional formatting to make dress patterns red. It was done in 2-3 hours, and she got exactly what she wanted.
I worked in a place where both the input and output was spreadsheets, and the users were spreadsheet users. We did implement a database for this particular one for the heavy algorithmic part, but a lot of the business logic (e.g. initial data validation, final presentation of the results) lived on the spreadsheets themselves.
Another interesting one is data-to-visual time. Unless you happen to be proficient in a particular area of programming (e.g. front programming with proficiency in something like D3, or R programmer) getting decent graphs out of data is a chore when going the programming route. With spreadsheets, you put the columns and get the graphs essentially for free.
To me spreadsheets are just another tool in the toolbox; they are appropriate for some tasks. They can definitely be misused and abused. Knowing which occasion is which is where experience comes in.
> Sharing information with non-coders could be an obvious one.
You can do the exact same thing with code. You can still output reports and diagrams, and literally anything the "customer/user" wants.
> I could have done a database with my wife's sewing patterns collection...
Your example is a good one. I didn't think of images.
> It was done in 2-3 hours, and she got exactly what she wanted.
Fair enough. A spreadsheet was probably the right tool for the job in this case. But if she ever wanted more features, and the complexity increased, I don't know if it still would be.
> I worked in a place where both the input and output was spreadsheets, and the users were spreadsheet users.
Okay, but should they have been? Would custom software not have been the better solution?
> a lot of the business logic (e.g. initial data validation, final presentation of the results) lived on the spreadsheets themselves.
When I think of "business logic", "data validation", and "final presentation", a spreadsheet is one of the last tools I'd reach for.
> Another interesting one is data-to-visual time. Unless you happen to be proficient in a particular area of programming (e.g. front programming with proficiency in something like D3, or R programmer) getting decent graphs out of data is a chore when going the programming route. With spreadsheets, you put the columns and get the graphs essentially for free.
I also disagree with this. I am very much a back-end developer. But using something like GNUplot or a library like matplotlib is pretty easy for outputting a nice looking graph from tabular data.
> To me spreadsheets are just another tool in the toolbox; they are appropriate for some tasks. They can definitely be misused and abused. Knowing which occasion is which is where experience comes in.
I agree with this. But I guess the difference is I can think of almost no circumstances where it's the better tool for a coder.
You forgot one thing: data entry. It is far more convenient to type tabular data in a spreadsheet app than in a REPL. I use it for simple SQL data, too. As Python coder I use visidata. Provides also fast and convenient aggregations etc.
And, btw, if you search for "distraction free writing",you will find that even some non-coders use vim.
I've never really had a problem entering data into CSV file or database, but I will concede that it is even easier to enter the data via a spreadsheet.
However, I still think custom software (with proper UI for input if necessary) is the better way of dealing with the actual solution that a spreadsheet is ultimately trying to solve.
> If there is a use case for spreadsheets that is not better served by some real code, I'm interested to hear what it is.
Think of spreadsheets as a convention-over-configuration low-code environment with a tightly coupled GUI for spinning up run-almost-anywhere apps that non-coders can modify. One of the few low-code environments that I actually like.
I'm a solopreneur whose SaaS product I coded from scratch. I love GPPLs, but I also create spreadsheets all the time.
Sometimes that's because of the stage of an idea: There's a new process you've discovered you need, but you don't have time to invest in building/buying/learning a tailor-made solution.
A case in point is a business overview dashboard I built to keep an eye on the metrics I care about. It pulls data from disparate sources using Power Query, which is built into Excel and can pull from databases, APIs, CSVs, etc. There's no hosting infra and no new monthly fee as I already had the Excel license.
Another nice thing about spreadsheets is that today, they're multi-user and real-time collaborative. You can send someone a link and both edit an Excel or Google Docs spreadsheet in the browser with very low ceremony. And if they're on a power user, they can modify the formulas themselves. That's a bad thing for some use cases but a truly great thing for others.
The ubiquity, the local-first option, the tightly coupled GUI, the widely known syntax...those things make spreadsheets very attractive for certain types of projects.
For others, building an app is the right answer. They both have a place.
Making a spreadsheet that does a variety of calculations, displays graphs, live updates, is share-able, editable via web and mobile, can be embedded in technical documents and presentations is all free with a spreadsheet. Your comment trying to address the speed argument, replacing with a "python REPL" is difficult to take seriously. Spreadsheets are order of magnitude faster, and that speed advantage scales from the simplest of spreadsheets to the most complex (i.e., just summing a column of data will be maybe 10 times faster in a spreadsheet than a python REPL [although both are trivially fast for this use case], and doing all of the above listed features would be months to program relative to free for the spreadsheet).
"If the only tool you have is a hammer, it is tempting to treat everything as if it were a nail." [1]
While you can solve a lot of problems with code, code might not be the best way to solve some problems.
I want to type in some data, mix it up, explore, maybe make a quick graph, get some stats, decide if I need to make more calculations. By the time you decide on what tools to use and run your pip install or whatever, I'd be long done.
Conversely, I have seen spreadsheets used for a lot of things that they shouldn't be.
i am able to program but hell no i will start to crunch numbers programmatically unless it's something a basic spreadsheet can't do. i use spreadsheets exactly because i don't need to code and create something from scratch.
but while this is not for me (no interest in learning vim), i'm pretty sure many other people will find this useful
VisiCalc - the first spreadsheet - was entirely text based and people found it useful enough that it exploded in popularity and was very successful on the Apple ][ until the advent of the IBM PC when Lotus 1-2-3 came and ate its lunch.
I'm not a spreadsheet guy, so I can't say how "good" they are, but Emacs has a few. Of course org-mode can do some of it (what can't org-mode do?), but in my experience it bogs down with larger datasets. Simple Emacs Speadsheet has been around a while and comes built-in these days, but I haven't tried it.
One nice thing is that Emacs has calc-mode built in that gives you all kinds of advanced math capability you can use. The tables in org-mode support this directly, but since calc has a Lisp interface you can use it pretty much anywhere.
You can share with git. But obviously this is no real replacement for cloud based multi user spread sheet software.
To be honest I also think that if you are making heavy use of cloud based spread sheet software you have a 100% chance of being a drain on your organization and society as a whole, so I can't really count those missing features as a big downside.
> To be honest I also think that if you are making heavy use of cloud based spread sheet software you have a 100% chance of being a drain on your organization and society as a whole
How about for just personal (family/friends) usage?
I would tend to agree spreadsheets are a crutch in larger orgs, however they're best deployed as a prototype tool IMO.
There's plenty of room for > 1 and < 5 (write-access) person operations where cloud based xlsx sharing just makes far more sense than some expensive/excessive enterprise tools.
That's.... my point. I'm skeptical that you'd be more efficient by doing spreadsheet operations on your terminal vs just using excel on your non-terminal.
This has been posted several times on HN, but besides being awesome, this project should be better funded. Please read the README on Github and sponsor it on patreon.
I was writing that yeah, I definitely meant that to be subjective to each own, but I can't lie to myself, I mean yeah, people surely prefer Vim to whatever alternative there's available out there that makes your life less miserable, but I'm 100% sure I take my mom or your mom or some person that doesn't have the bare minimum computer knowledge and put them in front of Vim and Nano and tell them "hey here's two text editors, write something, here's a keyboard" and they won't be able to do it in Vim because you some-fucking-how need to enter insert mode to be able to write in a fucking text editor, in nano (or [inset non vim-like text editor]) you at least press a key and something happens in the screen. Software needs to be intuitive and not against the user, just imagine Notepad being like Vim, the absolute madness no? There's a thin barrier that separates subjetivity from objectivity.
Look me in the eyes and tell me that a text editor somehow needs a text input mode or a command to exit the application that's not a universal shortcut like Ctrl-C or Ctrl-D for GNU/Linux, the fact that the "how to exit Vim" meme is a reality is a perfect example of what I mean.
Well I don’t use vim, but I wouldn’t call it “unnecessary complexity”. Modal editing has actual benefits that some people like enough to make the tradeoff.
Assuming it exists for no reason just because you don’t know what those benefits are, and that everyone else must just be stupid, is arrogance on your part.
https://www.visidata.org/
It's saved my ass on multiple occasions for data wrangling and munging and highly recommend people use it in their own toolkit.