Giter Club home page Giter Club logo

switch-library-manager's People

Contributors

giwty avatar mzino 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  avatar  avatar

switch-library-manager's Issues

Issues with v1.30

Currently having issues with it not reading XCI's properly.

In the previous version it read the XCI but couldn't read the DLC properly so said it was missing:
2020-09-25T08:26:32.550+0100 ERROR db/localSwitchFilesDB.go:310 [file:Super Smash Bros Ultimate [01006A800016E800][v1114112].xci] failed to read file [reason: no control.nacp found]

I have numerous issues like this now - in the previous versions these weren't here:
2020-09-25T08:26:24.019+0100 ERROR db/localSwitchFilesDB.go:310 [file:Captain Toad Treasure Tracker [01009BF0072D4800][v65536].xci] failed to read file [reason: no control.nacp found]

This may be related to the error on the website. Previously it was for one title but now it has gone up. All titles work fine:
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[1048576:{{0xc0001388c0 G:\sxos\xci} 0xc0051a4140}] map[] false 1048576}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[196608:{{0xc0001b03f0 G:\sxos\xci} 0xc0001bed40}] map[] false 196608}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[65536:{{0xc00017c2a0 G:\sxos\xci} 0xc000067c40}] map[] false 65536}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[327680:{{0xc00017c3f0 G:\sxos\xci} 0xc0051a48c0}] map[] false 327680}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[65536:{{0xc000139810 G:\sxos\xci} 0xc0001bf040}] map[] false 65536}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[65536:{{0xc000138380 G:\sxos\xci} 0xc00740b340}] map[] false 65536}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[589824:{{0xc000139960 G:\sxos\xci} 0xc0005681c0}] map[] false 589824}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[786432:{{0xc00017cd20 G:\sxos\xci} 0xc010498b00}] map[] false 786432}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[917504:{{0xc000139b90 G:\sxos\xci} 0xc0001bf200}] map[] false 917504}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[524288:{{0xc00017ce00 G:\sxos\xci} 0xc000067d40}] map[] false 524288}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[196608:{{0xc00017c1c0 G:\sxos\xci} 0xc0051a5980}] map[] false 196608}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[393216:{{0xc000139730 G:\sxos\xci} 0xc0051a4240}] map[] false 393216}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[983040:{{0xc00017d420 G:\sxos\xci} 0xc000569580}] map[] false 983040}
2020-09-25T08:26:37.417+0100 INFO process/incompleteTitleProcessor.go:28 !Missing base for game &{{{ } } false map[1114112:{{0xc00017c930 G:\sxos\xci} 0xc000568580}] map[] false 1114112}

Recursive directories scan

Can you please add option for recursive dir scan? Right now you need to have NSP's in one big directory, but if you have each game in a separate dir and you set the scan path to the parent dir - the NSP Update won't find them.

prod.key not being found

I tried adding the prod.keys to the folder the .exe was in, the folder the games were in, a .switch folder in the .exe and games folders but still they wouldn't be found by the app.

Windows version fails on folders with spaces in the name

Startup fails when running from a folder with spaces in the name, like "E:\My Switch Tools\switch-library-manager"

error:
failed to create logger - couldn't open sink "winfile:///E:\My Switch Tools\switch-library-manager.windows\slm.log": open E:: is a directorypanic: 1

goroutine 1 [running]:
main.createLogger(0xc00001caf0, 0x44, 0xc000158700, 0xc0002dc150)
/Users/twig/IdeaProjects/nsp-update/main.go:85 +0x416
main.main()
/Users/twig/IdeaProjects/nsp-update/main.go:43 +0x1aa

Latest release not working on Mac

terminal gets stuck on this part and never launches the app, the previous releases are working perfectly

% /Applications/switch-library-manager.mac/switch-library-manager ; exit;
INFO[0000]astikit: starting worker...
Downloading/Validating electron files .. (can take 1-2min)
INFO[0000]astikit: worker is now waiting...

JavaScript Uncaught Exception on v1.1

I just tried to run the 'exe', it loads but later says "Error: read ECONNRESET at TCP.onStreamRead (internal/stream_base_commons.js:183:27).

Also when I tried to use with "gui = false" it says:
Checking for missing updates
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x73098b]

goroutine 1 [running]:
github.com/giwty/switch-backup-manager/process.ScanForMissingUpdates(0xc005cc8870, 0xc0056d17a0, 0x0)
/Users/twig/IdeaProjects/nsp-update/process/incompleteTitleProcessor.go:29 +0x13b
github.com/giwty/switch-backup-manager/ui.processMissingUpdates(0xc005cf2c70, 0xc000352070)
/Users/twig/IdeaProjects/nsp-update/ui/cmd.go:129 +0x5d
github.com/giwty/switch-backup-manager/ui.ConsoleGUI()
/Users/twig/IdeaProjects/nsp-update/ui/cmd.go:114 +0x910
main.main()
/Users/twig/IdeaProjects/nsp-update/main.go:15 +0x60

Hope you can fix it, it's an incredible and useful program (used to use non-gui version 0.4 and recently discovered this but doesn't run properly).
Thanks for all!

Wrong {TYPE} for XCI

When I try to rename a XCI files, the {type} appears as UPD despite this is the full game.
I try with a valid file (dump is valid according to nswdb.com).

Thanks.

Regards,
Mathieu

Doesn't recognize the update/version (v1.2.0 Windows)

Hey! It's me again.. still wanna thank you for the app and your hard work!

With the latest version the app shows all the games in 0 value for the local version, also seems that it isn't showing 6 games (I have 106).
Tryed to change gui_page_size to 120 but still doesn't work.

Thanks in advance!
Regards

All games updated

when I scan the games it indicates that they are all updated, I have it in nsz format and I know there are new updates for some games.

Option to remove special chars from title name

Hi, I successfully use this app to standard rename my xci/nsp files on mac. There's an annoying issue tough. FS service on the switch doesn't recognize all utf-8 special characters like the littles tm, r, c logos in filenames and refuse to show the files with them in, so we have to manually remove them from file name every time we need to transfer files to the switch. Would be nice to have a flag that when enabled skips, remove or remap them to standard characters during library organization.

VERSION_TXT does not work as expected on DLC

{VERSION_TXT} does not work as expected on DLC. DLC {VERSION_TXT} is always the same as {VERSION_TXT} for the game update (or base if no update) regardless of DLC {VERSION}. It would be nice to suppress {VERSION_TXT} on base game and dlc. I like it for game updates only.

ERROR nsp-update/gui.go:273 unexpected EOF

slm.log

ERROR nsp-update/gui.go:273 unexpected EOF

also

error: read ecconnreset at tcp.onstreamread (internal/stream_base_commons.js:183:27)

have title and prod files from incognito 1.8.4 in my SLM folder.
log scans 2 files as you can see, there is only those 2 files but once i scan it throws the econnreset error at me and shows nothing in the gui, i reset the program and it needs me to point out the folder where i store the files again, ie deletes the settings i made to point the program to the folder to scan.

great concept but unfortunately its a useless program to me as it doesnt do anything atm, but im excited to see these bugs ironed out and to use this program, if it could scan the switch's memory card to inform of what updates are needed would be an amazing feature too. i thank you for putting the time into this program as it will be very handy to use once the bugs are ironed out.

XCI/XCZ support

Hi there mate,
Nice program you have here!

My only wish is that you add XCI/XCZ support for it to be perfect.

Split Files

When using the organize button

  • The split file should not be renamed (it needs to keep 00, 01). Those files need to be in a separate folder (The folder can be renamed no problem. This is to make it recognizable by the switch.
  • It would be nice if the folder attribute could be changed to be ready to archive (this allows the switch to see the folder as a single file in order to install).
  • Only the 00 file is currently getting copied over (and renamed). The other files stay in the 'old' folder.

Feature Request - Mode to list missing games in library?

If it's too much work, don't worry about it as it's likely a very niche use case, but could an option be added to print to console or log to a file the games that are not present in the library or if they need updates/dlc?
As I have stated before I'm working on archiving the switch library and this would be very useful as I get closer to having most of the games archived

Downloading/validating electron files...

Every time I launch this app it gets stuck doing this, I have to close and reopen it for it to work. Waiting does nothing :(

Next launch tells me folder is not set and prod keys is missing. Finally the third launch it works just fine.

Tinfoil title database is encrypted

Exactly what the title says, not sure if its temporary or not, but it seems as if the database offered by tinfoil is encrypted, causing the program to error out after not finding what it expects in the file

Version info renaming

Can you add another box for version number so that files can be renamed like
"{TITLE_NAME} [{DLC_NAME}][{TITLE_ID}][v{VERSION}][{VER_NUMBER}]"
A Hat in Time [010056E00853A800][v262144][1.0.4]

Also, is it possible to pull {VERSION} for DLC?
A Hat in Time [Nyakuza Metro][010056E00853B002][v65536]

DLC version?

Is it supposed to ignore DLC updates? I know I have some outdated DLCs but it only shows missing DLC.

Renaming Bug?

  1. DLC pack 1 has space between Zelda and Breath but the space is missing in DLC pack 2.

The Legend of Zelda Breath of the Wild [The Legend of Zelda Breath of the Wild DLC Pack 1][01007EF00011F001][v196608][1.6.0].nsp

The Legend of Zelda Breath of the Wild [The Legend of ZeldaBreath of the Wild DLC Pack 2][01007EF00011F001][v196608][1.6.0].nsp

I guess this is Nintendo's fault.The titles.json has
"name": "The Legend of Zelda: \nBreath of the Wild DLC Pack 1",
"name": "The Legend of Zelda:\nBreath of the Wild DLC Pack 2",

  1. Not sure if this is a windows issue or bug.
    CAPS/No caps may or may not rename in all caps/no caps based off the original filename (if all characters match besides capitalization):

so I end up with this after organization:

Super Mario Odyssey [0100000000010000][v0][1.0.0].nsp
SUPER MARIO ODYSSEY [0100000000010800][v262144][1.3.0].nsp

Changing the filename title name then running organization again fixed the problem.

You could work around this issue by first renaming all existing files by {TITLE_ID}{VERSION} then by file_name_template in settings.json. If folders already exist for games not created by your program you could also run into this problem with folders.

GUI does not work in latest release

with previous settings file, brings up console, downloads lists, and then exits
without previous settings file, provisions files and then sits on a white screen

'2020/07/03 18:38:42 astikit: starting worker...
2020/07/03 18:38:42 Starting...
2020/07/03 18:38:42 Provisioning...
2020/07/03 18:38:42 Astilectron has already been provisioned to version 0.39.0, moving on...
2020/07/03 18:38:42 Electron has already been provisioned to version 7.1.10, moving on...
2020/07/03 18:38:42 Listening...
2020/07/03 18:38:42 Executing...
2020/07/03 18:38:42 Starting cmd C:\Users\AppData\Roaming\Switch Library Manager\vendor\electron-windows-amd64\electron.exe C:\Users\AppData\Roaming\Switch Library Manager\vendor\astilectron\main.js 127.0.0.1:11422 false
2020/07/03 18:38:42 Stdout says:
2020/07/03 18:38:42 Astilectron says: {"name":"app.event.ready","targetID":"app","displays":{"all":[{"id":2528732444,"bounds":{"x":0,"y":0,"width":1920,"height":1080},"workArea":{"x":0,"y":0,"width":1920,"height":1040},"accelerometerSupport":"unknown","monochrome":false,"colorDepth":24,"colorSpace":"{primaries:BT709, transfer:IEC61966_2_1, matrix:RGB, range:FULL}","depthPerComponent":8,"size":{"width":1920,"height":1080},"workAreaSize":{"width":1920,"height":1040},"scaleFactor":1,"rotation":0,"internal":false,"touchSupport":"unknown"},{"id":2779098405,"bounds":{"x":1920,"y":27,"width":1680,"height":1050},"workArea":{"x":1920,"y":27,"width":1680,"height":1010},"accelerometerSupport":"unknown","monochrome":false,"colorDepth":24,"colorSpace":"{primaries:BT709, transfer:IEC61966_2_1, matrix:RGB, range:FULL}","depthPerComponent":8,"size":{"width":1680,"height":1050},"workAreaSize":{"width":1680,"height":1010},"scaleFactor":1,"rotation":0,"internal":false,"touchSupport":"unknown"}],"primary":{"id":2528732444,"bounds":{"x":0,"y":0,"width":1920,"height":1080},"workArea":{"x":0,"y":0,"width":1920,"height":1040},"accelerometerSupport":"unknown","monochrome":false,"colorDepth":24,"colorSpace":"{primaries:BT709, transfer:IEC61966_2_1, matrix:RGB, range:FULL}","depthPerComponent":8,"size":{"width":1920,"height":1080},"workAreaSize":{"width":1920,"height":1040},"scaleFactor":1,"rotation":0,"internal":false,"touchSupport":"unknown"}},"supported":{"notification":true}}
2020/07/03 18:38:42 Sending to Astilectron: {"name":"window.cmd.create","targetID":"1","sessionId":"2","url":"w:\Console Files\Switch\nsp-update\web\app.html","windowOptions":{"center":true,"height":700,"title":"Switch Library Manager","width":700}}
2020/07/03 18:38:42 Astilectron says: {"name":"window.event.focus","targetID":"1"}
2020/07/03 18:38:43 Astilectron says: {"name":"window.event.did.finish.load","targetID":"1"}
2020/07/03 18:38:43 astikit: worker is now waiting...
2020/07/03 18:38:43 Astilectron says: {"name":"window.event.blur","targetID":"1"}'

Renaming files for compatibility with the Switch filesystem (Part 2)

The last issue was closed by @giwty Since I can't reopen it and you may have missed my reply I'm opening this one.

Although Japanese was taken care of part of the issue was unicode characters which have the same problem.

Additionally for people who do not want or need to transliterate or remove/convert unicode characters because they do not use any files locally on the Switch, I believe you should have these rename features as a switch in the json.

Some game names are either not or misdetected

I have 3 game examples where the game name is either not detected, which leaves a folder name with just the titleid like "[0100E000089F2000]" for "Portal Knights (En,Fr,De,Es,It,Por,Ru,Kor) [0100E000089F2000] [v0]", or misdetected, , in which case it just leaves whatever it could detect, like "4 [010009400DD38000]" for "Rune Factory 4 Special (Kor) [010009400DD38000] [v0] (1G+1D)"

Renaming files for compatibility with the Switch filesystem

As part of the renaming process would it be possible to add support for renaming folders and files to be compatible with the Switch filesystem? It seems that it can't deal with unicode and Japanese characters and so on that are in many title names, if they are used locally on the Switch, on the SD card for example, then homebrew cannot deal with or see them. There are other storage methods that have issues with these characters too. Maybe a filter to change to characters and perhaps convert Japanese to Romaji.

Here is something of an explanation of the issue: switchbrew/libnx#90 (comment)

v1.35 Recommendations / Issues

Hi

Don't mean to bombard you but I figure if I report them then you, at least, know. Nothing major at all so far.

  • Issue with setting the folder - it appears on the Update tab but not any other tab - might be nice to have an option where you can add multiple folders and it scans them. I know you can edit the json but this would be easier.

  • Perhaps something I'm missing but on the rename it seems to be v0 for everything - this is not the case. It also doesn't let me know about DLC installed (i.e. I'd expect something like:

Super Smash Brothers Ultimate (+1U +64DLC) v1114112 or something like that. The 1U would be the 1 update deployed and the 64DLC would be the 64 DLC files installed. I'm not sure if this is possible but other tools do this but then I started using yours to rename so it would be nice to have it in one place. It may be that I'm just missing something.

Thanks for your work on this.

Add game regions

Can game regions be added? I want to know if a game is available on other regions (USA, EUR, etc) or if it's the same for USA, EUR, etc ? Sometimes they have different versions of the same game.

macOS < 10.14 support

I'm running macOs 10.13.6 as my iMac mid 2011 only supports macOS High Sierra. Is it possible to make this app compatible with previous versions ? I'm getting a message that I can't run it because of my macOS version.

Possible to support multicontent nsp?

Would it be possible to add support for multicontent nsp files? I assume it would take extracting the titleids from the file itself since the file would have more than one title id at that point

Settings.json

Changing "scan_recursively": true, to "scan_recursively": false, makes it seem like the current game directory is empty when its not.

different folders

Would be great if we could add different folders, even if they are on different hard disks, at the same time for the app to scan.
One might have games on drive A and updates on drive B so having the ability to add both folders or even more would do the trick.

Program looks weird in Windows 10 Terminal Beta

Program looks amazing in PowerShell and Command Prompt, but if you use the Terminal Beta that Microsoft have been testing to eventually replace the other two, the program ends up looking really weird. Either something to do with the way you handle coloring the background or the padding goes haywire and the program just ends up a jumbled mess. Can supply screenshots if needed

Old update files are not deleted

Hi,

First I'd like to thank you for providing this great app.

I would like to report a bug. The feature to delete old update files is not working for me.
I have "delete_old_update_files": true in the configuration file, old update files are detected and listed in the Issues tab, but they aren't deleted. I've been manually deleting them, based on the list in Issues tab.

I'm running the macOS GUI version on macOS Catalina (10.15.7).

I suspected this may be a permissions problem. In fact, in order for Switch Library Manager to run at all, I had to put it in the Applications folder. I doesn't launch at all from the Downloads folder.

Thanks again.

"Interrupted system call" when scanning files.

SLM will scan all of my files. Most of them it will successfully read. Some of them it will not.

My environment: Ubuntu Linux 20.04. I'm scanning files on a mounted drive.

Checking the debug log, a successful read looks like this:

2020-09-30T09:54:37.043-0700	DEBUG	nsp-update/gui.go:386	process process:BOXBOY plus BOXGIRL [010018300D006000][v0].nsp (55/220)

And a failed read looks like this:

2020-09-30T09:54:37.043-0700	DEBUG	nsp-update/gui.go:386	process process:Baba Is You [01002CD00A51C000][v0].nsp (56/220)
2020-09-30T09:54:37.059-0700	ERROR	db/localSwitchFilesDB.go:325	[file:Baba Is You [01002CD00A51C000][v0].nsp] failed to read NSP [reason: open /mnt/roms/Nintendo Switch/nsp/base/Baba Is You [01002CD00A51C000][v0].nsp: interrupted system call]

github.com/giwty/switch-library-manager/db.(*LocalSwitchDBManager).getGameMetadata
	/Users/twig/IdeaProjects/nsp-update/db/localSwitchFilesDB.go:325
github.com/giwty/switch-library-manager/db.(*LocalSwitchDBManager).processLocalFiles
	/Users/twig/IdeaProjects/nsp-update/db/localSwitchFilesDB.go:195
github.com/giwty/switch-library-manager/db.(*LocalSwitchDBManager).CreateLocalSwitchFilesDB
	/Users/twig/IdeaProjects/nsp-update/db/localSwitchFilesDB.go:112
main.(*GUI).buildLocalDB
	/Users/twig/IdeaProjects/nsp-update/gui.go:371
main.(*GUI).handleMessage
	/Users/twig/IdeaProjects/nsp-update/gui.go:198
github.com/asticode/go-astilectron.(*Window).OnMessage.func1.1
	/Users/twig/go/pkg/mod/github.com/asticode/[email protected]/window.go:431
github.com/asticode/go-astilectron.(*dispatcher).dispatch.func1
	/Users/twig/go/pkg/mod/github.com/asticode/[email protected]/dispatcher.go:62

Suggestion is to have the app retry when a read fails for any reason.

Can't retrieve package for building

go get -u github.com/giwty/switch-library-manager

cannot find package "github.com/schollz/progressbar/v2" in any of:
c:\go\src\github.com\schollz\progressbar\v2 (from $GOROOT)

NSZ support

Is it possible to add support for the NSZ files?

Some files failing to be sorted into folders correctly

Having a issue where some files will be seemingly ignored by the program, only leaving this in the logs. Seems the program is trying to access the file incorrectly, for some reason it's prepending the non-romanji name of a file as a folder before using the correct name.

image

Rescan Button

When I am updating some of the files I have to close and re-open the program before it detects changes.

A rescan button would make it much easier. Also, on launch, it doesn't do a proper rescan sometimes.

Console version removed?

Are the console commands no longer a thing? I use the program from PowerShell, and now instead of getting any output to the console I just get immediately returned with the output happening in the background, with no output on the console

Add new game revisions

Is it possible to add a new TAB that lists new base game revisions available on the market ? Example:

Super_Mario_Odyssey_v001_NSW-JRP > this is rev001 of the cartridge. rev000 is Super.Mario.Odyssey.NSW-BigBlueBox
The.Legend.of.Zelda.Breath.of.the.Wild.v002.NSW-BigBlueBox > this is rev002 (1.5.0)

edit: would also like to know the selected few games that have physical (cartridge) releases vs eShop releases which can have different revisions as well.

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.