Code Monkey home page Code Monkey logo

Comments (45)

infostreams avatar infostreams commented on July 19, 2024

Hi! I have no clue if this works with GoDaddy. Your PHP version is fine, and Apache definitely works. My first hunch is that it's probably something with your .htaccess file, but that's hard to say unless I can investigate a bit... Do you have a link?

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

Hey Edward! Thanks for the quick response. Go Daddy is now running PHP5.4.19 (something I changed as part of debugging, before I decided to contact you).

Anyway, thank you for your help.

I've put up two versions of your page on my site:

http://wildtroutstreams.com/example/index.php (this includes phpinfo();)
http://wildtroutstreams.com/example/index-layers2.html

Both pages serve up a file: pa_test_2.mbtiles

Both work more or less the way I want them to on Localhost.

If you look at the layers2 page, you'll see a leaflet map of PA served from a National Map WMS server. You're supposed to be able to click on the layers control, and select PA Trout, to overlay the tiles which show streams holding wild trout. Nothing happens. Similarly, the index.php page throws up an empty div with just the zoom control.

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Hi! No problem. When I visit either of those pages, I see that it tries to load the map, and it is doing that at the http://wildtroutstreams.com/example/server/ address (specifically, it tries to request http://wildtroutstreams.com/example/server/pa_test_2.tilejson). When I visit either of those links, I get a 404 "Category not found" error. Are you sure that you copied all the files to the server?

You need to have 'server' folder under the 'example' folder. It looks like that folder does not exist, because I can't access any of these: http://wildtroutstreams.com/example/server/, the http://wildtroutstreams.com/example/server/pa_test_2.tilejson or even the http://wildtroutstreams.com/example/server/.htaccess file.

To me that looks like the folder isn't there. Usually if the folder is there, and you try to access the .htaccess file, you don't get a 404 error but a 'permission denied' or 'server misconfigured' error. I now get a 404 'file not found' error.

Can you check if you have uploaded everything?

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

I used FileZilla to upload everything. It shows all of the files in /example/server, all with the same byte count. I just added a random picture to the folder and it's definitely there:

http://wildtroutstreams.com/example/server/tostadas.jpg

Filezilla shows all of the permissions of the files within the server folder as 0604
It shows permissions of the server folder (when you're in /example) as 0705

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Ah, I see. I think you haven't uploaded the .htaccess file then. Can you confirm that it's there?

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

Sorry, no, it's there. 192 bytes on my localhost and on GoDaddy

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

One thought... the root site is a joomla site that has a very elaborate .htaccess file for friendly urls. Could the two be in conflict?

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Yeah, they could be. I tried to access that file (the one in the root), but I couldn't access it. Can you post it here?

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

You mean the root .htaccess file?

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Yes.

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

OK, I downloaded it...

# @version      $Id: htaccess.txt 21101 2011-04-07 15:47:33Z dextercowley $
# @package      Joomla
# @copyright    Copyright (C) 2005 - 2011 Open Source Matters. All rights reserved.
# @license      GNU General Public License version 2 or later; see LICENSE.txt
##

##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# The line just below this section: 'Options +FollowSymLinks' may cause problems
# with some server configurations.  It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file.  If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url's.  If they work,
# it has been set by your server administrator and you do not need it set here.
##

## Can be commented out if causes errors, see notes above.
Options +FollowSymLinks

## Mod_rewrite in use.

RewriteEngine On

## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.

## Begin - Custom redirects
#
# If you need to redirect some pages, or set a canonical non-www to
# www redirect (or vice versa), place that code here. Ensure those
# redirects use the correct RewriteRule syntax and the [R=301,L] flags.
#
## End - Custom redirects

##
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root).
##

RewriteBase /

## Begin - Joomla! core SEF Section.
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the request is for something within the component folder,
# or for the site root, or for an extensionless URL, or the
# requested URL ends with one of the listed extensions
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End - Joomla! core SEF Section.

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

sorry, I tried cutting and pasting but that seems like a mess. How do I attach a .txt file?

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

I edited it :)

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

Thanks, you got the whole thing? I was madly scanning the Markdown info

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Yes, I got it (see above). I edited it by putting three backticks ` before and after it. Now let me have a look...

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Yeah, I'm pretty sure that the last part is interfering with the mbtiles-php. You can check if that's the case by temporarily renaming Joomla's .htaccess file and then checking if the map loads.

If that is the case, then you need to adjust Joomla's .htaccess file. I think you need to put something like this just after the RewriteEngine On statement:

RewriteRule ^(example)($|/) - [L]

This would/should stop Joomla with interfering with rewrite-rules that are defined in the 'example' directory, according to this StackOverflow post. But I haven't tested this!

Nevertheless, if the map loads if you temporarily rename Joomla's .htaccess file, then we have found the culprit ;-)

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

Unfortunately, I just satisfied myself that it's NOT the .htacess file. I just installed the same directories in a different domain. It's in the same hosting account, but on a domain that has nothing in the root directory. Behavior is the same...

http://greendrakeservices.com/example/index-layers2.html

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Hmm. That one is weird - it tries to redirect to the wrong URL. http://greendrakeservices.com/example/server/index.php wants to redirect to "/greendrake/greendrake/".."/tileserver.php" instead of just "/greendrake", and it can't find http://greendrakeservices.com/example/server/tileserver.php which should certainly be there.

That last one is just a .php file that your server should certainly be able to find, right?

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

I have no idea why... I can probably take this to GoDaddy support and ask them.

You've undoubtedly looked at my code. I just create a variable troutmbtiles that is a relative URL that should work in any context.

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Yeah, I don't think your code is the problem here. It is some sort of routing problem. The request never even gets to the PHP file, and that's why the map doesn't show. It could be that GoDaddy doesn't allow .htaccess files in subdirectories, or something inane like that. If that's the case, you can try this before you contact them:

Options -Indexes
Options +FollowSymLinks
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ example/server/tileserver.php [QSA,L]

Put that in a new .htaccess file in the root of the greendrakeservices server and see if it loads then. Other than that, I'm running out of ideas. It is certain though that the .php file is not reached, and that this is the core of the problem.

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

Just added your .htaccess file in the root of green drake services, and the final behavior is no different. Does it change the URL it requests? In any event, do you have any words of wisdom for how I should describe the problem to GoDaddy?

My inclination would be to erase the root .htaccess file you wrote, and ask them why greendrakeservices isn't routing correctly using the /example/server .htaccess file (since the Joomla .htaccess seems to be a red-herring). I did look up usage of .htaccess in GoDaddy's support pages, and they simply say they work. I also think that apps like WordPress wouldn't work if they restricted .htaccess to the root directory.

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

I think your approach makes sense. Just delete the .htaccess file I wrote and ask them why it doesn't route correctly. Sorry I couldn't help you - it's difficult to fix such a problem remotely without access to the system. Good luck contacting GoDaddy! I hope you get it to work.

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

Thanks for your help! I'll post what I find out.

One thought... the name of the root directory for greendrakeservices.com in my hosting account is "greendrake". So it looks like its rewriting the relative url to something that includes the name of the root directory (which I assume should instead simply be '/' within the context of the web site).

Can you just tell me exactly what it's rewriting to? (i.e. filling in the /.../) As well, what it SHOULD be rewriting to? I have a pretty good idea, but I might be wrong. I've deleted the root .htaccess file.

BTW, before when I added the root .htaccess file, I didn't delete the the one in the /server folder. Should I have done that?

This is important enough that I would change hosts to make it work. WildTroutStreams publishes geographic info (e.g. KMLs) about where to find wild trout in 38 states. The need to download the data into something like Google Earth is a major barrier to a lot of my potential audience. So in the next generation of the site, I'd like to publish the data in web maps with the option to download the KMLs.

But I have dozens of maps (at least 38, plus many other maps for Native trout species), and several GB of data. I intentionally have no business model for the site (everything's free). Any single layer in a single state can be up to about 20 MB of vector features in a KML, and a map can have anywhere from one to half a dozen layers. So the conventional web hosting models would cost a fortune.

Your solution is a godsend, and seems ideal for my needs which is a small user base, and lots of maps, and tons of data.

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Hmm, maybe you can try adding a RewriteBase / or something like that to the .htaccess file. Unfortunately .htaccess files can be tricky, and mod_rewrite rules can get pretty complicated and opaque. On top of that, if you make one tiny mistake it tends to explode.

The way the .htaccess is set up is that it should redirect all incoming requests to the tileserver.php file that resides in the 'server' directory. Since the .htaccess file itself lives in the 'server' directory, it should only look at requests that try to access something that is supposedly located in the 'server' directory. It does (and should not) operate on other requests.

The tileserver has an internal routing mechanism that looks at the request and then either sends a tilejson file, a utfgrid file, or a map tile – all extracted from the .mbtiles file or generated as necessary. I do think that the most likely outcome is that it is possible to host it on GoDaddy, but that we just haven't found the correct magic incantation yet.

If you want to I can have a look at it, but then you'd have to give me the username and password (and the login page) of your godaddy account. My email is in my profile page, but I can't look at it until tomorrow and I won't spend more than 15 minutes on it ;-)

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

First, thank you for the time you've already spent. If you could take a look at it just so I can ask an accurate question of GoDaddy, that would be great.

Do you need anything other than ftp access? I can readily set you up with an ftp account that gives you access to the example directory on greendrakeservices and nothing else.

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

PS, I did try the RewriteBase / suggestion and it didn't work.

I also tried this on another shared account on Network solutions that I use for a client, and had the same symptoms. So it may be a generic issue with the way shared hosts are configured.

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

No problem. I think the question you are going to ask GoDaddy was fine. It gives them enough information and it has a nice isolated test case, so they should know what to do.

If you do give me access, then I'm not sure if just access to the 'example' directory would be enough.

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

Sigh. GoDaddy tech support (at least via their chat interface) was completely useless. Couldn't point me to any useful resources, and refused to look at the .htaccess code (which is considered providing programming support and beyond their remit).

Their only useful feedback was a suggestion to turn on the error logging in the hosting account. It takes 24 hours to come online, so I can't see the error logs yet, but hopefully will do so soon.

I've been scouring the Internet for advice on .htaccess and GoDaddy. It's frustrating because there's a ton of examples out there, but it's hard to know what's applicable or not. I've probably tested a dozen or more different .htaccess configurations, based on suggestions I've found, none of which has solved the problem.

One of the more interesting pieces I found is this: http://forum.ait-pro.com/forums/topic/go-daddy-redirect-htaccess-code-no-longer-working/

It's specifically about redirects (which aren't in your .htaccess file) but I wonder if there's a similar issue with rewrites. All GoDaddy says is that mod_rewrite is turned on in all of their accounts and should follow standard apache coding practice. Which is clearly bs. Might it relate to our problem? It resonated with the fact that you were finding the name of my host folder in the URLs that timeserver.php was seeing.

I'm very frustrated because this is an important application to get working. I'm also talking to DreamHost about opening a VPS hosting account with them. Presumably, I'd have enough control over the environment in that case to get this working. Do you have experience with any shared hosting providers where your stuff just works?

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Hey! Well, any VPS would work, because you have complete control over what it does and doesn't do. I'm not on shared hosting providers anymore for exactly these reasons (lack of control). But if you setup a VPS you probably need to do all the server administration yourself, which is not that easy and it's difficult to get right and keep secure. Just have a look at this to get a grasp of what you might need to concern yourself with.

Regardless, I do think it makes sense to try to get it to work with GoDaddy first. Setting up and maintaining a VPS can be quite a hassle. Did you try installing it in the root of the greendrake server? Did that at least work? Alternatively, do have a look at the logs once they come online...

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

When you say "installing it on the green drake server" do you mean putting index-layers2.html in the root, and keeping /server? Or do you mean everything in the root, getting rid of the /server directory?

With respect to getting it to work on GoDaddy first, I'd love to do that, but I'm out of ideas. I now have access to the error logs, though there seems to be a delay in updating them. Perhaps when I see some relevant entries it will stimulate something.

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Yeah, I meant putting the whole contents of the 'example' directory in the root folder, including .htaccess and server folder. Curious if that works.

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

If it doesn't, maybe you can try removing the 'Options' lines in the .htaccess file. Perhaps GoDaddy doesn't like those...

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

OK, so I combined into one folder the .htaccess, the mbtiles file, tileserver.php, and index-layers2.html.

I also changed the relative address in index-layers2.html so it asks simply for the url, without a relative subdirectory. Presumably, if the problem is the rewrite base, this should eliminate it.

No joy. You can see the setup at http://greendrakeservices.com/example2/index-layers2.html

Updating the error logs seems to be about 2 hours behind, so still nothing useful there.

The web is filled with people fixing their .htaccess files on GoDaddy by adding the same options you have, so I don't think that's the issue. I need to go for a while. When I get back I'll check the error logs and post anything interesting. Also will try it without the options, just for giggles, but no time now. Thank you for your support!

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

Well... I haven't given up by any means, though I've given up on GoDaddy. I have opened up a VPS account on DreamHost. I've got a subdomain now pointing at a directory on that server (maps.wildtroutstreams.com). The html files are in the root directory for that subdomain, and timeserver.php and the .mbtiles file are in /server.

Dreamhost has a "standard" configuration option to go with nginx instead of apache, so I'm inclined to go in that direction anyway, since speed will be at a premium once users start using this. I just wanted to confirm what I need to do to set the .conf file.

Dreamhost recommends setting up domain-specific .conf files to customize Nginx which goes somewhere like:

/home/myusername/nginx/maps.wildtroutstreams.com/tileserver.conf

Since this is the first time I'll be actually editing a file using a command line in 40 years (last on an IBM-360/67), here's what I intend to do (unless you suggest otherwise):

  1. Create the directory:
    mkdir -p /home/myusername/nginx/maps.wildtroutstreams.com/
  2. Create the .conf file: nano /home/myusername/nginx/maps.wildtroutstreams.com/tileserver.conf
  3. Add your suggested code to the file using nano (which I'm going to have to figure out):

location /server/ {
try_files $uri /server/tileserver.php$is_args$args;
}

Does that seem about right?

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Ok, that seems about right, but three remarks:

  1. I don't know where your nginx site configuration files should be. Mine are in /etc/nginx/sites-available, and I have a symlink to each of those files in /etc/nginx/sites-enabled. Please make 100% sure that the location you mentioned is actually read by Nginx (you can test this by putting nonsense in it and then restarting Nginx. If it barks, you're good). If this is the location recommended by DreamHost then it's probably fine but it's better to be sure.
  2. The mkdir and nano commands are fine
  3. I looked up my own Nginx config for the maps to be sure if my original recommendation is still good. Turns out I'm using a different syntax - which I will post here for inspiration and reference:
    location ~ ^/infostreams\.net/.+/map/((?!tileserver).)*$ {
        rewrite ^/infostreams\.net/(.*)/map/(.*) /infostreams.net/$1/map/tileserver.php last;
    }

Basically this says that all requests to <site root>/infostreams.net/<something>/maps/ that do NOT mention tileserver.php should go directly to tileserver.php.

However, I do have to say that it does seem to me that your original rough patch (i.e. the maps not loading) might have been replaced by a larger rough patch (the configuration of a VPS). Good luck!

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

As the saying goes, I may have jumped out of the frying pan and into the fire with this VPS thing. However, I don't trust my current GoDaddy hosting plan to provide good service anyway once I get some users onto this thing. This, I hope, is a discrete task where I can get support (from the Dreamhost community). In general, with the Dreamhost VPS plan, you can manage a lot of things from a control panel, just like a shared hosting plan. I'm hopeful that I won't need to make many changes.

Question for you: you have two levels of directories from the root. Currently I'm doing only one: /server. Programmatically, I can see some advantages to what you did (e.g. one for each state of the US), though I was planning on putting everything in one directory and just having a different .mbtiles file per state.

But, if i keep it two levels the way you do, would the code be:

location ~ ^/maps\.wildtroutstreams\.com/.+/server/((?!tileserver).)*$ { rewrite ^/maps\.wildtroutstreams\.com/(.*)/server/(.*) /maps.wildtroutstreams.com/$1/server/tileserver.php last; }

Conversely: if i keep it one level, I just eliminate:

.+/ in line 1 and $1/ in line 2?

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

No, sorry - my example is a bit weird because the url contains the domain name AFTER the original domain name. I'm not going to share it here because I don't want google to pick up my unfinished new website yet, but it's something like http://subdomain.infostreams.topdomain/infostreams.net/projects/customer-name. The maps for that customer are hosted at http://subdomain.infostreams.topdomain/infostreams.net/projects/customer-name/server/.

So the 'infostreams.net' part that is listed in the Nginx rule is actually part of the PATH, not of the domain. In your case you'd have to tell Nginx to listen to maps.wildtroutstreams.com with something like

server { 
    listen 80;
    server_name maps.wildtroutstreams.com;

    location ~ ^/server/((?!tileserver).)$ {
        rewrite ^/server/(.*) /server/tileserver.php last;
    }
}

Something along these lines at least...

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

Thanks... also while you were answering my question I learned the difference between a back tic and a tic! You've given me enough to take a shot at it.

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Awesome. Well, good luck then!

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

Well, I'm back, having made some progress. My VPS is configured with Nginx, and I have a .conf file that is being loaded and affecting how the server is rewriting URLs. Unfortunately the code you provided isn't working.

Here's the content of tileserver.conf as it exists right now. It gets loaded into the server section of the main nginx.conf file (and allows me to customize it without editing it directly).

location ~ ^/server/((?!tileserver).)$ { rewrite ^/server/(.*) /server/tileserver.php last; } location /dhtest { rewrite ^/.* http://google.com/ permanent; }

The first line is your code. The last line was added by Dreamhost tech support to demonstrate that the .conf file is being loaded. If I enter http://maps.wildtroutstreams.com/dhtest I end up on google.com, which proves that the file is getting loaded.

Any thoughts?

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

Hey, Ed. Sometimes we're smarter than we remember being. Anyway, I couldn't get the new code you suggested in this thread to work in the configuration. But I decided to try the code you provided in the original read me file instead (mostly out of desperation). It turns out, THAT WORKS!!! Yeah!

As I mentioned before, you can see the setup at http://greendrakeservices.com/example2/index-layers2.html. I'll warn you that the current overlay looks like crap, but I can now check or uncheck the box and the overlay comes up. The mapbox.js tooltips and popups also work. So I think I'm off to the races in terms of building maps that I want to share with the world!

I may keep it up for a while, just so people who are looking to implement a similar application have it for reference.

But I'm now very excited and about the potential. I'd spent some time trying to figure out how this could work, and your code is a godsend. Thank you! I'll let you know when I launch some real maps.

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Hi! I'm really happy that you managed to figure it out :-) Hope you get your maps to work as envisioned. Happy hacking!

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Can I close this issue?

from mbtiles-php.

mgincnj avatar mgincnj commented on July 19, 2024

Yes, you can, thank you! It's still a work in progress, but I'm now working on data content not technology. The performance (at least with minimal server load) is completely acceptable. Check it out at:

http://maps.wildtroutstreams.com/PA.html

from mbtiles-php.

infostreams avatar infostreams commented on July 19, 2024

Awesome! Looking really good πŸ‘

from mbtiles-php.

Related Issues (16)

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.