Giter Site home page Giter Site logo

[Bug Report] UI taint related to scrolling in journal (AddOn 'BlizzMove' tried to call the protected function 'OnOpen()') about blizzmove HOT 14 OPEN

drnoonien avatar drnoonien commented on June 20, 2024
[Bug Report] UI taint related to scrolling in journal (AddOn 'BlizzMove' tried to call the protected function 'OnOpen()')

from blizzmove.

Comments (14)

Numynum avatar Numynum commented on June 20, 2024 2

thanks, that helped pinpoint the problem
though unfortunately, I don't think it's fixable without breaking a lot of functionality

there's a chance that blizzard will fix this from their end though, as a few other addons are having similar problems
but in the mean time, since this error doesn't actually seem to break anything, we'll probably have to live with it for now

(for reference, the problem seems to be due to how the scrollbox gets tainted when we propagate mousewheel 'events' to the scroll box; on re-opening the frame, blizzard updates the loot, which reads the scrollbox, spreading the taint, and then calls the OnOpen protected function. A simple fix for them, would be to move the OnOpen function a few lines higher, to above the loot updating function)

from blizzmove.

drnoonien avatar drnoonien commented on June 20, 2024

I also have another addon that triggers this issue (TinyInspect), where this seems to be the offending code, in case that helps troubleshooting:

local GetLootInfoByIndex = EJ_GetLootInfoByIndex
if (C_EncounterJournal and C_EncounterJournal.GetLootInfoByIndex) then
    GetLootInfoByIndex = C_EncounterJournal.GetLootInfoByIndex
end

from blizzmove.

Numynum avatar Numynum commented on June 20, 2024

does this happen every time for you?
I've tried maybe 10 times now, and it only broke once for me.. very odd
I'm not quite sure how this could be happening, to be honest

from blizzmove.

drnoonien avatar drnoonien commented on June 20, 2024

I can consistently reproduce it, but only doing those specific steps above, here's how it looks in video form (repro starts after loading screen) https://streamable.com/gke8s8

from blizzmove.

Numynum avatar Numynum commented on June 20, 2024

Interesting.. I'm doing the exact same thing, but for me it only broke once, very odd..

from blizzmove.

drnoonien avatar drnoonien commented on June 20, 2024

Nuking my entire WTF folder seems to resolve it. I'll try to dig down and see if I can find out what exactly fixes it...

Ok no, it was because I tried it on a different character. Clearing WTF did nothing, and I also have differences between characters. The plot thickens...

Edit: Hm, ok so on this character (bdk), I need to do the following to trigger the error: https://streamable.com/yg7oph

from blizzmove.

drnoonien avatar drnoonien commented on June 20, 2024

So it seems the way it breaks in my first example is the odd scenario, I can only reproduce that on a single char. The second scenario (scroll, then return to overview and toggle window) triggers both on multiple characters and across multiple computers.

Both are related to scrolling in that ability tab.

from blizzmove.

Numynum avatar Numynum commented on June 20, 2024

Are you still able to consistently reproduce it?

If so, could you help us out by providing a taintlog file?

  1. load your character, with only blizzmove, buggrabber and bugsack enabled
  2. type /console taintLog 2 in chat
  3. reload your UI
  4. reproduce the issue, in as few steps as possible
  5. type /console taintLog 0 in chat immediately after the taint error message pops up
  6. reload your UI
  7. upload World of Warcraft\_retail_\Logs\taint.log here (or on pastebin or similar)

from blizzmove.

drnoonien avatar drnoonien commented on June 20, 2024

Yep, still reproduces nicely. Here's the contents of taint.log

5/16 17:42:30.204  Global variable MAX_BUGGRABBER_ERRORS tainted by !BugGrabber - Interface/AddOns/!BugGrabber/BugGrabber.lua:33
5/16 17:42:30.204  Global variable BUGGRABBER_ERRORS_PER_SEC_BEFORE_THROTTLE tainted by !BugGrabber - Interface/AddOns/!BugGrabber/BugGrabber.lua:36
5/16 17:42:30.204  Global variable seterrorhandler tainted by !BugGrabber - Interface/AddOns/!BugGrabber/BugGrabber.lua:570
5/16 17:42:30.204  Global variable SLASH_BugGrabber1 tainted by !BugGrabber - Interface/AddOns/!BugGrabber/BugGrabber.lua:574
5/16 17:42:30.204  Global variable BugGrabber tainted by !BugGrabber - Interface/AddOns/!BugGrabber/BugGrabber.lua:575
5/16 17:42:30.204  Global variable LibStub tainted by BlizzMove - Interface/AddOns/BlizzMove/Libs/LibStub/LibStub.lua:8
5/16 17:42:30.210  Global variable AceGUIEditBoxInsertLink tainted by BlizzMove - Interface/AddOns/BlizzMove/Libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua:25
5/16 17:42:30.210  Global variable AceGUIMultiLineEditBoxInsertLink tainted by BlizzMove - Interface/AddOns/BlizzMove/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua:22
5/16 17:42:30.210  Global variable UIDD_REFRESH_OVERREAD_PATCH_VERSION tainted by BlizzMove - Interface/AddOns/BlizzMove/TaintLess.xml:<Scripts>:38
5/16 17:42:30.210  Global variable UIDROPDOWNMENU_OPEN_PATCH_VERSION tainted by BlizzMove - Interface/AddOns/BlizzMove/TaintLess.xml:<Scripts>:52
5/16 17:42:30.210  Global variable IOFRAME_SELECTION_PATCH_VERSION tainted by BlizzMove - Interface/AddOns/BlizzMove/TaintLess.xml:<Scripts>:64
5/16 17:42:30.210  Global variable EDITMAN_OPENDROP_PATCH_VERSION tainted by BlizzMove - Interface/AddOns/BlizzMove/TaintLess.xml:<Scripts>:76
5/16 17:42:30.210  Global variable OBJTRACK_DELAYUPDATE_PATCH_VERSION tainted by BlizzMove - Interface/AddOns/BlizzMove/TaintLess.xml:<Scripts>:98
5/16 17:42:30.210  Global variable BlizzMoveAPI tainted by BlizzMove - Interface/AddOns/BlizzMove/BlizzMoveAPI.lua:12
5/16 17:42:30.210  Global variable SLASH_ACECONSOLE_BLIZZMOVE1 tainted by BlizzMove - Interface/AddOns/BlizzMove/Libs/AceConsole-3.0/AceConsole-3.0.lua:95 RegisterChatCommand()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/BlizzMove.lua:1126
5/16 17:42:30.210      xpcall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:66 safecall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:494 InitializeAddon()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:619
5/16 17:42:30.210  Global variable SLASH_ACECONSOLE_BM1 tainted by BlizzMove - Interface/AddOns/BlizzMove/Libs/AceConsole-3.0/AceConsole-3.0.lua:95 RegisterChatCommand()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/BlizzMove.lua:1127
5/16 17:42:30.210      xpcall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:66 safecall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:494 InitializeAddon()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:619
5/16 17:42:30.210  Global variable SLASH_ACECONSOLE_BMDUMPCHANGEDCVARS1 tainted by BlizzMove - Interface/AddOns/BlizzMove/Libs/AceConsole-3.0/AceConsole-3.0.lua:95 RegisterChatCommand()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/BlizzMove.lua:1129
5/16 17:42:30.210      xpcall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:66 safecall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:494 InitializeAddon()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:619
5/16 17:42:30.210  Global variable SLASH_ACECONSOLE_BMDUMPTOPLEVELFRAMES1 tainted by BlizzMove - Interface/AddOns/BlizzMove/Libs/AceConsole-3.0/AceConsole-3.0.lua:95 RegisterChatCommand()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/BlizzMove.lua:1129
5/16 17:42:30.210      xpcall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:66 safecall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:494 InitializeAddon()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:619
5/16 17:42:30.210  Global variable SLASH_ACECONSOLE_BMDUMPMISSINGFRAMES1 tainted by BlizzMove - Interface/AddOns/BlizzMove/Libs/AceConsole-3.0/AceConsole-3.0.lua:95 RegisterChatCommand()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/BlizzMove.lua:1129
5/16 17:42:30.210      xpcall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:66 safecall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:494 InitializeAddon()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:619
5/16 17:42:30.210  Global variable SLASH_ACECONSOLE_BMDEBUGANCHOR1 tainted by BlizzMove - Interface/AddOns/BlizzMove/Libs/AceConsole-3.0/AceConsole-3.0.lua:95 RegisterChatCommand()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/BlizzMove.lua:1129
5/16 17:42:30.210      xpcall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:66 safecall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:494 InitializeAddon()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:619
5/16 17:42:30.210  Global variable SLASH_ACECONSOLE_BMDEBUGLOADALL1 tainted by BlizzMove - Interface/AddOns/BlizzMove/Libs/AceConsole-3.0/AceConsole-3.0.lua:95 RegisterChatCommand()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/BlizzMove.lua:1129
5/16 17:42:30.210      xpcall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:66 safecall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:494 InitializeAddon()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:619
5/16 17:42:30.210  Global variable SLASH_ACECONSOLE_BMDUMPDEBUGINFO1 tainted by BlizzMove - Interface/AddOns/BlizzMove/Libs/AceConsole-3.0/AceConsole-3.0.lua:95 RegisterChatCommand()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/BlizzMove.lua:1129
5/16 17:42:30.210      xpcall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:66 safecall()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:494 InitializeAddon()
5/16 17:42:30.210      Interface/AddOns/BlizzMove/Libs/AceAddon-3.0/AceAddon-3.0.lua:619
5/16 17:42:30.210  Global variable ChatThrottleLib tainted by BugSack - Interface/AddOns/BugSack/Libs/AceComm-3.0/ChatThrottleLib.lua:48
5/16 17:42:30.210  Global variable BugSack tainted by BugSack - Interface/AddOns/BugSack/core.lua:31
5/16 17:42:30.210  Global variable SLASH_BugSack1 tainted by BugSack - Interface/AddOns/BugSack/core.lua:149
5/16 17:42:32.438  Global variable AdventureJournal_Reward_OnEnter tainted by BlizzMove - Interface/AddOns/BlizzMove/Libs/AceHook-3.0/AceHook-3.0.lua:241 hook()
5/16 17:42:32.438      Interface/AddOns/BlizzMove/Libs/AceHook-3.0/AceHook-3.0.lua:321 RawHook()
5/16 17:42:32.438      Interface/AddOns/BlizzMove/BlizzMove.lua:1228 ?()
5/16 17:42:32.438      Interface/AddOns/BlizzMove/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua:109
5/16 17:42:32.438      securecallfunction()
5/16 17:42:32.438      Interface/AddOns/BlizzMove/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua:19 Dispatch()
5/16 17:42:32.438      Interface/AddOns/BlizzMove/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua:54 Fire()
5/16 17:42:32.438      Interface/AddOns/BlizzMove/Libs/AceEvent-3.0/AceEvent-3.0.lua:120
5/16 17:42:32.438      LoadAddOn()
5/16 17:42:32.438      Interface/FrameXML/UIParent.lua:545 UIParentLoadAddOn()
5/16 17:42:32.438      Interface/FrameXML/UIParent.lua:715 EncounterJournal_LoadUI()
5/16 17:42:32.438      Interface/FrameXML/UIParent.lua:1147 ToggleEncounterJournal()
5/16 17:42:32.438      TOGGLEENCOUNTERJOURNAL:1
5/16 17:42:38.020  SetPoint()
5/16 17:42:38.020  An action was blocked because of taint from BlizzMove - OnOpen()
5/16 17:42:38.020      Interface/AddOns/Blizzard_EncounterJournal/Blizzard_EncounterJournal.lua:587
5/16 17:42:38.020      EncounterJournal:Show()
5/16 17:42:38.020      Interface/FrameXML/UIParent.lua:2943 Frame:SetUIPanel()
5/16 17:42:38.020      Interface/FrameXML/UIParent.lua:2786 Frame:ShowUIPanel()
5/16 17:42:38.020      Interface/FrameXML/UIParent.lua:2651
5/16 17:42:38.020      Frame:SetAttribute()
5/16 17:42:38.020      Interface/FrameXML/UIParent.lua:3253 ShowUIPanel()
5/16 17:42:38.020      Interface/FrameXML/UIParent.lua:3214 ToggleFrame()
5/16 17:42:38.020      Interface/FrameXML/UIParent.lua:1150 ToggleEncounterJournal()
5/16 17:42:38.020      TOGGLEENCOUNTERJOURNAL:1
5/16 17:42:41.802  Execution tainted by BlizzMove while reading SLASH_ACECONSOLE_BMDUMPTOPLEVELFRAMES1 - Interface/FrameXML/ChatFrame.lua:2729 ChatFrame_ImportListToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:2777 ChatFrame_ImportAllListsToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:5222 ChatEdit_ParseText()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:4968 ChatEdit_OnSpacePressed()
5/16 17:42:41.802      ChatFrame1EditBox:hatFrame.xml:147_OnSpacePressed()
5/16 17:42:41.802  Execution tainted by BlizzMove while reading SLASH_ACECONSOLE_BMDUMPMISSINGFRAMES1 - Interface/FrameXML/ChatFrame.lua:2729 ChatFrame_ImportListToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:2777 ChatFrame_ImportAllListsToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:5222 ChatEdit_ParseText()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:4968 ChatEdit_OnSpacePressed()
5/16 17:42:41.802      ChatFrame1EditBox:hatFrame.xml:147_OnSpacePressed()
5/16 17:42:41.802  Execution tainted by BlizzMove while reading SLASH_ACECONSOLE_BLIZZMOVE1 - Interface/FrameXML/ChatFrame.lua:2729 ChatFrame_ImportListToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:2777 ChatFrame_ImportAllListsToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:5222 ChatEdit_ParseText()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:4968 ChatEdit_OnSpacePressed()
5/16 17:42:41.802      ChatFrame1EditBox:hatFrame.xml:147_OnSpacePressed()
5/16 17:42:41.802  Execution tainted by BlizzMove while reading SLASH_ACECONSOLE_BMDEBUGLOADALL1 - Interface/FrameXML/ChatFrame.lua:2729 ChatFrame_ImportListToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:2777 ChatFrame_ImportAllListsToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:5222 ChatEdit_ParseText()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:4968 ChatEdit_OnSpacePressed()
5/16 17:42:41.802      ChatFrame1EditBox:hatFrame.xml:147_OnSpacePressed()
5/16 17:42:41.802  Execution tainted by BlizzMove while reading SLASH_ACECONSOLE_BMDEBUGANCHOR1 - Interface/FrameXML/ChatFrame.lua:2729 ChatFrame_ImportListToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:2777 ChatFrame_ImportAllListsToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:5222 ChatEdit_ParseText()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:4968 ChatEdit_OnSpacePressed()
5/16 17:42:41.802      ChatFrame1EditBox:hatFrame.xml:147_OnSpacePressed()
5/16 17:42:41.802  Execution tainted by !BugGrabber while reading SLASH_BugGrabber1 - Interface/FrameXML/ChatFrame.lua:2729 ChatFrame_ImportListToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:2777 ChatFrame_ImportAllListsToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:5222 ChatEdit_ParseText()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:4968 ChatEdit_OnSpacePressed()
5/16 17:42:41.802      ChatFrame1EditBox:hatFrame.xml:147_OnSpacePressed()
5/16 17:42:41.802  Execution tainted by BlizzMove while reading SLASH_ACECONSOLE_BMDUMPDEBUGINFO1 - Interface/FrameXML/ChatFrame.lua:2729 ChatFrame_ImportListToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:2777 ChatFrame_ImportAllListsToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:5222 ChatEdit_ParseText()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:4968 ChatEdit_OnSpacePressed()
5/16 17:42:41.802      ChatFrame1EditBox:hatFrame.xml:147_OnSpacePressed()
5/16 17:42:41.802  Execution tainted by BlizzMove while reading SLASH_ACECONSOLE_BM1 - Interface/FrameXML/ChatFrame.lua:2729 ChatFrame_ImportListToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:2777 ChatFrame_ImportAllListsToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:5222 ChatEdit_ParseText()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:4968 ChatEdit_OnSpacePressed()
5/16 17:42:41.802      ChatFrame1EditBox:hatFrame.xml:147_OnSpacePressed()
5/16 17:42:41.802  Execution tainted by BlizzMove while reading SLASH_ACECONSOLE_BMDUMPCHANGEDCVARS1 - Interface/FrameXML/ChatFrame.lua:2729 ChatFrame_ImportListToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:2777 ChatFrame_ImportAllListsToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:5222 ChatEdit_ParseText()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:4968 ChatEdit_OnSpacePressed()
5/16 17:42:41.802      ChatFrame1EditBox:hatFrame.xml:147_OnSpacePressed()
5/16 17:42:41.802  Execution tainted by BugSack while reading SLASH_BugSack1 - Interface/FrameXML/ChatFrame.lua:2729 ChatFrame_ImportListToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:2777 ChatFrame_ImportAllListsToHash()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:5222 ChatEdit_ParseText()
5/16 17:42:41.802      Interface/FrameXML/ChatFrame.lua:4968 ChatEdit_OnSpacePressed()
5/16 17:42:41.802      ChatFrame1EditBox:hatFrame.xml:147_OnSpacePressed()

from blizzmove.

Numynum avatar Numynum commented on June 20, 2024

hm, unfortunately there's nothing interesting in there 😕

if you could, would you please do the same, but on the 10.1.5 PTR?
and instead of taintLog 2, use taintLog 11? that should give a ton more information, and hopefully that could pinpoint the exact cause 🙂

from blizzmove.

drnoonien avatar drnoonien commented on June 20, 2024

No realms currently up on the 10.1.5 PTR, will dump it when they're back. Want a taintLog 11 of retail as well?

from blizzmove.

Numynum avatar Numynum commented on June 20, 2024

unfortunately, taintLog 11 only works on test builds (10.1.0 PTR isn't using a test build either) so it'll have to wait until ptr comes back up

from blizzmove.

drnoonien avatar drnoonien commented on June 20, 2024

Taintlog 11 from 10.1.5 - https://github.com/Kiatra/BlizzMove/files/11495194/taint.log (12mb)

from blizzmove.

Related Issues (20)

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.