Quiver: Programmer's Notebook for OS X
happenapps.com
happenapps.com
Here's Quiver's: https://github.com/HappenApps/Quiver/wiki/Quiver-Data-Format
It's . . . really good. Like, _really_ good.
I particularly like that they keep the metadata and the content of the note separate. This is the same thing Camlistore does, and it's nice for version control because making changes to the metadata (adding new tags or whatever) doesn't show up as a content change.
Speaking of version control, Quiver's thoughts on this are interesting:
"Since Quiver stores all the data in plain JSON files, it’s easy to put the whole library (or a specific notebook) under version control. This is another way to collaborate with your team."
Leaving version control up to the user isn't the worst, but it does mean that it won't be straightforward to put an "undo" in the GUI (if the GUI already has undo somehow I'd like to hear how they do it).
I'm also not sure whether it would be better to version the whole notebook or individual qvnotes. I have more thoughts on this (starting from a slightly different angle of how it relates to wikis) here: http://housejeffries.com/page/4.
EDIT: Something just occurred to me. If HappenApps wanted to make a machine readable schema for qvnotebook and qvnote they could use JSON Schema for the JSON part. What would they use for the directory part? Is there such a thing as a schema for directories? (e.g. this directory must contain a `content.json` file, a `meta.json` file, etc.)
I might give it a shot if they decide to support linux.
Note: I was being sarcastic when I said small.
(Also, why is this specific to programmers?)
I like the concept, but it's a non-starter while it's not available on... I don't know... the largest platform.
It is slightly unfair to complain about what platforms a developer chooses to publish his/her work on. Perhaps they have been a long term Apple user? Perhaps they don't know anything about Windows development.
Windows may be the largest, but there are so many good apps and developers making a living off the smaller platforms. This doesn't make using their apps a "non-starter".
I don't think the parent meant a "non-starter" in general. This app seems really awesome, but I primarily develop on Windows, so it's a non-starter for me, which is really too bad. I was really excited looking through the page until I noticed it was only on OS X.
That and I'd prefer my electronic notebook to be available on my phone as well, so that's another reason I wouldn't use it. But if this ever comes out for Windows/Android, I'd definitely be excited to try it out.
There are so many platforms available. I don't think apps would ever get released (or companies started) if for people to adopt them they had to be out for every desktop and mobile platform. That is unreasonable. Get something out there and iterate on it.
I prefer not to use my phone and tablet for stuff like this. It forces me to pay attention to it more than I wold like because I am carrying the device. I force myself to take breaks from work by not having work stuff on my phone. If one of my co-workers really wants me, they have my phone number.
According to the StackOverflow survey Windows has been losing developers for the past three years (though that's obviously not a new trend). So much that those stats say that there are about 2/3rds as many developers on OSX as were on Windows 7 (I don't know when 10 came out, but it's not represented).
IME if you're on a Mac at your day-job you on-average have a lot more freedom in which tools you're using, and you're a lot more likely to spend your own money on them.
All that just to say: I'd be very surprised if releasing for OSX first wasn't the best financial move for them.
Yes, I have a few gigs of RAM on my laptop — but this RAM is needed for other apps, too.
Not a huge deal to me for an app of this functionality at this point in time. (I do remember being able to run X11 + Netscape in 16MB, though.)
But it is a small program, gtk gui (I think), it is WYSIWYG, has lots of plugins (calendar, todo, tex equations) and it is a Wiki. Even the calendar plugin is mostly a helper to create note-pages with the date as their title.
"Show me your flowchart and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowchart; it'll be obvious."
— Fred Brooks, The Mythical Man-Month
[0] https://ipython.org/ipython-doc/3/notebook/nbformat.html
Say your note looks like the Quiver example:
B59AC519-2A2C-4EC8-B701-E69F54F40A85.qvnote/
├── content.json
├── meta.json
└── resources
└── BCA3F8A8-C8CC-4FE5-AABB-C4262134B9E7.tiff
You can examine and modify the .tiff file using normal command line tools. This is nice!Whether this adds to the complication of the project depends on your perspective. From the user's perspective this is simpler, they can now use normal tools to work on resources without having to manually extract and then reinsert the resource.
But from an overall perspective (which is probably more important), I think you're right that this is more complicated. Directories are higher level than JSON files -- we don't always have tools that can work with them. A JSON file has a both a single Unicode and byte representation, not so for directories. Losing this to make things easier on the user is no small deal.
Perhaps the right answer _is_ to put the whole note in a single JSON file. From there it can be transformed into directory with FUSE for modification by standard tools (or for export purposes if the user wants to move away from our note type). I'm still not sure about this though.
The GUI does have an Undo, and it works exactly as you expect: it reverts changes made in the GUI app. If you have a note open and you make an external change, the app will at some point notice the change and ask you if you want to reload; if you say yes, it reloads from disk and throws away the undo history. I was able to get it to reload content without realizing it changed (by editing the note, then closing it in Quiver before it detected the change and reopening) and this didn't throw away the undo history, which seems like just a fairly simple bug.
Or to put it more generally, Undo works in Quiver pretty much the same way you'd expect it to work in any editor that can reload files that change on disk; the undo history simply doesn't concern itself with undoing changes made outside of the app, and in most cases reloading the file from disk throws away undo history.
https://github.com/WardCunningham/Smallest-Federated-Wiki/bl...
This looks a lot like the Jupyter/IPython Notebook, which is a free and open source "scientist's notebook". If you're interested in mixing LaTeX, Markdown, and code from almost any language (Python, R, and Julia are very well-supported but there's an open kernel spec), then this might be a more appropriate tool for you to use.
The Jupyter/IPython notebook default storage format is JSON, which makes it a little more friendly for text-based version control, and also enables a static HTML view of notebooks (http://nbviewer.jupyter.org/github/ketch/teaching-numerics-w...) on GitHub.
Helen Shen wrote up a great article for Nature (http://www.nature.com/news/interactive-notebooks-sharing-the...) on how scientists are using the notebook, but it also provides a good overview of how you might use it, as well as a free interactive demo.
[1]: https://lab.open.wolframcloud.com/app/view/newNotebook?ext=n...
I suspect there’s prior art (Hypercard? every spreadsheet ever? this list: https://en.wikipedia.org/wiki/List_of_graphical_user_interfa... ?), and the patent seems pretty obvious, but in any event, I don’t think other “code notebook” implementations are currently infringing this patent, and it seems relatively straightforward to work around.
I started to play with it recently and I am very happy with what it can do.
It's, also, very easy to install in a docker container: https://github.com/jupyter/docker-stacks (I haven't managed to make work the persistence part when stopping the container yet, but this is due to my inexperience with docker).
For me that was allways the killer feature of Jupyter :-)
Isn't almost all software licensed rather than ownership sold? This isn't unique to the App Store.
And I'm not even beginning to cover the terrible App Store app itself or the enormous cut Apple takes from independent developers.
[1] http://www.theguardian.com/technology/2015/nov/12/apple-user...
I've reviewed your request, but as much I would like to restore the item for you,
I won't be able to download "Aperture" to your account because the amount of time
that has passed since this purchase was made prohibits us from restoring it.
Goodbye App store.Aperture has been EOLed -- it's not advisable to install it even if you could, as you'd be installing deprecated software that can stop working at any future OS update.
That wouldn't be much different than any software company not allowing you to download their old program anymore.
I fail to see how this isn't a problem for stuff sold outside the App Store as well.
- an app on the app store can be pulled out at any moment.
- I can't backup a specific version of the software that I like (I've seen before software become overly bloated in future versions forcing me to keep using an older version)
- I do not want to support Apple's policies on the app store and do not want to ever end up having a system that's as restricted as IOS (although if that happens I'd jump ship back to Linux so I guess my non app store purchases would become useless anyway)
- my experience with ios app store reviews told me that Apple rules are idiotic, the review experience is poorly managed and they don't give a fuck about keeping developers happy now that iphones are massively successful (very different than when they were trying to court developers back in 2005ish...). I don't want my money to help finance this with the 30% cut that Apple takes.
It all really boils to control, being able to keep backup of the software I use, having access to that software even if the developer stops selling it for whatever reason. I dislike the fact that end users have less and less control over the platform they buy and I do not want to be part of that.
I'm a tad hypocritical since I use a mac and I have an iphone lying around to test and software dev on but buying on the app store is where I draw the line.
Some of the UI elements are a bit out-of-place. I'm not sure if it's just because they're not native controls; I'm still running on Mavericks and it's quite possible these are El Capitan-style controls. Still, it's a tiny bit disconcerting.
On a more positive note, I think this is a wonderful concept which can potentially inform future tools for 'code management' (for want of a better term). I think there are plenty of ways in which the integration of code and other content can improve our discipline, so any work in this area is very interesting.
This is in the tutorial, Section 3 - Cell Operations.
Well, from the menubar: Cell -> New Cell. Which also shows the shortcut next to the menu option.
Is there anything that Quiver would offer that I wouldnt already have with a github repo?
For actual notes I just use org-mode since it can be read easily in nearly anything, supports all the bits I want and has nice html/pdf export if I need to send a todo/completed list out to anyone.
What's nice is I can keep my own meta-docs project which just links to each repo for each set of projects so I can jump around different projects transparently as well.
git init --bare repo
git clone repo clone
cd clone
<stuff>
git add ...
git commit ...
git pushPlugin 'plasticboy/vim-markdown'
Plugin 'suan/vim-instant-markdown'
Plugin 'junegunn/goyo.vim'
Plugin 'amix/vim-zenroom2'
Plugin 'junegunn/limelight.vim'
I also have quite a bit of prose-related stuff that I tend to conflate, but these are the main ones.
It's particularly nice in that if you are already in vim; <leader>ww will open the wiki index.
https://github.com/vimwiki/vimwiki
I've also been doing some note taking with :set filetype=journal in use with junegunn's nice syntax.
But I particularly like some of the ways vimwiki functions.
I like that I can type project_notes and hit <return> and it opens up a new project_notes.wiki, and then I can hit <backspace> to go back to the previous wiki.
There are more normal mode keybindings that you might find yourself using. Sometimes I remove unwanted wikis by <leader>wd, which will delete the wiki you are currently viewing (it's nice in that you can see the content then quickly delete). Renaming, too.
Maybe I can sum it up to just say I prefer the navigation and handling of new/unwanted files with vimwiki?
- Create a folder.
- Create notes as files named like tweets `my note #javascript #yolo.txt`.
- Write markdown in plain text files.
- Open the folder from your choice of editor.
- Distribute your notes folder using Git, Dropbox, Drive, etc.
- Enjoy your notes FOREVER.
Atom works great when you need your notes in a Desktop environment. The command line is wonderful when you are on a server. Byword is amazing on iPhone. Nothing great I've found for Android yet.
There seems to be a lot of similar interest, so maybe someone with the right skills could start a community developed open source linux and/or windows port.
There is an app called Dash[1] that has a lot of source code and api documentation stored offline and searchable. It also boasts that you can put your own code snippets in it. So I really wanted to use Dash to keep all my code snippets in, as well as the documentation lookup feature. But adding code snippets to Dash is a somewhat involved process, and I eventually gave up on using it as a notebook. But it might be interesting to see about converting the freely downloadable docsets into something readable by Quiver. This might not be easily doable since these docsets are in a myriad of formats, and quiver only supports markdown and latex currently. Adding reStructured text would probably open up some possibilities.
I was able to import all my Evernote content very easily. I love the ability to use Markdown to take notes and the support for VIM commands in code blocks is nice.
The only thing I miss from Evernote is access from my iOS devices.
Looking forward to the upcoming iOS version. The one feature I miss the most, besides that, is something like Evernote's menu bar app, for quick entry/scratchpad.
1. implement search just like nvALT does it. The particular interface to search is one of nvALT's best features, and I prefer it over the 'dropdown' interface that Quiver uses. 2. support for basic vim keybindings to switch between notes (j and k at least).
I use EverNote a lot, and have dozens of quick programming notes. The MarkDown syntax support here is very nice, but I don't think that alone is going to be enough to make me switch.
this, of course, relies on you having it running already.
I usually save the notebooks I create onto google drive, which gives me the ability to easily open each notebook on other machines. Poor man's sync.
I will be taking a very close look at this app!
Similarly to append text to a note (think of a log), you first have to click somewhere, choose a cell type…
Overall, it seems to be a nice app, but for people who enjoy spending time organizing their notes. I don't, I just want a simple way to keep my notes — so I guess it's back to writing my own app after all.
I have a markdown file in a private git repo for each month, I append a new header with the date at the start of each day and use it as a notepad, dumping whatever comes to mind. Most importantly I don't go back and revise what I've written.
Yes, we've probably lost the value of good software a bit. The bigger issue is that I no longer judge the value of software based purely on a page (or app store description) advertising it. I need to try it out to see its value. So if the company is charging up front for the software, just about any amount seems too much.
Edit: Just realize that it is something specific to emacs. No further information necessary.
Let me know how it goes.
It supports Markdown, code snippets (in markdown ```), latex and sequence/flowchart diagrams.
To me it feels a little more natural to write a markdown document rather then thinking about each block of text as "cells".
I don't see any reason for people to avoid the LaTeX additions to mathmode.
There, I fixed the title.
Some of the complaints in this thread about the program only existing for Mac, though, are childish. It's fine to ask for another version, but to carp about it petulantly is embarrassing.
All I am seeing is a green "Free Trial" banner in the bottom left. Is that it?
I found this bit funny, though:
"Quiver lets you sync all your notes across multiple computers via Dropbox, iCloud Drive, Google Drive, or any other file-based cloud services."
.. like .. any other application that saves files to disk into a synced folder?
It might seem ugly to factor out the encryption like this, but even though it requires a little configuration, it's an example of elegant software composition. Its also good from a security perspective relative to every little notebook application containing its own encryption system.
I prefer applications to focus on one thing and do it very well, and leave other orthogonal functionality to other applications or the OS to then do the other parts very well. In this respect Quiver is well designed, I tip my hat to the author.
Its a mystery to me
Even Microsoft is now doing multi-platform tools for developers (https://code.visualstudio.com/).
Or, option C: You use Electron, like Slack.
It really is one-platform or web, and web is not for everyone (least of all programmers writing notes about their code at work.)
Is is possible to quickly switch a cell to a code format with a specified language? (triple backquotes? like ```python?)
For cells, you can Opt+Cmd+2 to convert to a code cell, then Opt+Cmd+/ to bring up the list of languages and then type ahead. That's about as close as it gets. You can also set the default language for new code cells in preferences.
I've been looking for an Evernote replacement that was more ahem concise. I've been using Evernote to help plan experiments and track papers, but it can't seem to get out of it's way... particularly when trying to share a notebook with collaborators. Honestly, the biggest downside that I see with Quiver is that it is Mac only. This isn't an issue for me, but might be for some collaborators.
Then again, the alternative would be to use some other tool or shared Google Doc or something like that, so Quiver probably isn't too much of a hassle in that regard.
You should be able to script writing new data to a note for simulations / plots, given that the notes are JSON files. I love that the DB is an easy to read / edit / backup set of JSON files.
Excellent stuff!
Is there a way to nest notebooks? That's actually pretty important to me.
Edit: to be clear, this isn't specifically about Apple's kool-aid, either. I have the same reaction when people assume every developer is or should be active on GitHub and other similar monocultures.
I do, of course, customise it for myself.
I'm sure if he was making a lot more money he wouldn't hesitate to release for other platforms, because he would be able to to hire someone to do the other platforms
See? It goes both ways (which, from your edit, I know you understand, but it's work a specific example). This guy's labor of love is a well crafted, thoughtful application for programmers using OS X. There is zero controversy there. Same with any other OS X-only application that Windows or (Li|U)nix users want.
When we beg for cross-platform apps from developers who don't understand all those platforms, we end up with web-browser-as-platform Electron-based apps that bundle a browser to render their UI layer. Sometimes that's done well (Visual Studio Code is quite nice) - often it's just okay bordering on slow. In fact, it's so rare that high-speed apps are available in some native form for multiple people platforms, I consider it a special gift to use one (Sublime Text comes to mind).
Let's not stifle the creativity and drive that small or single-person developer shops have by suggesting - even passively - that we are entitled to three OS-specific builds of anything they write.
I'm not simply referring to the decision to target a particular platform. That's fine. There's nothing wrong with having a narrow focus. But please stop pretending it's anything but a narrow focus.
That said, the "sharp" in "resharper" actually does hint at its Microsoft nature, as it's the same sharp in "csharp"
The issue with 'The Programmer's Notebook' is that the expectation is set at something like 'This is a notebook that will be generally useful for many types of programmers'. It's like the Physician's Desktop Reference. The name implies that it will be of general usefulness to anyone in that particular field.
So when I see the title 'The Programmer's Notebook', the expectation is that it will be something useful for all types of programming (embedded, linux, bsd, web, native desktop, rtos, etc).
Then the expectation is crushed because it's only usable if you have an apple device. That means a large swath of 'programmers' (whom this notebook is apparently supposed to be for) are not going to have access to it. Thus the whole thesis of the title is invalid. It's not the programmer's notebook, because many/most programmers are not going to be able to use it.
You don't have to be active on Github; maybe you can be active on Bitbucket, but you won't get a fraction of the eyes or feedback as you would on Github.
But you're also ignoring the massive amounts of money and legal effort made by, e.g. Apple, in order to guarantee that such a monoculture develops. You have to willfully ignore things (like their choice to make non-Apple text messages green instead of blue) in order to claim that it came about organically. There is a concerted effort to create an us vs. them mentality, which always sucks for "them."
Obv. the same isn't true for GitHub., but I don't want to argue the (de)merits of monocultures in general. I take for granted in this thread that they're a bad thing.
noun
1. Paper notebook
2. Laptop
3. Apparently another fucking thing as well now.
Plus the document model used — a mix of different kinds of "cells" — has a history of being called a "notebook interface" (cf. Mathematica, IPython/Jupyter notebook, https://www.quora.com/What-is-a-notebook-interface-in-progra...).