carvac / filmulator-gui Goto Github PK
View Code? Open in Web Editor NEWFilmulator --- Simplified raw editing with the power of film
Home Page: https://filmulator.org
License: Other
Filmulator --- Simplified raw editing with the power of film
Home Page: https://filmulator.org
License: Other
Also maybe make it logarithmic or something.
I checked out the master branch, ran qmake
Then, when I ran make
, I got the following:
$ make
Makefile:1198: warning: overriding recipe for target 'install_itemfolder_01'
Makefile:1189: warning: ignoring old recipe for target 'install_itemfolder_01'
Makefile:1202: warning: overriding recipe for target 'uninstall_itemfolder_01'
Makefile:1193: warning: ignoring old recipe for target 'uninstall_itemfolder_01'
g++ -c -pipe -std=c++11 -DTOUT -O3 -fprefetch-loop-arrays -fopenmp -fno-strict-aliasing -O2 -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_SQL_LIB -DQT_CORE_LIB -I. -Iqtquick2applicationviewer -isystem /usr/include/qt -isystem /usr/include/qt/QtQuick -isystem /usr/include/qt/QtWidgets -isystem /usr/include/qt/QtGui -isystem /usr/include/qt/QtQml -isystem /usr/include/qt/QtNetwork -isystem /usr/include/qt/QtSql -isystem /usr/include/qt/QtCore -I. -I/usr/lib/qt/mkspecs/linux-g++ -o vibranceSaturation.o core/vibranceSaturation.cpp
core/vibranceSaturation.cpp: In function ‘float log2(float)’:
core/vibranceSaturation.cpp:93:19: error: ‘float log2(float)’ conflicts with a previous declaration
float log2(float i)
^
In file included from core/filmSim.hpp:26:0,
from core/vibranceSaturation.cpp:1:
/usr/include/c++/6.1.1/cmath:1542:3: note: previous declaration ‘constexpr float std::log2(float)’
log2(float __x)
^~~~
make: *** [Makefile:1049: vibranceSaturation.o] Error 1
Currently there are no Windows builds available for Filmulator. Let's work together to build Filmulator on Windows and also to make build instructions which are easy to follow.
Undo the operation on an individual tool.
Cropping will have this issue as well.
My camera, the Sony Cyber Shot DSC-F828 uses Sony .SRF RAW files, which Filmulator doesn't natively support. I used Adobe DNG converter to make the .SRF a .DNG, and no matter what settings I use to convert it, Filmulator will only provide the following error in the terminal.
Error: Directory Sony2 with 25665 entries considered invalid; not read.
QSqlQuery::value: not positioned on a valid record
importWorker no replace, doesn't exist
Perhaps also select that image as well, if there's only one.
This has to do with the vector of the dates being too long or something.
Should use the thumbnail to show a preview of the currently selected image while loading.
Hello,
the software keeps crashing when I try to work on DNG files; the DNG files are files converted from Samsung NX1 (natively they are .SRW)
Launching Filmulator from the terminal, these are the messages I can see when the crash happens:
FilmImageProvider::requestImage Here? imagePipeline.cpp: Opening /media/sf_CondivisaInRete/SAM_1157.dng load start:2.8e-05 load time: 9.20721ImagePipeline::processImage: Demosaic complete. ImagePipeline::processImage: Prefilmulation complete. Initialization time: 1.07989 seconds Development time: 18.6551 seconds Develop time: 5.93951 seconds Diffuse time: 10.7072 seconds Layer mix time: 1.9574 seconds Agitate time: 0.049511 seconds Output density time: 0.434866 ImagePipeline::processImage: Filmulation complete. Request time: 32.6023 seconds qml: main.qml queueItem update url Warning: Exif tag Exif.Image.ProfileLookTableData not encoded terminate called after throwing an instance of 'Exiv2::BasicError<char>' what(): Size of Exif JPEG segment is larger than 65535 bytes Annullato (core dump creato)
For instance if input_image_cache is invalid, filmulated_image_cache is also invalid.
Segfault importing this:
http://rawtherapee.com/shared/test_images/hdrmerge_045.dng
Please try the other images from that folder, some of them are (intentionally) corrupt so you will get different kinds of segfaults.
as in the title.
It might happen only on initial startup.
I thought I'd give building filmulator-gui on mac...
This is a crash when trying to start up filmulator-gui built on mac Mac OS X 10.12.6 w/ Qt 5.11.0. System crash report:
Process: filmulator-gui [62965]
Path: /Users/USER/*/filmulator-gui.app/Contents/MacOS/filmulator-gui
Identifier: kd6kxr.filmulator-gui
Version: 0
Code Type: X86-64 (Native)
Parent Process: ??? [1]
Responsible: filmulator-gui [62965]
User ID: 501
Date/Time: 2018-09-12 20:53:35.061 -0700
OS Version: Mac OS X 10.12.6 (16G1510)
Report Version: 12
Anonymous UUID: 567E9ED4-5465-6075-F9A6-523A0FD4EEEA
Time Awake Since Boot: 130000 seconds
System Integrity Protection: enabled
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Application Specific Information:
abort() called
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x00007fffaa016d42 __pthread_kill + 10
1 libsystem_pthread.dylib 0x00007fffaa104457 pthread_kill + 90
2 libsystem_c.dylib 0x00007fffa9f7c420 abort + 129
3 org.qt-project.QtCore 0x00000001017ff079 qt_message_fatal(QtMsgType, QMessageLogContext const&, QString const&) + 9
4 org.qt-project.QtCore 0x000000010180085f QMessageLogger::fatal(char const*, ...) const + 213
5 org.qt-project.QtCore 0x000000010180bb4c QThread::~QThread() + 252
6 kd6kxr.filmulator-gui 0x00000001007e79f2 FilmImageProvider::~FilmImageProvider() + 242
7 kd6kxr.filmulator-gui 0x00000001007e7a85 non-virtual thunk to FilmImageProvider::~FilmImageProvider() + 21
8 org.qt-project.QtQml 0x00000001014a1421 QHash<QString, QSharedPointer<QQmlImageProviderBase> >::deleteNode2(QHashData::Node*) + 49
9 org.qt-project.QtCore 0x00000001018614f9 QHashData::free_helper(void (*)(QHashData::Node*)) + 73
10 org.qt-project.QtQml 0x0000000101497862 QQmlEnginePrivate::~QQmlEnginePrivate() + 930
11 org.qt-project.QtQml 0x000000010152abf3 QQmlApplicationEnginePrivate::~QQmlApplicationEnginePrivate() + 115
12 org.qt-project.QtCore 0x00000001019ee868 QObject::~QObject() + 1880
13 org.qt-project.QtQml 0x0000000101499572 QQmlEngine::~QQmlEngine() + 370
14 kd6kxr.filmulator-gui 0x00000001007c5c35 main + 3269
15 libdyld.dylib 0x00007fffa9ee8235 start + 1
There needs to be a better way to discern whether or not the value has changed in order to determine whether or not to write back to the database.
Or previous image if already at last image
Tooltip: "In case of emergency, break glass and press button. This greatly increases the filminess, in case Drama 100 wasn't enough for you."
Turning the Overdrive Mode switch on would disable the agitation.
For laptops it seems natural to scroll horizontally on the queue, but it doesn't work.
Canons have both star ratings and image protection from deletion;
Nikon has protection from deletion.
I don't know about other cameras.
Show a box in the corner of the image with the overall image and the current view within it.
Aside: Remove code that was supposed to reset view but doesn't work. We don't want to reset the view
For macOS 10.12,13,14,15: Sierra, High Sierra, Mojave, Catalina
https://kd6kxr.keybase.pub/Filmulator-v0.7.0-162-g9f6e796-Qt5.13.dmg
For MacOSX 10.11,12 El Capitan, Sierra
https://kd6kxr.keybase.pub/Filmulator-v0.7.0-162-g9f6e796-Qt5.11.dmg
I would like to be able to open raws without needing to "import" them first.
Stop zooming out when the image is about 1/10th of the screen size or about 20x zoomed in past 100%.
In Linux, the data should reside in '.local' and not directly in the home directory.
Sometimes, removing an image not at the front of the queue appears to remove an adjacent one (usually to the left of the selected one).
However, the correct one is in fact removed, but it's not corrected unless the program is restarted.
In the organize tab, it would be good to be able to select multiple pictures with the shift key and then put all of them in the queue.
Eventually, I would like to have batched, tagged uploading to major online photo sharing sites like Flickr, g+, Tumblr, and Facebook.
Hi Carlo,
Here's my summary on what is needed to build filmulator out-of-tree on Debian 10:
$ sudo apt-get install cmake git libexiv2-dev libraw-dev qt5-default libtiff5-dev libjpeg-dev qtdeclarative5-dev libqt5sql5-sqlite qml-module-qtquick2 qml-module-qtquick-dialogs qml-module-qtquick-layouts qml-module-qtquick-controls qml-module-qtqml-models2
Also build and install librtprocess.
$ git clone https://github.com/CarVac/filmulator-gui.git
$ cd filmulator-gui/filmulator-gui
$ git checkout highlightrecovery
Patch FindExiv2.cmake
:
diff --git a/filmulator-gui/cmake/Modules/FindExiv2.cmake b/filmulator-gui/cmake/Modules/FindExiv2.cmake
index b2f8bd3..fe03345 100644
--- a/filmulator-gui/cmake/Modules/FindExiv2.cmake
+++ b/filmulator-gui/cmake/Modules/FindExiv2.cmake
@@ -48,11 +48,11 @@ endif (EXIV2_LIBRARY)
# Get the version number from exiv2/version.hpp and store it in the cache:
if (EXIV2_INCLUDE_DIR AND NOT EXIV2_VERSION)
- if (EXISTS ${EXIV2_INCLUDE_DIR}/exiv2/exv_conf.h)
+# if (EXISTS ${EXIV2_INCLUDE_DIR}/exiv2/exv_conf.h)
set(EXIV_VERSION_HEADER ${EXIV2_INCLUDE_DIR}/exiv2/exv_conf.h)
- else()
+# else()
set(EXIV_VERSION_HEADER ${EXIV2_INCLUDE_DIR}/exiv2/version.hpp)
- endif()
+# endif()
file(READ ${EXIV_VERSION_HEADER} EXIV2_VERSION_CONTENT)
$ mkdir build
$ cd build
$ cmake ..
$ make -j [NUMOFCORES]
$ cd ..
$ ./build/filmulator-gui
This is just FYI. 😄
Best,
Flössie
Highlight red if it's not set.
It can be hard to get a specific value using the sliders. Consider adding text input (so the user can type in a specific value) or using a key modifier to slow down the slider.
Hi,
I am currently packaging filmulator-gui for Solus and stumbled upon a runtime error (the packaging itself went smooth).
When I try to import a picture into Filmulator it fails and the console outputs the attached error. Could this be related to the fact that I install filmulator-gui to /usr/bin and the rest of the files to /usr/lib and filmulator-gui tries to setup its database somewhere in the /usr-folder where it doesn't have write permissions?
QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
QSqlQuery::prepare: database not open
QSqlQuery::value: not positioned on a valid record
importWorker no replace, doesn't exist
QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
QSqlQuery::prepare: database not open
QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
QSqlQuery::prepare: database not open
QSqlQuery::value: not positioned on a valid record
QSqlQuery::prepare: database not open
QSqlQuery::prepare: database not open
QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
QSqlQuery::prepare: database not open
paramManager ProfTcaEnabled
QSqlQuery::value: not positioned on a valid record
paramManager ProfThighlightRecovery
QSqlQuery::value: not positioned on a valid record
paramManager ProfTexposureComp
QSqlQuery::value: not positioned on a valid record
paramManager ProfTtemperature
QSqlQuery::value: not positioned on a valid record
paramManager ProfTtint
QSqlQuery::value: not positioned on a valid record
paramManager ProfTinitialDeveloperConcentration
QSqlQuery::value: not positioned on a valid record
paramManager ProfTreservoirThickness
QSqlQuery::value: not positioned on a valid record
paramManager ProfTactiveLayerThickness
QSqlQuery::value: not positioned on a valid record
paramManager ProfTcrystalsPerPixel
QSqlQuery::value: not positioned on a valid record
paramManager ProfTinitialCrystalRadius
QSqlQuery::value: not positioned on a valid record
paramManager ProfTinitialSilverSaltDensity
QSqlQuery::value: not positioned on a valid record
paramManager ProfTdeveloperConsumptionConst
QSqlQuery::value: not positioned on a valid record
paramManager ProfTcrystalGrowthConst
QSqlQuery::value: not positioned on a valid record
paramManager ProfTsilverSaltConsumptionConst
QSqlQuery::value: not positioned on a valid record
paramManager ProfTtotalDevelopmentTime
QSqlQuery::value: not positioned on a valid record
paramManager ProfTagitateCount
QSqlQuery::value: not positioned on a valid record
paramManager ProfTdevelopmentSteps
QSqlQuery::value: not positioned on a valid record
paramManager ProfTfilmArea
QSqlQuery::value: not positioned on a valid record
paramManager ProfTsigmaConst
QSqlQuery::value: not positioned on a valid record
paramManager ProfTlayerMixConst
QSqlQuery::value: not positioned on a valid record
paramManager ProfTlayerTimeDivisor
QSqlQuery::value: not positioned on a valid record
paramManager ProfTrolloffBoundary
QSqlQuery::value: not positioned on a valid record
paramManager ProfTblackpoint
QSqlQuery::value: not positioned on a valid record
paramManager ProfTwhitepoint
QSqlQuery::value: not positioned on a valid record
paramManager ProfTshadowsX
QSqlQuery::value: not positioned on a valid record
paramManager ProfTshadowsY
QSqlQuery::value: not positioned on a valid record
paramManager ProfThighlightsX
QSqlQuery::value: not positioned on a valid record
paramManager ProfThighlightsY
QSqlQuery::value: not positioned on a valid record
paramManager ProfTvibrance
QSqlQuery::value: not positioned on a valid record
paramManager ProfTsaturation
QSqlQuery::value: not positioned on a valid record
QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
QSqlQuery::prepare: database not open
paramManager FTfilePath
QSqlQuery::value: not positioned on a valid record
paramManager FTsensitivity
QSqlQuery::value: not positioned on a valid record
paramManager FTexposureTime
QSqlQuery::value: not positioned on a valid record
paramManager FTaperture
QSqlQuery::value: not positioned on a valid record
paramManager FTfocalLength
QSqlQuery::value: not positioned on a valid record
QSqlQuery::prepare: database not open
QSqlQuery::value: not positioned on a valid record
QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
QSqlQuery::prepare: database not open
paramManager ProfTcaEnabled
QSqlQuery::value: not positioned on a valid record
paramManager ProfThighlightRecovery
QSqlQuery::value: not positioned on a valid record
paramManager ProfTexposureComp
QSqlQuery::value: not positioned on a valid record
paramManager ProfTtemperature
QSqlQuery::value: not positioned on a valid record
paramManager ProfTtint
QSqlQuery::value: not positioned on a valid record
paramManager ProfTinitialDeveloperConcentration
QSqlQuery::value: not positioned on a valid record
paramManager ProfTreservoirThickness
QSqlQuery::value: not positioned on a valid record
paramManager ProfTactiveLayerThickness
QSqlQuery::value: not positioned on a valid record
paramManager ProfTcrystalsPerPixel
QSqlQuery::value: not positioned on a valid record
paramManager ProfTinitialCrystalRadius
QSqlQuery::value: not positioned on a valid record
paramManager ProfTinitialSilverSaltDensity
QSqlQuery::value: not positioned on a valid record
paramManager ProfTdeveloperConsumptionConst
QSqlQuery::value: not positioned on a valid record
paramManager ProfTcrystalGrowthConst
QSqlQuery::value: not positioned on a valid record
paramManager ProfTsilverSaltConsumptionConst
QSqlQuery::value: not positioned on a valid record
paramManager ProfTtotalDevelopmentTime
QSqlQuery::value: not positioned on a valid record
paramManager ProfTagitateCount
QSqlQuery::value: not positioned on a valid record
paramManager ProfTdevelopmentSteps
QSqlQuery::value: not positioned on a valid record
paramManager ProfTfilmArea
QSqlQuery::value: not positioned on a valid record
paramManager ProfTsigmaConst
QSqlQuery::value: not positioned on a valid record
paramManager ProfTlayerMixConst
QSqlQuery::value: not positioned on a valid record
paramManager ProfTlayerTimeDivisor
QSqlQuery::value: not positioned on a valid record
paramManager ProfTrolloffBoundary
QSqlQuery::value: not positioned on a valid record
paramManager ProfTblackpoint
QSqlQuery::value: not positioned on a valid record
paramManager ProfTwhitepoint
QSqlQuery::value: not positioned on a valid record
paramManager ProfTshadowsX
QSqlQuery::value: not positioned on a valid record
paramManager ProfTshadowsY
QSqlQuery::value: not positioned on a valid record
paramManager ProfThighlightsX
QSqlQuery::value: not positioned on a valid record
paramManager ProfThighlightsY
QSqlQuery::value: not positioned on a valid record
paramManager ProfTvibrance
QSqlQuery::value: not positioned on a valid record
paramManager ProfTsaturation
QSqlQuery::value: not positioned on a valid record
QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
QSqlQuery::exec: database not open
QSqlQuery::prepare: database not open
QSqlQuery::prepare: database not open
QSqlQuery::prepare: database not open
QSqlQuery::exec: database not open
imagePipeline.cpp: Opening
load start:5e-06
processImage: Could not read input file!
QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
QSqlQuery::prepare: database not open
QSqlQuery::prepare: database not open
importFile SearchID:
Enabling the highlight recovery in the highlightrecovery branch produces the following reported crash:
Thread 8 Crashed:: QQuickPixmapReader
0 dyld 0x000000010f17c38e __abort_with_payload + 10
1 dyld 0x000000010f17bb80 abort_with_payload_wrapper_internal + 82
2 dyld 0x000000010f17bbb2 abort_with_payload + 9
3 dyld 0x000000010f13ba9d dyld::halt(char const*) + 343
4 dyld 0x000000010f13bbc7 dyld::fastBindLazySymbol(ImageLoader**, unsigned long) + 167
5 libdyld.dylib 0x00007fff63f4332e dyld_stub_binder + 282
6 ??? 0x000000010b0aa008 0 + 4480213000
7 filmulator 0x000000010b07d9ef FilmImageProvider::requestImage(QString const&, QSize*, QSize const&) + 959
8 filmulator 0x000000010b07e202 non-virtual thunk to FilmImageProvider::requestImage(QString const&, QSize*, QSize const&) + 18
9 org.qt-project.QtQuick 0x000000010b6a6e71 QQuickPixmapReader::processJob(QQuickPixmapReply*, QUrl const&, QString const&, QQmlImageProviderBase::ImageType, QQuickImageProvider*) + 3073
10 org.qt-project.QtQuick 0x000000010b6a5e09 QQuickPixmapReader::processJobs() + 1641
11 org.qt-project.QtQuick 0x000000010b6a5788 QQuickPixmapReaderThreadObject::event(QEvent*) + 24
12 org.qt-project.QtWidgets 0x000000010c9bef12 QApplicationPrivate::notify_helper(QObject*, QEvent*) + 306
13 org.qt-project.QtWidgets 0x000000010c9c02ed QApplication::notify(QObject*, QEvent*) + 573
14 org.qt-project.QtCore 0x000000010c0d954f QCoreApplication::notifyInternal2(QObject*, QEvent*) + 159
15 org.qt-project.QtCore 0x000000010c0da722 QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) + 850
16 org.qt-project.QtCore 0x000000010c12f5b9 QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 73
17 org.qt-project.QtCore 0x000000010c0d50a2 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 418
18 org.qt-project.QtCore 0x000000010bf1f101 QThread::exec() + 113
19 org.qt-project.QtQuick 0x000000010b6a87ee QQuickPixmapReader::run() + 286
20 org.qt-project.QtCore 0x000000010bf28657 QThreadPrivate::start(void*) + 359
21 libsystem_pthread.dylib 0x00007fff6414b2eb _pthread_body + 126
22 libsystem_pthread.dylib 0x00007fff6414e249 _pthread_start + 66
23 libsystem_pthread.dylib 0x00007fff6414a40d thread_start + 13
They probably need a flag in the qml, that's all.
Should be able to copy settings from one image to another.
Currently the queue flickers (a small bug that's currently helpful), but it's not obvious what has happened if the queue is running off the screen.
Options to consider:
Flash orange on the edge of the queue
Scroll queue to the newest queued item
Animate pictures "flying" to the queue while shrinking and fading
Running git-master as of 2016-12-30.
The mouseover tip text for "Tint" says that negative values are magenta, but the slider only goes down to 0.1. It looks like values < 1 are magenta.
Hey @CarVac
We just met in LGM and I saw your talk there. One person came in the Q&A up with the info that your Tab is looking the same as your Buttons. I would add that your Tool-Tip also look the same. I think you care a lot about ui-design and probably we can start working on the UI. My suggestion here tries not to make your life hard. So I suggest just a subtle change (for now ;)
This is NOT my suggestion! Just to show that usually there is a differentiation in UI if the function is different
Change the top-left corner (or the one next to the thing you'd like to explain) to a hard edge not rounded.
Remove transparency of the background. The transparency is distracting and makes the text less readable
Occasionally the pipeline doesn't output anything, and the jpeg library crashes when being asked to write nothing to the image. I think.
Rebuilding fixed it, but now there are two failed images in the database with no thumbs.
We need to catch the error and remove the failures from the database if it happens.
Some bottom and right edges seem to have at least one row of black pixels.
Luminance by Hue, Vibrance by Hue, Hue shift by original Hue
Add further non-linearity to preserve precision while expanding range.
Olympus format causing a crash, perhaps another example of LibRaw hitting the top of stack.
Example crashing ORF https://raw.pixls.us/getfile.php/2785/nice/Olympus%20-%20E-M10%20Mark%20II%20-%2016bit%20(4:3).ORF
From the console:
Qt has caught an exception thrown from an event handler. Throwing
exceptions from an event handler is not supported in Qt.
You must not let any exception whatsoever propagate through Qt code.
If that is not possible, in Qt 5 you must at least reimplement
QCoreApplication::notify() and catch all exceptions there.
libc++abi.dylib: terminating with uncaught exception of type Exiv2::BasicError<char>: tiff directory length is too large
Abort trap: 6
I would like to see all imported images without needing to hunt them down in the calendar.
If at 100% and you zoom out while the image is still panning, it goes black and then slides in from the top left.
Perhaps stop panning before zoom actions.
We need to both gracefully handle future dates in the date histogram (add one more bin for the future?) and also set the capture date/time equal to the import date/time.
Probably needs some interlocks.
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.