Giter VIP home page Giter VIP logo

orion-viewer's Introduction

GitHub code size GitHub Releases Downloads GitHub release

Orion Viewer is pdf, djvu, xps, tiff and comic book (cbr, cbz, cbt) file viewer for Android devices based on MuPDF and DjVuLibre libraries

Application features

  • Outline navigation
  • Bookmarks support
  • Page navigation by screen taps + Tap Zones + Key binding
  • Text selection
  • Single word selection by double tap with translation in external dictionary
  • Custom zoom
  • Custom border crop
  • Portrait/landscape orientation
  • Support different navigation patterns inside page (left to right, right to left)
  • External Dictionaries support
  • Built-in file manager with recently opened file view

Get it on F-Droid Get it on Google Play

App usage analytics

From version 0.91.0 Orion Viewer automatically collects app crashes and app usage statistics to improve application quality. Orion Viewer doesn't collect any personal information (and doesn't pass it to any third parties).

Contribution

Contributions are always welcome! Feel free to open any issue, send pull request or suggest any idea

Translations

Project is fully or partially translated into Chinese, English, French, German, Hebrew, Italian, Russian, Spanish, Turkish and Ukrainian languages. It would be highly desirable to eliminate gaps and errors in existing translations and add translations to other languages.

Take a look into translations page on wiki.

Setting up build and working environment

To work with and build Orion Viewer project you will need next tools installed:

  • Android Studio 2023.1+ integrated development environment
  • git tool to work with source repository
  • make tool and python 3 compiler for building mupdf library
  1. Checkout repository sources via git:

    git clone https://github.com/max-kammerer/orion-viewer.git
    or if you have configured ssh access
    git clone [email protected]:max-kammerer/orion-viewer.git

  2. Setup native libraries (mupdf, djvu) via next command:

    ./gradlew -b thirdparty_build.gradle downloadDjvu downloadAndMakeMupdf

    Build scripts for them are defined in externalNativeBuild section in gradle build files (for details see djvuModule/build.gradle and mupdfModule/build.gradle files). Native libs are checked out into nativeLibs/djvu and nativeLibs/mupdf folders.

  3. Open project in Android Studio (AS): Main Menu/File/Open... and select project folder to open.

  4. Now you can build project within AS and run it in Android emulator

You can also build Android 'apk' artifacts via next command:

./gradlew :orion-viewer:assembleDebug (or assembleRelease)

It will generate apk artifacts suitable for Android 4.1+ devices.

For Android 4.0.x devices use next build commands (it also requires android-ndk 17):

./gradlew :nativeLibs:djvuModule:clean :nativeLibs:mupdfModule:clean
./gradlew :orion-viewer:assembleDebug -Porion.build.android40=true

Pre 0.80 versions are compatible with Android 2.1+ devices

Troubleshooting

In case of getting error about absent libtinfo.so.5, please install ncurses lib (libncurses5).

orion-viewer's People

Contributors

amereyeu avatar bahusoid avatar comradekingu avatar dlmv avatar evsinev avatar hcs64 avatar max-kammerer avatar nick863 avatar oersen avatar poipoipoipoipoipoipoipoipoi avatar poussinou avatar seanjensengrey avatar spellcaster avatar symbuzzer avatar taivlam avatar tututcd avatar weblate 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

orion-viewer's Issues

Text entered into search dialog does now show in certain color modes.

Text entered into search dialog does now show up in certain color modes.

If a color mode is set to inverted colors, or to dark blue and white, text entered into the search dialog does not show as you type. This is because the text color is the same as, or very similar to, the the background of the of search dialog.

Expected behavior: You should be able to see what you type in the search dialog.

Incorrect book is opened via "recent books" dialog

To reproduce the issue:

  1. Open multiple books so "recent books" dialog is not empty and contains at least 2 books;
  2. Open "recent books" dialog and open second book from list (let it be Book2)
  3. Correct book (Book2) is opened
  4. Now go back to recent books dialog and open first book from list (let it be Book1)
  5. Book2 is opened again instead of Book1

Seems order of books is changed so the last opened one become on the top but list of names remains the same

Can't set large default zoom

Options are basically to fit width or fit height or both. I can't use pinch-zoom because migraines. I can't set a default percentage, and it might not work well with some pdfs. It would be helpful to be able to fit 1/4 of the page to width or height, or a bit more with some overlap.

[Feature Request] Calibre Support

Would like to see support to login to a Calibre server.
To my knowledge there are no other FLOSS apps that do this.

I do however understand if this would go against any principles of Orion being a lightweight reader. An alternative idea could be to offer a secondary build with "Online" functionality. Keeping it FLOSS and overall lightweight still, as well as pushed to F-Droid.
The user could then choose which version of the app they want.
If not, understandable just throwing that idea out there.

F-Droid

Please consider to add the app to F-Droid repository.

Thanks

Error on file opening

[Please provide additional details and/or attach file]

Android Version: 10(29)

Intent { act=android.intent.action.VIEW cat=[android.intent.category.DEFAULT] dat=file:///storage/emulated/0/Download/Diari.pdf flg=0x10000000 cmp=universe.constellation.orion.viewer/.OrionViewerActivity }

java.lang.RuntimeException: cannot tell in file
	at com.artifex.mupdf.fitz.Document.openNativeWithPath(Native Method)
	at com.artifex.mupdf.fitz.Document.openDocument(Document.java:32)
	at com.artifex.mupdf.viewer.MuPDFCore.<init>(MuPDFCore.java:35)
	at universe.constellation.orion.viewer.pdf.PdfDocument.<init>(PdfDocument.kt:34)
	at universe.constellation.orion.viewer.FileUtil.openFile(FileUtil.kt:27)
	at universe.constellation.orion.viewer.OrionViewerActivity$openFile$1$newDocument$1.invokeSuspend(OrionViewerActivity.kt:309)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

Page jumps to the previous position for a moment when I scroll it via swiping

For some years, I experience this painful glitch.

When I want to move a page, I drag my finger, and when I end dragging and put my finger up, for a moment I see that the page jumps to the position where it was before this dragging. And almost immediately it goes to the right position, where I wanted to scroll it.

This is not a convenient behavior for scrolling. So I try not to use it now, but when it's fixed, I will!

AFAIR I have experienced this behavior on all of my devices. They have IPS and AMOLED screens. Maybe this issue exists since this scrolling is implemented.

Wishlist: global cropping setting

Currently, the default cropping setting is none, and I have to set the cropping each time I open a new file.

I hope that there is a global cropping setting, and once a new file is openned, the global setting is applied.

Error on file opening

[Please provide additional details and/or attach file]

Android Version: 10(29)

Intent { act=android.intent.action.VIEW dat=content://com.lge.filemanager.FileProvider/storage/emulated/0/Download/Document.pdf typ=application/pdf flg=0x13000003 cmp=universe.constellation.orion.viewer/.OrionViewerActivity }

java.lang.RuntimeException: cannot tell in file
	at com.artifex.mupdf.fitz.Document.openNativeWithPath(Native Method)
	at com.artifex.mupdf.fitz.Document.openDocument(Document.java:32)
	at com.artifex.mupdf.viewer.MuPDFCore.<init>(MuPDFCore.java:35)
	at universe.constellation.orion.viewer.pdf.PdfDocument.<init>(PdfDocument.kt:34)
	at universe.constellation.orion.viewer.FileUtil.openFile(FileUtil.kt:27)
	at universe.constellation.orion.viewer.OrionViewerActivity$openFile$1$newDocument$1.invokeSuspend(OrionViewerActivity.kt:309)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

In Dark Mode, menus are blank on e-ink devices

I somehow got stuck in Dark Mode.

The page traversal menu can be important.

I get a single unreadable grey box in the upper left corner and have to pick without seeing anything.

Maybe it's a color mode issue...?

I get nothing and have to pick without seeing anything.

Maybe contrast?

I get nothing.

Error on file opening from k9-mail

Opening a PDF directly from k9-mail leads to this error dialog. Selecting the temporary file solution works for opening the PDF.

Android Version: 11(30)

Intent { act=android.intent.action.VIEW dat=content://com.fsck.k9.tempfileprovider/temp/04f64bdde5a5d56863d89bf073d7008647580eab?mime_type=application/pdf typ=application/pdf flg=0x10000001 cmp=universe.constellation.orion.viewer/.OrionViewerActivity }

Can't exit out of any options menus

I'm using a Nook Glowlight 3+ (2018).
After I go into CURRENT BOOK OPTIONS, there's no way to get out other than to reboot my Nook.
There are no back-arrows or any other indications anywhere on the screen that there's any way to leave that menu, and I've tried tapping all over the screen, and pressing all the Nook buttons.

Similarly with DEFAULT BOOK SETTINGS. I can see faint outlines of the top halves of the icons in the upper-right corner, but they're always hidden behind the bar for the top menu item, and also they are just outlines, with no pixels in the interior lit up; and they do nothing if I try to touch them.

Also, after opening a PDF, there's no way to close it and open another PDF.
I suspect all these open PDFs are left running in the background, but have no way to check what processes are running.

It looks nice otherwise!

My guess is that you're relying on the Android phone's back-arrow button. E-readers don't have those.

Feature: settings import/export

Feature: settings import/export would be extremely useful to transfer settings between devices.
Also useful when going between different versions when the system does not allow to downgrade.

Opening djvu stucks on android 7 devices

Hi. I have already described this issue in this ticket. And you have succesfully fixed it. But after a couple of commits - i am now again not able to open the journals (that were attached to the closed ticket) at my Android 7.0 devices. Please, could you take a look at the code and help to solve the issue? Thanks

Error during file saving

        [Please provide additional details]

        Orion Version: 0.92.1 (2163)}
        Android Version: 10 (29)
        ```
        intent=Intent { act=android.intent.action.VIEW dat=content://com.google.android.apps.nbu.files.provider/2/8661 typ=application/pdf flg=0x13000001 cmp=universe.constellation.orion.viewer/.OrionViewerActivity }

targetFile=file:///data/user/0/universe.constellation.orion.viewer/cache/content/com.google.android.apps.nbu.files.provider/8661/GAF%20-%20CF%20Individuel%202022%20-%20Liste%20des%20Qualifi%C3%A9es.pdf

java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)
at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:149)
at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:705)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1702)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1518)
at android.content.ContentResolver.openInputStream(ContentResolver.java:1202)
at universe.constellation.orion.viewer.FallbackDialogs$Companion$saveFileByUri$1$1.invokeSuspend(SourceFile:22)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(SourceFile:9)
at kotlinx.coroutines.DispatchedTask.run(SourceFile:115)
at androidx.core.app.ActivityRecreator$1.run(SourceFile:14)
at kotlinx.coroutines.scheduling.TaskImpl.run(SourceFile:3)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(SourceFile:92)

        ```

Opening djvu stucks on android 7 devices

Hello! I can't open current files by orion-viewer. I tried to open them on three devices: Xiaomi Redmi Note 3 (android 7.1.1), Geotel A1 A1 (android 7.0) and Vernee Mars (android 7.0). During opening file, the page size is recognized, than when the page is trying to be shown everything stucks. No log, no errors. The latest log message is "Page number " and that's all. Other android devices (android 4, 5, 6) open these files without any troubles, just long preloader (10sec max). I would be very glad, if You answer me as soon as possible. Thank You!
journal.zip

Error during file saving

        [Please provide additional details (steps to reproduce issue)]

        Orion Version: 0.92.4 (2203)}
        Android Version: 12 (31)
        ```
        Cause: open failed: ENOENT (No such file or directory)

Additional info: targetFile=file:///data/user/0/universe.constellation.orion.viewer/cache/content/test_book8066815787847434820.jpg

Intent info: Intent { act=android.intent.action.VIEW dat=content://com.duckduckgo.mobile.android.provider/external_files/Download/71Q5z6ppxQL.AC_UF1000,1000_QL80_FMwebp.jpg typ=image/jpeg flg=0x13100001 cmp=universe.constellation.orion.viewer/.OrionViewerActivity bnds=[107,33][373,674] }

java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)
at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:151)
at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:780)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:2027)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1842)
at android.content.ContentResolver.openInputStream(ContentResolver.java:1518)
at universe.constellation.orion.viewer.FallbackDialogs$Companion$saveFileByUri$2$1.invokeSuspend(SourceFile:20)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(SourceFile:9)
at kotlinx.coroutines.DispatchedTask.run(SourceFile:115)
at androidx.core.app.ActivityRecreator$1.run(SourceFile:14)
at kotlinx.coroutines.scheduling.TaskImpl.run(SourceFile:3)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(SourceFile:92)
```

Extra refresh after zooming on djvu

After zooming a djvu file (zooming in itself being smooth and high-quality) there's a quick blank followed by a redraw - it doesn't change the output in anyway and probably shouldn't be visible.

This is not observed when scrolling, only on zooming.

Error on file opening

[Please provide additional details and/or attach file]

Android Version: 10(29)

Intent { act=android.intent.action.VIEW dat=content://com.corproxy.files.file_provider/file%3A%2F%2F%2Fstorage%2Femulated%2F0%2FAndroid%2Fdata%2Fcom.contextlogic.wish%2Fcache%2Fwish-http-image-cache typ=image/* flg=0x13000003 cmp=universe.constellation.orion.viewer/.OrionViewerActivity (has extras) }

java.lang.RuntimeException: cannot tell in file
	at com.artifex.mupdf.fitz.Document.openNativeWithPath(Native Method)
	at com.artifex.mupdf.fitz.Document.openDocument(Document.java:32)
	at com.artifex.mupdf.viewer.MuPDFCore.<init>(MuPDFCore.java:35)
	at universe.constellation.orion.viewer.pdf.PdfDocument.<init>(PdfDocument.kt:34)
	at universe.constellation.orion.viewer.FileUtil.openFile(FileUtil.kt:27)
	at universe.constellation.orion.viewer.OrionViewerActivity$openFile$1$newDocument$1.invokeSuspend(OrionViewerActivity.kt:309)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

Please change app icon

Please change the app icon. When file browsers show the app icon on app-associated files (eg pdfs), the icon looks like a photo preview. Icon should be simpler and easily recognizable as an icon (instead of accidentally looking like a photo)

FR: quick way to move from one file to next

I have a folder full of TIFF files, each of which is a single scanned page. I discovered your app as one of the few open source Android apps that can open TIFFs, which is great. However, I couldn't find a quick way to move to the next/previous image within the folder.

I realise your app is really a "book" (multipage) viewer rather than an image (lots of individual files) viewer, so I don't know if you'll consider a feature request, but it would be great for me.

Alternatively if anyone knows of another opensource Android app that will view TIFFs, please respond.

Thanks for this app.

awesome thanks for your work dev

Can you add more features for PDF editing like in Xodo Pdf.
Eg: arranging pages, auto cropping margins, rotaing pages, extracting pages from pdf, merging two pdf files or pages, extracting pdf files to jpg in a zip folder. Compressing pdf etc...
I think all these features are supported by mupdf.
Looking for an opensource android app with all these features

document native libs build

I'll add my notes on doing builds of the native libs here, but I never got both to build properly and fell back to using the prebuilt libs that you provide.

Could you document your build and provide copies of your configs ?

Error on file opening

[Please provide additional details and/or attach file]

Android Version: 5.1.1(22)

Intent { act=android.intent.action.VIEW dat=file:///storage/sdcard1/comics/01.cbz flg=0x13000000 cmp=universe.constellation.orion.viewer/.OrionViewerActivity }

java.lang.RuntimeException: cannot recognize archive
	at com.artifex.mupdf.fitz.Document.openNativeWithPath(Native Method)
	at com.artifex.mupdf.fitz.Document.openDocument(Document.java:32)
	at com.artifex.mupdf.viewer.MuPDFCore.<init>(MuPDFCore.java:35)
	at universe.constellation.orion.viewer.pdf.PdfDocument.<init>(PdfDocument.kt:34)
	at universe.constellation.orion.viewer.FileUtil.openFile(FileUtil.kt:27)
	at universe.constellation.orion.viewer.OrionViewerActivity$openFile$1$newDocument$1.invokeSuspend(OrionViewerActivity.kt:309)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

Error on file opening analyze

[Please provide additional details and/or attach file]

Android Version: 10(29)

Intent { act=android.intent.action.VIEW dat=content://com.corproxy.files.file_provider/file%3A%2F%2F%2Fstorage%2Femulated%2F0%2FDownload%2FGmail%2520-%2520Tell%2520me%2520you%2520saw%2520this....pdf typ=application/pdf flg=0x13000003 cmp=universe.constellation.orion.viewer/.OrionViewerActivity (has extras) }

java.lang.RuntimeException: cannot tell in file
	at com.artifex.mupdf.fitz.Document.openNativeWithPath(Native Method)
	at com.artifex.mupdf.fitz.Document.openDocument(Document.java:32)
	at com.artifex.mupdf.viewer.MuPDFCore.<init>(MuPDFCore.java:35)
	at universe.constellation.orion.viewer.pdf.PdfDocument.<init>(PdfDocument.kt:34)
	at universe.constellation.orion.viewer.FileUtil.openFile(FileUtil.kt:27)
	at universe.constellation.orion.viewer.OrionViewerActivity$openFile$1$newDocument$1.invokeSuspend(OrionViewerActivity.kt:309)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

Some new Features

can u add annotation in it like highlight , add sticker bitmap in it??

Is it possible to speed up page rendering?

Hi. I am wondering - is it possible to make page rendering more fast? Some documents have very big page resolutions and rendering becomes a real head-ache for many Android devices. Is it possible to make render process faster and maybe render scaled bitmaps - not the real size page.
And the other question - are we able to cancel render tasks. For example i have a RecyclerView with 5 pages. And i am going to render all them in a separate threads. I can cancel my task, but the job on the native side will be still working, till all the 5 requests reach their ends. And to load and display - 5 new images - i need to wait till prev 5 will be finished.Can we stop the on the native sides - and start load new pictures?
Thanks

Can't export or share opened files

As title. Sometimes 3rd party apps throws pdf's temp areas and orion viewer can open it. Bu when ı nedd to export or sent this file, there is no option for it

Continuous page scrolling?

Is it possible to get all the pages one below another so that I can scroll down instead of clicking one the edge to go to next page?

Can't use auto crop

When I use auto crop , the document become strip, which I want suit the width without blank.

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.