Coder Social home page Coder Social logo

readium / sdklauncher-android Goto Github PK

View Code? Open in Web Editor NEW
76.0 41.0 65.0 10.67 MB

Launcher app for Readium SDK on Android

License: BSD 3-Clause "New" or "Revised" License

HTML 0.06% Java 8.21% CSS 0.11% JavaScript 91.40% Shell 0.22%
launcher android java epub

sdklauncher-android's Introduction

Note: Please don't use the zip download feature on this repo as this repo uses submodules and this is not supported at present by github and will result in an incomplete copy of the repo.

Launcher-Android

A small Android application to serve as a launcher/testbed for the Readium SDK.

How to get source from github

git clone --recursive https://github.com/readium/SDKLauncher-Android.git

See a document on how to build the SDK and Launcher on Android here

Debug C++ code on Android Studio 2

Gradle experimental build plugin and Android Studio 2 are required to debug C++ code. By default the project uses stable version of gradle plugin but you can switch easily to the experimental one by adding the following line to local.properties file:

readium.ndk_debug=true

This settings will switch the build system to the gradle experimental version and allow you to debug, add breakpoints on the C++ code.

You must be careful that if you switch from the stable to the experimental version, you have first to delete all intermediate build files in:

  • Platform/Android/epub3/build
  • Platform/Android/include
  • Platform/Android/obj
  • Platform/Android/libs

If you forget to delete these files, the application will crash because of bad version of shared and static libraries.

Licensing info

Licensing information can be found in the file license.txt in the root of the repo, as well as in the source code itself.

sdklauncher-android's People

Contributors

aiqon avatar anfengde avatar clebeaupin avatar cosch-txtr avatar danielweck avatar datalogics-bhaugen avatar jccr avatar nleme avatar olivierkorner avatar prcolaco avatar rkwright avatar thom3k avatar throwdice avatar yteitel 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

Watchers

 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

sdklauncher-android's Issues

Blank pages + JS error (getPaginationInfo)

Just cloned the latest versión of the SDK launcher for Android, built it, and everything seems to be working as expected.

ePubs are being loaded (I can see the TOC loaded for a couple of ebooks), but they never show (I'm sending data through Intent to WebViewActivity). All I see is a blank page, the prev and next buttons at the bottom, and when I click on them, this error appear in LogCat:

  • Uncaught TypeError: Cannot call method 'getPaginationInfo' of undefined at file:///android_asset/readium-shared-js/js/views/reader_view.js:192

Before that, here's some output from the logs:

  • Trying to load lib APP_PATH/libepub3.so 0xa641dc80
  • Loading library(version: 3.2.1.43093 RELEASE)... successfully.
  • PointerPool(): pointer pool created
  • Added shared lib APP_PATH/libepub3.so 0xa641dc80
  • INIT_CLASS(): class 'org/readium/sdk/android/EPub3' found
  • looots of INIT_STATIC_METHOD_ID(): static method 'XX' found in class 'org/readium/sdk/android/EPub3'
  • initializeReadiumSDK(): initializing Readium SDK...
  • initializeReadiumSDK(): initialization of Readium SDK finished
  • EPub3.openBook(): path received is 'EPUB_PATH'
  • EPub3.openBook(): _container OK, version: 1.0
  • PointerPool::add(): added pointer FFFFFFFFB8E62CD8(5) container
  • Creating container [ptr:FFFFFFFFB8E62CD8, path:EPUB_PATH]
  • EPub3.openBook(): package type: 0xb8e780d0 PSt10shared_ptrIN5ePub37PackageEE
  • PointerPool::add(): added pointer FFFFFFFFB8E81820(6) package [./../../Platform/Android/jni/epub3.cpp:414]
  • Creating package [ptr:FFFFFFFFB8E81820]
  • looots of PointerPool::get(): got pointer FFFFFFFFB8E81820(5) package [./../../Platform/Android/jni/epub3.cpp:414]
  • EPub3.openBook(): package added
  • onPageFinished: file:///android_asset/readium-shared-js/reader.html
  • openPageRequestData: {"sourceFileHref":"TOC.xhtml","contentRefUrl":"s001-BookTitlePage-01.xhtml"}
  • new EGLContext from framework: b8cc1668
  • Reinit shader
  • Reinit transferQueue

Thanks!

Can't open epub3 file.

The source compile is done. but when i try to open a epub3 book, the app crashed.

Log as below.

06-06 14:23:05.835: E/AndroidRuntime(2198): FATAL EXCEPTION: main
06-06 14:23:05.835: E/AndroidRuntime(2198): java.lang.UnsatisfiedLinkError: Native method not found: com.readium.EPubJNI.openBook:(Ljava/lang/String;)I
06-06 14:23:05.835: E/AndroidRuntime(2198): at com.readium.EPubJNI.openBook(Native Method)
06-06 14:23:05.835: E/AndroidRuntime(2198): at org.readium.sdklauncher_android.ContainerList$1.onItemClick(ContainerList.java:62)
06-06 14:23:05.835: E/AndroidRuntime(2198): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
06-06 14:23:05.835: E/AndroidRuntime(2198): at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
06-06 14:23:05.835: E/AndroidRuntime(2198): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
06-06 14:23:05.835: E/AndroidRuntime(2198): at android.widget.AbsListView$1.run(AbsListView.java:3423)
06-06 14:23:05.835: E/AndroidRuntime(2198): at android.os.Handler.handleCallback(Handler.java:725)
06-06 14:23:05.835: E/AndroidRuntime(2198): at android.os.Handler.dispatchMessage(Handler.java:92)
06-06 14:23:05.835: E/AndroidRuntime(2198): at android.os.Looper.loop(Looper.java:137)
06-06 14:23:05.835: E/AndroidRuntime(2198): at android.app.ActivityThread.main(ActivityThread.java:5041)
06-06 14:23:05.835: E/AndroidRuntime(2198): at java.lang.reflect.Method.invokeNative(Native Method)
06-06 14:23:05.835: E/AndroidRuntime(2198): at java.lang.reflect.Method.invoke(Method.java:511)
06-06 14:23:05.835: E/AndroidRuntime(2198): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-06 14:23:05.835: E/AndroidRuntime(2198): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-06 14:23:05.835: E/AndroidRuntime(2198): at dalvik.system.NativeStart.main(Native Method)

compilation error

Tryed to build using command "workspace/Launcher-Android/readium-sdk/Platform/Android$ ./ndk-compile.sh build ~/ndk/"

./MakeHeaders.sh: 35: ./MakeHeaders.sh: Platform/Android/MakeHeaders.sh: not found
make: Entering directory `/home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android'
rm -f /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/libs/armeabi/lib*.so /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/libs/armeabi-v7a/lib*.so /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/libs/mips/lib*.so /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/libs/x86/lib*.so
rm -f /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/libs/armeabi/gdbserver /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/libs/armeabi-v7a/gdbserver /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/libs/mips/gdbserver /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/libs/x86/gdbserver
rm -f /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/libs/armeabi/gdb.setup /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/libs/armeabi-v7a/gdb.setup /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/libs/mips/gdb.setup /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/libs/x86/gdb.setup
Compile++ thumb  : epub3 <= io.cpp
/home/alex/ndk/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -MMD -MP -MF /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/obj/local/armeabi/objs/epub3/ePub3/xml/utilities/io.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -fno-exceptions -fno-rtti -mthumb -Os -g -DNDEBUG -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Iinclude -I./../../ePub3 -I./../../ePub3/utilities -I./../../ePub3/xml -I./../../ePub3/xml/validation -I./../../ePub3/xml/utilities -I./../../ePub3/xml/tree -I./../../ePub3/ePub -I./../../Platform/Android/src -I./../../ePub3/ThirdParty/openssl-android/include -I./../../ePub3/ThirdParty/boost/include -I/home/alex/ndk/sources/cxx-stl/gnu-libstdc++/4.7/include -I/home/alex/ndk/sources/cxx-stl/gnu-libstdc++/4.7/libs/armeabi/include -I./../../ePub3/ThirdParty/icu4c/include -I./../../ePub3/ThirdParty/icu4c/include -I./../../ePub3/ThirdParty/icu4c/include -I./../../ePub3/ThirdParty/icu4c/include -I./../.. -DANDROID -std=gnu11 -include prefix.h -Wa,--noexecstack -std=gnu++11 -include prefix.h -fpermissive -frtti -fexceptions -std=gnu++11 -include prefix.h -fpermissive    -I/home/alex/ndk/platforms/android-9/arch-arm/usr/include -c  ./../../ePub3/xml/utilities/io.cpp -o /home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/obj/local/armeabi/objs/epub3/ePub3/xml/utilities/io.o 
cc1plus: warning: command line option '-std=gnu11' is valid for C/ObjC but not for C++ [enabled by default]
In file included from ./../../ePub3/xml/utilities/io.cpp:22:0:
./../../ePub3/xml/utilities/io.h:25:28: fatal error: ePub3/xml/base.h: No such file or directory
compilation terminated.
make: *** [/home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android/obj/local/armeabi/objs/epub3/ePub3/xml/utilities/io.o] Error 1
make: Leaving directory `/home/alex/workspace/Launcher-Android/readium-sdk/Platform/Android'

Pages are completely blank in case of SDK Launcher - Android

Hi all geeks,
I successfully built project on Windows (for Android). After following all instructions there on github, i run application(SDK Launcher-Android) on my Samsung galaxy tab 2 10.1 (gt-p5113 )(Android 4.2.2) and Samsung galaxy tab 750 (gt-p7500)(Android 4.0.4).
On both devices, it is showing complete blank pages without any error for every epub3.
I also made changes to 3 files as stated on github pull request.
But even after that it is showing complete blank pages.

Kindly guide and help as soon as possible as it is urgent for me.
@rkwright

JNI:getUniqueID return value is not fixed?

Test data:
http://epub-samples.googlecode.com/files/kusamakura-japanese-vertical-writing-20121124.epub
http://epub-samples.googlecode.com/files/wasteland-20120118.epub

I wrote test case for check unique id of book by JNI, but sometimes get 'http://www.aozora.gr.jp/cards/000148/card776.html@2012-04-24T00:00:00Z' , sometimes get 'http://www.aozora.gr.jp/cards/000148/card776.html@2012-04-24T00:00:0X'.

I read the code along the call chain, the unique id is constituted by 'dc:identifier' and 'dcterms:modified'.

I think the real reason under the JNI layer.

Faild to create a container

I added the next code to openBook method:

    ePub3::Container *c = new ePub3::Container(path);
    } catch(const std::exception &ex) {
        __android_log_print(ANDROID_LOG_VERBOSE, APPNAME, ex.what());
    }

And receive the next error:06-07 15:31:27.454: V/MY_APP(17422): Path does not point to a recognised archive file: '/storage/emulated/0/epubtest/Goody_Two-Shoes.epub'

This book can be opened via any epub reader

Missing JQuery?

Hi there,

I have compiled the SDK and the sample Launcher for Android and have run the Android launcher on my Galaxy Note 2. Everything seems to work fine except for viewing the actual file. I can successfully get the metadata and the table of contents but I can't view the actual contents of the epub file.

One of the few errors I'm getting is the following:
02-17 12:57:24.005: E/libepub3 [./../../Platform/Android/jni/package.cpp:725](6623): Package.nativeReadStreamForRelativePath(): no archive found for path 'EPUB/lib/jquery-1.8.2.min.js'

Any idea how to resolve this?

Error in readium-sdk when running ndk-compile.sh

I spotted an error when running the ndk-compile.sh in readium-sdk/Platform/Android/

I use Mac OSX 10.8.4 with 64 bit arch
I used android-ndk-r8e with the changes (http://developer.appcelerator.com/blog/2013/03/correcting-a-bug-in-the-latest-google-ndk-r8e.html)

The trouble is that compilation fails stating

make: /opt/android-ndk-r8e/toolchains/arm-linux-androideabi-4.7/prebuilt/darwin-x86/bin/arm-linux-androideabi-gcc: No such file or directory
make: *** [/Users/lamaro/Documents/readium_workspace/Launcher-Android/readium-sdk/Platform/Android/obj/local/armeabi/objs/epub3/ePub3/ThirdParty/libzip/mkstemp.o] Error 1

It wants to use darwin-x86 but my sistem is darwin-x86_64

I managed to build it but keep an eye out for this kind of error

i have a question about shared-js between ver 0.10 and 0.15

when i test in mfc, in repository of mfc develop, i saw news that js's version change 0.10 to 0.15.

so i change js's version too, to 0.15.

i have a test epub, readium provide and make by calibre(in calibre case, use scanned comicbook. html have a only image source).

and open epub.

in 0.10, comicbook image is good. but accessible_epub is not good. occur http error( with these )

error

almost ERROR_CONNECTION_INVALID.

and in 0.15, accessible_epub is good! very. but comicbook image is not good.

next images is captured image.

[this is using 0.10]
ver010image

[this is using 0.15]
ver015image

this html is good in chrome browser and ie.

is there big difference between 0.10 and 0.15 with image viewing?

and css is not available in epub?

thank you!

support for rendition:orientation/flow/spread

Note: no need for rendition:viewport, as this is only a newly-introduced hint (recent EPUB specification addition, so that reading systems have the option to determine canvas size prior to actually opening documents), and Readium fetches viewport dimensions from SVG / HTML metadata anyway.

problem on galaxy tab 4 10.1''

hi, i tested the launcher on a few devices. on normal size devices like galaxy s3, s4, note2, ... it works almost perfectly but on galaxy tab 10.1'' it seems page style has been broken. i'm not sure whether the problem is from javascript or not since some js functions are still working. i attached one capture image, i will send the test file if required.
[photo]
in the capture image, the moon icon & text should have been displayed in animation up to front but they have not.

HTTP server, InputStream API skip() reset() read(), restrictions for Content Filter Chain usage

This is a follow-up discussion to this Pull Request (when NanoHTTPD was replaced with AndroidAsync): #50

Comments reproduced here:

Hi @jccr I reviewed your latest commit and I noticed your addition in InputStream skip() and reset() in the non-isRange case. Note that with encrypted media, this is actually likely to result in incorrect stream positioning, as the "Content Filter Chain" mechanism is designed only to handle read() operations. See here:

https://github.com/readium/readium-sdk/blob/develop/ePub3/ePub/filter_chain_byte_stream.cpp#L71

https://github.com/readium/readium-sdk/blob/develop/ePub3/ePub/filter_chain_byte_stream_range.cpp#L69

However, I do not think that this is a ship-stopper, because as far as I can tell the AndroidAsync HTTP server does not invoke these methods anyway.

Ultimately, perhaps we could mimic what I did with NanoHTTPD server: implement a subset of InputStream to restrict usage to only Readium's required stream-access methods (I'm not sure about AndroidAsync's internals, but perhaps this would allow getting rid of the no-parameter read() method as well). Alternatively, perhaps we could just throw NotImplementedException or something along these lines to make it clear that the "Content Filter Chain" backend does not support arbitrary seeking, only a well-defined read-based protocol.

@nleme am I getting this right? It would be great to hear your thoughts before we merge, just to make sure we're not missing anything glaringly obvious :)

PS: regarding InputStream skip() usage in AndroidAsync, note that the returned value does not necessarily reflect the position in the raw underlying ByteStream in the case of encrypted media. However we can easily work around that without modifying AndroidAsync's source code:

if (start != inputStream.skip(start))
    throw new StreamSkipException("skip failed to skip requested amount");

https://github.com/koush/AndroidAsync/blob/master/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java#L278

As for Util.pump(): only this read() method signature is used:

int read = is.read(b.array(), 0, (int)toRead);

https://github.com/koush/AndroidAsync/blob/master/AndroidAsync/src/com/koushikdutta/async/Util.java#L86

Conclusion: at a later date we will definitely be able to easily restrict the InputStream API that AndroidAsync consumes. For now, let's just merge to develop (pending Nelson's approval).

HTTP byte range request is fulfilled with binary response of whole remaining stream?

First, the input stream is seeked from the beginning (also, note the endAt variable passed to the HTTP "Content-Range" header):
https://github.com/readium/SDKLauncher-Android/blob/develop/SDKLauncher-Android/src/org/readium/sdk/android/launcher/util/EpubServer.java#L173
PS: which in itself is wrong, because the contract of skip() is to seek from the current position, see readium/readium-sdk#103

Then, the buffered response is returned for the entire remaining length of the input stream, rather than until the aforementioned endAt boundary:
https://github.com/readium/SDKLauncher-Android/blob/develop/SDKLauncher-Android/src/fi/iki/elonen/NanoHTTPD.java#L612

This may explain the performance issues I observe when loading video/audio-containing HTML documents, although my hardware device is pretty old, so it's hard to tell.

pages are blank

I finally made the app run (could not make it work on Windows or Linux). You need a mac =)
The app works. It can display chapters and so on. But the pages are blank.

Does not render content

I downloaded http://jenkinsmaster.datalogics-cloud.com:8080/view/Readium-Launcher/job/Readium-SDK-Launcher-Android-develop/label=Mac/lastSuccessfulBuild/artifact/SDKLauncher-Android/bin/SDKLauncher-Android-release-unsigned.apk, http://jenkinsmaster.datalogics-cloud.com:8080/view/Readium-Launcher/job/Readium-SDK-Launcher-Android-develop/label=Mac/ and installed it on a Nexus 7 with Cyanogenmod 12-20150131-NIGHTLY-grouper. I can open ePub files and I do see the metadata and TOC, but pages are not rendered at all (I only see white pages). Am I missing something? Must the Google Chrome app and/or Google Play Services be installed for this to work?

compilation error - Forward.h -> include base.h No such file

Hi,
Tryed to build with the command "./ndk-compile.sh build ~/ndk/"

Dev. environment:
Linux x64
used instruction from readme

In file included from include/ePub3/epub3.h:34:0,
                 from ./../../ePub3/utilities/byte_buffer.h:12,
                 from ./../../ePub3/utilities/byte_buffer.cpp:11:
include/ePub3/Forward.h:12:24: fatal error: epub3/base.h: No such file or directory
 #include <epub3/base.h>
                        ^
compilation terminated.

Resolved:
"epub3" need to have cap on the "p"

#include <ePub3/base.h>

Some images are truncated / not fully loaded

Hello,

It happens that some images in an epub are not fully loaded and not displayed correctly.
I saw it multiple times and not always on the same image/epub.

Here is an example :
Screenshot

Crash while loading a page with a lot of resources.

Hello,

I have an epub with a lot of image and audio resources.
When loading a page, the app crashes with the following error while loading a resource with createResourceInputStream.

1662   libepub3 [./../../..  D  StaticMethod(): calling static method 'createResourceInputStream[(JJ)Lorg/readium/sdk/android/util/ResourceInputStream;]'
  121                   DEBUG  I  *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
  121                   DEBUG  I  Build fingerprint: 'google/nakasi/grouper:4.4.2/KOT49H/937116:user/release-keys'
  121                   DEBUG  I  Revision: '0'
  121                   DEBUG  I  pid: 1662, tid: 1793, name: NanoHttpd Reque  >>> org.readium.sdk.android.launcher <<<
  121                   DEBUG  I  signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000001c
  121                   DEBUG  I  r0 69ed6100  r1 0018619e  r2 00000000  r3 00000000
  121                   DEBUG  I  r4 69ed6100  r5 6a644ef8  r6 00000000  r7 6e523e1c
  121                   DEBUG  I  r8 6f39bb0c  r9 6e523e10  sl 6a644f08  fp 6f39bb24
  121                   DEBUG  I  ip 00000006  sp 6f39baf8  lr 6b227b23  pc 6b227b26  cpsr 60030030
  121                   DEBUG  I  d0  0000000000000000  d1  0000000000000000
  121                   DEBUG  I  d2  6165727453747570  d3  6f4c294a4a285b6d
  121                   DEBUG  I  d4  69646165722f6772  d5  612f6b64732f6d75
  121                   DEBUG  I  d6  752f64696f72646e  d7  6f7365522f6c6974
  121                   DEBUG  I  d8  4388000000000110  d9  000000004387e600
  121                   DEBUG  I  d10 0000000000000000  d11 0000000000000000
  121                   DEBUG  I  d12 0000000000000000  d13 0000000000000000
  121                   DEBUG  I  d14 0000000000000000  d15 0000000000000000
  121                   DEBUG  I  d16 000000000000001c  d17 0000000000000000
  121                   DEBUG  I  d18 3fd0000000000000  d19 3ffe6c2b4481cd84
  121                   DEBUG  I  d20 4026a10d00000000  d21 400e0c0400000000
  121                   DEBUG  I  d22 0000000000000000  d23 401b2981597f8e95
  121                   DEBUG  I  d24 0000000000000000  d25 0000004700000046
  121                   DEBUG  I  d26 0000000000000000  d27 0000000400000004
  121                   DEBUG  I  d28 0000000000000000  d29 0000000000000000
  121                   DEBUG  I  d30 0000000400000004  d31 0000000400000004
  121                   DEBUG  I  scr 80000010
  121                   DEBUG  I  backtrace:
  121                   DEBUG  I  #00  pc 000a0b26  /data/app-lib/org.readium.sdk.android.launcher-2/libepub3.so (ePub3::ZipFileByteStream::Seek(unsigned int, std::_Ios_Seekdir)+29)
  121                   DEBUG  I  #01  pc 000eb1af  /data/app-lib/org.readium.sdk.android.launcher-2/libepub3.so (Java_org_readium_sdk_android_util_ResourceInputStream_nativeSkip+38)
  121                   DEBUG  I  #02  pc 0001dbcc  /system/lib/libdvm.so (dvmPlatformInvoke+112)
  121                   DEBUG  I  #03  pc 0004e123  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
  121                   DEBUG  I  #04  pc 00026fe0  /system/lib/libdvm.so
  121                   DEBUG  I  #05  pc 0002dfa0  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
  121                   DEBUG  I  #06  pc 0002b638  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
  121                   DEBUG  I  #07  pc 00060581  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
  121                   DEBUG  I  #08  pc 000605a5  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
  121                   DEBUG  I  #09  pc 0005528b  /system/lib/libdvm.so
  121                   DEBUG  I  #10  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
  121                   DEBUG  I  #11  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
  121                   DEBUG  I  stack:
  121                   DEBUG  I  6f39bab8  69ed6100
  121                   DEBUG  I  6f39babc  6b396870  /data/app-lib/org.readium.sdk.android.launcher-2/libepub3.so
  121                   DEBUG  I  6f39bac0  69ed6100
  121                   DEBUG  I  6f39bac4  6f39bacc
  121                   DEBUG  I  6f39bac8  69b0fa00
  121                   DEBUG  I  6f39bacc  69ed6100
  121                   DEBUG  I  6f39bad0  00000006
  121                   DEBUG  I  6f39bad4  00000000
  121                   DEBUG  I  6f39bad8  00000006
  121                   DEBUG  I  6f39badc  00000010
  121                   DEBUG  I  6f39bae0  69ed6100
  121                   DEBUG  I  6f39bae4  6a644ef8
  121                   DEBUG  I  6f39bae8  00000000
  121                   DEBUG  I  6f39baec  6e523e1c
  121                   DEBUG  I  6f39baf0  6f39bb0c
  121                   DEBUG  I  6f39baf4  6b227b23  /data/app-lib/org.readium.sdk.android.launcher-2/libepub3.so (ePub3::ZipFileByteStream::Seek(unsigned int, std::_Ios_Seekdir)+26)
  121                   DEBUG  I  #00  6f39baf8  6b39cd4c  /data/app-lib/org.readium.sdk.android.launcher-2/libepub3.so
  121                   DEBUG  I  6f39bafc  6b2721b1  /data/app-lib/org.readium.sdk.android.launcher-2/libepub3.so (Java_org_readium_sdk_android_util_ResourceInputStream_nativeSkip+40)
  121                   DEBUG  I  #01  6f39bb00  62afd598  /dev/ashmem/dalvik-LinearAlloc (deleted)
  121                   DEBUG  I  6f39bb04  415cfbd0  /system/lib/libdvm.so (dvmPlatformInvoke+116)
  121                   DEBUG  I  #02  6f39bb08  0018619e
  121                   DEBUG  I  6f39bb0c  415fb111  /system/lib/libdvm.so
  121                   DEBUG  I  6f39bb10  6e523e0c
  121                   DEBUG  I  6f39bb14  00000001
  121                   DEBUG  I  6f39bb18  00000000
  121                   DEBUG  I  6f39bb1c  42188dd0  /dev/ashmem/dalvik-heap (deleted)
  121                   DEBUG  I  6f39bb20  421743d8  /dev/ashmem/dalvik-heap (deleted)
  121                   DEBUG  I  6f39bb24  41600127  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+402)```

Incorrect regular expression match+replace for HTML injection, when no line breaks

https://github.com/readium/SDKLauncher-Android/blob/develop/SDKLauncher-Android/src/org/readium/sdk/android/launcher/util/HTMLUtil.java#L54

String pattern = "<head.*>";

To reproduce: any HTML file without line breaks results in the injected scripts being appended to the HTML, resulting in a WebView parsing error displayed at the top of the view.

Same problem with iOS and OSX:
readium/SDKLauncher-OSX#34
readium/readium-sdk#136

error compiling sources

when compiling I get the following output:

In file included from ./../../ePub3/xml/utilities/io.cpp:22:0:
./../../ePub3/xml/utilities/io.h:30:1: error: 'EPUB3_XML_BEGIN_NAMESPACE' does not name a type
./../../ePub3/xml/utilities/io.h:65:1: error: expected class-name before '{' token
./../../ePub3/xml/utilities/io.h:93:1: error: expected class-name before '{' token
./../../ePub3/xml/utilities/io.h: In constructor 'StreamInputBuffer::StreamInputBuffer(std::istream&)':
./../../ePub3/xml/utilities/io.h:95:47: error: class 'StreamInputBuffer' does not have any field named 'InputBuffer'
./../../ePub3/xml/utilities/io.h: In constructor 'StreamInputBuffer::StreamInputBuffer(StreamInputBuffer&&)':
./../../ePub3/xml/utilities/io.h:96:49: error: class 'StreamInputBuffer' does not have any field named 'InputBuffer'
In file included from ./../../ePub3/xml/utilities/io.cpp:22:0:
./../../ePub3/xml/utilities/io.h: At global scope:
./../../ePub3/xml/utilities/io.h:125:1: error: 'EPUB3_XML_END_NAMESPACE' does not name a type
./../../ePub3/xml/utilities/io.cpp:32:1: error: 'InputBuffer' does not name a type
./../../ePub3/xml/utilities/io.cpp:37:5: error: 'InputBuffer' has not been declared
./../../ePub3/xml/utilities/io.cpp: In function 'int read_cb(void_, char_, int)':
./../../ePub3/xml/utilities/io.cpp:39:5: error: 'InputBuffer' was not declared in this scope
./../../ePub3/xml/utilities/io.cpp:39:19: error: 'p' was not declared in this scope
./../../ePub3/xml/utilities/io.cpp:39:40: error: expected type-specifier before 'InputBuffer'
./../../ePub3/xml/utilities/io.cpp:39:40: error: expected '>' before 'InputBuffer'
./../../ePub3/xml/utilities/io.cpp:39:40: error: expected '(' before 'InputBuffer'
./../../ePub3/xml/utilities/io.cpp:39:52: error: expected primary-expression before '>' token
./../../ePub3/xml/utilities/io.cpp:39:62: error: expected ')' before ';' token
./../../ePub3/xml/utilities/io.cpp: At global scope:
./../../ePub3/xml/utilities/io.cpp:42:5: error: 'InputBuffer' has not been declared
./../../ePub3/xml/utilities/io.cpp: In function 'int close_cb(void_)':
./../../ePub3/xml/utilities/io.cpp:44:5: error: 'InputBuffer' was not declared in this scope
./../../ePub3/xml/utilities/io.cpp:44:19: error: 'p' was not declared in this scope
./../../ePub3/xml/utilities/io.cpp:44:35: error: expected type-specifier before 'InputBuffer'
./../../ePub3/xml/utilities/io.cpp:44:35: error: expected '>' before 'InputBuffer'
./../../ePub3/xml/utilities/io.cpp:44:35: error: expected '(' before 'InputBuffer'
./../../ePub3/xml/utilities/io.cpp:44:47: error: expected primary-expression before '>' token
./../../ePub3/xml/utilities/io.cpp:44:57: error: expected ')' before ';' token
./../../ePub3/xml/utilities/io.cpp: At global scope:
./../../ePub3/xml/utilities/io.cpp:47:11: error: 'InputBuffer' has not been declared
./../../ePub3/xml/utilities/io.cpp: In function 'xmlDoc_ xmlReadDocument(const char_, const char_, int)':
./../../ePub3/xml/utilities/io.cpp:49:22: error: 'buf' was not declared in this scope
./../../ePub3/xml/utilities/io.cpp: At global scope:
./../../ePub3/xml/utilities/io.cpp:51:11: error: 'InputBuffer' has not been declared
./../../ePub3/xml/utilities/io.cpp: In function 'xmlDoc* htmlReadDocument(const char
, const char_, int)':
./../../ePub3/xml/utilities/io.cpp:53:23: error: '_buf' was not declared in this scope
./../../ePub3/xml/utilities/io.cpp: In constructor 'OutputBuffer::OutputBuffer(const string&)':
./../../ePub3/xml/utilities/io.cpp:66:79: error: 'InternalError' was not declared in this scope
./../../ePub3/xml/utilities/io.cpp:72:65: error: 'InternalError' was not declared in this scope
make: Leaving directory `D:/Development/Workspaces/stuff/readium-sdk/Platform/Android'
./../../ePub3/xml/utilities/io.cpp: At global scope:
./../../ePub3/xml/utilities/io.cpp:119:1: error: 'EPUB3_XML_END_NAMESPACE' does not name a type

Anyone knows what could be the problem here?

Native library epub3 can't load

The APP can't run because occured a error in Epub3.java in "System.loadLibrary("epub3");". I think that is a error in my epub3.jar, but when I build the jar didn't show any error.

The error in LogCat:
07-17 13:49:46.232: E/AndroidRuntime(1116): FATAL EXCEPTION: main
07-17 13:49:46.232: E/AndroidRuntime(1116): java.lang.ExceptionInInitializerError
07-17 13:49:46.232: E/AndroidRuntime(1116): at org.readium.sdk.android.launcher.ContainerList.onCreate(ContainerList.java:106)
07-17 13:49:46.232: E/AndroidRuntime(1116): at android.app.Activity.performCreate(Activity.java:5008)
07-17 13:49:46.232: E/AndroidRuntime(1116): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
07-17 13:49:46.232: E/AndroidRuntime(1116): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
07-17 13:49:46.232: E/AndroidRuntime(1116): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
07-17 13:49:46.232: E/AndroidRuntime(1116): at android.app.ActivityThread.access$600(ActivityThread.java:130)
07-17 13:49:46.232: E/AndroidRuntime(1116): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
07-17 13:49:46.232: E/AndroidRuntime(1116): at android.os.Handler.dispatchMessage(Handler.java:99)
07-17 13:49:46.232: E/AndroidRuntime(1116): at android.os.Looper.loop(Looper.java:137)
07-17 13:49:46.232: E/AndroidRuntime(1116): at android.app.ActivityThread.main(ActivityThread.java:4745)
07-17 13:49:46.232: E/AndroidRuntime(1116): at java.lang.reflect.Method.invokeNative(Native Method)
07-17 13:49:46.232: E/AndroidRuntime(1116): at java.lang.reflect.Method.invoke(Method.java:511)
07-17 13:49:46.232: E/AndroidRuntime(1116): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-17 13:49:46.232: E/AndroidRuntime(1116): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-17 13:49:46.232: E/AndroidRuntime(1116): at dalvik.system.NativeStart.main(Native Method)
07-17 13:49:46.232: E/AndroidRuntime(1116): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load epub3: findLibrary returned null
07-17 13:49:46.232: E/AndroidRuntime(1116): at java.lang.Runtime.loadLibrary(Runtime.java:365)
07-17 13:49:46.232: E/AndroidRuntime(1116): at java.lang.System.loadLibrary(System.java:535)
07-17 13:49:46.232: E/AndroidRuntime(1116): at org.readium.sdk.android.EPub3.(EPub3.java:44)
07-17 13:49:46.232: E/AndroidRuntime(1116): ... 15 more

About "vertical writing" features check issue

For description of the original test file, see:​
http://code.google.com/p/epub-samples/wiki/SamplesListing#kusamakura-japanese-vertical-writing

I've studied the relevant specifications @ ​http://www.idpf.org/epub/altss-tags/#app-vertical-text-style-set-tags.

I also read and ran a test project( https://github.com/mgylling/epub-testsuite ) which involved manual checking.

In order to determine whether a book has the ​vertical writing feature, I only need to access the book's chapter data and analyze its CSS definition against the specification.

I hope that the Readium SDK facilitates such an interface or method, with which I may test the contents of a specific chapter so that I can tell if the book supports ​vertical writing.

The approach in the epub-testsuite project was to check by eyesight and fill out the results in a table. My purposed approach will be different, the checking will be done automatically.

That is just my proposal, please see if it is necessary.

Pages partially rendered - Must tap or inspect to get it fully rendered!

We're experiencing really, really weird behaviors of the WebView on Android, 4.4.2 and 5.0.2: when we navigate to a new chapter, some contents is not displayed, but the page layout is (or seems to be) correct. For example:

  • with "Moby Dick", the chapter titles are not displayed, but the pargaraphs below are OK.
  • with "Accessible Epub 3", the first page of the chapter is completely blank.

In both cases, the page gets fully rendered as soon as you tap the webview, or... inspect it with Chrome !
We're currently using the "1.0" release.

can not render font-face

Hi.
I tested readium with an epub that embedded fonts in it. it render font on readium chrome app but it does not render font on android launcher, can android launcher render css and font but it is not implemented yet? or android webkit can not render font-face?

Thank you very much

Android Studio

Hi. Since all new Android project will be developed in Android Studio - it would be nice if Readium could work with gradle/Studio. Has anyone managed to make Readium work within Android Studio? Im getting this error after importing the project:

/Users/Finne/Documents/projects/SDKLauncher-Android-Gradle/ePub3Library/src/main/jni/container.cpp:22:27: fatal error: ePub3/archive.h: No such file or directory
#include <ePub3/archive.h>
^
compilation terminated.
make: *** [/Users/Finne/Documents/projects/SDKLauncher-Android-Gradle/ePub3Library/build/intermediates/ndk/release/obj/local/arm64-v8a/objs/ePub3Library//Users/Finne/Documents/projects/SDKLauncher-Android-Gradle/ePub3Library/src/main/jni/container.o] Error 1
Error:Execution failed for task ':ePub3Library:compileReleaseNdk'.

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Applications/android-ndk-r10d/ndk-build'' finished with non-zero exit value 2

Error while opening a book with a subtitle

Hello,

I'm getting an error when i try to open a book with a subtitle.
It does not occur on iOS.
When i remove the subtitle (<dc:title id="subtitle">Book Subtitle</dc:title>) it works fine.

Here is the metadata from content.opf

<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf" xmlns="http://www.idpf.org/2007/opf">
    <dc:title id="title">Book Title</dc:title>
    <meta property="title-type" refines="#title">main</meta>
    <dc:title id="subtitle">Book Subtitle</dc:title>
    <meta property="title-type" refines="#subtitle">subtitle</meta>
    <dc:creator id="creator01">John Doe</dc:creator>
    <meta scheme="marc:relators" property="role" refines="#creator01">aut</meta>
    <meta property="display-seq" refines="#creator01">1</meta>
    <dc:creator id="creator02">Foo Bar</dc:creator>
    <meta scheme="marc:relators" property="role" refines="#creator02">aut</meta>
    <meta property="display-seq" refines="#creator02">2</meta>
    <dc:creator id="creator03">Bar Foo</dc:creator>
    <meta scheme="marc:relators" property="role" refines="#creator03">aut</meta>
    <meta property="display-seq" refines="#creator03">3</meta>
    <dc:date>2014-06-04</dc:date>
    <meta property="dcterms:modified">2014-06-04T00:00:00Z</meta>
    <dc:identifier id="bookid">123456789FOO</dc:identifier>
    <dc:language>fr</dc:language>
    <meta name="cover" content="cover-image"/>
</metadata>

Here is the error :

19244                   libc  F  Fatal signal 11 (SIGSEGV) at 0x0000000c (code=1), thread 19244 (ndroid.launcher)
  121                   DEBUG  I  *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
  121                   DEBUG  I  Build fingerprint: 'google/nakasi/grouper:4.4.2/KOT49H/937116:user/release-keys'
  121                   DEBUG  I  Revision: '0'
  121                   DEBUG  I  pid: 19244, tid: 19244, name: ndroid.launcher  >>> org.readium.sdk.android.launcher <<<
  121                   DEBUG  I  signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000000c
  121                   DEBUG  I  r0 00000004  r1 bea33f5c  r2 00000004  r3 0000000c
  121                   DEBUG  I  r4 699a6000  r5 69d75e74  r6 bea33fb4  r7 bea340b0
  121                   DEBUG  I  r8 bea33f88  r9 69d779f8  sl 699a6000  fp 69d77a00
  121                   DEBUG  I  ip 00000001  sp bea33f54  lr 6b32f198  pc 6b214e48  cpsr 80070010
  121                   DEBUG  I  d0  000000003a6e7275  d1  0000000000000000
  121                   DEBUG  I  d2  0000000000000000  d3  0000000000000000
  121                   DEBUG  I  d4  000000010a3e6c6f  d5  3ff0000000000000
  121                   DEBUG  I  d6  3ff0000000000000  d7  3ff0000000000000
  121                   DEBUG  I  d8  0000000000000000  d9  0000000000000000
  121                   DEBUG  I  d10 0000000000000000  d11 0000000000000000
  121                   DEBUG  I  d12 0000000000000000  d13 0000000000000000
  121                   DEBUG  I  d14 0000000000000000  d15 0000000000000000
  121                   DEBUG  I  d16 20200a3e612f3c34  d17 2020202020202020
  121                   DEBUG  I  d18 3f91a7b9611a7b96  d19 401211a7c0000000
  121                   DEBUG  I  d20 401211a7c0000000  d21 4020000000000000
  121                   DEBUG  I  d22 3fe211a7c0000000  d23 3ff0000000000000
  121                   DEBUG  I  d24 3ff0000000000000  d25 0000000000000000
  121                   DEBUG  I  d26 b96377ce858a5d48  d27 b96377ce858a5d48
  121                   DEBUG  I  d28 3ff0000000000000  d29 0000000000000000
  121                   DEBUG  I  d30 0000000000000000  d31 c088480000000000
  121                   DEBUG  I  scr 60000010
  121                   DEBUG  I  backtrace:
  121                   DEBUG  I  #00  pc 0008de48  /data/app-lib/org.readium.sdk.android.launcher-2/libepub3.so
  121                   DEBUG  I  #01  pc 001a8194  /data/app-lib/org.readium.sdk.android.launcher-2/libepub3.so
  121                   DEBUG  I  #02  pc 000d23c9  /data/app-lib/org.readium.sdk.android.launcher-2/libepub3.so (ePub3::Package::FullTitle(bool) const+312)
  121                   DEBUG  I  stack:
  121                   DEBUG  I  bea33f14  6b260dfb  /data/app-lib/org.readium.sdk.android.launcher-2/libepub3.so (ePub3::Property::LocalizedValue(std::locale const&) const+270)
  121                   DEBUG  I  bea33f18  00000028
  121                   DEBUG  I  bea33f1c  698947fc
  121                   DEBUG  I  bea33f20  00000000
  121                   DEBUG  I  bea33f24  bea33fa8  [stack]
  121                   DEBUG  I  bea33f28  bea33f3c  [stack]
  121                   DEBUG  I  bea33f2c  6b25ff07  /data/app-lib/org.readium.sdk.android.launcher-2/libepub3.so (ePub3::PropertyHolder::PropertiesMatching(ePub3::IRI const&, bool) const+94)
  121                   DEBUG  I  bea33f30  401a9e85  /system/lib/libc.so (dlmalloc)
  121                   DEBUG  I  bea33f34  ffffffff
  121                   DEBUG  I  bea33f38  0000000a
  121                   DEBUG  I  bea33f3c  401c52ad  /system/lib/libc.so (strtoul+120)
  121                   DEBUG  I  bea33f40  69d78b6c
  121                   DEBUG  I  bea33f44  00000000
  121                   DEBUG  I  bea33f48  0000000a
  121                   DEBUG  I  bea33f4c  bea33fcc  [stack]
  121                   DEBUG  I  bea33f50  bea33fcc  [stack]
  121                   DEBUG  I  #00  bea33f54  699a6000
  121                   DEBUG  I  #01  bea33f58  bea33fb4  [stack]
  121                   DEBUG  I  bea33f5c  bea340b0  [stack]
  121                   DEBUG  I  bea33f60  bea33f88  [stack]
  121                   DEBUG  I  bea33f64  bea33fcc  [stack]
  121                   DEBUG  I  bea33f68  bea33f80  [stack]
  121                   DEBUG  I  bea33f6c  6b2593cd  /data/app-lib/org.readium.sdk.android.launcher-2/libepub3.so (ePub3::Package::FullTitle(bool) const+316)
  121                   DEBUG  I  #02  bea33f70  00000001
  121                   DEBUG  I  bea33f74  bea33f90  [stack]
  121                   DEBUG  I  bea33f78  bea33fa8  [stack]
  121                   DEBUG  I  bea33f7c  bea33f8c  [stack]
  121                   DEBUG  I  bea33f80  6b3a61bc
  121                   DEBUG  I  bea33f84  698947fc
  121                   DEBUG  I  bea33f88  69d76118
  121                   DEBUG  I  bea33f8c  69d76108
  121                   DEBUG  I  bea33f90  69a7c7a0
  121                   DEBUG  I  bea33f94  69a7c7b0
  121                   DEBUG  I  bea33f98  69a7c7b0
  121                   DEBUG  I  bea33f9c  699a5ff8
  121                   DEBUG  I  bea33fa0  699a6000
  121                   DEBUG  I  bea33fa4  699a6000
  121                   DEBUG  I  bea33fa8  69d779e8
  121                   DEBUG  I  bea33fac  69d77a00

Support for MathML

Need to have basic support for MathML. If most of the tests in Chapter 4 of SmokeTestFXL pass, then this issue can be closed.

Inconsistent tabs/spaces in code base.

The project seems to have started with tabs as the code indent style. Over time code with 4 spaces as indentation has been introduced into the code base (I'm guilty of this too if you can tell from my latest PRs)

What should we do about this?

  • Enforce tabs as the project's indentation style, while fixing up all other inconsistencies?
  • Switch everything to use spaces?

(I don't mean to start a holy war here..)

SDK error handler with warning dialog (no fatal exception)

Hi geeks,

I run Readium SDK Launcher app on my android device. There is a check in source that if book being opened is not an EPUB3 then it displays a toast that says "only epub3 books are supported for now!!!" . Why this check is there. Why Support for EPUB2 is not there in current version of Readium??? What is technically reason behind this issue?

Thanks,
/perrygarg

Support for RSO at document load event

The EPUB Reading System object needs to be loaded and read at the time of the document load event. This can be tested with SmokeTestFXL in the scripting chapter. If rso-010 passes, this issue can be closed.

Windows Eclipse build: symbolic links in asset/readium-shared-js not working?

host_app_feedback.js inconsistent with other platforms (outdated?)

The host_app_feedback.js included with the launcher is inconsistent with the one in the iOS/OSX launchers.

For example:

It includes a hook into ReadiumSDK.Events.CONTENT_DOCUMENT_LOADED (the others do not) and the handler is missing the right callback signature:
this.onContentLoaded = function() {

should be something like
this.onContentLoaded = function($iframe, spineItem) {

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.