All pastes #956457 Raw Edit

fenn

public text v1 · immutable
#956457 ·published 2008-03-25 09:49 UTC
rendered paste body
#this document is meant to catalog all possible entries in the autogenix 
#.agx file format, version 0.0.1  THIS WILL CHANGE
#i will turn this into an xml schema or DTD as soon as i figure out how

#apkg, the autogenix package manager, in combination with astream, keeps
#track of the user's current "installation" which is the sum of all their 
#posessions and skills. it is also used to test various 'pretend' 
#scenarios, either manually or using agimme. 
#packages and streams may not have the same names as units.

#agimme, (in analogy to apt-get) will test various trees of package
#combinations in order to try to satisfy the requested functionality 
#(quantity*efficiency*quality), while still staying within the specified 
#cost envelope (money*labor*skill*time*hazard). the user can specify a 
#vector along which to minimize costs. the concept of capital does not 
#exist in this scenario, since one can either buy or make any required 
#infrastructure as necessary.

#if the current installation has the capability to produce the desired 
#functionality or package, agimme runs the source code for each package 
#in the tree. this might send commands to a rapid prototyper, produce 
#a web page with plans for the user to follow, or simply dump cad files 
#to stdout.

#explanation of syntax:
#section: item, {item}, [[package:capability]]
#items in {} are instances of whole sections being included. this means
#anything that can be specified in the other section can be specified.
#a single item from another section can be included with {section:item},
#but this is sloppy and is discouraged.
#items in [[]]'s are capabilities of other packages being specified.
#if you specify a package/capability, the other package is required for 
#the current mode.
#for non-package (stream) requirements, the requirement is treated as a 
#unit. presumably each stream will have its own DTD/schema

#mathematical operators <,>,=,*,/,^,- can be used when there is at least 
#one number or unit. capabilities and streams count as units.
#multiple constraints are AND'ed together, unless separated by a comma or 
#logical operator
#example (an unusual shucking machine that can use multiple power sources):
# run-time: electricity 240V 3*phase >=35A*peak >5A*continuous | 
#   compressed-air "3/8-NPT-F" 90psi 5scfm, [[human:attention]] 0.2
# provides: corn 0.5kg/corn-cob # this kinda sucks
# teams-with: [[packaging]] >=5gal, conveyor123

#example (a plug-in-hybrid car - dont you love my mixed units?)
# package-name: pollywag-car
# provides: electricity 144VDC <100A NEMA-1234, electricity 12V <100A, 
#   transportation peak 90mi/h 300kg 1m*length 0.5m*radius, 
#   storage 1m*length 0.5m*radius, temp +25C | -10C, [[computer]],
#   transportation 50mile/(diesel gal) | electricity 0.1kWh/mi,
#   electricity 10kWh/charge, diesel 6gal,
# run-time: diesel | electricity 144VDC NEMA-1234 |
#   electricity 240VAC*60Hz NEMA-4567 | 
#   electricity 120VAC*60Hz IEC-632  #gets cross-referenced
#   road, human:attention 1*peak 0.3*continuous #road and human are packages
# build-time: fiberglass 4oz*20m^2, epoxy 10ksi 3gal, 
#   steel-4340:tubing 20mm*radius 3mm*thick 100ft*length, #hmm 
#   Emotor-21, dieselengine-600, computer:embedded #etc. 
# recommends: road:paved
# teams-with: solar-carport
# storage: 3m*long 2m*wide 2m*high, temp >-15C <70C, 600kg

#the idea is to specify as little as possible to enable unanticipated 
#combinations of packages and streams, but specify enough so that it's
#guaranteed to work without hackery. the user can test various scenarios 
#by using apkg's ignore and pretend tools if they are so inclined.

====metadata====
package-name: foo-bar2
version: 2.7.183
date: 03/23/08
maintainer: donald duck
email: <dduck@foobar.net>
homepage: <http://foobar.net/~dduck/foo-bar2/>, 
  <http://autogenix.org/projects/foobar/>
icon: /usr/share/icons/autogenix/foo.svgz

#things that arent really capabilites or requirements, they just "are"
===properties===
#much of this can be got from MSDS databases and autogenerated 
hazard: #will limit what type of space the package can be used in
  env-impact, cleanliness, noise, moving-parts, {power}, [[MSDS]]
cost: #normally only specified for bought'n components+materials
  purchase cost, environmental cost #TODO expand on this
materials:
  {cost}, {transportation}, {hazard}, {storage}, fatigue,
  strength, elasticity, damping, chemical/wear resistance, surface-finish
space:
  #space is a package that is really more like a stream. it must? be a package 
  #because it provides a crude nesting/collision-detection unit test
  #for determining whether the requested object will fit in the space
  long, wide, high, radius, thick, volume #for more complex spaces ??
  lighting, humidity, temperature, acceleration
#TODO how to describe if something must stay right-side up?
time:
  #much like space, but for units of time
  cycles, time-units
complexity:
  #this was supposed to gauge the amount of human effort required to 
  #inventory something, for example a cube would be less complex than a
  #tangly spider-web. i might just use [[human:attention]]/cycle in 
  #the storage section instead
  bits


#each operating mode should have its own run-time section
#typical simple packages will have one run-time, one build-time, and 
#one storage dependency
====Dependencies section====
power:
  electricity, compressed-air, hydraulics, belt-driven, 
  [[human:power]], [[animal:power]], fuel
build:
  {materials}, {assembly}, {process}
process:
  measurement-tolerance, cutting tolerance, 
  [[human:skill]]*{time}, {hazard}, {space}, {cost}
test:
  [[instruments]], {materials}, [[human:skill]], {process}
transportation:
  {storage}, permits, hold-downs, packaging
assembly:
  {space}, assembly-equipment, [[human:skill]]*{time}
disassembly:
  {assembly}
run-time:
  {materials}, {space}, {safety}, {power}, {process}, 
  [[human:attention]], [[human:skill]]
storage:  #complexity is provided by [[human]] or an automated inventory system
  {space}, [[human:attention]]/cycle, mass, security
#things that go here arent absolutely necessary but will make your life 
#much easier
==recommends==
{Dependencies}

#packages here will work synergetically with this package
teams-with:
  [[.*]], {capabilities}

#this section describes the performance and operational modes
===capabilities===
performance:
  {space}, #for storage systems such as buildings or containers
  dimensional envelope, #for machine-tools or robots i.e. a 6"x12" lathe
  {efficiency}

rating:
  nominal, peak, continuous, typical, once,
  minimum, #minimum should be used sparingly - it means the machine 
  #can't produce less than this much

mtbf: #longevity in various modes 
  {time}*{rating}

#this section is really ugly
#basically we want any combination of performance and cost
efficiency:
  {performance}*{quantity}/{time}, {quality}/{time}, 
  {quantity}/({power}*{time}) #??
  {quantity}/{quantity}, {quantity}/([[human:skill]]*{time}), 
  {quality}/([[human:skill]]*{time})

quantity: #can be just about anything - streams packages or units
  [[.*]], #units are handed off to GNU units for validation