Code Monkey home page Code Monkey logo

Comments (9)

end2endzone avatar end2endzone commented on June 10, 2024

Hi. Thank you for trying out the library.

Looking at the error you pasted, it seems that your code is trying to use a custom timing function because you are using a special constructor:

SoftTimerMillis() : SoftTimer(&millis);

(you probably created an instance of SoftTimerMillis in your example)

I do not know about 8266 but on an arduino, the millis() function is already linked with a SoftTimer instance so you do not have to specify your own timing function.
In other words, you can just do SoftTimer myTimer;.
Maybe this is something particular about 8266.

To use your own timing function, your custom timing function need to have no argument and return an uint32_t. This is not a native c++ type but a construction that can vary on each platform. Based on your error message SoftTimer::CounterFunctionPointer {aka unsigned int ()()}, it seems to be resolving to an unsigned int.
However, the millis() function is returning an long unsigned int. This is somewhat strange to me as I am more used to deal the term unsigned first followed by either int or long. Anyway, I think long unsigned int is the same as an unsigned long which is not the same type (and possibly not the same size) as an unsigned int.
This is why the compiler is complaining about the problem. It tell you that both type are not identical. With the -fpermissive compilor flag, it could copy the unsigned long to the unsigned int but there is a possibility of truncating the value since one type is bigger than the other.

I think the problem here relies on the fact that, for the arduino platform, uint32_t resolves to an unsigned long (or that unsigned int and unsigned long are the same size) and that matches the return type of the millis() function.
When programming for the 8266, uint32_t and the return type of millis() don't match.

I think you could solve the issue by changing the definition of CounterFunctionPointer from uint32_t to unsigned long.

Please try this and tell me if this as indeed solved the compilation problem.

from softtimers.

dduehren avatar dduehren commented on June 10, 2024

Maybe I'll get back to it, right now I'm using Ticker V4.0.

from softtimers.

dduehren avatar dduehren commented on June 10, 2024

I came back to look at this and just tried to compile your countdown example - no modifications and got similar result. Have you tried running your examples on an 8266? I'm not trying to make my own private timer, at least not yet. I just want to run some of your examples and they don't run on the 9266.

  • David

`Arduino: 1.8.13 (Windows 10), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"

C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\David Duehren\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\David Duehren\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries D:\David\MyDocuments\Arduino\libraries -fqbn=esp8266:esp8266:nodemcuv2:xtal=80,vt=flash,exception=legacy,ssl=all,eesz=4M2M,led=2,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200 -vid-pid=10C4_EA60 -ide-version=10813 -build-path C:\Users\DAVIDD1\AppData\Local\Temp\arduino_build_185572 -warnings=none -build-cache C:\Users\DAVIDD1\AppData\Local\Temp\arduino_cache_51041 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.python3.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\python3\3.7.2-post1 -prefs=runtime.tools.python3-3.7.2-post1.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\python3\3.7.2-post1 -prefs=runtime.tools.mkspiffs.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\mkspiffs\2.5.0-4-b40a506 -prefs=runtime.tools.mkspiffs-2.5.0-4-b40a506.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\mkspiffs\2.5.0-4-b40a506 -prefs=runtime.tools.mklittlefs.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\mklittlefs\2.5.0-4-fe5bb56 -prefs=runtime.tools.mklittlefs-2.5.0-4-fe5bb56.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\mklittlefs\2.5.0-4-fe5bb56 -prefs=runtime.tools.xtensa-lx106-elf-gcc.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\2.5.0-4-b40a506 -prefs=runtime.tools.xtensa-lx106-elf-gcc-2.5.0-4-b40a506.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\2.5.0-4-b40a506 -verbose D:\David\MyDocuments\Arduino\libraries\SoftTimers\examples\Countdown\Countdown.ino

C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\David Duehren\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\David Duehren\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries D:\David\MyDocuments\Arduino\libraries -fqbn=esp8266:esp8266:nodemcuv2:xtal=80,vt=flash,exception=legacy,ssl=all,eesz=4M2M,led=2,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200 -vid-pid=10C4_EA60 -ide-version=10813 -build-path C:\Users\DAVIDD1\AppData\Local\Temp\arduino_build_185572 -warnings=none -build-cache C:\Users\DAVIDD1\AppData\Local\Temp\arduino_cache_51041 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.python3.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\python3\3.7.2-post1 -prefs=runtime.tools.python3-3.7.2-post1.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\python3\3.7.2-post1 -prefs=runtime.tools.mkspiffs.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\mkspiffs\2.5.0-4-b40a506 -prefs=runtime.tools.mkspiffs-2.5.0-4-b40a506.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\mkspiffs\2.5.0-4-b40a506 -prefs=runtime.tools.mklittlefs.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\mklittlefs\2.5.0-4-fe5bb56 -prefs=runtime.tools.mklittlefs-2.5.0-4-fe5bb56.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\mklittlefs\2.5.0-4-fe5bb56 -prefs=runtime.tools.xtensa-lx106-elf-gcc.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\2.5.0-4-b40a506 -prefs=runtime.tools.xtensa-lx106-elf-gcc-2.5.0-4-b40a506.path=C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\2.5.0-4-b40a506 -verbose D:\David\MyDocuments\Arduino\libraries\SoftTimers\examples\Countdown\Countdown.ino

Using board 'nodemcuv2' from platform in folder: C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4

Using core 'esp8266' from platform in folder: C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4

Detecting libraries used...

"C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\2.5.0-4-b40a506/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/include" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/lwip2/include" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/libc/xtensa-lx106-elf/include" "-IC:\Users\DAVIDD1\AppData\Local\Temp\arduino_build_185572/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=gnu++11 -ffunction-sections -fdata-sections -fno-exceptions -w -x c++ -E -CC -DNONOSDK22x_190703=1 -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 -DARDUINO=10813 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD="ESP8266_NODEMCU"" -DLED_BUILTIN=2 -DFLASHMODE_DIO -DESP8266 "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\cores\esp8266" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\variants\nodemcu" "C:\Users\DAVIDD1\AppData\Local\Temp\arduino_build_185572\sketch\Countdown.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE

Alternatives for SoftTimers.h: [[email protected]]

ResolveLibrary(SoftTimers.h)

-> candidates: [[email protected]]

"C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\2.5.0-4-b40a506/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/include" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/lwip2/include" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/libc/xtensa-lx106-elf/include" "-IC:\Users\DAVIDD1\AppData\Local\Temp\arduino_build_185572/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=gnu++11 -ffunction-sections -fdata-sections -fno-exceptions -w -x c++ -E -CC -DNONOSDK22x_190703=1 -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 -DARDUINO=10813 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD="ESP8266_NODEMCU"" -DLED_BUILTIN=2 -DFLASHMODE_DIO -DESP8266 "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\cores\esp8266" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\variants\nodemcu" "-ID:\David\MyDocuments\Arduino\libraries\SoftTimers\src" "C:\Users\DAVIDD1\AppData\Local\Temp\arduino_build_185572\sketch\Countdown.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE

"C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\2.5.0-4-b40a506/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/include" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/lwip2/include" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/libc/xtensa-lx106-elf/include" "-IC:\Users\DAVIDD~1\AppData\Local\Temp\arduino_build_185572/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=gnu++11 -ffunction-sections -fdata-sections -fno-exceptions -w -x c++ -E -CC -DNONOSDK22x_190703=1 -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 -DARDUINO=10813 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD="ESP8266_NODEMCU"" -DLED_BUILTIN=2 -DFLASHMODE_DIO -DESP8266 "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\cores\esp8266" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\variants\nodemcu" "-ID:\David\MyDocuments\Arduino\libraries\SoftTimers\src" "D:\David\MyDocuments\Arduino\libraries\SoftTimers\src\SoftTimers.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE

Generating function prototypes...

"C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\2.5.0-4-b40a506/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/include" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/lwip2/include" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/libc/xtensa-lx106-elf/include" "-IC:\Users\DAVIDD1\AppData\Local\Temp\arduino_build_185572/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=gnu++11 -ffunction-sections -fdata-sections -fno-exceptions -w -x c++ -E -CC -DNONOSDK22x_190703=1 -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 -DARDUINO=10813 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD="ESP8266_NODEMCU"" -DLED_BUILTIN=2 -DFLASHMODE_DIO -DESP8266 "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\cores\esp8266" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\variants\nodemcu" "-ID:\David\MyDocuments\Arduino\libraries\SoftTimers\src" "C:\Users\DAVIDD1\AppData\Local\Temp\arduino_build_185572\sketch\Countdown.ino.cpp" -o "C:\Users\DAVIDD~1\AppData\Local\Temp\arduino_build_185572\preproc\ctags_target_for_gcc_minus_e.cpp" -DARDUINO_LIB_DISCOVERY_PHASE

"C:\Users\David Duehren\AppData\Local\Arduino15\packages\builtin\tools\ctags\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\Users\DAVIDD~1\AppData\Local\Temp\arduino_build_185572\preproc\ctags_target_for_gcc_minus_e.cpp"

Compiling sketch...

"C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\python3\3.7.2-post1/python3" "C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/signing.py" --mode header --publickey "D:\David\MyDocuments\Arduino\libraries\SoftTimers\examples\Countdown/public.key" --out "C:\Users\DAVIDD~1\AppData\Local\Temp\arduino_build_185572/core/Updater_Signing.h"

"C:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\2.5.0-4-b40a506/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/include" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/lwip2/include" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/sdk/libc/xtensa-lx106-elf/include" "-IC:\Users\DAVIDD1\AppData\Local\Temp\arduino_build_185572/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=gnu++11 -MMD -ffunction-sections -fdata-sections -fno-exceptions -DNONOSDK22x_190703=1 -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 -DARDUINO=10813 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD="ESP8266_NODEMCU"" -DLED_BUILTIN=2 -DFLASHMODE_DIO -DESP8266 "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\cores\esp8266" "-IC:\Users\David Duehren\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\variants\nodemcu" "-ID:\David\MyDocuments\Arduino\libraries\SoftTimers\src" "C:\Users\DAVIDD1\AppData\Local\Temp\arduino_build_185572\sketch\Countdown.ino.cpp" -o "C:\Users\DAVIDD~1\AppData\Local\Temp\arduino_build_185572\sketch\Countdown.ino.cpp.o"

In file included from D:\David\MyDocuments\Arduino\libraries\SoftTimers\examples\Countdown\Countdown.ino:1:0:

D:\David\MyDocuments\Arduino\libraries\SoftTimers\src/SoftTimers.h: In constructor 'SoftTimerMillis::SoftTimerMillis()':

D:\David\MyDocuments\Arduino\libraries\SoftTimers\src/SoftTimers.h:122:40: error: invalid conversion from 'long unsigned int ()()' to 'SoftTimer::CounterFunctionPointer {aka unsigned int ()()}' [-fpermissive]

SoftTimerMillis() : SoftTimer(&millis)

                                    ^

D:\David\MyDocuments\Arduino\libraries\SoftTimers\src/SoftTimers.h:36:3: error: initializing argument 1 of 'SoftTimer::SoftTimer(SoftTimer::CounterFunctionPointer)' [-fpermissive]

SoftTimer(CounterFunctionPointer iCntFuncPtr);

^

D:\David\MyDocuments\Arduino\libraries\SoftTimers\src/SoftTimers.h: In constructor 'SoftTimerMicros::SoftTimerMicros()':

D:\David\MyDocuments\Arduino\libraries\SoftTimers\src/SoftTimers.h:131:40: error: invalid conversion from 'long unsigned int ()()' to 'SoftTimer::CounterFunctionPointer {aka unsigned int ()()}' [-fpermissive]

SoftTimerMicros() : SoftTimer(&micros)

                                    ^

D:\David\MyDocuments\Arduino\libraries\SoftTimers\src/SoftTimers.h:36:3: error: initializing argument 1 of 'SoftTimer::SoftTimer(SoftTimer::CounterFunctionPointer)' [-fpermissive]

SoftTimer(CounterFunctionPointer iCntFuncPtr);

^

Using library SoftTimers at version 1.3.0 in folder: D:\David\MyDocuments\Arduino\libraries\SoftTimers

exit status 1

Error compiling for board NodeMCU 1.0 (ESP-12E Module).

`

from softtimers.

end2endzone avatar end2endzone commented on June 10, 2024

Hi.
Thank you for getting back to me and trying to debug the library.

Have you tried running your examples on an 8266?

No. I don't have access to an ESP8266. This makes the debugging of the problem complicated. I wish you could help me debug the library (see below) and have a solution that works on most platforms.

I think you could solve the issue by changing the definition of CounterFunctionPointer from uint32_t to unsigned long.
Please try this and tell me if this as indeed solved the compilation problem.

Have you tried the proposed solution above ? I think it would solve the issue.

from softtimers.

dduehren avatar dduehren commented on June 10, 2024

from softtimers.

end2endzone avatar end2endzone commented on June 10, 2024

Hi.
I have changed the definition of CounterFunctionPointer to unsigned long. If you need to quickly download the library again, you can do so by downloading the code "as is" from https://github.com/end2endzone/SoftTimers/archive/refs/heads/master.zip.

I have also made corrections in win32Arduino (the unit test library) to change the return type of millis and micros functions to unsigned long (which is matching the official Arduino.h definition). This has actually created issues with SoftTimer unit tests. Please allow me a few days to fix theses problem and I will create an official new release of the library that includes the fix for this issue.

from softtimers.

dduehren avatar dduehren commented on June 10, 2024

from softtimers.

end2endzone avatar end2endzone commented on June 10, 2024

I have released version 2.0.0. The Arduino Library Manager should pickup this new release in a few days and allow you to download and install the library.

I will close this issue but if you ever have a problem related to this, don't hesitate to reopen

from softtimers.

dduehren avatar dduehren commented on June 10, 2024

from softtimers.

Related Issues (10)

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.