Coder Social home page Coder Social logo

ngageoint / geoq Goto Github PK

View Code? Open in Web Editor NEW
689.0 62.0 133.0 37.01 MB

Django web application to collect geospatial features and manage feature collection among groups of users

License: MIT License

Python 7.20% HTML 3.90% CSS 2.09% JavaScript 86.56% Shell 0.03% Dockerfile 0.01% Less 0.21%

geoq's Introduction

GeoQ

Geographic Work Queueing and Tasking System

GeoQ video

GeoQ is an open source (MIT License) geographic tasking system that allows teams to collect geographic structured observations across a large area, but manage the work in smaller geographic regions. Large areas can be quickly broken up into small 1km squares and assigned to a team. System transparency informs all groups about workflow to avoid duplication of effort.

The GeoQ software was developed at the National Geospatial-Intelligence Agency (NGA) in collaboration with [The MITRE Corporation] (http://www.mitre.org). The government has "unlimited rights" and is releasing this software to increase the impact of government investments by providing developers with the opportunity to take things in new directions. The software use, modification, and distribution rights are stipulated within the [MIT] (http://choosealicense.com/licenses/mit/) license.

Pull Requests

If you'd like to contribute to this project, please make a pull request. We'll review the pull request and discuss the changes. All pull request contributions to this project will be released under the MIT license.

Software source code previously released under an open source license and then modified by NGA staff is considered a "joint work" (see 17 USC § 101); it is partially copyrighted, partially public domain, and as a whole is protected by the copyrights of the non-government authors and must be released according to the terms of the original open source license.

In the News

For current news regarding GeoQ, see our Wiki Page

Screenshots

GeoQ Main page

List of active jobs

Details of a job

Importing a complex shapefile as work cells

Work cell status

Drawing observations within a work cell

Creating observations and socially tagging them

Viewing work cells and observations in Google Earth

Work cells in Google Earth

###This project relies heavily on open source packages, particularly:### Django under [BSD] (https://github.com/django/django/blob/master/LICENSE)

Leaflet under [BSD] (https://github.com/Leaflet/Leaflet/blob/master/LICENSE)

Postgres under [PostgreSQL license] (http://www.postgresql.org/about/licence/)

PostGIS under [GPL version 2] (http://opensource.org/licenses/gpl-2.0.php)

GeoQ Configuration

The geoq/settings.py file contains installation-specific settings. The Database name/pw and server URLs will need to be configured here.

GeoQ Installation

Docker Installation::

  1. A new docker implementation has been developed and is available at https://hub.docker.com/r/stephenrjones/geoq-django10. This is an upgraded version of the server and has not yet been fully tested.

Cloud Installation::

  1. You can optionally deploy GeoQ with all dependencies to a Virtual Machine or a cloud VM (such as an Amazon Web Services EC2 box) by using the chef installer at https://github.com/ngageoint/geoq-chef-installer

  2. Chef scripts are our preferred method of automating cloud builds

Mac OSX Development Build Instructions::

  1. Install PostGIS 2.0 using instructions at https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#macosx. There are several options there, but for most, the easiest option is to follow the Homebrew instructions. If you don't have Homebrew installed, you can either buid it securely yourself or follow the quick (yet not secure) one line instruction at http://brew.sh.

    Note for MITRE users: To install software by downloading from Internet, the computer should be connected to Outernet.

    One exception: Instead of using brew to install postgres, it's usually easier to install Postgres.app from postgresapp.com. After installing, add the app's bin directory (/Applications/Postgres.app/Contents/Versions/X.Y/bin) to your PATH. After Postgres.app is installed, postGIS, gdal, and libgeoip need to be installed using the following commands:

     $ brew install postgis
     $ brew install gdal
     $ brew install libgeoip
    

    Note: Homebrew needs to be installed to run these commands.

  2. (Optional) Install a Geoserver (we recommend the OGC Geoserver at https://github.com/geoserver)

  3. Make sure Python, Virtualenv, npm, and Git are installed

     % Note that some distros (Debian) might need additional libraries:
     % sudo pip install psycopg2
     % (optional) sudo apt-get install sendmail
    
  4. Install and setup geoq:

     % mkdir -p ~/pyenv
     % virtualenv --no-site-packages ~/pyenv/geoq
     % source ~/pyenv/geoq/bin/activate
     % git clone https://github.com/ngageoint/geoq
    
  5. Create the database and sync dependencies and data:

     % cd geoq
     % pip install paver
     % paver install_dependencies
     % paver createdb
     % paver create_db_user
     % paver sync
    
  6. Modify local settings (Modify entries below based on your system settings. Hit Ctl + D to save local settings file.):

     % cd geoq
     % cat > local_settings.py
     
       EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
       EMAIL_PORT = 25
       EMAIL_HOST = "localhost"
       DEFAULT_FROM_EMAIL = "[email protected]"
       MEDIA_ROOT = '/opt/src/pyenv/geoq/geoq-django'
       STATIC_URL_FOLDER = ''
       STATIC_ROOT = '{0}{1}'.format('/usr/src/static/', STATIC_URL_FOLDER)
       GAMIFICATION_SERVER = ''
       GAMIFICATION_PROJECT = ''
       GEOSERVER_WFS_JOB_LAYER = ''
    

    Note: To test GeoQ front page after starting GeoQ server, set STATIC_ROOT as follows: STATIC_ROOT = '{0}{1}'.format('~/geoq-static/static/', STATIC_URL_FOLDER)

  7. (Optional) Load development fixtures:

     % paver install_dev_fixtures # creates an admin/admin superuser
    
  8. Build user accounts:

     % python manage.py createsuperuser
    
  9. Install less and add its folder ("type -p less") to your bash profile:

     % sudo npm install -g less
     % sudo python manage.py collectstatic
    
  10. Start it up!

     % paver start_django
    

CentOS Development build instructions (tested on CentOS 6.6)::

Dependencies

  • Python 2.6+
  • Postgres 9.X (stock pg_hba.conf configuration)
  • virtualenv
  • node / npm

The following commands worked on a 64-bit CentOS 6.x system (as a privileged user):

	% yum update
	% yum localinstall https://download.postgresql.org/pub/repos/yum/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-3.noarch.rpm
	% rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
	% yum install postgresql94-server postgresql94-plpython postgresql94-devel postgis2_94 postgis2_94-devel python-virtualenv python-pip nodejs nodejs-devel npm git mod_wsgi gcc
	% service postgresql-9.4 initdb && service postgresql-9.4 start

From a shell:

* If accessing the Internet through a proxy, set the http_proxy and https_proxy environment settings
export http_proxy=<your proxy setting>
export https_proxy=<your proxy setting>

cd /usr/local/
sudo chown centos src 
cd src
mkdir geoq
virtualenv ./geoq
cd geoq
source bin/activate
git clone https://github.com/ngageoint/geoq.git
cd geoq
sudo -u postgres psql << EOF
create role geoq login password 'geoq';
create database geoq with owner geoq;
\c geoq
create extension postgis;
create extension postgis_topology;
EOF

export PATH=$PATH:/usr/pgsql-9.4/bin
pip install paver packaging appdirs
# Modify geoq/requirements.txt so that the line 'six==1.4.1' reads 'six>=1.6.0'
paver install_dependencies


sudo su
vi /var/lib/pgsql/9.4/data/pg_hba.conf # modify /var/lib/pgsql/9.4/data/pg_hba.conf, BOTH 'ident' for IPv4 and IPV6 become 'md5'
service postgresql-9.4 restart
exit

* Before executing the following commands, make sure the configuration for PostgreSQL allows the connection
* This can be done by modifying /var/lib/pgsql/9.4/data and changing the connection METHOD near the bottom of the file for 
* the 'local' connections. Changing the METHOD from 'ident' to 'md5' should be sufficient
* Restart postgresql (or reload config) afterwards


paver sync
paver install_dev_fixtures

npm install -g less

* Static files will be installed in a location where a web server can access them. This can be changed depending on your server
* If necessary, create the local directory ('/var/www/html' in this case)
cat << EOF > geoq/local_settings.py
STATIC_URL_FOLDER = '/static'
STATIC_ROOT = '{0}{1}'.format('/var/www/html', STATIC_URL_FOLDER)
EOF
sudo chown centos /var/www/html
python manage.py collectstatic

All that's left is to create a super user account => python manage.py createsuperuser and then you're ready to start GEOQ!

paver start_django

geoq's People

Contributors

ajoubert-mitre avatar bauerr avatar ckras34 avatar david-rocca avatar dependabot[bot] avatar garnertb avatar jaalfaro avatar jackiekazil avatar jaycrossler avatar jdaigneau avatar jdaigneau5 avatar john-kilgo avatar kablash avatar kcrouch-mitre avatar khazhyk avatar lukedressman avatar mattcoarr avatar meilinger avatar nstarke avatar patricknevindwyer avatar pkthunder avatar plee88 avatar stephenrjones avatar swohlever avatar woanchang 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

geoq's Issues

instructions for external access

When running paver "start_django" the server starts up on 127.0.0.1:8000

I don't believe this is accessible to external connections, and don't see any settings in geoq.settings to configure this.

Normally I think you would do this with:

runserver 0.0.0.0:8000

Also, are there instructions for running upstream Apache or NGINX ?

Write a script to grab & combine cap image json info

Write a script to grab & combine cap image json info and store locally on the test server to use as the 'cap layer' in the test exercise.

The server only allows for 1000 images at once, so we need a master list for the test exercise.

Example query for 1000 images: http://dev.femadata.com/arcgis/rest/services/CAPImages/MapServer/0/query?where=EventID%3D6&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&returnGeometry=true&outFields=*&f=pjson

We need to figure how to iterate over the images to grab all of them & also alter the image url in the results that are displayed on the front end.


Orig: jackiekazil#15

Project/Job/AOI pages should expose data in downloadable format

There should be either buttons or links on each page to allow users to download data in a variety of forms (KML, Network-linked KML, GeoJSON, WMS, ShapeFiles, etc).

These should allow users to pick what they want to link to (either from AOIs they've worked, or for a particular job/project, or everything in the last n amount of time, or some combination of these). Most likely, the best way to do this is to build a custom geoserver url based on options chosen.

Add 'save & continue editing' on the aoi edit page

Example url: geoq/aois/work/6520

When you save, you are taken to the AOI list page. Sometimes you will want to save and continue working, so is a workflow point point. Add 'save & continue editing' on the aoi edit page, so when you save, then you stay on the same page.

Related to #45


Orig: jackiekazil#4

Seperate Dev fixtures from Prod fixtures

Currently, there is 1 paver process that installs all fixtures. Some are dev and some are prod related. These should be separated out into 2 separate commands.

(Just to note the context of this ticket. I believe it was the permissions/accounts fixture that is required to make accounts work, while the others are just there for dev/testing.)


Orig:jackiekazil#40

Redesign work-flow so that users see different page based on role

When a user first logs in, they should see a screen that's oriented around their experience.
Before logging in, they should see something that captures:

  • What GeoQ projects are publicly visible with invitations to contribute from the public
  • A message that either asks them if they want to volunteer, or if they've been invited to work on a task, or the ability to log in if they have an account

After logging in (or creating an account), they should see projects that they can work on:

  • What GeoQ Projects are Currently visible (public/or assigned) to them (maybe shown as a map)
  • What GeoQ projects they are invited to contribute to along with what teams they are on if any -- What functions they should be performing, and how to do so (i.e., "You've been asked to collect Polygons of Flooded Areas within the Colorado Flooding project")
  • The ability to suggest new layers/data sources/maps
  • The ability to subscribe to information, either as KML, GeoRSS, GeoJSON, WMS, etc.

Write documents for layer create & update page

Write documents for layer create & update page & get clarification for fields for layer create & update page.
Example url: maps/layers/update/1

There are lots of fields & the notes don't necessarily make sense, therefore the form is confusing and difficult to use. (Create mini examples in process, if it helps clarification.)


Orig: jackiekazil#14

AOI assignment should allow multiple polygons, with setting of priorities

When creating/editing a job, the supervisor should be able to assign the "extents" of AOIs that are created inside a job. The supervisor currently enters a box, and AOIs are created inside that entire box, even if a big chunk of the area is empty water.
Supervisor should have the ability to use multiple polygons to add and remove AOIs from the map. In addition, they should be able to use Polygons to assign the priority of AOIs within an area.

So, a supervisor should be able to:

  • Set a base priority of a Job
  • Grab a box of a coastline (maybe brings back 10,000 AOIs)
  • Use polygons (maybe through a lasso tool) to take off all water sections (reducing to maybe 6,000 AOIs) by clicking a 'delete these cells' button
  • Use polygons to select a set of AOIs and change their priority, (maybe grabbing area around a city and increasing that priority to a higher level, then grab uninhabited swamp land and lower that priority)
  • Best way to do this might be able to call the service that returns all AOIs within a bounding box, then in client use JavaScript to do a spatial transform and remove the unwanted sections, or possibly build a service to do it.

Create config script to cache and proxy images from a geojson feed

Create config script to cache and proxy images from a geojson feed.
This is to further the offset load from the source of the images. This relates to #15.

Extra notes that may or may not help:

There is the a proxies.py
https://github.com/ngageoint/geoq/blob/master/geoq/core/proxies.py

With respect to issues to cap image pull in -- this proxy was created... here are some notes from the creator....

  1. Pull in latest updates (I fixed it to use a proxy, as the cross-origin was blocking browser requests to other domains)
    The process to add a layer is easiest in:
  2. Go to admin menu
  3. Select Layers, add layer
  4. Put in URL, choose the GeoJSON, Save
  5. Edit Default Map
  6. Add layer at bottom

A command line library that might help is fabric -- http://www.fabfile.org/
Or Pavement


Orig: jackiekazil#16

Points are not storing on save of AOI

Points are not storing on save of AOI.
Example url: /geoq/aois/work/6520

When you add a point to the map via the UI and hit "complete", then reload load the page, the point does not appear. It seems that it is not being saved.

P.S. boxes are being saved.

In response:

There is a relationship between the AOI assessment dropdown and the selected item added on the map.

For example, if you choose "Catastrophic Damage point" and add a point, it works. So discussion needs to be done to determine how this should work overall in the workflow.

Also, an additional bug may need to be created to address the fact that failures are not brought to the users attention.


Orig: jackiekazil#3

Add ability to move a geo object on the AOI map

Add ability to move a geo object on the AOI map.
Example url type: /geoq/aois/work/7633

When you have photos (or other object), if the obj has the wrong lat & long, we want to be able to move that obj to more appropriate area & track the original lat & long, along with the newly assigned lat & long.

Add a level confidence to the movement --- Low, medium, high.

Same concept documented here: jaycrossler/geoq-django#19 (comment)


Orig: jackiekazil#24

Control which layers are always on the map

Supervisors should be able to choose what layers are always shown on the maps, both for ones that Contributors use to collect features, but also on the Projects page and Jobs page

Remove unassigned list from job page

Sample url: geoq/jobs/2/unassigned

Make adjustments to 'unassigned' tab.

  • Remove items, because that doesn't bring anything but confusion to users.
  • Proposed conversation is a summary statics tab --- instead of 'unassigned'
    • B/c What is the purpose of this tab to your average user?

screen shot 2014-04-24 at 12 12 47 pm


Orig: jackiekazil#6

Associate links or info with features

We want users to be able to attach 'proof' or links to either an AOI or sub-feature (a specific point, for example).

  • Could attach a picture from user's own device (say they're tagging in the field), or could attach info from social media or any url.
  • Ability to have that be attached to either a feature (point/polygon/line) or to a location (to geotag it).
  • Possibly use the GeoMedia module from within the Event Pages as a basis of functions.

Add a setting to settings.py for default lat & long & integrate

Add a setting to settings.py for default lat & long & view regions to be used on projects. Then integrate that setting into the display of maps on the front-end & admin.

For example, if you are on this page: /geoq/projects/3, you might want to make the default settings the middle of the United States.


Orig: jackiekazil#8

psycopg dependency

Found when installing on debian (wheezy) that the command:

paver install_dependencies that I need to first have installed the build dependencies for psycopg:

sudo apt-get build-dep python-psycopg2

underscore.js broken?

These two lines broke underscore.js for me.

jackiekazil@5d2c472#diff-d21a30e334ce517219b2faa3aafeee68R44

jackiekazil@5d2c472#diff-e1549e6b1daa3c2a011826c73516b276R44

@jaycrossler
By setting the path to what is below, it is fixed, but before I do this and submit a pull request, I wanted to make sure that this wasn't messing something up for you.

{% compress js %}
     <script src="{{ STATIC_URL }}core/js/underscore-min.js"></script>
     <script src="{{ STATIC_URL }}core/js/base.js"></script>
{% endcompress %}

(ping @jaalfaro -- to keep him in the loop)

Add color options to point markers on map

A user able to alter the color (and possible other markers shapes) to mark specific data points.

Right now all the markers are blue. Cap images pulled in are blue. Points that you drop on the map are blue. There is no way to tell the difference. See image below.

85ccff56-cbec-11e3-8beb-cd72cb794782

Think about -- How/what colors / points might we use in assessments?


Orig: jackiekazil#21

Enhance the Layer loader to support multiple data types

Leaflet has multiple viewing plugins that can be used, and the GeoEvents project has custom parsers for many of these.

Also support:

  • KML with multiple parsing formats (as there are many different 'flavors' of kml)
  • KMZ (though this will need some server-side translator
  • GeoRSS
  • GeoJSON
  • Github Gists
  • ESRI-style json feature outputs

Ideally have a feature-identifier to auto-guess what data type it is if not explicitly set.

UncompressableFileError at / 'font-awesome-2/css/font-awesome.min.css' could not be found in the COMPRESS_ROOT '/usr/src/static' or with staticfiles.

UncompressableFileError at /
'font-awesome-2/css/font-awesome.min.css' could not be found in the COMPRESS_ROOT '/usr/src/static' or with staticfiles.
Request Method: GET
Request URL: http://23.251.153.65:8001/
Django Version: 1.5.4
Exception Type: UncompressableFileError
Exception Value:
'font-awesome-2/css/font-awesome.min.css' could not be found in the COMPRESS_ROOT '/usr/src/static' or with staticfiles.
Exception Location: /home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/compressor/base.py in get_filename, line 110
Python Executable: /home/seanwohltman/try2/geoq/bin/python
Python Version: 2.7.3
Python Path:
['/home/seanwohltman/try2/geoq/geoq',
'/home/seanwohltman/try2/geoq/lib/python2.7',
'/home/seanwohltman/try2/geoq/lib/python2.7/plat-linux2',
'/home/seanwohltman/try2/geoq/lib/python2.7/lib-tk',
'/home/seanwohltman/try2/geoq/lib/python2.7/lib-old',
'/home/seanwohltman/try2/geoq/lib/python2.7/lib-dynload',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk',
'/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages',
'/home/seanwohltman/try2/geoq/lib/python2.7/site-packages',
'/home/seanwohltman/try2/geoq/geoq/geoq',
'/home/seanwohltman/try2/geoq/geoq/geoq']
Server time: Tue, 29 Apr 2014 16:14:57 -0400
Error during template rendering

In template /home/seanwohltman/try2/geoq/geoq/geoq/core/templates/core/base.html, error at line 25
'font-awesome-2/css/font-awesome.min.css' could not be found in the COMPRESS_ROOT '/usr/src/static' or with staticfiles.
15 }
16 </style>
17
20 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
21
22 {% bootstrap_stylesheet_tag %}
23 {% bootstrap_stylesheet_tag "responsive" %}
24
25 {% compress css %}
26
27
28
29 {% endcompress %}
30
31 {% compress js %}
32 <script src="{{ STATIC_URL }}js/underscore-min.js"></script>
33 <script src="{{ STATIC_URL }}core/js/base.js"></script>
34 {% endcompress %}
35
Traceback Switch to copy-and-paste view

/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/django/core/handlers/base.py in get_response
response = response.render() ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/django/template/response.py in render
self.content = self.rendered_content ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/django/template/response.py in rendered_content
content = template.render(context) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/django/template/base.py in render
return self._render(context) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/django/template/base.py in _render
return self.nodelist.render(context) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/django/template/base.py in render
bit = self.render_node(node, context) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/django/template/debug.py in render_node
return node.render(context) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/django/template/loader_tags.py in render
return compiled_parent._render(context) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/django/template/base.py in _render
return self.nodelist.render(context) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/django/template/base.py in render
bit = self.render_node(node, context) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/django/template/debug.py in render_node
return node.render(context) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/compressor/templatetags/compress.py in render
return self.render_compressed(context, self.kind, self.mode, forced=forced) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/compressor/templatetags/compress.py in render_compressed
cache_key, cache_content = self.render_cached(compressor, kind, mode, forced=forced) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/compressor/templatetags/compress.py in render_cached
cache_key = get_templatetag_cachekey(compressor, mode, kind) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/compressor/cache.py in get_templatetag_cachekey
"templatetag.%s.%s.%s" % (compressor.cachekey, mode, kind)) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/compressor/utils/decorators.py in get
value = obj.dict[self.name] = self.get(obj) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/compressor/base.py in cachekey
[self.content] + self.mtimes).encode(self.charset), 12) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/compressor/utils/decorators.py in __get

value = obj.dict[self.name] = self.__get(obj) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/compressor/base.py in mtimes
for kind, value, basename, elem in self.split_contents() ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/compressor/css.py in split_contents
filename = self.get_filename(basename) ...
▶ Local vars
/home/seanwohltman/try2/geoq/local/lib/python2.7/site-packages/compressor/base.py in get_filename
self.finders and " or with staticfiles." or ".")) ...
▶ Local vars
Request information

GET
No GET data
POST
No POST data
FILES
No FILES data
COOKIES
No cookie data
META
Variable Value
RUN_MAIN
'true'
SERVER_SOFTWARE
'WSGIServer/0.1 Python/2.7.3'
SCRIPT_NAME
u''
REQUEST_METHOD
'GET'
SERVER_PROTOCOL
'HTTP/1.1'
HOME
'/home/seanwohltman'
CONTENT_LENGTH
''
VIRTUAL_ENV
'/home/seanwohltman/try2/geoq'
SHELL
'/bin/bash'
SERVER_PORT
'8001'
HTTP_HOST
'23.251.153.65:8001'
HTTP_CACHE_CONTROL
'max-age=0'
HTTP_ACCEPT
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8'
wsgi.version
(1, 0)
wsgi.run_once
False
SSH_TTY
'/dev/pts/1'
wsgi.errors
<open file '', mode 'w' at 0x7f625ae83270>
wsgi.multiprocess
False
HTTP_ACCEPT_LANGUAGE
'en-US,en;q=0.8'
MAIL
'/var/mail/seanwohltman'
SSH_CONNECTION
'74.93.119.149 59974 10.240.145.161 22'
PATH_INFO
u'/'
SSH_CLIENT
'74.93.119.149 59974 22'
LOGNAME
'seanwohltman'
USER
'seanwohltman'
QUERY_STRING
''
PATH
'/home/seanwohltman/try2/geoq/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/seanwohltman/node_modules/less/bin'
PS1
'(geoq)[\e]0;\u@\h: \w\a]${debian_chroot:+($debian_chroot)}\u@\h:\w$ '
TERM
'xterm-256color'
HTTP_USER_AGENT
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36'
HTTP_CONNECTION
'keep-alive'
SERVER_NAME
'geoq1.c.flowing-bazaar-548.internal'
REMOTE_ADDR
'74.93.119.149'
SHLVL
'1'
wsgi.url_scheme
'http'
SSH_AUTH_SOCK
'/tmp/ssh-rCgC7xhqil/agent.2044'
wsgi.input
<socket.fileobject object at 0x4012550>
wsgi.multithread
True
TZ
'America/New_York'
_
'/home/seanwohltman/try2/geoq/bin/paver'
LS_COLORS
'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:
.tar=01;31:.tgz=01;31:.arj=01;31:.taz=01;31:.lzh=01;31:.lzma=01;31:.tlz=01;31:.txz=01;31:.zip=01;31:.z=01;31:.Z=01;31:.dz=01;31:.gz=01;31:.lz=01;31:.xz=01;31:.bz2=01;31:.bz=01;31:.tbz=01;31:.tbz2=01;31:.tz=01;31:.deb=01;31:.rpm=01;31:.jar=01;31:.war=01;31:.ear=01;31:.sar=01;31:.rar=01;31:.ace=01;31:.zoo=01;31:.cpio=01;31:.7z=01;31:.rz=01;31:.jpg=01;35:.jpeg=01;35:.gif=01;35:.bmp=01;35:.pbm=01;35:.pgm=01;35:.ppm=01;35:.tga=01;35:.xbm=01;35:.xpm=01;35:.tif=01;35:.tiff=01;35:.png=01;35:.svg=01;35:.svgz=01;35:.mng=01;35:.pcx=01;35:.mov=01;35:.mpg=01;35:.mpeg=01;35:.m2v=01;35:.mkv=01;35:.webm=01;35:.ogm=01;35:.mp4=01;35:.m4v=01;35:.mp4v=01;35:.vob=01;35:.qt=01;35:.nuv=01;35:.wmv=01;35:.asf=01;35:.rm=01;35:.rmvb=01;35:.flc=01;35:.avi=01;35:.fli=01;35:.flv=01;35:.gl=01;35:.dl=01;35:.xcf=01;35:.xwd=01;35:.yuv=01;35:.cgm=01;35:.emf=01;35:.axv=01;35:.anx=01;35:.ogv=01;35:.ogx=01;35:.aac=00;36:.au=00;36:.flac=00;36:.mid=00;36:.midi=00;36:.mka=00;36:.mp3=00;36:.mpc=00;36:.ogg=00;36:.ra=00;36:.wav=00;36:.axa=00;36:.oga=00;36:.spx=00;36:.xspf=00;36:'
GATEWAY_INTERFACE
'CGI/1.1'
CSRF_COOKIE
u'9VDObpa3Tl3Ennu2FSGUSm3Jr966i7gF'
OLDPWD
'/home/seanwohltman/try2/geoq'
PWD
'/home/seanwohltman/try2/geoq/geoq'
DJANGO_SETTINGS_MODULE
'geoq.settings'
CONTENT_TYPE
'text/plain'
wsgi.file_wrapper
''
REMOTE_HOST
''
HTTP_ACCEPT_ENCODING
'gzip,deflate,sdch'
Settings
Using settings module geoq.settings
Setting Value
COMPRESS_URL
'/static/'
LEAFLET_CSS
['/static/leaflet/leaflet-draw/leaflet.draw.css',
'/static/leaflet/leaflet-draw/leaflet.draw.css']
COMPRESS_OUTPUT_DIR
'CACHE'
COMPRESS_TEMPLATE_FILTER_CONTEXT
{'STATIC_URL': '/static/'}
USE_L10N
True
COMPRESS_DATA_URI_MAX_SIZE
1024
CSRF_COOKIE_SECURE
False
LANGUAGE_CODE
'en-us'
ROOT_URLCONF
'geoq.urls'
MANAGERS
(('Admin User', '[email protected]'),)
COMPRESS_CSS_HASHING_METHOD
'mtime'
DEFAULT_CHARSET
'utf-8'
SESSION_SERIALIZER
'django.contrib.sessions.serializers.PickleSerializer'
STATIC_ROOT
'/usr/src/static/'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS
''
USE_THOUSAND_SEPARATOR
False
COMPRESS_OFFLINE_MANIFEST
'manifest.json'
ALLOWED_HOSTS
[]
MESSAGE_STORAGE
'django.contrib.messages.storage.fallback.FallbackStorage'
EMAIL_SUBJECT_PREFIX
'[Django] '
SEND_BROKEN_LINK_EMAILS
False
STATICFILES_FINDERS
('django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder')
SESSION_CACHE_ALIAS
'default'
COMPRESS_CSSTIDY_ARGUMENTS
'--template=highest'
SESSION_COOKIE_DOMAIN
None
SESSION_COOKIE_NAME
'sessionid'
ADMIN_FOR
()
TIME_INPUT_FORMATS
('%H:%M:%S', '%H:%M')
DATABASES
{'default': {'ENGINE': 'django.contrib.gis.db.backends.postgis',
'HOST': 'localhost',
'NAME': 'geoq',
'OPTIONS': {},
'PASSWORD': u'*******************
',
'PORT': '5432',
'TEST_CHARSET': None,
'TEST_COLLATION': None,
'TEST_MIRROR': None,
'TEST_NAME': None,
'TIME_ZONE': 'UTC',
'USER': 'geoq'}}
COMPRESS_YUI_BINARY
'java -jar yuicompressor.jar'
FILE_UPLOAD_PERMISSIONS
None
FILE_UPLOAD_HANDLERS
('django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler')
DEFAULT_CONTENT_TYPE
'text/html'
LEAFLET_CONFIG
{'PLUGINS': {'ALL': {'css': ['/static/leaflet/leaflet.css',
'/static/leaflet/draw/leaflet.draw.css',
'/static/leaflet/leaflet-draw/leaflet.draw.css',
'/static/leaflet/leaflet-draw/leaflet.draw.css'],
'js': ['/static/leaflet/leaflet.js',
'/static/leaflet/draw/leaflet.draw.js',
'/static/leaflet/leaflet.extras.js',
'/static/leaflet/leaflet.forms.js',
'/static/leaflet/leaflet-draw/leaflet.draw.js',
'/static/leaflet/esri-leaflet.min.js']},
'default': {},
'is_normalized': True,
'draw': {'css': ['/static/leaflet/leaflet-draw/leaflet.draw.css',
'/static/leaflet/leaflet-draw/leaflet.draw.css'],
'js': ['/static/leaflet/leaflet-draw/leaflet.draw.js'],
'repo': 'https://github.com/Leaflet/Leaflet.draw'},
'esri': {'css': [],
'js': ['/static/leaflet/esri-leaflet.min.js'],
'repo': 'https://github.com/Esri/esri-leaflet'},
'forms': {'auto-include': False,
'css': ['/static/leaflet/leaflet.css',
'/static/leaflet/draw/leaflet.draw.css'],
'js': ['/static/leaflet/leaflet.js',
'/static/leaflet/draw/leaflet.draw.js',
'/static/leaflet/leaflet.extras.js',
'/static/leaflet/leaflet.forms.js']}}}
COMPRESS_CSS_COMPRESSOR
'compressor.css.CssCompressor'
APPEND_SLASH
True
FIRST_DAY_OF_WEEK
0
DATABASE_ROUTERS
[]
YEAR_MONTH_FORMAT
'F Y'
COMPRESS_OFFLINE_TIMEOUT
31536000
STATICFILES_STORAGE
'django.contrib.staticfiles.storage.StaticFilesStorage'
CACHES
{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
SERVER_EMAIL
'root@localhost'
SESSION_COOKIE_PATH
'/'
COMPRESS_PARSER
'compressor.parser.AutoSelectParser'
COMPRESS_OFFLINE_CONTEXT
{'STATIC_URL': '/static/'}
COMPRESS_CACHE_BACKEND
'default'
MIDDLEWARE_CLASSES
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'geoq.core.middleware.UserPermsMiddleware')
USE_I18N
True
THOUSAND_SEPARATOR
','
SECRET_KEY
u'****************'
LANGUAGE_COOKIE_NAME
'django_language'
USERENA_ACTIVATION_DAYS
3
DEFAULT_INDEX_TABLESPACE
''
TRANSACTIONS_MANAGED
False
LOGGING_CONFIG
'django.utils.log.dictConfig'
SIGNING_BACKEND
'django.core.signing.TimestampSigner'
TEMPLATE_LOADERS
('django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader')
WSGI_APPLICATION
'geoq.wsgi.application'
TEMPLATE_DEBUG
True
X_FRAME_OPTIONS
'SAMEORIGIN'
CSRF_COOKIE_NAME
'csrftoken'
FORCE_SCRIPT_NAME
None
USE_X_FORWARDED_HOST
False
COMPRESS_CSSTIDY_BINARY
'csstidy'
SESSION_COOKIE_SECURE
False
COMPRESS_DEBUG_TOGGLE
'None'
CACHE_MIDDLEWARE_KEY_PREFIX
u'
****************'
COMPRESS_VERBOSE
False
CSRF_COOKIE_DOMAIN
None
FILE_CHARSET
'utf-8'
DEBUG
True
SESSION_FILE_PATH
None
COMPRESS_JS_FILTERS
['compressor.filters.jsmin.JSMinFilter']
DEFAULT_FILE_STORAGE
'django.core.files.storage.FileSystemStorage'
INSTALLED_APPS
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.gis',
'django.contrib.humanize',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.humanize',
'south',
'compressor',
'geoexplorer',
'reversion',
'guardian',
'easy_thumbnails',
'userena',
'bootstrap_toolkit',
'django_select2',
'leaflet',
'jsonfield',
'geoq.accounts',
'geoq.core',
'geoq.maps')
LANGUAGES_BIDI
('he', 'ar', 'fa')
COMMENTS_ALLOW_PROFANITIES
False
COMPRESS_YUI_CSS_ARGUMENTS
''
STATICFILES_DIRS
()
STATIC_URL_FOLDER
''
PREPEND_WWW
False
SECURE_PROXY_SSL_HEADER
None
PASSWORD_RESET_TIMEOUT_DAYS
u'****************'
SESSION_COOKIE_HTTPONLY
True
DEBUG_PROPAGATE_EXCEPTIONS
False
MONTH_DAY_FORMAT
'F j'
LOGIN_URL
'/accounts/signin/'
SESSION_EXPIRE_AT_BROWSER_CLOSE
False
TIME_FORMAT
'P'
COMPRESS_STORAGE
'compressor.storage.CompressorFileStorage'
AUTH_USER_MODEL
'auth.User'
DATE_INPUT_FORMATS
('%Y-%m-%d',
'%m/%d/%Y',
'%m/%d/%y',
'%b %d %Y',
'%b %d, %Y',
'%d %b %Y',
'%d %b, %Y',
'%B %d %Y',
'%B %d, %Y',
'%d %B %Y',
'%d %B, %Y')
COMPRESS_CSS_FILTERS
['compressor.filters.css_default.CssAbsoluteFilter']
AUTHENTICATION_BACKENDS
('userena.backends.UserenaAuthenticationBackend',
'guardian.backends.ObjectPermissionBackend',
'django.contrib.auth.backends.ModelBackend')
EMAIL_HOST_PASSWORD
u'
****************'
COMPRESS_REBUILD_TIMEOUT
2592000
AUTH_PROFILE_MODULE
'accounts.UserProfile'
CACHE_MIDDLEWARE_ALIAS
'default'
SESSION_SAVE_EVERY_REQUEST
False
NUMBER_GROUPING
0
SESSION_ENGINE
'django.contrib.sessions.backends.db'
CSRF_FAILURE_VIEW
'django.views.csrf.csrf_failure'
CSRF_COOKIE_PATH
'/'
COMPRESS_CACHE_KEY_FUNCTION
u'****************'
LOGIN_REDIRECT_URL
'/geoq/'
DECIMAL_SEPARATOR
'.'
COMPRESS_PRECOMPILERS
(('text/less', 'lessc {infile} {outfile}'),)
COMPRESS_MTIME_DELAY
10
SITE_ID
1
LOCALE_PATHS
()
TEMPLATE_STRING_IF_INVALID
''
LOGOUT_URL
'/geoq'
EMAIL_USE_TLS
False
TEMPLATE_DIRS
('/home/seanwohltman/try2/geoq/geoq/geoq/templates',
'/home/seanwohltman/try2/geoq/geoq/geoq')
FIXTURE_DIRS
()
EMAIL_HOST
'localhost'
DATE_FORMAT
'N j, Y'
MEDIA_ROOT
'/opt/src/pyenv/geoq/geoq-django'
DEFAULT_EXCEPTION_REPORTER_FILTER
'django.views.debug.SafeExceptionReporterFilter'
ADMINS
(('Admin User', '[email protected]'),)
FORMAT_MODULE_PATH
None
DEFAULT_FROM_EMAIL
'webmaster@localhost'
COMPRESS_ROOT
'/usr/src/static'
MEDIA_URL
'/images/'
DATETIME_FORMAT
'N j, Y, P'
COMPRESS_YUI_JS_ARGUMENTS
''
COMPRESS_JS_COMPRESSOR
'compressor.js.JsCompressor'
DISALLOWED_USER_AGENTS
()
ALLOWED_INCLUDE_ROOTS
()
COMPRESS_MINT_DELAY
30
LOGGING
{'disable_existing_loggers': False,
'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}},
'handlers': {'mail_admins': {'class': 'django.utils.log.AdminEmailHandler',
'filters': ['require_debug_false'],
'level': 'ERROR'}},
'loggers': {'django.request': {'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True}},
'version': 1}
SHORT_DATE_FORMAT
'm/d/Y'
TEST_RUNNER
'django.test.simple.DjangoTestSuiteRunner'
COMPRESS_ENABLED
True
IGNORABLE_404_URLS
()
COMPRESS_OFFLINE
False
TIME_ZONE
'America/New_York'
FILE_UPLOAD_MAX_MEMORY_SIZE
2621440
EMAIL_BACKEND
'django.core.mail.backends.dummy.EmailBackend'
DEFAULT_TABLESPACE
''
TEMPLATE_CONTEXT_PROCESSORS
('django.contrib.auth.context_processors.auth',
'django.core.context_processors.request',
'django.core.context_processors.static',
'django.contrib.messages.context_processors.messages')
SESSION_COOKIE_AGE
1209600
SETTINGS_MODULE
'geoq.settings'
USE_ETAGS
False
SITE_ROOT
'/home/seanwohltman/try2/geoq/geoq/geoq'
LANGUAGES
(('af', 'Afrikaans'),
('ar', 'Arabic'),
('az', 'Azerbaijani'),
('bg', 'Bulgarian'),
('be', 'Belarusian'),
('bn', 'Bengali'),
('br', 'Breton'),
('bs', 'Bosnian'),
('ca', 'Catalan'),
('cs', 'Czech'),
('cy', 'Welsh'),
('da', 'Danish'),
('de', 'German'),
('el', 'Greek'),
('en', 'English'),
('en-gb', 'British English'),
('eo', 'Esperanto'),
('es', 'Spanish'),
('es-ar', 'Argentinian Spanish'),
('es-mx', 'Mexican Spanish'),
('es-ni', 'Nicaraguan Spanish'),
('es-ve', 'Venezuelan Spanish'),
('et', 'Estonian'),
('eu', 'Basque'),
('fa', 'Persian'),
('fi', 'Finnish'),
('fr', 'French'),
('fy-nl', 'Frisian'),
('ga', 'Irish'),
('gl', 'Galician'),
('he', 'Hebrew'),
('hi', 'Hindi'),
('hr', 'Croatian'),
('hu', 'Hungarian'),
('ia', 'Interlingua'),
('id', 'Indonesian'),
('is', 'Icelandic'),
('it', 'Italian'),
('ja', 'Japanese'),
('ka', 'Georgian'),
('kk', 'Kazakh'),
('km', 'Khmer'),
('kn', 'Kannada'),
('ko', 'Korean'),
('lb', 'Luxembourgish'),
('lt', 'Lithuanian'),
('lv', 'Latvian'),
('mk', 'Macedonian'),
('ml', 'Malayalam'),
('mn', 'Mongolian'),
('nb', 'Norwegian Bokmal'),
('ne', 'Nepali'),
('nl', 'Dutch'),
('nn', 'Norwegian Nynorsk'),
('pa', 'Punjabi'),
('pl', 'Polish'),
('pt', 'Portuguese'),
('pt-br', 'Brazilian Portuguese'),
('ro', 'Romanian'),
('ru', 'Russian'),
('sk', 'Slovak'),
('sl', 'Slovenian'),
('sq', 'Albanian'),
('sr', 'Serbian'),
('sr-latn', 'Serbian Latin'),
('sv', 'Swedish'),
('sw', 'Swahili'),
('ta', 'Tamil'),
('te', 'Telugu'),
('th', 'Thai'),
('tr', 'Turkish'),
('tt', 'Tatar'),
('udm', 'Udmurt'),
('uk', 'Ukrainian'),
('ur', 'Urdu'),
('vi', 'Vietnamese'),
('zh-cn', 'Simplified Chinese'),
('zh-tw', 'Traditional Chinese'))
COMPRESS_CLOSURE_COMPILER_BINARY
'java -jar compiler.jar'
FILE_UPLOAD_TEMP_DIR
None
INTERNAL_IPS
()
STATIC_URL
'/static/'
EMAIL_PORT
25
USE_TZ
True
SHORT_DATETIME_FORMAT
'm/d/Y P'
PASSWORD_HASHERS
u'
****************'
ABSOLUTE_URL_OVERRIDES
{}
CACHE_MIDDLEWARE_SECONDS
600
ANONYMOUS_USER_ID
-1
DATETIME_INPUT_FORMATS
('%Y-%m-%d %H:%M:%S',
'%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M',
'%Y-%m-%d',
'%m/%d/%Y %H:%M:%S',
'%m/%d/%Y %H:%M:%S.%f',
'%m/%d/%Y %H:%M',
'%m/%d/%Y',
'%m/%d/%y %H:%M:%S',
'%m/%d/%y %H:%M:%S.%f',
'%m/%d/%y %H:%M',
'%m/%d/%y')
EMAIL_HOST_USER
''
PROFANITIES_LIST
u'_***************'
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 500 page.

Include Social Media tagging to find nearby social images

Possibly use the GeoMedia module or another source to link in social media.

Users should possibly be able to click a 'Nearby social' button, and it shows items from SN sites geotagged.

These might then be:

  • Marked as 'not-applicable' and hidden for future users
  • Marked as 'important' and shown to all users
  • Dragged to a new location to re-geo-locate them
  • Associated (maybe by dragging or with a link icon) to a feature to indicate that the feature was made due to that social image

This might make a good source for uploading other images or zip-files of images as well. Images uploaded could also be shown on one of these overlay layers.

DB issue after code merger

I had a issue w/ the last set of code that was merged. This might be a personal issue, but I wanted to throw it on the radar.

This set: jackiekazil@5d2c472

GhostMigrations:

 ! These migrations are in the database but not on disk:
    <accounts: 0005_auto__chg_field_userauthorization_user_profile__add_unique_userauthori>
 ! I'm not trusting myself; either fix this yourself by fiddling
 ! with the south_migrationhistory table, or pass --delete-ghost-migrations
 ! to South to have it delete ALL of these records (this may not be good).

I (@jackiekazil) am currently working on trying to resolve this.

Create a map detail, feature detail, layer detail pages

If you visit /maps/maps...
screen shot 2014-04-11 at 11 06 20 am
... and click on one of the linked maps, you have to login, because it links to a 'update' page.
screen shot 2014-04-11 at 11 29 45 am
/maps/update/1

There is no detail, read-only view of the content for read only.
We should create a detail view of the object that.

Open to discussion, but I am thinking link the text "Base map" in the example to the detail page and only allow editable access view the buttons on the right hand side of the record. The "Base map" link would then go to /maps/1, which should also have an edit options for those who have perms.

This needs to be done for features & for layers.

Geojson not working on AOI edit page (geoq/aois/work/<pk>)

Geojson layer load functionality is not working on the aoi edit page. (See attached screenshot.)
Is someone activity working on this or is this something I should try to tackle? This is a blocker for me. :-(

screen shot 2014-04-18 at 5 25 37 pm

edit
It seems like we discussed geojson, but never completed integration?

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.