Language Selection

English French German Italian Portuguese Spanish

Scrivener Writing Software has a Linux Version

Filed under
Reviews

In some ways, Scrivener is the very embodiment of anti-Linux, philosophically. Scrivener is a writing program, used by authors. In Linux, one strings together well developed and intensely tested tools on data streams to produce a result. So, to author a complex project, create files and edit them in a simple text editor, using some markdown. Keep the files organized in the file system and use file names carefully chosen to keep them in order in their respective directories. when it comes time to make project-wide modifications, use grep and sed to process all of the files at once or selected files. Eventually, run the files through LaTeX to produce beautiful output. Then, put the final product in a directory where people can find it on Gopher.

Gopher? Anyway …

On the other hand, emacs is the ultimate linux program. Emacs is a text editor that is so powerful and has so many community-contributed “modes” (like add-ins) that it can be used as a word processor, an email client, a calendar, a PIM, a web browser, an operating system, to make coffee, or to stop that table with the short leg from rocking back and forth. So, in this sense, a piece of software that does everything is also linux, philosophically.

And so, Scrivener, despite what I said above, is in a way the very embodiment of Linux, philosophically.

I’ve been using Scrivener on a Mac for some time now, and a while back I tried it on Linux. Scrivener for the Mac is a commercial product you must pay money for, though it is not expensive, but the Linux version, being highly experimental and probably unsafe, is free. But then again, this is Linux. We eat unsafe experimental free software for breakfast. So much that we usually skip lunch. Because we’re still fixing breakfast. As it were.

Details with Screen Shots Here

Anyway, here’s what Scrivener does. It does everything. The full blown Mac version has more features than the Linux version, but both are feature rich. To me, the most important things are:
A document is organised in “scenes” which can be willy nilly moved around in relation to each other in a linear or hierarchical system. The documents are recursive, so a document can hold other documents, and the default is to have only the text in the lower level document as part of the final product (though this is entirely optional). A document can be defined as a “folder” which is really just a document that has a file folder icon representing it to make you feel like it is a folder.

Associated with the project, and with each separate document, is a note taking area. So, you can jot notes project-wide as you work, like “Don’t forget to write the chapter where everyone dies at the end,” or you can write notes on a given document like “Is this where I should use the joke about the slushy in the bathroom at Target?”
Each scene also has a number of attributes such as a “label” and a “status” and keywords. I think keywords may not be implemented in the Linux version yet.

Typically a project has one major folder that has all the actual writing distributed among scenes in it, and one or more additional folders in which you put stuff that is not in the product you are working on, but could be, or was but you pulled it out, or that includes research material.

You can work on one scene at a time. Scenes have meta-data and document notes.

The scenes, folders, and everything are all held together with a binder typically displayed on the left side of the Scrivener application window, showing the hierarchy. A number of templates come with the program to create pre-organized binder paradigms, or you can just create one from scratch. You can change the icons on the folders/scenes to remind you of what they are. When a scene is active in the central editing window, you can display an “inspector” on the right side, showing the card (I’ll get to that later) on top the meta data, and the document or project notes. In the Mac version you can create additional meta-data categories.

An individual scene can be displayed in the editing window. Or, scenes can be shown as a collection of scenes in what is known as “Scrivenings mode.” Scrivenings mode is more or less standard word processing mode where all the text is simply there to scroll through, though scene titles may or may not be shown (optional).
A lot of people love the corkboard option. I remember when PZ Myers discovered Scrivener he raved about it. The corkboard is a corkboard (as you may have guessed) with 3 x 5 inch virtual index cards, one per scene, that you can move around and organize as though that was going to help you get your thoughts together. The corkboard has the scene title and some notes on what the scene is, which is yet another form of meta-data. I like the corkboard mode, but really, I don’t think it is the most useful features. Come for the corkboard, stay for the binder and the document and project notes!

More in Tux Machines

Canonical Chooses Google’s Flutter UI SDK to Build Future Ubuntu Apps

For those not in the known, Flutter is an open-source UI SDK (software development kit) created by Google to helps those who want to build quick and modern applications for a wide-range of operating systems, including Android, Linux, Mac, iOS, Windows, Google Fuchsia, that work across desktop, mobile, and the Web. A year ago, Canonical teamed up with Google to make the Flutter SDK available on Linux as Snap, the universal software deployment and package management system for Ubuntu `and other GNU/Linux distributions, allowing those interested in building beautiful apps on the Linux desktop. Read more

Python: Security and NumPy 1.20 Release

  • Python Package Index nukes 3,653 malicious libraries uploaded soon after security shortcoming highlighted

    The Python Package Index, also known as PyPI, has removed 3,653 malicious packages uploaded days after a security weakness in the use of private and public registries was highlighted. Python developers use PyPI to add software libraries written by other developers in their own projects. Other programming languages implement similar package management systems, all of which demand some level of trust. Developers are often advised to review any code they import from an external library though that advice isn't always followed. Package management systems like npm, PyPI, and RubyGems have all had to remove subverted packages in recent years. Malware authors have found that if they can get their code included in popular libraries or applications, they get free distribution and trust they haven't earned. Last month, security researcher Alex Birsan demonstrated how easy it is to take advantage of these systems through a form of typosquatting that exploited the interplay between public and private package registries.

  • A pair of Python vulnerabilities [LWN.net]

    Two separate vulnerabilities led to the fast-tracked release of Python 3.9.2 and 3.8.8 on February 19, though source-only releases of 3.7.10 and 3.6.13 came a few days earlier. The vulnerabilities may be problematic for some Python users and workloads; one could potentially lead to remote code execution. The other is, arguably, not exactly a flaw in the Python standard library—it simply also follows an older standard—but it can lead to web cache poisoning attacks. [...] [Update: As pointed out in an email from Moritz Muehlenhoff, Python 2.7 actually is affected by this bug. He notes that python2 on Debian 10 ("Buster") is affected and has been updated. Also, Fedora has a fix in progress for its python2.7 package.]

  • NumPy 1.20 has been released

    NumPy is a Python library that adds an array data type to the language, along with providing operators appropriate to working on arrays and matrices. By wrapping fast Fortran and C numerical routines, NumPy allows Python programmers to write performant code in what is normally a relatively slow language. NumPy 1.20.0 was announced on January 30, in what its developers describe as the largest release in the history of the project. That makes for a good opportunity to show a little bit about what NumPy is, how to use it, and to describe what's new in the release. [...] NumPy adds a new data type to Python: the multidimensional ndarray. This a container, like a Python list, but with some crucial differences. A NumPy array is usually homogeneous; while the elements of a list can be of various types, an ndarray will, typically, only contain a single, simple type, such as integers, strings, or floats. However, these arrays can instead contain arbitrary Python objects (i.e. descendants of object). This means that the elements will, for simple data types, all occupy the same amount of space in memory. The elements of an ndarray are laid out contiguously in memory, whereas there is no such guarantee for a list. In this way, they are similar to Fortran arrays. These properties of NumPy arrays are essential for efficiency because the location of each element can be directly calculated. Beyond just adding efficient arrays, NumPy also overloads arithmetic operators to act element-wise on the arrays. This allows the Python programmer to express computations concisely, operating on arrays as units, in many cases avoiding the need to use loops. This does not turn Python into a full-blown array language such as APL, but adds to it a syntax similar to that incorporated into Fortran 90 for array operations.

4 Best Free and Open Source Graphical MPD Clients

MPD is a powerful server-side application for playing music. In a home environment, you can connect an MPD server to a Hi-Fi system, and control the server using a notebook or smartphone. You can, of course, play audio files on remote clients. MPD can be started system-wide or on a per-user basis. MPD runs in the background playing music from its playlist. Client programs communicate with MPD to manipulate playback, the playlist, and the database. The client–server model provides advantages over all-inclusive music players. Clients can communicate with the server remotely over an intranet or over the Internet. The server can be a headless computer located anywhere on a network. There’s graphical clients, console clients and web-based clients. To provide an insight into the quality of software that is available, we have compiled a list of 4 best graphical MPD clients. Hopefully, there will be something of interest here for anyone who wants to listen to their music collection via MPD. Here’s our recommendations. They are all free and open source goodness. Read more

LWN on Kernel: 5.12 Merge, Lockless Algorithms, and opy_file_range()

  • 5.12 Merge window, part 1 [LWN.net]

    The beginning of the 5.12 merge window was delayed as the result of severe weather in the US Pacific Northwest. Once Linus Torvalds got going, though, he wasted little time; as of this writing, just over 8,600 non-merge changesets have been pulled into the mainline repository for the 5.12 release — over a period of about two days. As one might imagine, that work contains a long list of significant changes.

  • An introduction to lockless algorithms [LWN.net]

    Low-level knowledge of the memory model is universally recognized as advanced material that can scare even the most seasoned kernel hackers; our editor wrote (in the July article) that "it takes a special kind of mind to really understand the memory model". It's been said that the Linux kernel memory model (and in particular Documentation/memory-barriers.txt) can be used to frighten small children, and the same is probably true of just the words "acquire" and "release". At the same time, mechanisms like RCU and seqlocks are in such widespread use in the kernel that almost every developer will sooner or later encounter fundamentally lockless programming interfaces. For this reason, it is a good idea to equip yourself with at least a basic understanding of lockless primitives. Throughout this series I will describe what acquire and release semantics are really about, and present five relatively simple patterns that alone can cover most uses of the primitives.

  • How useful should copy_file_range() be? [LWN.net]

    Its job is to copy len bytes of data from the file represented by fd_in to fd_out, observing the requested offsets at both ends. The flags argument must be zero. This call first appeared in the 4.5 release. Over time it turned out to have a number of unpleasant bugs, leading to a long series of fixes and some significant grumbling along the way. In 2019 Amir Goldstein fixed more issues and, in the process, removed a significant limitation: until then, copy_file_range() refused to copy between files that were not located on the same filesystem. After this patch was merged (for 5.3), it could copy between any two files, falling back on splice() for the cross-filesystem case. It appeared that copy_file_range() was finally settling into a solid and useful system call. Indeed, it seemed useful enough that the Go developers decided to use it for the io.Copy() function in their standard library. Then they ran into a problem: copy_file_range() will, when given a kernel-generated file as input, copy zero bytes of data and claim success. These files, which include files in /proc, tracefs, and a large range of other virtual filesystems, generally indicate a length of zero when queried with a system call like stat(). copy_file_range(), seeing that zero length, concludes that there is no data to copy and the job is already done; it then returns success. But there is actually data to be read from this kind of file, it just doesn't show in the advertised length of the file; the real length often cannot be known before the file is actually read. Before 5.3, the prohibition on cross-filesystem copies would have caused most such attempts to return an error code; afterward, they fail but appear to work. The kernel is happy, but some users can be surprisingly stubborn about actually wanting to copy the data they asked to be copied; they were rather less happy.