inaturalist / inaturalist Goto Github PK
View Code? Open in Web Editor NEWThe Rails app behind iNaturalist.org
Home Page: http://www.inaturalist.org
License: MIT License
The Rails app behind iNaturalist.org
Home Page: http://www.inaturalist.org
License: MIT License
'Reload from observations' on lists/show not working, also missing en.find on Add to Your List
Currently you can only subscribe to a place once. You should be able to subscribe to any combination of place_id + taxon_id.
eliza_torres_b reports whale shark on delete project here http://conabio.inaturalist.org/projects/cuemanco-unidad-deportiva/edit
Please correct me if I am wrong - I searched around the site but couldn't find a way to manage existing access tokens linked to my account.
It's definitely important to allow users to see which apps they've authorized and revoke access when needed.
I'm developing the inat projects library for easy integration with external websites.
Could you provide a way to post custom fields? In particular, https://www.inaturalist.org/projects/iseahorse has many custom fields which I absolutely need to be able to post to.
For some reason when I try to search for images to add to a species page from Wikimedia Commons, it usually finds none or a very small number. For example, if I search for 'spider' it finds no images, but if I search for 'jumping spider' it finds 1 image. Either term should find dozens of matches. I haven't been able to figure out any rhyme or reason for why it finds some images, but not others. It doesn't seem to be related to the licensing, which was my first guess.
Calendar is showing obscured locations as stemmed observations in the public locations and tabulating statistics from those public locations (e.g. 1 from Thornton Beach State Park, CA, US for obs with private locations in McLaren Park here: http://www.inaturalist.org/calendar/loarie/2013/5/11).
Ideally would show stemless public locations to users without permissions and stemmed private locations to users with permissions and calculate place stats on private locations visible to all users
As a non-registered user, if you click on the "Join this project" link on the top right of any project page (e.g. http://www.inaturalist.org/projects/state-flowers-of-the-united-states-eol-collection), you are taken to an empty page.
This page should take you to registration or be hidden in that context?
In the Data Quality Assessment interface if I hover over the "Yes" or "No" links, a title tooltip pops up saying "translation missing: en.yes" or "translation missing: en.no".
Right now when you pick an observation location from the map it fills in the latitude and longitude values to 10 decimal places. This is the equivalent of specifying a location to 1/100th of a millimeter. Since you can't actually zoom in that close in the map, and no camera's GPS system is anywhere near that accurate, it would be better to truncate the coordinates to a more reasonable number of decimal places, like 5 or 6. Five decimal places is the equivalent of specifying the location to the exact meter.
This does not look intentional to me: https://www.inaturalist.org/users/sign_in (you have to be signed out, of course)
When I click Connect to Yahoo
on my profile, I get a 500 error.
On my development copy I get the following.
You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
/vagrant/app/controllers/provider_authorizations_controller.rb:98:in `create_provider_authorization'
/vagrant/app/controllers/provider_authorizations_controller.rb:61:in `create'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/base.rb:1333:in `send'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/base.rb:1333:in `perform_action_without_filters'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/filters.rb:617:in `call_filters'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/filters.rb:638:in `run_before_filters'
/vagrant/app/controllers/application_controller.rb:190:in `catch_missing_mobile_templates'
/var/lib/gems/1.8/gems/activesupport-2.3.12/lib/active_support/callbacks.rb:178:in `send'
/var/lib/gems/1.8/gems/activesupport-2.3.12/lib/active_support/callbacks.rb:178:in `evaluate_method'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/filters.rb:186:in `call'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/filters.rb:635:in `run_before_filters'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/filters.rb:615:in `call_filters'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/filters.rb:610:in `perform_action_without_benchmark'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
/var/lib/gems/1.8/gems/activesupport-2.3.12/lib/active_support/core_ext/benchmark.rb:17:in `ms'
/usr/lib/ruby/1.8/benchmark.rb:308:in `realtime'
/var/lib/gems/1.8/gems/activesupport-2.3.12/lib/active_support/core_ext/benchmark.rb:17:in `ms'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/rescue.rb:160:in `perform_action_without_flash'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/flash.rb:151:in `perform_action'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/base.rb:532:in `send'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/base.rb:532:in `process_without_filters'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/filters.rb:606:in `process'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/base.rb:391:in `process'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/base.rb:386:in `call'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/routing/route_set.rb:438:in `call'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/dispatcher.rb:87:in `dispatch'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/dispatcher.rb:121:in `_call'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/dispatcher.rb:130:in `build_middleware_stack'
/var/lib/gems/1.8/gems/activerecord-2.3.12/lib/active_record/query_cache.rb:29:in `call'
/var/lib/gems/1.8/gems/activerecord-2.3.12/lib/active_record/query_cache.rb:29:in `call'
/var/lib/gems/1.8/gems/activerecord-2.3.12/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache'
/var/lib/gems/1.8/gems/activerecord-2.3.12/lib/active_record/query_cache.rb:9:in `cache'
/var/lib/gems/1.8/gems/activerecord-2.3.12/lib/active_record/query_cache.rb:28:in `call'
/var/lib/gems/1.8/gems/activerecord-2.3.12/lib/active_record/connection_adapters/abstract/connection_pool.rb:361:in `call'
/var/lib/gems/1.8/gems/oa-core-0.2.6/lib/omniauth/strategy.rb:164:in `call_app!'
/var/lib/gems/1.8/gems/oa-core-0.2.6/lib/omniauth/strategy.rb:129:in `callback_phase'
/var/lib/gems/1.8/gems/oa-openid-0.2.6/lib/omniauth/strategies/open_id.rb:89:in `callback_phase'
/var/lib/gems/1.8/gems/oa-core-0.2.6/lib/omniauth/strategy.rb:68:in `callback_call'
/var/lib/gems/1.8/gems/oa-core-0.2.6/lib/omniauth/strategy.rb:42:in `call!'
/var/lib/gems/1.8/gems/oa-core-0.2.6/lib/omniauth/strategy.rb:30:in `call'
/var/lib/gems/1.8/gems/oa-core-0.2.6/lib/omniauth/strategy.rb:44:in `call!'
/var/lib/gems/1.8/gems/oa-core-0.2.6/lib/omniauth/strategy.rb:30:in `call'
/var/lib/gems/1.8/gems/oa-core-0.2.6/lib/omniauth/strategy.rb:44:in `call!'
/var/lib/gems/1.8/gems/oa-core-0.2.6/lib/omniauth/strategy.rb:30:in `call'
/var/lib/gems/1.8/gems/oa-core-0.2.6/lib/omniauth/strategy.rb:44:in `call!'
/var/lib/gems/1.8/gems/oa-core-0.2.6/lib/omniauth/strategy.rb:30:in `call'
/var/lib/gems/1.8/gems/oa-core-0.2.6/lib/omniauth/builder.rb:30:in `call'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/string_coercion.rb:25:in `call'
/var/lib/gems/1.8/gems/rack-1.1.2/lib/rack/head.rb:9:in `call'
/var/lib/gems/1.8/gems/rack-1.1.2/lib/rack/methodoverride.rb:24:in `call'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/params_parser.rb:15:in `call'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/session/cookie_store.rb:99:in `call'
/var/lib/gems/1.8/gems/activesupport-2.3.12/lib/active_support/cache/strategy/local_cache.rb:25:in `call'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/failsafe.rb:26:in `call'
/var/lib/gems/1.8/gems/rack-1.1.2/lib/rack/lock.rb:11:in `call'
/var/lib/gems/1.8/gems/rack-1.1.2/lib/rack/lock.rb:11:in `synchronize'
/var/lib/gems/1.8/gems/rack-1.1.2/lib/rack/lock.rb:11:in `call'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/dispatcher.rb:114:in `call'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/reloader.rb:34:in `run'
/var/lib/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/dispatcher.rb:108:in `call'
/var/lib/gems/1.8/gems/rails-2.3.12/lib/rails/rack/static.rb:31:in `call'
/var/lib/gems/1.8/gems/rack-1.1.2/lib/rack/urlmap.rb:47:in `call'
/var/lib/gems/1.8/gems/rack-1.1.2/lib/rack/urlmap.rb:41:in `each'
/var/lib/gems/1.8/gems/rack-1.1.2/lib/rack/urlmap.rb:41:in `call'
/var/lib/gems/1.8/gems/rails-2.3.12/lib/rails/rack/log_tailer.rb:17:in `call'
/var/lib/gems/1.8/gems/rack-1.1.2/lib/rack/content_length.rb:13:in `call'
/var/lib/gems/1.8/gems/rack-1.1.2/lib/rack/handler/webrick.rb:48:in `service'
/usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
/usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
/usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
/usr/lib/ruby/1.8/webrick/server.rb:95:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:92:in `each'
/usr/lib/ruby/1.8/webrick/server.rb:92:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:23:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:82:in `start'
/var/lib/gems/1.8/gems/rack-1.1.2/lib/rack/handler/webrick.rb:14:in `run'
/var/lib/gems/1.8/gems/rails-2.3.12/lib/commands/server.rb:111
script/server:3:in `require'
script/server:3
While the "1 taxon / 1 place / 1 time" of the iNat Observation is a decent model for occurrence data and fits a photo-centric view of natural history data recording, many natural history practices, like birding, are oriented more toward a "check list / place / time period" model, from which occurrences can be extracted, as well as absences.
So I'm proposing that we build iNat Trips. A Trip will be an extension of a journal Post, and it will add datetime, coordinates, and a list of taxa. Users can either add all the taxa they observed, or work from a place check list to pre-populate the taxa and check off the ones they saw. They can also state a broad purpose, i.e. "I was birding" and the UI can use that purpose to ask if the user wants to work from a check list.
This would also be a great opportunity for social interaction / recruitment: if you go birding with 3 of your friends who aren't on iNat, you could list them as participants, and iNat could send them an email summarizing the species you all saw, the pics you took, and of course links to sign up for iNat (we could even prepopulate life lists from the trips they were listed on).
We could also use trips for cool comparative visualizations of repeated trips. For example, I go on a birding trip to Sacramento National Wildlife Refuge with some friends of mine every winter. I have this hidden, date-base, not-ready-for primetime page I use to compare our findings, but trips would be a much better way to handle this kind of thing.
I haven't worked out all the details yet and I feel like I'm already overscoping this, but let's restart this discussion. Is anyone else interested in functionality like this? If so, are there ways this model doesn't meet your needs and if not can you recommend changes?
Here's some stuff I out together
http://www.inaturalist.org/taxa/169844-Townsendia-hookeri 'edit photos' Flickr tab shows upload from harddisk tab but no Flickr photos, also cancel button broken
No one really uses the quality metrics much, and at least one of our data partners is complaining about cultivated organisms in their research-grade observations feed. I don't want to force people to flag their own data like this, and I'm leery of adding more complication to the obs form, but what do you (@loarie in particular) think of this:
Checking the box will automatically add a quality metric vote again wild/naturalized. I don't think it's that intrusive, and it might encourage people to flag their data more. I was also thinking we might add something similar to the identification form at the bottom of obs pages so that when people confirm identification of clearly cultivated organisms they can add a quality metric at the same time:
Thoughts?
I used the "Add a place" interface to add a few states to the Habronattus amicus taxon page. Once I was done, I saw that the following places I didn't explicitly add myself now appeared on the taxon page:
Not sure what's going on there or how to remove the bogus ones.
For creating new obsrevation: http://www.inaturalist.org/observations/new
The user should not be able to input a mismatching place name and gps coordinates -- potential data integrity issue if a user inputs conflicting information (e.g. "Canada", lat 0 long 0)?
I added http://www.inaturalist.org/observations/255987 incorrectly ID'd as http://www.inaturalist.org/taxa/58958-Papaver-californicum. I changed the ID to http://www.inaturalist.org/taxa/78344-Papaver-heterophyllum by deleting the old ID and adding the new one from obs/show. In addition to not expiring the component cache, it did not update the corresponding life list entry: http://www.inaturalist.org/listed_taxa/3456441
Allow users to filter the taxa shown on lists/show by an arbitrary taxon, e.g. you should be able to see all the members of Asteraceae on a given list.
From conabio.inaturalist.org but not www.inaturalist.org, linking a soundcloud account
redirects to www.inaturalist.org with the invalid credentials flash
When viewing your own observation at obs/show, check for other observations with the same taxon_id, time_observed_at, latitude, longitude, and user_id. If one exists, add an alert with a link to merge the observations.
When you create a new list, at the bottom of the page it says:
"You haven't observed any species to list yet! Try to list yet! Try adding some observations or just adding species using the form on this page."
The sentence "Try to list yet!" doesn't make sense.
Error on http://www.inaturalist.org/photos/142960/repair - some sort of Koala problem
https://inaturalist.airbrake.io/groups/56392921
Currently the most recent whole post is show. Set a reasonable length and trim with a "read more" link.
As the title says; pretty standard feature on any online form.
When I try to create an application at http://www.inaturalist.org/oauth/applications, I am redirected to the following: http://www.inaturalist.org/oauth/applications/12; I have no access to my key and secret.
Some people would like to subscribe to "rare plants of Vermont" or "introduced insects of California." Allow subscriptions to be configured
Using the preferences gem is probably the way to go here, that or some kind of bitfield column in the subscriptions table.
Make it a licensing option for photos and observations, even though I guess it's not really a license. See http://creativecommons.org/about/cc0
When I click on the "Add more photos" interface I have no idea what's going on. I choose "Source: Your computer", which does nothing, and I'm just left with a bunch of random photos from Flickr. What I would expect here would be 2 buttons:
I propose we remove the Naturalized and Managed categories from Establishment Means. Which currently includes the following categories:
native: evolved in this region or arrived by non-anthropogenic means
endemic: native and occurs nowhere else
introduced: arrived in the region via anthropogenic means
naturalised: reproduces naturally and forms part of the local ecology
invasive: has a deleterious impact on another organism, multiple organisms, or the ecosystem as a whole
managed: maintains presence through intentional cultivation or husbandry
Pros:
Cons:
Thoughts?
I would like to:
At the moment the default config values are hard-coded and scattered throughout the codebase.
e.g.
<%= image_tag INAT_CONFIG['logo'] || 'logo-small.gif', :alt => SITE_NAME %>
I'd like it to be more like:
<%= image_tag inat_config(:logo), :alt => inat_config(:general, :site_name) %>
I imagine the implementation looking something like this:
config/initializers/00_config.rb
begin
INAT_DEFAULT_CONFIG = YAML.load_file(Rails.root.join("config", "config.default.yml"))[Rails.env].symbolize_keys
INAT_CONFIG = YAML.load_file(Rails.root.join("config", "config.yml"))[Rails.env].symbolize_keys
INAT_CONFIG = INAT_DEFAULT_CONFIG.deep_merge(INAT_CONFIG)
rescue
INAT_CONFIG = {}
end
def inat_config(*keys)
value = INAT_CONFIG
begin
keys.each do |key|
value = value.fetch(key)
end
rescue KeyError => error
logger.error "Missing config values: #{keys.join(',')}"
value = nil
end
value
end
If this is an acceptable approach we may want to think about doing something similar for the other config files, if required.
Or the other option is to use something like the configuration gem.
Any thoughts?
Currently you can only have one rule per operator, which means you can't do something like require that an observation by of an amphibian OR a reptile. Allow multiple rules per operator and treat those rules as OR.
Could you please update config.yml.example
to include the new config options such as 'bounds', 'logo_icon_square_big' etc?
Cheers
Hello INaturalist has been suggested by someone for a project here in New Zealand and I am trying to get it going on my machine.
I have worked though your developer guide (more or less) and finally got to the command:
script/runner tools/load_iconic_taxa.rb
It starts off OK but finally reports "/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.11/lib/active_support/whiny_nil.rb:52:in method_missing': undefined method
taxon' for nil:NilClass (NoMethodError)"
Then the stack trace thingy :
from tools/load_iconic_taxa.rb:42
from tools/load_iconic_taxa.rb:38:in `each'
from tools/load_iconic_taxa.rb:38
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `eval'
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.11/lib/commands/runner.rb:46
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from script/runner:3
I would be much obliged if anyone could give me some hints about how to fix this.
From what I can see, it seems to get through to the point where it actually tries to write data to the DB
Regards,
Zane Gilmore
Facebook Groups return empty sets rather than sets of photos on: http://www.inaturalist.org/photos/inviter
Currently it 404s for no reason. The sign in link works fine. Either fix this or embrace the future by replacing the Open ID Google strategy with its OAuth2 equivalent.
Allow users to set default connections to https; default connection right now is unencrypted.
See for example Trachemys scripta ssp. elegans observation under:
http://www.inaturalist.org/observations/kaldari
The image was uploaded about an hour ago and the thumbnail image actually exists:
http://static.inaturalist.org/photos/302164/square.jpg?1366505753
...but it seems that the processing placeholder must be cached in its place. I cleared my local browser cache to make sure it wasn't a local page cache.
Let project managers predetermine who can join the project. Will probably require something like
I'm guessing this would take me 3 days, which probably means it would be more like a week.
In the observation interface, under "Where were you?", there's a little green blob/button next to the text field. If you click it, it activates the text field. It doesn't seem to serve any real purpose (most people activate text fields by clicking on them directly), and it's presence is mysterious. If there's some reason to keep it, it could probably use a better graphic and a title tooltip explaining what it is.
If a project specifies some fields (e.g. georeference) as required, there is no indicator that the field is required. Could you come up with a way to indicate this so that observations are not simply rejected from the project?
This could be a very good way to lose project contributions without the user noticing.
Custom fields do a good job by marking required fields with *'s. Thanks!
Hi all!
congratulations for your nice aplication! I'm thinking about translate it, but i can't find any directory with de .po files. Is there any translation sistem with the strings out of code?
thanks!
If you go to the 'stats' page for any project (e.g. http://www.inaturalist.org/projects/iseahorse/stats), some code not rendered correctly:
Total members 103
t(:total_observations) %> 48
t(:total_unique_observers) %> 7
For creating new obsrevation: http://www.inaturalist.org/observations/new
Isn't timezone redundant because we have the location (and can hence calculate timezone) -- potential data integrity issue if a user inputs conflicting information (e.g. PST in Japan)?
I was going to try fixing this myself, but I couldn't figure out where the country list is pulled from. The HTML comes from an AJAX request to...
http://www.inaturalist.org/taxa/XXXXX/add_places?tab=countries
Some of the errors include:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.