Giter Club home page Giter Club logo

vscode-journal's Introduction

GitHub Visual Studio Marketplace Version Visual Studio Marketplace Installs Visual Studio Marketplace Rating Visual Studio Marketplace Last Updated

drawing

vscode-journal

Lightweight Extension for Visual Studio Code to take track of your daily notes.

What is this extension about?

This extension is useful for people like me, who use simple text files for notes, task lists, and everything else which has to be remembered and searched for. Text (or Markdown) in files is easy to backup, sync and can be opened anywhere by everything. This extension has the following functions:

Features

Press Ctrl+Shift+J to open the journal's smart input and start typing right away. Press F1 or Ctrl+Shift+P to access one of the commands. All supported commands are described here.

The notes are stored in a folder on your desktop using the following structure (taking ZIM Desktop wiki as inspiration: year/month/day.md, the notes files for October 22th would be ../2016/10/22.md. Detailed notes (e.g. meeting notes) are placed in the subfolder ../2016/10/22/some-meeting-notes.md.

Contributing

I am always looking for feedback, new ideas and your help. Check the contribution guidelines

Suggested extensions

vscode-journal is mainly responsible for organizing your notes and journal entries, it does not come with any user interface (besides the smart input). If you prefer tree like views for your notes and tasks, have a look at the following extensions by Gruntfuggly and Kortina

Settings

Settings are described in detail here

You have to set the base folder for notes folder structure before you start. Open your settings, search for 'journal' and copy the journal.base line into your personal settings. Adjust the value, for example: "journal.base": "C:/Users/FooBar/Documents/Journal" (use forward slash!)

The default file format is Markdown (using md as extension), which is natively supported by Visual Studio Code. I use Asciidoc for my notes (with .adoc as extension), in this case you should also install an Asciidoc Syntax extension.

Syntax highlighting is configured in your workspace settings. The options are stored automatically in the settings, you can then manually change them. Make sure to restart to apply the changes. The settings try to recognize if a dark or light theme is used. If you switch in between, you either have to delete the settings (to reload them from the extension) or adapt them for yourself.

Demo

Screen Capture

vscode-journal's People

Contributors

cstuder avatar dependabot[bot] avatar fpopineau avatar ianmurrays avatar mikutas avatar pajoma avatar qbikez avatar squeuei avatar steventcramer avatar tiljeset avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vscode-journal's Issues

[Question/Possibly Bug] Templates not working

I want to have the memo saved as following format, which is basically with the time the memo was created:
MEMO 2:55 PM : This is wonderful memo

So, as per my understanding this is where the Templates come into play. So, I followed following steps to setup my template for the Memo. But, the result I received was not what I was expecting.

Steps

  1. Open user settings for the vscode.
  2. Update the Journal: Tpl-memo setting value to - MEMO ${localTime}: ${input}.
  3. Restart the vscode.
  4. Using Ctrl+Shit+J command, enter This is a wonderful memo.
  5. Vscode opens the corresponding md file with the memo entered as MEMO ${localTime}: This is a wonderful memo.

Expectation (with the time when the memo was added)

MEMO 3:55 PM : This is wonderful memo

Result

MEMO ${localTime}: This is a wonderful memo

Am I missing any step here?

"journal.base" should work cross-platform

I would love to see support for:

  • journal.base.windows
  • journal.base.osx
  • journal.base.linux

The advantage of adding cross-platform path support hopefully comes with a secondary benefit of allowing the use of environment variables. The reason I thought of this is is that "journal.base": "%USERPROFILE%/Documents/Journal" failed to resolve correctly on Windows.

duplicate items in the JOURNAL outline

Hi, I really like this handy extension. Today I find a problem that some diaris are listed in the JOURNAL outline twice, shown inside the yellow rectangle of the picture below.

Thanks for your time!

image

Declaring a new "journal.base" has no effect

After installing, notes are stored in ~/Journal by default. I put the following line in my vscode user settings:

"journal.base": "/Users/llamicron/.journal"

and notes are still stored in ~/Journal. There's no syntax error in my settings.json. Am i doing something wrong or is there a bug here?

Copy open tasks to new daily page

When opening a new daily page, open tasks from the previous day (with a page) should be copied (and removed from the previous day).

New configuration options:

// Enable feature "copying open tasks from previous day"
"journal.tasks-copy": "true"

// Should not completed tasks from previous days be deleted 
"journal.tasks-delete-orphaned": "true"

Request: Configurable filename and path options

I love this extension.

Very simple, easy to use, and I love that everything saves as a text file and I can configure the file extension.

The only thing I wish I could change is:

  • the filename ( to full date for example YYYY_MM_DD)
  • and change the path to a single path rather than nested in folders.

I use Nvalt for notes and it would be nice to keep everything in one flat folder so if I'm not in VS Code I can pull up the file from the Nvalt folder, and in Notesy on my phone. Nvalt doesn't look in nested folders.

If I get some time I might try to code it myself but I'm still a novice so I'm not sure if I can do it.

So... if it's something really easy to do, feel free to just pop in that feature for me :)

Compatibility with 1.9.x

  • Opening a journal page shows Error Message when no editor is opened
  • Error Message "Failed to translate.." appears every time (also for notes)

Garbling in edited templates with locale setting

Info

  • Windows 7 Pro 64 bits
  • VSCode 1.25.1
  • Journal 0.7.0

Issue Details

Even though user locale is set, the extension always recognizes 'en-US' locale.
Therefore, if using edited template which depends on particular locale setting, garbling occurs.

Expected Behavior

(Getting locale normally, and)
No garbling occurs.

Custom Settings

    "journal.locale": "ja-JP",
    "journal.tpl-entry": "# dddd, MMMM Do YYYY[年]\n\n",

Kanji needs ja-JP locale setting.

Browse through previous notes

One thing I miss is browsing my previous notes through VSCode, rather than finding them on the disc.

Not sure how to implement this for now. There is an extension point to show a selection as list. But this isn't really an option to browse through a calendar.

Possible solutions:

  1. new command "journal:browse" which opens a new vscode instance with the journal as workspace.
  2. Content Provider which renders the current journal in a text document. The individual entries are linked

Second option could be useful to display days with open tasks (see issue #3)

Create a link to today's notes folder in favorites

Navigating to today's notes folder is to cumbersome. A folder in the user's default documents folder called Today's Notes always links to the current day. The link is updated (or checked) whenever vscode with active extension is started.

Open problem: When a file is moved into the Today's note which has not yet been updated, it will be saved in the old location (probably the notes folder of the previous day). We could circumvent this by checking the creation date of the previous notes folder, and move the files if of current day.

New Note dialog does nothing

Hello,

I just installed your extension and I really like the concept. I just noticed a bug. When I hit ctrl+shift+j and press create/select note, I get this exception (actually 2 exceptions)

mainThreadExtensionService.ts:65 [[object Object]]Cannot read property 'replace' of undefined
$onExtensionRuntimeError | @ | mainThreadExtensionService.ts:65
-- | -- | --
   | _doInvokeHandler | @ | rpcProtocol.ts:398
   | _invokeHandler | @ | rpcProtocol.ts:383
   | _receiveRequest | @ | rpcProtocol.ts:299
   | _receiveOneMessage | @ | rpcProtocol.ts:226
   | (anonymous) | @ | rpcProtocol.ts:101
   | fire | @ | event.ts:582
   | fire | @ | ipc.net.ts:453
   | _receiveMessage | @ | ipc.net.ts:733
   | (anonymous) | @ | ipc.net.ts:592
   | fire | @ | event.ts:582
   | acceptChunk | @ | ipc.net.ts:239
   | (anonymous) | @ | ipc.net.ts:200
   | t | @ | ipc.net.ts:28
   | emit | @ | events.js:200
   | addChunk | @ | _stream_readable.js:294
   | readableAddChunk | @ | _stream_readable.js:275
   | Readable.push | @ | _stream_readable.js:210
   | onStreamRead | @ | internal/stream_base_commons.js:166
mainThreadExtensionService.ts:66 TypeError: Cannot read property 'replace' of undefined
	at c:\Users\niid\.vscode\extensions\pajoma.vscode-journal-0.10.0\out\src\ext\vscode.js:172:48
	at _fulfilled (c:\Users\niid\.vscode\extensions\pajoma.vscode-journal-0.10.0\node_modules\q\q.js:854:54)
	at c:\Users\niid\.vscode\extensions\pajoma.vscode-journal-0.10.0\node_modules\q\q.js:883:30
	at Promise.promise.promiseDispatch (c:\Users\niid\.vscode\extensions\pajoma.vscode-journal-0.10.0\node_modules\q\q.js:816:13)
	at c:\Users\niid\.vscode\extensions\pajoma.vscode-journal-0.10.0\node_modules\q\q.js:624:44
	at runSingle (c:\Users\niid\.vscode\extensions\pajoma.vscode-journal-0.10.0\node_modules\q\q.js:137:13)
	at flush (c:\Users\niid\.vscode\extensions\pajoma.vscode-journal-0.10.0\node_modules\q\q.js:125:13)
	at processTicksAndRejections (internal/process/task_queues.js:82:9)
$onExtensionRuntimeError | @ | mainThreadExtensionService.ts:66
-- | -- | --
  | _doInvokeHandler | @ | rpcProtocol.ts:398
  | _invokeHandler | @ | rpcProtocol.ts:383
  | _receiveRequest | @ | rpcProtocol.ts:299
  | _receiveOneMessage | @ | rpcProtocol.ts:226
  | (anonymous) | @ | rpcProtocol.ts:101
  | fire | @ | event.ts:582
  | fire | @ | ipc.net.ts:453
  | _receiveMessage | @ | ipc.net.ts:733
  | (anonymous) | @ | ipc.net.ts:592
  | fire | @ | event.ts:582
  | acceptChunk | @ | ipc.net.ts:239
  | (anonymous) | @ | ipc.net.ts:200
  | t | @ | ipc.net.ts:28
  | emit | @ | events.js:200
  | addChunk | @ | _stream_readable.js:294
  | readableAddChunk | @ | _stream_readable.js:275
  | Readable.push | @ | _stream_readable.js:210
  | onStreamRead | @ | internal/stream_base_commons.js:166

Also the dialogbox that comes after does nothing and I cannot press enter etc.

plugin overrides `CMD+J` key binding

With this extension installed, I have no access to CMD+J as a keybinding. This is VSCode's default binding for toggling the panel.
With this extension installed, CMD+J starts a chord sequence and waits for the next chord, rather than toggling VSCode's panel.

image

This was hard to track down since the binding does not appear in the Keyboard Shortcuts screen:
image

As a workaround for now, I've added the following to keybindings.json:

  {
    "key": "cmd+j",
    "command": "workbench.action.togglePanel"
  },

journal:note inserts memo instead of new md file

screen shot 2018-08-02 at 5 58 40 pm

No matter how I seem to type in journal:note, it always inserts a memo instead of a new markdown file. I also don't see an auto-complete option like in the .gif.

MacOS 10.13.6
VS Code 1.25.1
vscode-journal 0.9.0
vscode-journal-view 0.0.14

Add notes that are not bound to a specific day

Right now you can add notes for a specific day/date (ie. for today) only.

I would like to collect and maintain notes without any day/date dependency within vscode-journal. Also some kind of organization/hierarchy/tagging of those notes would be helpful.

a few suggestions/issues

  • Have you thought about maybe flattening the structure? As is I see this being useful if you need to do daily break downs, or bullet journal type stuff, but if you don't need that level of detail, it is hard to use. I am seeking an orgmode replacement. If I know I made a note somewhere, how can I easily get to it?
  • have you thought about adding in your own language syntax? this would be useful if you want to give task/MEMO unique looks
  • I get "Journal input not recognized" when making a memo, even the sample you have in the readme

Critical override of user styles

After installing the plugin, I lost all of my user defined color theme override styles. This happened at editor.tokenColorCustomizations { textMateRules: [] }.

Really annoying to get this. Please fix for the sake of others.

Exception while opening document

Check

rejected promise not handled within 1 second: TypeError [ERR_INVALID_ARG_TYPE]: The "value" argument must not be of type number. Received type number
extensionHostProcess.js:749
stack trace: TypeError [ERR_INVALID_ARG_TYPE]: The "value" argument must not be of type number. Received type number
	at Function.from (buffer.js:215:11)
	at Function.fromString (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:6:682)
	at l.append (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:538:279)
	at l.append (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:651:780)
	at define.createOutputChannel.append.t.then.t (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:539:849)

while opening a journal page. Why is the error not handled (code seems like it)

Link notes in journal pages

After creating a notes file e.g. in the subfolder 14, a link should be included in 14.md (the journal page).

Supported formats are - link:14\NotesFromThisMeeting.adoc[Notes from this meeting] (AsciiDoc) and * [Notes from this meeting](./14/NotesFromThisMeeting.md) (Common Mark)

Problem: Both the asciidoc extensions and the built-in markdown support of vscode don't support following links. But maybe in the future.

Turn "open in new editor group" mode on/off

Initial state: in my VSCode I have one or more open editors, all in one editor_group (editors area is not splitted)

Action: I run command like journal: Today (this specific command is example)

Result: today_journal_page is open in new editor_group (now my editors area is splitted vertically)

What I suggest is to have setting_item like journal.openInNewEditorGroup: boolean,
so user can specify false to open journal_day in a new tab in the same editor_group.

How to contribute

Hi All,

For the past few months I have been taking notes by manually creating files, and switched over to VSCode a few weeks back and just found this extension. I wanted to see if there's anything I can do to help out?

Feel free to immediately close this issue, I just want to figure out how to touch base :)

Can't use the extension

I've installed the extension and configured in the settings the "journal.base" to this "/Users/eduardo/Dropbox/journal". When I try to use for example the following:

journal:today

I get a VS error that says:

Running the contributed command:'journal.today' failed.

Same thing if I try with journal:tomorrow or journal:yesterday.

Also if I press Cmd+Shift+J and then type 0, +1, -1, monday, anything, then nothing happens, same thing with Quick Memo. Actually the only two commands that work are: journal: Notes (which creates a new note and when I save it, it appears in the folder) and journal: Open the Journal (which perfectly opens the journal folder I've configured)

I've checked folder permissions but doesn 't seems to be the problem. I'm using MacOs El Capitan, VSC Version 1.8.1 (1.8.1), and the extension version is 0.4.0 (The only one that vs downloads)

Perhaps is something I'm missing or that I haven't configured, maybe with the VS. I'd really love to use the extension since I was using something similar with Vim and I'm really used to it. Thanks in advance.

Template in new Settings UI

I just filed a bug report with the VS Code team, but I think you should probably add some verbiage to your setting for the template string (tpl-entry) to alert the user that they need to use settings.json to directly edit the template string, because they will escape the \n characters which is pretty important to a good template string.

Tracking 0.5.0

  • Improve startup times by lazy loading controller
  • Add notes reference after creating a new note
  • Edit Changelog
  • Separate Wikipage for configuration options
  • Pull open tasks of previous day by synchronizing (make that a feature to enable in config)

Notes command not creating local links

Info

Mac OS X 10.13.4
Visual Studio Code 1.23.1
Journal 0.6.0

Issue details

Journal: Notes command does not create local link

Steps

  1. Cmd-Shift-P
  2. Select the Journal: Notes command
  3. Enter a note name in the field and press enter

Expected behavior

  1. New note file is created in $year/$month/$day path with name provided in step 3 above
  2. Local link to new note is placed in today's journal page

Observed behavior

  1. New note file is created
  2. No local link is created

Custom settings

{
    "journal.tpl-entry": "# [Journal Entry for] dddd, MMMM Do YYYY[\n\n## Tasks\n\n## Notes\n]",
    "journal.tpl-task-after": "## Tasks",
    "journal.tpl-todo-after": "## Tasks",
    "journal.tpl-note": "# ${input}\n",
    "journal.tpl-files-after": "## Notes",
    "journal.tpl-memo-after": "## Notes"
}

I have also removed all of the custom settings, closed and relaunched VSCode, and tried again, with the same results.

Use a Webview to show weekly or a monthly views

When entering an input for opening a journal page, a pick list could show all already existing journal pages (e.g. last 10 and next 5 days). Next to each entry, the number of (open) tasks and attached notes is added.

Example: (today is 11-24)

_______________________________________________
|  Enter day or memo (with flags), or pick one  |
-----------------------------------------------
11-17 (Thursday) 0/3 Tasks, 2 Notes 
11-18 (Friday) 1/2 Tasks
11-21 (Monday) 5/8 Tasks, 4 Notes
11-22  (Tuesday) 2/2 Tasks, 1 Note
11-23 (Wednesday) 1/1 Task
> 11-24 (Thursday) 
11-25  (Friday) 
11-28 (Mondy) 
---------------------------------------------

Create new un-scoped notes.

How can I create a note that would reside in root folder ?

Whenever I create a new note, it is created within the folder hierarchy of current day. Can't I create a note in root folder without scoping it by the date of creation ?

4 suggestions

Hi,

Thank you for your time. I have used this extension for two months, and here are my 4 suggestions:

  1. when I open a new diary, the cursor will be located in the beginning of the document, followed with the title. However, we always start our writing from the end of the document.

image

  1. support quick notes like vscode-memo_quicknote

quicknote

  1. command to list all the diaries and notes for every week, month, and year, I think a dynamically upgraded index file may work.

  2. support the setting option of excluded folder for note file monitor, since I always create image folder, and would rather they not displayed in the diary file like the below

  • NOTE: [(image) ](./23/image)

hope you can consider these

best wishes

Titel of document contains additional whitespace

When a new document gets created, the title contains one trailing space, see attached screenshot. (the red color if from another extension that shows whitespace, just in case you wonder)

vscode-journal

Same problem for journal:note with a custom title.

Error opening/creating journal files over remote connection

If a remote development method is used (ssh in this case), new journal file creation gives an error, but apparently succeeds as subsequent access to file location works fine.

Repro:

  • Open remote development connection to any Linux server over ssh with vscode-journal extension installed
  • Ctrl+Shift+J -> Today

If file does not already exist, following error is logged:

[09:58:07.054] [ERROR] 
[09:58:07.059] [ERROR] Failed to process input. See Exception below.
Error: cannot open vscode-remote://ssh-remote%2Bhost/path/to/Journal/2019/10/24.md. Detail: Unable to read file (Error: File not found (vscode-remote://ssh-remote+host/path/to/Journal/2019/10/24.md))
    at n.then.e (file:///usr/share/code/resources/app/out/vs/workbench/workbench.desktop.main.js:4707:361)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Entering memo "default is today"

The memo crashes the extensions process and causes a high load, probably an issue with the regular expression finding the time modifier in the memo text

External configuration files for templates and patterns

As preparation for the scopes support and configurable filenames, we need to have dynamic settings available. Templates for notes and journal entries within the vscode settings is not very efficient.

Templates should be configured in their own files (with .md as extension), which are used when creating a new file. Scopes, inline templates (memos, notes, and tasks) and patterns (paths and filenames for journal entries and notes) are in their JSON configs.

The location of the config files should be within the journal workspace (under ".vscode") to have them synced (not in the user's profile directory).

Enhancing memo command

Command journal:memo opens an input box. The following keywords should be supported

  • foobar: Inserts - foobar into today's journal page
  • next wed foobar: Inserts - foobar into journal page for next wednesday
  • next wed task foobar: Inserts - [ ] foobar into journal page for next wednesday (order shouldn't matter)
  • task +1 foobar: Inserts - [ ] foobar into journal page for tomorrow

Support Scopes

See issue #18 for discussion to this point.

I thought about some sort of scoping (in the sense of free tagging), but I am still not sure how to approach this. My notes typically follow this structure

# Tuesday, June 13th 
* Some memo for project b

*Tasks*
 [ ] Some task in project a

## Some meeting notes of project a
...

One idea would be to tag the various structures (headings, memos, todos) if it belongs to a project, e.g. ## Some meeting notes of !ProjectA!. Special view pages could then aggregate all notes marked with the same tag. I am still not sure which notation to use (# is already used for headers, @ typically denotes mentioning), but maybe this approach is nonsense anyways.

Command to open specific day

Command: journal:day

Opens dialog box with following supported entries:

  • -2 or +4 (offset), opens the day before yesterday or in four days
  • last monday
  • 10-24, opens a specific day, inputs are 1 (first of this month), 9-1 (first of september), 2015-8-1

Show recent notes

Similar approach as in #7, show a picklist with recent notes or create a new note. And use shortcut alt+shift+n to access this input.

vscode-journal overriding theme syntax highlighting

Info

  • vscode 1.28.2
  • vscode-journal 0.9.1
  • Windows 10 64bit

Details

I'm experiencing some odd changes in syntax highlighting when vscode-journal is enabled, especially with checkbox lists. Most hyphens (not all) become yellow and and incomplete checkboxe brackets are yellow. This makes them very difficult to see when using a light colored theme.

These changes persist regardless of what theme I am using. Examples below.

Normal syntax highlighting

syntax-vscode-journal

Syntax highlighting with vscode-journal

syntax-normal

Command 'journal.memo' not found At the every FIRST time of VS Code opening session.

Info

Windows OS 10 Pro 64 bits
VS Code 1.24.1
Journal v 0.6.0

Issue Details

Journal: Quick Memo always throws exception and VS Code notify with message Command 'journal.memo' not found every first time I open VS Code, and then when I call command again, command will work properly by asking me to name a note.

Steps

  1. Press F1 button
  2. type memo, then find the Journal: Quick Memo and then press Enter
  3. Boom, nothing happen, and notify balloon pop out with message Command 'journal.memo' not found

Expected Behavior

  • Command will ask me to name a note at first time.

Custom Settings

  • "journal.base": "C:/ext/Natta/.vscode/journal",

Enable moment.js formatting in memo template

I'd like my memos to start with a timestamp rather 'MEMO'. I've tried a few approaches, but it doesn't currently seem possible to use date/time formats in the memo template.

Logo Proporsal

Hey, I'm graphic designer and my aim is supporting open source projects and make my portfolio better. So, I can contribute on your project with making logo design. I am waiting your feedback! Have a nice day! :)

Best Regards,
TJ Ulises
Visual Communication Designer

Some issues with file references

  • Temporary files from MS Office are a bit annoying, filter out everything which starts with "." or "~$"
  • Remove files which are have been removed from the notes folder

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.