jwnigel / permaculture Goto Github PK
View Code? Open in Web Editor NEWPermaculture design app built on scraped plant databases. Drag-n-drop GUI with detailed design plan generator.
Permaculture design app built on scraped plant databases. Drag-n-drop GUI with detailed design plan generator.
We'll need svg images for different tree / shrub / plant forms. Obviously not all plants will have a unique image but a certain number of categories will. Think about the "habit" column in this EFG database:
We have to decide whether to use a minimalistic circle or an svg with a bit more detail to include a wavy outline, some branches, etc. I would like to use more than a simple circle but without adding weight to our program with complex svg's.
And some variation would be nice so that not all trees look the same. We could rotate the same design (unless it includes shadow) but it shouldn't be hard to add some variety to our options.
Another idea would be to include an icon with each tree to differentiate it. For example a chesntut tree would have a chestnut icon, an apple tree an apple, an oak and acorn, and so on. We could include icons for nitrogen fixers or pollinizers too. I don't know that I like this idea but it is something to consider!
in UI and data, and in dimensions (sizes US-EU)
EN would be reference, FR, DE and ES good candidates for translations
add some timelines view in a design export that combines
VERY useful, thanks for sharing !
I'll keep following for the next steps.
story : i have "X" plants of type"W" and "Z", please generate a design from that
No filters for now. Just create search function searching by name. Have results (scrollable if applicable) drop down from search bar and select one by clicking. Or hit enter and be able to select from all results, filtering where necessary (see next step). On mobile I think 'Accordion' is the class for this, and maybe on desktop too.
Integrate the search with the UI in design directory.
what would show on first page ?
export to some
Consider expanding or dropping (more likely) certain characteristics for which data is unreliable or null.
For example "leaf" column contains majority null values. First check that this isn't a code issue, and if not, consider the usefulness of the data. Could prove to be valuable information even if just 10% of entries have it. In which case we could ask for user feedback to fill data.
Also consider possible categories for useful future data. The more (reliable) data the better!
As we continue to scrape from other sources like permapeople, pomiferous, etc..., we'll find many characteristics of one database are undefined in the other. Discuss and evaluate how to combine databases.
Would love to be able to collect+merge existing sources and provide a means for a community of users to curate/improve it.
That collaborative evolution process does not need to be in the app: this 'reference' data could live somewhere online (along with translations, tips, anecdotes, pictures, seeds/plants local providers coordinates, or feedback) and be exported to the app on new release or manual update.
Sources already considered for import/inspiration:
Sources for specific fruit cultivars:
Sources maybe interesting but not yet scrapped:
Sources unlikely to be integrated in anyway, but that may be interesting for permadesigners, for info:
Hi Nigel, I am a developer interested in permaculture and I have found your project very interesting. I had in mind something similar to what you are doing. I have started with an application in Python for companion plants, you can see it here:
https://github.com/RPDaniels/CPlant
My idea was to built a sw suite for permaculture design, and I am currently scanning the web to check the current state of the art of permaculture projects for not to reinvent the wheel.
It would be great if we can gather all the functionalities in a single application.
I will have a look at your current development
Cheers from Spain!
my favorite (online design) tool so far is https://permapeople.org/berteh/appel-tree-pattern/
I like there :
I don't like
I miss there :
Create (or at least export) graphic assets in an editable opensource format, such as SVG (for vector) or GIMP (for raster).
all Adobe tools can generate SVG. Inkscape is a good opensource alternative.
I have no preference which, and usually basic pip
works for me... but if you have multiple python projects with different environments needs at the same time you may prefer something else.
https://www.activestate.com/blog/which-python-dependency-manager-should-i-choose/
Add a layer on top of background and below plants to draw structure elements (paths, ponds, walls).
Could be a layer to import, scale and rotate various transparent images, or drawing/scribbling layer.
Hi nigel.
The following static paths may be problematic to deploy/use elsewhere:
$ grep -Ir "/home/nigel" *
design/libs/screens/db_screen/__init__.py:data = pd.read_csv('/home/nigel/Code/permaculture/scrapers/pfaf/all_plants.csv')
design/libs/screens/db_screen/__init__.py: db_data = pd.read_csv('/home/nigel/Code/permaculture/scrapers/pfaf/all_plants.csv')
design/env/bin/pip3.10:#!/home/nigel/code/jwnigel/permaculture/design/env/bin/python
design/env/bin/activate.fish:set -gx VIRTUAL_ENV "/home/nigel/code/jwnigel/permaculture/design/env"
design/env/bin/activate:VIRTUAL_ENV="/home/nigel/code/jwnigel/permaculture/design/env"
design/env/bin/pip:#!/home/nigel/code/jwnigel/permaculture/design/env/bin/python
design/env/bin/activate.csh:setenv VIRTUAL_ENV "/home/nigel/code/jwnigel/permaculture/design/env"
design/env/bin/pip3:#!/home/nigel/code/jwnigel/permaculture/design/env/bin/python
design/env/pyvenv.cfg:home = /home/nigel/.pyenv/versions/lewagon/bin#40
some thoughts relating to data storage
About the data storage technology : how big do you expect it will become? How many plants and designs would be stored in the user's app?
If the sum is less than 2000 then the technology doesn't matter much I think.
Do you need instant online sync amongst all users? I think an update every once in a while is enough and thus wouldn't go for online CRUD like restdb, but I'd rather stick to offline & local file with some import/update mechanism.
In case of local files : SQLite is easy enough but really low level, opt. use sqlalchemy for ORM or MVC or later backend change... but I wouldn't invest too much time there in now. Parquet file is a good alternative to CSV, that natively loads to pandas data frame.
a few ones I like online:
mobile UI has a few nice tricks, see
see appealing widgets such as https://www.pinterest.com/linimg/filter-multi-selection-ui/
Still getting this error sometime although search term works fine in browser: invalid literal for int() with base 10: ' ' ***Hardiness zone fixed this issue. I think it was zones >= 10 throwing error. ***Using float() instead of int() also.
Height is returning the string 'to' sometimes. I noticed it in Onion and Rosemary.
In Habitat (maybe others), remove pfaf references in square brackets [] Example: 'Rich fertile woods and hillsides[43, 82] in deep well-drained soils[229].' (Although maybe this is necessary for liscensing?
Clean up output in general: Sometimes strings like "perennial" are returned in all caps. Make things consistent.
Use regex to grab hardiness zones. Current [-1] indexing doesn't work when zones >= 10
Add pollinators to scraper
When scraping varieties like Acer saccharum var nigra, the search string should be 'Acer+saccharum+nigra', without 'var'
with minimal infos needed to be able to display the design in editor, and intuitive access methods, likely stored in a pandas DataFrame (but pick whichever internal structure you feel more relevant).
https://kivy-garden.github.io/mapview/mapview.html
Seems to allow displaying an interactive map as background, openstreetmap based by default.
Might be cool to be able to import+export from/to GIS software.
Check if
I put it with target 1.3 for now, but if you feel it's worth looking at earlier just change the milestone :โ ^โ )
After the initial design is done, I would love to be able to export a list/table of the selected plants with their respective:
to test and help discuss relevance+exact content of data.
help define mapping from external sources, via python scrapers or google refine scripts or other APIs...
likely goolesheet.
Create mechanisms for users to edit their own database. And down the line allow for these edits to be added into the main database, either as user comments or entries themselves. Perhaps a voting system?
Create 2-3 filters/facets to understand the process. Using the 'working data' from design_data_class these could be pH, habitat, and plant size.
Many of the "Width" entries in pfaf are null, and it is essential to create the design.
So we need to create a reasonably accurate width estimator (Finally get to use some data analysis skills) :)
My initial idea is to create a height-width ratio for all plants. I assume trees have a larger ratio (more heigth to width) than shrubs so we could return a different ratio for different plants. Or look at the heigh-width ratio of members in the taxonomic family?
Somewhere the genus and species are being split with a tab \t and every plant results in an error.
I've tried splitting genus and species seperately and then stripping with .strip() but can't figure it out.
Running test_plants.txt returns this:
Errors: ['Bunium\tbulbocastanum ', 'Calamintha\tnepeta ', 'Carex\tpensylvanica ', 'Carya\tillinoinensis ', 'Gymnocarpium\tdryopteris ', 'Halesia\ttetraptera ', 'Juglans\tnigra ', 'Juglans\tregia ', 'Malus\tpumila ', 'Malva\talcea ']
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.