otterbrowser / otter-browser Goto Github PK
View Code? Open in Web Editor NEWOtter Browser aims to recreate the best aspects of the classic Opera (12.x) UI using Qt5
Home Page: https://otter-browser.org
License: GNU General Public License v3.0
Otter Browser aims to recreate the best aspects of the classic Opera (12.x) UI using Qt5
Home Page: https://otter-browser.org
License: GNU General Public License v3.0
What about dragonfly in Otter Browser?
Opera Dragonfly is very convenient.
Hello,
Just tried the Otter browser on Arch Linux.
I have a question : when I close a tab, the recycle bin icon with the mouse over label "Closed Tabs" the color change and the become clickable (a mouseover animation and a mouse press animation are enabled). If I click on it, nothing happen.
Question : should something happen ?
How to reproduce :
Also, if you could describe what would be the difference of the recycle bin button and the little arrow next to it.
bash-4.2$ qmake-qt5 ../otter.pro
Project ERROR: Unknown module(s) in QT: sensors
bash-4.2$ make
make: *** No targets specified and no makefile found. Stop.
bash-4.2$ rpm -qa|grep qt5
qt5-qtmultimedia-5.2.0-0.10.rc1.fc20.x86_64
qt5-gstreamer-0.10.3-2.fc20.x86_64
qt5-qtquick1-devel-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtbase-postgresql-5.2.0-0.12.rc1.fc20.x86_64
qt5-qtbase-mysql-5.2.0-0.12.rc1.fc20.x86_64
qt5-qtbase-5.2.0-0.12.rc1.fc20.x86_64
qt5-qtscript-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtwayland-devel-5.1.0-0.2.20130826git3b0b90b.fc20.x86_64
qt5-qtdeclarative-doc-5.2.0-0.12.rc1.fc20.noarch
qt5-assistant-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtmultimedia-doc-5.2.0-0.10.rc1.fc20.noarch
qt5-qtimageformats-5.2.0-0.10.rc1.fc20.x86_64
qt5-qttranslations-5.2.0-0.10.rc1.fc20.noarch
qt5-qtbase-devel-5.2.0-0.12.rc1.fc20.x86_64
qt5-qtaccountsservice-0.1.0-3.fc20.x86_64
qt5-qtbase-tds-5.2.0-0.12.rc1.fc20.x86_64
qt5-qtdeclarative-devel-5.2.0-0.12.rc1.fc20.x86_64
qt5-qtwayland-5.1.0-0.2.20130826git3b0b90b.fc20.x86_64
qt5-qtx11extras-devel-5.2.0-0.4.beta1.fc20.x86_64
qt5-qtbase-doc-5.2.0-0.12.rc1.fc20.noarch
qt5-qtsvg-doc-5.2.0-0.10.rc1.fc20.noarch
qt5-designer-plugin-webkit-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtscript-devel-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtsvg-devel-5.2.0-0.10.rc1.fc20.x86_64
qt5-gstreamer-devel-0.10.3-2.fc20.x86_64
qt5-qtquickcontrols-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtimageformats-doc-5.2.0-0.10.rc1.fc20.noarch
qt5-qttools-doc-5.2.0-0.10.rc1.fc20.noarch
qt5-qtxmlpatterns-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtconfiguration-devel-0.1.0-3.fc20.x86_64
qt5-qtwebkit-devel-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtquickcontrols-doc-5.2.0-0.10.rc1.fc20.noarch
qt5-qttools-static-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtdoc-5.2.0-0.10.rc1.fc20.noarch
qt5-qtquick1-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtdeclarative-5.2.0-0.12.rc1.fc20.x86_64
qt5-qttools-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtconfiguration-0.1.0-3.fc20.x86_64
qt5-qtxmlpatterns-devel-5.2.0-0.10.rc1.fc20.x86_64
qt5-qdbusviewer-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtxmlpatterns-doc-5.2.0-0.10.rc1.fc20.noarch
qt5-qtscript-doc-5.2.0-0.10.rc1.fc20.noarch
qt5-qttools-devel-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtsvg-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtgraphicaleffects-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtbase-static-5.2.0-0.12.rc1.fc20.x86_64
qt5-qtmultimedia-devel-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtx11extras-5.2.0-0.4.beta1.fc20.x86_64
qt5-qtwebkit-doc-5.2.0-0.10.rc1.fc20.noarch
smplayer-0.8.6_svn_r5949-qt5.fc20.x86_64
qt5-qtbase-gui-5.2.0-0.12.rc1.fc20.x86_64
qt5-qtwebkit-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtaccountsservice-devel-0.1.0-3.fc20.x86_64
qt5-qtbase-odbc-5.2.0-0.12.rc1.fc20.x86_64
qt5-qtdeclarative-static-5.2.0-0.12.rc1.fc20.x86_64
qt5-qtimageformats-devel-5.2.0-0.10.rc1.fc20.x86_64
qt5-qtgraphicaleffects-doc-5.2.0-0.10.rc1.fc20.noarch
qt5-qtbase-ibase-5.2.0-0.12.rc1.fc20.x86_64
what am I missing?
Currently it's only possible to close tab via main menu or context menu on the tab.
would be great
Hi!
One of the basic features of Opera is LRU tab switching out of the box.
I'm not sure if you've already implemented keyboard shortcuts in otter (all controls on keyboard page in preferences are grayed), but for me Ctrl-Tab works very strange - when I press it, otter does not switch tabs, but the current tab becomes gray as if the web view with address bar and everything was removed. It seems like a bug to me :-)
Hi! Built under Debian sid with qt5 from 'experimental' repo, otter-browser always crashes on http://lenta.ru/
Please check if it reproduces on your test setup or it is because Debian experimental package is buggy.
Thanks.
This is just a small graphical glitch on the main toolbar right arrow that allow a user to restore closed tabs.
How to reproduct
Also, might be an idea to keep the same button style for the recycle bin and the arrow : the recycle bin however is rounded but the arrow is quare.
One of my favourite features from pre-blink Opera was the ability to move the tab bar to any of the four sides of the screen. I use the tab bar on the left because of limited vertical space on my laptop's screen. It's also great if you have lots of tabs open - much more space-efficient.
I'm not sure how much effort this would be, or if QTabBar even supports this, but if someone were to give me pointers on where to start, I'll have a bash at implementing it.
Hi, i am really impressed in the Work you have done! I cloned the repo and compiled it just fine. Otter runs without problems till i load a website. I can see it loading und the first content to be rendered. but then it just segfaults reproducible.
I am running Archlinux (3.12.6-1)
$ qmake -version
QMake version 3.0
Using Qt version 5.2.0 in /usr/lib
is there anything i can deliver to help you?
I would love to help you with this project if there is anything i can do :)
I'm planning to start shortcuts management UI soon and I need some feedback, since I'm going to do it in a bit different way than it is done in Opera 12. ;-)
First of all, I would like to split them into templates for each platform (instead of mixing, it's seems a bit simpler to manage them manually", with simpler file format) while keeping also current solution as an option (profile that mixes platform native shortcuts provided by Qt with some additions). By default profile would match platform and fallback to "native" profile otherwise.
Secondly I would like to change UI paradigm, to more modern solutions where action is usually put in first column, like here (screenshot from shortcuts configuration of my not yet finished map editor for Warzone 2100):
http://im9.eu/picture/nq3075
Dialog would be pretty much similar, but editing would be moved to "details widget" (solution used by transfers manager etc., form located on the bottom) so there would be enough space to manage multiple shortcuts per action.
No contexts for now, all actions are currently global (exceptions are standard actions of line edits etc., currently managed by Qt, using native shortcuts).
They may be added in (near) future but mainly as grouping helper (currently there are ~80 actions available).
Each action will be able to hold unlimited (well, memory amount etc. are hard limits ;-)) amount of keyboard shortcuts, some of them by default (like Find action).
Format could look like:
[ActionIdentifier]
shortcuts-1=Ctrl+A
[ActionIdentifier2]
shortcuts-1=Ctrl+B
shortcuts-2=D,W
When context would arrive then it would probably got changed (but be still comaptible, since identifiers shall be unique anyway, even if it will require prefixing them, especially these registered by addons) to something like that:
[Context/ActionIdentifier]
shortcuts-1=Ctrl+A
[Context2/ActionIdentifier2]
shortcuts-1=Ctrl+B
shortcuts-2=D,W
Or:
[ActionIdentifier]
context=Context
shortcuts-1=Ctrl+A
[ActionIdentifier2]
context=Context2
shortcuts-1=Ctrl+B
shortcuts-2=D,W
I'm currently not planning to add built-in import tool for existing profiles from Opera (but I may reconsider that later) but such scripts would be welcomed (in this case preferred language is Python) and could be added to repository (for example into tools/scripts/ directory).
But that would require "some" research from person which would be willing to create it (maybe there is some paper describing standard actions somewhere?) and a bit of mapping (action names are not based on those from Opera, but may be sometimes similar). It would need to be updated as new actions are implemented.
Import and export will be available and there may be additional schemes added by community (ultimately it may make sense to create addons repo for them, while shipping only platform profiles and fallback).
Proxy support is one of still missing "basic" parts.
It would be nice to support at least three ways to setup them (plus no proxy too):
UI would be similar to that of Opera (I can create it myself if needed).
It has to use QNetworkProxy and probably QNetworkProxyFactory too.
Just screen:
http://i.imgur.com/sz9QWlO.jpg
I see that 'extensions' is on the TODO list. But I was curious whether Otter plans to support existing Chromium extenions? More specifically, will the Ghostery extension be available in Otter?
After closing last tab browser crashes, probably either:
I don't know if it matters but I run into these problems on arch linux amd64 with otter installed via the aur/otter-browser-git package.
Websites with self-signed certificates (example) are annoying to use, because you get asked if you want to continue over and over.
Ignoring the dialog, opening a new tab and closing the one that caused the dialog to open crashes otter. (backtrace)
...this is one of the things that I cannot live without!
(and I think Opera is the only browser that implements it)
I'm use a fedora and qt-5.2.0, when i build an otter-browser, then i got error:
otter-browser: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory
Please run search using selected search engine with from the location bar.
if it is not a link then search would be great. Also show search result from bookmarks and history
I was notified (thanks for hint :-)) about this solution for avoiding browser fingerprinting:
http://fingerprint.pet-portal.eu/?menu=6
It would be nice to have solution like that built-in, although not necessary enabled by default, but surely exposed in similar way like Do Not Track option.
Some research is needed to implement required procedures.
For sure it will require modifications in NetworkAccessManager.
Hi
Is it planned to properly support tabs on titlebar? I'm totally addicted to this and some other features I'll post in other issues
thanks in advance
I can not use it inside my enterprise because it has a NTLM authenticated proxy. Old Opera also suffered from this, but the new one doesn't.
I don't w3aana force you into this bug, as I recognize there is more uregent and important stuff in the quele to be solved first, but it is dign of mention.
Do we have application icon for otter browser? I'd like to make fedora rpm, but needs icon.
Translations probably should be started in early February, after translatable strings will be initially stabilized (some review from native English speakers would be appreciated) so first beta could be localized at least a bit.
We will probably stick with standard Qt infrastructure:
http://qt-project.org/doc/qt-5/internationalization.html#producing-translations
It is more modern that good ol' gettext and supported out of the box.
There is need to setup procedures and maybe some infrastructure to improve translations work flow, like translation statistics etc.
Any useful ideas are welcomed. :-)
What about translation this application?
The sooner you add support for Qt Linguist (or gettext) in the code, the easier it will be in the future!
Transifex is good system for management translation! https://en.wikipedia.org/wiki/Transifex
every question in theme.If not, why not?
It would be nice to have support for themes used by Opera (old and new ones).
Skins and personas should be implemented by subclassing QStyle.
Probably best way would be to create on QStyle for each incompatible generation of Opera skins (for sure for classic ones and these "lightweight").
If someone would like to add support for other theming engines, then it could be added too.
Some documentation:
http://dev.opera.com/addons/themes
"We have implementation, what next?"
We will need to contact authors of existing themes (especially to clarify licensing) if we would like to have own repository for them (maybe it would be possible to get repository here: http://opendesktop.org/).
QtWebKit by default can only download files through FTP protocol, it is unable to list its contents.
This could be used as reference, but without using deprecated QFtp module:
http://doc.qt.digia.com/qq/32/qq32-webkit-protocols.html
Preferred is parsing replies directly (at least Unix style, DOS can wait) or make use of some simple library which could be shipped (it is important that license is compatible with GPLv3), but it is not rally needed since it is pretty simple (I can provide example raw outputs if needed).
It should be based on LocalListingNetworkReply class as example, use custom reply only for listings (if possible, auth may require to handle them all).
For icons it should only use method that accepts file name to guess content type (no contents downloading), show directories first and for now should simply use the same HTML template (without creating copy).
Very useful for people regularly working with lots of tabs.
At the moment, only Opera and (recently) Firefox does it. Opera has very simple control so that you just drag a tab and drop it on another tab or onto an already existing group. Firefox does not do it as simple, but it has "bird's eye" view of all the groups (example screenshots are here or here).
I would personally prefer the ease of Opera's control with possibility to show panoramatic view in Firefox style :-)
Hi. I was about to try out this project. Installed latest QT (5.2) from their site, opened the project in QT Creator and hit "build". All seems fine until the error below. I have libxml2-2.9.1-r1 installed by my package manager on Sabayon. Is there a specific libxml2 I need in order to compile Otter?
g++ -Wl,-rpath,/home/csaba/Diverse/Qt/5.2.0/gcc_64 -Wl,-rpath,/home/csaba/Diverse/Qt/5.2.0/gcc_64/lib -Wl,-rpath-link,/home/csaba/Diverse/Qt/5.2.0/gcc_64/lib -o otter-browser main.o ActionsManager.o AddressCompletionModel.o Application.o BookmarksManager.o CookieJar.o FileSystemCompleterModel.o HistoryManager.o LocalListingNetworkReply.o NetworkAccessManager.o NetworkCache.o SearchesManager.o SearchSuggester.o SessionsManager.o SettingsManager.o TransfersManager.o Utils.o WebBackend.o WebBackendsManager.o WindowsManager.o AddressWidget.o AuthenticationDialog.o BookmarkPropertiesDialog.o ClearHistoryDialog.o ContentsDialog.o ContentsWidget.o ItemDelegate.o MainWindow.o OptionDelegate.o OptionWidget.o PreferencesDialog.o PreviewWidget.o SaveSessionDialog.o SearchDelegate.o SearchPropertiesDialog.o SearchWidget.o SessionsManagerDialog.o StatusBarWidget.o TabBarDockWidget.o TabBarWidget.o TextLabelWidget.o WebWidget.o Window.o BlockedContentDialog.o ShortcutDelegate.o QtWebKitWebBackend.o QtWebKitWebPage.o QtWebKitWebWidget.o BookmarksContentsWidget.o CacheContentsWidget.o ConfigurationContentsWidget.o CookiesContentsWidget.o HistoryContentsWidget.o ProgressBarDelegate.o TransfersContentsWidget.o ImagePropertiesDialog.o ProgressBarWidget.o WebContentsWidget.o qrc_resources.o moc_ActionsManager.o moc_AddressCompletionModel.o moc_Application.o moc_BookmarksManager.o moc_CookieJar.o moc_HistoryManager.o moc_NetworkAccessManager.o moc_NetworkCache.o moc_SearchesManager.o moc_SearchSuggester.o moc_SessionsManager.o moc_SettingsManager.o moc_TransfersManager.o moc_WebBackend.o moc_WebBackendsManager.o moc_WindowsManager.o moc_AddressWidget.o moc_AuthenticationDialog.o moc_BookmarkPropertiesDialog.o moc_ClearHistoryDialog.o moc_ContentsDialog.o moc_ContentsWidget.o moc_MainWindow.o moc_OptionWidget.o moc_PreferencesDialog.o moc_PreviewWidget.o moc_SaveSessionDialog.o moc_SearchPropertiesDialog.o moc_SearchWidget.o moc_SessionsManagerDialog.o moc_StatusBarWidget.o moc_TabBarDockWidget.o moc_TabBarWidget.o moc_TextLabelWidget.o moc_WebWidget.o moc_Window.o moc_BlockedContentDialog.o moc_QtWebKitWebBackend.o moc_QtWebKitWebPage.o moc_QtWebKitWebWidget.o moc_BookmarksContentsWidget.o moc_CacheContentsWidget.o moc_ConfigurationContentsWidget.o moc_CookiesContentsWidget.o moc_HistoryContentsWidget.o moc_TransfersContentsWidget.o moc_ImagePropertiesDialog.o moc_ProgressBarWidget.o moc_WebContentsWidget.o -L/home/csaba/Diverse/Qt/5.2.0/gcc_64/lib -lQt5WebKitWidgets -lX11 -lxslt -lgio-2.0 -lgstapp-0.10 -lgstinterfaces-0.10 -lgstpbutils-0.10 -pthread -lgstvideo-0.10 -lgstbase-0.10 -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lxml2 -lgthread-2.0 -lrt -lglib-2.0 -lQt5Quick -lQt5Positioning -lQt5OpenGL -lQt5PrintSupport -lQt5WebKit -lQt5Qml -lQt5Widgets -lQt5Sql -lQt5Sensors -lQt5Network -lQt5Gui -lQt5Core -lGL -lpthread
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/libxml2.so: undefined reference to ucnv_setToUCallBack' /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/libxml2.so: undefined reference to
ucnv_close'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/libxml2.so: undefined reference to UCNV_FROM_U_CALLBACK_STOP' /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/libxml2.so: undefined reference to
ucnv_open'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/libxml2.so: undefined reference to ucnv_setFromUCallBack' /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/libxml2.so: undefined reference to
ucnv_convertEx'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/libxml2.so: undefined reference to `UCNV_TO_U_CALLBACK_STOP'
collect2: error: ld returned 1 exit status
make: *** [otter-browser] Error 1
12:36:08: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project otter (kit: Desktop Qt 5.2.0 GCC 64bit)
When executing step 'Make'
12:36:08: Elapsed time: 01:14.
http://terasaur.org/item/show/fedora-17/6581
try saving the torrent file from the above link, but cancel the save dialog.
also support for magnet links would be great. transmission-gtk / transmission-qt, qbittorrent / ktorrent etc. can be magnet handler
Please try to improve the interface, streamline it,
ContentsWidget API exposes underlying QUndoStack instance which allows to use undo (and redo) commands in unified way.
Currently it is only implemented WebContentsWidget (by forwarding one supplied by backend) but other modules (like bookmarks) possibly could make use it to allow to redo some of the changes.
This could be split into few sub tickets if needed.
Is there a 'debian' packaging dir available? I see that you provide Debian packages for the current releases, but I cannot see the 'debian' dir anywhere in the sources.
Plans for this feature are as follow:
Currently main issue is how URLs passed to it should look like, prepend source+ to original URL (for example: source+http://otter-browser.org) or maybe better use standard about:source/encoded URL scheme (allowing "malformed" URLs, created by typing request through address field without encoding it first).
Original URL should be anyway always displayed on top of page (using TextLabelWidget).
If someone would like to start working on this now then you should first check out ContentsWidget API and ask me to add required API (the one supposed to be shared with save action).
I've already have implementation of text editing widget with syntax highlighting and line numbering (plus some other stuff), from my thesis project which could be used as a base implementation, after some cleanup.
ASSERT: "!themeName.isEmpty()" in file image/qiconloader.cpp, line 255
any idea how to fix this?
This is mostly the only feature of my opera → firefox¹ switch
http://www.youtube.com/watch?v=5r0TQJ-gGi0
With this tab management method i managed to have nearly 200 tabs constantly open without any side-effect and impact on time wasted to find a tab - actually the last one has significantly improved (and if i fail - there is a dedicated search bar). Worth to mention is that upon loading session with this insane amount of tabs only currently viewed tab is fetched (so another performance/memory win)
¹ Unrelated, but there is no good, lightweight mail/rss client so i'm using opera with switched programs associated with http(s) protocol within opera (as there is no opera mail client for linux) + few workarounds to make it sane
OK, this is really important.
Is it planned to have a complete customization system like in the good old Opera? ... here is it what I mean:
Thanks in advance :D
Added a enu action for download(open, donwload, downolad where) and button 'copy link in buffer', really support some sites, where js redirect you to file and you don't support copy link before press button.
I have three monitors. Tool tips displayed only on primary monitor, even if window on third monitor.
It seems to be impossible to use qmake and "make install".
It outputs "nothing to be done for "install""
I'd also like to specify an output dir.
It works with cmake.
This will be pretty big task on its own, so help would be welcomed (it possibly could have own maintainer).
Mail client shall have all useful features of M2 plus support for useful stuff that everybody always wanted but was never added there (like PGP).
Mail client and RSS reader should be separated modules, but sharing single panel and similar UI design. Also all PIM related modules should use common storage for contacts, possibly using backends for integration with system wide contacts database (like for example KDEPIM). There used to be such modules available for Qt4 (as part of Qt Mobility) but their API was overcomplicated and as of now there is no direct replacement for them yet (but may be available in near future, so some research would be great).
There exists some pure Qt reference implementations for mail protocols (for example as plugins for QtMessaging - again, part of Qt Mobility), but if there is nice and clean library with proper Qt bindings around (and compatible license) then we could make use of it.
The only way to close the page inspector is by View->Inspect Page -- which is confusing. Add an "[x]"-Button in the inspector's menu.
Otter utilizes custom dialogs for some occasions (JavaScript alerts, prompts and confirms, image properties, auth etc.).
They should have ability to be resized by drag and drop, kind of size grip (usually in right bottom corner, probably should depend on LTR vs RTL settings of locale, can be queried using QGuiApplication::isRightToLeft()).
Built-in size grip has issues (enable it and try to drag it to see how it interferes with that gay layer etc. ;-)), but maybe it could be reused (for example by capturing events using eventFilter()).
Feel free to modify API to accept QDialog instead of QWidget if needed.
All of it should be handled in ContentsWidget base class (thus shared by all implementations).
I was wondering if you had Ubuntu compatibility on the horizon? As far as I can see the 0.1.01 release requires libqt5 (>= 5:5.2.0), which even the unreleased Ubuntu Trusty doesn't satisfy as it ships libqt5webkit5 (5.1.1-1ubuntu4).
I would like to add a tray icon to your application (one of the easiest jobs i found). Could You give me a hint in which file should I put the code?
Ps. You mentioned IRC contact in one of already closed issues, could You give some info about channel? Would be nice if it will be visible in readme
In reference to #12 - it would be nice to have a few configurable options regarding closing last tab, i.e.:
Opera has the the best text-flow, word-wrap for frames and text. Please try to have it in otter! thanks.
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.