text:
Visual Basic/VB6 Command Reference

This page aims to be a comprehensive command reference to the MS Visual Basic 6 programming language.

Asc
Returns the number corresponding to the ASCII code for the first character of string

Usage

string = string containing character as first letter whose ASCII code is to be found.

Example

Here  will get value 65

Chr
Returns a string character that corresponds to the ASCII code in the range 0-255. Reverse of the  function.

Usage

code = ASCII code.

Example

Here  gets value "a".

Len
Returns the amount of characters in a given string or 0 for Empty.

Usage

expression = a string or Empty

Example

 mystring = InputBox("Enter a string to test") length = Len(mystring) MsgBox "Length of the string is " & length

e.g. where mystring is "Hello", length will be 5.

Left
Returns a given number of characters from the left hand side of a string

Usage

string = string to use x = number of characters

Example

 mystring = InputBox("Enter a string") mystring = Left(mystring, 4) MsgBox "First four characters of your input are " + mystring

e.g. where the input mystring is "Hello", the output mystring will be "Hell"

Right
Returns a given number of characters from the right hand side of a string

Usage

string = string to use x = number of characters

Example

 mystring = InputBox("Enter a string") mystring = Right(mystring, 4) MsgBox "Last four characters of your input are " + mystring

e.g. where the input mystring is "Hello", the output mystring will be "ello"

Mid (Function)
Returns a given number of characters from the middle of a string

Usage

string = string to use start = character to start at (1 is the first character) length = number of characters

Example

 mystring = InputBox("Enter a string") mystring = Mid(mystring, 2, 3) MsgBox "The second, third, and fourth characters of your input are " & mystring

e.g. where the input mystring is "Hello", the output mystring will be "ell"

Mid (Statement)
Sets a given number of characters in the middle of a string equal to the same number of characters from the beginning of another string

Usage

mystring = the string to take characters from start = character to start at (1 is the first character) length = number of characters

Example

 mystring = InputBox("Enter a string") Mid(mystring, 2, 3) = "abcd" MsgBox "Your string with abc as the second, third, and fourth characters of your input are " + mystring

e.g. where the input mystring is "Hello", the output mystring will be "Habco"

Trim
Removes leading and trailing spaces from a string

Usage

string = string to use

Example

 mystring = Trim(mystring)

e.g. where the original value of mystring was " Hello  ", the new value of mystring will be "Hello".

LCase
Converts a string to lowercase

Usage

string = string to use

Example

 mystring = LCase(mystring)

e.g. where the original value of mystring was "HELLO", the new value of mystring will be "hello".

UCase
Converts a string to uppercase

Usage

string = string to use OR character

Example

 mystring = UCase(mystring)

e.g. where the original value of mystring was "Hello", the new value of mystring will be "HELLO".

String
Creates a string with the specified length of the specified character

Usage

length = length of string character = character to fill string with

Example

<tt> mystring = String(5,"a")</tt>

e.g. the new value of mystring will be "aaaaa".

Space
Creates a string with the specified length of space

Usage

length = length of string

Example

<tt> mystring = Space(5)</tt>

e.g. the new value of mystring will be "    ".

StrConv
Returns a converted string as specified.

Usage

string = string to use conversion = case to convert the string to (lowercase: vbLowerCase, uppercase: vbUpperCase, proper case (first letter in caps): vbProperCase) LCID = optional. The LocaleID, if different than the system LocaleID.

Example

<tt> mystring = StrConv(mystring, vbProperCase)</tt>

e.g. where the original value of mystring was "HELLO", the new value of mystring will be "Hello".

Abs
Returns the absolute value of a number

Usage

Abs(number)

Example

msgbox "The absolute value of -4 is " & abs(-4)

Important note!

The Abs function only accepts numbers. Non-numeric values generate an error.

Cos
Returns the cosine of a number

Usage

Cos(integer)

Example

msgbox "The cosine of 4 is " & cos(4)

Important note!

The input angle for all VB trigometric functions should be in radians. To convert degrees to radians, multiply degrees by pi / 180.

Sin
Returns the sine of a number

Usage

Sin(integer)

Example

msgbox "The sine of 4 is " & sin(4)

Important note!

The input angle for all VB trigometric functions should be in radians. To convert degrees to radians, multiply degrees by pi / 180.

Tan
Returns the tangent of an angle

Usage

Tan(integer)

Example

msgbox "The tangent of 4 is " & tan(4)

Important note!

The input angle for all VB trigometric functions should be in radians. To convert degrees to radians, multiply degrees by pi / 180.

Val
Returns the numeric value of a string

Uses "." as decimal separator. ( It does not depend on the Regional Settings )

Usage

Val(string)

Example

The return value will be 5

The return value will be 10.6

The return value will be 0 (zero)

The text box txtOutput will contain the product of the numbers in the txtNumber1 and txtNumber2 text boxes. If either of the text boxes contains a value that cannot be evaluated to a number then the output will be 0 (zero).

Rnd
Returns a floating point number less than 1 but greater than or equal to 0.

Usage

You can change the seed the random number generator uses by providing a value as a parameter e.g. Rnd(500) will use the number 500 as the seed in generating random numbers.

If you provide a value less than zero then the same number will be returned by the Rnd function

A value of zero will return the most recently generated random number.

Providing no value will generate the next random number in the sequence.
Providing a positive number will generate the next random number in the sequence using number as a seed.

Example

myvar will become a random number between 0 and 10.

myvar will become a random number between 25 and 40.

myvar will become a random number between -25 and 25 and 12345 will be used as the seed to generate this number.

Int
Returns the integer portion of a number.

Usage

Int(n)

Where n is the number to return

Example

Returns 10

Returns 5

Returns 5

NOTE: No rounding will be performed, the decimal portion of the number will simply be removed. If you want to round a number to the nearest whole integer then use CInt. One interesting point to remember about CInt is that if the decimal portion of the number is exactly .5 then it will be rounded down if the number is odd and rounded up if it is even. For example CInt(1.5) and CInt(2.5) will both return 2.

MsgBox
The MsgBox function displays a message in a dialog box, waits for the user to click a button, and returns an Integer value indicating which button the user clicked.

Syntax

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

The MsgBox function syntax has these parts:

Usage

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

or

Response=MsgBox(prompt[, buttons] [, title] [, helpfile, context])

The integer value of the button selected will be placed into the Response variable.

Button Combinations

vbOKOnly

vbOKCancel

vbAbortRetryIgnore

vbYesNoCancel

vbYesNo

vbRetryCancel

Icon Display

vbCritical

vbQuestion

vbExclamation

vbInformation

Default Button

vbDefaultButton1

vbDefaultButton2

vbDefaultButton3

vbDefaultButton4

Examples

MsgBox "An error has occurred!",vbExclamation,"Error"

Note that since the message is fixed, quotation marks have been used.

Response=MsgBox("Yes or no?",vbYesNo + vbQuestion,"Choose one")

Note the parenthesis and how the vbYesNo and vbQuestion constants have been combined

MsgBox "An error has occurred on line " & lineno, vbExclamation, "Error"

InputBox
Displays a simple input box for user to enter data

Usage

Variable=InputBox(Prompt,Title)

Variable = variable to which the input value will be stored Prompt = text displayed to the user in the input box Title = title of the input box

Examples

myint=InputBox("Enter a number","Enter a number")

Date
Returns or sets the current system date

Example

MsgBox "Today 's date is " & Date & "."

Time
Returns or sets the current system time

Example

MsgBox "The time now is " & Time & "."

''Sidenote: be wary of changing date and time in your program. Many other programs will depend upon the system's date and time being set correctly, so altering it could have a knock on effect. Use date and time changes sparingly, and notify the user if this is being done.''

Timer
Returns the number of seconds since midnight

Example

NumHrs=Int(Timer / 3600) MsgBox "Currently in hour " & NumHrs

WeekdayName
Returns the name of a day of the week

Usage

WeekdayName(x,FirstDayOfWeek)

x = integer between 1 and 7 FirstDayOfWeek (OPTIONAL) = the day counted as the first in the week. The default is Sunday.

Example

DayName=WeekdayName(i,vbMonday)

IsNull
Returns true if an expression is null and false otherwise.

Example: If IsNull(vntMyVariantVar) Then Debug.Print "vntMyVariantVar is null" Else Debug.Print "vntMyVariantVar is NOT null" End If

Open
Open "" & namefile& ".dat" For Binary As #ff

Selection
'''If... Then... Else...''' Performs selection based upon criteria. A cornerstone of any VB program.

'Usage'

Single Line Selection

If condition Then action

Note that only one line can be used with this style of statement

Multi Line Selection

If condition Then

[code to execute if condition is true]

EndIf

Using Else

If condition Then

[code to execute if condition is true]

Else

[code to execute if condition is false]

EndIf

Condition is a condition which must be met for the code within the statement to be executed. It can make use of the modifiers AND, NOT, OR and XOR (e.g. x=4 AND y > 6). See also the Examples section.

Examples
Simple one-line selection: If x < 10 then MsgBox "The number is below 10"

Slightly more complex one-line selection, using the AND modifier to check two conditions at one time. If x > 10 AND x < 20 then MsgBox "The number is between 10 and 20"

''Simple multi-line selection. The code between the If... and EndIf statements will be executed only if the condition is met.'' If Date = 25/12/2006 Then MsgBox "The date is Christmas Day" Call ChristmasDay EndIf

''Using the Else statement. If the variable i is over 4, the program will exit the subroutine. Otherwise, it will go to the label SaveFile.'' If i > 4 Then Exit Sub Else Goto SaveFile EndIf

''Two If... Endif statements are used, one nested within the other. If i is 6 or 7, the code between the inside If...Endif statements is executed. Then if i=7 the first message box will be shown; otherwise (i.e. if i=6) the other will be displayed. For both cases, the final message box will be shown. When nesting selection statements, it's often a good idea to indent them as shown here.'' If i = 6 OR i = 7 Then If i = 7 Then MsgBox "Today is Sunday" Else MsgBox "Today is Saturday" EndIf MsgBox "Today is the Weekend" EndIf

title: Visual Basic/VB6 Command Reference


text:
Talk:Modern Greek/Lesson 2x

Untitled
The normal translation of I want to write is θέλω να γράψω. I think that the grammatical aspects should be learned together with the subordinate cluases. In general, there are many mistakes in this book. Before giving an example, ask a native speaker or look the sentence up in Google if it is really used that way. 70.52.2.61 20:20, 5 February 2006 (UTC)
 * Thanks for the correction! I've been soliciting help from native speakers, and am grateful for your work! --Bcrowell 17:13, 10 February 2006 (UTC)

=cases= I've changed the terminology for the cases back from nom/gen/acc/voc to subj/gen/obj/voc. I would like to minimize the number of new grammatical terms that the reader has to learn, and "subject" and "object" will already be familiar from English grammar. I've also rearranged things a little so that the genitive isn't presented until lesson 3, and the vocative until lesson 4. Again, the idea is to avoid overwhelming the reader.--Bcrowell 17:15, 10 February 2006 (UTC)

=about over-simplification= I very much appreciate your effort (you started the whole thing in the first place), but I still cannot understand your over-simplification approach. The cases should be always referred to with their proper names.

It's one thing to slowly introduce Greek and another thing to slowly introduce Grammar itself!

Now in terms of the order of the chapters, perhaps we should reconsider it all along. Here is a link that I find very useful, from the German-Hellenic School of Greece (it is in Greek):

http://www3.ellinogermaniki.gr/artemisTool/grammar/

In terms of a native speaker pronunciation, although I'm a native speaker myself, there is some excellent work already done in Φιλογλωσσία

http://www.xanthi.ilsp.gr/filog/ch1/alphabet/alphabet.asp

In general their whole course material is excellent and we can take an example from there about the structure of these lessons.

http://www.xanthi.ilsp.gr/filog/

83.146.62.97 19:55, 10 February 2006 (UTC)

Speed
Your explanations are good, but I think you are trying to teach too much in one lesson. I have studied Greek for almost one year at university now, I can manage everyday situations without spending a lot of time thinking of words and yet I still don't know some of the grammar concepts or vocabulary introduced in this lesson - which is supposed to be for people who have only done one lesson of Greek so far?? I believe the amount of things you introduce in one lesson force students to spend too much time on one lesson. They will feel like they never progress, they will get frustrated and stop learning Greek. Learning a language in self-study isn't easy in any case, but this is bound to discourage even avid language learners. Perhaps you might want to have a look at a new approach in language courses that I developed and that I'd now like to introduce to Wikibook creators: see Bite-sized language lessons. You may also want to read the Wikibook on language-course creation. This is not to diminish the work you have obviously put in this, I just think that precisely because of the effort involved, you should make sure that learners can get the most out of these lessons. Junesun 14:07, 10 May 2006 (UTC)

Gender
The ος ending is described for masculine nouns, which helps us recognize masculine nouns. However the same is not done for feminine and neutral. That would be appreciated.

Modern pronunciation
I was taught that in the modern language the characters μ, and ν were pronounced "mi" and "ni" (etc. for other letters), not "mu" and "nu" as seems to be implied on this page. Am I missing something here? --Fishpi (talk) 18:04, 20 August 2010 (UTC)

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

title: Talk:Modern Greek/Lesson 2x


text:
Talk:German/Level I/Das Fest

Untitled
Dative case isn't here :(

title: Talk:German/Level I/Das Fest


title: User:GoldCow64


text:
Wikijunior talk:Dinosaurs/K-T Event

To the Writer
If you have the time it would be great if you could simplify this page a tad, just because its a children's book. I would do it myself, but i find it works out better if the original author does it! Thanks,    Basejumper123 22:26 4 February, 2006
 * I guess that's me, I've written most of it. I realise it's a bit complicated, but I just didn't have the time to simplify it at the time of writing.  I will do that when I get the time, and of course I don't mind if anyone else does it.--Konstable 06:16, 6 February 2006 (UTC)
 * I have made some changes now, probably still needs a lot of work though.--Konstable 09:26, 6 February 2006 (UTC)

title: Wikijunior talk:Dinosaurs/K-T Event


text:
Modern Greek/LegacyLesson 11

Lesson 11: Irregular verbs, the genitive, family, the body, prepositions

=The genitive= What English expresses using possessives or the presposition "of," Greek expresses using the genitive case. The following example shows the noun σκύλος in all the subject, genitive, and object cases.

Example:

The genitive plural is easy, because it's always formed with -ων, and the article is always των.

The genitive singular is formed according to a greater variety of patterns, of which three of the most important are shown here:

Accentuation
In some nouns, when the antepenult is accented, the genitive is accented at the penult and when the penult is accented the genitive is accented at the ultimate. There is a set of rules to distinguish in which cases this happens. Most of the rules derive from Ancient Greek and have to do with either long and short vowels or Ancient Greek declensions. This is an issue with Modern Greek itself, since most of the nuances of Ancient Greek are lost in Modern Greek. People in most cases put the accent intuitively and at some instances even native speakers have great difficulty in accentuating correctly. This is why it is often said that in order to properly speak Modern Greek, one has to have at least a basic level of Ancient Greek.

The accent can also advance two positions, from antepenult to ultimate between nominative plural and genitive plural. The noun το χάδι (the caress) presents the following declensions:

Genitive indefinite article
The following list shows the indefinite article in all three of the cases covered so far:

=Genitive pronouns=

When indicating possession, the genitive pronoun follows the noun it modifies.

When greeting a person you either say Γεια σας (the polite plural) or Γεια σου (friendly address, more often than not the σου is omitted). Γεια is a short form for υγεία (health → "hygiene"). For a group of people except the abovementioned Γεια σας, the salutation Χαίρετε (rejoice) is also utilized.

When a noun followed by a possessive pronoun has the accent on the third syllable from the end, it gets a second accent on the final syllable:

In Greek, rather than saying that you like something, you say that it is pleasing to you, using the verb αρέσω:

This form is a remnant of the ancient dative case (δοτική πτώση). Something similar happens with certain prepositions (see below).

=Prepositions= The following are some common prepositions:

Examples:

If the preposition σε is followed by a definite article, the joint form στο(ν)/στη(ν)/στο (σε plus το(ν)/τη(ν)/το) is used:

As a remnant of ancient Greek's more complex case system, certain prepositions (πρό, εναντίον, εκ/εξ) are supposed to take the genitive case rather than the object (accusative) case. In these constructions, the genitive is really being used as the dative (indirect object) case, as in the use of the genitive with the verb αρέσω. This is a usage that is dying out, and a beginner doesn't need to worry about it too much. There are, however, certain fixed phrases that will seem inexplicable otherwise:

Prepositions used as prefixes
It is extremely common for Greek verbs to be formed by adding a preposition as a prefix to a simpler verb. However, the preposition may be in a different form than the ones given above, e.g., εις rather than σε. A common prefix is συν-/συμ-, from the ancient Greek preposition συν, with, together. Two other suffixes based on ancient Greek prepositions are δια, for, because of, relating to, and υπό, under (~"hypodermic").

=Family=

Vocabulary:

Examples:

Note that in Greek, a definite article is used with a person's name.

=Grimm's law= The words πατέρας and μητέρα are actually closely related to the English words mother and father. When English and Greek words are derived from the same root in their common ancestral language, Indo-European, the consonants are related as follows:

This is known as Grimm's law (after a linguist from the same family that collected the Grimm's fairy tales). Sometimes it can help you to learn words in Greek.

Examples:

In some cases, the Greek word that's cognate to the English one is ancient rather than modern. For example, brother corresponds to the ancient φρατήρ (e.g. "fraternity"), not the modern αδελφός, and door to the ancient θύρα rather than modern πόρτα (which is a loan from italian).

=Nouns in -ας and -ης=

Other than -ος, the most common endings for masculine nouns are -ας and -ης.

Ο πατέρας, the father:

Ο μαθητής, the student, pupil:

These endings are particularly common in nouns referring to professions, e.g., ο αστροναύτης, the astronaut.

=People= Vocabulary:

Examples:

=The letter ν at the end of a word=

You might have noticed above that while both ο πατέρας and ο μαθητής are masculine nouns, the definite article at the accusative (object) case is different:

There is a general rule that applies not only to the definite article but to most words ending with a ν. According to this rule if the next word does not start with a vowel or any of the voiceless plosives (κ, π, τ, ξ, ψ) then the ν is often omitted.

Thus, the avoidance of complex consonant combinations helps in producing a smooth flow of speech.

=Reading=

Vocabulary:

title: Modern Greek/LegacyLesson 11


text: Wikijunior talk:Dinosaurs/Stegosaurus

title: Wikijunior talk:Dinosaurs/Stegosaurus


text:
Template:PD-user

This adds a page to Category:Public domain works by author

title: Template:PD-user


text:
Biblical Studies/Christianity/Christian art

Christian art works

 * Sistine Chapel
 * /Primitive/
 * /Fresco/
 * /Cathedral/
 * /Icon/
 * /Paintings/
 * /Sculpture/
 * /Stained Glass/
 * /Digital/


text:
Scouting/Knots/Bends/Granny knot

A Granny Knot is basically an incorrectly tied Reef knot. On the Reef Knot page is a blue and red graphic representing that knot. A Granny Knot is similar, except for one thing.

In a Reef Knot, the two blue ends cross underneath the red loop on the right side and the two red ends cross over the blue loop on the left side of the knot. In a Granny Knot, the top blue end would be over the red loop on the right side and the top red end would be under the blue loop on the left side of the knot.

Also, the red rope part at the top of the knot would cross over the blue part of the rope, rather than under it.

The Reef Knot is criticized as an unstable knot. The Granny Knot is much, much more unstable and should never be used for any purpose.

title: Scouting/Knots/Bends/Granny knot


text:
Biblical Studies/Christianity/Christian art/Primitive

Symbols in primitive Christianity Fish Symbol − the most elemental Christian art in the form of a doctrinal statement.
 * Definition
 * The acrostic in Greek, Ichthys, is "Jesus-Christ-Of God-Son-Savior. Jesus: The Hebrew "Joshua" or Aramaic "Yeshua," means "God is Salvation." Christ: Being equal to the Hebrew/Aramaic word "Messiah," means the Sent One, the Anointed of God. The word points to redemption and reconciliation between God and man. Of God: Reminds Christians of the deity of Christ. Christ is triune [[Image:ICHTHYS.jpg|left]]with God and the Holy Spirit. Together the 3 are 1 God with 3 differing roles. "Of God" signifies that God is the Head of Christ. God is Father, Christ is Son. Son: As heir, Jesus is not inferior to the Father, but has a different role in the redemption of humanity. The Son is the heir of the Father, and God has given all power and authority to Jesus. As Son and heir, Jesus was obedient to God the Father. Savior: Jesus' death on the cross for the redemption of all heaven and earth represents the culmination of the obedience of Jesus towards God the Father. Jesus provides salvation based on His sacrificial broken body and blood at the cross to everyone who trusts in His righteous life. Jesus lays claim as rightful God of the New Covenant who can die for sin, judge sin, yet be blameless from sin.

History
The fish was well known in ancient times as a symbol of fertility. The interlocking arcs have become a modern day Christian amulet, even the subject of various parodies. The exact date or reason for the Christian church assimilating the simple art form and the soteriological formula behind it, is not known. There is no clear evidence for the use of the IXTHYS acrostic in early Christianity much before the late second century C.E. The New Testament contains many details about fish and fishermen, much more than in the Old Testament. The origin of ichthys is thus closely related to the idea of “fishers of men,” baptism of water, dividing the fish and loaves, or the last meal on the shore which enumerated the catch of 153 fish. Usage is described as a pointer to secret meetings during the period of persecution, a primitive password or handshake in the sand where when two meet each one supplies an arc, or simply a theological statement inscribed under trying circumstances and signifying a certain perseverance above all else. The earliest known reference in Christian literature (ca. 193 C.E.) quotes Tertullian, De Baptismo 1.3, "we, little fishes, after the image of our ΙΧΘΥΣ, Jesus Christ, are born in the water," where only the word for fish is written in Greek instead of Latin and so most assuredly alludes to the acronym for fish, IXTHYS.

A grave-yard remains something of a broken record of the church to which it belongs. The catacombs exhibit many such monumental inscriptions, Greek and Latin, or oddly mixed (Latin words in Greek uncial characters), often rudely written, of bad spelling, mutilated, and almost illegible, with and without symbolical figures. Christianity appealed to the poor and illiterate of the time. Fish imagery was very popular in early Christianity, and is mentioned in patristic literature. Clement of Alexandria (ca. 202 C.E.) sanctions the use of the image as art in the form of a seal for a signet ring in Paedogogus 3.11. The popular motif found on Christian gems of the later third century contains a pair of fish flanking an anchor or a cross-like object, also, fish and anchors are drawn beside funerary inscriptions datable at the earliest to the late second or early third centuries. The acrostic and fish symbols are found in tombs beneath the church of San Sebastiano, Rome, but, while highly probable, it's not universally accepted that these tombs are Christian. They date from the late second/early third century as well. Fish imagery from this period also occurs in the catacombs, the best known example being a crude painting commonly called the "Eucharist fish" showing a basket of five loaves of bread on the fish's side in the Lucina crypt in the Catacomb of Callixtus, Rome.

The acronym for fish is in wide use by the fourth and fifth century C.E., for Augustine relates that “these five greek words” mean "Christ" (Jesus Christ, of God the son, saviour) because, in Augustine’s words, "He was able to remain alive − that is, without sin − in the abyss of our mortal condition, in the depths, as it were, of the sea" (City of God 18.23, part of a discussion of Sibylline Oracle 8.217). Many early references to the fish mention baptism and may have foundation in the period use of the term "piscina" when referring to the baptismal font.

The acronym for fish obviously influences a passage in the epitaph of Abercius, an enigmatic Phrygian inscription, now in the Vatican, which probably dates from the late second century. The inscription is in Greek:
 * My name is Abercius, the disciple of the Holy Shepherd... I followed Paul and everywhere Faith was my leader and she gave me food in every place − the Fish from the fountain, a mighty Fish and pure which a holy maiden took in her hands and gave to her friends to eat for ever, having goodly wine and giving it mixed with water and also bread...

Similar language is used in the inscription of one Pectorius, which was found near Autun, France and kept in the museum there. It has not been accurately dated − probably third to fourth century. The inscription has some gaps which must be filled out by conjecture. The first portion seems to be older. Schultze conjectures that it is an old Christian hymn. This inscription is also in Greek, but it's written in a form resembling verse and the first letters of the first five lines spell out the acrostic IXTHUS:

 * 1 Thou, the divine child of the heavenly Fish
 * 2 Keep pure thy heart among the mortals
 * 3 Once thou hast been washed in the fountain of divine waters.
 * Refresh thy soul, friend,
 * 4 With the ever flowing waters of wealth-giving wisdom.
 * 5 Take from the Saviour of saints the honey-sweet food;
 * 6 Eat with joy and desire, holding the Fish in thy hands.
 * 7 I pray thee, Lord Saviour, satisfy his hunger with the Fish.
 * 8 May my mother rest peacefully, I beseech thee, Light of the dead.
 * 9 Aschandius, father, my heart's beloved
 * 10 With my dearest mother and my brothers
 * 11 In the peace of the Fish remember thy Pectorius.

 * Summary (in Modernity)

 * Divine race of the heavenly Fish preserve a reverent mind when you partake of the immortal fountain of wondrous waters that springs up among us here. Friend, let your soul be comforted with the ever-flowing waters of treasure-bestowing wisdom. Take the honey-sweet food of the Redeemer of the saints and eat it eagerly, holding the Fish in your hands. Satisfy me thus with the Fish I pray you, My Lord and Savior... be mindful of all those abiding in the peace of the Fish.
 * Yours, Pectorius.

Return to John 1

 * Christian art

 * Christianity contents page


text:
Cookbook talk:Lasagne with Bean Sauce

If I'm not mistaken, this should be 8 lasagne noodles -- two isn't enough for two layers. --209.242.5.195 00:17, 6 February 2006 (UTC)

 * I've changed it to read "one package" of noodles, which I realize is a bit vague, but lasagna noodles are commonly sold in packages containing the right amount for a lasagna of this size - here in the US, at least. Anyway, it's better than saying "six," which it did before I changed it, which couldn't possibly be right, unless it meant "six layers' worth." Jessicapierce 22:25, 5 May 2007 (UTC)

Another Italian American recipe.

Please put these in the appropriate place: Italian-American cuisine.

Italian recipes are always identified by the region, town or village they come from and the inclusion in one dish of both Parmigiano Reggiano ( Emilia-Romagna ) and Mozzarella ( Lazio and Campania ) gives away that this is not a traditional Italian recipe. But glad you got "Lasagne" right and did not call it "Lasagna" !

No boil lasagna noodles
When cooking this recipe with no boil noodles, I suggest 3 layers (given the noodles are thinner). Sprinkle water on each noodle sheet. Cook covered for 20 minutes to steam the noodles, and uncovered for 20 minutes to lightly brown the top. Klaus (discuss • contribs) 00:55, 28 May 2018 (UTC)

title: Cookbook talk:Lasagne with Bean Sauce


text:
Bourne Shell Scripting/Appendix C: Quick Reference

This final section provides a fast lookup reference for the materials in this document. It is a collection of thumbnail examples and rules that will be cryptic if you haven't read through the text.

IF statement
The if statement executes the command between  and. If the command returns not 0 then the commands between  and   are executed - otherwise the command between   and.

Test Syntax Variations
Most test commands can be written using more than one syntax. Mastering and consistently using one form may be a programming best-practice, and may be a more efficient use of overall time.

String Tests
String Tests are performed by the  command. See  for more details. To make scripts look more like other programming languages the synonym  was defined which does exactly the same as.

Arithmetic tests
simple arithmetics can be performed with the  for more complex arithmetics the   command exists. See  for more details. Note that for  command variables don't need to be prefixed with '$' and the statement need to be one argument, use   when there are spaces inside the argument. Like with  a synonym -   - was defined to make shell scripts look more like ordinary programs.

Boolean tests
Boolean arithmetic is performed by a set of operators. It is important to note then the operators execute programs and compare the result codes. Because boolean operators are often combined with  command a unifications was created in the form of.

Loop statements
There are "break" and "continue" commands that allow you to exit or skip to the end of loops as the need arises.

Instead of [] we can use test. [] requires space after and before the brackets and there should be spaces between arguments.

Credit
This content was originally from http://www.vectorsite.net/tsshell.html and was originally in the public domain.


text:
Cookbook talk:Mead

Sima
The part about "Sima" was pretty messy. I cleaned it up a bit, but I don't think it belongs here. It isn't mead; it has no honey in it. Mead by definition has honey in it. —The preceding unsigned comment was added by 24.147.141.127 (talk • contribs) on 2006-02-06.

 * I agree, Sima isn't mead so perhaps should have its own article. Webaware 08:55, 24 August 2006 (UTC)

another recipe
I havn't made mead for some time, but I used to use apple juice instead of water (500g honey / liter apple juice). You don't need yeast nutrient in this case and it also adds some acidity to make the taste somewhat richer. (This is the internet, so: I'm talking about real, pure apple juice made of apples and nothing else.) 212.202.2.123
 * What you are describing is called a cyser. I agree, they are very nice, and easy to make (easier than a straight mead). Webaware talk 12:20, 14 April 2007 (UTC)

Requests
Please describe what it is to "rack" and a link to proper airlocks would be nice.

title: Cookbook talk:Mead


text:
User:Netconsult

The main characteristics in community acquired pneumonia Aim: To evaluate the main characteristics of adult inpatients with community acquired pneumonia Methods: We performed a retrospective study using the medical records completed between 1 January-31 December2004. The study group was composed of 333 patients with community-acquired pneumonia, 61.6% male. The average age was 56.5±16.9 years. The risk-class was estimated calculating the Fine score. Results: In study group we found that 6.3% were in class V, 27.6% in class IV, 22.8%in class III, 24.6% in II and18.6% in class I respectively. The general mortality was 3%, 23.8% in class V. An important aspect of the group was their socio-economic status. About 67% of patients had income under 70 euros. An intriguing finding is a relatively high number of patients with blood urea nitrogen over 30 mg/dL. Hepatic disorders were the most frequent among co-morbid illnesses (this could be partially explained by alcohol abuse, 18.3% patients used more than 21 units/week). Conclusion: There were a high number of low risk patients (I and II risk class) admitted. This situation is explained by low income of the patients. Only 8 out of 21 patients in risk class V were admitted to Intensive Therapy Unit. Despite this class V mortality was 23.8% comparable with anterior studies.

title: User:Netconsult


text:
Talk:Perl Programming/Variables

should the use of the "my" keyword be at least mentioned on this page? i'm still new to perl and i was just confused by the errors i got about global symbols when trying out the code on this page.

Using the "shift" variable in the subroutine at the end of this page without mentioning it previously in the instructional is confusing.

Make it so...

This is unclear on what the datatype of the key of hashes is. Are they always strings?

title: Talk:Perl Programming/Variables


title: User:L1AM~enwikibooks


text:
Cookbook:Traditional Lasagne

Ingredients

 * 2 tbsp olive oil
 * 1 large onion, finely chopped
 * 2 carrots, finely chopped
 * 2 celery stalks, finely chopped
 * 1½ lb (680 g) ground beef
 * 4 cloves garlic, minced
 * 1 can (28 oz/800 g) crushed tomatoes
 * 10–15 basil leaves, chopped or torn
 * ½ tsp dried oregano
 * ¼ tsp black pepper
 * 1 tsp salt
 * ½ tsp white granulated sugar
 * 225 ml dry red wine
 * 1 pack of lasagne pasta sheets
 * 1½ pints (850 ml) béchamel sauce
 * Finely-grated parmesan

Equipment

 * Small nonstick saucepan
 * Dutch oven
 * Rectangular baking dish

Procedure

 * 1) Heat the olive oil in a Dutch oven over medium high heat until shimmering. Add in ground beef and cook, breaking it up with a wooden spoon, until all liquid had evaporated and meat begins to sizzle (10–15 minutes).
 * 2) Stir in wine, scraping the pot to loosen the fond. Simmer until wine has evaporated.
 * 3) Add the crushed tomatoes, bring to a simmer, cover, and simmer for 20 minutes. Meanwhile, prepare the béchamel sauce.
 * 4) Preheat the oven to 375°F/190°C.
 * 5) Mix the basil, oregano, salt, and pepper into the ragu.
 * 6) Place a thin layer of ragu in the base of the ovenproof dish and cover with a single layer of pasta sheets. Spread a layer of béchamel sauce over the pasta. Repeat this until you run out of meat, making sure that you have enough béchamel sauce left to cover the top layer of pasta.
 * 7) Sprinkle grated parmesan over the pasta.
 * 8) Place the dish in the oven on the top shelf and cook for about 45 minutes, or until the top is lightly browned and the sauce is bubbling.
 * 9) Serve.

Notes, tips, and variations

 * Leaner beef will produce a superior flavor, as it produces less fat.
 * Goat cheese works well in the béchamel sauce.
 * Look for San Marzano canned tomatoes. They’re more expensive, but are better quality.
 * Fresh basil and pepper are recommended.
 * You can substitute the ground beef with other meats.

title: Cookbook:Traditional Lasagne


text:
PHP and MySQL Programming/Introduction

Welcome to PHP
PHP started off as a collection of Perl scripts used to aid in the maintaining of personal home pages. Hence, it originally stood for "Personal Home Page." However, the language has grown into a huge open source initiative, used by thousands of amateur and professional programmers world wide. It now is officially known as "PHP: Hypertext Preprocessor," which is a recursive acronym (For some strange reason, open source programmers seem to love recursive acronyms).

The reason it is known as a preprocessor and not merely as a processor, is due to the fact that the php files are sent by the webserver to the PHP preprocessor to be processed. the resulting HTML (Hyper Text Markup Language), is then sent across the internet to the web browser requesting the php page.

PHP has traditionally been used for adding dynamic content onto previously static webpages; however, due to the rapid development of the language, it is now used for writing command line tools, and now has GTK bindings allowing the programmer to write GUI applications!

Since the beginning of version 5 of PHP, with the inclusion of Zend Engine II as PHP's foundation, PHP now can be used to write Object Oriented applications.

You can download PHP free of charge (as it is an Open Source programming language) from http://www.php.net

title: PHP and MySQL Programming/Introduction


text:
PHP and MySQL Programming/File Handling

As with most programming languages, file handling is very important for storing and retrieving a wide variety of data.

Opening and Closing Files
To open a file, we use the fopen function. This function takes in two parameters. Firstly, a String containing the name of the file, and secondly, the mode with which to open the file with. It returns a filehandler. e.g.:

The above code assigns the file name of "text.txt" to a variable called $filename. Then it uses the  function to open up "text.txt" with 'r' mode (meaning "read mode") and returns a filehandler to $f.

To close a file, we simply call the fclose function, and pass it the filehandler. e.g.:

Including a File
It is very easy, in PHP, to include code (be it PHP or HTML) from one file into another. This is achieved by means of the include function.

In the above example, the PHP code will look within the current directory of the PHP file calling the include function, it will then open the objects.php file, and include its content at of that file at the position of the include function.

Writing to a File
The procedure for writing to a file is:
 * 1) Create a file handler.
 * 2) Use the file handler to open up an input stream from a file.
 * 3) Write Data to the file handler.
 * 4) Close the file handler.

Here is an example of writing two lines of text to a file:

fputs is used to write data to the file. It takes 2 variables, firstly, the file handler, and secondly, a String to write to the file handler.

Reading from a File
Reading from a file goes along much the same format as writing to one. The function used to read from a file is fgets function. Which takes in two variables. Firstly, the filehandler from which to read, and secondly, the amount of data to retrieve.

The above code opens up a file, reads the first line of the file, and then displays it. If we wanted to rather read the entire contents of the file into a variable, we could replace the $line=fgets line with:

title: PHP and MySQL Programming/File Handling


text:
Compiler Construction/Case Study 1B

Case Study 1B - C front-end (Lex and Yacc)
The purpose of this case study is to give an example of a compiler/interpreter front-end written in C using Lex and Yacc. An interpreter is used since it allows a working program to be created with minimal extra effort (after the construction of the front-end). This code could be developed into a compiler by replacing the last phase with a compiler back-end.

The code is shown in an order which underlines the processes of creating a compiler, so the same file will be shown multiple times as it is developed.

The case study develops an interpreter for Very Tiny Basic, which is specified in the Case Study 1 section of the book.

The following steps shall be taken to complete the interpreter:
 * Lexical Analysis
 * Syntax Analysis
 * Lexical Analysis with Semantics
 * Abstract Syntax Trees
 * Generating Abstract Syntax Trees
 * Interpreting

Many important features of a useful compiler/interpreter have been left out, for brevity and simplicity, including:
 * Dealing with Errors
 * Optimization

Also some processes do not apply to such a simple language as Very Tiny Basic, for example Name Tables do not apply since only single characters are used to name variables.

Requirements
 * A C compiler
 * Lex or equivalent (flex).
 * Yacc or equivalent (bison).
 * (preferred) The Make utility.

Lexical Analysis
The first draft of the lex file identifies different tokens by returning a certain value in the associated C action. For keywords and operators this is simple, however identifiers, values and comments are trickier.

VTB.l - Version 1 %{

%}

DIGIT [0-9] LETTER [A-Z]

%% "LET"          {return LET;} "IF"           {return IF;} "THEN"         {return THEN;} "PRINT"        {return PRINT;} "REM"[^\n]*    {return REM;} "GOTO"         {return GOTO;} "GOSUB"        {return GOSUB;} "RETURN"       {return RETURN;} "STOP"         {return STOP;} "FOR"          {return FOR;} "TO"           {return TO;} "STEP"         {return STEP;} "NEXT"         {return NEXT;} \"[^\"]\"      {return STRING;} "="             {return EQUAL;} "<>"            {return NEQUAL;} %%

This file can be processed using one of the following lex VTB.l flex VTB.l

You may wonder where all those values we returned are coming from. They will be created by Yacc grammar file when it is processed.

There are some differences from the Very Tiny Basic - Specification in Case Study 1, for instance MULT and DIV in place of MULDIV. This is because we need to know the difference between the two. LineNumber and WholeNumber are lexically identical, and so cannot be separated at this time. Defining the use and category of tokens is left until the next stage.

Syntax Analysis
VTB.y - Version 1 %{ int yylex(void);

void yyerror(char* str) { /*This should handle errors!*/ }

%}

%union { int number; char *string; char var; }

%token NUMBER %token STRING %token VAR_NUM %token VAR_STR %token LET IF THEN PRINT REM GOTO GOSUB RETURN STOP FOR EQUAL TO STEP NEXT SEPARATE NEQUAL LT GT LTEQ GTEQ ADD SUB MUL DIV LPARAN RPARAN

%start lines

%%

lines: line lines | /*Nothing*/ ;

line: NUMBER statement ;

statement: LET variable EQUAL exp | IF test THEN NUMBER | PRINT printItem printList | REM | GOTO NUMBER | GOSUB NUMBER | RETURN | STOP | FOR variable EQUAL exp TO exp STEP exp | FOR variable EQUAL exp TO exp | NEXT variable ;

variable: VAR_NUM | VAR_STR ;

printList: SEPARATE printItem | /* Nothing */ ;

printItem: exp /*       | STRING */ ;

test: exp comparison exp ;

comparison: EQUAL | NEQUAL | LT       | GT        | LTEQ | GTEQ ;

exp:     addsub secondary secList | secondary secList ;

secList: addsub secondary | /* Nothing */ ;

addsub : ADD | SUB ;

secondary : primary priList ;

priList : muldiv primary | /* Nothing */ ;

muldiv : MUL | DIV ;

primary : LPARAN exp RPARAN | variable | NUMBER | STRING ;

Lexical Analysis with Semantics
In this version of the lexer, the header file generated by yacc/bison is included. The header file defines the return values and the union that is used to store the semantic values of tokens. This was created according to the %token declarations and the %union part of the grammar file. The lexer now extracts values from some types of tokens, and store the values in the yylval union.

VTB.l - Version 2

%{

 * 1) include "y.tab.h"
 * 2) include
 * 3) include

%}

DIGIT [0-9] LETTER [A-Z]

%% "LET"          {return LET;} "IF"           {return IF;} "THEN"         {return THEN;} "PRINT"        {return PRINT;} "REM"[^\n]*    {return REM;} "GOTO"         {return GOTO;} "GOSUB"        {return GOSUB;} "RETURN"       {return RETURN;} "STOP"         {return STOP;} "FOR"          {return FOR;} "TO"           {return TO;} "STEP"         {return STEP;} "NEXT"         {return NEXT;} \"[^\"]\"      {yylval.string=malloc(strlen(yytext)+1);                 strcpy(yylval.string,yytext); return STRING;} "="             {return EQUAL;} "<>"            {return NEQUAL;} "<"             {return LT;} ">"             {return GT;} "<="            {return LTEQ;} ">="            {return GTEQ;} {LETTER}        {yylval.var=yytext[0]; return VAR_NUM;} {LETTER}$       {yylval.var=yytext[0]; return VAR_STR;} {DIGIT}+        {yylval.number=atoi(yytext); return NUMBER;} ","             | ";"             {return SEPARATE;} "+"             {return ADD;} "-"             {return SUB;} "*"             {return MUL;} "/"             {return DIV;} "("             {return LPARAN;} ")"             {return RPARAN;}      .               {/*This is an error!*/} %%

Abstract Syntax Trees
Abstract syntax trees are an Intermediate Representation of the code that are created in memory using data structures. The grammatical structure of the language, which has already been defined and has been written down as a YACC grammar file, is translated into a tree structure. Using YACC & C, this means that most grammar rules and tokens become nodes. Comments are an example of what is not put in the tree.

The grouping of operands is clear within the structure, so tokens such as parentheses do not have to be present in the tree. The same applies to tokens which end blocks of code. This is possible because the rules in the grammar file can use these tokens create the tree in the correct shape.

Illustration of grouping in abstract syntax trees (1+3)*4    1+3*4   *            +  / \          / \ 4   +        1   *    / \          / \   1   3        3   4

In this interpreter the Primary/Secondary expression structures could be discarded by collapsing them. This would add complexity to the code, so it is currently not implemented. Rem statements are also kept (without the comment text) since the definition of VTB implies that they are a valid target for Goto. In fact, a goto to a non-existent line is undefined, so this interpreter will issue an error.

absyn.h
Using pointers and dynamic allocation is a must for the tree structure, or else it would be infinite in size and thus use too many resources (think about it). In order to keep the code nice and neat,

/*
 * Abstract Syntax Trees for Very Tiny Basic

typedef struct statement_ *statement; typedef struct exp_ *exp; typedef struct variable_ *variable; typedef exp printItem; /*Not required since it is always an expression.*/ typedef struct printList_ *printList; typedef struct test_ *test; typedef enum comparison_ comparison; typedef struct secondary_ *secondary; typedef struct secList_ *secList; typedef struct primary_ *primary; typedef struct priList_ *priList; typedef enum muldiv_ muldiv; typedef enum addsub_ addsub;

enum comparison_ {equal, nequal, lt, gt, lteq, gteq}; enum muldiv_ {mul,divd}; enum addsub_ {add, sub};

struct statement_ { enum{ let, ifThen, print, rem, goto_, gosub, return_, stop, for_step, for_, next} type; union { struct {variable var; exp e;} let_val; struct {test t; int target;} ifThen_val; struct {printItem item; printList lst;} print_val; /* REM has no value */ int goto_val; int gosub_val; /* RETURN has no value */ /* STOP has no value */ struct {variable var; exp assign; exp to; exp step;} for_val; /* Use for both.*/ variable next_val; } u; };

struct exp_ { int fHasAddSub; /* Flag */ addsub as; secondary sec; secList list; };

struct variable_ { enum { stringV, integerV} type; char v; };

struct printList_ { printItem item; printList next; };

struct test_ { exp a, b;   comparison c; };

struct secondary_ { primary p;   priList list; };

struct secList_ { addsub as; secondary s;   secList next; };

struct primary_ { enum {bracket, var, integerP, stringP} type; union { exp bracket_val; variable var_val; int integer_val; char *string_val; } u; };

struct priList_ { muldiv md; primary p;   priList next; };

statement LetStatement(variable var_, exp e_); statement IfThenStatement(test t_, int target_); statement PrintStatement(printItem item_, printList lst_); statement RemStatement; statement GotoStatement(int line); statement GosubStatement(int line); statement ReturnStatement; statement StopStatement; statement ForStatement(variable var_, exp assign_, exp to_, exp step_); /* Step can be NULL */ statement NextStatement(variable var); exp AddSubExp(addsub as_, secondary sec_, secList list_); exp PlainExp(secondary sec_, secList list_); variable StringVariable(char v_); variable IntegerVariable(char v_); printItem NewPrintItem(exp e_); printList NewPrintList(printItem item_, printList next_); test NewTest(exp a_, exp b_, comparison c_); secondary NewSecondary(primary p_, priList list_); secList NewSecList(addsub as_, secondary s_, secList next_); primary BracketPrimary(exp e_); primary VarPrimary (variable v_); primary IntegerPrimary(int n_); primary StringPrimary(char *str_); priList NewPriList(muldiv md_, primary p_, priList next_);

absyn.c
The purpose of absyn.c is to provide initializing routines for all of the structures that are used in the abstract syntax trees. This code is not very interesting, and it is very repetitive.

/*
 * Abstract Syntax Trees for Very Tiny Basic
 * 1) include
 * 2) include "absyn.h"
 * 1) include "absyn.h"

 * 1) define safe_malloc malloc

statement LetStatement(variable var_, exp e_) { statement ret = safe_malloc(sizeof(*ret)); ret->type = let; ret->u.let_val.var = var_; ret->u.let_val.e = e_; return ret; }

statement IfThenStatement(test t_, int target_) { statement ret = safe_malloc(sizeof(*ret)); ret->type = ifThen; ret->u.ifThen_val.t = t_; ret->u.ifThen_val.target = target_; return ret; }

statement PrintStatement(printItem item_, printList lst_) { statement ret = safe_malloc(sizeof(*ret)); ret->type = print; ret->u.print_val.item = item_; ret->u.print_val.lst = lst_; return ret; }

statement RemStatement { statement ret = safe_malloc(sizeof(*ret)); ret->type = rem; return ret; }

statement GotoStatement(int line) { statement ret = safe_malloc(sizeof(*ret)); ret->type = goto_; ret->u.goto_val = line; return ret; }

statement GosubStatement(int line) { statement ret = safe_malloc(sizeof(*ret)); ret->type = gosub; ret->u.gosub_val = line; return ret; }

statement ReturnStatement { statement ret = safe_malloc(sizeof(*ret)); ret->type = return_; return ret; }

statement StopStatement{ statement ret = safe_malloc(sizeof(*ret)); ret->type = stop; return ret; }

/* Step can be NULL */ statement ForStatement(variable var_, exp assign_, exp to_, exp step_) { statement ret = safe_malloc(sizeof(*ret)); if(step_ == NULL) { ret->type = for_; } else { ret->type = for_step; }   ret->u.for_val.var = var_; ret->u.for_val.assign = assign_; ret->u.for_val.to = to_; ret->u.for_val.step = step_; return ret; }

statement NextStatement(variable var) { statement ret = safe_malloc(sizeof(*ret)); ret->type = next; ret->u.next_val = var; return ret; }

exp AddSubExp(addsub as_, secondary sec_, secList list_) { exp ret = safe_malloc(sizeof(*ret)); ret->fHasAddSub = 1; ret->as = as_; ret->sec = sec_; ret->list = list_; return ret; } exp PlainExp(secondary sec_, secList list_) { exp ret = safe_malloc(sizeof(*ret)); ret->fHasAddSub = 0; ret->sec = sec_; ret->list = list_; return ret; }

variable StringVariable(char v_) { variable ret = safe_malloc(sizeof(*ret)); ret->type = stringV; ret->v = v_; return ret; }

variable IntegerVariable(char v_) { variable ret = safe_malloc(sizeof(*ret)); ret->type = integerV; ret->v = v_; return ret; }

printItem NewPrintItem(exp e_) { return e_;}

printList NewPrintList(printItem item_, printList next_) { printList ret = safe_malloc(sizeof(*ret)); ret->item = item_; ret->next = next_; return ret; }

test NewTest(exp a_, exp b_, comparison c_) { test ret = safe_malloc(sizeof(*ret)); ret->a = a_; ret->b = b_; ret->c = c_; return ret; }

secondary NewSecondary(primary p_, priList list_) { secondary ret = safe_malloc(sizeof(*ret)); ret->p = p_; ret->list = list_; return ret; }

secList NewSecList(addsub as_, secondary s_, secList next_) { secList ret = safe_malloc(sizeof(*ret)); ret->as = as_; ret->s = s_; ret->next = next_; return ret; }

primary BracketPrimary(exp e_) { primary ret = safe_malloc(sizeof(*ret)); ret->type = bracket; ret->u.bracket_val = e_; return ret; }

primary VarPrimary (variable v_) { primary ret = safe_malloc(sizeof(*ret)); ret->type = var; ret->u.var_val = v_; return ret; }

primary IntegerPrimary(int n_) { primary ret = safe_malloc(sizeof(*ret)); ret->type = integerP; ret->u.integer_val = n_; return ret; }

primary StringPrimary(char *str_) { primary ret = safe_malloc(sizeof(*ret)); ret->type = stringP; ret->u.string_val = str_; return ret; }

priList NewPriList(muldiv md_, primary p_, priList next_) { priList ret = safe_malloc(sizeof(*ret)); return ret; }

Makefile
Since we are working with standard *nix tools and the normal build system used on *nix is make, it is useful to write a Makefile for the interpreter. Keep in mind that most compilers/interpreters are very large and need a more advanced build system than this example. They may require CVS, autoconf and many makefiles distributed across different directories. Since this one only uses five files, it is quite trivial.

DEBUG_CFLAGS     := -Wall -Wno-unknown-pragmas -Wno-format -g -DDEBUG -O0 DEBUG_LDFLAGS   := -g RELEASE_CFLAGS  := -O3 RELEASE_LDFLAGS :=

DEBUG := YES
 * 1) Comment out following line if you need optimization ;-)

POSTFIX := .exe
 * 1) Comment out following line if you're not using Windows/Dos

ifeq (YES, ${DEBUG}) CFLAGS      := ${DEBUG_CFLAGS} LDFLAGS     := ${DEBUG_LDFLAGS} else CFLAGS      := ${RELEASE_CFLAGS} LDFLAGS     := ${RELEASE_LDFLAGS} endif

.PHONY : all clean

all : vtbi${POSTFIX}

vtbi${POSTFIX} : vtbi.o y.tab.o lex.yy.o absyn.o	gcc ${LDFLAGS} ${CFLAGS} -o vtbi vtbi.o y.tab.o lex.yy.o absyn.o

clean : -rm *.o y.tab.h y.tab.c lex.yy.c *.exe

y.tab.c : VTB.y	bison -yd VTB.y -r state

y.tab.h : y.tab.c	echo "y.tab.h created by Bison as well as y.tab.c"

lex.yy.c : VTB.l	flex VTB.l %.o : %.c	gcc -c ${CFLAGS} $< -o $@

Generating Abstract Syntax Trees
VTB.y - Version 2 The lexer is now giving values for tokens and the abstract syntax tree structure has been written. Next the grammar file is updated to construct the trees from what the rules and semantic values. All the tree node types are added to the union declaration. Rules must be given types and return the correct type.

%{ int yylex(void);
 * 1) include
 * 2) include "absyn.h"

void yyerror(char* str) { /*This should handle errors!*/ }

void addLine(int line, statement stm);

%}

%union { /* Token Types */ int number; char *string; char var; /* Abstract Syntax Tree Types */ statement stm; exp exp; variable variable; printList printList; test test; comparison comp; secondary sec; secList secList; primary pri; priList priList; muldiv muldiv; addsub addsub; }

%token NUMBER %token STRING %token VAR_NUM %token VAR_STR %token LET IF THEN PRINT REM GOTO GOSUB RETURN STOP FOR EQUAL TO STEP NEXT SEPARATE NEQUAL LT GT LTEQ GTEQ ADD SUB MUL DIV LPARAN RPARAN

%start lines

%type statement %type exp %type printItem %type variable %type  printList %type test %type comparison %type secondary %type  secList %type primary %type  priList %type muldiv %type addsub

%%

lines: line lines | /*Nothing*/ ;

line: NUMBER statement		{addLine($1, $2);} ;

statement: LET variable EQUAL exp		{$$=LetStatement($2,$4);} | IF test THEN NUMBER			{$$=IfThenStatement($2, $4);} | PRINT printItem printList		{$$=PrintStatement($2, $3);} | REM					{$$=RemStatement;} | GOTO NUMBER				{$$=GotoStatement($2);} | GOSUB NUMBER				{$$=GosubStatement($2);} | RETURN				{$$=ReturnStatement;} | STOP					{$$=StopStatement;} | FOR variable EQUAL exp TO exp STEP exp {$$=ForStatement($2, $4, $6, $8);} | FOR variable EQUAL exp TO exp {$$=ForStatement($2, $4, $6, NULL);} | NEXT variable				{$$=NextStatement($2);} ;

variable: VAR_NUM				{$$=IntegerVariable($1);} | VAR_STR				{$$=StringVariable($1);} ;

printList: SEPARATE printItem printList		{$$=NewPrintList($2,$3);} | /* Nothing */				{$$=NULL;} ;

printItem: exp					{$$=NewPrintItem($1);} /*       | STRING */ ;

test: exp comparison exp			{$$=NewTest($1, $3, $2);} ;

comparison: EQUAL	{$$=equal;} | NEQUAL	{$$=nequal;} | LT		{$$=lt;} | GT		{$$=gt;} | LTEQ		{$$=lteq;} | GTEQ		{$$=gteq;} ;

exp:     addsub secondary secList	{$$=AddSubExp($1, $2, $3);} | secondary secList		{$$=PlainExp($1, $2);} ;

secList: addsub secondary secList	{$$=NewSecList($1, $2, $3);} | /* Nothing */			{$$=NULL;} ;

addsub : ADD		{$$=add;} | SUB		{$$=sub;} ;

secondary : primary priList	{$$=NewSecondary($1, $2);} ;

priList : muldiv primary priList	{$$=NewPriList($1, $2, $3);} | /* Nothing */			{$$=NULL;} ;

muldiv : MUL		{$$=mul;} | DIV		{$$=divd;} ;

primary : LPARAN exp RPARAN	{$$=BracketPrimary($2);} | variable		{$$=VarPrimary($1);} | NUMBER		{$$=IntegerPrimary($1);} | STRING		{$$=StringPrimary($1);} ;

title: Compiler Construction/Case Study 1B


text:
User:Kisubo:sandbox

(This is a sandbox for user Kisubo 13:09, 6 February 2006 (UTC))

Next Page: Edit Mode HotKeys Review

Previous Page: Modeling a Gingerbread Man

This tutorial needs some more explaining as to what is going (and why) in section 4.

In the following tutorial, you will use:  polygon mesh face loop cutting spin dup subdivision surfaces subdivision creases bevel set smooth multiple materials extrusion merge vertices remove doubles constraints

1. Press NUM-1, 7 or 3 then SPACE →add→mesh→cube to make a cube aligned to the axes.

2. Hit tab to go into edit-mode and select all faces to prevent bevel messing up normals. Hit WKEY->bevel, recursion->1 (you'll see why later) then choose bevel size. Bevel of 0.15 is ok.

3. In editmode, go to the Editing tab (F9) and look at the mesh tools 1 panel. In Blender 2.37, there is a set of buttons for edge measuring. Turn on Edge Length and note the length of one of the sides of the square faces. This should be 1.7 if the above settings were used.

4. A typical die has a grid of 9 possible positions for the dents and the gap between the dents is the dent radius (or half the diameter). So, there are conveniently 10 units on each edge of the square faces, where the gaps use 4 of the units and the 3 dents use two each. This means the gaps are of size 1.7/10 = 0.17 and the dents (1.7x2)/10 = 0.34.

5. To make these segments, use the face loop cut tool. Press KKEY->face loop cut and select one of the edges.

click and you get a blue line to position.

Because it's very difficult to position using percentages, especially after the first segment is made because you then have to work out percentages of what's left but also because you can't seem to input exact values, place the blue line to the far left edge and click once. Do not click again because this line is on top of another one and it will be tricky to select it again. If you make a mistake, hit UKEY or CTRL+ZKEY to undo. Now press GKEY then YKEY to move the line along the axis (this is why the cube needed to be aligned to the axes first). I'm using YKEY because of the way my cube is setup - the blue line moves along the green axis. If you've done it another way round, use the appropriate axis. After hitting GKEY, YKEY, enter the exact value of the gap that we measured (0.17) and hit return - if you make a mistake before hitting return, hit delete and retype the number or press UKEY or CTRL+ZKEY after hitting return. Select the remaining segment to the right of the line, cut this and move the blue line as far as you can, which will be to the line you just made. Move this line to 0.34 along y because it is where the dents go.

6. Repeat step 5 with the remaining segment until you have made 6 cuts of alternating size (0.17, 0.34, 0.17, 0.34, 0.17, 0.34) and get something like this:

7. Now turn the cube round and do step 5 for the adjacent edge until you get the grid forming. Note, you move the cuts along the x-axis now so do GKEY, XKEY, 0.17 etc. Don't worry if the last edge says 0.169 instead of 0.17. You can see the grid of 9 squares mentioned earlier:

8. The problem here is that it is very time consuming to do this for the remaining 5 sides of the die. Instead, we will just duplicate the one we have done already. But first the rest needs to be deleted. So go into front view (NUM1) and orthographic mode (NUM5). Also turn off depth buffer clipping. Use vertex select mode and select the bottom vertices: Make sure these are the right ones by rotating your view with the middle mouse button. Now press x and select 'vertices'. This should leave only the top side of the die: We now have to duplicate and rotate this side. There is a very handy tool to save doing this manually called spin dup located in the editing tab (F9) in the mesh tools panel. We want to duplicate the side 3 times in both the x and y axes to complete the cube - 3 times isn't necessary in the second axis because we will already have a bottom side but it's easier that way. Spin Dup works relative to your camera and the cursor. So, put the camera into front view (NUM1) and orthographic mode (NUM5). If you haven't moved the cube, the 3D cursor should be at the center of the cube (at the pink dot). If not, go into object mode (TAB) and select what's left of the cube and press SHIFT+S and select 'cursor to selection'. You can also manually move the cursor by going to the view menu -> view properties and editing the 3D cursor position. In this tutorial, it should be at (0,0,0). The settings for spin dup are that we need 3 duplicates over a 270 degree rotation with 1 turn. Now press spin dup to get the following: You will see the currently selected side is no longer the top side. This means we have to go into top view and duplicate around the z-axis so go into top view (NUM7) and hit spin dup again to fill the remaining sides.

9. There will now be a few overlapping points. To get rid of these, go to the editing tab again (F9) and in the mesh tools, there is a button called rem doubles. Select all the vertices by pressing AKEY and select remove doubles. This may leave some overlapping points because the threshold for removing doubles is set at 0.001 and some points might be just outside that value. Setting it to 0.003 should get rid of all the doubles to leave the die with 384 vertices (this information is at the top of the Blender window). You can check by counting that each side has 8x8 vertices and there are 6 sides on the cube.

10. The die needs the dents added. Select one of the faces where a dent would go and extrude the face by hitting EKEY and then ESC. Do not click after hitting EKEY. Collapse this face by using ALT+M to merge the 4 corners of the extruded face into the centre where it will tell you you have removed 3 vertices. You should get the following: Do this for the configuration of the dots on that side. So for example, 5 would look like this:

11. Select one of the edges of the dents to check the size is 0.34. Remember the dent radius was 0.17. We need to use this value to lower the centre point of the dents down. Select all the 5 centre points at once to save time and move them inwards by 0.17. The side I put the 5 dents on here was the top so I move the vertices inwards by pressing GKEY, ZKEY, -0.17 and hitting ENTER. I then get this:

12. TAB out of editmode. If you haven't done this already, hit set smooth in the editing panel and turn on subdivision surfaces It should look something like this:

13. On a die, the edges of the dents are usually sharp so we'll use subsurface creasing to do that. Go back into editmode and with the edge select mode on, select all the perimeters of the dents like so (it may help to turn off subsurf for the moment): Press SHIFT+EKEY to enable creasing and move the mouse until the display says crease is at 1. After pressing SHIFT+EKEY, you can then set crease values in the information box that you get by pressing NKEY when objects are selected. This can be useful to check if all the edges have the right crease because it gives you the average crease value and if it is less than 1, there is an edge wrong.

14. Repeat steps 10,11 and 13 for all the sides of the die. REMEMBER, a die is numbered so that opposite sides add up to 7. In my example, that means I put 2 on the bottom etc. Once you finish, if you turn on subdiv level 2, you will get something like this:

15. You can make a test render now to see that the dents look the right size and the bevel is right. So, turn the subdivision level for the rendering up to 3. To help position the camera so that you centre the die, you can make the camera look at the die by adding a track-to constraint to it. I prefer to track an empty though, because it is more flexible. Make an empty by going into top down view (NUM7) and hitting SPACE → add → empty. It's always best to go into one of the set orthographic views so as to align new objects to the axes. If you add something misaligned, just go to the object menu then clear/apply > clear rotation (or ALT+RKEY). Because the empty was created at the origin, you might not be able to see it as it is inside the die. Hit ZKEY to enable wireframe mode and select the empty. Just move it outside the cube until we get the constaint set up. To add a track-to constraint, select the camera first then SHIFT+RMB the empty and press CTRL+TKEY and choose track-to from the list. Move the empty back inside the die. You edit constraints in the object tab (F7). Add a couple of lamps (both intensity 1) to get the scene like this or feel free to experiment with a more advanced lighting setup:

16. To render, set the size of the image you want. 800x600 is a decent size so put these settings in the format panel in the Scene tab (F10). In the render panel, make sure 100% is selected. If it's 50%, the render will come out as 400x300. For preview renders, don't turn on OSA, which is anti-aliasing because it slows your renders down significantly. Try to only use it for a final render. Another way to position the camera is by selecting it and then looking through it as you move it. Look through the camera by pressing NUM0. Use the GKEY to pan across and rotate around the local axes of the camera by pressing say RKEY,XKEY,XKEY to rotate in x axis. To zoom in and out press GKEY, ZKEY, ZKEY. The mouse wheel zoom moves your view towards and away from the camera. Another important point is to set the image format. This is done in the format panel. The listbox has a number of image types. I find that png is generally the best because it is lossless and offers the highest compression among the lossless formats. It also supports an alpha channel for transparency. When rendering an animation, it is better to render as an image sequence than as a movie because it is easier to edit these and repair broken frames. Quicktime supports loading of image sequences and you can save as a movie using a wide range of compression formats. To save the render, go to the file menu → save image and type in the full name of the image including the extension e.g. die.png. The output should now be looking something like this:

17. To give it some colour, we will need to use multiple materials because a typical die has dents that are a different colour from the die itself. Go to the editing section in the button panel again and make sure the die is selected. In the links and materials panel, there is a section for materials and the number in the box should be at zero. It may be at 1 if you have assigned a material to the object already. Add enough to make 2 materials in total. Go back to the Shading panel (F5) and there is a box at the very top of the material panel with the number 2 beside it. Click this number to make the two materials you've just created independent. Use the arrows to the right of the ME button to switch materials. Make material 1 bright red by just picking red in the colour picker or by setting the RGB sliders. Make material 2 white by doing the same. Or pick whatever colour you prefer and material settings.

18. These colours need to be assigned to the right parts of the die. Go into editmode and turn off subsurf to help. Select the inner faces of the dents - if you accidentally don't press the SHIFT, press CTRL+ZKEY or UKEY to undo. Once they are all selected, go to the Editing tab again and the material panel. Select the colour for the dents. There is a button that says assign - press it and it will make the dents white but the die remains red. Turn subsurf back on and render with OSA (only put it up as high as you need for the resolution of the image you are rendering): Extra: The reason I modelled the die this way is because it is also very easy to change the sizes of the components e.g. the bevel and the dent size. You do this by selecting the vertical or horizontal segments and just scaling them in one axis. Here we will reduce the dent size and the bevel by half. Go into front view (NUM1), turn off clipping and select a line containing dents. Then just scale in one axis e.g. SKEY, XKEY, 0.5. Remember to have your pivot point set to median: Do this horizontally and vertically around the die. You should need to scale 9 times for the dents and 6 times for the bevel: You may need to add extra geometry once you are satisfied with the sizes of the dots and the bevel so that the edges of the die don't look warped due to the subdivision. You can use face loop cut again for that and add extra lines in the middle of the gap segments.

Next Page: Edit Mode HotKeys Review

Previous Page: Modeling a Gingerbread Man

title: User:Kisubo:sandbox


text:
ACT Study Guide/Miscellaneous Tips

This section includes miscellaneous tips that are of use during your test. These tips apply to the whole test unless otherwise noted.

Pace wisely
While taking the ACT, make sure to answer each question quickly and give yourself ample time to finish the test. This is especially true in the English section which has more questions than any other section in the test. For this purpose it is recommended that you bring a watch to the exam in order to pace your time. Make note of the length of time in each session as each session has different timing and glance at the watch every 5 questions or so to keep up with pace. Make sure the watch does not have any alarms set on it. Any alarms going off during the test will get you disqualified, so make sure that they are deactivated. Also, it may be preferable to lay the watch on the table opposed to wearing it, for the sake of comfort.

Attempt to finish questions in order
Time is used most conservatively when questions are answered in order. It is still acceptable not to answer a difficult question, but keep in mind that this is where most of your time is lost. If the question is too hard then move on, but if you have a conflict between two answers, make a guess quickly and then move on. Either way, it is important to make a decision and commit to it. If the question takes more than 2 guesses, you should immediately move to the next one. Either way, never linger on a question for more than 10 seconds.

Read materials first
When coming across a reading or science question always read through the materials before answering. This is especially important during the reading section. This is important, because if you do not read the materials, it will take you longer to answer the questions and you will have a greater chance of getting them wrong. Make sure you read, but read quickly, as the test does not allot you much time. For the science section, a quick skimming of the chart and graph heading should help you out while answering questions.

title: ACT Study Guide/Miscellaneous Tips


text:
Movie Making Manual/Post-production/Video codecs

Perhaps the first thing we should look at is just what a video codec is.

Well, it's simple. Codec stands for COmpressor - DECompressor. Choosing the right codec to use is the hard part for many. As the name suggests, a codec Compresses and Decompresses a file, Video, Audio or otherwise. There are many codecs out there, and many variations of those too. So this article is not aimed at informing you, the reader of all the codecs available, but rather to make it easier to select the right codec for the right job using the most common codecs.

When it comes to Video Codecs, much of it is personal preference. Some people do not mind compressing video until it looks pixilated just so long as they can fit more on a disc. Others will accept nothing less than perfect quality and the slightest blemish on an otherwise fine video sends them into a fit. This range of opinion makes it hard to give a definite answer as to what codec is "best." And in all truth, none of them are. Every codec has a different use and was designed with that use in mind, even if it is used for other things today.

1. Compressing Codecs: What are they good for?
CODECS allow us to compress video and audio so that more can fit onto a disc. Whether it be a Hard Disk, Compact Disc, Digital Versatile Disc or the small memory cards used in portable media players. A common misconception is that compressing video can make it poor quality. This is only half true, it's all a matter of what CODEC is used and how the codec was configured. For example, DVD-Video uses MPEG 2 compression, this is a high quality compression CODEC that was made for DVD. If you were to make a SVCD (Super Video CD), you would still be using MPEG 2 but it would be configured in a different way to fit the data on a CD instead of a DVD. Same CODEC = different quality. In short, CODECS allow us to fit more data on a storage device, but the more we want to fit, the more it has to be compressed. The more you compress, the more quality you are losing, although how apparent the quality loss is depends on the CODEC used.

2. They had them first...
For many years, we have used CODECS in every day life. DVD-Video uses MPEG 2. VCD uses MPEG 1. Videos we watch on the internet can use any number of CODECS. But for a long time, the use of CODECS to encode video was the domain of professionals with large workstations and even larger budgets. As more and more technology is made available to consumers, we now have the chance to do what the big guys have been doing for years. A few years ago, making your own DVDs was only on the drawing board. But the hardware and software required to do it is now available for all. And now the market is flooded with free codecs such as the Windows Media and OGG-Vorbis formats. And while some, like MP3, require payment to buy the codec, there is no shortage of codecs for consumers and even professionals on a budget to use.

3. The Main Formats
Unlike the VHS-BETA and DVD+/- wars, codecs do not commonly war with each other. They all try to make a better product, but in the end one codec is going to replace them all. So you can use a codec with confidence that it will not soon become unsupported or obsolete. Here is a guide to the main CODECS used.

MPEG 1: Seen sometimes for Internet downloads but is more commonly used for the Video CD standard. It offers roughly the same or better video quality than VHS but not as good as DVD or SVCD.

MPEG 2: Used on DVD and in another form for SVCD. When used on a standard DVD, it offers great picture quality and supports widescreen. When used on SVCD, it is not as good but is certainly better than VCD. Unfortunately, SVCD will only fit around 40 minutes of video on a CD, VCD will fit an hour.

WMV (Windows Media Video): Once only used for Internet streaming and distribution, it is now one of the hottest codecs available. It can do anything from low resolution video for dial up internet users to High Definition video to view on an HD TV. Files can be burnt to CD and DVD or output to any number of devices. It is also useful for Media Centre PCs.

Real Video: Once the leader in internet video, it is now losing some ground to WMV but is still very common.

QuickTime: A file format developed by Apple, also used for internet video. QuickTime also refers to software for playing video. QuickTime for Windows is the Windows version. QuickTime available directly from Apple supports about 12 codecs such as Animation codec, Apple Intermediate codec, Apple Pixlet codec, Cinepak, Component, DV (many flavors), Motion JPEG codec, Photo JPEG codec, and Sorenson. The quality of older codecs were not usually as good as WMV and Real Video and downloads took longer. Now Apple emphasizes the much more efficient MPEG 4 and MPEG 4 H.264 codecs but older codecs still play with the QuickTime software. QuickTime Pro ($30) will compress iPod movies (MPEG 4) and H.264. The iPod movies look great but Apple's H.264 compresses the color so that files are half the size of WMV files.

MPEG 4: The latest MPEG codec can be used for internet and on disc like WMV.

DivX & Xvid: Types of MPEG 4.

H.264: Type of MPEG 4 used on next-generation HD-DVD and BluRay discs.

DV Stream A codec and file format used for miniDV tapes and DV camcorders.

There are many more codecs available. To find out which is right for you, you should test each one and see what best suits your needs.

-- Spencada 07:27, 9 Jan 2005 (UTC)

4. Case Study in Codecs
The Star Movie Shop creates Editing Workshops for beginning film students to learn to edit scenes from television dramas and motion pictures. The Star Movie Shop locates all the film dailies for a scene from a television drama as NTSC video (29.97 frames per second), digitizes the dailies, then removes the extra frames added during the telecine (inverse telecine), then adds the scene name and frame number to every frame using a window burn and finally compresses the dailies for editing on personal computers.

To compress the clips, the Star Movie Shop must decide which codec to use. This has not been easy.

The Star Movie Shop started developing these products eight years ago [year needed] when most schools still used Adobe Premiere 4.2 and had extremely limited disk space. The Adobe Premiere editing program works with movies of any frame size but the most common for schools was 320 by 240 pixels at 24 frames per second (which is the standard speed of motion picture film.)

At that time, QuickTime was the most popular file format for digital video and the current version was QuickTime 3 (it is now up to version 7). With QuickTime 3, Apple introduced the Sorenson 2 codec which was extremely slow to compress but looked better than any other codec on the market. It also offered a variable bit rate option which made the files for movies very small. The Sorenson 2 codec is extremely efficient. While it would be impratical to compress full-frame scene with the Sorenson 2 codec, it works fine for half size frames.

Very Simple; Very Easy
Therefore, for Disk #02 which has 24 Unedited Scenes on a single DVD-Data disk, the Star Movie Shop used the Sorenson 2 codec which works with any version of QuickTime manufactured in the last ten years on both the Macintosh and Windows computers. This was good.

Fat and Awkward
A few years later, the DV format became very popular. Dozens of terrific, new editing programs became available (including iMovie and Movie Maker) but they only work with DV movies. The DV codec is very popular because it was the first codec to be used as a standard for digital camcorders. But the DV codec compresses only 5 to 1 and only at full frame size which is 720 by 480 (non-square) pixels for NTSC video at 29.97 frames per second. (This is NOT film speed.) This makes DV very inefficient... but faster, specially for compression. With this DV format, only one (1) scene can be stored on an entire DVD-Video disk for a two minute scene with a 5 to 1 shooting ratio.

Now users with DV editing programs cannot use Disk #02 from the Star Movie Shop. Using the Movie Player that comes with QuickTime Pro or QuickTime for Windows Pro, users can convert the Sorenson 2 movies from Disk #02 to the DV format but unfortunately, only by stretching the clips so they looked really ugly. QuickTime Movie Player does not letterbox movies when it enlarges them. Also, it has to double some frames to convert from 24 fps to 29.97 pfs. That makes the movies bigger and more awkward to edit. Very bad news!!!

Therefore, on the new DVD disks from the Star Movie Shop, there is only one scene per disk. The DVD-Video section has the clips in the MPEG 2 format compressed 200 to 1. But in the DVD-Data section the clips must be in the DV format if people have a DV Editing program.

If QuickTime Pro was able to rip the MPEG 2 movies from the DVD-Video section, that would save a huge amount of disk space. But it cannot. That is why the dailies must be in two different formats (two different codecs) on the same disk. Really dumb!!!

Incompatibility
This would not be too bad except there is an even greater problem. Different editing programs prefer different formats. iMovie prefers DV movies in the DV Streaming file format while Final Cut Express prefers DV movies stored in the QuickTime file format (not the streaming format), compressed with the DV codec. Neither of these works at motion picture speeds of 24 frames per second which is the speed of all film dailies. And since NTSC video and PAL video have different frame rates and frame sizes, this adds another degree of complexity in providing the film clips in a format that people can use.

Only Final Cut Pro can work with movies (usually in the Photo-JPEG codec) at full frame (640 by 480 square pixels) at 24 frames per second. (The Sorenson 2 codec could not be used because it is too slow for compressing full frame scenes. Sorenson 3 only works with new versions of QuickTime.  The only universal codec that works well at this size is Photo-JPEG.)

Options Equally Awkward
If the user is sophisticated, the user can convert the clips from one file format to another (within limits). The problem is this is sometimes very awkward. Apple's newest version of QuickTime does not correctly convert clips from film dailies (at 24 fps) to 29.97 frames per second when using the QuickTime option. If you do this, the DV clips compressed in the QuickTime file format, store the clips at 24 fps which is unusable in all DV editing programs, even Apple's Final Cut Express. Therefore, users must convert the dailies to DV Streaming which converts correctly to 29.97 fps and then convert DV Streams to QuickTime movies... in two separate steps.

Today
The Star Movie Shop still sells Disk #02 - 24 Unedited Scenes to young filmmakers who want to see how movies are filmed in Hollywood but the disk cannot be used as an editing workshop since beginning filmmakers cannot afford an editing program which will work with this frame size and frame rate. (Final Cut Pro costs too much for toddlers and Adobe Premiere 4.2 is no longer available.)

The newest disk from the Star Movie Shop is an unedited scene called "Home Wrecker" from Buffy, the Vampire Slayer. Fortunately, this scene is so short, the dailies can be stored in a variety of formats on the disk. By carefully searching for very short scenes, the Star Movie Shop has found two other scenes ("Hearing Voices" from Law and Order and "Fireworks Display" from Northern Exposure) which will fit on one disk each.

However, longer scenes from the Star Movie Shop require up to 3 DVD disks (and that is just with the NTSC DV codec video clips, not PAL.) This is expensive and awkward. So rather than solve problems, new and better codecs are creating new problems. The disks come with MPEG 4 clips but since the clips are compressed with Apple's QuickTime Movie Player, the color is not good so these are only for situations where nothing else will work. (And they require QuickTime 7 Pro which very few people have.)

It will not be interesting to see if Blue Ray disks will make this easier or more complex.

-- Robert Elliott September 2006 (PST)


text:
Cookbook:Frito Pie (Baked)

| Texas cuisine

Frito pie is a corn chip and chili con carne dish popular in the United States. Frito pie may be made with just corn chips, chili, and shredded cheese, but often has other condiments added as well. Sour cream, jalapeños, onions, hot sauce, tomatoes, and various other Latin American ingredients are often used.

This is a traditional, and basic, recipe for Frito pie. Minor variants are common.

Ingredients

 * 3 cups (710 ml) Fritos corn chips
 * 1 cup (240 ml) grated cheddar cheese
 * 2 cups (590 ml) chili (homemade or canned)

Procedure

 * 1) Preheat oven to 350 °F (175 °C).
 * 2) Spread 2 cups of Fritos in a baking dish.
 * 3) Sprinkle half of the cheese over the Fritos.
 * 4) Spread the chili over the Fritos.
 * 5) Bake for 15–20 minutes until cheese is bubbly.
 * 6) Add remaining cheese and Fritos to top of pie.
 * 7) Serve hot.

title: Cookbook:Frito Pie (Baked)


text:
Microsoft Certified Professional Developer/Exam 70-528/Web-Based Client Development

Creating and Programming a Web Application

 * /Create and configure a Web application/
 * Add and configure Web server controls
 * /Web Server Controls/
 * HTML Server Controls
 * /Specialized Server Controls/
 * /Create event handlers for pages and controls/
 * /Manage state and application data/
 * Implement globalization and accessibility
 * MSDN2 - Globalizing and Localizing ASP.NET Web Pages (Visual Studio)
 * MSDN2 - ASP.NET Accessibility (Visual Studio)
 * /Implement site navigation and input validation/
 * Write an ASP.NET handler to generate images dynamically for display on a Web page
 * MSDN2 - Introduction to HTTP Handlers
 * Example – An ASP.NET handler that returns a dynamically generated image
 * MSDN - Image Generation Service for ASP.NET 1.1
 * /Configure settings for a Web application/
 * /Program a Web application/

Integrating Data in a Web Application by Using ADO.NET, XML, and Data-Bound Controls

 * /Implement data-bound controls/
 * /Manage connections and transactions of databases/
 * /Create, delete, and edit data in a connected environment/
 * /Create, delete, and edit data in a disconnected environment/
 * /Manage XML data with the XML Document Object Model (DOM)/
 * /Read and write XML data by using the XmlReader and XmlWriter/

Creating Custom Web Controls

 * /Create a composite Web application control/
 * /Create a custom Web control that inherits from the WebControl class/
 * /Create a composite server control/
 * /Develop a templated control/

Tracing, Configuring, and Deploying Applications

 * /Use a Web setup project to deploy a Web application to a target server/
 * Copy a Web application to a target server by using the Copy Web tool
 * MSDN2 - Copying Web Sites with the Copy Web Site Tool
 * Precompile a Web application by using the Publish Web utility
 * MSDN2 - Publishing Web Sites
 * /Optimize and troubleshoot a Web application/

Customizing and Personalizing a Web Application

 * /Implement a consistent page design by using master pages/
 * /Customize a Web page by using themes and user profiles/
 * /Implement Web Parts in a Web application/

Implementing Authentication and Authorization

 * /Establish a user's identity by using forms authentication/
 * /Use authorization to establish the rights of an authenticated user/
 * /Implement Microsoft Windows authentication and impersonation/
 * /Use login controls to control access to a Web application/

Creating ASP.NET Mobile Web Applications

 * Create a mobile Web application project
 * MSDN - Creating an ASP.NET Mobile Web Application
 * Use device-specific rendering to display controls on a variety of devices
 * MSDN - Device-Specific Rendering
 * MSDN -  Element
 * MSDN - deviceFilters Element
 * Use adaptive rendering to modify the appearance of Web server controls
 * MSDN - Architectural Overview of Adaptive Control Behavior
 * Use the mobile Web controls to display content on a device
 * MSDN - Design and Rendering Concepts for ASP.NET Mobile Controls
 * MSDN - Getting Started with ASP.NET Mobile Controls


text:
User:Garyj

hello? anybody home? I have a bunch of materials in your discussion page. Please go look around...thanks.

Prometheuspan 19:43, 6 February 2006 (UTC)

title: User:Garyj


text:
Portuguese/Interjections

An interjection is a short word used solely to express emotion. They help to make your Portuguese sound more authentic, and expand your expressive capabilities. They give your language more flavor.

Portuguese speakers are very expressive, so a familiarization with at least some of these terms is a must. então - When used as an interjection, então can mean the same as "Anyway!" It normally means "Then..." or "So..." Ah! - Is used as it is with most languages. Socorro! - Means the same as "Help me!", as it is used when there is an immediate danger of some kind. Vamos! - Used in place of então, similar to "anyway". Puxa! - Expresses admiration, like "Wow!". Perdão! - Literally, "Pardon!", used to convey an apology. Typically less formal than its literal English translation. Arre! - Expresses impatience. Like "Come on!", "Move". To create an interjective expression from an adjective, use the combination Que + adjective!. This is the equivalent of saying "How [adjective]!" in English. For example:
 * Que bom! - "How nice!"
 * Que medo! - "How frightening!"
 * Que terrível! - "How terrible!"

title: Portuguese/Interjections


text:
Wikijunior talk:Dinosaurs/Apatosaurus

Misinformation
The article states "Scientists now know that the back bones of the Apatosaurus grew together as the animal gets bigger." I think it would be misinformation to say scientists "know". It took them nearly a hundred years to figure out the wrong head was on the body. And in another hundred years they'll probably change their minds again. The most that can be said is that scientists speculate about these things since they weren't there to make the observations first hand. Saying the scientists know is carrying it too far. —Preceding unsigned comment added by 204.87.86.50 (talk • contribs) 13:16, 25 March 2010

Even thought the head has not been spoted it may never be found —Preceding unsigned comment added by 76.18.208.124 (talk • contribs) 01:11, 30 November 2010

Apatosaurus picture
I'm trying to obtain an accurate Apatosaurus picture, featuring the whole body, without the neck tilted up(because it's disputed whether they really could tilt their heads up) and with the right head. A couple of days I have contacted the author of http://www.psychosaurus.com/dino/images/apatosaurus.jpg asking for permission, but no response yet. It would be appreciated if someone could find one. --Konstable 07:38, 9 February 2006 (UTC)

Split this Article
Shouldn't this article be split? There should be an article on Apatosaurus, and a second brief article about the Brontosaurus naming mistake. It's confusing to mix them together IMO. —The preceding unsigned comment was added by Dora Nichov (talk • contribs).
 * I brought this up before actually. And the general opinion seemed to be that Brontosaurus is a much more well known name.  I remember when I was a little kid learninga bout dinos I definitely learned about the amphibious Brontosaurus, and I still have the book displaying it proudly.  The discussion was here: Talk:Wikijunior Dinosaurs.  What you are suggesting is what the English-language Wikipedia does (see Brontosaurus and Apatosaurus), but I think because this is for kids it would just create unnecessary confusion.  Anyway the article here is really not long enough on its own to warrant a split in my view.--Konstable 01:54, 4 September 2006 (UTC)
 * IMO the article should definitely be split. Kids are much more likely to learn about apatosaurus than brontosaurus these days. Just because we learned about brontosaurus when we were kids doesn't mean that todays kids learn the same thing (and in fact, they don't.) There should be one regular article on apatosaurus, and one 'special' article on brontosaurus. --Xixtas 13:35, 5 September 2006 (UTC)

Is "Deceptive" an adequately simple word?
Topic. I'm not sure, I want some opinions. Perhaps "tricky" (although that lacks some of the meaning, and could lead to misinterpretation)? As I said, I'm not sure. 24.205.34.217 23:23, 7 May 2007 (UTC) Also, on the article on Brontosaurus, is it correct to use emotive language to describe the degree of the mistake made ("This was a bad mistake")? Not sure, just asking. 24.205.34.217 23:28, 7 May 2007 (UTC)

title: Wikijunior talk:Dinosaurs/Apatosaurus


text:
Talk:Algorithms/Dynamic Programming

"Note that every leaf of the call tree has the value 0 or 1. All of these ones are summed together to give the final answer, so for any n the number of leaves in the call tree is actually Fn itself!"

Did the author mean to say that there are F(N+1) leaves? If we take the example given, F(6), there are F(6+1) = F(7) = 13 total leaves, *not* F(N) = F(6) = 8. It might also be helpful to mention at this point that there are 2*F(N+1) total nodes and, consequently, 2*F(N+1) total recursive steps required to calculate the Nth number in the sequence.

Please point out where I am wrong.

Calculating fib(n) using its closed form
The author made mention that fib(n) can be calculated efficiently from its closed form. Theoretically I see no problem but I think you have to remember that practically the computer would store the value of the golden ratio in floating point variables which keeps limited precision. Therefore I don't think such an algorithm will be numerically stable. See fibonacci computation for a further discussion of this. Of particular interest is that with standard IEEE 64-bit floats the results break down as early as n=75 and obviously for the standard IEEE 32-bit floats the results breaks down for even smaller n.

title: Talk:Algorithms/Dynamic Programming


text:
Poker/Anaconda

Overview
Anaconda is a variant of seven card stud and has an initial phase of card swapping that gives it its name because the cards in your hand may "snake" their way around the table. It is also known as Pass The Trash because of this initial passing of cards, but that name does not always do it justice because some strategies expect trash to be passed and, therefore, pass higher cards in hopes of making a good hand with low ranked cards. The most descriptive name for this game is 3-2-1 Left because it describes the passing rules in this initial phase.

How to Play
The dealer deals 7 cards down to each player, one at a time, starting with the player to his left. Each player, after looking at his hand, passes three cards to the player on his left. Each player then picks up the three cards from the player on his right. Each player now passes two cards to the player on his left and picks up the two cards from the player on his right. Finally, one card from each player is passed to the left and each player picks up the card from the player on his right. During each passing phase it is important that no player ever has more than seven cards in his hand and therefore must make sure that he passes his card before picking up the cards from his right. Each player now makes the best five card hand from his hand and discards two cards. Each player arranges his hand in whatever order he wishes and then places the hand face down on the table. The top card of each player's hand is "rolled" up and then there is a round of betting until four cards from each player's hand are showing. At this point each player declares whether his hand is a low hand, high hand, or both. This is done by placing a number of chips secretively in your hand and then all players reveal at the same time. A low hand is indicated by an empty hand, a high hand is declared by revealing one chip, and a high and low hand is declared by revealing two chips. Once it is clear what the nature of each hand is, the last card is flipped up.

Who Wins
In games where hands are declared high, low, or both it may be difficult to figure out who wins the pot. Generally, if any player declares "both", that player's hand must beat (not tie) every low hand and every high hand. If a hand declared as "both" does not beat all other hands in the showdown then he does not win anything! If a hand then declared "both" does not win the pot then the pot is split in half. The highest hand of all hands that were declared "high" wins one half of the pot, and the lowest hand of all the hands declared "low" wins the other half of the pot. If there is only one type of hand ("high" or "low") then the entire pot goes to the winner of the best hand of that type. Also, if there is a tie for high or low then each of the players receives half of the pot that was allocated for that type of hand.

title: Poker/Anaconda