text:
The Science of Programming/SwayPresentations/Objects/Examples3

 Examples

Being able to extend a class such that the subclass has the same name is a great way to implement aspects.

extends(stack);               //if subclass has new name extends((shadowed(:stack)));  //if subclass has same name

As an alternative, here's an instrumented stack using filters:

include("stack.s"); function emptyPopChecker($expr) {       if ($expr . context . empty?) {           throw(:stackError,"pop on empty stack"); }       force($expr); }

Then we make and instrument a particular stack:

var s = stack; s. pop. filter = emptyPopChecker;

Not quite right. Anybody?

function emptyPopChecker2($expr) {       var result = catch(force($expr)); if (type(result) == :ERROR) {           throw(:stackError,"pop on empty stack"); }       result; }

Next Previous Top


text:
Parrot Virtual Machine/PCT Classes

HLLCompiler Class
The HLLCompiler class is used to help instantiate and operate a compiler for a high-level language written for Parrot. HLLCompiler coordinates the execution of the HLL grammar, and controls the conversion of the HLL from PAST to POST, from POST to PIR, and ultimately to Parrot bytecode.

This page is going to serve as a brief reference to the HLLCompiler class, and a description of how the class is used to create a compiler for an HLL.

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

title: Parrot Virtual Machine/PCT Classes


text:
Backpack Camping and Woodland Survival/Skills/Cooking/Cast Iron

Cast iron is denser than other pan materials, making the pans unparalleled at retaining and evenly distributing heat, but also somewhat heavy. Therefore these pans are excellent for applications such as searing, or any time when a pan must stay hot even as ingredients are added.

The pan retains its heat better than most other materials. They can also be put under a very hot broiler or into a barbecue or campfire — something that would completely destroy a non-stick pan, as they are all-metal and would have to be melted to suffer damage. Contrary to popular belief, acidic foods can be cooked in cast iron, provided they are removed from the pan as soon as cooking is complete.

Cast iron pans can be used for other kinds of cooking as well, although their heaviness makes them somewhat awkward for making, say, crepes, or any other kind of cooking where the pan needs to be moved around a lot during cooking. Cast iron is also less conductive than other materials such as aluminum and copper. This results in the aforementioned excellent heat retention, but also means that cast iron cookware takes longer to heat up and cool down.

Maintenance
Cast iron needs to be seasoned to provide a more-or-less non-stick surface. This process involves heating oil so that it polymerizes and binds to the pan. This creates a non-stick surface chemically similar to a plastic coating. Some people see this need for seasoning as a drawback; however, because the seasoning can be removed (with steel wool, even!) and reapplied as needed, cast iron pans can be maintained in excellent condition far beyond the life of a typical non-stick pan.

Properly cared for, a cast iron pan can last for generations. Thus they are an excellent value: extremely durable, costing less than all but the cheapest non-stick pans, while outperforming all but the most expensive cookware. The main drawback is that they will rust if washed in a dishwasher or left soaking in water. Also, they should not be washed with harsh, lye-based soap, as this will remove the seasoning.

They can be effectively cleaned with a stiff brush, plastic wool, or by rubbing with a paper towel, vegetable oil, and any salt, used as a mild abrasive. Prior to putting them back in storage, if you heat them up, empty, for few minutes, any remaining dampness will evaporate. Generally these retail for no more than US $20.


text:
Backpack Camping and Woodland Survival/Skills/Cooking/Best Practices

It is inadvisable to go out and equip yourself with all of your essentials in one go. But they should be your priorities as and when you are able to add to your stock, and they should be distinguished from the mountain of gadgetry which clutters up the shops in the name of labour-saving: a great many of these supposedly convenient gadgets are often more expensive than the basic tool and a lot less efficient (even when they are not going wrong).

Meat
Be careful in keeping the frying-pan clean. See that it is properly tinned. When frying any sort of fish, first dry them in a cloth, and then flour them. Put into the pan plenty of dripping, or hog's lard, and let it be boiling hot before putting in the fish. Butter is not so good for the purpose, as it is apt to burn and blacken, and make them soft. When they are fried, put them in a dish or hair-sieve, to drain, before they are sent to table. Olive oil is the best article for frying, but it is very expensive, and bad oil spoils every thing that is dressed with it. Steaks and chops should be put in when the liquor is hot, and done quickly, of a light brown, and turned often. Sausages should be done gradually, which will prevent their bursting.

The first thing requisite for roasting is to have a strong, steady fire, or a clear brisk one, according to the size and weight of the joint that is put down to the spit. A cook, who does not attend to this, will prove herself totally incompetent to roast victuals properly. All roasting should be done open to the air, to ventilate the meat from its gross fumes; otherwise it becomes baked instead of roasted. The joint should be put down at such a distance from the fire as to imbibe the heat rather quickly; otherwise its plumpness and good quality will be gradually dried up, and it will shrivel, and look meagre. When the meat is first put down, it is necessary to see that it lies level in the pan, otherwise the process of cooking will be very troublesome. When it is warm, begin to baste it well, which prevents the nutritive juices escaping; and, if required, additional dripping must be used for that purpose.

As to sprinkling with salt while roasting, most able cooks dispense with it, as the penetrating particles of the salt have a tendency to draw out the animal juices. However a little salt thrown on, when first laid down, is sometimes necessary with strong meats. When the smoke draws towards the fire, and the dropping of the clear gravy begins, it is a sure sign that the joint is nearly done. Then take off the paper, baste well, arid dredge it with flour, which brings on that beautiful brownness which makes roasted meats look so inviting.

With regard to the time necessary for roasting various meats, it will vary according to the different sorts, the time it has been kept, and the temperature of the weather. In summer twenty minutes may be reckoned equal to half an hour in winter. A good screen, to keep off the chilling currents of air, is essentially useful. The old housewife's rule is to allow rather more than a quarter of an hour to each pound, and in most instances it proves practically correct.

In roasting mutton or lamb, the loin, the chine, and the saddle, must have the skin raised, and skewered on, and, when nearly done, take off this skin, and baste and flour to froth it up. Veal requires roasting brown, and, if a fillet or loin, be sure to paper the fat, that as little of it may be lost as possible. When nearly done baste it with butter and dredge with flour. Pork should be well done. When roasting a loin, cut the skin across with a sharp knife, otherwise the crackling is very awkward to manage. Stuff the knuckle part with sage and onion, and skewer it up. Put a little drawn gravy in the dish, and serve it up with apple-sauce in a tureen. A spare rib should be basted with a little butter, little dust of flour, and some sage and onions shred small. Apple-sauce is the only one which suits this dish.

Wild fowls require a clear brisk fire, and should be roasted till they are of a light brown, but not too much; yet it is a common fault to roast them till the gravy runs out, thereby losing their fine savor. Tame fowls require more roasting, as the heat is longer in penetrating. They should be often basted, in order to keep up a strong froth, and to improve their plumpness. The seasoning of the dressing or stuffing of a fowl is important to its flavor. The dressing should consist of bread crumbs, seasoned with black pepper, salt, and no herb but thyme. Pigs and geese should be thoroughly roasted before a good fire, and turned quickly. Hares and rabbits require time and care, especially to have the ends sufficiently done, and to remedy that raw discoloring at the neck, etc., which proves often so objectionable at table.

Fish
Gentgeen's Campfire Trout is the recipe uses to cook trout caught while camping. This method can be used at home with trout purchased at the fish market, but somehow never tastes quite as good.

 * 2 whole cleaned trout, between 10 and 14 inches
 * 4 strips bacon
 * 2 tablespoons butter
 * lemon, salt, and pepper, to taste

Serves 4, or 2 hungry fishermen.
 * 1) Make a pan out of aluminium foil slightly larger than your two fish.  The pan should have a double layer of foil on the bottom and a lip around the edge of about 3/4 - 1 inch height.
 * 2) Place the pan on a grill over the camp fire.  Put the butter into the pan and allow to begin melting.  Wrap each trout with 2 strips of bacon. Add the trout to the pan. Season to taste.
 * 3) After the trout has cooked for a few minutes (5-7 depending on the size of the fish), check the inside.  If the side close to the fire is white and flakes easily, the fish is ready to turn.  Flip the fish, and continue cooking the other side for 3-4 minutes until done. Serve with lemon over a bed of white rice.


text:
Backpack Camping and Woodland Survival/Skills/Fire/Safety

All fire authorities have a fire safety education program in how to prevent fires and the actions they should take in the event of a fire occurring.

All programs tend to mix messages of general injury prevention, safety, fire prevention and escape in case of fire. In most cases the fire department representative is regarded as the expert and is expected to present information in a manner that is appropriate for each age group.


text:
Backpack Camping and Woodland Survival/Skills/Fire

Navigation A campfire is a fire lit at a campsite, usually in a fire ring. Campfires are a popular feature of camping, particularly among organized campers such as Scouts or Guides. Without proper precautions they are also potentially dangerous. A certain degree of skill is needed to properly build a campfire, to keep it going, and to see that it is properly extinguished. In some regions it is called a bonfire.
 * /Safety/
 * /Prevention/
 * /Fire Starting/
 * Bow drill
 * Hand drill
 * Pump drill
 * Bamboo saw
 * Flint and steel
 * Other methods

Having found a suitable site and gathered materials, the fire-builder has a variety of designs to choose from. A good design is very important in the early stages of a fire. Most of them make no mention of fuelwood - in most designs, fuelwood is never placed on a fire until the kindling is burning strongly.

The tipi fire-build is perhaps the best, but it is takes some patience to construct. First, the tinder is piled up in a compact heap. The smaller kindling is arranged around it, like the poles of a tipi. For added strength, it may be possible to lash some of the sticks together. A tripod lashing is quite difficult to execute with small sticks, so a clove hitch should suffice. (Synthetic rope should be avoided, since it produces pollutants when it burns.) Then the larger kindling is arranged above the smaller kindling, taking care not to collapse the tipi. A separate tipi as a shell around the first one may work better. Tipi fires are excellent for producing heat to keep you warm. A campfire with colored flames, made by burning a garden hose in a copper pipe.A lean-to fire-build starts with the same pile of tinder as the tipi fire-build. Then, a long, thick piece of kindling is driven into the ground at an angle, so that it overhangs the tinder pile. The smaller pieces of kindling are leaned against the big stick so that the tinder is enclosed between them.

A log cabin fire-build likewise begins with a tinder pile. The kindling is then stacked around it, as in the construction of a log cabin. The first two kindling sticks are laid parallel to each other, on opposite sides of the tinder pile. The second pair is laid on top of the first, at right angles to it, and also on opposite sides of the tinder. More kindling is added in the same manner. The smallest kindling is placed over the top of the assembly. Of all the fire-builds, the log cabin is the least vulnerable to premature collapse, but it is also inefficient, because it makes the worst use of convection to ignite progressively larger pieces of fuel.

A variation on the log cabin starts with two pieces of fuelwood with a pile of tinder between them, and small kindling laid over the tops of the logs, above the tinder. The tinder is lit, and the kindling is allowed to catch fire. When it is burning briskly, it is broken and pushed down into the consumed tinder, and the larger kindling is placed over the top of the logs. When that is burning well, it is also pushed down. Eventually, a pile of kindling should be burning between two pieces of fuelwood. The logs will eventually catch fire from it.

Another variation is called the funeral pyre method because it is used for building funeral pyres. Its main difference from the standard log cabin is that it starts with thin pieces and moves up to thick pieces. If built on a large scale, this type of fire-build collapses in a controlled manner without restricting the air flow. A cross-fire is another variation in which two pieces of fuel wood are placed parallel on the ground with tinder between them. Once the kindling is going strong, alternating perpendicular layers of fuelwood are placed across the two base pieces. This type of fire is excellent for producing coals for cooking.

The traditional Finnish rakovalkea (literally "slit bonfire") is constructed by placing one long piece of fuelwood atop another, parallel and bolstering them in place with four sturdy posts driven into the ground. (Traditionally, whole unsplit tree trunks are used for the fuelwood.) Kindling and tinder are placed between the logs in sufficient quantity (while avoiding the very ends) to raise the upper log and allow ventilation. The tinder is always lit at the center so the bolstering posts don't burn prematurely. The rakovalkea has two excellent features. First, it burns slowly but steadily when lit; it doesn't require arduous maintenance, but burns for a very long time. A well constructed rakovalkea of two thick logs of two meters in length can warm two lean-to shelters for a whole sleeping shift. The construction causes the logs themselves to protect the fire from the wind. Thus, exposure to smoke is unlikely for the sleepers; nevertheless someone should always watch in case of an emergency. Second, it can be easily scaled to larger sizes (for a feast) limited only by the length of available tree trunks.

A keyhole fire is made in a keyhole-shaped fire ring, and is used in cooking. The large round area is used to build a fire in order to create coals. As coals develop, they are scraped into the rectangular area used for cooking.

A "top lighter" fire is built similar to a log cabin or pyre, but instead of the tinder and kindling being placed inside the cabin, it is placed in a tipi on top. The small tipi is lighted on top, and the coals eventually fall down into the log cabin. These fires are often built by youth outdoor movements for "council fires" or ceremonial fires. They burn very predictably, and with some practice a builder can estimate how long they will last. They also don't throw off a lot of heat, which isn't needed for a ceremonial fire. The fire burns from the top down, with the layer of hot coals and burning stubs igniting the next layer down.


text:
The Science of Programming/SwayPresentations/Objects/Examples4

 Examples

How about try blocks? Using the Sway proximal block style:

var error; try (error) {       a / b;        } else if (error . type == :undefinedVariable) {       println("try block has an undefined variable"); }   else {       println("try block has a divide error"); }

Here's the implementation:

function try($store,$code,$) {       var result = catch(force($code)); if (error?(result)) {           $store = result; if ($ != :null,force(car($))); }       else {           result; }       }

Next Previous Top


text:
Talk:Muggles' Guide to Harry Potter/Contents

Show/hide links
Could we possible use show/hide links on this page where needed? The page seems pretty long. --Cysiro ( page ) ( talk ) 17:25, 9 April 2008 (UTC)

 * Unfortunately, I don't think so... as this is the skeleton which is used to create the print and PDF versions of the book. Huge and ugly as it is, I think we kind of have to leave it as is so the PDF translator, which is a rather fragile bit of gear, doesn't choke. Chazz (talk) 22:11, 11 April 2008 (UTC)

 * How about a mechanism similar to state = autocollapse, uncollapsed, collapsed? I don't think any tool looking at the page could have any business minding the CSS style of the elements in the page... -- Jokes Free4Me (talk) 09:02, 10 August 2009 (UTC)

"Characters" order
They are now in alphabetical order of the page "address", not of the last name as they kind-of ought-to. Should this be fixed? -- Jokes Free4Me (talk) 09:02, 10 August 2009 (UTC)


text:
User:Holly Cheng

I am an administrator at the English Wikipedia and at Commons. If you need to get in touch with me, please contact me at either of those locations.

title: User:Holly Cheng


text: User talk:70.251.179.71

title: User talk:70.251.179.71


text: User:Konstabel

title: User:Konstabel


text:
Talk:Bicycles/What style

"The ones with big shocks are cross-country mountain bikes." I don't understand what this is comparing XC bikes with. If "The ones with big shocks are cross-country mountain bikes." Then the other mnt bikes are the ones with really big shocks and the ones with really really big shocks. Maybe I'm not being as clear as I could. In my understanding, XC mnt bikes are the lightest weight modern mnt bikes, with the intended use being riding long distances over medium terrain, as opposed to all mountain, or down hill mountain bikes that are designed to go over rougher terrain, take bigger drops, (so have bigger travel shocks, more robust tubing, lower gear ratios, and are necessarily heavier) and are difficult to actually pedal places. --Keithonearth (talk) 19:31, 9 April 2008 (UTC)

This is a nice introduction and summary; however I think it overstates the case for recumbents and completely neglects the increasing interest and production of mixed use bikes, formerly called hybrids but increasingly referred to by names such as "urban", "city", or "street." Every major manufacturer, eg. Specialized, Trek, Giant, etc. has increasingly developed models in this category. None of these manufacturers make a recumbent.

Other types that deserve discussion utility/transport biking, and touring, just to pull a couple off the top of my head. Utility and transport in particular, rather than just the sporting and toy uses of bikes.

title: Talk:Bicycles/What style


text: User talk:86.45.71.149

title: User talk:86.45.71.149


text: User talk:66.203.17.42

title: User talk:66.203.17.42


text: User talk:206.132.133.1

title: User talk:206.132.133.1


text: User talk:144.162.98.127

title: User talk:144.162.98.127


text:
User:Keithonearth

I'm interested on the bicycle related books here on wikibooks.

I am a Canadian avid transportation cyclist, always on a mission to learn more about bikes. I use bikes for my daily transportation, and tour on them.

I am more active on wikipedia where I also go by keithonearth.

I have contributed a number of images to wikipedia, many of which could be a help to the wikibook on bicycles.

Full list here.

title: User:Keithonearth


text: User talk:76.98.153.143

title: User talk:76.98.153.143


text: User talk:86.140.99.205

title: User talk:86.140.99.205


text:
Geometry/Neutral Geometry

Topics

 * /Euclid's First Four Postulates/
 * /Euclid's Fifth Postulate/
 * /Incidence Geometry/
 * /Projective and Affine Planes/ (necessary?)
 * /Axioms of Betweenness/
 * /Pasch and Crossbar/
 * /Axioms of Congruence/
 * /Continuity/ (necessary?)
 * /Hilbert Planes/
 * /Neutral Geometry/

Requests
If you would like to request anything in this topic please post it below.

title: Geometry/Neutral Geometry


text:
Geometry/Neutral Geometry/Euclid's First Four Postulates

Euclid's Postulate I
For every point P and for every point Q not equal to P there exists a unique line that passes through P and Q

Explanation
Informally, this postulate says that two points determine a unique line.

Euclid's Postulate II
For every segment AB and for every segment CD there exists a unique point E on line AB (needs LaTex formatting) such that B is between A and E and segment CD is congruent to segment BE

Explanation
[To Come]

Euclid's Postulate III
For every point O and every point A not equal to O, there exists a circle with center O and radius OA

Explanation
[To Come]

Euclid's Postulate IV
All right angles are congruent to one another

Explanation
[To Come]


text:
Geometry/Neutral Geometry/Euclid's Fifth Postulate

Euclidean Parallel Postulate
For every line l and P such that P does not lie on l, there exists a unique line m through P that is parallel to l

Explanation
[To Come]

Attempted Proofs
The Euclidean Parallel Postulate can not be proven without taking it as an axiom, which is not done in neutral geometry since it holds in Euclidean but not hyperbolic. Therefore, this is neither true nor false.

 * LeGendre Proof to come.


text:
Geometry/Neutral Geometry/Incidence Geometry

Incidence Axiom 1
For every point P and for every point Q not equal to P, there exists a unique line l incident with P and Q.

Incidence Axiom 2
For every line l, there exists at least two distinct points incident with l

Incidence Axiom 3
There exists three distinct points with the property that no line is incident with all three of them


text:
Geometry/Neutral Geometry/Axioms of Betweenness

= Axioms of Betweenness =

Betweenness Axiom 1
If A*B*C, then A,B, and C are three distinct points all lying on the same line, and C*B*A.

Betweenness Axiom 2
Given any two distinct points B and D, there exist points A,C, and E lying on line BD (needs format with LaTex) such that A*B*D, B*C*D, and B*D*E.

Explanation
suppose that in a certain metric geometry the following distance relationship hold: AB= 2 AD=BD=CD=3 BC=4 AC=6

Betweenness Axiom 3
If A, B, and C are three distinct points lying on the same line, then one and only one of the points is between the other two.

Betweenness Axiom 4
For every line l and for any three points A, B, and C not lying on l:
 * (i) If A and B are on the same side of l and if B and C are on the same side of l, then A and C are on the same side of l.
 * (ii) If A and B are on opposite sides of l and if B and C are on opposite sides of l, then A and C are on the same side of l.

Corollary

 * (iii) If A and B are on opposite sides of l and if B and C are on the same side of l, then A and C are on opposite sides of l.


text:
Geometry/Neutral Geometry/Pasch and Crossbar

Pasch's Theorem
If A, B, C are distinct noncollinear points and l is any line intersecting AB in a point between A and B, then l also intersectseither AC or BC. If C does not lie on l, then l does not intersect both AC and BC

Crossbar Theorem
If ray AD (need LaTex formatting) is between ray AC(need LaTex formatting) and ray AB(need LaTex formatting), then ray AD(need LaTex formatting) intersects segment BC


text:
User talk:Akhram

Welcome to Wikibooks, Akhram!

Spanish/Answers/¿Cuándo es tu cumpleaños?
You nominated this for deletion (I changed it to a speedy deletion for you; see the deletion policy), but I don't know where you moved the content to. I need to know before I can delete the page. – Mike.lifeguard  | talk 01:33, 10 April 2008 (UTC)
 * Answers.

Spanish
Hello. Thanks for your switch from the old system to the fancy templates. It's really useful :). Regards, —Cel es tianpower háblame 23:25, 11 April 2008 (UTC)

title: User talk:Akhram


text:
User talk:Magilla666

Welcome message
Welcome, Magilla666!

Come introduce yourself at the new users page. If you have any questions, you can ask there or contact me personally. Webaware talk 23:19, 9 April 2008 (UTC)

title: User talk:Magilla666


text: User talk:66.31.54.78

title: User talk:66.31.54.78


text:
Lojban/cmene

Cmene are Lojbanized names. Cmene must be spelled phonetically according to the Lojban style (it is important to remember: W --> U, Y --> I, Sh --> C, Ch --> Tc, J (English) --> Dj, J (French) --> J, etc. if using the latmo lerselcmi (Latin alphabet)). All cmene must terminate with a glottal stop [.], and must additionally have a consonant immediately precede the glottal stop. If the name begins with a vowel (which includes "Y"), then it must also be immediately preceded by a glottal stop. If the cmene does not terminate with a consonant (excluding the glottal stop), then one must be inserted. The common convention is to insert an "S" at the end. However, any consonant will work.

Tom           la (.)tom. / la (.)tam. Shirley       la (.)c(e)rl. / la (.)c(e)rlis Washington    la .uacin(g)tyn. Harold        la (.)xeirold. Abraham       la .eibry'am. / la .eibryxam.

title: Lojban/cmene


text:
Talk:Spanish/Exercises/¿Cuándo es tu cumpleaños?

Untitled
Sorry, I wrote all the answers like in lesson 1 on the exercises page. So, this page is useless now. Akhram (talk) 23:59, 9 April 2008 (UTC).

"dieciseis"
Spanish/Exercises/¿Cuándo_es_tu_cumpleaños%3F has "dieciseis" in an answer. Should it be "dieciséis"? --AVRS (talk) 14:15, 22 September 2009 (UTC)


text:
Video Game Design/Conventions

Adopted Rules
If not stated otherwise here as a general rule, all guidelines from Manual_of_Style are in effect.

Page naming and structure [[Image:yes check.svg|20px]]
We are using the slash convention with a flat page structure as described in Naming_policy

One book with many faces [[Image:yes check.svg|20px]]
There are two indexed: A chapter-by-chapter version and a all-in-one page version (via transclusion). New pages should be added to both.

Size of pages [[Image:yes check.svg|20px]]
A chapter indexed from the main page should be on one Page. However, no single page should be larger than about 30k. Larger pages should be split up.

Use specialized topics [[Image:yes check.svg|20px]]
By adding contributions, try to help us give some structure to the book, do so by creating as much different and separate chapters/sections and sub-sections possible using unique (if doable) specialized topics so to give the reader the most complete and logic understanding of the language, your are also encouraged to add empty ones, so future contributors my add to them.

Authors section [[Image:yes check.svg|20px]]
Every person making non-trivial changes to this book may add themselves to the Authors section. This can be done by adding your name/alias and including a link to one of your wikimedia page, web-page or an active email address where you can be reached.

Proposed: 19 Sept 2005 Voted: 21 September 2005 Moved to adopted by: --Panic 04:24, 17 January 2006 (UTC)

Level 1 Heading Nummeration [[Image:yes check.svg|20px]]
We are using level 1 headers ( =header= ) for the parts. To allow transclusion, main submodules should always start with and have at most 1 level 2 header ( ==header== ).

Proposed: 20 Sept 2005 Not Contested, Moved to adopted by: --Panic 04:24, 17 January 2006 (UTC)

Source code style [[Image:yes check.svg|20px]]
To allow adoption from other sources, there is no mandatory brace / indentation style throughout the book for code examples. However, please be consistent within one example.

There is a non adoption of a single standard on styles (ie: brace style) so to make the work of importing any other snips of code easier, it also shows readers all the options they can make, so you can use the style you prefer and modify any existing code on the book, but authors are not expected to follow a particular style.

Common Programming Errors [[Image:yes check.svg|20px]]
Common programming errors should pointed out throughout the book.

Proposed: 18 Sept 2005 Not Contested, Moved to adopted by: --Panic 04:24, 17 January 2006 (UTC)

NOTE Boxes [[Image:yes check.svg|20px]]
Proposed: 27 Nov 2004 Not Contested, Moved to adopted by: --Panic 04:24, 17 January 2006 (UTC)

TODO Boxes [[Image:yes check.svg|20px]]
Proposed: 18 Sept 2005 Not Contested, Moved to adopted by: --Panic 04:24, 17 January 2006 (UTC)

Proposed Issues have a lifetime of 7 days [[Image:yes check.svg|20px]]
If a proposed issue is not contested, debated or altered in 7 days it should be moved out of the Proposed section as adopted.

Proposed: --Panic 05:02, 17 January 2006 (UTC) Not Contested, Moved to adopted by: --Panic 03:48, 4 March 2006 (UTC)

title: Video Game Design/Conventions


text:
Talk:Video Game Design/Conventions

 * See also: Talk:Video Game Design/Content

Conventions
I put forward a proposal to share and include the exiting convention from C++ Programming and The World of Peer-to-Peer (P2P) on this work. Please comment or object to this proposal here, in 10 days if not opposed I'll make the necessary changes. --Panic (talk) 03:03, 8 March 2008 (UTC)

 * Adopted and closed. --Panic (talk) 00:37, 10 April 2008 (UTC)

Proposals (centered on the C++ Programming Book discussion page since argumentations will be valid across books)

 * 1) -
 * 2) -51%) to the cover page will be have to be the object of previous discussion resulting in acceptance without objections>

 * (discussion running HERE (I will mirror the comments if any when it's finished)
 * Both Proposed: --Panic (talk) 00:27, 10 April 2008 (UTC)

title: Talk:Video Game Design/Conventions


text: Category:Book:Nordic History

title: Category:Book:Nordic History


text: User talk:24.115.96.158

title: User talk:24.115.96.158


text:
The Science of Programming/SwayPresentations/Objects/right

function right(items) {       var slots = items. constructor. parameters; var lhs = slots[0]; var rhs = slots[1];

if (type(items. (lhs)) == :OBJECT       && items . constructor == items . (lhs) . constructor) {           var x = items. (lhs); items. (lhs) = x. (rhs); x. (rhs) = items; right(x); }       else {           items; }       }


text:
User talk:Mike.lifeguard/Archive 16

Question
Hello. Can I upload Fair Use images on English Wikibooks e.g Windows screens? I asking, because I haven't a big knowlege about EN Wikibooks. But I know that on Polish Wikibooks I don't upload screens on FU licension (Polish right). And my very very late: Happy Easter:) I'm sorry that later, but in real life I've had a lot of work. But probably I'm going to more activity on EN Wikibooks in future:) Prasuk   Dyskusja  08:58, 30 March 2008 (UTC)
 * Yes, we allow fair use on the English edition. The relevant policy is WB:MEDIA. Basically, use fair use only when needed (screenshots of proprietary software when discussing that software would be one example) and provide a . If you need help with anything, come on back. – Mike.lifeguard  | talk 13:46, 30 March 2008 (UTC)
 * Thanks, very thanks:] And thank you again, because you added precious attention to my talk-page. So Can I upload screens from my Windows XP Pro, because from Microsoft operating systems do not upload screens on CC,PD etc licensions. And..have you gadu-gadu/e-mail? If you don't know what is this GG, you write Gadu-Gadu. Prasuk   talk to me  16:05, 30 March 2008 (UTC)
 * Yes, you can come to #wikibooks, our IRC channel if you like.
 * You may upload any fair use images you want as long as they're allowed in the policy. You'll want to use and then fill out a  for such images.  – Mike.lifeguard  | talk 16:12, 30 March 2008 (UTC)

Thanks!
Thanks for pointing me in the right direction with moving articles across wikis and doing it for me! Ross Uber -  Talk  -  Contributions  - 22:45, 30 March 2008 (UTC)
 * No problem. Only admins can import, so it's important that we let users know it can be done - lots don't know. – Mike.lifeguard  | talk 23:00, 30 March 2008 (UTC)

license tags on wikiversity
hi, I created a page at wv to start a discussion on v:Wikiversity talk:Licensing policy. I've been trying to delete copyvio and fix incorrect license info on images by hand. I'd like to ask you some questions on the bot you were running and see where to go next. BTW, do you know how I can get Editor and Reviewer on test.wikipedia.org to try out flagged revisions? --mikeu (talk) 01:36, 1 April 2008 (UTC)

Category:Naming convention change
Is emtpy! However ran into a slight problem on the last one. Needed to delete a page as there was a book with a duplicate name and thought I could get round it by moving the page. Forgot about the redirect! As a result could you delete J2ME Programming delete and J2ME Programming. Then Programming:J2ME can be moved to J2ME Programming. Thanks --AdRiley (talk) 06:23, 1 April 2008 (UTC)
 * [[Image:Yes_check.svg|15px| ]] Done and thanks for your work on this. There are still untagged ones to work on (look at Special:PrefixIndex/Programming:) but this is a huge help - Thanks!!  :) – Mike.lifeguard  | talk 16:11, 1 April 2008 (UTC)

wikipedia transwiki
Mike,

I don't quite understand the transwiki. Is the whole wikipedia entry or page brought over, or is just part of it. Is the text of the Wikipedia entry brought over to the wikibook, or is it linked? --Jsigler (talk) 17:39, 2 April 2008 (UTC)
 * It will be a copy of the entire article with (usually) all the old revisions too (ie the whole edit history). You can then pare down to only the stuff you want. So if you get me to bring over Albert Einstein, then you can probably remove 80-90% of the content, then refactor it to fit into your book (ie split into sections appropriate for a Wikijunior book) and then move it into the book. I don't know how useful that would be for a class of young kids, but it might make things easier than trying to find freely-licensed content on the internet, and using that. Alternatively, if you only want to use small parts of Wikipedia articles, you can just put "from Article name at Wikipedia " in the edit summary, and that would be fine in terms of attribution. Feel free to email me if you like. I hope that helps. – Mike.lifeguard  | talk 18:21, 2 April 2008 (UTC)

subst'ed
Thank you, such things still remain a mystery to me. ChessCreator (talk) 21:46, 2 April 2008 (UTC)
 * No problem, it was only a handful. – Mike.lifeguard  | talk 21:56, 2 April 2008 (UTC)

Redirect
Sorry for that mistake. English Defence is now ✅
 * There is a list of redirects and planned redirects(red links) on the talk page here, hopefully over time they will all be blue. ChessCreator (talk) 13:52, 3 April 2008 (UTC)

limit on # of accounts created
I had my students start creating their wikibook acounts, but ran into a roadblock. 6 of my students were able to create accounts in the computer lab and the rest got "6 accounts have already been created from this address." I suspect the wiki reads our school firewall/proxy as one address and cut us off at six, even though they were on separate computers. I would really like each student to have their own log-in, by we may have to come up with another solution. Any ideas?--Jsigler (talk) 15:41, 3 April 2008 (UTC)
 * Yes, the software will cut you off at six per minute. You should be able to continue creating accounts after the minute is up. If not, an admin (like me) can create accounts for you and email you the information. (We can create accounts at an unlimited rate). Let me know if you need to do so. – Mike.lifeguard  | talk 16:56, 3 April 2008 (UTC)

Eiffel Programming
Hello Mike. You have retagged this one saying I have missed some of the subpages. I think I have done the ones that link from the front page. How do I find any others? Thanks --AdRiley (talk) 12:53, 8 April 2008 (UTC)
 * Ahh. AdRiley, say hello to you new best friend, Special:PrefixIndex :D Search for PageName or PageName/ to find the ones I'm talking about. Redirects appear in italics (can be customized with css), so those have already been moved. – Mike.lifeguard  | talk 12:56, 8 April 2008 (UTC)
 * Thanks. Very useful! --AdRiley (talk) 06:48, 9 April 2008 (UTC)

Cookbook - Livre de cuisine
Hello, ty for your message, excuse my english

Pythie 81.242.245.51 (talk) 00:06, 9 April 2008 (UTC)

Why did you delete the image for my book Image:Teardrop hatchrib section.jpg
This is an image I created myself. Why did you delete it? It is used for http://en.wikibooks.org/wiki/How_To_Build_A_Teardrop_Trailer/The_Hatch Wikiwerks (talk) 03:16, 9 April 2008 (UTC)
 * It says in the deletion log that it was speedily deleted because it was tagged with for more than 7 days. As you've now provided appropriate source & license information and re-uploaded it, that's fine.  – Mike.lifeguard  | talk 03:29, 9 April 2008 (UTC)

WikiProject name
Hi Mike, I'm sure your move of the Chess page was done in good faith, but as it happens it was not appropriate at this time. I made some remarks to try and explain myself here. I'm also not concerned about the history at this stage as the history is basically me attempting to make it look sensible for other and so far it's not a tool of conversation or current to do list, when it is then the history becomes important. If you have any questions or want it explained more, please don't hesitate to ask. ChessCreator (talk) 00:37, 10 April 2008 (UTC)

Thanks for the welcome
Hi Mike, just saw your welcome note; thanks. I'm slowly starting to configure the various account I've staked-out; see m:User:Jack Merridew/Matrix. I've begun just setting a few preferences and such, and will stub-out a user page when I have time. Wikibooks is probably one I'll focus one more as, well, I read a lot of books. Cheers, User:Jack Merridew a.k.a. David 09:26, 10 April 2008 (UTC)

External bleeding protocol
As an EMT (in the United states), the protocol for external bleeding is: Also, do you think it's worth mentioning that a tourniquet is a last resort and, in most cases, should never be applied? -- Macaddct1984 (talk) 15:29, 10 April 2008 (UTC)
 * 1) Direct pressure with a dressing
 * 2) Elevate
 * 3) Apply an additional dressing
 * 4) Arterial pressure point
 * That's not quite right for lay rescuers. RED is the basics (and technically all that's required). Pressure points/tourniquets are considered a more advanced skill and wouldn't be tested. My experience, however, is that I'll get questions about tourniquets, so I try to preempt them by including it up-front. I think that what's there should be fine, but I'll double-check it. It should be RED with tourniquets/pressure points as an extra in a sidebar. Good to see someone else putting some work into the book! – Mike.lifeguard  | talk 17:53, 10 April 2008 (UTC)
 * Ahh, tourniquets and pressure points are mentioned in First Aid/D for Deadly Bleeding instead. That's fine I think, but if you'd like to mention them in a box to the side at First Aid/External Bleeding, go for it. I'm happy with where things are located. – Mike.lifeguard  | talk 17:55, 10 April 2008 (UTC)

Spanish/Answers/¿Cuándo es tu cumpleaños?
You added this for speedy deletion. I am clearing out the speedy deletes but I'm not sure why this book should be deleted. It seems OK to me? Did the author request its deletion?

--ЗAНИA talk 21:03, 10 April 2008 (UTC)
 * Yes, it is a dupe; see the next section. – Mike.lifeguard  | talk 23:25, 10 April 2008 (UTC)

Hi, Mike. Before I edited the wikibook, questions and answers were in different pages. I followed the style chosen for the first lesson and I used the template question-answer for introducing the answers in the same page as the exercises. Akhram (talk) 22:09, 10 April 2008 (UTC).
 * Yes, but I need to know where the content is duplicated. It is on the page linked above, and also some other page - where is that one? – Mike.lifeguard  | talk 23:27, 10 April 2008 (UTC)
 * Sorry, the information is here Akhram (talk) 07:24, 11 April 2008 (UTC).
 * [[Image:Yes check.svg|15px]] Done – Mike.lifeguard  | talk 14:46, 11 April 2008 (UTC)

Hi again, Mike. I did the same with the next lesson of the wikibook: Spanish/Exercises/Introducción a la gramática. Thanks, Akhram (talk) 15:16, 13 April 2008 (UTC).

strange
I edited Template:. For some reason my edit hasn't appeared on the recent changes list... --ЗAНИA talk 18:58, 12 April 2008 (UTC)
 * Think I forgot to save my changes --ЗAНИA [[Image:Flag_of_Italy.svg|15px]]talk 18:59, 12 April 2008 (UTC)
 * Heh, that is helpful to do :P Looks good to me. – Mike.lifeguard  | talk 19:36, 12 April 2008 (UTC)

Now...
To me this is effectively spam but me & en wb do not always see eye to eye on that subject :) Cheers -- Herby  talk thyme 16:26, 13 April 2008 (UTC)
 * I just saw that too, and I considered deleting it as spam but decided not to mark it patrolled and let a more-seasoned admin take a look at it. Νεοπτόλεμος ( talk | email | contribs ) 16:29, 13 April 2008 (UTC)
 * I agree with both of you, so... [[Image:Symbol delete vote.svg|15px]] deleted. – Mike.lifeguard  | talk 16:39, 13 April 2008 (UTC)
 * Difficult in a way as it could be valid but the links & opening para (something about "how much might it cost") were a bit of a giveaway to me. And as we all agreed....:)  Been pruning links on en wp for a while today - open proxy "copy edits" and just happens to place a link while there - ho hum.  Thanks both - cheers -- Herby  talk thyme 17:21, 13 April 2008 (UTC)
 * Well, no. It's really not even about translation - it was about how to use that service. I suggested that they try writing a real book on translation :) – Mike.lifeguard  | talk 17:22, 13 April 2008 (UTC)
 * OK, per this I've undeleted & I'll keep a watchful eye. – Mike.lifeguard  | talk 12:36, 17 April 2008 (UTC)

title: User talk:Mike.lifeguard/Archive 16


text:
MINC/SoftwareDevelopment/Reference

MINC2 Documentation
/MINC2.0 Users Guide/

/MINC2.0 Application Programmers Interface/ (API)

/MINC2.0 File Format Reference/

MINC1 Documentation
(older) MINC 1.X documentation for the MINC libraries and the volume_io utility library

/MINC1-programmers-guide/

/MINC1-programmers-reference/

/MINC1 File Format Reference/

/MINC1-volumeio-programmers-reference/

/MINC1-voxel-loop-example/

/Tag file format reference/

title: MINC/SoftwareDevelopment/Reference


text:
MINC/SoftwareDevelopment/MINC1-programmers-guide

=Introduction= The MINC file format (Medical Image NetCDF) is based on the NetCDF file format (Network Common Data Form) distributed by the Unidata Program Center. NetCDF provides a software interface for storing named, multi-dimensional variables in files in a machine-independent way. This interface removes applications from the concerns of portability and file structure and encourages a self-describing form of data.

Each NetCDF multi-dimensional variable in a file is described by a name, by its dimensions and by attributes. For example, an image stored in a file might be stored as byte data in a variable called "image", with dimensions "x" and "y" (each of length 256) and with an attribute called "long_name" which is a string describing the content of the image. Many variables can be stored in one file and each variable can have many attributes. Dimensions exist independently of variables and can subscript more than one variable.

MINC provides three things on top of the NetCDF interface. It provides a standard for dimension, variable and attribute names suitable for medical imaging, it provides some convenience functions to complement the NetCDF interface (not specific to the MINC conventions) and it provides convenience functions for using MINC files.

=An Introduction to NetCDF= (For a complete description, see the NetCDF User's Guide).

The NetCDF file
It is useful to look at an example file while considering the NetCDF interface. Fortunately, the NetCDF package provides utilities (ncdump and ncgen) for converting the binary NetCDF files to an ascii format call CDL. A simple NetCDF file, converted to CDL notation by ncdump, is given below:

The sample file stores a 3 by 4 image of double precision values. The first thing defined are the dimensions : xcoord and ycoord. Dimensions can represent physical dimensions like x coordinate, y coordinate etc., or they can represent abstract things like lookup-table index. Each dimension has a name and a length and when joined with other dimensions defines the shape of a variable --- the variable image is subscripted by ycoord and xcoord.

Dimensions can also be used across variables, relating them to each other. For example, if the file contained another image also subscripted by ycoord and xcoord, we would have the important information that the two variables were sampled on the same grid. Also, coordinate systems can be defined by creating variables by the same name as the dimension, like xcoord in the example above, giving the x coordinate of each point in the image.

Variables are the next thing defined in the cdl file. Each variable has a name, data type and a shape specified by a list of dimensions (up to a maximum of MAX_VAR_DIMS = 32 dimensions per variable). The data types are ''NC_CHAR, NC_BYTE, NC_SHORT, NC_INT, NC_FLOAT and NC_DOUBLE''. Information about each variable is stored in attributes. The attribute "long_name" gives a character string describing the variable "image". Attributes are either scalars or vectors of one of the six types listed above (a character string is a vector of type NC_CHAR).

Programming with NetCDF
Programming with NetCDF can be quite simple. The file listed above was produced by the following program:

The first executable line of the program creates a new NetCDF file. An open file is either in ``define mode or in ``data mode. In define mode, dimensions, variables and attributes can be defined, but data cannot be written to or read from variables. In data mode, variable values can be written or read, but no changes to dimensions or variables can be made and attributes can only be written if they exist already and will not get larger with the write. Newly created files are automatically in define mode.

The lines following the call to nccreate define the dimensions and variables in the file. Notice that the NetCDF file, dimensions and variables are all identified by an integer returned when they are created. These id's are subsequently used to refer to each object. The attribute "long_name" for the image variable is identified only by its name.

Once everything is defined, ncendef puts the file into data mode and values are written. The values to write are defined by a vector of starting indices and a vector of the number of values to write in each dimension. This defines a multi-dimensional rectangle within the variable called a hyperslab. In the C interface, the first element of the vector refers to the slowest varying index of the variable, so in this example, the array vals has the xcoord varying fastest. In the FORTRAN interface, the convention has the first subscript varying fastest. These conventions follow the language conventions for multi-dimensional arrays.

=The MINC format= It is possible to build MINC format files using only NetCDF function calls, however a C include file is provided to facilitate (and help ensure) adherence to the standard. This file defines useful constants, standard dimension, variable and attribute names and some attribute values. It also declares the functions defined in a library of minc convenience functions, designed to make an application programmer's life easier.

The MINC standard
Various requirements for file formats have been put forward. One such list is as follows: A protocol should be: 1) simple, 2) self describing, 3) maintainable, 4) extensible, 5) N dimensional, and 6) have a universal data structure. The NetCDF format meets all of these requirements, suggesting that it is a good place to start. I would, however, add some more requirements to the list. Implied in the above list is the requirement that there be a standard for accessing data (how do I get the patient name) --- this is not provided by NetCDF. Furthermore, a useful format should come with a software interface that makes it easy to use, particularly in a development environment. Finally, a format that stores many associated pieces of information should also provide some data organization.

The MINC format attempts to add these things to the NetCDF format.

MINC variable types
Medical imaging tends to produce files with a large amount of ancillary data (patient information, image information, acquisition information, etc.). To organise this information in a useful fashion, MINC uses variables to group together related attributes. The variable itself may or may not contain useful data. For example, the variable MIimage contains the image data and has attributes relevant to this data. The variable MIpatient has no relevant variable data, but serves to group together all attributes describing the patient (name, birthdate, etc.). This sort of variable is called a group variable.

Variables that correspond to dimensions are called dimension variables and describe the coordinate system corresponding to the dimension. An example is MIxspace --- both a dimension and a variable describing the x coordinate of other variables.

The NetCDF conventions allow for these dimension variables to specify the coordinate at each point, but there is nothing to describe the width of the sample at that point. MINC provides the convention of dimension width variables, e.g. MIxspace_width, to give this information.

Finally, it is possible to have attributes that vary over some of the dimensions of the variable. For example, if we have a volume of image data, varying over MIxspace, MIyspace and MIzspace, we may want an attribute giving the maximum value of the each image, varying over MIzspace. To achieve this we use a variable, called a variable attribute, pointed to by an attribute of the image variable.

Thus MINC introduces a number of types of variables: group variables, dimension variables, dimension width variables and variable attributes.

Data organization
MINC attempts to provide some level of data organization through a hierarchy of group variables. As mentioned above, attributes are grouped according to type in group variables. Each group variable can have an MIparent and an MIchildren attribute --- the former specifying the name of another variable that is above this one in the hierarchy, the latter specifying a newline-separated list of variables that come below this one in the hierarchy. At the root of the hierarchy is the MIrootvariable variable, with no parent. Although it is not necessary to make use of this structure, it can provide a mechanism for ordering large amounts of information.

MINC dimension variable and attribute names
The NetCDF format says nothing about variable and dimension naming conventions and little about attribute names. It does provide a few standards, such as the attribute "long_name" for describing a variable, which have been adopted by the MINC standard. MINC defines a set of standard names for commonly used entities and the include file defines constants specifying these names. These are described at length in the MINC reference manual. The most interesting of these is MIimage, the name of the variable used for storing the actual image data in the file.

Image dimensions
The MINC standard gives some special status to the concept of an image. There is nothing inherent in NetCDF that suggests any special status for particular dimensions, but it can be convenient to place limitations on what can vary over which dimensions in an imaging context. For example, the requirement that the variables that specify how to rescale images (see later section on pixel values) not vary with image dimensions means that we can treat the image as a simple unit. In the simplest case, the image dimensions are simply the two fastest varying dimensions of the MIimage variable.

It can also be helpful to allow for vector fields --- images or image volumes that have a vector of values at each point. A simple example of a vector field is an RGB image. At each point in space, there are three values: red, green and blue. The dimension MIvector_dimension is used for the components of the vector and it should be the fastest varying dimension in the MIimage variable. If it is present, then the three fastest varying dimensions of MIimage are the image dimensions.

MINC coordinate system
The MINC standard defines how spatial coordinates should be oriented relative to patients. Files are free to have data stored in the desired direction, but positive world coordinates are given a definite meaning in the medical imaging context. The standard is that the positive x axis points from the patient's left to right, the positive y axis points from posterior to anterior and the positive z axis points from inferior to superior.

The conversion of element index to world coordinates is done using the dimension variable attributes MIdirection_cosines, MIstep and MIstart. If the direction cosines are c=(c_x, c_y, c_z), then the vector between adjacent elements along an axis is step x c. If start(i) and c(i) are the MIstart and MIdirection_cosines attributes for dimension i (one of MIxspace, MIyspace and MIzspace), then the first element of the image variable is at world coordinate \sum_i start(i) c(i).

If the direction cosines are not present, then they are assumed to be (1,0,0) for MIxspace, (0,1,0) for MIyspace and (0,0,1) for MIzspace. Direction cosines are unit vectors and should be normalized. As well, the step attribute should carry the information about axis flipping (negative or positive) rather than the direction cosine.

Pixel values and real values
In medical imaging, pixel values are frequently stored as bytes or shorts, but there is a generally a real value associated with each pixel as well. This real value is obtained by a scale factor and offset associated with each image or image volume. The MINC standard indicates how pixel values should be interpreted.

Image data in the MIimage variable can be stored as bytes, shorts, ints (32-bit), floats or doubles. NetCDF conventions use the attributes MIvalid_range or MIvalid_max and MIvalid_min to indicate the range of values that can be found in the variable. For short values, for example, we might have a valid range of 0 to 32000. To convert these integers to real values, we could use a scale and offset. However, these values would have to change if the data where converted to bytes in the range 23 to 228.

If we specify an image maximum and minimum to which MIvalid_max and MIvalid_min should be mapped by an appropriate scale and offset, then we can convert type and valid range without having to change the real maximum and minimum. To allow the maximum dynamic range in an image, we use the variables MIimagemax and MIimagemin to store the real maximum and minimum --- these can vary over any of the non-image dimensions of MIimage.

General convenience functions
MINC provides a number of convenience functions that have nothing to do with medical imaging, but that make the use of NetCDF files a little easier. One of the drawbacks of the NetCDF format is that data can come in any form (byte, short, int, float, double) and the calling program must handle the general case. Rather than restrict this, MINC provides functions to convert types.

The first set of convenience functions are for type conversion.

 * - reads an attribute vector, specifying the numeric type desired and the maximum number of values to read.
 * - reads one attribute value of the specified type.
 * - read a character attribute of a specified maximum length.
 * - write a double precision attribute.
 * - write a string attribute.
 * - get a hyperslab of values of the specified type.
 * - get a single value of the specified type.
 * - put a hyperslab of values of the specified type.
 * - put a single value of the specified type.

Next we have some functions for handling coordinate vectors.

 * - set a vector of coordinates to a single value.
 * - translate the coordinates for one variable to a vector for subscripting another variable.

Finally, there are functions for dealing with variables as groups of attributes, making it easier to modify a file while keeping ancillary information.

 * - copy all of the attributes of one variable to another (possibly across files).
 * - copy a variable definition (including attributes) from one file to another.
 * - copy a variable's values from one variable to another (possibly across files).
 * - copy all variable definitions from one file to another, excluding a list of variables.
 * - copy all variable values from one file to another, excluding a list of variables.

MINC specific convenience functions
A few routines are provided to deal with some of the minc structures. miattput_pointer and miattget_pointer put/get a pointer to a variable attribute. miadd_child helps maintain the hierarchy of variables by handling the MIparent and MIchildren attributes of two variables. Finally micreate_std_variable and micreate_group_variable create some of the standard variables and fill in a few of the default attributes.

Image conversion variables
One of the requirements for file formats mentioned earlier was a software interface to make the interface easy to use. The biggest difficulty in using a flexible format is that the application must handle many possibilities. Where images are concerned, this means various data types and scale factors, and images of differing sizes. The image conversion variable functions of MINC attempt to remove this complication for the programmer.

An image conversion variable (icv) is essentially a specification of what the program wants images to look like, in type, scale and dimension. When an MINC image is read through an icv, it is converted for the calling program to a standard format regardless of how data is stored in the file.

There are two categories of conversion: Type and range conversions change the datatype (and sign) of image values and optionally scale them for proper normalization. Dimension conversions allow programs to specify image dimension size and image axis orientation (should MIxspace coordinates be increasing or decreasing? should the patient's left side appear on the left or right of the image?).

ICV routines
Accessing a file through an icv is a straight-forward process. Create the icv with miicv_create, set properties (like desired datatype) with the miicv_set routines, attach the icv to a NetCDF variable with miicv_attach and access the data with miicv_get or miicv_put. The icv can be detached from a NetCDF variable with miicv_detach and can be freed with miicv_free.

Icv properties are strings, integers, long integers or doubles. For example, MI_ICV_SIGN (the sign of variable values) is a string, while MI_ICV_IMAGE_MAX (image maximum) is a double precision value. Four functions --- miicv_setint, miicv_setlong, miicv_setdbl and miicv_setstr --- are provided to simplify the setting of property values. Programs can inquire about property values with miicv_inqint, miicv_inqlong, miicv_inqdbl and miicv_inqstr.

Type and range conversion
Pixel values are converted for type and sign by specifying values for the properties MI_ICV_TYPE and MI_ICV_SIGN (they default to NC_SHORT and MI_SIGNED). Values can also be converted for valid range and for normalization. These conversions are enabled by setting MI_ICV_DO_RANGE to TRUE (the default).

If MI_ICV_DO_NORM is FALSE (the default) then only conversions for valid range are made. This means that if the input file has shorts in the range 0 to 4095, then they can be converted to bytes in the range 64 to 248 (for example). The real image maximum and minimum (MIimagemax and MIimagemin) are ignored. The valid range is specified by the properties MI_ICV_VALID_MAX and MI_ICV_VALID_MIN, which default to the legal range for the type and sign.

We may want to scale values so that they are normalized either to all values in the MIimage variable or to some user-defined range. To do normalization, set MI_ICV_DO_NORM to TRUE. Setting MI_ICV_USER_NORM to FALSE (the default) causes normalization to the real maximum and minimum of the variable (the maximum of MIimagemax and the minimum of MIimagemin). If MI_ICV_USER_NORM is true then the values of MI_ICV_IMAGE_MAX and MI_ICV_IMAGE_MIN are used (defaulting to 1.0 and 0.0).

When either MI_ICV_TYPE or the file type is floating-point, then the conversion to and from real values is always done using the real image maximum and minimum information. If the internal type is integer and MI_ICV_DO_NORM is FALSE, then the rescaling is done so that the slice maximum maps to the valid range of the internal values.

Note that when converting to integer types, values are rounded to the nearest integer and limited to be within the legal range for the data type.

The above transformations are simple enough, but the use of floating-point values adds to the complexity, since in general we do not want to rescale these values to get the real values. The various possibilities are described in greater detail below.

The details of pixel value conversion
The easiest way to think about the rescaling is through four ranges (maximum-minimum pairs). In the file variable, values have a valid range var_vrange and these correspond to real values var_imgrange. The user/application wants to convert real values usr_imgrange to a useful valid range usr_vrange. From var_vrange, var_imgrange, usr_imgrange and usr_vrange, we can determine a scale and offset for converting pixel values: Input values are scaled to real values by var_vrange to var_imgrange and then scaled again to user values by usr_imgrange to usr_vrange.

If either of the vrange variables are not specified, they default to maximum possible range for integer types. For floating point types, usr_vrange is set equal to usr_imgrange so that no conversion of real values is done.

If normalization is not being done, then for integer types var_imgrange and usr_imgrange are set to [0,1] (scale down to [0,1] and scale up again). When normalizibng, usr_imgrange is set to either the full range of the variable ([0,1] if not found) or the user's requested range. If the variable values are floating point, then var_imgrange is set to var_vrange (no scaling to real values), otherwise var_imgrange is read for each image (again, [0,1] if not found).

What this means for reading and writing images is discussed below.

Reading with pixel conversion
When reading into internal floating point values, normalization has no effect. When reading integers without normalization, each image is scaled to full range. With normalization they are scaled to the specified range and slices can be compared.

When the input file is missing either MIimagemax/MIimagemin (var_imgrange information) or MIvalid_range, the routines try to provide sensible defaults, but funny things can still happen. The biggest problem is the absence of MIvalid_range if the defaults are not correct (full range for integer values and [0,1] for floating point). When converting floating point values to an integer type, there will be overflows if values are outside the range [0,1].

Writing with pixel conversion
The conversion routines can be used for writing values. This can be useful for data compression --- e.g. converting internal floats to byte values in the file, or converting internal shorts to bytes. When doing this with normalization (to rescale bytes to the slice maximum, for example) it is important to write the slice maximum and minimum in MIimagemax and MIimagemin before writing the slice.

The other concern is that MIvalid_range or MIvalid_max and MIvalid_min be written properly (especially if the defaults are not correct). When writing floating point values, MIvalid_range should be set to the full range of values in the variable. In this case, the attribute does not have to be set correctly before writing the variable, but if it exists, the values should be reasonable (maximum greater than minimum and values not likely to cause overflow). These will be set automatically if the routine micreate_std_variable is used with NC_FILL mode on (the default).

Example Reading values
Read an image without normalization

Read an image with normalization

Read a floating point image

Example Writing values
Writing from floating point to byte values

If we were writing a floating point image, the only difference (apart from changing NC_BYTE to NC_FLOAT) would be that we would rewrite MIvalid_range at the end of the file with the full range of floating point values.

Dimension conversion
One of the problems of arbitrary dimensioned images is that it becomes necessary for software to handle the general case. It is easier to write application software if it is known in advance that all images will have a specific size (e.g. 256 x 256) and a specific orientation (e.g. the first pixel is at the patient's anterior, right side).

By setting the icv property MI_ICV_DO_DIM_CONV to TRUE these conversions can be done automatically. The orientation of spatial axes is determined by the properties MI_ICV_XDIM_DIR, MI_ICV_YDIM_DIR and MI_ICV_ZDIM_DIR. These affect any image dimensions that are MI?space or MI?frequency where ? corresponds to x, y or z. These properties can have values MI_ICV_POSITIVE, MI_ICV_NEGATIVE or MI_ICV_ANYDIR. The last of these will prevent flipping of the dimension. The first two will flip the dimension if necessary so that the attribute MIstep of the dimension variable will have the correct sign.

The two image dimensions are referred to as dimensions A and B. Dimension A is the fastest varying dimension of the two. Setting properties MI_ICV_ADIM_SIZE and MI_ICV_BDIM_SIZE specify the desired size for the image dimension. Dimensions are resized so that the file image will fit entirely in the calling program's image, and is centred in the image. The size MI_ICV_ANYSIZE allows one of the dimensions to have a variable size. If property MI_ICV_KEEP_ASPECT is set to TRUE, then the two dimensions are rescaled by the same amount. It is possible to inquire about the new step and start, corresponding to attributes MIstep and MIstart (where pixel position = ipixel*step+start, with ipixel counting from zero). The properties MI_ICV_?DIM_STEP and MI_ICV_?DIM_START (? = A or B) are set automatically and can be inquired but not set.

Although vector images are allowed, many applications would rather only deal with scalar images (one intensity value at each point). Setting MI_ICV_DO_SCALAR to TRUE (the default) will cause vector images to be converted to scalar images by averaging the components. (Thus, RGB images are automatically converted to gray-scale images in this simple way).

It can sometimes be useful for a program to perform dimension conversions on three (or perhaps more) dimensions, not just the two standard image dimensions. To perform dimension flipping and/or resizing on dimensions beyond the usual two, the property MI_ICV_NUM_IMGDIMS can be set to an integer value between one and MI_MAX_IMGDIMS. To set the size of a dimension, set the property MI_ICV_DIM_SIZE (analogous to MI_ICV_ADIM_SIZE). To specify the dimension to be set, add the dimension to the property (adding zero corresponds to the fastest varying dimension --- add zero for the ``A dimension, one for the ``B dimension, etc.). Voxel separation and location can be inquired about through the properties MI_ICV_DIM_STEP and MI_ICV_DIM_START (analogous to MI_ICV_ADIM_STEP and MI_ICV_ADIM_START), again adding the dimension number to the property.

Example Reading with dimension conversion
Reading a 256 x 256 image with the first pixel at the patient's inferior, posterior, left side as short values between 0 and 32000:


text:
User talk:Andrew janke

You can place on a page that meets the speedy deletion criteria. Thanks. -- Adrignola talk contribs 16:04, 25 March 2010 (UTC)

Ah, learn something every day, I shall be using this a bit now that I am getting the hang of this thing...  thanks. Andrew janke (talk) 16:10, 25 March 2010 (UTC)

Authorship
I've added the two people you've mentioned in your edits so far to MINC/Authors, using a template to keep their email addresses from being harvested by spam bots. I should note that it's not normally appropriate to designate a page as "created by", as it intimidates new editors into thinking that someone "owns" a page (how could that be so on a freely-editable wiki), which would discourage them from trying to make improvements, for fear of angering the original creator. What you could do is mention their names in the edit summary text field when creating the page, which will be present in the page's history for all time, providing attribution without discouraging newcomers. -- Adrignola talk contribs 12:53, 29 April 2010 (UTC)

title: User talk:Andrew janke


text:
MINC/SoftwareDevelopment/MINC1-programmers-reference

=Dimension variable and attribute names= Of all of the variables, dimensions and attributes described here, only the variable and its dimensions are required to be present in a MINC file. Additional variables, dimensions and attributes may be present in the file -- unrecognised variables and attributes should be ignored.

A word on attribute conventions. All numeric values should be stored in one of the numeric types (, , ,   or  ). Some numeric attributes must be specified in a definite unit -- time attributes (such as and  )  are given in seconds. Other attributes have an associated attribute that gives the unit -- e.g. and.

NetCDF standard attributes
These attributes can be used with any variable. Fuller descriptions can be obtained from the NetCDF user's guide.

Specifies the units of the variable values as a string -- units should be compatible with the udunits library.

A string giving a textual description of the variable for human consumption.

A vector of two numbers specifying the minimum and maximum valid values in the variable. For the MINC routines the order is not important. For the variable, this attribute (or  and ) should always be present unless the defaults of full range for integer types and [0.0,1.0] for floating point types is correct.

A number giving the valid maximum for the variable.

A number giving the valid minimum for the variable.

Number to be used for filling in values in the variable that are not explicitly written.

A global string that provides a description of what is in the file.

A global string that should store one line for each program that has modified the file. Each line should contain the program name and arguments.

MINC general attributes
These attributes apply to any variable in the file.

A string identifying the type of variable. Should be one of , ,  or.

A string that identifies the origin of the variable. All standard MINC variables should have this attribute with value. Variables created by users should have a distinctive name that will not be the same as the names used by other applications.

The NetCDF format does not need to know the sign of variables since it does not interpret values -- it is left up to the invoking program to worry about the signs of integers. Because the MINC interface translates variables, it must have this information. is a string with value  or . The default values are for bytes and  for all other types.

A string identifying by name the parent variable of this variable (either in the data hierarchy or as the parent of this variable attribute).

A newline-separated list of the children of this variable (in the data hierarchy).

Any text that should be included with this variable.

A string identifying the file version. The current version is . Each version can be identified by a constant of the form.

The constants  and   are provided for boolean attributes.

Dimensions and dimension variable
The following are the names of dimensions and their corresponding dimension variables. Only does not have a corresponding dimension variable.

Dimension and coordinate variable for x axis.

Dimension and coordinate variable for y axis.

Dimension and coordinate variable for z axis.

Dimension and coordinate for variable time axis.

Dimension and coordinate variable for temporal frequency.

Dimension and coordinate variable for spatial frequency along the x axis.

Dimension and coordinate variable for spatial frequency along the y axis.

Dimension and coordinate variable for spatial frequency along the z axis.

Dimension only for components of a vector field.

In addition to dimension variables, we can have dimension width variables that specify the FWHM width of the sample at each point.

Width of samples along x axis.

Width of samples along y axis.

Width of samples along z axis.

Width of samples along time axis.

Width of samples along temporal frequency axis.

Width of samples along x spatial frequency axis.

Width of samples along y spatial frequency axis.

Width of samples along z spatial frequency axis.

The attributes associated with dimension and dimension width variables are given below:

A string with value  (for a regularly spaced grid) or  (for irregular spacing of samples). If the value is, then the variable is permitted to be a scalar instead of a vector varying with the dimension of the same name. Can be used for both dimension and dimension width variables.

A number indicating the step between samples for regular spacing. This value may be negative to indicate orientation (to specify that  runs from patient right to left, for example). If the spacing is irregular, then the value can be an average step size. Applies only to dimension variables.

The coordinate of the index 0 of the dimension. Applies only to dimension variables.

A string identifying the type of coordinate space. Currently one of (the coordinate system of the scanner), (a standardized coordinate system), or (another standardized coordinate system). Applies only to dimension variables.

A string indicating the position of the coordinates relative to each sample (remembering that each sample has a width). Can be one of , or. Applies only to dimension variables.

A vector with (=3) elements giving the direction cosines of the axes. Although axes are labelled x, y and z, they may in fact have a signficantly different direction -- this attribute allows the direction relative to the true axes to be specified exactly. Applies only to dimension variables. Note that the dot product of the direction cosine with the corresponding axis (1,0,0), (0,1,0) or (0,0,1) should be positive so that the sign of the attribute contains the orientation information.

For regularly dimension widths, this numeric attribute gives the FWHM width of all samples. It can be used for irregular widths to specify the average width. Applies only to dimension width variables.

A string specifying the shape of the convolving filter. Currently, can be one of,  or . Applies only to dimension width variables.

Root variable
The variable  is used as the root of the data hierarchy, with its  attribute pointing to the first level of group variables (including all of the MINC group variables), and with its attribute an empty string.

Image variable
The variable  is used to store the image data.

A variable attribute (ie. an attribute pointing to a variable of the same name) that stores the real value maximum for the image. This variable should not vary over the image dimensions of MIimage. The units of this variable define the units of the image.

Like, but stores the real value minimum for the image. should not be present without and vice-versa.

A boolean attribute (with values  or ) that indicates whether the variable has been written in its entirety. This can be used to detect program failure when writing out images as they are processed :  is set to   at the beginning and changed to  at the end of processing.

Patient variable
The variable  is a group variable with no dimensions and no useful value. It serves only to group together information about the patient. Attributes are modelled after ACR-NEMA conventions.

A string specifying the full name of the patient.

A string giving other names for the patient.

A string specifying identification information for the patient.

A string giving other id's.

A string specifying the patient's birthdate.

A string specifying the patient's sex: , or.

A number giving the patient's age.

The patient's weight in kilograms.

The patient's height or length in metres.

A string giving the patient's address.

A string giving the patient's insurance plan id.

Study variable
Information about the study is grouped together in the variable which has no dimensions or values. Attributes are modelled after ACR-NEMA conventions.

String giving time (and date) of start of the study.

Integer giving year of start.

Integer giving month (1-12) of start.

Integer giving day (1-31) of start.

Integer giving hour (0-23) of start.

Integer giving minute (0-59) of start.

Floating-point value giving seconds of start.

Imaging modality : one of,  , ,,  , ,  ,  ,.

String giving name of device manufacturer.

String identifying device model.

String identifying institution.

String identifying department.

String identifying machine that generated the images.

Name of patient's primary physician.

Physician administering the examination.

Radiologist interpreting the examination.

Name of technologist operating scanner.

String description of admitting diagnosis.

String description of the procedure employed.

String identifying study.

Acquisition variable
Information about the acquisition itself is stored as attributes of the variable (again, no dimensions and no values).

String description of the protocol for image acquisition.

String description of type of data taken (eg. for MR -- IR, SE, PS, etc.).

Time in seconds between pulse sequences.

Time in seconds between the middle of a 90 degree pulse and the middle of spin echo production.

Time in seconds after the middle of the inverting RF pulse to the middle of the 90 degree pulse to detect the amount of longitudinal magnetization.

Number of times a given pulse sequence is repeated before any parameter is changed.

Precession frequency in Hz of the imaged nucleus.

String specifying the nucleus that is resonant at the imaging frequency.

String specifying the isotope administered.

String identifying the contrast or bolus agent.

Half-life of radionuclide in seconds.

String identifying tracer labelled with radionuclide that was injected.

String giving time (and date) of injection.

Integer giving year of injection.

Integer giving month (1-12) of injection.

Integer giving day (1-31) of injection.

Integer giving hour (0-23) of injection.

Integer giving minute (0-59) of injection.

Floating-point value giving seconds of injection.

Length of time of injection (in seconds).

Total dose of radionuclide or contrast agent injected (in units specified by ).

String giving units of dose.

Volume of injection in mL.

String identifying administration route of injection.

=NetCDF routines= Because it is necessary to use NetCDF routines to access MINC files, a brief description of all NetCDF routines is provided here. For more information, see the NetCDF User's Guide. Note that the header file netcdf.h is automatically included by the header file minc.h.

Error handling
If an error occurs, the default behaviour is to print an error message and exit. It is possible to change this behaviour by modifying the value of the global variable ncopts. The default setting is

which means print error messages and exit when an error occurs. To get error messages without having fatal errors, set

For neither error messages nor fatal errors, set

In these last two cases, the calling routine should check the function value returned by each call to a NetCDF function. All routines return an integer value. If the value is, then an error has occurred. The value of the global variable  gives more information on the type of error (see file  for error codes).

NetCDF file operations
The argument  must have a  value of either or. The return value is an identifier for the NetCDF file and is used by subsequent NetCDF function calls.

must have value   or . The return value is a NetCDF file identifier.

number of variables, the number of global attributes or the id of the unlimited record dimension. Passing a NULL value for any of the pointers means do not return the associated value.

are filled with a fill value by default. To turn this off, call this routine with set to  (to turn it back on, use  ).

Dimension operations
The return value is a dimension id to be used in subsequent calls.

Variable operations
Returns a variable id to be used in subsequent calls.

Any NULL pointers mean do not return the associated value. It is possible to get the variable name, type, number of dimensions, dimension id's and number of attributes.

starting at   with edge lengths given by . For the C interface, the last dimension varies fastest. Values must be of the correct type.

starting at   with edge lengths given by . For the C interface, the last dimension varies fastest. Values must be of the correct type.

Attribute operations
. The type and length of the attribute must be specified.

Can get either type or length.

The number is not an id, but can change as the number of attributes associated with a variable changes. Attribute numbers run from 0 to natts-1.

=MINC routines= Error handling for MINC routines is the same as for NetCDF functions, with the exception that routines returning pointers will return  instead of  when an error occurs. Error codes (returned in ) can be found in the header file minc.h.

General convenience functions
with compress, pack, gzip or zip (using gunzip, zcat or pcat). The name of the temporary minc file is returned -- this string must be freed by the caller. If the file specified by is not compressed, then its name is returned. is set to TRUE if a temporary file is created (and the caller needs to delete the file), FALSE if the original file name is returned. If tempfile is NULL, then the routine generates its own temporary file name, otherwise, the user provided name is used. If  is TRUE, then the routine will expand only enough of the file to read the header.

uncompress files (compress, pack, gzip, zip) opened with mode .

May be enhanced in the future.

and.

specifies the desired numeric type and maximum number of values to get. Type is specified with  (the sign is the default for the type:  for   and  otherwise). gives the maximum number of values to get and  returns the number of values actually read. An error will occur if the attribute type is not numeric.

If there is more than one value, an error occurs.

gives the maximum number of characters to be returned (including the terminating ). The string is written to the array specified by value and a pointer to the string is returned.

specifies the desired numeric type and sign (either  or ).

specifies the desired numeric type and sign.

specifies the numeric type and sign of the values being passed.

specifies the numeric type and sign of the values being passed.

vector  to. A pointer to is returned.

for subscripting variable  of file to vector  for subscripting variable. This is useful when two variables have similar dimensions, but not necessarily the same order of dimensions. If has a dimension that is not in , then the corresponding coordinate is ignored. If  has a dimension that is not in, then the corresponding coordinate is not modified. A pointer to is returned.

from one file to another. must be in define mode. The id of the newly created variable is returned.

and  must be in data mode.

The list of  variable id's is given in. must be in define mode.

The list of  variable id's is given in. must be in data mode.

MINC specific convenience functions
variable. Signed data is indicated by setting  to ; unsigned by.

and sign.

variable. This function handles potential type differences between the attribute and the image data. These differences (particularly float images with double ) could otherwise lead to problems in properly identifying invalid data.

variable. This function follows the NetCDF convention of having both variable data and attribute with the same type.

based on the image-min and image-max variables.

Returns true if the variable exists.

.

of variable.

to the  attribute of variable   and set the attribute of variable  to the name of variable . If the attributes do not exist, they are created. The names in the attribute  are separated by newlines.

set some attributes. Called in the manner of. The id of the newly created variable is returned. For all variables, attributes ,  and are all set. For dimension and dimension width variables, is set to  if the number of dimensions is zero and   otherwise. For dimension variables,  is set to   unless the variable is, then it is set to . As well,  MIcomments is set to a string describing the direction of the world coordinates of spatial dimensions. For dimension width variables, is set to. For and for  and , dimensions are checked to ensure that the last two do not vary over image dimensions and attribute pointers from  are created to point to the other two.

, but  is always set to zero and the datatype is. The id of the newly created variable is returned.

Image conversion variable functions
defaults -- an icv identifier is returned for later use (or if an error occurs). The old limit of  icv's that can exist at one time has been removed, although the definition remains.

points to the double precision variable in which the value should be returned.

points to the integer variable in which the value should be returned.

points to the long integer variable in which the value should be returned.

points to the character array in which the value should be returned. The calling routine must allocate enough space for the return string.

Note that icv properties cannot be modified while a variable is attached to the icv. If a variable is already attached to the icv, then it is automatically detached. The file must be in data mode.

This avoids linking in all of the dimension conversion routines when they are not needed (for machines where memory may be a concern).

=Image conversion variable properties= (type ) : Specifies the type of values that the user wants. Modifying this property automatically causes and  to be set to their default values. Default =.

(type ) :  Specifies the sign of values that the user wants (irrelevant for floating point types). Modifying this property automatically causes  and to be set to their default values. Default = .

(type ) : When , range conversions (for valid max and min and for value normalization) are done. When, values are not modified. Default = .

(type ) : Valid maximum value (ignored for floating point types). Default = maximum legal value for type and sign (1.0 for floating point types).

(type ) : Valid minimum value (ignored for floating point types). Default = minimum legal value for type and sign (1.0 for floating point types).

(type ) : If, then normalization of values is done (see user guide for details of normalization). Default =.

(type ) : If, then the user specifies the normalization maximum and minimum. If, values are taken as maximum and minimum for whole image variable. Default =.

(type ) : Image maximum for user normalization. Default = 1.0.

(type ) : Image minimum for user normalization. Default = 0.0.

(type ) : Read-only value giving the user image maximum when doing normalization (either the maximum in the variable or the user specified maximum).

(type ) : Read-only value giving the user image minimum when doing normalization (either the minimum in the variable or the user specified minimum).

(type ) : If set to , then range checking is done on input and values that are out of range (value in the file less than   or greater than ) are set to the value of .  Default =.

(type ) : Value to use when pixels are out of range (on input only). This value is written to user's buffer directly without any scaling. Default =.

(type ) : If set to , then dimension conversions may be done. Default = .

(type ) : If, then if   is the fastest varying dimension of the variable, elements are averaged and the icv behaves as though this dimension did not exist. Default =.

(type ) : Indicates the desired orientation of the x image dimensions ( and ). Values can be one of  , or. A positive orientation means that the  attribute of the dimension is positive. means that no flipping is done. Default = .

(type ) : Indicates the desired orientation of the y image dimensions. Default =.

(type ) : Indicates the desired orientation of the z image dimensions. Default =.

(type ) : Specifies the desired size of the fastest varying image dimension. A value of means that the actual size of the dimension should be used. Default = .

(type ) : Specifies the desired size of the second image dimension. Default =.

(type ) : If, then image dimensions are resized by the same amount so that aspect ratio is maintained. Default =.

(type ) : Read-only property that gives the equivalent of attribute  for the first (fastest varying) image dimension after dimension conversion.

(type ) : Read-only property that gives the equivalent of attribute  for the second image dimension after dimension conversion.

(type ) : Read-only property that gives the equivalent of attribute  for the first (fastest varying) image dimension after dimension conversion.

(type ) : Read-only property that gives the equivalent of attribute  for the second image dimension after dimension conversion.

(type ) : Specifies the number of image dimensions used in dimension conversions. Default = 2.

(type ) : Specifies the desired size of an image dimension. The number of the dimension to be changed should be added to the property (adding zero corresponds to the fastest varying dimension). Default = .

(type ) : Read-only property that gives the equivalent of attribute  for the an image dimension after dimension conversion. The number of the dimension to be queried should be added to the property (adding zero corresponds to the fastest varying dimension).

(type ) : Read-only property that gives the equivalent of attribute  for an image dimension after dimension conversion. The number of the dimension to be queried should be added to the property (adding zero corresponds to the fastest varying dimension).

(type ) : Read-only property that gives the number of dimensions of the image variable, taking into account the conversion of vector images into scalar images.

(type ) : Read-only property that gives the id of the currently attached NetCDF file, or  if no file is attached.

(type ) : Read-only property that gives the id of the currently attached NetCDF variable, or  if no variable is attached.

(type ) : String property specifying the name of the variable that gives the image maximum. Default = .

(type ) : String property specifying the name of the variable that gives the image minimum. Default = .

=Known bugs= For dimension conversion with image conversion variables, the values of,  and are computed assuming that is equal to.