text:
AVR Programming
Z SensorWiki
Táto stránka je doslova prevzatá odtiaľto https://ccrma.stanford.edu/wiki/AVR_Programming a má slúžiť ako inšpirácia k tvorbe podobnej v slovenčine ako podpora pre MIPS.
Anatomy of a C program for AVR
The following presents a rough overview and breakdown of a demo program from the avrlib-demos. The code is in the avrlib-demos in the button directory in the file button.c. Details of C syntax and AVR-specific commands will follow.
- The first portion of a C program is usually a bunch of comments that describe the file. Usually this includes the name, author, and date of the file; a revision history; and directions on how to use the file.
//--------------------------------------------------- //--------------------------------------------------- // // AVRLIB-DEMO // For avrlib and avrmini development board. // // // File: button.c // Author: Wendy Ju // based on code written by Michael Gurevich & Matt Wright // // Revision History: // When Who Description of change // ----------- ----------- ----------------------- // 04-Oct-2004 Wendy Ju Created a new instance // 01-Jun-2006 Michael Gurevich makefile->mega32, superfluous #includes // //--------------------------------------------------- // USING THE AVRMINI DEVELOPMENT BOARD, CONNECT // THE LED/PUSHBUTTON JUMPER TO THE PORT B JUMPER. //--------------------------------------------------- // //--------------------------------------------------- // This program will cause LED 0 to light when corresponding // pushbutton 4 is pressed. //---------------------------------------------------
- Next are #includes. They tell the compiler where to look for other bits of code you are using that do not reside in this file. They are normally ".h" or header files that contain macros and function prototypes. Before a the .c file is compiled, the contents of the #includes are literally copied into the file.
// compiler includes #include <avr/io.h> // avrlib includes #include "global.h"
- #defines are "macros". Before the program is compiled, the argument of the #define is simply substituted everywhere the name is used. They are handy for giving meaningful names to numbers and for changing a single value that may be used numerous times in a program without having to change every instance.
#define DELAY 1000
- Function prototypes give the name, arguments and return type of functions that will be used later in the program. They can be included in header files or in the .c file before the function is defined.
int checkButton(int whichButton); void setLED(int whichLED, int on);
- The main function is literally the main part of the code. There can only be one main function in the final compiled program. The code inside the main function is executed sequentially, one line at a time.
int main(void) { // set LED pins as outputs, button pins as inputs outb(DDRB, 0x0F); // Turn off LEDs - looking at the circuit // you can see that they are off when pulled high outb(PORTB, 0xFF); while(1) { // loop forever setLED(0, checkButton(4)); //sampling delay goes here } return 0; }
- Finally, there are function definitions. These are pieces of code that are called from the main function or from other functions, that have a specific functionality that may want to be used over and over.
int checkButton(whichButton) { // On our boards the four buttons are numbered 4, 5, 6, and 7 return (! bit_is_set(PINB,whichButton)); /* Logical negation is because when the button is pushed, the pin is drawn to ground, so the button is "on" when the bit is zero. */ } void setLED(int whichLED, int on) { // On our board the four buttons are numbered 0, 1, 2, and 3 if (on) { //light the LED cbi(PORTB,whichLED); } else { //turn off the LED sbi(PORTB,whichLED); } }
C Syntax
This is a very basic overview of the essential parts of the C language that are frequently encountered when writing simple programs for the AVR. It is obviously impossible to thoroughly cover the C language in a few pages, but this should provide a brief explanation of most things that will be encountered in demo programs. If you know C, you can skip this section. For a better reference, see Kernighan, B.W. and D. M. Richie (1988) The C Programming Language. Prentice Hall.
- Comments are not evaluated by the compiler. They are there to help the programmer. There are two styles of comments that can be used:
// This is a C++-style 'slash-slash comment' /* This is a C-style comment*/ /* These comments must be terminated with a star-slash */
- Declaring a variable means allocating a chunk of RAM on the AVR and giving it a name. After a variable is declared, the chunk of memory can be assigned a value, and that value can be recalled, using its name. A variable declaration looks like this:
u08 myvar; // unsigned 8-bit integer named myvar
where u08 is the type and myvar<tt> is the name. Notice the statement ends with a semicolon, like all C statements. A variable must be declared before it is used, and before any executable statements in the function in which it is declared. Integer types are:
u08 a; // unsigned 8-bit integer (0 to 255) or 0 to MAX_U08 s08 b; // signed 8-bit integer (-128 to 127) or MIN_S08 to MAX_S08 u16 c; // unsigned 16-bit integer (0 to 65535) or 0 to MAX_U16 s16 d; // signed 16-bit integer (-32768 to 32767) or MIN_S16 to MAX_S16 u32 e; // unsigned 32-bit integer (0 to 4294967295) or 0 to MAX_U32 s32 f; // signed 32-bit integer (-2147483648 to 2147483647) or MIN_S32 to MAX_S32
<tt>MAX_U08, etc. are macros that are #defined in the AVRLib.
- An assignment gives a value to a variable, using the assignment operator = :
u08 foo, bar; // define 2 unsigned 8-bit integers foo = 12; // assign the value 12 to the variable foo bar = foo * 10; // assign the 10 times the value of foo to the variable bar
- Arrays are adjacent chunks of memory of the same size that allow convenient indexing. They are defined as follows.
u08 myarray[5]; // define an array of 5 unsigned 8-bit integers u08 myarray2[3] = {10, 12, 18}; // decfine an array of 3 unsigned 8-bit integers // and initialize their values to 10, 12 and 18 Arrays can be accessed for assignment or use in expressions with square brackets as well. Note that array indices begin at 0: myarray2[0] = 11; // assign the value 11 to the first element of the array myarray2 myarray2[1] = myarray[0]; // assign the value of the first element of myarray // to the second element of myarray2
- The basic conditional statement is the if ... else statement. It looks like this:
if (a == 2) { // if a is equal to 2 foo++; // increment the variable foo bar = foo + 10; // assign the value of foo plus 10 to bar } else { // otherwise (a is not equal to 2) foo--; // decrement foo bar = foo - 10; // assign the value of foo minus 10 to bar }
Note the increment and decrement operators, ++ and -. The keyword if is followed by an expression in parentheses that evaluates to a number. If the expression evaluates to a number other than zero, then the statements in braces immediately following are evaluated. If the expression evaluates to 0, anything following the else in braces will be evaluated. If there are no braces, then only the next line will be evaluated. An if does not need to be followed by else: you may only want something to be done in one case of the condition, and not in others.
The conditional expression normally has a relational operator. The relational operators take two arguments and evaluate to 1 if the relation is true and 0 if it is false. The operators are:
== equality != inequality < less than > greater than <= less than or equal to >= greater than or equal to
Note the difference between the equality operator == and the assignment operator =. This is one of the most common sources of bugs in C programming.
There are 2 looping structures in C: while and for loops.
while Loops
- A while loop is a block of code that is executed repeatedly until some condition is met. Its structure is:
while(expression) { statements }
As with an if statement, the expression in parentheses is evaluated first. If it evaluates to non-zero, the statements in the body of the loop are executed. At the end of the loop body, the expression is evaluated again, and the body is executed until the expression evaluates to 0. The expression is normally relational, depending on some value that is being updated in the loop.
u08 button; while (button != 1) { // while the value of button is not equal to 1 button = checkButton(3); // call the function checkButton with // argument 3, and assign its value to // the variable button }
This loop will execute until the function checkButton(3) returns a 1. This type of structure is common for polling an input.
- A common exception to using relational operators is the expression
while (1) { // loop forever ... ... }
This never-ending loop is found in almost all of our AVR programs, because we have some functionality that we want to repeat continuously.
for Loops
- A for loop is normally used when you want to perform an action a specific number of times. Its structure is:
for (initialization; condition; update) { statements }
where initialization, condition, and update are expressions. Normally, the initialization and update are assignments or function calls, and the condition is a relational expression. A typical for loop might look like this:
for (i=0; i<4; i++) { // for i from 0 to 3 checkButtons(i); // call function checkButtons with argument i }
Here, the initialization sets the value of the variable i, the loop counter, to 0. This statement is executed only once, before the loop is entered. The condition is normally a relational expression. If it evaluates to non-zero, the body of the loop is evaluated. At the end of the loop body, the update expression is evaluated, before the condition is evaluated again, to determine whether the loop body should be executed again. Normally, the condition will be violated after the update has been evaluated a certain amount of times. The structure in the example above is most common.
- Notice that
for (initialization; condition; update) { statements }
is equivalent to
initialization; while(condition) { statements update }
- A function is defined as:
returntype FunctionName(arg1type arg1name, arg2type arg2name ...) { declarations statements }
A function definition specifies what the function does, and can occur in a few different places. Functions can be defined after the main function, as long as a function prototype has first been declared. The prototype contains the name, return type and arguments, but not the body of the function. Here, the term declaration is used for function prototypes that declare that the function exists. The term definition is used where the body of the function is actually specified. Normally, a .c file has a companion .h file that contains all the function prototypes. With the AVRlib, we normally use a number of .c files (e.g. timer.c or a2d.c) that contain function definitions. The .c files are compiled together with the .c file you write, and are specified in the makefile (see below). But, in order to use functions from those .c files, you first need to declare their prototypes. This is done by including the corresponding .h file (e.g. timer.h or a2d.h). Look in a .h file in the AVRlib to see what it looks like. Functions can also be defined before the main function, but this is generally considered bad style.
- After a function is declared, it can be "called" or used, as long as its definition exists. If the function does not return a value, its return type is declared as void. void is also used if there are no arguments. The example program in the first section contains such a function:
void checkButton(void) { ... }
The code inside the function is executed when it is "called" from the another function:
If the function returns a value, the keyword return must be present in the function, followed by the value to be returned. Once return is reached, the function exits and evaluates to the return value. If a function has arguments, they are normally passed as a value in parentheses after the function name in the function call. Inside the function, the arguments act like variables that have the value that has been passed. Take the following program for example:
u16 timesten(u16 foo); // function prototype
int main(void) { u16 bar; // declare an unsigned 16-bit variable bar = timesten(9); // call the function timesten with the argument 9, store the result in bar ... } u16 timesten(u16 foo) { //define the function timesten, takes 1 argument return (foo * 10); //return the argument multiplied by 10 }
Here the variable bar will end up with the value 90.
- You'll notice that the main function normally has a return type int, and returns a value of 0. This is mainly used as a convention for our purposes. A return value of zero typically indicates that a program has exited normally, and other numbers are used to specify different errors. The main function does not require a prototype.
- Scope refers to the region of a program in which a named entity can be used. In the previous example, the variable bar cannot be used inside the definition of timesten. Similarly, the argument named foo has no meaning inside the main function. For variables and arguments defined within a function, their scope lasts only until the end of the function. A special type of variable called a global variable is defined before the main function, and can be used inside any function defined after the global variable is declared. In other contexts, global variables are often frowned upon, but in microcontroller programming they can be useful. A distinction is often made between local scope, which applies to the current function and global scope which applies to all functions. In the case of a local and global variable with the same name, the locally-defined one is used. It is best to avoid using the same names for variables even if they have different scope to avoid confusion.
- When program execution exits a function, the memory assigned to the variables that are local to that function is freed for use by other parts of the program. This means that the values of the local variables will not be the same the next time the function is called. In cases where you want the values of variables to persist between function calls, the static declaration is used before the variable type in the variable definition. In the example in the first section, the debounce counter buttonDownCounter is used to as a counter whose value needs to be maintained across function calls, and is therefore declared to be static.
void checkButton(void) { static u16 buttonDownCounter; ... }
AVR-Specific Commands
- It is very important to keep track of how big your variables are. The following are defined in inttypes.h, part of the avr-libc. When used in your program, they are created in RAM.
Data Type | Length (bits/bytes) | Values |
Uint8_t | 8 / 1 | 0 to 255 |
Int8_t | 8 / 1 | -128 to 127 |
Uint16_t | 16 / 2 | 0 to 65535 |
Int16_t | 16 / 2 | -32768 to 32767 |
Uint32_t | 32 / 4 | 0 to 4294967295 |
Int32_t | 32 / 4 | -2147483648 to 2147483647 |
Uint64_t | 64 / 8 | 0 to 1.8*1019 |
Int64_t | 64 / 8 | -9.2*1018 to 9.2*1018 |
- There is another set of data types defined in the avrlib in global.h, that are sometimes easier to use. You will find them more commonly in our demo programs.
Data Type | Length (bits/bytes) | Values |
u08 | 8 / 1 | 0 to 255 |
s08 | 8 / 1 | -128 to 127 |
u16 | 16 / 2 | 0 to 65535 |
s16 | 16 / 2 | -32768 to 32767 |
u32 | 32 / 4 | 0 to 4294967295 |
s32 | 32 / 4 | -2147483648 to 2147483647 |
u64 | 64 / 8 | 0 to 1.8*1019 |
s64 | 64 / 8 | -9.2*1018 to 9.2*1018 |
Setting and Clearing Bits
- Remember that setting a bit is setting it high or to 1, and clearing a bit is making it low or 0.
- sbi - set a bit.
void sbi(u08 register, u08 bit)
Sets a bit in a register. For example, to set the 0th bit of Port D, you can use:
- cbi - clear a bit.
void cbi(u08 register, u08 bit)
Clears a bit in a register. For example, to clear the 2nd bit of Port B, you can use:
Writing to and Reading from registers
- The easiest way to write a byte to a register is with an assignment. To write the byte 0x0F (0000 1111 in binary) to the PORTD register:
PORTD = 0x0F;
- Direct assignment to registers is a recent addition to AVR C syntax. Previously, the outb function was used:
void outb(u08 port, u08 val)
writes the byte val to a port. To write the byte 0x0F to the PORTD register, you would do the following:
- To read a byte from a register, you can also use an assignment.
u08 status; status = PIND;
would read the value of the PIND register and store it in the variable status.
- Similar to outb, the function u08 inb(u08 port) returns the value of the register port.
status = inb(PIND);
is equivalent to the previous statement.
AVR Registers
- All information in the microcontroller, from the program memory, the timer information, to the state on any of input or output pins, is stored in registers. Registers are like shelves in the bookshelf of processor memory. In an 8-bit processor, like the AVR ATMega 16 we are using, the shelf can hold 8 books, where each book is a one bit binary number, a 0 or 1. Each shelf has an address in memory, so that the controller knows where to find it.
- The 32 IO pins of the ATMega32 are divided into 4 ports, A, B, C, and D. Each port has 3 associated registers. For example, for port D, these registers are referred to in C-language by PORTD, PIND, and DDRD. For port B, these would be PORTB, PINB, and DDRB, etc. In C-language, PORTD is really a macro, which refers to a number that is the address of the register in the AVR, but it is much easier to remember PORTD than some arbitray hexadecimal number.
The DDRx Register
- DDR stands for Data Direction Register. There is one DDR register for each Data Input Port, and they are named for the port they control: DDRA, DDRB, DDRC, DDRD.
- The DDRD register sets the direction of Port D. Each bit of the DDRD register sets the corresponding Port D pin to be either an input or an output. A 1 makes the corresponding pin an output, and a 0 makes the corresponding pin an input. To set the first pin of Port D to be an output pin, you could use the sbi(reg,bit) function, which sets a bit (makes it high or binary 1) in a register:
sbi(DDRD, 0); //these two statements are equivalent sbi(DDRD, PD0); //both set the first pin of port D to be an input //by setting the 0 bit of the DDRD register.
- To set the second pin to be an input, you could use the cbi(reg,bit) function which clears a bit (makes it low or binary 0) in a register:
cbi(DDRD, 1); //these two statements are equivalent cbi(DDRD, PD1); //both set the second pin of port D to be an output //by setting the 1 bit of the DDRD register.
- Note that in C, the bit indexing begins with 0. The bits in a register go from 0 to 7. This may be a source of confusion, because when we talk about the "first pin" or "pin 1" of a port, we are referring to the 0 bit or P0 in C. The AVRmini boards label the first pin as pin 1.
- You can also set the value of all the bits in the DDRx register (or any register) using the outb(reg,byte) command. It writes a byte (8 bits) to a register. For example, if you wanted to set pins 1-4 of port B to output and pins 5-8 to input, you could use:
outb(DDRB, 0x0F); //Set the low 4 pins of Port B to output //and the high 4 pins to input
- An alternate way to write a value to a register is using the same syntax as a C assignment:
DDRB = 0x0F; //Set the low 4 pins of Port B to output //and the high 4 pins to input
The PORTx Register
- The PORTx register functions differently depending on whether a pin is set to input or output. The simpler case is if a pin is set to output. Then, the PORTC register, for example, controls the value at the physical IO pins on Port C. For example, we can set all the port C pins to output and then make 4 of them high (binary 1) and 4 of them low (binary 0):
DDRC = 0xFF; //Set all Port C pins to output PORTC = 0xF0; //Set first 4 pins of Port C low and next 4 pins high
- When a pin is set to be an input, PORTx register DOES NOT contain the logic values applied to the pins. We use the PINx register for that. If a pin is an input, a 1 in the PORTx register sets a pull-up resistor. This means that if no other circuitry is connected to this physical pin that the voltage on this pin will be Vcc; that is, by default, this pin is set high. This is helpful for a variety of circuits.
DDRC = 0x00; //Set all Port C pins to input PORTC = 0xFF; //Set pull-up resistors on Port C
The PINx Register
- When a pin is set to input, the PINx register contains the value applied to the pin. The pins have an electrical threshold of around 2.5 volts. If a voltage above this level is applied to an input pin, the corresponding bit of the PINx register will be a 1. Below this voltage, the bit will be a zero. See the ATMega16 schematic for the specific threshold voltages. To read the value of an input port, you can use the inb(reg) function or a direct assignment. It returns an 8-bit number that is the value of the 8 bits in the specified register.
u08 foo; // declare an 8-bit variable
DDRD = 0x00; // set port D pins to input PORTD = 0xFF; // set pull-ups on port D
foo = PIND; // read the value of the port D pins // and store in the variable foo
- There is also a function available for checking the state of an individual bit, without reading the entire PINx register. The function bit_is_set(reg,bit) returns a 1 if the given bit in the given register is set, and a 0 if the bit is cleared.
u08 bar; // declare an 8-bit variable
DDRD = 0x00; // set port D pins to input PORTD = 0xFF; // set pull-ups on port D
bar = bit_is_set(PIND,1); // bar now contains the logic value at Port D pin 2
Other Registers
- There are many other registers in the AVR. They can be accessed using the same functions above. Many, such as the timers and A/D converters have associated high-level functions in the AVRlib that make accessing the registers unnecessary. There are also a few 16-bit registers that may be encountered. For these, the functions outw(reg,word) and inw(reg) replace their byte-wise counterparts.
The AVRLib is essentially a collection of functions and macros that make accessing the functionality of the AVR microprocessor easier and more intuitive. The functions tend to have intuitive names, and follow a naming convention of filenameActionToPerform(), where filename is the descriptive name, beginning with a lowercase letter of the .c and .h file in which the function is contained (e.g. timer for timer functions or a2d for analog-to-digital conversion functions). The ActionToPerform() portion of the name normally describes what the function does. Most AVRLib files have an initialization function which must be called before the other functions for that file can be used, for example timerInit(), uartInit() and midiInit().
rprintf is an AVRLib module that we will use often. It is used for printing strings of characters, usually to an LCD display or over a serial cable connection to a terminal. It was designed to function like the printf function commonly used in other C environments.
- The easiest way to use rprintf is to simply give it a string in quotes:
In order for this action to have any effect, the rprintf system must first have been initialized by calling rprintfInit(location), where location is one of a set of pre-defined functions for specifying where to print to:
rprintfInit(lcdDataWrite); // initialize rprintf to print to the LCD
- A "string" is really an array of characters. Characters have the type char, and are 8-bit numbers that use the standard ASCII encoding where each number specifies a character. You can assign a character in single quotes to a char variable, and it will evaluate to its ASCII code. The following chunk of code from lcdtest.c defines an array of characters 41 elements long, then in a for loop sets the first 40 elements to be sequential ASCII characters beginning with 'A'. Finally it sets the last element of the array to '$\backslash$0'. '$\backslash$0' is known as the "null character", and must terminate or be the last element of a string in RAM to be printed correctly. The function rprintfStr(stringinRAM) then prints a null-terminated character array from RAM.
#define MAXCOL 40 int main(void) { char str2[MAXCOL+1]; // Allocate RAM for a test String // but don't initialize the string.
rprintfInit(lcdDataWrite); // initialize rprintf to print to the LCD // Store Characters in the test string in RAM for (i=0; i<MAXCOL; i++) { str2[i] = ('A' + i); } str2[MAXCOL] = '\0'; //RAM String must be NULL terminated rprintfStr(str2); //print a string from RAM }
- rprintf can also print numbers in a variety of ways. The %d special character can be inserted into a string, where it acts as a placeholder for a decimal number. In this case, rprintf takes 2 arguments, the string and then the number to replace %d. rprintf takes as many additional arguments as there are %d characters in the string.
u08 k; ... rprintf("This is the number one: %d", 1); // print a decimal number k=2; rprintf("These are two other numbers: %d %d", k, 4); // print a decimal number from a variable
Similar to %d, %x lets you print hexadecimal numbers and %c lets you print characters.
- rprintfNum lets you print numbers with a variety of options:
// print a formatted decimal number // - use base 10 // - use 8 characters // - the number is signed [TRUE] // - pad with '.' periods rprintfNum(10, 8, TRUE, '.', 1234);
output will be
- There are a number of other rprintf functions and options. See lcdtest and vt100test avrlib-demos for examples.
Program Memory Directives
The AVR microcontrollers generally have a lot more FLASH memory for storing programs than they have RAM for storing data when the programs are running. Strings can quickly use up a lot of memory, therefore if you are using a lot of strings that do not need to change during the course of program execution, it makes sense to store them in program memory, and not in RAM. Several functions are available for this. One of the simplest to use is rprintfProgStrM():
rprintfProgStrM("Hello!"); // print a string that is automatically stored in program memory
- Similarly, a string can be explicitly stored in program memory, and printed using rprintfProgStr() as follows:
static char PROGMEM str1[] = "This is a test."; ... rprintfProgStr(str1);
The static declaration is necessary when a string is to be stored in program memory. PROGMEM is a macro inserted between the variable type and name that defines the variable in program memory. This way of defining a string in program memory would be useful when the same string is used in several places in the program. If the string is only used once, rprintfProgStrM() would probably be easier.
This section will by no means exhaustively explain or demystify makefiles, but rather give enough information to know how to use them in our context. For more information, see the make manual:
- A makefile is a file with a specific formatting that is understood by a program called "make". Like .pdf files are understood by "Adobe Acrobat" and .doc files by "Microsoft Word", makefiles are understood by "make", but they don't have a specific suffix. If you type make in a Linux terminal, the make program is executed, and it looks for a file named "makefile" in the current directory. You can alternately specify a makefile, but we won't do that.
- Our makefiles basically consist of lists of variable definitions and rules. Rules specify a "target", a set of "prerequisites" and then a series of commands for getting to the target. The commands are calls to other programs. The main program executed by our makefiles is the C compiler for AVR avr-gcc. This is the program that takes our C code generates the .hex code that is copied onto the microcontroller to be executed. In a very general sense, the makefile says "We want to a .hex file. We have some C files and here are the commands that need to be executed to generate the .hex file". Because the compiler is quite complicated, it is easier to use a makefile to specify a lot of options than to type them at the terminal every time you need to compile a program. The variables in the makefile define certain options or file locations to the compiler that need to be specified. These often don't change from one program to another, so we can copy a makefile from another project and change only the bits we need to. This is how EVERYONE uses makefiles. NOBODY WRITES MAKEFILES FROM SCRATCH. Well, not nobody. But almost nobody.
- Definitions in the makefile follow a simple form: VARIABLE = something. For example, the first line of our makefiles (other than comments which begin with a #) is:
MCU = atmega32
This specifies which microcontroller we are using to the compiler. The variable MCU is then used when the compiler is invoked, and will be replaced by atmega32, just like a macro substitution or #define in C. This way, if we want to change the AVR microcontroller we are using, we only need to specify it here. Variables can be defined in terms of other variables using $(). In our makefiles you might see:
TRG = fourbutton ... ... SRC = $(TRG).c #Now, SRC = fourbutton.c
- The heart of our makefile, where the compiler is invoked requires so few changes from one project to another that it is actually located in the AVRLib and simply included in each the project's makefile using:
include $(AVRLIB)/make/avrccrma_make
Where $(AVRLIB) has been defined as the path to your copy of the AVRLib. You can use a makefile in one of the demo projects to find the path to it and look at it if you want.
- There are only 2 parts of a makefile that you will likely need to change. The first has already been shown - the name of your C file. For a new project with a .c file called myproj.c, you need to have the following line in your makefile:
TRG = myproj
The other part of the makefile to change is the list of sources that are used. In the makefile for demo5, you will see the line:
SRC = $(AVRLIB)/timer.c $(AVRLIB)/rprintf.c $(AVRLIB)/lcd.c $(TRG).c
This line specifies all the .c files that are used by your program. $(TRG).c is your .c file, and the others are in the AVRLib. If you use a2d functions and included a2d.h in your .c file, you would need to add $(AVRLIB)/a2d.c to this line.
- When you type "make" at a command line, you can specify a target. This specifies a label in a rule that you want to generate. The default target is "all". Our makefile basically contains a rule that says:
all: $(TRG).hex
This means that in order to satisfy the target "all", you need to have a .hex file. This is known as a dependency. In other words, "all" depends on $(TRG).hex. There are then other rules that specify how to generate the .hex file by invoking the compiler.
- We have a special target in our makefile called "load". To satisfy this target, make calls a program called "avrdude" (with a bunch of options that are defined as variables) that copies the .hex code over the serial cable onto the microcontroller. As you probably guessed, the "load" target depends on $(TRG).hex.


text:
"Hand hygiene campaign cut superbug infections," according to BBC News. Along with other news outlets, the BBC reported the success of a hand-washing campaign...
A national hand hygiene campaign "cut superbug infections," according to BBC News. The BBC and other news outlets have reported the success of a hand-washing campaign in cutting infection rates in hospitals.
The headlines stem from a study of hand-washing practices at 187 NHS trusts in England and Wales between 2004 and 2008. The Clean Your Hands campaign was introduced in 2004 and this study looked at its effects.
Researchers examined purchases of alcohol hand rub and liquid soap by hospitals against trends of common hospital-acquired infections such as MRSA and Clostridium difficile (C. difficile). They found that the total amount of soap and alcohol gel being purchased by hospitals tripled across the four years of the study, from 22ml per patient per day to 60ml per patient per day. Over the same period, rates of MRSA more than halved and C. difficile infections fell by more than 40%.
Although the study demonstrates some associations between increased purchasing of alcohol gel or soap and reduced infection rates, it can't prove that the campaign itself has influenced infection rates.
This is because the study doesn't take into account factors such as how people are washing their hands, whether other infection-control practices are being followed or how antibiotics are being prescribed. Furthermore, not all infections have demonstrated a continual decline in rate over the period.
The researchers also pointed out that other national campaigns might have been beneficial too. Nevertheless, the study's findings are promising and indicate that national campaigns to improve hand hygiene and reduce hospital-acquired infections can be useful.
The study was carried out by researchers from University College London (UCL) Medical School and other institutions in the UK and was funded by the Patient Safety Research Programme and UCL. The study was published in the British Medical Journal.
The headline findings of the study were fairly well reported by most media outlets. However, the reports didn't examine some of the study's limitations, including the researchers' untested assumption that bigger purchases of alcohol gel and liquid soap indicated improved hand hygiene within hospitals.
This was a time-trend study that looked at rates of purchasing of alcohol hand rub and soap and reporting trends for healthcare-associated infections during a national hand-washing campaign that had been introduced across 187 NHS trusts. It aimed to examine associations between these purchasing rates and infection rates.
The study may indicate that the introduction of a hand-washing campaign could have influenced trends, but it can't prove that the campaign itself has been directly responsible for any change in trend because other, unmeasured factors may have been involved.
For example, this study has based its analysis on the purchasing levels of alcohol hand rub and liquid soap. It can't tell us how well hand-washing procedures or other infection-control practices are actually being followed.
Nevertheless, looking back at data in a time-trend study adds to the overall picture and evidence when examining the possible influences of the campaign.
The Clean Your Hands campaign was supported by the Department of Health (DH) and National Patient Safety Agency and was first introduced to NHS hospitals in England and Wales in 2004. The campaign involved:
The trusts were instructed to order soap and alcohol hand rub through the central NHS supply agencies to ensure that all products met efficacy, safety and acceptability standards. Six hospital trusts received the campaign in December 2004 and the remaining 181 trusts by the end of June 2005. The campaign was then refreshed at the end of June 2006, and re-launched with new posters in October 2007.
The researchers were particularly interested in looking at the periods from July 2004 to December 2004 (before the introduction of the campaign); January to June 2005 (during the introduction of the campaign) and July 2005 to June 2008 (following the introduction of the campaign).
For each individual trust, researchers looked at monthly procurement rates of alcohol hand rub and liquid soap. For infection rates, they looked at the national reporting scheme database held by the Health Protection Agency to identify quarterly rates of hospital-acquired MRSA blood infections, C. difficile infections (only in people aged over 65) and other Staphylococcus aureas infections.
When analysing the association between alcohol gel and soap purchasing rates and infection rates, the researchers did take into account other factors that could have influenced both of these things, aside from the campaign. These factors included the announcement of the MRSA target, the publication of the Health Act 2006, the Saving Lives campaign and trust visits by DH improvement teams.
The researchers looked at 187 hospital trusts in England and Wales. Overall procurement of both liquid soap and alcohol hand rub tripled across the four years of the study, from 22ml to nearly 60ml per patient per bed day. (One bed day equates to one person occupying a hospital bed for a day.)
Meanwhile, rates of MRSA fell from 1.88 cases per 10,000 bed days at the start of the study period to 0.91 cases per 10,000 bed days at the end of the study period.
C. difficile infection rates fell from 16.75 to 9.49 cases per 10,000 bed days. However, there was no clear trend in the rates of C. difficile infection, and infection rates between 2004 and 2008 continued to fluctuate with the seasons.
Rates of Staphylococcus aureas did not show a decrease: they rose from 2.67 cases per 10,000 bed days at the start of the period to a peak of 3.23 in 2007, and then declined to 3 cases per 10,000 bed days at the end of the study period in 2008.
After adjusting for other factors, the researchers calculated that the increased purchase of soap was associated with reduced C. difficile infection throughout the study. Increased procurement of alcohol hand rub was associated with reduced MRSA blood infection in the last 12 months of the study. These were the only significant associations found.
In some analyses, the researchers found that a rise in procurement of alcohol gel or soap was associated with a rise in Staphylococcus aureas infection rates.
When they looked at the influence of the other campaigns and interventions, the researchers found that publication of the Health Act in 2006 was strongly associated with reduced MRSA blood infections and C. difficile infection rates. They found that trust visits by DH improvement teams were also associated with reduced MRSA blood infections and C. difficile infection rates for at least six months after each visit.
The authors concluded that the Clean Your Hands campaign was associated with sustained increases in hospital procurement of alcohol rub and soap. They said their findings suggest that the campaign has played an important role in reducing rates of certain hospital-acquired infections and highlighted that "national interventions for infection control undertaken in the context of a high profile political drive" can be effective.
This is a valuable study that has attempted to examine the effect of the Clean Your Hands campaign in improving hand hygiene and reducing the rate of hospital-acquired infections.
The study has acquired reliable data on soap and alcohol gel procurement rates, along with infection rates, and has demonstrated some associations between increased procurement and a decline in the rate of hospital-acquired MRSA blood infection and Clostridium difficile infections.
However, on its own, the study can't prove that the Clean Your Hands campaign has influenced infection rates. The study was only able to use purchases of alcohol gel or liquid soap as an indication of hand hygiene, and although this is an objective measure it doesn't tell us whether people are following correct hand hygiene practices and performing hand sanitisation at the correct times (for example, before and after contact with each patient). It also can't tell us whether other infection-control practices are being followed, or about other things that may influence infection rates such as antibiotic prescription.
It is noteworthy that not all infections were shown to have declined in rate over the period. For example, C. difficile rates have continued to demonstrate quite marked seasonal variation between 2004 and 2008. Furthermore, the increased procurement of soap or alcohol gel was not always associated with decreased infection rates throughout the study period, and in some analyses the opposite was observed – increased procurement was associated with increased infection rate.
The study did adjust for other factors that could have influenced both purchasing rates and infection rates, and found that some of these factors also had an effect. These included the publication of the Health Act 2006 and trust visits by Department of Health improvement teams.
Nevertheless, the study's findings were promising and indicated that national campaigns to improve hand hygiene and reduce hospital-acquired infections are likely to be useful.

subset: commoncrawl


text:
BERKELEY, Calif. » It might be hard to conceive now, in an era of extreme sports and ultra-light equipment, but there was a time when Americans who set out to conquer mountains engaged in a pursuit that was as lonely as it was dangerous.
But four men — Norm Dyhrenfurth, 94; Jim Whittaker, 84; Tom Hornbein, 82, and Dave Dingman, 76 — remember. The leather boots that stayed wet for weeks. Oxygen canisters that weighed 15 pounds. The shrugs of indifference most of their countrymen gave a half-century ago to what it would take to get a U.S.-led mountaineering expedition to the top of Mt. Everest.
"Americans, when I first raised it, they said, 'Well, Everest, it's been done. Why do it again?"' Dyhrenfurth recalled Friday as he and three other surviving members of the 1963 expedition gathered in the San Francisco Bay area for a meeting honoring the 50th anniversary of their achievement.
The American Alpine Club is hosting lectures, film screenings, book-signings and a dinner this weekend recognizing the pioneering climbers and what their feat, captured in a Life magazine cover story, came to represent in the years after President John F. Kennedy honored the Everest team with a Rose Garden reception: the birth of mountaineering as a popular sport in the U.S.
"When they were talking about a reunion three years ago, I thought, who the hell cares about that? I figured we'd just together for some beers," Dingman said between interviews with National Geographic, Outside magazine and the Alpine Club's oral history project. "It's turned into this big event, and I'm glad it has."
Whittaker, who lives in Seattle and went on to become chief executive of outdoors outfitter Recreational Equipment Inc., was the first American to summit Everest. He and his Sherpa companion, Nawang Gombu, reached the top of the world on May 1, 1963, a decade after New Zealand's Edmund Hillary and about six weeks after another climber on the U.S. expedition, Jake Breitenbach, died in an avalanche.
Memories of how close he came to his own death on Everest — he and Gombu ran out of oxygen on the summit and had to climb up and back without water after their bottles froze — infused every day of his life since with gratitude and child-like wonder, he said.
"I think I will probably take it with me into my next life, if I have one," Whittaker said.
Three weeks after Whittaker's ascent, two other Americans, Hornbein and the late Willi Unsoeld, became the first men ever to scale Everest via a more dangerous route on the mountain's west side. The next day, they descended by the southern route that Hillary, Whittaker and by then, two more members of the American team, had taken to the summit.
The adventure, which included spending the night without sleeping bags or tents at 28,000 feet, made them the first men ever to traverse the world's highest peak — and cost Unsoeld nine frost-bitten toes.
Dingman has been lauded over the years for sacrificing his own chance to scale Everest to belay Hornbein, Unsoeld and two other climbers, Barry Bishop and Lute Jerstad, who had gotten stuck out in the open with them, back down to base camp.
Dingman never made it back to Everest. As a doctor in training, a Vietnam War draftee and then a physician with a young family, he never could find the time to make the trip. He said he had no regrets then and has none now.
"It would have made no difference to get two more people on to the summit, but if we had lost two or three people on the way down that would have been a very different story," he said.


text:
NEW YORK (AP) — St. Patrick's Day festivities were in full swing Sunday with the usual merriment of bagpipes and beer, but political tensions lingered in the northeastern U.S., where city leaders will be conspicuously absent from parades over gay rights issues.
New York City Mayor Bill De Blasio will become the first mayor in decades to sit out the traditional march Monday because parade organizers refuse to let participants carry pro-gay signs. Boston Mayor Martin Walsh wasn't marching in his city's parade Sunday, either, after talks broke down that would have allowed a gay group to march.
Still, thousands of green-clad spectators came out for the parade in Boston, and a similar scene played out in downtown Philadelphia.
In Georgia, the dome of Savannah's City Hall will be lit green, and several thousand people braved temperatures in the teens on Sunday to march with pipe and drum bands in Detroit and Bay City, Mich.
In Ireland, St. Patrick's Day provides the launch of the country's annual push for tourism, a big part of the rural economy.
"To Irish people by birth or descent, wherever they may be in the world, and to those who simply consider themselves to be friends of Ireland, I wish each and every one of you a happy, peaceful and authentically Irish St. Patrick's Day," Irish President Michael D. Higgins, the ceremonial head of state and guest of honor at Monday's parade in Dublin, said in a statement.
Ireland's head of government, Enda Kenny, became the first Irish prime minister to attend Boston's annual St. Patrick's Day breakfast Sunday.
But Kenny has resisted pressure, in both Ireland and America, to support the gay rights lobby's demand to have equal rights to parade on St. Patrick's Day and he planned to march Monday in New York.
"The St. Patrick's Day parade (in New York) is a parade about our Irishness and not about sexuality, and I would be happy to participate in it," he said in Dublin before leaving for a six-day trip to the U.S.
Parade organizers have said gay groups are not prohibited from marching, but are not allowed to carry gay-friendly signs or identify themselves as LGBT.
Some LGBT groups plan to protest the parade along Manhattan's Fifth Avenue on Monday. Others will gather at the city's historically significant Stonewall Inn, where the gay rights movement was born, to dump Guinness beer from its shelves in protest of the beer company's parade sponsorship.
Other beer companies have joined the boycotts, with Sam Adams withdrawing its sponsorship of Boston's parade and Heineken following suit in New York.
New York's parade, a tradition that predates the city itself, draws more than 1 million spectators and about 200,000 participants every March 17. It has long been a mandatory stop on the city's political trail, and will include marching bands, traditional Irish dancers and thousands of uniformed city workers.
Several global landmarks will be bathed in green as part of a push by Ireland's tourism agency, among them Sleeping Beauty's Castle at Disneyland Paris in France, as well as the French capital's Moulin Rouge nightclub. (Better make that the Moulin Vert.)
Other locations transforming at night under green floodlights are the Petrin Lookout Tower in Prague; Rhine Falls near Zurich; the Taj Mahal in India; the London Eye Ferris wheel; Niagara Falls; the Las Vegas welcome sign; New York City's Empire State Building; the Leaning Tower of Pisa; Sydney Opera House in Australia; and both the Giza pyramids and the Sphinx in Egypt.
Associated Press writer Shawn Pogatchnik in Dublin contributed to this report.


text:
Toddler Nutrition
Helpful feeding information for your toddler
The toddler (ages 1 to 3) phase can often be challenging when it comes to feeding. Several developmental changes happen at this time. Toddlers are striving for independence and control. Their growth rate slows down and with this comes a decrease in appetite. These changes can make mealtime difficult. It is important for parents to provide structure and set limits for the toddler. The following are suggestions to help manage mealtimes so that the toddler gets the nutrition he or she needs:
Avoid battles over food and meals..
Provide regular meals and snacks.
Be flexible with food acceptance as toddlers are often reluctant to try new things. If your toddler refuses a food, don't make a big deal out of it, and try again in a few days or weeks.
Be realistic about food amounts. Portion size should be about one-fourth the size of an adult portion.
Limit juice intake. Encourage whole fruit instead.
Dessert should not be used as a reward. Try serving it with the rest of the food.
Make the food easy for your toddler to eat:
Cut food into bite-size pieces.
Make some foods soft and moist.
Serve foods near room temperature.
Use ground meat instead of steak or chops.
Use a child-size spoon and fork with dull prongs.
Seat your child at a comfortable height in a secure chair.
Prevent choking by:
Slowly adding more difficult-to-chew foods.
Avoiding foods that are hard to chew and/or swallow, like nuts, raw carrots, gum drops, jelly beans, and peanut butter (by itself).
Modifying high-risk foods. Cut hot dogs in quarters, cut grapes in quarters, and cook carrots until soft.
Always supervising your child when he or she is eating.
Keeping your child seated while eating.
Healthy food choices
The MyPlate icon is a guideline to help you and your child eat a healthy diet. MyPlate can help you and your child eat a variety of foods while encouraging the right amount of calories and fat. The USDA and the U.S. Department of Health and Human Services have prepared the food plate to guide parents in selecting foods for children age 2 and older.
The MyPlate icon is divided into 5 food group categories, emphasizing the nutritional intake of the following:
Grains. Foods that are made from wheat, rice, oats, cornmeal, barley, or another cereal grain are grain products. Examples include whole wheat, brown rice, and oatmeal.
Vegetables. Vary your vegetables. Choose a variety of colorful vegetables. Include dark green, red, and orange vegetables, legumes (peas and beans), and starchy vegetables.
Fruits. Any fruit or 100% fruit juice counts as part of the fruit group. Fruits may be fresh, canned, frozen, or dried, and may be whole, cut up, or pureed.
Dairy. Milk products and many foods made from milk are considered part of this food group. Focus on fat-free or low-fat products, as well as those that are high in calcium.
Protein. Go lean on protein. Choose low-fat or lean meats and poultry. Vary your protein routine. Choose more fish, nuts, seeds, peas, and beans.
Oils are not a food group, yet some, like nut oils, contain essential nutrients and can be included in the diet. Animal fats are solid fats and should be avoided.
Exercise and everyday physical activity should also be included with a healthy dietary plan.
Nutrition and activity tips
Here are some tips to follow:
Try to control when and where food is eaten by your children by providing regular daily meal times with social interaction and demonstration of healthy eating behaviors.
Involve children in the selection and preparation of foods and teach them to make healthy choices by helping them select foods based on their nutritional value.
For children in general, reported dietary intakes of the following are low enough to be of concern by the USDA: calcium, magnesium, potassium, and fiber. Select foods with these nutrients when possible.
Most Americans need to reduce the number of calories they consume. When it comes to weight control, calories do count. Controlling portion sizes and eating nonprocessed foods helps limit calorie intake and increase nutrients.
Parents are encouraged to provide recommended serving sizes for children.
Parents are encouraged to limit children's video, television watching, and computer use to less than 2 hours daily and replace sitting activities with activities that require more movement.
Children and adolescents need at least 60 minutes of moderate to vigorous physical activity on most days for maintenance of good health and fitness. This is also for healthy weight during growth.
To prevent dehydration, encourage children to drink fluid regularly during physical activity and drink several glasses of water or other fluid after the physical activity is completed.
To find more information about the Dietary Guidelines for Americans 2015–2020 and to determine the appropriate dietary recommendations for your child's age, sex, and physical activity level, visit the Online Resources page for the links to the ChooseMyPlate.gov and 2015–2020 Dietary Guidelines sites. Please note that the MyPlate plan is designed for people older than age 2 who do not have chronic health conditions.
Always talk with your child's health care provider regarding his or her healthy diet and exercise needs.
7 School Lunch Tips for Picky Eaters
Getting your child to eat healthfully is a struggle for many parents, especially if you have a picky eater in your family. Picky eaters often bring back unopened lunch boxes or ignore the healthy foods you've packed and go straight for the dessert. Learn helpful tips and tricks for outsmarting your picky eater from a Johns Hopkins pediatric dietitian.


text:
Our Wet & Dry Bag completes any nappy stash! The two separate bags popper together to keep your dry and wet nappies separate. We're the first reusable nappy company to make all of our waterproof fabric from recycled plastic. Small bag: 30 cm x 32 cm, Large bag: 30 cm x 41 cm. Holds 6-10 nappies in total.
We will attempt to despatch orders placed before 11.00am the same day unless it is a busy time. For small parcels we tend to use Royal Mail 1st or 2nd class and these are usually sent 'signed for'. Larger orders are usually sent via a courier.
Unlike many online companies we also have a 'bricks and mortar' retail shop and during busy times we kindly ask our customers to allow up to 7-10 working days to receive their parcel, although in most cases it arrives much quicker. If your order is urgent then please do let us know and we will make every effort to get it out to you as quickly as possible.
If an item is out of stock you will be informed by email once we have spoken to our supplier to get an estimated order time to fulfil your order. Although we try and keep good stock levels we can't predict who will order what quantites and when.Please Note: If you are ordering from non-mainland UK destinations or the rest of Europe please contact us first for a postage quote before completing your order. Please email us on: firstname.lastname@example.com or telephone us on: 01926 735516.
(*Some Bulky / Heavy items are excluded from free postage when this is offered - please see individual item description)
Please Note: Some of our suppliers do not allow us to send products outside of the UK.
It's OK to change your mind!
We operate a 'no-quibbles' guarantee, which means that if for any reason you are unhappy with your purchase, simply return it to us in its original condition* within 28 days from date of invoice.
Please note we are unable to refund returns postage and if you received free postage on your outgoing order, we will deduct postage at cost from your refund. We are unable to accept items back if the packaging has been damaged, or the item has been used or pre-washed.
We recommend that if you have bought a complete set of nappies then just wash one or two to see how you get on with them. If you love them, wash the rest and use them, if you don't, return the unwashed and unused as stated above for a refund or exchange.
Now for the FANSTASTIC bit:
If you are pregnant when you purchase your nappies the refund/exchange policy starts from your baby's date of birth - who else offers that peace of mind!
If the return is due to an error we have made we will gladly refund the delivery charges. If the item is either faulty or damaged please contact our Returns team who will arrange for a replacement or refund.
When returning items to us we ask that you obtain a 'certificate of posting' (free of charge) from your post office so that you can claim compensation from royal mail should the parcel NOT reach us. We cannot be held responsible for any items lost in the post and we do advise insuring your parcel to the correct value in case of loss.
Returns Department Naturally Baby 73 Clarendon Street Leamington Spa Warwickshire CV32 4PN.


text:
Practical career
This programme promotes a broadly based, interdisciplinary education in general management. In particular, it enhances the career opportunities of such graduates as will later operate in working contexts with demanding cultural requirements. These quite generally include working contexts in other geographical cultural areas (transcultural management), as well as non-profit organizations, public organizations, social ventures, NGOs, health organizations, etc. The specialisation courses at the coursework stage confront students with specific research fields of the DOK research community.
Academic career
This programme systematically deals with fundamental social and cultural science theories, and particularly their potential for work on issues concerned with management theory. In particular, this includes a thorough education in the field of qualitative, context-sensitive and practice-related research methods. It is of central significance here that research itself is conceived of as cultural practice, in which epistemological, conceptual and methodological issues must be regarded as an indivisible unit. The basic courses of the coursework stage introduce students to the research modes of the relevant disciplines of cultural and social science, as well as organizational research.


text:
Each block will be designed by a different person. Every two weeks there will be a guest blogger on my blog introducing himself or herself and his/her block. At the end you will have made a fun quilt 65" x 84" (or 74" x 93").
Here's the information you need to get started:
Fabric Requirements:
16 Fat Quarters
3 1/2 yards background and border and sashing fabric
optional 2 yards addional border fabric -- this makes the larger size quilt
5 yards (6 yards for larger size) backing
3/4 yard binding (for both sizes)
Size of Quilt: 65" x 84"
1) Will linear quarter yards work?
Not necessarily. If you want to use yardage, you might want to have half yards just in case. If you think you need to use quarter yards, you might need to piece a larger block. You may not need to, but that's the worst that would happen.
2) When is the first drawing?
The first drawing will be Tuesday, Sep 27.
3) Who is entered in the first drawing?
This is new--there are two ways to enter the first drawing. FIRST, post a comment on this post saying that you are doing the quilt along. SECOND, post a picture of your fabric on the flickr site. Technically there will be two drawings, one from the post comments, and one from the flickr pool.
4) What's the flickr site:
Here's the link:
5) How do I get entered into the block drawings?
You get entered into the block drawings by posting your block on our flickr site. The same one from #4. If you need help getting on flickr, check out my Flickr 101 and Flickr 102 tutorials.
6) Can I use scraps?Absolutely!
7) What fabric are you using?
I had a fat quarter bundle of Folklorique by Fig Tree for Moda sitting around. There were exactly 16 fat quarters in it. It was asking me to use it. I said I wanted to buy new fabric, but it convinced me otherwise. You may not recognize it as Folklorique because it is the wovens from the line. Sampler quilts are fun to experiment with. I am using white as my background fabric.
8) What's up with all the background fabric?
Consider your background/sashing/border fabric carefully. There will be a lot of it. I'm excited about the layout I've drawn up. I know it can be hard not to have all directions up front. That's also part of the fun. It's a mystery quilt--for all of us!
9) What are the prizes?
All sorts of quilting stuff! Fabric, patterns, books, etc. There are always at least two prizes for every drawing. And I do have another Folklorique wovens fat quarter bundle that will find a new home in this first drawing!
10) Do I have to have a blog to join?
Not at all, but if you do then
Grab a button, and join the fun!!!
(If you need help grabbing a button, check out my Blogger 101 tutorial.
11) Where are the patterns?
You will find them right here! The list below will turn into links when I get the blocks posted.
Block One
Block Two
Block Three
Block Four
Block Five
Block Six
Block Seven
Block Eight
Block Nine
Block Ten
Block Eleven
Block Twelve
Finishing Instructions
12) Isn't that enough questions already?!?
Probably not. If you have another question I haven't covered, please ask! Remember if you post anonymously I can't reply to you.
Anyone interested in designing a block or donating prizes can email me at firstname.lastname@example.com!
Let the quilting begin!


text:
The NeverNotKnitting Podcast : Episode 29 : The Fantasy Sweater Shelf
66 comments:
- Patti said...
I think the color you chose for your hat and gloves is great. O
Another great podcast and story. - December 1, 2009 at 11:36 PM
- Noneofyourbusiness. said...
I love the superior spruce colorway.
Another great episode! I love the Made In Brooklyn booklet- when it came in at my LYS I had to have a copy ASAP- and almost everything got queued on Ravelry immediately. The Seneca sweater is my post-holiday project this year for sure! - December 1, 2009 at 11:38 PM
- Carol said...
Hi Alana! Thanks for another great podcast. You're funny when describing how you get nervous about meeting celebrities. I'd likely react the same way.
Anyway, I have been drooling over the mitten patterns for a while now and am considering making the beret you made, too.
I really love the Tawny Chestnut colorway, Like you felt about your yarn choice, this one makes me think of Fall. - December 2, 2009 at 4:29 AM
- Mindy said...
Great new podcast episode! I love that you are sponsored by such great websites that they offer you a promotion code for your listeners. It enables me to try new yarns I might not otherwise buy. :)
I love the Genteel Grey colorway on the Classic Elite Princess. I seem to be on a grey kick lately. Grey reminds me of comfy warm pjs. So I guess it gives me a cozy feeling. :) - December 2, 2009 at 8:06 AM
- Marta said...
I'd be starstruck with Jared too! He's coming to my LYS this weekend but I'm going to be out of town. If I'm lucky enough to be picked, I like the Cotes du Rhone color...
- December 2, 2009 at 10:22 AM
- Cook said...
I love the color spruce. Thanks for all the drawing opportunities.
- December 2, 2009 at 10:35 AM
Thanks for the great episode. I am about to start "Beaumont" from Made in Brooklyn. I, too, love that book and have lots of projects from it in my mental queue. For your drawing, it is hard to chose but I love the Tawny Chestnut as a potential color to make Laurel. :)
- December 2, 2009 at 10:55 AM
- crookedknits said...
The colors of that yarn are amazing. The Milord's Madder is so rich but I think the Orange Attitude is my favorite...maybe just because of its name :o)
- December 2, 2009 at 11:22 AM
This was my 1st podcast and definitely not my last. I have made the Beaumont Tam for my daughter out of a shall we say more washer friendly yarn (she loves to felt stuff in the washer) but want to make one for myself out of the Fresco but now maybe I need a Laurel with mittend out of the Royal Red.
- December 2, 2009 at 12:57 PM
- Amanda N said...
What a great show Alana. That knitting story was superb. And I loved hearing all about Jared. I would have felt the same way as you. The Princess yarn you reviewed sounds interesting. I have seen a colour that caught my eye - Majesty's Magenta. How regal!
- December 2, 2009 at 1:35 PM
- drMolly, the BeanQueen said...
I enjoyed that podcast, in particular the essay. I'm not sure what I would do if I actually met a knitting star!
- December 2, 2009 at 3:50 PM
Great podcast! It's amazing that you got to meet Jared Flood in person!! I love all of his work.
- December 2, 2009 at 3:52 PM
- MaryLou said...
Love Jared Flood's designs too. OT - I have your Cedar Leaf Shawl pattern, and am waiting until the Handmaiden Lady Godiva is available in that wonderful green shade again.
- December 2, 2009 at 4:07 PM
- Jen said...
I love the Royal Red colorway!
- December 2, 2009 at 4:27 PM
- Laura said...
Lucky you, meeting Jared Flood! I'd be all awkward and tongue-tied too. Another great episode and if I had to pick a skein of Princess I'd choose magenta. Thanks!
- December 2, 2009 at 4:35 PM
- Sarah said...
Hi Alana! I loved Amy's fantasy sweater shelf story! The princess yarn sounds fab to work with. I like the Cotes du Rhone color.
Thanks for sharing your podcasts and beautiful projects with all of us! - December 2, 2009 at 7:07 PM
- Kelly-ann said...
Thanks for the podcasts Alana! As usual, I like the greenish (Spruce) colorway ;)
- December 2, 2009 at 7:26 PM
- raebeauty said...
Ooh..I've never used any of the classic elite yarns either..the yarn you used looks great on your Laurel!! My favorite is actually Genteel Grey..I loveeeee grey. :)
- December 2, 2009 at 7:44 PM
- Juliaknit said...
Great podcast once again. I love the Tawny Chesnut colorway from the Classic Elite Princess line.
- December 2, 2009 at 8:08 PM
- nordicgdss1 said...
Thanks for the lovely podcast. I'm in the middle of knitting the Quincy hat - was nice to hear that it looks even better in person than it does in the book!
I love the spruce colorway - December 2, 2009 at 10:38 PM
- ZuzanaK said...
Thank you for being a great company again :-)
- December 3, 2009 at 12:11 AM
- Unknown said...
I've been listening for a while but always drop by too late for the drawings!
I love the "orange attitude". I don't own anything in that color yet, but I thought it would be a good occasion to give it a try and it would look awesome in "magenta", a color I like just as much. But I do have a few violet/pinky garnments. - December 3, 2009 at 3:18 AM
- The Mom said...
Enjoyed the podcast, as always ! My favorite color is Classic Elite Princess Cotes du Rhone
- December 3, 2009 at 5:55 AM
- Crystal said...
I look forward to your podcast every 2 weeks! Keep up the awesome work! I would love to see some youtube classes from you.. maybe about finishing items (blocking?) or picking up stitches.. you do such fabulous work. Crystal
- December 3, 2009 at 7:12 AM
- Unknown said...
Hi Alana,
I like the Cotes du Rhone - it looks like a lovely wine colour. Yum! - December 3, 2009 at 7:40 AM
- StaceyKnitsIt said...
First Favorite is 3476 Brown, which the site does not show at the moment. 2nd Favorite is Tawny Chestnut.
Great episode! - December 3, 2009 at 11:14 AM
- Lauren said...
You know, I also bought the Quincy pattern and a skein of Rowan Cocoon for it!
I love the Tawny Chestnut colorway. So wonderful for fall, even here in California - December 3, 2009 at 1:13 PM
- Naomi R said...
Thank you for introducing another great yarn. I'm rather fond of the Superior Spruce color myself. My SnB has declared January "me month" so I might have to pick up some of this yarn for MY project.
- December 3, 2009 at 5:43 PM
- Jen said...
Lucky you to meet Jared! Cobblestone is on my to do list for my hubby.
I think your Laurel looks great. I love the Tawny Chestnut colorway of the Princess yarn.
Your contests rock! Keeping my fingers crossed! - December 3, 2009 at 6:18 PM
- knitterwithcritters said...
I think majesty's magenta is a beautiful color.
- December 3, 2009 at 6:34 PM
- Andrea said...
Brahman Blue and Majesty Magenta both look very pretty. Oh, a STRIPED laurel! Ah... that wouldn't go to well with all the cables and bobbles, would it? Anyway, lovely podcast! I have listed to all of your podcasts! :] Once I had "caught up" with NNK, I tried to find another... I have listened to stash and burn, and the knitmore girls. Yours is the best. Organized, and your voice is crisp and clear. love it. thanks for such a great podcast!
- December 3, 2009 at 7:14 PM
- Tinkie said...
Awesome show...as usual. You do such a nice job Alana! I love the Tawny Chestnut color of Classic Elite Princess.
- December 3, 2009 at 9:43 PM
- Karen (lindse) said...
Loved the episode, it is always super inspiring! I love the hat - what a beautiful color!
- December 4, 2009 at 2:05 AM
- Rebecca said...
I would chose Orange Attitude. Love the color but I really love the name.
- December 4, 2009 at 3:55 AM
- Angela :o) said...
Dear Alana, I'm the same way when I meet even LOCAL celebrities. "OMG! You're Bob from Bob's big burgers. I am SUCH a fan!"
Your hat/gloves are gorgeous. Gives hope to those of us wanting to try these projects.
I love the Royal Red colorway too. thanks for opening the drawing. Good luck to everyone.
Love, Angela in Italy - December 4, 2009 at 4:44 AM
- Donita Porter said...
Superior Spruce
Is my favorite. Love your pod cast.
firstname.lastname@example.com - December 4, 2009 at 9:05 AM
- Val said...
Thanks for another great podcast. I would faint if I met Jared Flood in person. And I too, have a secret sweater fantasy shelf in my head. Every sweater I knit isn't quite right and it ends up in my dresser not seeing the light of day very often. I'll keep trying though and loving every minute of it!
- December 4, 2009 at 10:18 AM
- alligator said...
I love this podcast. The classic elite princess sounds really nice. I especially like the Spruce color.
- December 4, 2009 at 11:42 AM
- Connie, the daisyhead said...
Thanks for another good podcast!
I'm imaging a Laurel in the Superior Spruce. Mmm... - December 4, 2009 at 4:27 PM
- Kelly said...
Fun podcast and great hat! My favorite colorway Cotes du Rhone.
- December 5, 2009 at 6:06 AM
- Alaska Denise said...
Pretty hat! An organization I belong to will be having a "Go Red" fashion show for the support of Women's Heart Health in Februray, wouldn't the Red yarn make a great hat for the show?!
Hope I win, denise - December 5, 2009 at 8:46 AM
- CG said...
Love the episode and the podcast ... I am so with you about being a perfectionist! But rest assured, your hat is absolutely gorgeous ... as well as your pics of your hat!!
Cotes du Rhone has to be my favorite color, it must be so pretty in person. The Princess yarn looks absolutely amazing to knit!! - December 5, 2009 at 11:57 AM
- jkinsc said...
Love the podcast! My favorite color in the Classic Elite Princess is the Superior Spruce.
- December 5, 2009 at 4:51 PM
- EngrSandi said...
I'm new to your podcast and really enjoyed this episode. I'll be back for more and the previous episodes.
The yarn sounds great. I like the Royal Red, it's yummy looking. - December 5, 2009 at 6:34 PM
- Robin V said...
I've felt the same when meeting bloggers in person - too shy to say a word!
The Princess yarn colors are all lovely - maybe the Tawny Chestnut would be my favorite? (Hard to say...) - December 5, 2009 at 8:11 PM
- Unknown said...
I like the superior spruce, and I think your bobbles are lovely, not puny!!!
- December 6, 2009 at 4:31 AM
- jill pickle said...
I love listening. Makes me want to just knit all of the patters you mention!
- December 6, 2009 at 8:32 AM
Great episode! I loved hearing about Made In Brooklyn book and patterns. If I get picked for the drawing, I love the Superior Spruce colorway, its a wonderful green.
- December 6, 2009 at 10:57 AM
- d said...
Alana, Thank you for another gread podcast! I love the spruce color of the princess yarn....
- December 7, 2009 at 7:17 AM
- slmiller8 said...
Royal Red is nice,and so is Milord's madder. I always enjoy listening to your podcasts.
- December 7, 2009 at 9:16 AM
- katerina said...
Your hat looks soo so good! Love the color - I think my favorite color is either the Milords Maddor (I'm an orange fan!) or the Majesty's Magenta!
Now I have to go check out Jared's book! - December 7, 2009 at 9:17 AM
- Ynkchck2 said...
I love the hat you made!! and the color is great
- December 7, 2009 at 12:56 PM
- CeRae said...
Ah, finally a quiet moment to listen to the podcast. Thank you for opening the door to new yarns and patterns to us listeners!
I'm loving the Milord's Madder too! - December 8, 2009 at 1:12 PM
- knitterlydesigns said...
I would love to try this yarn. I like 3432 Majesty's Magenta.
- December 9, 2009 at 8:28 AM
- Miss Bea said...
Just listened, and I'm finally caught up! Another great podcast. If I'm lucky enough to win, my favorite color is the Tawny Chestnut.
- December 9, 2009 at 10:54 AM
- Kristin said...
Great podcast as usual!
I like the grey or the Genteel blue. I'm not comfortable wearing bold colors myself. They look so good on others, but I like more muted tones on me. - December 9, 2009 at 1:09 PM
- Unknown said...
I found this podcast on iTunes and I really enjoy it. I miss you when you take a break. Keep it up, please.
- December 9, 2009 at 6:26 PM
- jjphotoFTW said...
This was a great episode; I really loved the guest story. I think the Majesty's Magenta the best colorway, but I might have a purple bias.
-Johanna - December 10, 2009 at 5:34 AM
- Lora said...
I think out of all the Princess Yarn colors yours suits the pattern. It is gorgeous!!!! ohbytheway....idonotfindyourbobbleslacking... :)
- December 11, 2009 at 4:32 PM
- Jane C said...
wonderful Podcast! I can hardly wait to start some of the Made in Brooklyn projects!
- December 12, 2009 at 3:41 PM
- Kate said...
Hooray! I finally got to listen. Better late than never :P You definitely have me itching to get my hands on some Princess yarn.
- December 12, 2009 at 7:57 PM
- Lori said...
Great episode! Cotes du Rhone is my favorite. I'm not sure if it's the color or the name that I love more :)
email@example.com - December 13, 2009 at 2:42 PM
- Unknown said...
thanks for the great stories. I am not alone!
jilldwarren at ravelry - December 14, 2009 at 6:59 AM
- loloknits said...
I love the color you chose, what a beautiful hat!
- December 15, 2009 at 11:08 AM
- NeveMaggie said...
I have only just downloaded all your podcast and within 4 days I am up to episode 20. Only 9 more to go till I am up to speed on all that has been happening. I am so enjoying your podcast and love coming on to Rav and seeing the projects you are knitting. Love your work and enjoy listening to you .I can even hear your voice in my sleep LOL
- January 15, 2010 at 2:46 AM
- Marelis said...
I love your blog! I have been listening to it while typing up papers for grad school. I love the fantasy sweater shelf... I have a fantasy sock drawer. :) I love the Genteel Grey color from Classic Elite Princess. Gorgeous yarn.
- January 28, 2010 at 1:02 PM


text:
Category: Player Statistics
- General Stats Setup
- Game statistics can be used to track a players progress and performance level. Your site allows you to define sets of statistics and enter data on a game by game basis for each player.
Entering Stats
Entering statistics for a game is a two step process.
Entering statistics for a game is a two step process.
- First, go to your team's Results page. If you've already logged into the Admin area and your team has been enabled for statistics, you will notice a chart symbol on the right side of each game displayed. Click this icon to go to the next step.
- The Player Statistics page is where you enter a player's data for a particular game. The top of this form lists general information about the game such as date, time, location, teams and the score. Below this are input fields for the various statistics gathered for the player's category.
The first field, Position, is standard on all forms. You can use this field to optionally specify the actual position this person played during the game. If your team rotates positions, this is a good way to keep track.
The remaining fields are used to enter the statistics data for this player for this game. Please enter only numeric data. You can enter up to 3 decimal places for fractional data. If you're not sure what a particular field is for, move your mouse cursor over the field and hold it there. A balloon help message will be displayed with the description entered for that statistic.
Downloading Stats
Player statistics data can be downloaded for an entire season, a league, a team or an individual player based on your choices. Choose only the season to retrieve an entire season. Optionally, choose a league or team to download all stats for an entire league or an individual team. If you choose a team, you will also be able to choose an individual member of that team. Click the Download button when you're ready to download the data for your selection.


text:
Brembo Gran Turismo Slotted Brake Kit 2P2.9020A2
- Our Price: $4,195.00
- Shipping:FREE SHIPPING
- Part Number: 2P2.9020A2
Rear 2-Piece Slotted Brake Kit
- Part #: 2P2.9020A2
- 380mm x 28mm Discs with 4-Piston Monobloc Calipers
- Red
Free ShippingSelect your vehicle details above to ensure item compatibility.
- Give your vehicle professional, high-performance braking by installing a Brembo Gran Turismo Slotted Brake Kit
- Custom-designed for your vehicle
- Complete brake kit: brake lines, brake pads, slotted rotors, brake calipers, and aircraft-grade hardware included
- Durable slotted rotor design constantly refreshes the brake surface for improved "bite" and pedal feel
- Mounting design decreases pressure on brakes, dissipating temperature, wear, and stress
- Lightweight to increase engine capability
- Available front or back and in a wide range of colors, depending on application
- 2-Year Warranty
Whether you use your vehicle to tear up blacktop or to cart around little kids, your chariot's braking performance is of the utmost importance. Ensure you get top-of-the-line design, and then some, by using a Brembo Gran Turismo Slotted Brake Kit.
You will find everything you need for a total brake renovation in this one kit, and all of it custom-designed to your car, truck, or SUV. That means all the brake lines, calipers, pads, and slotted rotors you need. The way these brakes mount to your tires decreases temperature, pressure and stress, prolonging the life of your brakes. The lightweight Brembo Gran Turismo Slotted Brake Kit allows your vehicle to operate at a high level with no increased force acting upon it, and each rotor's slotted surface continually refreshes itself during use.
There are a number of options available to you when it comes to choosing your system. For most kits, both front and rear systems are available, meaning you can completely renew your vehicle's braking system. A range of colors are available, as well, depending on your particular configuration, allowing you to choose among Red, Yellow, Black, Gold, and Silver calipers to outfit your vehicle with a unique style all its own. Whatever you choose, you can do so confident in the knowledge that the forward-thinking design of these brake kits increases their bite in any conditions while augmenting pedal feel and responsiveness. Better still, everything is designed to work with your factory cylinders and systems.
There's no good reason to accept less-than-stellar brakes in your vehicle. Not when you can have a system as advanced and hard-working as a Brembo Gran Turismo Slotted Brake Kit. Backed by a 2-Year Warranty.
Note: Please ensure your specific wheels are compatible with this upgrade before placing your order.
Brembo 2P2.9020A2 fits:
- 2005-2008 Land Rover LR3
- 2005-2013 Land Rover Range Rover Sport


text:
Scott Smith (CRD# 2325807) is an Investment Advisor Representative working at Sfi Advisors, LLC in Montclair, NJ and has over 30 years of experience in the finance industry.
Legacy Care Wealth, LLC
Financial Life Focus, LLC
Origin Investment Advisory LLC
Company Name | Location | Dates | Years |
Sfi Advisors, LLC | Montclair, NJ | May 2017 - Current | 6 |
Princeton Funds Distributor, Inc. | Plainsboro, NJ | Mar 1987 - Current | 37 |
Kestra Advisory Services, LLC | Austin, TX | Apr 2016 - May 2017 | 1 |
Kestra Investment Services, LLC | Austin, TX | Jun 2006 - May 2017 | 10 |
Nfp Securities Inc. | Austin, TX | Jan 2004 - Sep 2016 | 12 |
Exam Code | Name | Passed Date |
S63 | Uniform Securities State Law Examination | Apr 1993 |
S65 | NASAA Investment Advisors Law Examination | Sep 1993 |
Total Assets Under Management197MILLIONS
Total Number of Accounts335ACCOUNTS
Average Account Value$587,940
- A percentage of assets under your management
- Fixed fees (other than subscription fees)
- Financial planning services
- Portfolio management for individuals and/or small businesses
- Pension consulting services
- Other
About Wealthminder
Wealthminder was created for one simple reason: To help people get the financial assistance they need to achieve their long-term financial goals.
Wealthminder is a database of every Investment Advisor Representative in the country. We work hard to collect and provide you the information you need to find a financial advisor who's right for you.
If you are looking for a specific financial advisor and you can't find them on Wealthminder, it's likely that they are either exclusively a broker or are unlicensed - please contact us and we'll try to help!
Finding a Financial Advisor through Wealthminder
Historically finding and hiring a financial advisor was hard. Wealthminder was built to make the process much easier.
The best way to use Wealthminder is to take advantage of our free proposal system. All you have to do is take a few minutes of your time to describe your situation and the assistance you are looking for.
Wealthminder then sends your request to our network of prescreened financial advisors. If a financial advisor is interested in your business, they will submit a proposal to you.
You review the proposals you receive and decide if you'd like to have a follow-up call with one or more of the financial advisors.
Throughout the process, you maintain control. We only share your contact information with a financial advisor once you ask for an introduction.


text:
The District is a political subdivision of the state of Arizona. The Maricopa County Board of Supervisors serves as the District's Board of Directors, which in turn receives counsel from the Flood Control Advisory Board comprised of County citizens.
Show All Answers
A secondary property tax paid by Maricopa County property owners provides the District's primary funding. The District seeks financial project partnerships from Federal, state and local agencies to supplement tax revenue. Other revenue sources include sales of excess land and other assets, permitting fees, and fund balance interest.
The Flood Control District of Maricopa County performs floodplain management for the following cities & towns:
The following cities & towns conduct their own floodplain management. Contact them directly regarding floodplain questions at the phone numbers below:
All other cities & towns contact the Flood Control District at (602) 506-1501
Citizens in unincorporated Maricopa County should contact the Department of Planning and Development regarding floodplain regulation and permits. (602) 506-3301


text:
Home Cabs Corporate Taxi Service In Hodal
As we know corporate travel services or taxi service for Corporate in Hodal are frequently needed in the corporate world for easy movement of the officials from the office to their hotels. We've always been more than a taxi company, and you can expect something special when you travel with us. We at Home Cabs provide this corporate travel service in Hodal all over the country. To avail the Hodal corporate taxi service, taxi for regular in Hodal, taxi/cab for school in Hodal, Ecco for school in Hodal or taxi for permanent you can contact us either by mail (firstname.lastname@example.com), Home Cabs Customer Care Number 8222873873 or you can send your request from website. We will be would be happy to help you in times of need. If you will use Home Cabs taxi service for corporate in Hodal then special discount and special facility will also be provided for employee transportation taxi service.
The main Advantages of this Corporate Taxi service in Hodal are: Easy movement from one place to another, can be availed at any time of the day, you can take the befits of taxi/cab service for staff in Hodal , Book taxi on monthly basis in Hodal,
How it works
You can book taxi for your employee and generate bill from your dashboard. We have provided the facility to check history of all the booking done by you for your staff and your guest. If you will book using this corporate you will get special discount.
If you dont have Home Cabs Corporate Account for booking you can use our Outstation, Oneway, Transfer service according to your need


text:
Log in with facebook
No products
View My Cart Checkout
Display all pictures
Product code: #
Condition: New
144 Item Items
Warning: Last items in stock!
Availability date:
More details
5,69 € tax incl.
Per comprare un singolo prodotto e non a stock e per le personalizzazione dei prodotti con scritte conattaci: email@example.com
This product is not sold individually. You must select at least 1 quantity for this product.
Qty - +
Add to Cart
Recipient :
Name of your friend * :
E-mail address of your friend * :
* Required fields
Send or Cancel
After saving your customized product, remember to add it to your cart.
* required fields


text: Changes from Ant 1.9.3 TO Ant 1.9.4 =================================== Changes that could break older environments: ------------------------------------------- * the prefixValues attribute of <property> didn't work as expected when set to false (the default). It is quite likely existing build files relied on the wrong behavior and expect Ant to resolve the value side against the properties defined in the property file itself - these build files must now explicitly set the prefixValues attribute to true. Bugzilla Report 54769 * when matching an entry of a zip/tarfileset against a pattern a leading slash will be stripped from the entry name. Most archives don't contain paths with leading slashes anyway. This may cause include/exclude patterns that start with a / to stop matching anything. Such patterns only used to work by accident and only on platforms with multiple file system roots. Bugzilla Report 53949 * DirectoryScanner and thus fileset/dirset will now silently drop all filesystem objects that are neither files nor directories according to java.io.File. This prevents Ant from reading named pipes which might lead to blocking or other undefined behavior. Bugzilla Report 56149 * BuildFileTest and BaseSelectorTest have both been deprecated in favour of BuildFileRule and BaseSelectorRule respectively, and the tests that previously extended these base tests have been converted to JUnit 4 tests using the new "rule"s. Any external test that sub-classed a test in the Ant workspace, rather than BuildFileTest, will need changed to either use JUnit4's annotations, or be modified to extend BuildFileTest directly. This will not affect any tests that are being executed by Ant's junit or batchtest tasks that are not specifically testing Ant's code. Fixed bugs: ----------- * <import>/<include> failed when the importing file was loaded from an URI or a jar and it imported a file from the local file system via an absolute path. Bugzilla Report 50953 * <import> could import the same resource twice when imported via different resource types. Bugzilla Report 55097 * several calls to File#mkdirs could fall victim to a race condition where another thread already created the same directory. Bugzilla Report 55290 * <manifestclasspath> created '/' rather than './' for the parent directory of the given jarfile. Bugzilla Report 55049 * <concat>'s fixlastline="true" didn't work when using certain filter readers. Bugzilla Report 54672 * several places where resources are read from jars will now explicitly disable caching to avoid problems with reloading jars. Bugzilla Report 54473 * AntClassloader will now ignore files that are part of the classpath but not zip files when scanning for resources. It used to throw an exception. Bugzilla Report 53964 * <javadoc> caused a NullPointerException when no destdir was set. Bugzilla Report 55949 * <jar filesetmanifest="mergewithoutmain"> would still include the Main section of the fileset manifests if there was no nested manifest or manifest attribute. Bugzilla Report 54171 * reading of compiler args has become more defensive Bugzilla Report 53754 * <copy> without force="true" would not only fail to overwrite a read-only file as expected but also remove the existing file. Bugzilla Report 53095 * <delete removeNotFollowedSymlinks="true"> would remove symbolic links to not-included files. It will still delete symlinks to directories that would have been followed even if they are not explicitly included. exclude-Patterns can still be used to preserve symbolic links. Bugzilla Report 53959 * Sometimes copy-operations using NIO FileChannels fail. Ant will now try to use a Stream based copy operation as fallback when the Channel based copy fails. Bugzilla Reports 53102 and 54397 * Javadoc.postProcessGeneratedJavadocs() fails for Classes that extend Javadoc Bugzilla Report 56047 * TarInputStream will now read archives created by tar implementations that encode big numbers by not adding a trailing NUL. * the isExists() method of URLResource returned false positives for HTTP and FTP URLs. Other changes: -------------- * initial support for Java 1.9 * <sshexec> can optionally pass System.in to the remote process Bugzilla Report 55393 * <sshexec> now supports capturing error output of the executed process and setting a property from the return code. Bugzilla Report 48478 * <javadoc> now has an option to fail if javadoc issues warnings. Bugzilla Report 55015 * <sql> has a new outputencoding attribute. Bugzilla Report 39541 * changes to JUnitTestRunner and PlainJUnitResultFormatter to make OutOfMemoryErrors less likely. Bugzilla Report 45536 * changes to DOMElementWriter to make OutOfMemoryErrors less likely. Bugzilla Report 54147 * <redirector> has a new attribute binaryOutput that prevents Ant from splitting the output into lines. This prevents binary output from being corrupted but may lead to error and normal output being mixed up. Bugzilla Report 55667 Bugzilla Report 56156 * the nested <message> elements of <mail> now have an optional inputEncoding attribute that can be used to specify the encoding of files read that don't use the platform's default encoding. Bugzilla Report 56258 * The <get> task now explicitly accepts and supports the gzip content encoding. Bugzilla Report 49453 * A new resourcecollection type <multirootfileset> acts like a union of <fileset>s and <dirset>s that share the same configuration but have different base directories. Bugzilla Report 48621 * <get> has a quiet attribute that makes the task log errors only when enabled. GitHub Pull Request #1 * <junit> has now a threads attribute allowing to run the tests in several threads. Bugzilla Report 55925 * addition of a new ProcessUtil class providing the process id of the current process * changes to allow to run the JUnit testcases of Ant in parallel, by making them use unique temporary directories