GithubHelp home page GithubHelp logo

jessedc / jctiledscrollview Goto Github PK

View Code? Open in Web Editor NEW
311.0 19.0 47.0 28.64 MB

A set of classes that wrap UIScrollView and CATiledLayer. It aims to simplify displaying large images and PDFs at multiple zoom scales.

License: MIT License

Objective-C 98.25% Ruby 1.11% Makefile 0.64%

jctiledscrollview's Introduction

JCTiledScrollView

JCTiledScrollView is a set of classes that wrap UIScrollView and CATiledLayer. The project to simplify displaying large images and PDFs at multiple zoom scales.

JCTiledScrollView was introduced during my CATiledLayer presentation at Melbourne CocoaHeads 2012. Video, Slides, Blog.

Features

  • Display tiled bitmap images and single page PDFs with two separate classes
  • Supports standard and high resolution displays
  • You only need to provide one set of bitmap tiles; no need for @2x tiles
  • A handy set of default UIGestureRecognizer actions and delegate callbacks
  • Annotation support with an interface similar to MKMapView
  • Demo code, example PNG tiles and PDF file included
  • Supports iOS 8.0+

Skipping Girl JCTiledScrollView DemoPDF Rendering in JCTiledScrollView Demo

Installation

TODO

Handy Links

Further Reading on CATiledLayer

Licence

The "Skipping Girl" image is copyright (c) 2012, Jesse Collis and licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

JCTiledScrollView is open-sourced software licensed under the MIT license.

jctiledscrollview's People

Contributors

jessedc avatar joohansson avatar petehare avatar rayh avatar yichizhang 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  avatar  avatar  avatar

jctiledscrollview's Issues

Clamp the setContentCenter method

set content centre should be clamped so the method doesn't set the contentCenter too far into the centre. It's obvious at the 1x zoom scales

Refactor scrollViewDidScroll logic

The logic for when to call correctScreenPositionAllAnnotationsIncludingOutOfBounds is a bit messy and should be made a lot nicer.

In addition, the method itself is horribly long and messy.

WWDC

Hey Jesse. It's pj from cocoa heads.
I have an emergency situation and I need to get in touch with someone who's at wwdc before event is over (to ask an app review consultant)
can you get me in touch with some over there who'd be happy to help.

iPhone Plus @3x issue

NSInteger col = (NSInteger)((CGRectGetMinX(rect) * scale) / self.tileSize.width);
NSInteger row = (NSInteger)((CGRectGetMinY(rect) * scale) / self.tileSize.height);

Should be

  NSInteger col = (NSInteger)(((CGRectGetMinX(rect) + 1) * scale) / self.tileSize.width);
  NSInteger row = (NSInteger)(((CGRectGetMinY(rect) + 1) * scale) / self.tileSize.height);

Fine tune annotation fade in/out and when they're added and removed

The logic associated with removing annotations depends on the annotation contentPosition; When an annotation view's centre point moves outside the bounds of the scroll view they fade out. This logic needs to take into account the bounds of the annotation view within the scroll view.

Annotation at higher zoom level

First off thanks for making this library! unfortunately I can't really use it now because I am facing some issues.

I need to make a railway network map, came here from html5 because html5 is too slow.

  1. The annotations, can they zoom together with the map? can i define the annotation images together with the scale map and have them scale together?

  2. An issue with annotations on the scrollview, it happens when you zoom out, the annotation will not point at the same spot because of coordinates 'losses'.

I was thinking maybe we could define the coordinates based on the highest zoom level instead of the lowest, this way if we need the lower zoom level coordinates we can always scale down by dividing ourselves.

Position of annotation not so precise

Hi,
I'm using your library and I do hope you can help me out on this.
I've made some modifications in the library, which the TileView received a longPress and it adds a annotation right in the point the user is pressing.

It works fine when the PDF doesn't have many levels, but I'm using one which has 7 levels and when I try to get the position (x,y) in the TileView , it is a little bit off, usually a bit left off the position I actually pressed, do you have any clue why?

Best regards,
Renan

PDF inverted

Using the JCPDFTiledView to display PDF returns and inverted view.

Annotations are drawn over super view elements when the tiles are not

The scrollview is constrained to below the label in the demo and that is correct. Tiles or annotations are not drawn over the status label which is also correct but annotations are drawn OVER the iphone status bar with battery level.

I put the scrollview inside another view and now my annotations are drawn over both my navigation bar and tab bar. I can't figure out how to fix that? Tiles are drawn correct.

Adding overlays and annotations to JCTiledScrollView

Hello

I really like what you are doing here. It really gave me a kickstart on my current project. :)

I would like to donate annotations and overlays functionality to JCTiledScrollView. My plan is to take the annotations and overlay implementation from Route-Me library and adapt it to the JCTiledScrollView needs. It has some very nice and advanced anotations stuff including automatic annotations grouping. I have a working prototype but It needs a lot of refactoring to be nice and reusable.

For annotations and overlays to work, I will need to create a new encapsulating view, that will hold the overlay view and the current JCTiledScrollView. I think, the best way to go about with this is to rename current JCTiledScrollView to something else and name the encapsulating view as a JCTiledScrollView. This new encapsulating view will act to the outside world as a current JCTiledScrollView and will include additional methods for adding annotations.

I will fork this project and start working on this. If you like how it is coming along, I would be pleased, if my overlay implementation would merge into the master branch of JCTiledScrollView.

In order to make the overlay extension as compatible as possible with the current JCTiledScrollView project, I want to respect your coding standards and I would like to ask you, how to rename the current JCTiledScrollView and give this name to the newly created encapsulating view.

Group pins

Hi,

I'm using your library for sometime which I have to say it's really great and I'm trying to figure out a way to group the annotations when the user zooms out, the same way Google Map does when you have several annotations in the map and zooms out and then all of them are grouped.

Is it possible to do something like that?

Wrong annotation placement

Hello, I'm writing indoor navigation app and using JCTiledScrollView. My map has predefined points (coordinates in pixels) for each facility. When I trying to set annotation for facility (set annotation for facility coordinates), annotation is places in a wrong place.

Here the screenshot of device screen http://mihael.me/sites/default/files/screenshot1.png
Marker must be on Century Theatres , but it does not :( I debug the app, and coordinates are passed correctly.
Maybe I'm doing something wrong ? Maybe I must convert pixels to points or something like that. Can you please help me.

Tilesize in retina device is not correct

Screenshot:
Wrong:
ios 2014417 9 36 38

Should be:
ios 2014417 9 35 41

I think code in JCTiledView.m

    CGSize scaledTileSize = CGSizeApplyAffineTransform(self.tileSize, CGAffineTransformMakeScale(self.contentScaleFactor, self.contentScaleFactor));
    self.tiledLayer.tileSize = scaledTileSize;

is not correct: scaledTileSize will be 512 in retina device, but the tile images size is 256x256.

Drawing path line like DemoAnnotation

Hey there,
thanks for you excellent classes
I had a lot more fun with tilemap on iOS
I have more question about that
How could i draw strake line path like DemoAnnotation did?
thanks

Support Cocoapods

This project has a podspec contributed a long time ago and is published on the Spec Repo but I'm not confident it would work correctly in today's environment.

It looks like Cocoapods will support static libraries a bit better in an upcoming release? CocoaPods/CocoaPods#6811

I've reached out to @yichizhang to see if we can get a a new version published in the near future.

Add this repo with Cocoapods

I know how to use cocoapods and I think that is the preferred method because it's so simple.

How do I import this source to my xcode project in a proper way (without cocoapods)?

jessedc, can you give me a suggestion?

I'm using your JCTiledScrollView to render a custom map similar to your Seoul City Metro Map. I have a feature, that is,when user select a station on the map , he can set it as start ore end station, for example, arfter setting a start station, a pinview or a annotation like MKPinAnnoationView will appear this position. when user zoom out or zoom in the map, the annotation will zoom out or zoom in in the fixed position.

I know, in your app, when i select a station , there will appear a circle, when user zoom out or zoom in the map, the circle will zoom out or zoom in in the fixed position. how to implement this feature?

Compilation errors

Hi,

I recently download branch master project, try to compile demo project with XCode 4.2 without modifications and i got errors on

  • unused parameters like in JCPDFTiledView.m, line 46 "- (void)drawRect:(__unused CGRect)rect".
    or
  • undeclared selector like in JCTiledScrollView.m for ui gesture.

Can you explain me why and how to fix them ?

Thanx a lot.

iOS11 - Background / Main thread problem

First things first - thank you very much for such a great library :)

While testing using the latest XCode 9 (Beta) on an iOS 11 device, we started getting the following errors from Apple:

Main Thread Checker: UI API called on a background thread: -[UIView layer]
PID: 664, TID: 236774, Thread name: (none), Queue name: com.apple.root.default-qos, QoS: 21
Backtrace:
4 IKEA Store 0x0000000100bc0fc8 -[JCTiledView tiledLayer] + 40
5 IKEA Store 0x0000000100bc1168 -[JCTiledView drawRect:] + 76
6 UIKit 0x000000018b146e94 <redacted> + 408
7 QuartzCore 0x0000000185cf48b8 <redacted> + 296
8 QuartzCore 0x0000000185c29a68 <redacted> + 1532
9 QuartzCore 0x0000000185cc00f0 <redacted> + 812
10 libdispatch.dylib 0x000000010213d40c _dispatch_client_callout + 16
11 libdispatch.dylib 0x00000001021495a4 _dispatch_queue_override_invoke + 980
12 libdispatch.dylib 0x000000010214eb50 _dispatch_root_queue_drain + 616
13 libdispatch.dylib 0x000000010214e87c _dispatch_worker_thread3 + 136
14 libsystem_pthread.dylib 0x000000018195b130 _pthread_wqthread + 1268
15 libsystem_pthread.dylib 0x000000018195ac30 start_wqthread + 4

Upon investigation, we found out that drawRect is not guaranteed to be called on main thread, for CATiledLayer and Apple advises to use a blank drawRect implementation whilst using drawLayer:inContext method instead, sticking to CGGraphics methods only. (See here - https://developer.apple.com/library/content/qa/qa1637/_index.html)

Any thoughts?

Thank you,
Ege

Some question about JCTiledScrollView

Hi, I'm Jerry
I have sended you a tweet yestoday. My question as follows:

  1. I know that you have developed a number of series Metro app, I would like to know, Metro map is tiled a bitmap images or a single PDF page?
  2. There will show a circular mark when I click on your subway map, how do you know the current point is a subway station?
  3. Is there better method to get the latitude and longitude of each subway station, do you obtain these data through the Google Map Open Api?

Support tile size that differ from 256x256

Maybe I missing something but I can't get it to work with 512x512 tiles. If I change the kDefaultTileSize in JCTiedView.m to 512 it loads the wrong tiles. I can trick it by changing how it calculates rows and columns and get correct tiles drawn in every zoom level but the resolution is not correct. Each 512 tile is loaded but the size is reduced to 256 somewhere when it's drawn on the actual screen. I can see when I zoom in it's only half the sharpness. Doubling the contentSize when creating the scrollView does not help either.

let scrollView = JCTiledScrollView(frame: self.view.frame, contentSize: imageSize)

My guess is somewhere in the native library the frames are defaulting to 256. I would really appreciate if someone could give me a hint here.

A memory release problem in pushing into navigationController many times

I have a navigationController and a JCTiledScrollViewDemo, I use images in the demo. Then I push the demo into navigation, scale and zoom the scrollView with zoomlevel in 1,2 and 3, i see the memory increase, then I pop out the demo and simulate memory warning, memory not release. also the same as before. Then push and pop twice, or many times, find the memory does not release but increase based on before.
I what to know why? is my code problem??

Program running on IOS13.6 device, level >=10 image not loading?

The recent problem is that when IOS13.6 device runs the framework, there are pictures in 4-9, and no pictures above 10 are loaded.
I track the code, the images in the data source are there, and JCTiledView's drawRect method works fine, including CGRect.
Now I don't know why this problem arises and how to solve it.

Figure:
Simulator Screen Shot - iPad Pro (9 7-inch) - 2020-07-23 at 10 57 52
Simulator Screen Shot - iPad Pro (9 7-inch) - 2020-07-23 at 10 58 05

No error messages!

demo app is crashing quite often when zooming

Incident Identifier: E8D8CB14-2809-4000-8077-FEE5E3BB448A
CrashReporter Key:   f084c79f86310382c18ecf6016569c934542077b
Hardware Model:      iPad3,4
Process:         JCTiledViewDemo [2299]
Path:            /var/mobile/Applications/55D6BF97-2B6F-434D-A1AA-FB2A9016BA4A/JCTiledViewDemo.app/JCTiledViewDemo
Identifier:      JCTiledViewDemo
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2013-04-26 15:52:18.769 +0200
OS Version:      iOS 6.1.3 (10B329)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000020
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   WebCore                         0x3729da24 WebCore::FontFallbackList::invalidate(WTF::PassRefPtr<WebCore::FontSelector>) + 156
1   WebCore                         0x3729d862 WebCore::Font::Font(WebCore::FontPlatformData const&, WTF::PassRefPtr<WebCore::FontSelector>) + 86
2   WebCore                         0x3729d802 WebCore::Font::Font(WebCore::FontPlatformData const&, WTF::PassRefPtr<WebCore::FontSelector>) + 6
3   WebKit                          0x37bce4a0 rendererForFont(__GSFont*) + 240
4   WebKit                          0x37bcf5aa -[NSString(WebStringDrawing) __web_drawAtPoint:forWidth:withFont:ellipsis:letterSpacing:includeEmoji:measureOnly:renderedStringOut:drawUnderline:] + 198
5   WebKit                          0x37bcf4d0 -[NSString(WebStringDrawing) __web_drawAtPoint:forWidth:withFont:ellipsis:letterSpacing:includeEmoji:measureOnly:renderedStringOut:] + 84
6   WebKit                          0x37bcf472 -[NSString(WebStringDrawing) __web_drawAtPoint:forWidth:withFont:ellipsis:letterSpacing:includeEmoji:measureOnly:] + 82
7   WebKit                          0x37bcf416 -[NSString(WebStringDrawing) _web_drawAtPoint:forWidth:withFont:ellipsis:letterSpacing:includeEmoji:] + 78
8   UIKit                           0x33196998 -[NSString(UIStringDrawing) drawAtPoint:forWidth:withFont:lineBreakMode:letterSpacing:includeEmoji:] + 172
9   UIKit                           0x331968dc -[NSString(UIStringDrawing) drawAtPoint:forWidth:withFont:lineBreakMode:] + 60
10  UIKit                           0x331d237a -[UILabel _legacy_drawTextInRect:baselineCalculationOnly:] + 2770
11  UIKit                           0x33195c9a -[UILabel _drawTextInRect:baselineCalculationOnly:] + 162
12  UIKit                           0x33194a56 -[UILabel drawTextInRect:] + 446
13  UIKit                           0x33194890 -[UILabel drawRect:] + 68
14  UIKit                           0x33193d5c -[UIView(CALayerDelegate) drawLayer:inContext:] + 360
15  QuartzCore                      0x32f44310 -[CALayer drawInContext:] + 108
16  QuartzCore                      0x32f438c0 CABackingStoreUpdate_ + 1776
17  QuartzCore                      0x32f43032 CA::Layer::display_() + 970
18  QuartzCore                      0x32f3a0b2 CA::Layer::display_if_needed(CA::Transaction*) + 198
19  QuartzCore                      0x32f39fdc CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 20
20  QuartzCore                      0x32f399be CA::Context::commit_transaction(CA::Transaction*) + 234
21  QuartzCore                      0x32f397d0 CA::Transaction::commit() + 312
22  QuartzCore                      0x32f39634 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 56
23  CoreFoundation                  0x3135093e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 18
24  CoreFoundation                  0x3134ec34 __CFRunLoopDoObservers + 272
25  CoreFoundation                  0x3134ef8e __CFRunLoopRun + 742
26  CoreFoundation                  0x312c2238 CFRunLoopRunSpecific + 352
27  CoreFoundation                  0x312c20c4 CFRunLoopRunInMode + 100
28  GraphicsServices                0x34e7d336 GSEventRunModal + 70
29  UIKit                           0x331de2b4 UIApplicationMain + 1116
30  JCTiledViewDemo                 0x000adc82 main (main.m:16)
31  JCTiledViewDemo                 0x000adc24 start + 36

Thread 1 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 1:
0   libsystem_kernel.dylib          0x396e95d0 kevent64 + 24
1   libdispatch.dylib               0x39624d22 _dispatch_mgr_invoke + 806
2   libdispatch.dylib               0x39620374 _dispatch_mgr_thread + 32

Thread 2 name:  WebThread
Thread 2:
0   libsystem_kernel.dylib          0x396e8e30 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x396e8fd0 mach_msg + 48
2   CoreFoundation                  0x313502b6 __CFRunLoopServiceMachPort + 126
3   CoreFoundation                  0x3134f02c __CFRunLoopRun + 900
4   CoreFoundation                  0x312c2238 CFRunLoopRunSpecific + 352
5   CoreFoundation                  0x312c20c4 CFRunLoopRunInMode + 100
6   WebCore                         0x372a6390 RunWebThread(void*) + 440
7   libsystem_c.dylib               0x396520de _pthread_start + 306
8   libsystem_c.dylib               0x39651fa4 thread_start + 4

Thread 3 name:  Dispatch queue: com.apple.root.default-priority
Thread 3:
0   libz.1.dylib                    0x395cd2b4 0x395c6000 + 29364
1   ???                             0x00000014 0 + 20
2   ImageIO                         0x31fb0618 _cg_png_read_row + 308
3   ImageIO                         0x321154b6 copyImageBlockSetPNG + 2070
4   ImageIO                         0x31fc5a36 ImageProviderCopyImageBlockSetCallback + 494
5   CoreGraphics                    0x313f48ca CGImageProviderCopyImageBlockSetWithOptions + 158
6   CoreGraphics                    0x313f4550 img_blocks_create + 360
7   CoreGraphics                    0x313f0a62 img_data_lock + 1530
8   CoreGraphics                    0x313efcc6 CGSImageDataLock + 126
9   libRIP.A.dylib                  0x31753974 ripc_AcquireImage + 1388
10  libRIP.A.dylib                  0x317527a4 ripc_DrawImage + 544
11  CoreGraphics                    0x313efb20 CGContextDelegateDrawImage + 48
12  CoreGraphics                    0x313ef9a2 CGContextDrawImage + 286
13  UIKit                           0x331945fa -[UIImage drawInRect:blendMode:alpha:] + 1158
14  UIKit                           0x331dd732 -[UIImage drawInRect:] + 46
15  JCTiledViewDemo                 0x000b7bd0 -[JCTiledView drawRect:] (JCTiledView.m:95)
16  UIKit                           0x33193d5c -[UIView(CALayerDelegate) drawLayer:inContext:] + 360
17  QuartzCore                      0x32f44310 -[CALayer drawInContext:] + 108
18  QuartzCore                      0x330217a0 tiled_layer_render(_CAImageProvider*, unsigned int, unsigned int, unsigned int, unsigned int, void*) + 1388
19  QuartzCore                      0x32f96d04 CAImageProviderThread(unsigned int*, bool) + 512
20  libdispatch.dylib               0x39623652 _dispatch_root_queue_drain + 274
21  libdispatch.dylib               0x396237d4 _dispatch_worker_thread2 + 88
22  libsystem_c.dylib               0x396477ee _pthread_wqthread + 358
23  libsystem_c.dylib               0x39647680 start_wqthread + 4

Thread 4 name:  Dispatch queue: com.apple.root.default-priority
Thread 4:
0   CoreGraphics                    0x3141cde0 argb32_sample_rectilinear_argb32 + 1340
1   CoreGraphics                    0x313f2c80 argb32_image + 3268
2   libRIP.A.dylib                  0x3174e53e ripl_Mark + 14
3   libRIP.A.dylib                  0x3174e4fc ripl_BltImage + 1080
4   libRIP.A.dylib                  0x3174df30 ripc_RenderImage + 192
5   libRIP.A.dylib                  0x317527e8 ripc_DrawImage + 612
6   CoreGraphics                    0x313efb20 CGContextDelegateDrawImage + 48
7   CoreGraphics                    0x313ef9a2 CGContextDrawImage + 286
8   UIKit                           0x331945fa -[UIImage drawInRect:blendMode:alpha:] + 1158
9   UIKit                           0x331dd732 -[UIImage drawInRect:] + 46
10  JCTiledViewDemo                 0x000b7bd0 -[JCTiledView drawRect:] (JCTiledView.m:95)
11  UIKit                           0x33193d5c -[UIView(CALayerDelegate) drawLayer:inContext:] + 360
12  QuartzCore                      0x32f44310 -[CALayer drawInContext:] + 108
13  QuartzCore                      0x330217a0 tiled_layer_render(_CAImageProvider*, unsigned int, unsigned int, unsigned int, unsigned int, void*) + 1388
14  QuartzCore                      0x32f96d04 CAImageProviderThread(unsigned int*, bool) + 512
15  libdispatch.dylib               0x39623652 _dispatch_root_queue_drain + 274
16  libdispatch.dylib               0x396237d4 _dispatch_worker_thread2 + 88
17  libsystem_c.dylib               0x396477ee _pthread_wqthread + 358
18  libsystem_c.dylib               0x39647680 start_wqthread + 4

Thread 5:
0   libsystem_kernel.dylib          0x396f9d98 __workq_kernreturn + 8
1   libsystem_c.dylib               0x39647ad6 _pthread_workq_return + 14
2   libsystem_c.dylib               0x396477f2 _pthread_wqthread + 362
3   libsystem_c.dylib               0x39647680 start_wqthread + 4

Thread 0 crashed with ARM Thread State (32-bit):
    r0: 0x002c40a8    r1: 0x00000000      r2: 0x000000f0      r3: 0x0000001f
    r4: 0x002d78b8    r5: 0x002d78d0      r6: 0x00000000      r7: 0x2fd52404
    r8: 0x2fd5240c    r9: 0x0a010280     r10: 0x2fd52460     r11: 0x00000000
    ip: 0x3aeb9488    sp: 0x2fd523f4      lr: 0x3729d9c9      pc: 0x3729da24
  cpsr: 0x60000030

Binary Images:
   0xac000 -    0xbefff +JCTiledViewDemo armv7s  <bed027df93e53280908f5ae4745a1ad4> /var/mobile/Applications/55D6BF97-2B6F-434D-A1AA-FB2A9016BA4A/JCTiledViewDemo.app/JCTiledViewDemo

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.