text:
I. Introduction
II. Technical Overview
III. Results and Discussion
IV. Reference
V. Appendix
The central objective of this project is demonstrating the capabilities of Artificial Neural Network implementations in recognizing extended sets of optical language symbols. The applications of this technique range from document digitizing and preservation to handwritten text recognition in handheld devices.
The classic difficulty of being able to correctly recognize even typed optical language symbols is the complex irregularity among pictorial representations of the same character due to variations in fonts, styles and size. This irregularity undoubtedly widens when one deals with handwritten characters.
Hence the conventional programming methods of mapping symbol images into matrices, analyzing pixel and/or vector data and trying to decide which symbol corresponds to which character would yield little or no realistic results. Clearly the needed methodology will be one that can detect 'proximity' of graphic representations to known symbols and make decisions based on this proximity. To implement such proximity algorithms in the conventional programming one needs to write endless code, one for each type of possible irregularity or deviation from the assumed output either in terms of pixel or vector parameters, clearly not a realistic fare.
An emerging technique in this particular application area is the use of Artificial Neural Network implementations with networks employing specific guides (learning rules) to update the links (weights) between their nodes. Such networks can be fed the data from the graphic analysis of the input picture and trained to output characters in one or another form. Specifically some network models use a set of desired outputs to compare with the output and compute an error to make use of in adjusting their weights. Such learning rules are termed as Supervised Learning.
One such network with supervised learning rule is the Multi-Layer Perceptron (MLP) model. It uses the Generalized Delta Learning Rule for adjusting its weights and can be trained for a set of input/desired output values in a number of iterations. The very nature of this particular model is that it will force the output to one of nearby values if a variation of input is fed to the network that it is not trained for, thus solving the proximity issue. Both concepts will be discussed in the introduction part of this report.
The project has employed the MLP technique mentioned and excellent results were obtained for a number of widely used font types. The technical approach followed in processing input images, detecting graphic symbols, analyzing and mapping the symbols and training the network for a set of desired Unicode characters corresponding to the input images are discussed in the subsequent sections. Even though the implementation might have some limitations in terms of functionality and robustness, the researcher is confident that it fully serves the purpose of addressing the desired objectives.
Modeling systems and functions using neural network mechanisms is a relatively new and developing science in computer technologies. The particular area derives its basis from the way neurons interact and function in the natural animal brain, especially humans. The animal brain is known to operate in massively parallel manner in recognition, reasoning, reaction and damage recovery. All these seemingly sophisticated undertakings are now understood to be attributed to aggregations of very simple algorithms of pattern storage and retrieval. Neurons in the brain communicate with one another across special electrochemical links known as synapses. At a time one neuron can be linked to as many as 10,000 others although links as high as hundred thousands are observed to exist. The typical human brain at birth is estimated to house one hundred billion plus neurons. Such a combination would yield a synaptic connection of 1015, which gives the brain its power in complex spatio-graphical computation.
Unlike the animal brain, the traditional computer works in serial mode, which is to mean instructions are executed only one at a time, assuming a uni-processor machine. The illusion of multitasking and real-time interactivity is simulated by the use of high computation speed and process scheduling. In contrast to the natural brain which communicates internally in electrochemical links, that can achieve a maximum speed in milliseconds range, the microprocessor executes instructions in the lower microseconds range. A modern processor such as the Intel Pentium-4 or AMD Opteron making use of multiple pipes and hyper-threading technologies can perform up to 20 MFloPs (Million Floating Point executions) in a single second.
It is the inspiration of this speed advantage of artificial machines, and parallel capability of the natural brain that motivated the effort to combine the two and enable performing complex 'Artificial Intelligence' tasks believed to be impossible in the past. Although artificial neural networks are currently implemented in the traditional serially operable computer, they still utilize the parallel power of the brain in a simulated manner.
Neural networks have seen an explosion of interest over the last few years, and are being successfully applied across an extraordinary range of problem domains, in areas as diverse as finance, medicine, engineering, geology and physics. Indeed, anywhere that there are problems of prediction, classification or control, neural networks are being introduced. This sweeping success can be attributed to a few key factors:
Power: Neural networks are very sophisticated modeling techniques capable of modeling extremely complex functions. In particular, neural networks are nonlinear. For many years linear modeling has been the commonly used technique in most modeling domains since linear models have well-known optimization strategies. Where the linear approximation was not valid (which was frequently the case) the models suffered accordingly. Neural networks also keep in check the curse of dimensionality problem that bedevils attempts to model nonlinear functions with large numbers of variables.
Ease of use: Neural networks learn by example. The neural network user gathers representative data, and then invokes training algorithms to automatically learn the structure of the data. Although the user does need to have some heuristic knowledge of how to select and prepare data, how to select an appropriate neural network, and how to interpret the results, the level of user knowledge needed to successfully apply neural networks is much lower than would be the case using (for example) some more traditional nonlinear statistical methods.
To capture the essence of biological neural systems, an artificial neuron is defined as follows:
If the step activation function is used (i.e., the neuron's output is 0 if the input is less than zero, and 1 if the input is greater than or equal to 0) then the neuron acts just like the biological neuron described earlier (subtracting the threshold from the weighted sum and comparing with zero is equivalent to comparing the weighted sum to the threshold). Actually, the step function is rarely used in artificial neural networks, as will be discussed. Note also that weights can be negative, which implies that the synapse has an inhibitory rather than excitatory effect on the neuron: inhibitory neurons are found in the brain.
This describes an individual neuron. The next question is: how should neurons be connected together? If a network is to be of any use, there must be inputs (which carry the values of variables of interest in the outside world) and outputs (which form predictions, or control signals). Inputs and outputs correspond to sensory and motor nerves such as those coming from the eyes and leading to the hands. However, there also can be hidden neurons that play an internal role in the network. The input, hidden and output neurons need to be connected together.
A typical feedforward network has neurons arranged in a distinct layered topology. The input layer is not really neural at all: these units simply serve to introduce the values of the input variables. The hidden and output layer neurons are each connected to all of the units in the preceding layer. Again, it is possible to define networks that are partially-connected to only some units in the preceding layer; however, for most applications fully-connected networks are better.
The Multi-Layer Perceptron Neural Network is perhaps the most popular network architecture in use today. The units each perform a biased weighted sum of their inputs and pass this activation level through an activation function to produce their output, and the units are arranged in a layered feedforward topology. The network thus has a simple interpretation as a form of input-output model, with the weights and thresholds (biases) the free parameters of the model. Such networks can model functions of almost arbitrary complexity, with the number of layers, and the number of units in each layer, determining the function complexity. Important issues in Multilayer Perceptrons (MLP) design include specification of the number of hidden layers and the number of units in each layer.
Fig.1 A Typical Feedforward Network
Most common activation functions are the logistic and hyperbolic tangent sigmoid functions. The project used the hyperbolic tangent function: and derivative: .
Several languages are characterized by having their own written symbolic representations (characters). These characters are either a delegate of a specific audioglyph, accent or whole words in some cases. In terms of structure world language characters manifest various levels of organization. With respect to this structure there always is an issue of compromise between ease of construction and space conservation. Highly structured alphabets like the Latin set enable easy construction of language elements while forcing the use of additional space. Medium structure alphabets like the Ethiopic (Ge'ez) conserve space due to representation of whole audioglyphs and tones in one symbol, but dictate the necessity of having extended sets of symbols and thus a difficult level of use and learning. Some alphabets, namely the oriental alphabets, exhibit a very low amount of structuring that whole words are delegated by single symbols. Such languages are composed of several thousand symbols and are known to need a learning cycle spanning whole lifetimes.
Representing alphabetic symbols in the digital computer has been an issue from the beginning of the computer era. The initial efforts of this representation (encoding) was for the alphanumeric set of the Latin alphabet and some common mathematical and formatting symbols. It was not until the 1960's that a formal encoding standard was prepared and issued by the American computer standards bureau ANSI and named the ASCII Character set. It is composed of and 8-bit encoded computer symbols with a total of 256 possible unique symbols. In some cases certain combination of keys were allowed to form 16-bit words to represent extended symbols. The final rendering of the characters on the user display was left for the application program in order to allow for various fonts and styles to be implemented.
At the time, the 256+ encoded characters were thought of suffice for all the needs of computer usage. But with the emergence of computer markets in the non-western societies and the internet era, representation of a further set of alphabets in the computer was necessitated. Initial attempts to meet this requirement were based on further combination of ASCII encoded characters to represent the new symbols. This however led to a deep chaos in rendering characters especially in web pages since the user had to choose the correct encoding on the browser. Further difficulty was in coordinating the usage of key combinations between different implementers to ensure uniqueness.
It was in the 1990s that a final solution was proposed by an independent consortium to extend the basic encoding width to 16-bit and accommodate up to 65,536 unique symbols. The new encoding was named Unicode due to its ability to represent all the known symbols in a single encoding. The first 256 codes of this new set were reserved for the ASCII set in order to maintain compatibility with existing systems. ASCII characters can be extracted form a Unicode word by reading the lower 8 bits and ignoring the rest or vise versa, depending on the type of endian (big or small) used.
The Unicode set is managed by the Unicode consortium which examines encoding requests, validate symbols and approve the final encoding with a set of unique 16-bit codes. The set still has a huge portion of it non-occupied waiting to accommodate any upcoming requests. Ever since it's founding, popular computer hardware and software manufacturers like Microsoft have accepted and supported the Unicode effort.
As an aside the researcher mentions that the Ethiopic alphabet (commonly known as Ge'ez) is represented from 1200H – 137FH in the Unicode set.
The operations of the network implementation in this project can be summarized by the following steps:
Essential components of the implementation are:
The MLP Network implemented for the purpose of this project is composed of 3 layers, one input, one hidden and one output.
The input layer constitutes of 150 neurons which receive pixel binary data from a 10x15 symbol pixel matrix. The size of this matrix was decided taking into consideration the average height and width of character image that can be mapped without introducing any significant pixel noise.
The hidden layer constitutes of 250 neurons whose number is decided on the basis of optimal results on a trial and error basis.
The output layer is composed of 16 neurons corresponding to the 16-bits of Unicode encoding.
To initialize the weights a random function was used to assign an initial random number which lies between two preset integers named ±weight_bias. The weight bias is selected from trial and error observation to correspond to average weights for quick convergence.
Fig. 2 The Project MLP Network
The process of image analysis to detect character symbols by examining pixels is the core part of input set preparation in both the training and testing phase. Symbolic extents are recognized out of an input image file based on the color value of individual pixels, which for the limits of this project is assumed to be either black RGB(255,0,0,0) or white RGB(255,255,255,255). The input images are assumed to be in bitmap form of any resolution which can be mapped to an internal bitmap object in the Microsoft Visual Studio environment. The procedure also assumes the input image is composed of only characters and any other type of bounding object like a boarder line is not taken into consideration.
The procedure for analyzing images to detect characters is listed in the following algorithms:
i. Determining character lines
Enumeration of character lines in a character image ('page') is essential in delimiting the bounds within which the detection can proceed. Thus detecting the next character in an image does not necessarily involve scanning the whole image all over again.
ii. Detecting Individual symbols
Detection of individual symbols involves scanning character lines for orthogonally separable images composed of black pixels.
Fig 3. Line and Character boundary detection
From the procedure followed and the above figure it is obvious that the detected character bound might not be the actual bound for the character in question. This is an issue that arises with the height and bottom alignment irregularity that exists with printed alphabetic symbols. Thus a line top does not necessarily mean top of all characters and a line bottom might not mean bottom of all characters as well.
Hence a confirmation of top and bottom for the character is needed.
An optional confirmation algorithm implemented in the project is:
Fig 4. Confirmation of Character boundaries
The next step is to map the symbol image into a corresponding two dimensional binary matrix. An important issue to consider here will be deciding the size of the matrix. If all the pixels of the symbol are mapped into the matrix, one would definitely be able to acquire all the distinguishing pixel features of the symbol and minimize overlap with other symbols. However this strategy would imply maintaining and processing a very large matrix (up to 1500 elements for a 100x150 pixel image). Hence a reasonable tradeoff is needed in order to minimize processing time which will not significantly affect the separability of the patterns. The project employed a sampling strategy which would map the symbol image into a 10x15 binary matrix with only 150 elements. Since the height and width of individual images vary, an adaptive sampling algorithm was implemented. The algorithm is listed below:
a. For the width (initially 20 elements wide)
b. For the height (initially 30 elements high)
c. Further reduce the matrix to 10x15 by sampling by a factor of 2 on both the width and the height
Fig. 5 Mapping symbol images onto a binary matrix
In order to be able to feed the matrix data to the network (which is of a single dimension) the matrix must first be linearized to a single dimension. This is accomplished with a simple routine with the following algorithm:
Hence the linear array is our input vector for the MLP Network. In a training phase all such symbols from the trainer set image file are mapped into their own linear array and as a whole constitute an input space. The trainer set would also contain a file of character strings that directly correspond to the input symbol images to serve as the desired output of the training. A sample mini trainer set is shown below:
Fig. 6 Input Image and Desired output text files for the sample Mini-Tahoma trainer set
Once the network has been initialized and the training input space prepared the network is ready to be trained. Some issues that need to be addressed upon training the network are:
Alphabetic optical symbols are one of the most chaotic input sets in pattern recognitions studies. This is due to the unpredictable nature of their pictorial representation seen from the sequence of their order. For instance the Latin alphabetic consecutive character 'A' and 'B' have little similarity in feature when represented in their pictorial symbolic form. The figure below demonstrates the point of chaotic and non-chaotic sequence with the Latin and some factious character set:
Fig. 7 Example of chaotic and non-chaotic symbol sequences
The complexity of the individual pattern data is also another issue in character recognition. Each symbol has a large number of distinct features that need to be accounted for in order to correctly recognize it. Elimination of some features might result in pattern overlap and the minimum amount of data required makes it one of the most complex classes of input space in pattern recognition.
Other than the known issues mentioned, the other numeric parameters of the network are determined in real time. They also vary greatly from one implementation to another according to the number of input symbols fed and the network topology.
For the purpose of this project the parameters use are:
The training routine implemented the following basic algorithm
The flowchart representation of the algorithm is illustrated below
The testing phase of the implementation is simple and straightforward. Since the program is coded into modular parts the same routines that were used to load, analyze and compute network parameters of input vectors in the training phase can be reused in the testing phase as well.
The basic steps in testing input images for characters can be summarized as follows:
The network has been trained and tested for a number of widely used font type in the Latin alphabet. Since the implementation of the software is open and the program code is scalable, the inclusion of more number of fonts from any typed language alphabet is straight forward.
The necessary steps are preparing the sequence of input symbol images in a single image file (*.bmp [bitmap] extension), typing the corresponding characters in a text file (*.cts [character trainer set] extension) and saving the two in the same folder (both must have the same file name except for their extensions). The application will provide a file opener dialog for the user to locate the *.cts text file and will load the corresponding image file by itself.
Although the results listed in the subsequent tables are from a training/testing process of symbol images created with a 72pt. font size the use of any other size is also straight forward by preparing the input/desired output set as explained. The application can be operated with symbol images as small as 20pt font size.
Note: Due to the random valued initialization of weight values results listed represent only typical network performance and exact reproduction might not be obtained with other trials.
Number of characters=90, Learning rate=150, Sigmoid slope=0.014
Font Type
№ of wrong characters
% Error
Latin Arial
Latin Tahoma
Latin Times Roman
Number of Epochs=100, Learning rate=150, Sigmoid slope=0.014
Number of characters=90, Number of Epochs=600, Sigmoid slope=0.014
1. Influence of parameter variation
One can easily observe from the results listing that the entry for the 'Latin Arial' font type has, in general, the lowest performance among its peers. This has been discovered to arise due to an overlap in the pictorial representation of two of its symbols, namely the upper case letter 'I' ('I' in Times Roman) and the lower case letter 'l' ('l' in Times Roman).
Fig. 8 Matrix analysis for both lower case 'l' (006Ch) and upper case 'I' (0049h) of the Arial font.
This would definitely present a logically non-separable recognition task to the network as the training set will be instructing it to output one state for a symbolic image and at some other time another state for the same image. This will be disturbing not only the output vectors of the two characters but also nearby states as well as can be seen in the number of wrong characters. The best state the network can reach in such a case is to train itself to output one vector for both inputs, necessitating a wrong state to one of the output. Still this optimal state can be reached only with more number of iterations which for this implementation was 800. At such high number of epochs the other sets tend to jump into over learning states as discussed above.
Some symbol sequences are orthogonally inseparable. This is to mean there can not be a vertical line that passes between the two symbols without crossing bitmap areas of either. Such images could not be processed for individual symbols within the limits of the project since it requires complex image processing algorithms. Some cases are presented below:
Fig 9. Some orthogonally inseparable symbolic combinations in the Latin alphabet
© 2006, Daniel Admassu
public void identify_lines() { int y=image_start_pixel_y; int x=image_start_pixel_x; bool no_black_pixel; int line_number=0; line_present=true; while(line_present) { x=image_start_pixel_x; while(Convert.ToString (input_image.GetPixel (x,y))== "Color [A=255, R=255, G=255, B=255]") { x++; if(x==input_image_width) { x=image_start_pixel_x; y++; } if(y>=input_image_height) { line_present=false; break; } } if(line_present) { line_top[line_number]=y; no_black_pixel=false; while(no_black_pixel==false) { y++; no_black_pixel=true; for(x=image_start_pixel_x;x<input_image_width;x++) if((Convert.ToString (input_image.GetPixel (x,y))== "Color [A=255, R=0, G=0, B=0]")) no_black_pixel=false; } line_bottom[line_number]=y-1; line_number++; } } number_of_lines=line_number; }
public void get_character_bounds() { int x=image_start_pixel_x; int y=image_start_pixel_y; bool no_black_pixel=false; if(y<=input_image_height && x<=input_image_width) { while(Convert.ToString (input_image.GetPixel (x,y))== "Color [A=255, R=255, G=255, B=255]") { x++; if(x==input_image_width) { x=image_start_pixel_x; y++; } if(y>=line_bottom[current_line]) { character_present=false; break; } } if(character_present) { top=y; x=image_start_pixel_x; y=image_start_pixel_y; while(Convert.ToString (input_image.GetPixel (x,y))== "Color [A=255, R=255, G=255, B=255]") { y++; if(y==line_bottom[current_line]) { y=image_start_pixel_y; x++; } if(x>input_image_width) break; } if(x<input_image_width) left=x; no_black_pixel=true; y=line_bottom[current_line]+2; while(no_black_pixel==true) { y--; for(x=image_start_pixel_x;x<input_image_width;x++) if((Convert.ToString (input_image.GetPixel (x,y))== "Color [A=255, R=0, G=0, B=0]")) no_black_pixel=false; } bottom=y; no_black_pixel=false; x=left+10; while(no_black_pixel==false) { x++; no_black_pixel=true; for(y=image_start_pixel_y;y<line_bottom[current_line];y++) if((Convert.ToString (input_image.GetPixel (x,y))== "Color [A=255, R=0, G=0, B=0]")) no_black_pixel=false; } right=x-1; } }
public void form_network() { layers[0]=number_of_input_nodes; layers[number_of_layers-1]=number_of_output_nodes; for(int i=1;i<number_of_layers-1;i++) layers[i]=maximum_layers; }
public void initialize_weights() { for(int i=1;i<number_of_layers;i++) for(int j=0;j<layers[i];j++) for(int k=0;k<layers[i-1];k++) weight[i,j,k]=(float)(rnd.Next(-weight_bias,weight_bias)); }
public void train_network() { int set_number; float average_error=0.0F; progressBar1.Maximum =epochs; for(int epoch=0;epoch<=epochs;epoch++) { average_error=0.0F; for(int i=0;i<number_of_input_sets;i++) { set_number=rnd.Next(0,number_of_input_sets); get_inputs(set_number); get_desired_outputs(set_number); calculate_outputs(); calculate_errors(); calculate_weights(); average_error=average_error+get_average_error(); } progressBar1.PerformStep (); label15.Text = epoch.ToString (); label15.Update (); average_error=average_error/number_of_input_sets; if(average_error<error_threshold) { epoch=epochs+1; progressBar1.Value =progressBar1.Maximum; label22.Text ="<"+error_threshold.ToString (); label22.Update (); } } }
public void calculate_outputs() { float f_net; int number_of_weights; for(int i=0;i<number_of_layers;i++) for(int j=0;j<layers[i];j++) { f_net=0.0F; if(i==0) number_of_weights=1; else number_of_weights=layers[i-1]; for(int k=0;k<number_of_weights;k++) if(i==0) f_net=current_input[j]; else f_net=f_net+node_output[i-1,k]*weight[i,j,k]; node_output[i,j]=sigmoid(f_net); } }
public float sigmoid(float f_net) { float result=(float)((2/(1+Math.Exp(-1*slope*f_net)))-1); // Bipolar return result; } public float sigmoid_derivative(float result) { float derivative=(float)(0.5F*(1-Math.Pow(result,2))); // Bipolar return derivative; }
public void calculate_errors() { float sum=0.0F; for(int i=0;i<number_of_output_nodes;i++) error[number_of_layers-1,i] = (float)((desired_output[i]-node_output[number_of_layers-1,i])* sigmoid_derivative(node_output[number_of_layers-1,i])); for(int i=number_of_layers-2;i>=0;i--) for(int j=0;j<layers[i];j++) { sum=0.0F; for(int k=0;k<layers[i+1];k++) sum=sum+error[i+1,k]*weight[i+1,k,j]; error[i,j] = (float)(sigmoid_derivative(node_output[i,j])*sum); } }
public void calculate_weights() { for(int i=1;i<number_of_layers;i++) for(int j=0;j<layers[i];j++) for(int k=0;k<layers[i-1];k++) { weight[i,j,k] = (float)(weight[i,j,k] + learning_rate*error[i,j]*node_output[i-1,k]); } }
public void character_to_unicode(string character) { int byteCount = unicode.GetByteCount(character.ToCharArray()); byte[] bytes = new Byte[byteCount]; bytes= unicode.GetBytes(character); BitArray bits = new BitArray( bytes ); System.Collections.IEnumerator bit_enumerator = bits.GetEnumerator(); int bit_array_length = bits.Length; bit_enumerator.Reset (); for(int i=0;i<bit_array_length;i++) { bit_enumerator.MoveNext(); if(bit_enumerator.Current.ToString()=="True") desired_output_bit[i]=1; else desired_output_bit[i]=0; } } public char unicode_to_character() { int dec=binary_to_decimal(); Byte[] bytes = new Byte[2]; bytes[0]=(byte)(dec); bytes[1]=0; int charCount = unicode.GetCharCount(bytes); char[] chars = new Char[charCount]; chars=unicode.GetChars(bytes); return chars[0]; }
Unicode OCR ANN Weight values. © 2006 Daniel Admassu. Network Name = Latin Times Roman Hidden Layer Size = 250 Number of Patterns = 90 Number of Epochs = 300 Learning Rate = 150 Sigmoid Slope = 0.014 Weight Bias = 30 Weight[1 , 0 , 0] = -344.8769 Weight[1 , 0 , 1] = -490.7207 Weight[1 , 0 , 2] = -739.5387 Weight[1 , 0 , 3] = -401.8878 Weight[1 , 0 , 4] = 183.874 Weight[1 , 0 , 5] = 167.6926 Weight[1 , 0 , 6] = -29.25896 Weight[1 , 0 , 7] = -42.90004 Weight[1 , 0 , 8] = 443.4576 Weight[1 , 0 , 9] = -208.5291 Weight[1 , 0 , 10] = -264.9088 Weight[1 , 0 , 11] = 16.65468 Weight[1 , 0 , 12] = 401.0692 Weight[1 , 0 , 13] = 409.3685 Weight[1 , 0 , 14] = -161.1487 Weight[1 , 0 , 15] = 89.9006 Weight[1 , 0 , 16] = -851.1705 Weight[1 , 0 , 17] = -96.01544 Weight[1 , 0 , 18] = 290.6281 Weight[1 , 0 , 19] = 64.17367 . . . Weight[2 , 15 , 237] = -5.202068 Weight[2 , 15 , 238] = -16.83099 Weight[2 , 15 , 239] = 23.25441 Weight[2 , 15 , 240] = -24.27003 Weight[2 , 15 , 241] = -4.82569 Weight[2 , 15 , 242] = 36.25824 Weight[2 , 15 , 243] = -28.49981 Weight[2 , 15 , 244] = -8.105846 Weight[2 , 15 , 245] = -1.679604 Weight[2 , 15 , 246] = -3.154837 Weight[2 , 15 , 247] = -11.18855 Weight[2 , 15 , 248] = 8.335608 Weight[2 , 15 , 249] = 30.13228
This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.
A list of licenses authors might use can be found here
How to create new Training Set for New Network using Custom Font
I would like to know the algorithm used? Is it back propogation?
if (this.progressBar1.InvokeRequired) { this.progressBar1.BeginInvoke(new MethodInvoker(() => { progressBar1.Maximum =epochs;; })); }
this.Invoke(new MethodInvoker(() => { //code... }));
General News Suggestion Question Bug Answer Joke Praise Rant Admin
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.


text:
Digital advertising is the process of using internet technology to deliver promotional advertising to consumers. Digital advertising encompasses promotional ads and messages that are delivered through social media, email, search engine ads, mobile banner ads, affiliate programs and website display ads.
Digital advertising has surpassed traditional advertising
Just how popular is digital advertising? In 2016, the advertising side of the internet ecosystem generated $1.121 trillion for the U.S. economy and is responsible for 10.4 million jobs in the U.S. alone. The increasing popularity of digital advertising and the shift away from the traditional advertising techniques (billboards, newspapers, radio, commercials, etc.) makes sense in this era of connectivity.
Types of digital advertising
Here are some of the most common forms of digital advertising (there are many more):
Social advertising
Ads that rely on social information, platforms or networks to generate, target and deliver advertising. Facebook, YouTube and LinkedIn are examples of social platforms with a wide network where businesses can target and deliver advertising.
Display ads/Banner ads
Ads (full banners, squares, buttons and skyscrapers) that are served to users on a page when they are not necessarily searching for your product or service. These ads are shown whenever users are surfing online.
Paid search/Search engine advertising
Advertising within the sponsored listings of a search engine site. You pay each time your ad is clicked or when your ad is displayed.
Email advertising
Using email to send advertisements to current contacts and prospective clients. This can include SPAM, which is not a recommended practice.
Some email networks now offer in-email advertising. Gmail, for instance, uses sponsored, in-line ads directly above the email inbox lines.
Affiliate programs/Ad networks
Businesses reward affiliates for bringing them in visitors or customers as the result of the affiliates' advertising and marketing efforts. The advertising and marketing efforts can include a mix of digital and/or traditional advertising methods.
Mobile advertising
Ads that appear on mobile devices that have wireless connections. Mobile ads can be delivered as text ads via SMS, banner ads embedded in a mobile site or ads that appear in mobile games or downloaded apps.
Native advertising
Relevant content distributed from a third party's site. Information is targeted and valuable. Essentially, you're renting someone else's content distribution platform and offering helpful content rather than just plugging your product or service.
Digital advertising cost methods
There are many different types of digital advertising costing models available, of which all stem from the three main types:
- CPA (Cost Per Action): The advertiser pays the ad publisher only if someone clicks AND completes a transaction. Here, all of the risk falls on the publisher of the ad.
- PPC (Pay Per Click): The advertiser pays when the ad gets clicked, but the advertiser's potential customer does not necessarily have to complete a purchase for the ad publisher to get paid. With PPC, target keywords are very important. This is the most common form of online advertising as it benefits both the advertiser and publisher.
- CPM (Cost Per Mille): Also called CPT (Cost Per Thousand), the advertiser pays the publisher for exposure based on visitors to the website and the number of eyes on an ad.
Benefits of digital advertising
Digital advertising has gained popularity for many reasons. Here are some of the main ones:
- It is easier to prove ROI
Clicks and cost can be tracked and more easily measured than a billboard, so it's easier to gauge the effectiveness of the ads. - It is easier track performance
Similar to the point prior, it is easier to track the performance and calculate metrics as the ads are in the digital space where it is easier to capture the data. - A business can adjust their ad budget more readily
While certain ad methods like PPC involve a long-game method, in some aspects of digital advertising it is easy to shift and adjust bidding and budgets almost instantaneously. - It is more precise at reaching targeted audiences
Due to the nature of online information and how information about users is stored online, ads can be targeted on demographic information or based on user behavior. - Digital advertising can enhance or complement other ad channels in the mix
For businesses using an omni-channel marketing approach, a digital ad can complement a billboard or radio commercial. The more places a customer is reminded of a business, the more the business is kept top of mind. - Increases brand recall
Similar to the point above, the more times a consumer sees a company's ads or branding, the more they are likely to keep that business top of mind. With so many brands out there, it is important to stand out from the clutter and be a company that users remember. - Increases brand interaction
A digital ad can lead users directly to a company's website, to interact with a business on social media or to purchase a product online. - Digital ads can accompany users across the entire customer journey
Digital ad methods can be displayed to users at any stage in the customer journey, from the research stage, to the purchase stage and even further. - It is where attention spans are
Last but not least, most people spend a majority of their time in the digital space. Display ads where people are looking, not where they aren't.
Digital advertising: the main sell
Why wouldn't your business move your ad spend to where more eyes and attention spans are concentrated? Seldom are people noticing billboards anymore, as they are usually on their phones sending messages, checking emails or connecting with others on social media platforms. The world has changed and so has the world of advertising. If you aren't advertising online yet, you may want to consider starting soon. Start adding digital advertising to your marketing mix to start reaping the benefits today.

subset: commoncrawl


text:
Recipe By: The Almost No-Fat Cookbook: Everyday Vegetarian Recipes, by Grogan, page 129
8 cups vegetable or soybean broth
5 cloves garlic — chopped
1 dried red chiles — crumbled, up to 3
2 teaspoons dried oregano
liquid smoke — a few dashes
Makes 6-8 servings
This is my vegetarian version of a recipe from my late mother-in-law, Ruth Clark. I use it as a basic bean recipe for any Mexican dish, but I always make a huge pot because I could honestly eat them every day. They're delicious with crusty bread and a green salad.
Soak dried pinto beans in a large amount of water for at least 8 hours. Discard the water and place the soaked beans in a large pot. With the remaining ingredients, bring to a boil, simmer for about 3 minutes, then turn the heat to low, cover, and simmer for 2-3 hours, or until the beans are very tender. The beans should be a bit "soupy" (the broth is delicious). If you have used a salt-free or low-salt broth, adjust for salt now.
To pressure cook these beans, cook the soaked beans at 15 lbs. pressure for 30 minutes. For unsoaked beans, use 11 cups of water and 8 broth cubes in a 6-quart pressure cooker, and pressure cook at 15 lbs. pressure for 1 hour.
Per serving: Calories: 109, Protein: 5 gm., Carbohydrates: 21 gm., Fat: 0 gm.
Posted to the Veg-Recipes list


text:
Could the UK be set for an Indian summer in September?
According to the Met Office, the first day of autumn takes place on 1 September and as such, people across the country are preparing for temperatures to dip.
However, an Indian summer could be about to warm things up - this is everything you need to know about the weather phenomenon.
Hide AdAdvertisement
Hide AdWill the weather get warmer again?
BBC weather forecaster Nick Miller said in a report that across the country, the UK could reach temperatures in the high double figures - in some places, as high as 22C.
Met Office forecaster Oli Claydon, told the Sun Online: "There will be pockets of pleasant weather in the week, with warm and drier weather expected on the weekend.
"Although there is a rain warning covering one area, there will be plenty of dry conditions around and any sunshine will certainly feel warm."
Jim Dale of British Weather Services said: "The end of September is looking more settled.
Hide Ad"There is a fairly reasonable chance of an Indian summer bringing a couple of weeks of fine weather.
Hide Ad"This will be more noticeable in the north of the country where the warmth of the summer has not been so plentiful."
As we move into the autumn months, we expect temperatures to get cooler, not warmer, which is why we call an unexpected warm weather spell an Indian Summer.
What is an Indian summer?
The Met Office describes an Indian summer as "a warm, calm spell of weather that occurs in autumn".
Hide AdThe first recorded use of the phrase appears in a letter written by John de Crevecoeur, dated 17 January 1778, in which he described Mohawk county in the US as experiencing rain which "is followed by an interval of calm and warm which is called the Indian summer".
In the UK, it was first used in the early 19th century, however the concept of a warm summer spell was not new to the UK.
Hide AdPreviously, 'Saint Martin's summer' was used widely across Europe to describe warm weather surrounding St Martin's Day, on 11 November.
The Met Office states that there is "no statistical evidence to suggest that such warm spells recur at any particular time each year - warm spells during the autumn months are not uncommon".
The warmest recorded temperatures in the UK in October and November are:
- 29.9C on 1 October 2011 in Gravesend, Kent
- 22.4C on 1 November 2015 in Trawsgoed, Ceredigion


text:
Metrics for Performance Evaluation of Oracle Applications
Performance is of critical importance to Oracle Applications customers, and Oracle is committed to ensuring that Oracle Applications perform to exceptional standards. With the introduction of the standard version of the Oracle Applications Benchmark, Oracle makes a long-term public commitment to measuring and characterizing the performance of Oracle Applications.
The Oracle Applications Standard Benchmark is a comparable standard workload which demonstrates the performance and scalability of Oracle Applications and provides metrics for the comparison of Oracle Applications performance on different system configurations.
There are two main components of the Oracle Application Standard Benchmark: online and batch. The online component exercises the common UI flows which are most frequently used by most of our customers. The batch flow consist of the Order Management and Payroll Processes.
For the eBS R12 benchmark, performance comparison(s) between benchmark kits of different sizes such as small, medium and large is not encouraged. By the same token, for a benchmark kit of the same size, it is discouraged to compare results from a Single Instance on one platform with the results from a RAC installation on another platform.
The Oracle Applications Standard Benchmark Council is made up of representatives from various hardware companies, Oracle Product Development, and Oracle Product Line groups. Members have access to the latest marketing and technical information related to the Oracle Applications Standard Benchmark. For more information, please send e-mail to firstname.lastname@example.com
Oracle Applications Benchmark (R 12.1.3 and later) uses Oracle Applications Testing Suite (OATS)
Oracle Applications Benchmark (all prior to R 12.1.3) uses Hewlett-Packard's LoadRunner (PDF)


text:
Clutch Kits - GM Duramax LBZ
The feel of a performance clutch can differ greatly from the factory clutch. You can minimize these effects and increase clutch longevity by choosing the right clutch for your truck based on the horsepower and what you use your truck for. A clutch designed to hold 550 hp may not act right in a truck that only puts out 350 hp, so try to choose a clutch that closely matches or only slightly exceeds your trucks horsepower level.
Everyday Driving - Little or no HP improvements:
Stock trucks, or trucks with moderate horsepower improvements (chip, exhaust, intake) should stick to a single disc clutch.
Everyday Driving - Major HP Improvements
Trucks with significant horsepower improvements (stacked chips, performance injectors, etc.) should consider a street dual disc clutch.
Heavy Towing - 15,000 lbs or more
Trucks that regularly haul or tow 15,000 lbs or more should use a street dual disc clutch, regardless of the hp level.
Competition Drag or Pulling
Any truck used for competition drag racing or sled-pulling should use an SFI approved multi-disc clutch.


text:
- Home
- {Navy} organic thong
{Navy} organic thong
Simple organic thong
Colour: Navy
- 3 for £28
- 5 for £42
Product details
- Comfortable yet elegant elastic waistband
- Simple construction for comfort
Our new style thong is for you supper savvy customers who want to stock up your underwear drawer with sustainable essentials.
This new style does not have a wide elastic waist band and is a slightly different fit to our other style thong.
Super comfortable… you may even forget your wearing them!
Care info
We recommend all garments are machine washed at 30 degrees and hung out to dry. This is best for your clothes and the planet! For best results use alongside an eco detergent made for washing at 30 degree.
About me
Soft-touch jersey thong with a stretchy waistband for a modern look.
Fabrication: 95% organic cotton jersey, 5% elastane (GOTS CERES-076 certified).
Manufacturing Info
Made to order in East Yorkshire, England.
This product is manufactured with care and transparency using solar energy and the highest quality fabrications by a fairly paid, skilled craftsman.
*Please note that this item is non-refundable.


text:
A lone granite boulder found against all odds high atop a glacier in Antarctica may provide additional key evidence to support a theory that parts of the southernmost continent once were connected to North America hundreds of millions of years ago.
Writing in the July 11 edition of the journal Science, an international team of U.S. and Australian investigators describe their findings, which were made in the Transantarctic Mountains, and their significance to the problem of piecing together what an ancient supercontinent, called Rodinia, looked like. The U.S. investigators were funded by the National Science Foundation (NSF).
Previous lines of scientific evidence led researchers to theorise that about 600-800 million years ago a portion of Rodinia broke away from what is now the southwestern United States and eventually drifted southward to become eastern Antarctica and Australia.
The team's find, they argue, provides physical evidence that confirms the so-called southwestern United States and East Antarctica (SWEAT) hypothesis.
"What this paper does is say that we have three main new lines of evidence that basically confirm the SWEAT idea," said John Goodge, an NSF-funded researcher with the Department of Geological Sciences at the University of Minnesota-Duluth.
Added Scott Borg, director of the division of Antarctic sciences in NSF's Office of Polar Programs, "this is first-rate work and a fascinating example of scientists at work putting together the pieces of a much larger puzzle. Not only do the authors pull together a diverse array of data to address a long-standing question about the evolution of the Earth's crust during a critical time for biological evolution, but the research shows how the ideas surrounding the SWEAT hypothesis have developed over time."
As a field researcher during the late 1980's and early 1990's, Borg authored papers on the SWEAT hypothesis.
The boulder find came by serendipity while the researchers were picking though rubble carried through the Transantarctic Mountains by ice streams-rivers of ice-that flow at literally a glacial pace from East Antarctica.
Goodge and his team were searching for rocks that might provide keys to the composition of the underlying continent crust of Antarctica, which in most places is buried under almost two miles of ice.
"We were picking up boulders in the moraines that looked interesting," Goodge said. "It was basically just a hodge-podge of material."
One rock in particular, small enough to heft in one hand, found atop the Nimrod Glacier, was later determined to be a very specific form of granite with, as Goodge describes it, "a particular type of coarse-grained texture."
Subsequent chemical and isotopic tests conducted in laboratories in the United States revealed that the boulder had a chemistry "very similar to a unique belt of igneous rocks in North America" that stretches from what is now California eastward through New Mexico to Kansas, Illinois and eventually through New Brunswick and Newfoundland in Canada.
That belt of rocks is known to have been a part of what is called Laurentia, which was a component of the supercontinent of Rodinia.
"There is a long, linear belt of these igneous rocks that stretches across Laurentia. But 'bang' it stops, right there at the (western) margin where we knew that something rifted away" from what is now the West Coast of the United States," Goodge said.
"It just ends right where that ancient rift margin is," Goodge said. "And these rocks are basically not found in any other part of the world."
That it should turn up on a glacier high up in the mountains of Antarctica is strong evidence in support of the SWEAT model that parts of North America continue into part of the frozen continent at the bottom of the Earth.
"There's no other explanation for how it got where we found it," Goodge said. "It was bull-dozed over from that interior region of Antarctica."
The find itself is compelling to geologists, Goodge noted, because little other physical evidences exists to allow them directly to put together the jigsaw puzzle of the long-disappeared Rodinia.
But because the supercontinent existed at a key time in the development of multi-cellular life on Earth, it also helps provide a geological context in which this massive biotic change took place.
"During the Cambrian explosion about 520 million years ago we started seeing this huge expansion in the diversity of life forms," Goodge said. "This was also a time when the Earth was undergoing tremendous geologic changes."
He added that "something helped trigger that big radiation in life."
The shifting configuration of the continents, accompanied by collisions between landmasses, erosion and the influx of chemicals into the seas may well have provided the nutrients to that growing diversity of lifeforms.
"There are ideas developing about these connections between the geo-tectonic world on the one hand and biology on the other.
The job of geoscientists in this context, he said "is to reconstruct what the world was like at the time."


text:
Blue Umbrella Cups by Gwyneth Leech
India ink on upcycled white paper coffee cup
Drawn in the studio window, March 2011
Monday morning. I am about to go to the Hypergraphia window at 215 West 38th Street for a final three days of drawing from 11:30 AM - 1:00 PM. Early Thursday morning I head to Boston for the 2011Transcultural Exchange Conference. The cups will still be on view until 5:30 PM Friday, April 8th, but my chair will be empty.
Cups drawn in the Hypergraphia window.
I am sipping my morning tea and considering the last five weeks. One of the most frequently asked questions has been "did you drink all that coffee yourself?"
Well, I drank from all the cups, but the truth is most of it was decaf. I love my morning cup of strong Scottish tea, and another cup in the afternoon. Otherwise, it is Barry's decaf tea or Celestial Seasonings herbal teas. When it comes to coffee, a decaf latte from a high end bistro at any time of day does the trick. If I deviate, I feel it in my hands and see it in my drawings.
Where does the city stop and the cups begin?
Another question has been "how has it changed your artwork?"I had to think about that.
The drawings did change considerably during my weeks in the window. At first, I could only
draw and paint spiral patterns. I felt like I was at the center of
a maelstrom of coffee cups, people, traffic, and bright lights. Then, conversations with my art dealer Cheryl McGinnis and with visitors crept onto the cups. A daily salon shaped up in the shop space behind the window and I joined in through the door. A discussion about
handwriting led to a set of calligraphic cups.
After a conversation about pets, I covered a cup with greyhounds. Then a set of turtles appeared, climbing on each others' backs, as they do in the turtle tank in the window of Lucoral, a gem store down 38th.
After a conversation about pets, I covered a cup with greyhounds. Then a set of turtles appeared, climbing on each others' backs, as they do in the turtle tank in the window of Lucoral, a gem store down 38th.
Turning heads on 38th Street
Eventually, my focus shifted out to the sidewalk and a
whole week of rain led to a parade of drawings of people carrying umbrellas.
Simple and gestural, these were very satisfying to do and connected me to the
way it feels to draw while traveling. The greatest achievement is to retain the
eyes of the traveler while in your own back yard!
Coffee break, surrounded by umbrella cups drawn in the window.
I performing in the window? No, I was just drawing and using the window space
as my art studio for the run of the exhibition. Unlike performance artists who
explore the limits of human endurance, my self-assigned task was to be as
comfortable and productive as possible. I therefore felt free to engage with
viewers through the plate glass window, or not, as the depth of my
concentration dictated.
the window has been a haven - a protective bubble of glass surrounded by the
weather and the ever changing, ever fascinating streetscape. Social, inspiring
and surprisingly peaceful, I can't believe how much drawing I have done.
Cellphone photos and videos appeared regularly
on social media platforms, spreading the word.
Hope they were all flattering!


text:
After the BBC - Target British Gas?
I'll return to comments left by friends on my post about the BBC at some point soon, but I wanted to flag up a piece by Robert Fisk in Saturday's Independent.
Fisk highlights a Global Research paper by Canadian ecomonist and anti-war campaigner Michel Chossudovsky that argues that the "military invasion of the Gaza Strip by Israeli Forces bears a direct relation to the control and ownership of strategic offshore gas reserves.
According to Chossudovsky, British Gas Group and its partner, the Athens-based Consolidated Contractors International Company, were granted 25-year oil and exploration rights off the Gaza coast by Yasser Arafat's Palestinian Authority in 1999. However, "the death of Yasser Arafat, the election of the Hamas government and the ruin of the Palestinian Authority have enabled Israel to establish de facto control over Gaza's offshore gas reserves."
Israel has negotiated directly with British Gas Group to bypass both the Hamas government and the Palestinian Authority, insisting that the Palestinians be paid in goods and services and that no money go to the Hamas-controlled government. A proposed agreement, under which Palestinian gas from Gaza would be channelled via undersea pipelines to the Israeli port of Ashkelon, would have effectively transferred the control of gas sales to Israel.
British Gas Group withdrew from talks in December 2007, but in June of 2008, just as Israel began its invasion plans for Gaza, the company was asked by Israel to resume discussions about the purchase of natural gas from the Gaza offshore fields. Following Israel's invasion, guess who now controls Gaza's coastline?
As Robert Fisk says, "if the Israelis can continue to violate international law by seizing Palestinian land in the West Bank, why cannot they seize the sovereignty of Palestinian gas fields off Gaza? If Israel can annex Jerusalem, why not annex Gaza's maritime areas?"
I still think that the main issue for everyone outraged by Israel's bombardment of Gaza is punishing the Israeli state through a consumer boycott and through disinvestment. So if you see Sid, tell him - British Gas Group has negotiated with Israel for what amounts to the daylight robbery of precious natural resources from the Palestinians. It's time its headquarters at Thames Valley Park in Reading were occupied.


text:
I am off to visit the girls in Connecticut tomorrow!
Each year my special friend Paula opens her heart and home
and we spend a day or two together.
This is such a treat for me as Paula's home is magical...
...and especially so at Christmas time!
click here to see snaps of last year!
For me...this visit truly marks the beginning of the season
and makes my Christmas special.
Besides laughing and chatting nonstop...
we visit some of our favorite shops in the area for inspiration
and holiday shopping.
First we will visit our friend,
Carole of Maynard Greenhouse
and see her shop all set up as a Christmas wonderland.
I can't wait to see her displays this year!
click here for last year's pics.
And....of course I can't wait to see her and George too!
Deanna's shop is always decorated in a big way
and full of interesting and eclectic gifts and antiques.
I always find something special.
In fact, the first picture above
is of one of the vintage pink ornaments
I found at Gather last year.
We plan to make the trip to Taken For Granite
in Stony Creek.
Talk about spectacular displays!
Do you remember last year's post?
Hopefully we will have time to get to Chester to visit
Dina Varano's wonderful jewelry store
which is always full of the most unique and beautiful clothes.
Of course, I will bring my camera
and take lots of pictures to share with you!
Can you tell I am excited?


text:
Grapefruit Essential Oil
We cold press Grapefruit essential oil from the peels of the fresh fruit for a citrusy oil with the bright aroma of a grapefruit orchard. It's this sweet, invigorating scent that associates the essential oil with feelings of joy, satisfaction, and playfulness. Not only is Grapefruit a wonderful essential oil to diffuse, but it's also a great addition to DIY skin care products. Combine it in a salt body scrub with other skin-toning essential oils—such as Lemon and Juniper—for a home spa experience that gives your skin a smooth-looking glow.
Item No. | |
Item | |
Wholesale | |
Retail | |
This item is currently not available for purchase.
These products are only available to purchase by Young Living members. To become a Young Living member click on the "Become a Member" link at the top of this page.
* All prices shown include VAT. Shipping charges not included.
For 25 years our Seed to Seal® quality commitment has been both a promise to you and a reflection of our sense of global stewardship and accountability. We believe you want only the best for your family and yourself—products that are genuine, free from harmful synthetics, and of unmatched purity. Our proprietary Seed to Seal promise is our pledge to you, the earth, and ourselves that Young Living products will be the best available, now and always.
Seed to Seal and its three pillars—Sourcing, Science, and Standards—are infused into every aspect of our exacting essential oil production processes, both on our own farms and our carefully curated family of partner farms. Seed to Seal is infused into our painstaking quality testing and retesting to ensure that your family enjoys the purest essential oil products on the planet. Ultimately, Seed to Seal is infused into everything we do. We know that for us—and for you—simply nothing else will do.
Product Snapshot
- Has a fresh, sweet, invigorating aroma
- Is uplifting and energizing
- Has skin-cleansing properties
- Is a great addition to DIY house cleaners
- Includes the key constituents sabinene, limonene, and nootkatone
- Limonene
Suggested Uses
- Bring an invigorating aroma into your home by diffusing Grapefruit in the morning.
- Create a refreshing room spritzer by mixing Grapefruit, Peppermint, Orange, Lemon, Bergamot, and distilled water in a glass spray bottle.
- Combine a few drops with a carrier oil such as V-6™ Vegetable Oil Complex and use it for an uplifting massage.
- Use it as part of your skin care regimen in lotions, toners, and cleansers for clean, healthy-looking skin. Keep in mind that Grapefruit is a photosensitive oil. Avoid direct sunlight or UV rays for up to 12 hours after topical application.
- Freshen up the kitchen after cooking or cleaning with Grapefruit's bright, uplifting aroma.
- Invite the effervescent aroma into the living room to add a sunny note to a party or family time.
- 2 drops Grapefruit Essential Oil
- 2 drops Lavender Essential Oil
- 2 drops Ylang Ylang Essential Oil
- 4 drops Cinnamon Bark essential oil
- 2 drops Lemongrass essential oil
- 2 drops Grapefruit essential oil
- 2 drops Bergamot essential oil
Contraindications: If you are pregnant or breastfeeding, do not use this product.
Known Adverse Reactions: If you experience nausea, dizziness, headache or an allergic reaction, discontinue use.


text:
Blind dog found after a week in the wilderness
Boulder Creek, Calif. - Word spread on social media, and members of the community searched everywhere for her. They even hired a professional dog tracker, but still had no luck. With multiple mountain lion sightings reported -- the family feared the worst.
But, while out for a hike, neighbor Dan Estrada spotted Sage lying lifeless in a stream.
"I know this dog is a sweetheart - when I saw her lifeless body - I thought this was a recovery effort. I didn't want to be the bearer of bad news," he told FOX 2.
When Sage raised her head, Estrada jumped into the water and put her over his shoulders.
"I started hugging her, it was overwhelming - so moving," said Estrada.
He carried her out of the canyon, and back to owner Beth Cole and her family. It was just in time. According to Estrada, a storm came that evening and Sage could very well have drowned.
The Cole family took Sage to a veterinarian where they learned she was weak with a fever and suffering from malnutrition. Fortunately she wasn't dehydrated, as the stream served as the perfect water source to keep her alive. Now she is happy to be home. And you thought you had a rough week! Watch the video to see Sage safe and sound.


text:
Self Development Tutor in Mahadev Nagar, Ahmedabad
Ever thought of courses designed to make you, 'Business Ready'? Corporate Skills is one such course, groom yourself into a polished professional under the guidance of Qriyo Gurus. Spoken English, Basics of Computer are just to name a few.
Refine Search
Let us connect you with the Best Home Tutors. Just tell us your requirements for home tuitions.


text:
For general feedback about the game.
Steam SupportVisit the support site for any issues you may be having with the game or Steam.
As you've probably seen by now, we like to change things in Team Fortress 2. A lot. And while we're perfect most of the time, we occasionally get something wrong. One reason for this is we just don't get enough data from internal play testing, and another is that we spend too much time watching Tom Bui serenades on Youtube (Hint: Search for "Tom Bui" on Youtube) (Another Hint: Click here). So to help us change TF2 even more frequently, we're pleased to announce the Team Fortress 2 (public) Beta.
What sorts of things will we use the beta for, you ask?
The beta is available to anyone that owns a copy of TF2. To install, launch Steam, open the Library and install "Team Fortress 2 Beta" from your games list.
What's in the initial release?
Three Natascha variants:


text:
In partnership with the Kentucky Legislature and The Legislative Research Commission, Kentucky.gov has created Bill Watch. This free service enables Kentucky.gov registered users unlimited tracking of legislation during the Kentucky Legislative Session. Specifically, Kentucky.gov registered users can:
Please register for Bill Watch here.
View the Online Tutorial.
For additional information or assistance in registering for Kentucky.gov services please contact Kentucky.gov:
(502) 875-3733.
For questions related to legislative research or the Kentucky Legislature, please contact The Legislative Research Commission (LRC):
(502) 564-8100.


text: X-rays are diffracted by gratings as every electro-magnetic wave. As the wavelength of X-rays is in the nanometre range, the grating constants have to be in the same range (e.g. in crystals) to achieve large diffraction angles. Man-made gratings with much larger grating constants can influence the direction of X-rays sufficiently to be used in X-ray optics as well.