Coder Social home page Coder Social logo

rain92 / ultimatemangareader Goto Github PK

View Code? Open in Web Editor NEW
172.0 16.0 24.0 2.58 MB

A feature-rich online manga reader for Kobo E-Ink devices based on Qt5.

License: GNU Affero General Public License v3.0

QMake 1.69% C++ 97.22% C 1.09%
kobo-eink-devices kobo manga manga-reader manga-downloader manga-scraper cross-platform qt5

ultimatemangareader's Introduction

UltimateMangaReader

A feature-rich online manga streamer and reader for Kobo E-Ink devices, based on Qt5.

Main features

  • It's cross-platform. While the primary targets are Kobo E-Ink devices, it will also run on Windows, Linux and Mac. Qt5.15 (with OpenSSL) and a platform backend being the only hard dependency.

  • It comes with a refined, modern design and a GUI that is DPI independent and will look great on various platforms.

  • It supports multiple websites as manga sources with tens of thousands of available mangas.

  • It's fast. It will stream, prerender and cache mangapages in advance while reading to minimize loading times and to enable the perfect reading experience.

  • It supports offline-reading. Mangas can be downloaded in advance and read later without internet connection.

  • It supports favorites and bookmarks reading progress automatically, so you can pick right up reading where you left off.

  • It is designed to be ergonomic on E-Readers. It supports configurable gesture inputs, frontlight control and a sleep mode. Custom screensavers can be placed in the screensaver folder and will be picked at random.

Install on Kobo devices

First you will need to install a launcher application. I recomend KFMon, the latest release along with install instructions can be found here.

For the application itself just download the latest release here and extract the archive into the root directiory of your Kobo device.

Build

Building the application requires Qt 5.15+ with OpenSSL 1.1.1+.
With Qt creator the build process is straight-foreward.
Building qor kobo targets the requires a cross compiled Qt and a Kobo platform plugin.
See https://github.com/Rain92/qt5-kobo-platform-plugin.
Add CONFIG+=kobo to the qmake arguments and put the plugin source in the same parent folder as the app.

Cross-compile for Kobo

Setting up the cross-compile toolchain

The koxtoolchain is recomendet: https://github.com/koreader/koxtoolchain
Install the dependencies and run:

./gen-tc.sh kobo

Cross-compile OpenSSH for Qt

Download the latest OpenSSL (1.1.1+).
Configure, make and install, for example like this:

export CROSS=/home/${USER}/x-tools/arm-kobo-linux-gnueabihf/bin/arm-kobo-linux-gnueabihf
export SYSROOT=/home/${USER}/x-tools/arm-kobo-linux-gnueabihf/arm-kobo-linux-gnueabihf/sysroot
export AR=${CROSS}-ar
export AS=${CROSS}-as
export CC=${CROSS}-gcc
export CXX=${CROSS}-g++
export LD=${CROSS}-ld
export RANLIB=${CROSS}-ranlib
export CFLAGS="-O3 -march=armv7-a -mfpu=neon -mfloat-abi=hard -D__arm__ -D__ARM_NEON__ -fPIC -fno-omit-frame-pointer -funwind-tables -Wl,--no-merge-exidx-entries"
./Configure linux-elf no-comp no-asm shared --prefix=${SYSROOT}/usr --openssldir=${SYSROOT}/usr
make -j5
make install

Prepare Qt

Download the latest Qt (5.15+).
A descriptor for the kobo platform has to be added.
In the source folder of Qt go to qtbase\mkspecs and add a new folder named linux-kobo-gnueabihf-g++ with theese two files:
qmake.conf

#
# Kobo qmake configuration
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental gdb_dwarf_index
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)


QMAKE_CFLAGS_RELEASE   = -O3 -march=armv7-a -mfpu=neon -mfloat-abi=hard -D__arm__ -D__ARM_NEON__ -fPIC -fno-omit-frame-pointer -funwind-tables -Wl,--no-merge-exidx-entries
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO -g

QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO

# modifications to g++.conf
QMAKE_CC                = arm-kobo-linux-gnueabihf-gcc
QMAKE_CXX               = arm-kobo-linux-gnueabihf-g++
QMAKE_LINK              = arm-kobo-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = arm-kobo-linux-gnueabihf-g++

# modifications to linux.conf
QMAKE_AR                = arm-kobo-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = arm-kobo-linux-gnueabihf-objcopy
QMAKE_NM                = arm-kobo-linux-gnueabihf-nm -P
QMAKE_STRIP             = arm-kobo-linux-gnueabihf-strip

load(qt_config)

qplatformdefs.h

#include "../linux-g++/qplatformdefs.h"

As of Qt 5.15.0 there is an open issue that will lead to random artifacts in the gui when using high-dpi scaling with fractional scaling factors. This can be resolved with the following patch (Already fixed in Qt 5.15.1):

diff --git a/src/gui/kernel/qhighdpiscaling_p.h b/src/gui/kernel/qhighdpiscaling_p.h
index 55ad6df5c9da3d11a8900754eebc27528aec90ec..9c3d0cdba28a1dd51c18d3fcc0350a11f8000ebc 100644
--- a/src/gui/kernel/qhighdpiscaling_p.h
+++ b/src/gui/kernel/qhighdpiscaling_p.h
@@ -204,7 +204,7 @@ inline QRegion scale(const QRegion &region, qreal scaleFactor, QPoint origin = Q
 
     QRegion scaled;
     for (const QRect &rect : region)
-        scaled += scale(rect, scaleFactor, origin);
+        scaled += scale(QRectF(rect), scaleFactor, origin).toRect();
     return scaled;
 }

Cross-compile Qt

Open a new terminal. Make sure arm-kobo-linux-gnueabihf-gcc is in your path. If in doubt add it with:

export PATH=$PATH:/home/${USER}/x-tools/arm-kobo-linux-gnueabihf/bin/

Configure, make and install Qt:

export QTDIR=qt-linux-5.15.2-kobo
export SYSROOT=/home/${USER}/x-tools/arm-kobo-linux-gnueabihf/arm-kobo-linux-gnueabihf/sysroot
./configure --recheck-all -opensource -confirm-license -release -verbose \
 -prefix /mnt/onboard/.adds/${QTDIR} \
 -extprefix /home/${USER}/qt-bin/${QTDIR} \
 -xplatform linux-kobo-gnueabihf-g++ \
 -sysroot ${SYSROOT} \
 -openssl-linked OPENSSL_PREFIX="${SYSROOT}/usr" \
 -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -qt-harfbuzz -qt-pcre -sql-sqlite -linuxfb \
 -no-sse2 -no-xcb -no-xcb-xlib -no-tslib -no-icu -no-iconv -no-dbus \
 -nomake tests -nomake examples -no-compile-examples -no-opengl \
 -skip qtx11extras -skip qtwayland -skip qtwinextras -skip qtmacextras -skip qtandroidextras \
 -skip qttools -skip qtdoc -skip qtlocation -skip qtremoteobjects -skip qtconnectivity -skip qtgamepad \
 -skip qt3d -skip qtquick3d -skip qtquickcontrols -skip qtsensors -skip qtspeech -skip qtdatavis3d \
 -skip qtpurchasing -skip qtserialbus -skip qtserialport -skip multimedia -skip qtquicktimeline -skip qtlottie \
 -skip activeqt -skip qtscript -skip qtxmlpatterns -skip qtscxml -skip qtvirtualkeyboard \
 -skip qtwebengine -skip qtwebview -skip qtwebglplugin \
 -no-cups -no-pch -no-libproxy \
 -no-sql-db2 -no-sql-ibase -no-sql-mysql -no-sql-oci -no-sql-odbc -no-sql-psql -no-sql-sqlite2 -no-sql-tds \
 -no-feature-printdialog -no-feature-printer -no-feature-printpreviewdialog -no-feature-printpreviewwidget

make -j5
make install

ultimatemangareader's People

Contributors

annoyeddev avatar gyonder avatar kiwilex avatar mtlive avatar rain92 avatar rjd22 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ultimatemangareader's Issues

Kobo Touch (N905) doesn't seem to respect touchscreen settings

Touch input is received, but the location is both rotated and offset. No combination of touchscreen_rotate, touchscreen_invert_x, and touchscreen_invert_y values seems to change anything about how input is handled. It's still sideways.

Specifically, input is rotated 90 degrees clockwise. Or in other words, rotating the device 90 degrees counter-clockwise makes touch properly go from top to bottom (albeit with the screen still misaligned because the device does not support rotation).

Kobo Forma touch response is rotated 180 degrees while display is not. Fix included.

Weird issue here: if I touch the display in the bottom left corner, it acts as if the top right corner has been tapped. Initially I had thought it was entirely unresponsive, but this is not the case. It's perfectly responsive, so long as you rotate where you're tapping it 180 degrees.

Quick fix:
Change export QT_QPA_PLATFORM=kobo:touchscreen_rotate=90:logicaldpitarget=108 in .adds/UltimateMangaReader/ultimatemangareader.sh to export QT_QPA_PLATFORM=kobo:touchscreen_rotate=270:logicaldpitarget=108. This resolved the issue for me immediately.

mangadex issue

Hello, thank you for the application. It's really great.

I installed the latest release 2.14 and mangadex appears to have an API issue. It returns:

Couldn't parse mangas info

Have a nice weekend.

[Feature request] double tap to zoom

First of all, thanks for the app! It works great. Sometimes images have very tiny text so it would be great to add double tap to zoom feature similar to how epub files can zoom in when you double tap & zoom out when you double tap again.

Unable to build the application

@Rain92 : Hey, thanks for your work. I'd like to contribute back and maybe develop some other qt app for kobo. I built qt 4.8.5 as in your mobileread post without issue but have problems building the application.

I want to double check if you built vlasovsoft free yourself as I found a lot of undefined references to VirtualKeyboard, QWSPlatform and others.

Could you please elaborate a little bit more on prerequisites for building the application?
Thanks

[Feature request] Display Uploading Group on Mangadex

Some manga series on mangadex are uploaded by multiple different groups so each some chapters will be listed multiple times for each uploader. Being able to tell who uploaded what would be a great QoL upgrade.

Input not working on Libra h2o

Installed KFMon and was able to launch ultimatemangareader.png successfully, and I am presented with a UI, but none of the input works. I can still lock the screen and so I think the device is still functioning - but without input I can't do anything. When I unlock the screen, I will see a "Connecting to Wifi" screen, and then it goes away. End up with a soft reboot instead to get back to normal.

Touch Not working on latest Release with Kobo Clara HD

Hi,
i Installed Ultimate Manga Reader 2.14.0 like described in the Readme.md. i opened it and i tries to connect to Wifi and it cant as well as the touch is not working.Let me know how i can Help you.

Best regards

[Bug] Backlight Not Full Brightness

On my kobo libra the backlight seems to only reach about 30% brightness when compared to stock firmware even when the brightness slider is maxed out. I believe this is probably a bug. @Rain92

Change Pages Buttons Bug Kobo Forma

Edit: I realized that you can't change pages via the physical buttons on the kobo forma if you just opened Ultimate Manga Reader and then you pick a Manga from the favorites section straight up.

To be able to make the physical buttons work you need to go pick any manga from anywhere execpt favorites section and then change the pages with the physical buttons.

If you go back to the favorites section you will be able to change the pages with the physical buttons but everytime you close than reopen Ultimate Manga Reader you will have to do it again.

MangaDex not functional

When trying to access any manga on the mangadex source, I get the error 'cannot parse mangainfos'. This makes mangadex unusable, and should be fixed if people want to access mangadex again using your application. @Rain92

[Regression] Lost touch input on Glo HD after update from 2.3.0 to 2.6.0

After updating Ultimate Manga Reader from 2.3.0 (Qt 5.15.1) to 2.6.0 (Qt 5.15.2), I lost touch input in Ultimate Manga Reader on my Kobo Glo HD. I'm running firmware 4.25.15875 and start Ultimate Manga Reader with NickelMenu 0.5.1.

For some reason, if wifi is off, touching either the button "Retry" or "Close" in the error window seems to get registered - at least the background color of the buttons changes from white to black, "Close", however, doesn't actually close the window.

Sleep freezes my Forma

If I send the device to sleep while having a manga open, my Kobo Forma freezes. I have to hold the power button to kill it and boot it up again. Is there anything I can do to help narrow this issue down? Am I the only one with this issue?

[Feature request] Other language support

Hello, I'm french and i would love to see the possibility to choose between different language.
I feel way more confortable with my native language than english.
Would it might be possible to kindly add it may i ask ?

Thanks in advacne.

2 page spread 180° turn?

Hey there, solid app but I had a question regarding the presentation of 2 pages spreads.

Is there a setting or a line in the script I can change to allow for 2 page spreads to be flipped? I'm on a Forma and I normally read with the buttons on the right when reading in portrait but when the reader presents a 2 page spread in landscape, it's oriented with the buttons at the top, I'm used to and much prefer the reverse of this where the buttons are at the bottom.

Thanks in advance!

[Bug] Sleep mode not working after 2nd use

Sleep mode works on the first try however after I awaken my kobo libra and then sleep it again, the kobo wakes itself backup from sleep mode after about 20 seconds without any interaction. Anyone else have a fix or this issue?

[Bug] App crash when on a manga page

After the compilation success without any error, i put the compiled binaries on my kobo.
The app start without any problem, but when i choose a manga and the app redirect to the "main page" of the selected manga, few second after, the app just crash and kobo restart.

i have use your docker image, and compiled the already provided source file of UltimateMangaReader (the one in the docker file)

(to compile for the kobo, i also use the qmake located in the kobo qt folder [~/qt-bin/qt....kobo.../bin/qmake]

[Bug] UMR crashes when resizing white pages

Hello,

UMR crashes when loading completely white pages of certain mangas. It occurs when reading the manga online and also during download.

I have been able to replicate this problem on two mangas. "Tsukihime" (page ~33, end of chapter 1 beginning of chapter 2) and "Tsukiatte agetemo ii ka na" (page 2).*** I tried reading from multiple sources: MangaHub, MangaPanda, MangaPlus.

***These pages happen to be completely white pages.

I looked at the logfile and it seems to be crashing when the ReSizeBilinear function is applied to these completely white pages. I noticed there's an option in the settings that removes white margins. When I disabled that option, these pages are able to load just fine. So I think that it is crashing because the function is trying to remove the entire white page lol.

I've attached the log file for when it crashes on page ~33ish of Tsukihime. It's not a huge deal honestly since it works perfectly fine when the option is disabled, but I thought it might be useful for you to know that this issue exists.

log.txt

Have a nice day.

How to work with NickelMenu

hi,

i don't see any instruction to use the app with nickelmenu. could you care to give me some instruction. i don't wanna use kfmon and launch .png file

thank you!

Proxy Support [workaround]

It might not seem useful, but since manga sites are blocked on some ISPs it might be helpful to add proxy settings to bypass restrictions.
Also Qt supports setting a proxy so I think it should make things straightforward.

KFMon IPC is down error help

20210102_090345
I have this error when I try to launch UltimateMangaReader from NickleMenu and I am on the latest version of KFMon and Ultimate Manga Reader anyone know a fix ?

Edit: I fixed it by adding this line:

menu_item :main :Ultimate Manga Reader :cmd_spawn :quiet:/mnt/onboard/.adds/UltimateMangaReader/ultimatemangareader.sh

Into the nicklemenu config

[Mangadex] Titles cut off at apostrophe

Manga titles from Mangadex have their titles cut off when there's an apostrophe in the name.
All parts of "JoJo's Bizarre Adventure" -> "JoJo"
"Dead Dead Demon's Dededededestruction" -> "Dead Dead Demon"

IMG_20210112_094312

Using 2.5.0 beta on a Kobo Clara HD (generally works pretty great, thank you so much for your work!)

[Feature request] Komga / OPDS support

It's would be awesome if you could support custom Komga and/or OPDS. (like with calibre etc.)
That's woul allow us to just use our server to read manga. Komga and Clibre can work with OPDS wich should make it easier to implement.

[New Device] Sage Support

It looks like it's having some issues with the WiFi on the new Sage, log below:

Checking internet connection...
ping: sendto: Network is unreachable
Connecting to Wifi...
insmod: can't insert '/drivers/b300-ntx/wifi/sdio_wifi_pwr.ko': No such file or directory
insmod: can't insert '/drivers/b300-ntx/wifi/dhd.ko': No such file or directory
ifconfig: SIOCGIFFLAGS: No such device
wlarm_le: wl driver adapter not found
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
wlarm_le: wl driver adapter not found
ifconfig: SIOCGIFFLAGS: No such device
Checking internet connection...
ping: sendto: Network is unreachable
Connected unsuccessfully in 12721 ms.

[Issue] Mangadex Not Working!

When I click on the mangadex source, it gives me a 'could not parse mangainfos' error. This is probably becuase Mangadex currently has a new API (#34) and as such their URL formatting is a bit different now. Because of this, Mangadex does not work on the application. It would be awesome if this could get fixed because mangadex is the best source on here. @Rain92

[Request] Screen orientation options

It would be nice to have the ability to use the normal screen rotation options, especially on the Kobo Forma or Libra so the buttons can be used in any position.

Add libra 2 support?

Hi, im currently using kobo libra 2nd generation. And apparently when im using UMR i cannot get my touch input registered, i already playing around changing umr.sh but no luck. Any plan to support newer models? Having this on my linra 2 would be awesome, thanks!

Settings page is cut off and cant be scrolled down KOBO Aura second gen

On my KOBO Aura second gen when I enter settings, the page is cut off at the bottom, right under where I can select the "Tab" option that can invert page flipping. I can see no button for accepting the changes I make, scrolling the page down or going back from the settings page, it still works to change settings however, and the way I have to exit the settings page is by putting my KOBO to sleep and waking it up again.

Input is being read too quickly

I'm using a libra 2, it appears that the input is read based on refresh rate or something similar. Lightly tapping a key on the keyboard results in a letter appearing 5 or more times.

Aura HD touchscreen offset

In order to get the touchscreen in the right orientation I had to set touchscreen_rotate=90

Now there's a slight offset in the touchscreen input. In the virtual keyboard hitting W is actually hitting B.
Top and left screen border could not be click, like the upper left menu Icon, the first website icon, or the first keyboard column.

@Rain92 could you advise any way to fix this? Should I mess with the logicaldpitarget option?

Mangadex v5 API

Mangadex has been down for a couple of weeks after a security breach, but has now opened a new (limited) public API for testing. As far as I can tell, it should have all the functionality required for UltimateMangaReader.

API documentation
Twitter thread

more information

i'm interested in use this app but i didnt find much information aside from github and the mobileread forum. i'd like see more of the app, do you not if exist any video to see the app working.

Double page spreads do not work correctly

I have both an Aura ONE and a Clara HD.

Depending on the device, double page spreads are either shrank to fit the screen horizontally (which is okay, but can make text hard to read) or they are expanded to fit it vertically (cutting off the sides). The Clara HD shrinks the image, the Aura ONE expands it.
The setting "Show double pages in portrait mode" has no effect on either device.

See this picture to see what I mean. If useful, the page is chapter 13, page 9 from the manga "GTO" hosted on MangaDex.

This happens on the current 2.8.0 release. I did not test any other releases.

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.