History - Sometime in the early 1970's I was asked to participate in testing Dr. Ogdens Fern Identifier. Traditionnally biological identification is done through keys which walk you through a path where you select between two choices (yes/no, right/left etc) in other words dichotomous. Now for example lets say you want identify a mushroom and your using Orson Millers key to the basidiomycetes. The first question in the key is "Spore Color White/ not White". Simple enough Right! Well unfortunately in the field spore color is not identifiable until you do a spore print (12hrs) so the identification process stopped before you even get started. Dr Ogden with his fern identifier allowed the user to pick any particular character first keep track of the choices with a checklist and in the end compare the check list with the species list to make an identification. Dr. Ogden's son Everette was involved with computer development of that time (DOS) and realized that this was a task ideally suited to computer where all the data and list were handled by a program. He demonstrated a rudimentary identifier he wrote and that planted the seeds. I had become active with using an AMIGA as a photographic display device and was doing picture displays 7 years prior to SVGA and I started playing with various user GUI's to control graphic displays. With the help of Dr. Richard Mitchell (State Botanist 1972-) we developed some rudimentary graphics for selecting the fern characters. I got the search and sort logic pretty well written in "C" and had it working quite well when the Amiga went out of business and I was forced to go to Win. Fortunately PC's had adopted SVGA (256color 1024x768) as its new standard a big improvement from CGA.
In the beginning we used a program called VPIC as our video display device Spawning all picture displays to VPIC but I desired a way to display images directly from my "C" program. Sometime in the early 1990's I started using Steven Balkum's SVGA library. I used this as my picture display device for many years until it was rendered unusable by the development of new video boards. For about 5 years I tried to redirect my work to Linux.
2003 - NYS wants to redo the fern program in C# - at the suggestion of my son I set up a C# compiler he even wrote a simple pic display program and I was off and running. It has been 35years since the first identifier and I have revisited this code in several languages now. Most recently I have a general purpose identification program using a "Mushroom" data set in Android. I have this running on an Android Studio Samsung Emulator S21, Lenovo and Samsung tablets.
I am again revisiting Natural History Identification by computer. This time I want the program to work on telephones. Well I downloaded the emulator for the Samsung S20 and S21. I had tried these emulators before but they didn't like my AMD processor. Well I recently tried setting up my Beelink (Win10, Intel) and everything works. In fact I find I can compile the same code to most of my tablets.
As a first project I have written an identifier for the genera of gilled mushrooms. There are some 30 genera and I have a list of 50 plus character states this data is still incomplete but it does work for most common choices presently. The program data consists of two files a species list and a characters list. They are presently internal to the program but I intend to combine them into a single file external to the program and inter changeable with other data files (mushroom.dat perennials.dat autoparts.dat....etc) data lines with beginning with a # are species with a list of character states. Lines beginning with @ are user selectable character states.
# Amanita Muscaria - @AB @BF @CA @DA @EA @FB @FC @FD @JH @JI @GB @GC @HA @IA @IB");
@AB Gills NOT attached to stem"
In the end the data file for mushrooms should be about 100 lines containing all the genera and possible character choices. The file being external to the program it is easily appended and edited with an ASCII editor.
public void makeSpeciesList() {
speciesList.add("# Agaricus - @AB @BB @BC @CA @CB @DA @EB @FA @FB @FC @IA @IE @JC @JD @JE @JF @GA @GB @GD @HA @IA @IB ");
speciesList.add("# Agaricus Arvensis aka. Horse Mushroom - Bruises Yellow - @AB @BB @BC @CB @DA @EB @FA @FB @FC @FD @IA @JF @JE @GA @GB @HA @IA @JF @JE @GA @GB @KB @KC @KD @KE @KJ");
speciesList.add("# Agaricus Compestris aka:Meadow Mushroom - Bruises Pink - @AB @BB @BC @CA @CB @DA @EB @FA @FB @FC @FD @IA @JF @GA @GB @HA @IA @ID @KB @KC @KD @KE @KF @KJ");
speciesList.add("# Amanita - @AB @BF @CA @DA @EA @FA @FB @FC @FD @IA @IB @IC @IE @JA @J8 @JC @JD @JE @JF @JH @JI @GA @GB @GC @HA @*A @IB");
speciesList.add("# Amanita Muscaria - @AB @BF @CA @DA @EA @FB @FC @FD @JH @JI @GB @GC @HA @IA @IB");
speciesList.add("# Cortinarius - - @AA @BC @BD @CA @FA @IB @IF @JA @JC @JF @JG @JI @GA @GB @HA @IB ");
speciesList.add("# Cortinarius Crepidotus - ");
speciesList.add("# Cortinarius Gymnopylus - ");
speciesList.add("# Cortinarius Pholiota - ");
speciesList.add("# Coprinus - @AB @BA @CA @CA @DB @EB @FE @FD @FA @IA @IB @IE @JD @JE @JF @GA @HA @IB");
speciesList.add("# Coprinus Comatus aka:Shaggy Mane - here the data file has been expanded to include more info - @AB @BA");
speciesList.add("# Galerina - ");
speciesList.add("# Hygrophorus - @AA @AC @BF @DB @FA @FB @FC @FE @GA @GB @GE @HA @IA @IB @JA @JB @JC @JD @JE @JF @JG @JH @JI ");
speciesList.add("# Lactarius - @AA @AC @B0 @BH @BE @BF @BE @CA @CB @CC @CD @DB @EB @FA @FB @FC @IA @IB @J8 @JA @JC @JD @JE @JF @JG @JH @JI @GA @GA @GB @GD @HA @IA @IB");
speciesList.add("# Lepiota - @AB @BF @BK @CA @DA @EB @FB @GB @GE @IC @ID @IE @JA @JC @JD @JE");
speciesList.add("# Pleurotus - @AA @AC @BE @BF @CA @DB @EB @FF @IA @JC @JD @JE @JF @JH @GB @HB @IC");
speciesList.add("# Russula - @AA @AC @BF @BI @CA @CB @DB @EB @FA @FB @FC @IA @IB @JA @J8 @JC @JD @JF @JH @GA @GD @HA @IA @IB");
speciesList.add("");
}
public void makeCharList() { // These are the character traits specific to mushrooms
// This could be Parennials or Auto parts the program doesnt care what the item is
defaultList.add("< Basidiomycetes - A list of characteristics for the gilled mushrooms. To select a character long press the item.");
defaultList.add("@AA Gills attached to stem");
defaultList.add("@AB Gills NOT attached to stem");
defaultList.add("@AC Gills Extend down stem");
defaultList.add("@BA Spore Color Black");
defaultList.add("@BB Spore Color Dark Purple Brown");
defaultList.add("@BC Spore Color Brown");
defaultList.add("@BD Spore Color Tan");
defaultList.add("@BE Spore Color Cream");
defaultList.add("@BF Spore Color White");
defaultList.add("@BG Spore Color Blue");
defaultList.add("@BH Spore Color Orange");
defaultList.add("@BI Spore Color Yellow");
defaultList.add("@BJ Spore Color Grey");
defaultList.add("@BK Spore Color Green");
defaultList.add("@CA On Striking No observable change");
defaultList.add("@CB On Striking Bruised area turns color");
defaultList.add("@CC On Striking Bruised area bleeds milk");
defaultList.add("@CD On Striking Milk changes color");
defaultList.add("@DA Annulus Present");
defaultList.add("@DB Annulus NOT Present");
defaultList.add("@EA Volva Present");
defaultList.add("@EB Volva NOT Present");
defaultList.add("@FA Cap Shape Fleshy ");
defaultList.add("@FB Cap Shape Broadly Convex ");
defaultList.add("@FC Cap Shape Broadly Concave ");
defaultList.add("@FD Cap Shape Spherical ");
defaultList.add("@FE Cap Shape Conical ");
defaultList.add("@FF Cap Shape Irregular ");
defaultList.add("@IA Cap Surface Smooth ");
defaultList.add("@IB Cap Surface Vicid or Slimy ");
defaultList.add("@IC Cap Surface Warted ");
defaultList.add("@ID Cap Surface Hairy ");
defaultList.add("@IE Cap Surface Shaggy ");
defaultList.add("@IF Cap Surface Irregular ");
defaultList.add("@JA Cap Color Purple");
defaultList.add("@J8 Cap Color Dark Purple Brown");
defaultList.add("@JC Cap Color Brown");
defaultList.add("@JD Cap Color Tan");
defaultList.add("@JE Cap Color Cream");
defaultList.add("@JF Cap Color White");
defaultList.add("@JG Cap Color Blue");
defaultList.add("@JH Cap Color Orange");
defaultList.add("@JI Cap Color Yellow");
defaultList.add("@GA Stem Fleshy");
defaultList.add("@GB Stem Fiberous");
defaultList.add("@GC Stem Hollow");
defaultList.add("@GD Stem Breaks like chalk");
defaultList.add("@GE Stem Thin");
defaultList.add("@GF Stem Absent");
defaultList.add("@GG Stem Cestipose Multiple");
defaultList.add("@HA Stem Centrally Attached");
defaultList.add("@HB Stem NOT Centrally Attached");
defaultList.add("@IA Habitat Lawns grassy areas");
defaultList.add("@IB Habitat On ground mixed woodland");
defaultList.add("@IC Habitat On wood");
defaultList.add("@ID Habitat On manure");
defaultList.add("@KA Gill Color Purple");
defaultList.add("@KB Gill Color Dark Purple Brown");
defaultList.add("@KC Gill Color Brown");
defaultList.add("@KD Gill Color Tan");
defaultList.add("@KE Gill Color Cream");
defaultList.add("@KF Gill Color White");
defaultList.add("@KG Gill Color Blue");
defaultList.add("@KH Gill Color Orange");
defaultList.add("@KI Gill Color Yellow");
defaultList.add("@KJ Gill Color Pink");