This is an adaptation of the original version making it suitable to work with web-extensions and e10s.
Homepage is now on github pages: Form History Control
The blog is still maintained: https://formhistory.blogspot.com/
A browser Add-On to View and Manage form history entries (adaptation of v1 for web-extension and e10s)
Home Page: https://stephanmahieu.github.io/fhc-home
License: MIT License
This is an adaptation of the original version making it suitable to work with web-extensions and e10s.
Homepage is now on github pages: Form History Control
The blog is still maintained: https://formhistory.blogspot.com/
Continued from my EDIT in "Not seeing cleanup option" issue #27, which you may not have seen:
Not seeing how to blacklist a field. Don't want text saved. Have entered both "message" and "textarea" in the Field Filter blacklist, and hit Apply, but neither removes saved item.
Thanks in advance for help or instructions to get this working.
Please see
The
Show Fields on the Current Page
menu item perhaps should change into
✓ Show Fields on the Current Page
or
Hide Fields on the Current Page
when activated.
Only I have why the field have diverged on different lines. If you can fix it. What would the search and "how many records to show" were on the same line. And in large and in small dialogue.
And still request not pull with merger. I am annoyed with temporary repositories and I will delete them sooner or later, whether they are used or not.
#59 (comment)
#60 (comment)
Hi, the title is pretty self-explanatory:
when typing in tweets, especially when using twitter's "add tweet" function to send multiple tweets at once, FHC seems to only remember random tweets/text that was typed and misses lots of text.
Given that Twitter's current compose tweet box has a nasty tendency to crash and lose whatever was being typed, this is getting quite annoying :(
Thanks
Can you link to this repo on the Mozilla Add-ons page, or on your Blogspot blog (or ideally both)? Thanks!
Every half hour or so FHC runs wild on my machine and makes the fans spin at max. Disabling/enabling it fixes it for a while and then it happens again.
I have a lot of tabs open, including Facebook.
Looking in Activity Monitor, one of the FirefoxCP WebExtension processes uses a lot of CPU, 30-40 %, even if Firefox is idling in the background, which in turn makes the main Firefox process run at maybe 150 % CPU (this is on an i7 with 4+4 cores). Waiting ten minutes for it to finish whatever it is doing doesn't help.
(Beyond disabling/enabling I can also kill the Firefox CP WebExtension process but then a lot of other extensions are disabled too).
Let me know if I can provide you with some more details about this.
I reckong this has been going on for a couple of months.
some times the addon won't save/remember the entire text of a text field.
eg.
if the complete text i wrote is this: "hi there, how are you?"
the addon will save only this: "hi the".
it cuts words and saves only parts of them. also if i select to restore that content, it will restore it as it saved. half.
Not possible to view more history. Message says: "open the advanced 'Manage History' window (right mouseclick)" but not tells where to click by right button.
Not really a bug but a limitation :
This plugin doesn't work for Gitlab webIDE (when editing a .md file for instance). None history stored.
Gitlab WebIDE doesn't use regular text field but some kinds of divs :
Do you think your plugin could work somedays ?
Environment : Debian 9 / Firefox 60 / GitLab Community Edition 11.7.6
Works great for the others websites, thanks for the great work
In Advanced History choose "Select All" then "Copy to Clipboard".
Only one item is copied to clipboard.
Had your extension installed for, probably, years now. First time I remember using it!
It's rather lovely!
I got caught though: when restoring a Reddit post it posts the HTML too which Reddit won't allow me to edit.
Is there, can there be, an option to provide plain-text only please; just the text not the html formatting?
Have identified a really bad memory leak with Form History Control (II) dead14b7-e0fa-4a1c-862c-ee671bb77b49
It seems most noticeable when using Facebook and multiple tabs.
Something triggers, and I cannot say what, but when it does, this will steadily keep increasing RAM and VM usage. I have 16GB RAM on a Linux system on FF Quantum 66.0.5.
The system normally locks up completely when it has reached around 20GB. Close to this X is completely locked up. The most I have seen it reach is about 25GB while monitoring in a separate text terminal.
The section in about:memory that increases is:
top(moz-extension://dead14b7-e0fa-4a1c-862c-ee671bb77b49/_generated_background_page.html, id=6442450952)
Uninstalling as this leak makes brings everything down.
I've just discovered it and it just sucks.
We read,
Following instructions are for the old (1.4.0.6) version!
A new version covering version 2.* will be published shortly...
Please remember to write the Version 2 introduction, and then close this issue.
Older versions allowed cleanup based on criteria such as number of times used. With this version, I can delete entries only one by one, or select and delete all from Manage History/Edit, which isn't desirable. Not seeing Cleanup. Would like to delete those only used once or twice or by age. Any way to accomplish this with the 2.0.3.2?
EDITED: Note: Apparently latest version 2.1.0.0 has added automatic cleanup, but not available for MacOS.
Also would like to be able to set an option to not save entries in text or message fields. Could be mistaken, but don't think items like these which can be sensitive were automatically saved in earlier versions.
FHC v.2.0.3.2/ FF 60.1.0esr/ MacOS 10.12.6
Can you add a feature that automatically (every day) purges entries stored > x days?
I only use this to recover text I've recently written and don't want 1000s of previous, potentially sensitive entries to be stored.
Hello,
I've noticed that not all fields in phpMyAdmin are recognized and saved. It would be helpful if this could be improved. Please let me know if you will need any further details.
Thank you in advance.
Kind regards
Proxymus
Hi Stephan
I use debian stable 10.2 and firefox-esr 68.3.0 from the distribution.
I miss the right click menu entry to cleanly deinstall the addon, it has only deactivate option.
best regards Erich
I go to a lot of trouble to use userChrome.css
to keep my context menu from getting really cluttered by various unwanted Mozilla brainstorms as well as the various addons I prefer to access through other means... and I have yet to find a way to do that with enough nuance to narrow the contexts in which an entry appears without removing it entirely.
I'd really prefer it if Form History Control's submenu only appeared when I right-clicked on a form element, rather than anywhere in the page. (After all, the context menu is supposed to be contextual.)
Please consider at least adding a config option to register your context menu entries with contexts: ["editable"],
rather than contexts: ["all"],
.
Currently the "Show Fields on the Current Page" menu item
makes a series of yellow labels next to each item.
Clicking on a label reveals a orange area discussing each item.
Well this would be a perfect opportunity for at least the use of
color, to at-a-glance distinguish which are <TEXTAREA>
and which are
<INPUT>
etc. instead of all yellow.
Maybe even add a T:
, I:
etc. along with color, to boost accessibility.
In fact when the user clicks on a label, parts of the orange
description could be differently colored too.
Let's take this form as an example.
You type the title and text.
Title: Bug: whole form not restore properly
Textarea: Let's take this form as an example...
Then a crash suddenly occurs.
The title text does not restore automatically.
When you right click on the title field > restore editor field, I expect to show text data relevant to that field (that is "Bug: whole form not restore properly"). However it actually shows the text data of the textarea (that is "Let's take this form as an example...")
The Export Download link is a data string.
99% of users are used to exporting to a file. Please add that too.
Most users will end up pasting the mile long data string into their terminal etc. (4th of July effect.)
In the full Manage History dialog, the "Select All" menu item does not behave as I would have expected when the results have been filtered by a search term. Rather than selecting only the matches that are visible, it selects the entire table, including those rows that have been filtered out.
I accidentally deleted my entire form history because of this - I had assumed that Select All would only select the rows for the specific field name I had searched for, and completely failed to notice that the "rows selected" count was greater than the (already large) number of matches shown.
Let's say Firefox (and thus Export along with it) is broken and we are
desperate to get our data back out.
Please document what the user can use in such an emergency.
$ sqlite3 .mozilla/firefox/*.default-*/storage/default/moz-extension+++*/idb/1148*.sqlite .dump |
perl -nwle "for(/X'([^']+)'/g){my \$n=pack( q(H*), \$_); print \$n;};"|strings -w
indeed gets some strings back out, but it's not very pretty.
Hi Stephan,
I just came across issue #6 from last year, which you closed because FHC is working in the same way as the default Firefox behaviour, ie. textarea fields store the associated hostname/URL, but other field types don't.
I have to agree with @jidanni - the behaviour of Firefox to offer auto-filled text between unrelated sites, just because the form name happens to be the same, has always annoyed me, especially as there seems to be no way to turn it off if I value privacy over convenience. This is especially odd given Mozilla's stated goal of being the most privacy-conscious browser.
So I wonder: please can you reconsider letting FHC fill this gap in usability (and privacy), by storing the hostname and URL on all fields, and always listing matching entries first when offering completions? I think this was in fact the behaviour of the previous XUL version. Similarly, the bulk "fill all fields" features should only ever fill in data previously entered on the same site, though there could perhaps be a separate option to "fill in as much as possible from anywhere". It's already possible to deliberately choose to copy text entered on one site into another, but I never want the browser to do that by default.
I love Form History Control. It has saved my neck many times because I got distracted, lost power, or otherwise screwed up while filling out a form.
But I was surprised (I shouldn't have been, but I was anyway) to see things like my credit card number, CVV code and public & private API keys in its history.
I propose the following configuration option: Only retain multi-line fields. (This might be a checkbox in the Field Filter pane.)
This would allow me to recover the long essays that I have typed into web forms while ignoring all the single-line fields that my browser remembers anyway, fields that I know by heart, or fields with data that I store in my password manager (and don't want saved elsewhere).
(As an alternative, I could live with a wildcard in the Field Filter entries, so I could add entries like this: *ccard*, *cvv*, *private*, *public*, etc.) Many thanks for a great tool.
Allow disabling for some sites: some users might want the add-on enabled for most sites, some not for most sites. Instead of having them toggle it on and off in about:addons, and instead of maintaining a pattern matching list, perhaps a simple
[x]Activate
control in the icon could be added.
(When unchecked the add-on would not actually be disabled. But just not doing anything but remaining in the icon bar.)
I discovered a vital part of HTML forms is not being detected: <select>
!
<select name="ReasonForlate_35" aria-label=
"If this report is being filed late, select the reason for filing late">
<option role="option" value="A">
Forgot to file
</option>
<option role="option" value="B">
Did not know that I had to file
</option>...
<option role="option" value="I">
Unable to access BSA E-filing system
</option>
<option role="option" value="Z">
Other (Please provide explanation below)
</option>
</select>
(Seen on Online FBAR).
In effect, users' gender choice will be lost,
[ ]Male
[x]Female
[ ]Other: Explain ______________
only their explanation will be saved!
Individual's Date of Birth
Year
Month
Day
would be saved if they were simple textboxes.
But if they are 1960, 1961... selectors, we end up having to choose them
all over again :-(
City is saved
State is not (because it is a <select>
here on the FBAR form I'm filling out)
ZIP/postal code is saved
Country/Region is not. (<select>
again.)
One could say the more easy the form authors try to make it for the user
(by employing <select>
), the more harder it becomes for the add-on user.
In fact one could say why are disabled items that the user has no
control of like
<input name="VersionNumber_20" disabled="disabled" value="1.0" type="text">
being saved, but not at the same time saving our <select>
choices?!
Regarding this code -
formhistorycontrol-2/background/receiveFormData.js
Lines 706 to 717 in 9831264
In Form History Control 1.4.0.6, the "10 min" and "500 chars" were configurable. These hard-coded settings don't save enough editor history entries for my use, resulting in data loss. As a test, I tried changing them locally to 1 min and 80 chars, and it worked much better.
Could you please make these settings configurable again?
Thanks!
I work on a ticket tracking program called Jira and I fill in a lot of the same stuff daily. The thing is that I will right click to select recent entries, see the one I want (that I just did on another form five minutes prior) but when I click it nothing is filled in. I can keep clicking it but nothing happens, so I type in manually. I am not sure why sometimes it works and sometimes it does not.
The said interval is now 5 seconds but I'd like to increase it to say each 30 seconds or decrease to 3 seconds. An option would be nice.
Very bad work exceptions. Let's go from the opposite. Make the option "textarea only" and a list of inclusions.
Package: firefox
Version: 58.0~b14-1
Debian Release: buster/sid
APT prefers experimental
Architecture: amd64 (x86_64)
Kernel: Linux 4.14.0-3-amd64 (SMP w/2 CPU cores)
Locale: LANG=zh_TW.UTF-8, LC_CTYPE=zh_TW.UTF-8 (charmap=UTF-8), LANGUAGE=en_US:en (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Init: systemd (via /run/systemd/system)
Versions of packages firefox depends on:
ii debianutils 4.8.4
ii fontconfig 2.12.6-0.1
ii libatk1.0-0 2.26.1-2
ii libc6 2.26.9000+20180108.401311cf-0experimental0
ii libcairo-gobject2 1.15.8-3
ii libcairo2 1.15.8-3
ii libdbus-1-3 1.12.2-1
ii libdbus-glib-1-2 0.108-3
ii libevent-2.1-6 2.1.8-stable-4
ii libffi6 3.3~20160224-1
ii libfontconfig1 2.12.6-0.1
ii libfreetype6 2.8.1-1
ii libgcc1 1:8-20180110-1
ii libgdk-pixbuf2.0-0 2.36.11-1
ii libglib2.0-0 2.55.1-1
ii libgtk-3-0 3.22.26-2
ii libgtk2.0-0 2.24.31-5
ii libhunspell-1.6-0 1.6.2-1
ii libjsoncpp1 1.7.4-3
ii libnspr4 2:4.16-1+b1
ii libnss3 2:3.34.1-1
ii libpango-1.0-0 1.40.14-1
ii libsqlite3-0 3.21.0-1
ii libstartup-notification0 0.12-5
ii libstdc++6 8-20180110-1
ii libvpx4 1.6.1-3
ii libx11-6 2:1.6.4-3
ii libx11-xcb1 2:1.6.4-3
ii libxcb-shm0 1.12-1
ii libxcb1 1.12-1
ii libxcomposite1 1:0.4.4-2
ii libxdamage1 1:1.1.4-3
ii libxext6 2:1.3.3-1+b2
ii libxfixes3 1:5.0.3-1
ii libxrender1 1:0.9.10-1
ii libxt6 1:1.1.5-1
ii procps 2:3.3.12-3
ii zlib1g 1:1.2.8.dfsg-5
firefox recommends no packages.
Versions of packages firefox suggests:
pn fonts-lmodern
pn fonts-stix | otf-stix
pn libcanberra0
ii libgssapi-krb5-2 1.16-1
pn mozplugger
-- no debconf information
It seems there are only two ways to fill the whole form. They are:
There is a pitfall using the second one. Let's say you fill the form using the second one. The form filled is not what you expect. You want to try the first one (the most recent one). Unfortunately it is gone since the one you've just filled in (the most often used) becomes the most recent one now.
Perhaps a fix is it only counts as a new one when you start typing, not at the time of restoration.
Or list more than 1 most recent entries. Let's say the 5 most recent ones.
Thank you.
I noticed my Firefox's content process was consuming 50% of one core when the browser should be at idle, so I opened up the Browser Console to see what was going on.
While I'm not sure if Form History Control was responsible for the load, it quickly filled up the console with a repeating cycle of these errors, which caused the whole browser to seize up so badly that, after clicking the Close button on the Browser Console window, I had to wait over 15 minutes for it to acknowledge and for the browser to start responding again.
(I had a half-written report of a probably-spurious Browser Console error message from CanvasBlocker that I didn't want to lose.)
Error: Error: ID already exists: editfldMore contextmenu.js:322:5
Error: Error: ID already exists: editfldlastused contextmenu.js:322:5
Error: Error: ID already exists: editfld2695 contextmenu.js:322:5
Error: Error: ID already exists: editfld2689 contextmenu.js:322:5
Error: Error: ID already exists: editfld2687 contextmenu.js:322:5
Error: Error: ID already exists: editfld2686 contextmenu.js:322:5
Error: Error: ID already exists: editfld2685 contextmenu.js:322:5
Error: Error: ID already exists: editfld2684 contextmenu.js:322:5
Error: Error: ID already exists: editfld2682 contextmenu.js:322:5
Error: Error: ID already exists: editfld2681 contextmenu.js:322:5
Error: Error: ID already exists: editfld2680 contextmenu.js:322:5
Error: Error: ID already exists: editfld2679 contextmenu.js:322:5
Error: Error: ID already exists: editfldhostname contextmenu.js:322:5
Error: Error: ID already exists: editfld2695 contextmenu.js:322:5
Error: Error: ID already exists: editfld2618 contextmenu.js:322:5
Error: Error: ID already exists: editfld2603 contextmenu.js:322:5
Error: Error: ID already exists: editfld2584 contextmenu.js:322:5
Error: Error: ID already exists: editfld2583 contextmenu.js:322:5
Error: Error: ID already exists: editfld2582 contextmenu.js:322:5
Error: Error: ID already exists: editfld2581 contextmenu.js:322:5
Error: Error: ID already exists: editfld2580 contextmenu.js:322:5
Error: Error: ID already exists: editfld2579 contextmenu.js:322:5
Error: Error: ID already exists: editfld2578 contextmenu.js:322:5
Error: Error: ID already exists: editfld2695 contextmenu.js:322:5
Error: Error: ID already exists: editfld2618 contextmenu.js:322:5
Error: Error: ID already exists: editfld2603 contextmenu.js:322:5
Error: Error: ID already exists: editfld2584 contextmenu.js:322:5
Error: Error: ID already exists: editfld2583 contextmenu.js:322:5
Error: Error: ID already exists: editfld2582 contextmenu.js:322:5
Error: Error: ID already exists: editfld2581 contextmenu.js:322:5
Error: Error: ID already exists: editfld2580 contextmenu.js:322:5
Error: Error: ID already exists: editfld2579 contextmenu.js:322:5
Error: Error: ID already exists: editfld2578 contextmenu.js:322:5
Error: Error: ID already exists: editfld2666 contextmenu.js:322:5
Error: Error: ID already exists: editfld2665 contextmenu.js:322:5
Error: Error: ID already exists: editfld2661 contextmenu.js:322:5
Error: Error: ID already exists: editfld2660 contextmenu.js:322:5
Error: Error: ID already exists: editfld2659 contextmenu.js:322:5
Error: Error: ID already exists: editfld2658 contextmenu.js:322:5
Error: Error: ID already exists: editfld2657 contextmenu.js:322:5
Error: Error: ID already exists: editfld2656 contextmenu.js:322:5
Error: Error: ID already exists: editfld2655 contextmenu.js:322:5
Error: Error: ID already exists: editfld2654 contextmenu.js:322:5
Error: Error: ID already exists: editfld2689 contextmenu.js:322:5
Error: Error: ID already exists: editfld2687 contextmenu.js:322:5
Error: Error: ID already exists: editfld2686 contextmenu.js:322:5
Error: Error: ID already exists: editfld2685 contextmenu.js:322:5
Error: Error: ID already exists: editfld2684 contextmenu.js:322:5
Error: Error: ID already exists: editfld2682 contextmenu.js:322:5
Error: Error: ID already exists: editfld2681 contextmenu.js:322:5
Error: Error: ID already exists: editfld2680 contextmenu.js:322:5
Error: Error: ID already exists: editfld2679 contextmenu.js:322:5
Error: Error: ID already exists: editfld2678 contextmenu.js:322:5
Error: Error: ID already exists: editfld2689 contextmenu.js:322:5
Error: Error: ID already exists: editfld2687 contextmenu.js:322:5
Error: Error: ID already exists: editfld2686 contextmenu.js:322:5
Error: Error: ID already exists: editfld2685 contextmenu.js:322:5
Error: Error: ID already exists: editfld2684 contextmenu.js:322:5
Error: Error: ID already exists: editfld2682 contextmenu.js:322:5
Error: Error: ID already exists: editfld2681 contextmenu.js:322:5
Error: Error: ID already exists: editfld2680 contextmenu.js:322:5
Error: Error: ID already exists: editfld2679 contextmenu.js:322:5
Error: Error: ID already exists: editfld2678 contextmenu.js:322:5
Error: Error: ID already exists: editfld2695 contextmenu.js:322:5
Error: Error: ID already exists: editfld2689 contextmenu.js:322:5
Error: Error: ID already exists: editfld2687 contextmenu.js:322:5
Error: Error: ID already exists: editfld2686 contextmenu.js:322:5
Error: Error: ID already exists: editfld2685 contextmenu.js:322:5
Error: Error: ID already exists: editfld2684 contextmenu.js:322:5
Error: Error: ID already exists: editfld2682 contextmenu.js:322:5
Error: Error: ID already exists: editfld2681 contextmenu.js:322:5
Error: Error: ID already exists: editfld2680 contextmenu.js:322:5
Error: Error: ID already exists: editfld2679 contextmenu.js:322:5
I know it's Form History Control because, before it bogged down too far, I was able to check the tooltip and...
background/contextmenu.js
console.error(
Error: ${browser.runtime.lastError});
would explain that "Error: Error:" in the output.OS: Kubuntu Linux 14.04.5 LTS (64-bit)
Browser: Firefox Developer Edition 63.0b4 (64-bit) (Mozilla Build)
Form History Control Version: 2.2.0.0
My FHC settings are mostly the defaults, but I think I changed these:
Example, I type this into a Facebook comment:
Test comment on facebook
Then press return to post the comment and the field changes to show:
I can fix this to some extent by setting it to record what I type every minute and every ten characters typed but I can still lose but lose up to last 10 characters of the comment (if made in last minute before pressing return) in a Facebook comment as well as having dozens of entries for each comment if it is a long one.
It's already useful but if this can be fixed will be even more useful. I mainly want it for situations where someone deletes a post that I have made many comments on, as the comments are then deleted from the Facebook activity log. (I often write up these comments as blog posts).
Thanks for a great plugin :).
The context menu item appears anywhere on the page, please add the ability to completely disable it in the settings.
The plug-in is saving values typed in to fields that have autocomplete="off" set (I've found passwords and other stuff in my history that shouldn't be there...) I've checked with dev toolbar that autocomplete="off" is set for those fields.
Don't forget about privacy. I was surprised to find that there was no way to clear history. How so? =)
Is there a character limit to what is saved? Some forms will also save html formatting, like posts on Gist, which makes their form content large. The limit on text means that there is a higher chance that only a partial form can be restored (after running the text through an html stripping tool). The ability to extend the size of the content saved for each form is really needed for such situations (I've just lost 2/3 of a document).
This add-on now uses the new mandatory WebExtensions API which no longer offers access to Firefox's built-in formhistory database. This means that after installing the WebExtensions enabled version, you start with an empty formhistory dataset.
I think this means that you won't save the history from the previous version of the extension, but as it is written it can also be read as stating that installing this extension wipes the Firefox form history database (so previously entered passwords and logins). I would be hesitant to install it if it would do that. Perhaps this wording would be more clear? (emphasized the changed part)
This add-on now uses the new mandatory WebExtensions API which no longer offers access to Firefox's built-in formhistory database. This means that after installing the WebExtensions enabled version, the extension starts with an empty formhistory dataset.
I don't see there is any way to search a form to fill in. (Note: we are talking about the whole form, not just a particular textarea field). Opening up the history popup, it shows a lot of saved data in different text fields, but there is no way to find and restore a particular version of the form as a whole.
It would be great if there is a way to search and restore a particular version of the form at a particular link.
Thank you.
I was writing a long post in Firefox in a SMF forum (which uses Alt+Shift+P to preview) when I accidentally pressed Alt+Shift+something else. Form History Control overwrote my entire post, with no way to undo.
Is it possible to make "overwriting current form" an undoable process?
And #48 is it possible to "disable" shortcuts by doing nothing whenever they're pressed?
I can find no description of how to un-assign/remove a shortcut from an action, nor can I figure out any way to do so. There is also no obvious/easy to find way to ask a question on the plugin's main page/site.
This ability/feature is important! I may already have those shortcuts applied to other functions or may not wish to potentially be able to accidentally activate certain commands.
As you mentioned, there is not a mechanism to check for conflicts; nor is there any clearly defined system of which action will actually be triggered where there is a conflict. In fact, my experiences have added to my confusion because one particular action is not always triggered over the other and it is unclear why the "winner" is the action that gets triggered.
The "obvious" (to me) solution would be the addition of a "--none--" (or "disabled", or something similar/synomymous) item to the list of keyboard keys.
Any thoughts, reactions, contradictions or ideas?
In Form History Control the rightmost column is called Host.
We see Github.com listed there just fine.
But some sometimes the Host field is blank!
Choose "Online Form" on
https://bsaefiling.fincen.treas.gov/NoRegFBARFiler.html
This should lead to
https://bsaefiling1.fincen.treas.gov/lc/content/xfaforms/profiles/htmldefault.html
Fill out some fields.
For this site the Host field is blank!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.