Giter Club home page Giter Club logo

permaculture's Introduction

Permaculture designer tool

Ever dreamed of designing your permaculture project with ease ? This tool will allow you to access inspiration from established botanical databases, easily lay out your favorite plants in a way that considers their ecological functions and the synergy of the whole. Then with a click you can break down your design into an organized guide with plant totals and row-by-row layouts. Then export it, either for the world... or just for friends to go plant together !

๐ŸŒ homepage - ๐ŸŽ author - ๐Ÿ‘ฃ roadmap - ๐Ÿœ progress - ๐Ÿ—ช say hello

Features

This tool can be used for any garden, orchard, or homestead design project, not restricted to permaculture. But we will focus on permaculture design, supporting the integration of plants', people's and animals' needs in the design. ๐Ÿ› ๐Ÿ‚

For instance considering the reference harvest or picking period allows you to organize your site, and plant apple trees according to when they should produce... most helpful in designing a U-pick orchard, or just for homestead design. Likewise with flowering periods, either to ensure that the food crops in your design will have a pollinator partner, or to use in combination with pollinators to ensure a constant supply of food for our pollinator friends. ๐Ÿ ๐Ÿชฒ

This tool will also allow you to take into account plant growth rate, uses, preferences like soils, moisture, shade and pH, allowing you to design as thoroughly as possible. ๐ŸŒณ โ›…

When your design is complete you can generate detailed planting maps and guides, helping you bring your design to life. ๐ŸŒˆ ๐ŸŒฑ

Work in progress

This is a work in progress, you're welcome to join the discussions via the

Already available

Data Reuse

Our scapers gather useful botanical information from a plain list of plants.

Some scrapers (see code/scrapers) to gather data from good (permaculture and classical) botanical sources, including

Help us integrate more relevant sources and curating these data, join the fun here.

We still need to consider proper linking/referencing to these original materials.

permaculture designer UI

Some UI sketches for a permaculture designer interface are being drafted... get in touch if you want to help. It will allow you to drag and drop plants from a list to an arial photo and arrange them.

designer UI prototype

mobile prototype

Programmers, Graphic artists, translators and permaculture designers : You are welcome to get in touch if you want to join the fun by answering any issue you can help with! ... or create a new one to say hello!.

permaculture's People

Contributors

berteh avatar jwnigel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

berteh ipv777

permaculture's Issues

Evaluate data quality of various attributes

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.

support multi-language

in UI and data, and in dimensions (sizes US-EU)

EN would be reference, FR, DE and ES good candidates for translations

organise online spreadsheet with test data

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.

database/main.py error

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 ']

Create plant width estimator function

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?

scrape data from other sources

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:

Create svg images

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!

wireframe for landing page UI

what would show on first page ?

  • user name to "sign" the designs ? < multiple accounts on single device ?
  • recent designs to open ? action to start new design ?
  • 2-3 "random" plants for discovery ?
  • designs by other users?
  • technical tool infos (version, update notifications,...) ?
  • settings ?
  • help/instructions/guided tour ?
  • links to stocks/providers/other infos ?

See if mapview is worth the effort

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

  • other tiles engines might be available, eg for HD satellite view, eg test with Luxembourg opendata geographic data EU Inspire
  • ease to move other interactive widgets on top (markers?)
  • able to add grid on top (automatically or using a JSON layer?)
  • able to show level lines
  • light enough on hardware resources (important)
  • usable offline (caching...)
  • export to GIS (kml, geoshapes?)

I put it with target 1.3 for now, but if you feel it's worth looking at earlier just change the milestone :โ ^โ )

Allow for users to edit database

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 basic search functionality

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.

just thank you !

VERY useful, thanks for sharing !
I'll keep following for the next steps.

get inspiration from how others do it

my favorite (online design) tool so far is https://permapeople.org/berteh/appel-tree-pattern/

I like there :

  • easy grid-based design, makes alignment quick
  • dragn'drop move
  • full text search to find plant on any characteristic/name/language
  • remembers last added plant, so adding more of it goes quick

I don't like

  • that i don't see the space the mature plant will occupy (eg projected circle), a major design factor for me
  • lack of free move to place the plants in roundish layouts. Nature is never square.

I miss there :

  • export of the design with amounts and locations (only export so far is CSV list of latin names)

add timeline in export

add some timelines view in a design export that combines

  • all their flowering periods (directly with plants colours ?) (on their respective heights ?)
  • all harvest periods
  • recommended seeding/planting period

Add a few filters to search

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.

create python class for "design" object

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).

discuss data storage priorities

some thoughts relating to data storage

  • be able to use reference plants data (eg from scrapers you already made) loaded by the app.
  • all permadesigner to define/refine his own pet plants, local varieties or local calendars that vary a bit from the reference. They should not replace but rather 'superseed' the reference data (like an 'inheritance' mechanism). That should be usable/copyable/refinable in the app in some fast way, maybe with an ability to 'suggest for curation' to the reference dataset, either automatically (as a 'give back to community' mechanism) or manually.

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.

edit structure elements on background

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!

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!

a few static file paths make code not portable

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 

export design summary infos in table

After the initial design is done, I would love to be able to export a list/table of the selected plants with their respective:

  • amount in that particular design
  • ecological function
  • human possible uses
  • strate/layer
  • colour shade

pfaf scraper bugs

  • 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'

  • #32

artist view export

export to some

  • generated "artist-like" sketch (from a given direction) that would compose all plants with their respective heights and widths at maturity.
  • it could include the roots systems types likewise... for more educational purposes

design package to-do list

  • After dragging and dropping trees to the screen, upon resizing the window the trees move dynamically with the RelativeLayout. However, they do not move correctly with the background image! In order to keep the image proportions, padding is added to the top/bottom or sides of the image as the window is resized. I think one solution to this would be to crop the image instead of padding it.
  • When I click on the tree icon (IconButton class) it creates a DraggableImage in the MapLayout directly over the button's location. However you have to click on this again to drag it. Need to set it's default drag state to True somehow. I already tried using on_motion property.
  • Resize the tree (DraggableImage) drag size. Right now the size is set to the size of tree IconButton, which is a vertical rectangle. I had no luck with the size or texture_size so will try changing its drag_rectangle properties. Can skip this for now as I think it wont matter when the tree size is set correctly to the map size.
  • Create database (using SQLite3 for now?) and start playing with selecting a few from dropdown menus.

opensource graphic assets

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.

create wireframe for filters/search box

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.