procxx / kepka Goto Github PK
View Code? Open in Web Editor NEWUnofficial Telegram Desktop messaging app
Home Page: https://procxx.github.io
License: Other
Unofficial Telegram Desktop messaging app
Home Page: https://procxx.github.io
License: Other
Currently, we have a ton of warnings. On some distros it interprets like errors. We need to fix these warnings.
Some warnings are simple and could be fixed automatically with brand new C++17 features like [[maybe-unused]]
, [[fallthrough]]
, some warnings related to Qt/stdint types collision (see bug #18 , for example).
Links to warning-prone lines are welcomed in comments.
Show only unread chats when this is enabled;
for quick on/off place it somewhere reachable - e.g. a simple checkbox next to the Search bar.
The work on it in progress in this tree.
These headers contains wacky and counter-semantic implementations of some rarely used things. We should replace that stuff:
Suspend thread while GIF tab is not visible.
These tabs will allow to filter all entropy existing in Telegram chats.
Example:
We could filter chats for chat type (bots, groups, supergroups, channels), for read/unread markups. These filters are proposed to add to search label
(For clarifying the comments: The title was "Drop windows 32 bit support" - leha-bot)
We could separate the MTProto logic from UI and make the library.
After removing old updater, follow up in task #19
We need to backport this three commits:
Similar to plus messenger; make 3 buttons just below the search bar
We should set up Travis and Appveyor to build the code in this repository.
We should update the instruction book, in particular the build-related parts on operating systems:
codegen/style/generator.cpp:1189: auto pathAndModifiers = filepath.split('-');
this breaks if build directory path contains a -
remove this assumption and fix faulty code
==26577==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6080000040f4 at pc 0x00000058ebfc bp 0x7ffd8fecbc20 sp 0x7ffd8fecb3d0
READ of size 53 at 0x6080000040f4 thread T0
#0 0x58ebfb in __interceptor_strndup.part.278 (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x58ebfb)
#1 0x7fb49177f60e (/usr/lib/x86_64-linux-gnu/libxkbcommon-x11.so.0+0x460e)
#2 0x7fb49177ec61 in xkb_x11_keymap_new_from_device (/usr/lib/x86_64-linux-gnu/libxkbcommon-x11.so.0+0x3c61)
#3 0x7fb49ad1a1fc (/usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5+0x421fc)
#4 0x7fb49ad1b28c (/usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5+0x4328c)
#5 0x7fb49ad15a1a in QXcbConnection::QXcbConnection(QXcbNativeInterface*, bool, unsigned int, char const*) (/usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5+0x3da1a)
#6 0x7fb49ad19019 in QXcbIntegration::QXcbIntegration(QStringList const&, int&, char**) (/usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5+0x41019)
#7 0x7fb49afdb2aa in _init (/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so+0x12aa)
#8 0x7fb4b9cc2f8c in QPlatformIntegrationFactory::create(QString const&, QStringList const&, int&, char**, QString const&) (/usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0xe8f8c)
#9 0x7fb4b9cd3349 in QGuiApplicationPrivate::createPlatformIntegration() (/usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0xf9349)
#10 0x7fb4b9cd3e3c in QGuiApplicationPrivate::createEventDispatcher() (/usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0xf9e3c)
#11 0x7fb4b9721b84 in QCoreApplicationPrivate::init() (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x290b84)
#12 0x7fb4b9cd58ce in QGuiApplicationPrivate::init() (/usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0xfb8ce)
#13 0x7fb4be005288 in QApplicationPrivate::init() (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x159288)
#14 0x28ff1ad in Application::Application(int&, char**) /home/vista/dev/tdesktop/Telegram/SourceFiles/application.cpp:75:52
#15 0x2974fc8 in main /home/vista/dev/tdesktop/Telegram/SourceFiles/main.cpp:48:15
#16 0x7fb4b83b61c0 in __libc_start_main /build/glibc-CxtIbX/glibc-2.26/csu/../csu/libc-start.c:308
#17 0x500389 in _start (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x500389)
0x6080000040f4 is located 0 bytes to the right of 84-byte region [0x6080000040a0,0x6080000040f4)
allocated by thread T1 (QXcbEventReader) here:
#0 0x5bfd80 in __interceptor_malloc (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x5bfd80)
#1 0x7fb4ae09ae2b (/usr/lib/x86_64-linux-gnu/libxcb.so.1+0xde2b)
Thread T1 (QXcbEventReader) created by T0 here:
#0 0x519400 in pthread_create (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x519400)
#1 0x7fb4b953c795 in QThread::start(QThread::Priority) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0xab795)
SUMMARY: AddressSanitizer: heap-buffer-overflow (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x58ebfb) in __interceptor_strndup.part.278
Shadow bytes around the buggy address:
0x0c107fff87c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c107fff87d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c107fff87e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c107fff87f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c107fff8800: fa fa fa fa fd fd fd fd fd fd fd fd fd fd fd fa
=>0x0c107fff8810: fa fa fa fa 00 00 00 00 00 00 00 00 00 00[04]fa
0x0c107fff8820: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c107fff8830: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c107fff8840: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c107fff8850: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c107fff8860: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
QApplication: invalid style override passed, ignoring it.
=================================================================
==26577==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6040000d4bff at pc 0x0000005992fb bp 0x7ffd8fec5d90 sp 0x7ffd8fec5540
READ of size 7 at 0x6040000d4bff thread T0
#0 0x5992fa in __interceptor_memcmp.part.282 (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x5992fa)
#1 0x6c84b7 in Lang::GetKeyIndex(QLatin1String) /home/vista/dev/tdesktop/cmake-build-debug/Telegram/lang_auto.cpp:13610:20
#2 0x1c431f6 in LangKey Lang::Instance::ParseKeyValue<std::vector<QString, std::allocator<QString> > >(QByteArray const&, QByteArray const&, std::vector<QString, std::allocator<QString> >&) /home/vista/dev/tdesktop/Telegram/SourceFiles/lang/lang_instance.cpp:453:18
#3 0x1c37bbb in Lang::Instance::applyValue(QByteArray const&, QByteArray const&) /home/vista/dev/tdesktop/Telegram/SourceFiles/lang/lang_instance.cpp:469:15
#4 0x1c3762a in Lang::Instance::fillFromSerialized(QByteArray const&) /home/vista/dev/tdesktop/Telegram/SourceFiles/lang/lang_instance.cpp:319:3
#5 0x222ac02 in Local::readLangPack() /home/vista/dev/tdesktop/Telegram/SourceFiles/storage/localstorage.cpp:3947:19
#6 0x2217667 in Local::start() /home/vista/dev/tdesktop/Telegram/SourceFiles/storage/localstorage.cpp:2335:2
#7 0x2b46bbf in Messenger::startLocalStorage() /home/vista/dev/tdesktop/Telegram/SourceFiles/messenger.cpp:477:2
#8 0x2b452cc in Messenger::Messenger() /home/vista/dev/tdesktop/Telegram/SourceFiles/messenger.cpp:91:2
#9 0x290b4a7 in std::_MakeUniq<Messenger>::__single_object std::make_unique<Messenger>() /usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/bits/unique_ptr.h:825:34
#10 0x2908c75 in Application::createMessenger() /home/vista/dev/tdesktop/Telegram/SourceFiles/application.cpp:302:23
#11 0x2904c71 in Sandbox::launch() /home/vista/dev/tdesktop/Telegram/SourceFiles/application.cpp:410:17
#12 0x2900196 in Application::singleInstanceChecked() /home/vista/dev/tdesktop/Telegram/SourceFiles/application.cpp:209:4
#13 0x29036f1 in Application::socketError(QLocalSocket::LocalSocketError) /home/vista/dev/tdesktop/Telegram/SourceFiles/application.cpp:182:2
#14 0x2cb706d in Application::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) /home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram_autogen/T6Y2NIRYHF/moc_application.cpp:116:21
#15 0x7fb4b97498e4 in QMetaObject::activate(QObject*, int, int, void**) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2b88e4)
#16 0x7fb4bdc08950 in QLocalSocket::error(QLocalSocket::LocalSocketError) (/usr/lib/x86_64-linux-gnu/libQt5Network.so.5+0xe7950)
#17 0x7fb4bdc16d89 (/usr/lib/x86_64-linux-gnu/libQt5Network.so.5+0xf5d89)
#18 0x7fb4bdc17631 (/usr/lib/x86_64-linux-gnu/libQt5Network.so.5+0xf6631)
#19 0x7fb4bdc1780b in QLocalSocket::connectToServer(QFlags<QIODevice::OpenModeFlag>) (/usr/lib/x86_64-linux-gnu/libQt5Network.so.5+0xf680b)
#20 0x28ffce4 in Application::Application(int&, char**) /home/vista/dev/tdesktop/Telegram/SourceFiles/application.cpp:101:16
#21 0x2974fc8 in main /home/vista/dev/tdesktop/Telegram/SourceFiles/main.cpp:48:15
#22 0x7fb4b83b61c0 in __libc_start_main /build/glibc-CxtIbX/glibc-2.26/csu/../csu/libc-start.c:308
#23 0x500389 in _start (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x500389)
0x6040000d4bff is located 0 bytes to the right of 47-byte region [0x6040000d4bd0,0x6040000d4bff)
allocated by thread T0 here:
#0 0x5bfd80 in __interceptor_malloc (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x5bfd80)
#1 0x7fb4b953e9f1 in QArrayData::allocate(unsigned long, unsigned long, unsigned long, QFlags<QArrayData::AllocationOption>) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0xad9f1)
SUMMARY: AddressSanitizer: heap-buffer-overflow (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x5992fa) in __interceptor_memcmp.part.282
Shadow bytes around the buggy address:
0x0c0880012920: fa fa 00 00 00 00 00 07 fa fa 00 00 00 00 00 04
0x0c0880012930: fa fa 00 00 00 00 00 06 fa fa 00 00 00 00 00 02
0x0c0880012940: fa fa 00 00 00 00 00 07 fa fa 00 00 00 00 01 fa
0x0c0880012950: fa fa 00 00 00 00 00 00 fa fa 00 00 00 00 04 fa
0x0c0880012960: fa fa 00 00 00 00 06 fa fa fa 00 00 00 00 00 02
=>0x0c0880012970: fa fa 00 00 00 00 00 03 fa fa 00 00 00 00 00[07]
0x0c0880012980: fa fa 00 00 00 00 00 03 fa fa 00 00 00 00 07 fa
0x0c0880012990: fa fa 00 00 00 00 00 06 fa fa 00 00 00 00 00 07
0x0c08800129a0: fa fa 00 00 00 00 00 05 fa fa 00 00 00 00 07 fa
0x0c08800129b0: fa fa 00 00 00 00 00 fa fa fa 00 00 00 00 00 01
0x0c08800129c0: fa fa 00 00 00 00 00 03 fa fa 00 00 00 00 00 03
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
OpenType support missing for script 11
OpenType support missing for script 11
=================================================================
Seemingly each of those connected to corresponding error message (QApplication: invalid style override passed, ignoring it.
and OpenType support missing for script 11
)
Allow for setting the default notification behavior to either on or off. Currently, all notifications for chats are off unless set to on in each new chat.
For example, see here
Apply this in our copy.
(reference here)
Do not hardcode AppId in the code, this part is for CI vaults or something.
Allow for double-clicking messages to reply to them.
Telegram mobile now refers to chat with yourself as "Saved Messages" and displays forwarded messages as incoming messages.
Currently, the file download location is hardcoded (at least on Windows) to ~/Downloads/Telegram Desktop/
. I suggest it should be possible to change in the settings.
Simply ignore the messages from the users you've ignored; unless you're an admin in this chat (?)
Completely remove cloud translations support. Use bundled instead.
The Duplicating code never changes...
We should clean at most all code duplications. Feel free to add URLs to duplicated code chunks.
Change name, icon.
Don't forget edit .rc file
Many places where custom types are INTRODUCED and some are even unused.
-
), e.g. C:\monkey-coders\kepka
Possible reason per @xvitaly: codegen uses constructs such as auto pathAndModifiers = fullpath.split('-');
to delimit the path from the command-line arguments. That breaks the build.
Possible places where it's used:
Build the project on the path that doesn't contain dashes.
F3 / Shift-F3 or Vim-like or vise versa.
(**x** y z)
in chat ⇒ it formats the x
in bold (OK).«**x** y z»
⇒ it doesn't format the bold text and leaves *
as is (FAIL).See upstream issue telegramdesktop/tdesktop#3867 for list of additional characters.
The Russian quote marks should be considered the same as ordinary braces in context of formatting. x
should be bold in both samples.
Russian quote marks considered as ordinary text, formatting doesn't work.
Operating system: Windows 8.1
Version of Telegram Desktop: 1.1.23
RelWithDebInfo
on Appveyorctest
(ctest .
, see on Travis)Release
to GitHub releases (see this as an example)So this is going to be something painful but I've done everything I can to prove this issue. If you don't have a good headphones, you're not helpful here. Basically, the issue title says it all: the sound quality is terrible, music is distorted, and, considering that thousands of people are using Telegram mobile client for music and Kepka is going to be cross-compilable, it's not just issue, it's a nightmare of any contributor.
Just download any music piece and compare sound that comes out of Telegram with sound from any other software.
Here I'm actually going to explain my analysis. I've done it with MP3 for the first time, just for fun, but in this case I'm going to use a song from Monstercat FLAC pack. For obvious reasons, I can't post it fully, but if you have a FLAC record, the song name is Muzzy - Spectrum
, and here's SHA512 sum: d2f04f81c8bfd51fb8eb9d6b05cebfce58a3781b648e2324edc02b8341cab2fa40856aa4784463a9b4eb945a420602085110a1664048ad45fd293f866e70cc72
AUDIOCHECKER report:
AUDIOCHECKER v2.0 beta (build 457) - by Dester - [email protected]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Path: ...\2017 - [MCEP113] - Muzzy - Spectrum EP
01 -=- 01. Muzzy - Spectrum.flac -=- CDDA (100%)
02 -=- 02. Muzzy - Lost Forever.flac -=- CDDA (100%)
03 -=- 03. Muzzy - Break Away (feat. Priority One).flac -=- CDDA (99%)
04 -=- 04. Muzzy - Outsiders (feat. Charlotte Haining).flac -=- CDDA (100%)
Summary: 99,75% CDDA
105067060
Music is distorted on ANY OS, but following procedure is correct only for Linux.
resample-method = src-sinc-best-quality
default-sample-format = s24le
The differences in volume and the meaning of "volume" itself for each software piece may differ, so that may harden further analysis. But, assuming differences are negligible, I'm posting my own observations:
https://imgur.com/a/Y9JdV
I've done my best on sliding and slicing parts to synchronize pieces. On circled parts it's clearly visible that the difference not just in the volume, but in the structure of wave. After all, I don't think this needs much explanation because it goes too deep into music theory. Another interesting point is that it's clearly a software issue since software->software sound transition ended up with distorted sound.
Music should be clear just like in any other music software.
Probably at some frequencies or some specific wave shape, the timbre of music "shifts" and distorts.
Operating system: (Almost) clean Debian 9.3 (Stretch) installation, Linux.
Version of Telegram Desktop: 1.1.23 and 1.2.6
Used theme: not applicable
Build instructions:
Other:
If we run Kepka under ASan/LSan we get some leaks
==26577==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 6656 byte(s) in 26 object(s) allocated from:
#0 0x5bfd80 in __interceptor_malloc (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x5bfd80)
#1 0x7fb4af3e2099 (/usr/lib/x86_64-linux-gnu/libfontconfig.so.1+0x1d099)
Direct leak of 144 byte(s) in 2 object(s) allocated from:
#0 0x5f8330 in operator new(unsigned long) (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x5f8330)
#1 0x2602683 in internal::getImage(QPixmap const&, QByteArray) /home/vista/dev/tdesktop/Telegram/SourceFiles/ui/images.cpp:1213:9
#2 0x187b037 in ImagePtr::ImagePtr(QPixmap const&, QByteArray) /home/vista/dev/tdesktop/Telegram/SourceFiles/ui/images.h:514:62
#3 0x2c3accf in PhotoData::makeReplyPreview() /home/vista/dev/tdesktop/Telegram/SourceFiles/structs.cpp:1225:19
#4 0x1890bb9 in HistoryPhoto::replyPreview() /home/vista/dev/tdesktop/Telegram/SourceFiles/history/history_media_types.cpp:657:16
#5 0x195a9e8 in HistoryMessageReply::paint(Painter&, HistoryItem const*, int, int, int, base::flags<HistoryMessageReply::PaintFlag>) const /home/vista/dev/tdesktop/Telegram/SourceFiles/history/history_message.cpp:507:53
#6 0x18d35f6 in HistorySticker::draw(Painter&, QRect const&, TextSelection, long long) const /home/vista/dev/tdesktop/Telegram/SourceFiles/history/history_media_types.cpp:2761:12
#7 0x197c745 in HistoryMessage::draw(Painter&, QRect, TextSelection, long long) const /home/vista/dev/tdesktop/Telegram/SourceFiles/history/history_message.cpp:1720:11
#8 0x17d8907 in HistoryInner::paintEvent(QPaintEvent*) /home/vista/dev/tdesktop/Telegram/SourceFiles/history/history_inner_widget.cpp:479:12
#9 0x7fb4be040dc7 in QWidget::event(QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x194dc7)
Direct leak of 144 byte(s) in 2 object(s) allocated from:
#0 0x5f8330 in operator new(unsigned long) (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x5f8330)
#1 0x2602463 in internal::getImage(QByteArray const&, QByteArray) /home/vista/dev/tdesktop/Telegram/SourceFiles/ui/images.cpp:1209:9
#2 0x12878c7 in ImagePtr::ImagePtr(QByteArray const&, QByteArray) /home/vista/dev/tdesktop/Telegram/SourceFiles/ui/images.h:510:85
#3 0x14375ca in DocumentData::checkSticker() /home/vista/dev/tdesktop/Telegram/SourceFiles/structs.h:1293:14
#4 0x18d1615 in HistorySticker::draw(Painter&, QRect const&, TextSelection, long long) const /home/vista/dev/tdesktop/Telegram/SourceFiles/history/history_media_types.cpp:2697:9
#5 0x197c745 in HistoryMessage::draw(Painter&, QRect, TextSelection, long long) const /home/vista/dev/tdesktop/Telegram/SourceFiles/history/history_message.cpp:1720:11
#6 0x17d8907 in HistoryInner::paintEvent(QPaintEvent*) /home/vista/dev/tdesktop/Telegram/SourceFiles/history/history_inner_widget.cpp:479:12
#7 0x7fb4be040dc7 in QWidget::event(QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x194dc7)
Direct leak of 112 byte(s) in 1 object(s) allocated from:
#0 0x5bfd80 in __interceptor_malloc (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x5bfd80)
#1 0x7fb4bad83e57 in CRYPTO_malloc (/lib/x86_64-linux-gnu/libcrypto.so.1.0.0+0x62e57)
Direct leak of 45 byte(s) in 9 object(s) allocated from:
#0 0x5bfd80 in __interceptor_malloc (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x5bfd80)
#1 0x7fb4af3da61d in FcFreeTypeQueryFace (/usr/lib/x86_64-linux-gnu/libfontconfig.so.1+0x1561d)
Direct leak of 36 byte(s) in 1 object(s) allocated from:
#0 0x5bfd80 in __interceptor_malloc (/home/vista/dev/tdesktop/cmake-build-debug/Telegram/Telegram+0x5bfd80)
#1 0x7fb4ae09ae2b (/usr/lib/x86_64-linux-gnu/libxcb.so.1+0xde2b)
Add Albums photo/video grouping feature that is currently only present on mobile.
Many emoji that are now on iOS 11 are missing
Messages can now be pinned in channels — currently only on mobile.
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.