Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jaywonchung/reason

A shell for research papers
https://github.com/jaywonchung/reason

academic-paper command-line research

Last synced: 5 days ago
JSON representation

A shell for research papers

Awesome Lists containing this project

README

        


Reason: A Shell for Research Papers


- Did I ever read this paper?
- Which OSDI 2021 papers did I read?
- Which ones have the word 'Distributed' in their titles?
- How many papers in 2020 were co-authored by Professor Mosharaf Chowdhury?

Well, ask `reason`.

## How it works

### Filter and list papers

```
$ reason
>> # Show all papers.
>> ls
+----------------------------------------------------------+----------------+---------+------+
| title | first author | venue | year |
+============================================================================================+
| Shadowtutor: Distributed Partial Distillation for Mobile | Jae-Won Chung | ICPP | 2020 |
| Video DNN Inference | | | |
|----------------------------------------------------------+----------------+---------+------|
| Efficient Memory Disaggregation with Infiniswap | Juncheng Gu | NSDI | 2017 |
|----------------------------------------------------------+----------------+---------+------|
| Refurbish Your Training Data: Reusing Partially | Gyewon Lee | ATC | 2021 |
| Augmented Samples for Faster Deep Neural Network | | | |
| Training | | | |
|----------------------------------------------------------+----------------+---------+------|
| Finding Consensus Bugs in Etherium via Multi-transaction | Youngseok Yang | OSDI | 2021 |
| Differential Fuzzing | | | |
|----------------------------------------------------------+----------------+---------+------|
| Tiresias: A GPU Cluster Manager for Distributed Deep | Juncheng Gu | NSDI | 2019 |
| Learning | | | |
|----------------------------------------------------------+----------------+---------+------|
| Nimble: Lightweight and Parallel GPU Task Scheduling for | Woosuk Kwon | NeurIPS | 2020 |
| Deep Learning | | | |
+----------------------------------------------------------+----------------+---------+------+
>> # Filter by 'title'. All these are regexes!
>> ls 'Deep Learning$'
+------------------------------------------------------------+--------------+---------+------+
| title | first author | venue | year |
+============================================================================================+
| Tiresias: A GPU Cluster Manager for Distributed Deep | Juncheng Gu | NSDI | 2019 |
| Learning | | | |
|------------------------------------------------------------+--------------+---------+------|
| Nimble: Lightweight and Parallel GPU Task Scheduling for | Woosuk Kwon | NeurIPS | 2020 |
| Deep Learning | | | |
+------------------------------------------------------------+--------------+---------+------+
>> # You may set default filters with `cd`.
>> # BTW, `cd .`, `cd ..`, `cd -`, and `cd` are supported, too.
>> cd 'Deep Learning$'
>> pwd
title matches 'Deep Learning$'
>> # Default filter are automatically applied.
>> # Infiniswap (NSDI'17) is not shown, because its title doesn't match 'Deep Learning$'.
>> ls at NSDI
+------------------------------------------------------------+--------------+---------+------+
| title | first author | venue | year |
+============================================================================================+
| Tiresias: A GPU Cluster Manager for Distributed Deep | Juncheng Gu | NSDI | 2019 |
| Learning | | | |
+------------------------------------------------------------+--------------+---------+------+
>> # Delete Tiresias.
>> ls at NSDI | rm
Removed 1 paper.
```

### Import new papers

```
>> # Import directly from arXiv and USENIX. This will also download paper PDFs.
>> curl https://arxiv.org/abs/2105.11367
+--------------------------------------------------------+--------------+-------+------+
| title | first author | venue | year |
+======================================================================================+
| FedScale: Benchmarking Model and System Performance of | Fan Lai | arXiv | 2021 |
| Federated Learning | | | |
+--------------------------------------------------------+--------------+-------+------+
>> curl https://www.usenix.org/conference/nsdi21/presentation/you
+------------------------------------------+--------------+-------+------+
| title | first author | venue | year |
+========================================================================+
| Ship Compute or Ship Data? Why Not Both? | Jie You | NSDI | 2021 |
+------------------------------------------+--------------+-------+------+
>> # Modify paper metadata.
>> ls ship | set as Kayak
>> # Or, import manually.
>> touch 'Batch Normalization: Accelerating Deep Network Training by Reducing Internal
Covariate Shift' by 'Sergey Ioffe, Christian Szegedy' at ICML in 2015 as BN @ BatchNorm.pdf
+--------------------------------------------------------------+--------------+-------+------+
| title | first author | venue | year |
+============================================================================================+
| Batch Normalization: Accelerating Deep Network Training by | Sergey Ioffe | ICML | 2015 |
| Reducing Internal Covariate Shift | | | |
+--------------------------------------------------------------+--------------+-------+------+
```

### Read, take notes, and create books!

```
>> # Open with a PDF viewer (`open`) and edit markdown notes with your editor (`ed`).
>> ls 'Why Not Both' | open | ed
+------------------------------------------+--------------+-------+------+
| title | first author | venue | year |
+========================================================================+
| Ship Compute or Ship Data? Why Not Both? | Jie You | NSDI | 2021 |
+------------------------------------------+--------------+-------+------+
>> # Format your markdown notes into an HTML book, and open it in your browser.
>> ls 'Deep Learning' | printf
+------------------------------------------------------------+--------------+---------+------+
| title | first author | venue | year |
+============================================================================================+
| Tiresias: A GPU Cluster Manager for Distributed Deep | Juncheng Gu | NSDI | 2019 |
| Learning | | | |
|------------------------------------------------------------+--------------+---------+------|
| Nimble: Lightweight and Parallel GPU Task Scheduling for | Woosuk Kwon | NeurIPS | 2020 |
| Deep Learning | | | |
+------------------------------------------------------------+--------------+---------+------+
```

## `printf`

`printf` will create an HTML book from your notes.

![printf](/examples/printf.png)

## Commands

Invoking `reason` will start a new command prompt. It accepts unix-like commands that instead work on research papers in your paperbase.

Works now:
- `ls` filters and prints papers in table format. Default columns are title, first author(by1), venue(at), and year(in).
- `cd` adds an AND filter to the default set of filters (which is empty upon startup).
- `pwd` shows the current default filter set by `cd`.
- `touch` creates a new entry in your paperbase.
- `curl` imports papers from the web, e.g. arXiv or usenix.org. It also downloads paper PDFs if available. Also experimentally supports downloading raw PDF urls and inferring metadata fields.
- `rm` removes entries from your paperbase.
- `set` sets paper attributes, including custom labels that can also be used to give colors to papers in `ls`.
- `printf` creates an HTML page of your notes using `mdbook`.
- `open` opens the paper with your PDF viewer (configurable, defaults to zathura).
- `ed` opens your editor (configurable, defaults to vim), in which you can edit your notes.
- `wc` counts the number of papers.
- `man` plus a command will print documentation for that command.
- `exit` or Ctrl-d quits `reason`.

Not yet, but hopefully soon (Contributions are more than welcome!):
- `grep` returns a list of papers whose notes contain the query string that you specify.
- `sort` sorts papers by given columns.
- `stat` prints the metadata and notes of papers.
- `top` prints out a summary of your paperbase.

## Installation

You can grab binaries from Releases, or you can run `cargo install reason-shell`.

## Cross-Platform Support

`reason` currently supports Linux and MacOS. Windows is excluded because the owner does not currently own a Windows machine.

In order to share data between multiple platforms, users are encouraged to locate `reason` metadata, PDF files, and markdown notes in a location synced by cloud storage services such as Google Drive. I use the official Google Drive app on MacOS and Insync on Linux. This offers an extra benefit - you can read PDFs with your iPad, also synced with the cloud storage.

## Documentation

If you already have reason, run `man man` to view the top-level documentation.

If you're just exploring whether to use reason, take a look at the [`man`](/man) directory.

## Configuration

The configuration file is kept at `~/.config/reason/config.toml`. If not present, `reason` will generate one populated with default settings.

For more information, open `reason` and run `man config`, or read [`man/config.md`](/man/config.md).