<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Class Registration &#187; class registration software</title>
	<atom:link href="http://classregistration.net/category/class-registration-software/feed/" rel="self" type="application/rss+xml" />
	<link>http://classregistration.net</link>
	<description></description>
	<lastBuildDate>Wed, 20 Jul 2011 06:43:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>FIFA solving overage issues</title>
		<link>http://classregistration.net/fifa-solving-overage-issues/414/</link>
		<comments>http://classregistration.net/fifa-solving-overage-issues/414/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 03:51:53 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[class registration software]]></category>
		<category><![CDATA[fifa]]></category>
		<category><![CDATA[issues]]></category>
		<category><![CDATA[overage]]></category>
		<category><![CDATA[solving]]></category>

		<guid isPermaLink="false">http://classregistration.net/fifa-solving-overage-issues/414/</guid>
		<description><![CDATA[FIFA solving overage issues
JOHANNESBURG — FIFA says it is solving the problem of countries trying to cheat at international youth tournaments by fielding overage players.
Read more on MyCentralJersey.com
]]></description>
			<content:encoded><![CDATA[<p><b>FIFA solving overage issues</b><br />
JOHANNESBURG — FIFA says it is solving the problem of countries trying to cheat at international youth tournaments by fielding overage players.</p>
<p>Read more on <a href="http://www.mycentraljersey.com/article/20100630/SPORTS05/6300353/-1/sportsfront/FIFA+solving+overage+issues">MyCentralJersey.com</a><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://classregistration.net/fifa-solving-overage-issues/414/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bill Gates&#8217; Pupil Zhang Yaqin to Attend the Summit Forum</title>
		<link>http://classregistration.net/bill-gates-pupil-zhang-yaqin-to-attend-the-summit-forum/410/</link>
		<comments>http://classregistration.net/bill-gates-pupil-zhang-yaqin-to-attend-the-summit-forum/410/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 04:15:28 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[class registration software]]></category>
		<category><![CDATA[Attend]]></category>
		<category><![CDATA[bill]]></category>
		<category><![CDATA[Forum]]></category>
		<category><![CDATA[Gates']]></category>
		<category><![CDATA[Pupil]]></category>
		<category><![CDATA[Summit]]></category>
		<category><![CDATA[Yaqin]]></category>
		<category><![CDATA[Zhang]]></category>

		<guid isPermaLink="false">http://classregistration.net/bill-gates-pupil-zhang-yaqin-to-attend-the-summit-forum/410/</guid>
		<description><![CDATA[Bill Gates&#8217; Pupil Zhang Yaqin to Attend the Summit Forum
BEIJING&#8212;-Zhang Yaqin, Global Senior Vice President of Microsoft, Chairman of Microsoft Asia Pacific Group, one of Bill Gates’ most favorite Chinese pupils, recently confirmed that he will attend the China Digital Entertainment Summit Forum.
Read more on Business Wire via Yahoo! Finance
]]></description>
			<content:encoded><![CDATA[<p><b>Bill Gates&#8217; Pupil Zhang Yaqin to Attend the Summit Forum</b><br />
BEIJING&#8212;-Zhang Yaqin, Global Senior Vice President of Microsoft, Chairman of Microsoft Asia Pacific Group, one of Bill Gates’ most favorite Chinese pupils, recently confirmed that he will attend the China Digital Entertainment Summit Forum.</p>
<p>Read more on <a href="http://biz.yahoo.com/bw/100626/20100626005055.html?.v=1">Business Wire via Yahoo! Finance</a><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://classregistration.net/bill-gates-pupil-zhang-yaqin-to-attend-the-summit-forum/410/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Northville Community Briefs</title>
		<link>http://classregistration.net/northville-community-briefs/406/</link>
		<comments>http://classregistration.net/northville-community-briefs/406/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 04:41:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[class registration software]]></category>
		<category><![CDATA[Briefs]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[Northville]]></category>

		<guid isPermaLink="false">http://classregistration.net/northville-community-briefs/406/</guid>
		<description><![CDATA[Northville Community Briefs
Independence parade
Read more on Northville Record
]]></description>
			<content:encoded><![CDATA[<p><b>Northville Community Briefs</b><br />
Independence parade</p>
<p>Read more on <a href="http://www.hometownlife.com/article/20100624/NEWS12/6240369/1029/rss19">Northville Record</a><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://classregistration.net/northville-community-briefs/406/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Adult summer reading program in Roxbury kicks off</title>
		<link>http://classregistration.net/adult-summer-reading-program-in-roxbury-kicks-off/402/</link>
		<comments>http://classregistration.net/adult-summer-reading-program-in-roxbury-kicks-off/402/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 05:10:51 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[class registration software]]></category>
		<category><![CDATA[Adult]]></category>
		<category><![CDATA[kicks]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[Roxbury]]></category>
		<category><![CDATA[summer]]></category>

		<guid isPermaLink="false">http://classregistration.net/adult-summer-reading-program-in-roxbury-kicks-off/402/</guid>
		<description><![CDATA[Adult summer reading program in Roxbury kicks off
ROXBURY TWP. &#8211;The Roxbury Township Public Library, 103 Main St, Succasunna, is planning several programs for adults, kids, teens, families and preschoolers for the coming months.
Read more on Roxbury Register
]]></description>
			<content:encoded><![CDATA[<p><b>Adult summer reading program in Roxbury kicks off</b><br />
ROXBURY TWP. &#8211;The Roxbury Township Public Library, 103 Main St, Succasunna, is planning several programs for adults, kids, teens, families and preschoolers for the coming months.</p>
<p>Read more on <a href="http://www.recordernewspapers.com/articles/2010/06/24/roxbury_register/news/doc4c1a55a7a3de2165006199.txt">Roxbury Register</a><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://classregistration.net/adult-summer-reading-program-in-roxbury-kicks-off/402/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Helping Hand</title>
		<link>http://classregistration.net/helping-hand/398/</link>
		<comments>http://classregistration.net/helping-hand/398/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 05:39:11 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[class registration software]]></category>
		<category><![CDATA[Hand]]></category>
		<category><![CDATA[Helping]]></category>

		<guid isPermaLink="false">http://classregistration.net/helping-hand/398/</guid>
		<description><![CDATA[Helping Hand
Throughout the city, organizations and outreaches are seeking volunteers and donations to help people in need. Here is a list of some that have asked for a helping hand.
Read more on Downtown Gazette
]]></description>
			<content:encoded><![CDATA[<p><b>Helping Hand</b><br />
Throughout the city, organizations and outreaches are seeking volunteers and donations to help people in need. Here is a list of some that have asked for a helping hand.</p>
<p>Read more on <a href="http://www.gazettes.com/articles/2010/06/22/lifestyle/helping_hand/doc48ff6973c1998610769507.txt">Downtown Gazette</a><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://classregistration.net/helping-hand/398/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Film camp offers creative summer outlet</title>
		<link>http://classregistration.net/film-camp-offers-creative-summer-outlet/395/</link>
		<comments>http://classregistration.net/film-camp-offers-creative-summer-outlet/395/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 06:07:12 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[class registration software]]></category>
		<category><![CDATA[Camp]]></category>
		<category><![CDATA[creative]]></category>
		<category><![CDATA[Film]]></category>
		<category><![CDATA[offers]]></category>
		<category><![CDATA[outlet]]></category>
		<category><![CDATA[summer]]></category>

		<guid isPermaLink="false">http://classregistration.net/film-camp-offers-creative-summer-outlet/395/</guid>
		<description><![CDATA[Film camp offers creative summer outlet
Nearly everyone these days is a self-proclaimed photographer or filmmaker.
Read more on The Observer
]]></description>
			<content:encoded><![CDATA[<p><b>Film camp offers creative summer outlet</b><br />
Nearly everyone these days is a self-proclaimed photographer or filmmaker.</p>
<p>Read more on <a href="http://www.observer-online.com/articles/2010/06/21/news/doc4c1e4b19c7555673170782.txt">The Observer</a><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://classregistration.net/film-camp-offers-creative-summer-outlet/395/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>News in brief</title>
		<link>http://classregistration.net/news-in-brief/390/</link>
		<comments>http://classregistration.net/news-in-brief/390/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 06:38:51 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[class registration software]]></category>
		<category><![CDATA[brief]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://classregistration.net/news-in-brief/390/</guid>
		<description><![CDATA[News in brief
Here are a selection of brief news items from this week’s paper edition, and possibly a few news briefs that didn’t make it in the paper.
Read more on Onalaska Holmen Courier-Life
]]></description>
			<content:encoded><![CDATA[<p><b>News in brief</b><br />
Here are a selection of brief news items from this week’s paper edition, and possibly a few news briefs that didn’t make it in the paper.</p>
<p>Read more on <a href="http://www.courierlifenews.com/articles/2010/06/19/news/08briefs.txt">Onalaska Holmen Courier-Life</a><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://classregistration.net/news-in-brief/390/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Online Vegas Online Casino</title>
		<link>http://classregistration.net/online-vegas-online-casino/385/</link>
		<comments>http://classregistration.net/online-vegas-online-casino/385/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 07:37:28 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[class registration software]]></category>
		<category><![CDATA[Casino]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[Vegas]]></category>

		<guid isPermaLink="false">http://classregistration.net/online-vegas-online-casino/385/</guid>
		<description><![CDATA[ONLINE VEGAS SOFTWAREOnline Vegas Online Casino is one of the top online casinos around today. The state-of-the-art software may be downloaded for free from their website. The software was developed by Vegas Technology, a rising company providing software solutions. Vegas Technology has already received several awards, such as the 2005 Top Casino Software award.
 The Online [...]]]></description>
			<content:encoded><![CDATA[<p>ONLINE VEGAS SOFTWARE<a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.onlinevegas.com/?c=76247&amp;s=379">Online Vegas Online Casino</a> is one of the top online casinos around today. The state-of-the-art software may be downloaded for free from their website. The software was developed by Vegas Technology, a rising company providing software solutions. Vegas Technology has already received several awards, such as the 2005 Top Casino Software award.</p>
<p> The Online Vegas software offers realistic 3D graphics. After the software has been installed, a tutorial will help the player understand the software. The downloadable program is also free from viruses, spyware or other malware.</p>
<p> REGISTRATION</p>
<p>A player has the option to play for free or for real money. With Free Play, a player can practice playing the casino games for as long as they want, free of charge. To play for real money, a player has to register with the casino. A user name and password will be provided (password can be changed by player) to log-on to the software. Upon registration, players are given the option to become a part of the mailing list of Online Vegas. By becoming part of the mailing list, the player may be invited by Online Vegas to participate in various promotional offers, such as deposit bonuses and giveaways.</p>
<p> ONLINE CASINO GAMES</p>
<p>More than 100 casino games are offered. Online Vegas offers card games, including Blackjack, Tri Card Poker, Caribbean Stud Poker, 10 High Hold &#8216;Em, and more than 10 varieties of Video Poker; Table Games, such as European Roulette, Baccarat and Craps; and Slot Machines, including 3-reel slots, bonus slots and video slots. Online Vegas also offers several online casino games with Progressive Jackpots. These include Progressive Blackjack, Island Stud Poker, and several kinds of Progressive Slots. By playing a progressive online casino game, a player is given a chance to win all or part of the Jackpot!</p>
<p>TOURNAMENTS</p>
<p>Online Vegas Online Casino has monthly Guaranteed Prize Pools over $200,000 . There are Tournaments ranging from $100 up to $25,000 Guaranteed. Entry fees range as low as $0 and $1.99 up to $25, so no matter what your budget is, there is a Tournament for everybody. Not just Slots, but every Monday through Thursday look for specialty game Tournaments featuring Blackjack, Roulette, Casino Hold &#8216;Em and Video Poker.</p>
<p>In addition to the daily Slot Tournaments, Online Vegas sends invitations and free entries to special Tournaments. With Guaranteed Prize Pools as high as $75K and more on the way, Online Vegas Tournaments are the easiest and most fun way to get in on the action!</p>
<p> There&#8217;s always a Tourney starting and you can enter as many Tournaments as you want so don&#8217;t forget to check the Tournament lobby often.</p>
<p> CASINO BONUS AND PROMOTIONS</p>
<p>Online Vegas Online Casino has created the most unique and generous Welcome Bonus, an amazing first 10 Deposit Bonuses totaling over $5000 Free that is taking the industry by storm! OnlineVegas.com doesn&#8217;t stop there &#8211; they have a 1st class rewards program and the comp points collected can be used for wagering on any game without restrictions. Online Vegas offers bonuses and comps weekly. These bonuses mostly depend on the frequency an individual plays.</p>
<p> CONCLUSION</p>
<p><a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.onlinevegas.com/?c=76247&amp;s=379">Online Vegas Online Casino</a> is a terrific online casino with great 24/7 live Support, quick and easy payouts, high payout percentages, frequent and generous tournaments, super cool graphics, and a massive selection of the most exciting games. We highly recommend them as one of our <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.top10onlinecasino.com">top 10 online casino</a> pick.</p>
<div style="margin:5px;padding:5px;border:1px solid #c1c1c1;font-size: 10px;">
<p>Writer for <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.top10onlinecasino.com">Top 10 Online Casino </a>Picks.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://classregistration.net/online-vegas-online-casino/385/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>REG file parser using the Boost Spirit Parser Framework</title>
		<link>http://classregistration.net/reg-file-parser-using-the-boost-spirit-parser-framework/381/</link>
		<comments>http://classregistration.net/reg-file-parser-using-the-boost-spirit-parser-framework/381/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 08:12:07 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[class registration software]]></category>
		<category><![CDATA[Boost]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[parser]]></category>
		<category><![CDATA[Spirit]]></category>
		<category><![CDATA[Using]]></category>

		<guid isPermaLink="false">http://classregistration.net/reg-file-parser-using-the-boost-spirit-parser-framework/381/</guid>
		<description><![CDATA[              Testimonials
I would like to thank the people who developed the following projects &#8211; they made the implementation of this project easier:
 Boost: Spirit Parser Framework Program options Pool library Testing Framework Other Utils: Bind, Function, Scope Exit, String Algorithms Library
I want [...]]]></description>
			<content:encoded><![CDATA[<p>              Testimonials
<p>I would like to thank the people who developed the following projects &#8211; they made the implementation of this project easier:</p>
<p> Boost: Spirit Parser Framework Program options Pool library Testing Framework Other Utils: Bind, Function, Scope Exit, String Algorithms Library
<p>I want to say a personal thank you to Silviu Simen for his article &#8220;INI file reader using the Spirit library&#8221;.</p>
<p> Background and history of this task
<p>There was a project in which I took part and we needed to test the working of a parser for Windows hive Registry files. These files are stored in binary representation and the structure of such a file is not documented by Microsoft. But, by means of research, my colleagues managed to clear out this structure, and after that, the question of verifying the parser work appeared.</p>
<p>To perform testing, I decided to use the functionality of exporting of Registry in two formats: hive and reg. Thus, I could obtain two different files for the same Registry key and after that check the working of the Windows hive Registry file parser.</p>
<p>The structure of the Registry file &#8211; I&#8217;ll give an example below &#8211; is very similar to the structure of the ini file, so you can use standard Windows functions for reading values in this file. But the problem is that, functions work very slow for big files, and that is why this parser was developed &#8211; a parser for reg files where I use the Boost Spirit Parser Framework. The reasons why standard Windows functions are slow will be considered below in this article.</p>
<p> What is a reg file?
<p>Let&#8217;s consider the general view of a reg file structure first, and some special complicated cases will be considered as necessary.</p>
<p>I&#8217;ve taken the following material from here http://en.wikipedia.org/wiki/Windows_Registry.</p>
<p>.REG files (also known as Registration entries) are text-based human-readable files for storing portions of the Registry. On Windows 2000 and later NT-based Operating Systems, they contain the string Windows Registry Editor Version 5.00 at the beginning and are Unicode-based. On Windows 9x and NT 4.0 systems, they contain the string REGEDIT4 and are ANSI-based. Windows 9x format .REG files are compatible with Windows 2000 and later NT-based systems. The Registry Editor on Windows on these systems also supports exporting .REG files in Windows 9x/NT format. Data is stored in .REG files in the following syntax:</p>
<p> [&lt;Hive Name&gt;\&lt;Key Name&gt;\&lt;Subkey Name&gt;]<br />&#8220;Value Name&#8221;=&lt;Value type&gt;:&lt;Value data&gt;
<p>Example 1 (different types):</p>
<p> [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]<br />&#8220;Value A&#8221;=&#8221;&lt;String value data&gt;&#8221;<br />&#8220;Value B&#8221;=hex:&lt;Binary data&gt;<br />&#8220;Value C&#8221;=dword:&lt;DWORD value integer&gt;<br />&#8220;Value D&#8221;=hex(7):&lt;Multi-string value data&gt;</p>
<p>&#8220;Value E&#8221;=hex(2):&lt;Expandable string value data&gt;
<p>Example 2 (real):</p>
<p> [HKEY_CURRENT_USER\Key]<br />&#8220;Value string&#8221;=&#8221;B&#8221;<br />&#8220;Value dword&#8221;=dword:00000001<br />&#8220;Value hard&#8221;=hex(1000800c):53,00,65,00,72,00,76,00,69,00,63,00,65,00,53,00,\<br /> 74,00,61,00,72,00,74,00,54,00,79,00,70,00,65,00,00,00,4d,00,61,00,78,00,44
<p>Making a little digression, I want to stress that the number in the line &#8221; hex(1000800c) &#8221; is the type identifier and it can be anything. It&#8217;s often used as the data in the security branch [HKEY_LOCAL_MACHINE\SAM].</p>
<p>And now, let&#8217;s try to extend the information about the possible contents of the reg file. Here, I represent some facts obtained during our research process:</p>
<p> 1) Key Name may consist of alphabetical symbols and &#8221; , \ , [ , ]. <br />2) Number of values of one key can be from 0 to infinite<br />3) Value Name can be:<br /> &#8211; symbol &#8216;@&#8217; &#8211; it means default<br /> &#8211; &#8220;text&#8221; &#8211; any symbols can be in this &#8220;text&#8221; <br /> even these ones: \n , &#8221; , \ , [ , ] <br /> but it always ends with &#8220;\n symbols in sequence<br />4) Value data can be:<br /> &#8211; &#8220;text&#8221; &#8211; any symbols can be in this &#8220;text&#8221; <br /> but it always ends with &#8221; and \n in sequence <br /> &#8211; binary:<br /> &#8211; dword:XX<br /> &#8211; hex:XX <br /> &#8211; hex(N):XX<br /> Comments:<br /> XX can be the pairs of number symbols separated by comas and<br /> it can end with &#8216;\&#8217; symbol that means that <br /> data continue in the next line<br /> Example:<br /> dword:72,&#8230;,00,\<br /> 00,..,20 Two approaches and their comparison
<p>As it was mentioned, the structures of reg files and ini files are quite the same, so I started to search for methods for working with ini files. I found the standard Windows functions.</p>
<p> Using the Windows API functions
<p>Windows gives a lot of functions to work with INI files; we are interested in two of them for our task:</p>
<p> GetPrivateProfileSectionNames&lt;link&gt;: Retrieves the names of all the sections in an initialization file. GetPrivateProfileSection&lt;link&gt;: Retrieves all the keys and values for the specified section of an initialization file.
<p>So, we should call GetPrivateProfileSectionNames one time to obtain the list of keys and then call GetPrivateProfileSection to obtain the values inside the keys.</p>
<p>The problem is that if the file is quite big, i.e., there are a lot of keys in it, then we should call GetPrivateProfileSection several times to read from the file. Here is some row test data: file size: 30 MB, file includes about 30,000 keys, the parsing of this file takes about 20 minutes. And, I should say that reg files are often bigger than 100 MB.</p>
<p> So, the problem:
<p>Unjustified number of readings from the file.</p>
<p> Solution:
<p>It&#8217;s necessary to load the file to the memory at one time or in some parts and then parse its content using your own tools.</p>
<p> Using a custom parser
<p>When parsing a reg file content using your our own tools, it&#8217;s good idea to use already developed work. Thus, I came across the article about the ini file reader using the Spirit library. Using the example of the ini file parser, I developed my reg file parser.</p>
<p> Why boost::spirit ?
<p>The Spirit Parser Framework is an object oriented recursive descent parser generator framework implemented using template metaprogramming techniques. Expression templates allow users to approximate the syntax of Extended Backus Naur Form (EBNF) completely in C++.</p>
<p>I was also attracted by these factors:</p>
<p> There are no intermediate conversions to some code needed, and also no external applications except for the compiler. You need to include only two header files and no libraries to use the Spirit Parser Framework.
<p>Useful links:</p>
<p> <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.boost.org/doc/libs/release/libs/spirit/index.html">Boost Spirit Parser Framework</a> <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://en.wikipedia.org/wiki/Spirit_Parser_Framework">Wikipedia about Spirit Parser Framework</a> Fleeting glance on boost::spirit
<p>The main idea of using boost::spirit is in using the rules. Usually, several basic rules are defined, and then other rules are defined by means of overridden operators as a combinations of basic rules. The following example shows the creation of rules using &#8220;AND&#8221; and &#8220;NOT&#8221; operators:</p>
<p> RuleType simpleRule = ~ch_t(&#8216;A&#8217;) &amp;amp; ~ch_t(&#8216;B&#8217;);
<p>This rule works for any symbol except for &#8216;A&#8217; and &#8216;B&#8217;.</p>
<p>Below in this article, each rule will be described in detail, but now, I want to give some quick information about possible operators &#8211; to let you imagine what the possible operations with the rules are.</p>
<p> Set operators:<br /> a | b Union Match a or b. Also referred to as alternative<br /> a &amp;amp; b Intersection Match a and b<br /> a &#8211; b Difference Match a but not b. If both match and b&#8217;s matched text<br /> is shorter than a&#8217;s matched text, a successful<br /> match is made<br /> a ^ b XOR Match a or b, but not both</p>
<p>Sequencing Operators:<br /> a &gt;&gt; b Sequence Match a and b in sequence<br /> a &amp;amp;&amp;amp; b Sequential-and Sequential-and. Same as above, <br /> match a and b in sequence<br /> a || b Sequential-or Match a or b in sequence</p>
<p>Optional and Loops:<br /> *a &#8211; Match a zero (0) or more times<br /> +a &#8211; Match a one (1) or more times<br /> !a &#8211; Match a zero (0) or one (1) time<br /> a % b &#8211; Match a list of one or more repetitions <br /> of a separated by occurrences of b. <br /> This is the same as a &gt;&gt; *(b &gt;&gt; a). <br /> Note that a must not also match b</p>
<p>Single character parsers:<br /> anychar_p Matches any single character <br /> (including the null terminator: &#8216;\0&#8242;)<br /> alnum_p Matches alpha-numeric characters<br /> alpha_p Matches alphabetic characters<br /> blank_p Matches spaces or tabs<br /> cntrl_p Matches control characters<br /> digit_p Matches numeric digits<br /> graph_p Matches non-space printing characters<br /> lower_p Matches lower case letters<br /> print_p Matches printable characters<br /> punct_p Matches punctuation symbols<br /> space_p Matches spaces, tabs, returns, and newlines<br /> upper_p Matches upper case letters<br /> xdigit_p Matches hexadecimal digits</p>
<p>Other comments:<br /> negation ~<br /> Example: ~ch_t(&#8216;x&#8217;) &#8211; matches any character except &#8216;x&#8217; Introduction to the parser development
<p>Further in this article, I&#8217;ll try to keep the high level of clearness so I&#8217;m sorry in advance if you think that my descriptions are too detailed.</p>
<p>The description starts from the heart of the parser &#8211; its algorithm. The algorithm is described in parts, and then the wrapper for this algorithm is described, and then other auxiliary classes. At the end, we&#8217;ll consider a concrete usage example and test.</p>
<p> Algorithm description
<p>The algorithm is represented by a function and interface:</p>
<p> template&lt;class charT&gt;</p>
<p>struct IResultProcessor<br />{<br /> virtual ~IResultProcessor(){}</p>
<p> virtual void OnKeyFound(const charT* begin, const charT* end)=0;<br /> virtual void OnValueNameFound(const charT* begin, const charT* end)=0;<br /> virtual void OnValueDataFound(const charT* begin, const charT* end)=0; <br />};</p>
<p>template&lt;class charT&gt;<br />inline bool ParseRegFileImpl(const charT* buffer,<br /> IResultProcessor&lt;charT&gt;* resultProc);
<p>It follows from the function names that the algorithm will call the OnKeyFound function for each key name found, OnValueNameFound for each value name found, and OnValueDataFound for the value content.</p>
<p>An observant reader can ask a question: &#8220;Why is the processing of value separated into two functions, OnValueNameFound and OnValueDataFound, after all it it one single entity?&#8221; The answer is simple: &#8220;The implementation of this processing inside the algorithm would be hard and so the algorithm entrusts calling inside it the processing of these two parts&#8221;.</p>
<p> Preparatory work
<p>At this stage, we will prepare the environment for the convenient work. In particular, we should use namespaces, shorten the line for rule creation, and define frequently used rules.</p>
<p> using namespace boost::spirit;<br />typedef rule&lt;scanner&lt;const charT*&gt; &gt; RuleType;<br />typedef chlit&lt;charT&gt; ch_t; // Single character<br />typedef chset&lt;charT&gt; chs_t; // Character set<br />typedef IResultProcessor&lt;charT&gt; ResProcT;</p>
<p>chs_t anychar_t(anychar_p); // Pattern anychar to character set<br />chs_t eol_CR(&#8216;\r&#8217;); // End of line CR<br />chs_t eol_LF(&#8216;\n&#8217;); // End of line LF<br />chs_t eol_t(eol_CR);// CR or LF end of line<br />eol_t |= eol_LF; Auxiliary rules // Matches spaces or tabs<br />RuleType blanks = * blank_p;</p>
<p>// Symbols &#8216;]&#8217;and &#8216;[' - separate Key Name<br />RuleType not_name_separator = ~ch_t(']&#8216;) &amp;amp; ~ch_t(&#8216;[');</p>
<p>// empty data<br />RuleType empty_data = blanks &gt;&gt; (eol_t | ch_t('\0'));</p>
<p>// Data that we don't interested<br />// @ - it's default value name , " - requires additional processing<br />RuleType other_data = *(anychar_t &amp;amp; not_name_separator &amp;amp; <br /> ~ch_t('@')&amp;amp; ~ch_t('"'));
<p>The first rule is to omit the blanks and tabs. Asterisk means that the rule can work several times in a row or not work at all.</p>
<p>The second rule is to make sure that the current symbol is not the name separator.</p>
<p>The third rule is to omit empty data. The operator &gt;&gt; means that the rule at the left side of the operator and the rule at the right side should be performed in sequence, one after another.</p>
<p>The forth rule is assigned to free data not part of the separators. Any symbol matches this rule except for name separators, @ - the identifier of value by default, and the symbol " that signals the end of the line. This rule can work either several times or never.</p>
<p> Rule for the key name RuleType ident_kname_continue = ch_t(']&#8216;) &gt;&gt; ~eol_t;<br />RuleType ident_key_name = *(anychar_t &amp;amp; ~ch_t(&#8216;]&#8217;)) || <br /> ident_kname_continue &gt;&gt; ident_key_name;
<p>This rule can be illustrated on the scheme:</p>
</p>
<p>Rule ident_kname_continue is an auxiliary for ident_key_name. First of all, ident_key_name is the recursive rule, and after the process meets symbol ], it tries to define if it is the end of the name or the part of the name. If symbol ] is the part of the name, i.e., there is no symbol of line end after it, and then this rule starts itself again and continues parsing.</p>
<p>Let&#8217;s consider the following case for example:</p>
<p> [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\_HARD_NAME[123]_ABCD]
<p>In this example, the symbol ] is the part of the name and that&#8217;s why it&#8217;s necessary to check if there is the symbol of line end after it. You can see such names in the Registry.</p>
<p> Rule for the Value name // if &#8220;= symbols sequence is found &#8211; value name ends<br />RuleType ident_vname_continue = +ch_t(&#8216;&#8221;&#8216;) &gt;&gt; ~ch_t(&#8216;=&#8217;); <br />// If &#8216;&#8221;&#8216; symbol is found &#8211; check if value name ends,<br />// if it doesn&#8217;t parsing continues.<br />RuleType ident_vname_sz_skip = ch_t(&#8216;\\&#8217;) &gt;&gt; ch_t(&#8216;&#8221;&#8216;);<br />RuleType ident_vname_sz_body = *(anychar_t &amp;amp; ~ch_t(&#8216;&#8221;&#8216;) ||<br /> ident_vname_sz_skip ); <br />RuleType ident_vname_sz = <br /> ident_vname_sz_body &gt;&gt; *(ident_vname_continue &gt;&gt; ident_vname_sz_body);<br />// Rule for default value name <br />RuleType ident_vname_sz_impl = ch_t(&#8216;&#8221;&#8216;) &gt;&gt; ident_vname_sz &gt;&gt; +ch_t(&#8216;&#8221;&#8216;);<br />RuleType ident_vname_def = ch_t(&#8216;@&#8217;);<br />// &#8220;text&#8221; or DEFAULT<br />RuleType ident_value_name = ident_vname_def | ident_vname_sz_impl;
<p>This rule can be represented on the scheme:</p>
</p>
<p> Rule for the value content // if value content is binary<br />// Data can be any character except for &#8216;\\&#8217; and &#8216;\n&#8217; in sequence<br />RuleType vdata_bin_body =*(anychar_t &amp;amp; ~ch_t(&#8216;\0&#8242;) &amp;amp; <br /> ~eol_t &amp;amp; ~ch_t(&#8216;\\&#8217;));<br />RuleType vdata_bin_continue = ch_t(&#8216;\\&#8217;) &gt;&gt; eol_t;<br />// if &#8216;\\&#8217; and &#8216;\n&#8217; in sequence data continue on the next line<br />RuleType vdata_bin = vdata_bin_body &gt;&gt; <br /> *(vdata_bin_continue &gt;&gt; vdata_bin_body);</p>
<p>// if value content is string<br />// String data always ends with &#8216;&#8221;&#8216; and &#8216;\n&#8217; symbols in sequence<br />RuleType vdata_sz_continue = +ch_t(&#8216;&#8221;&#8216;) &gt;&gt; ~eol_t;<br />RuleType vdata_sz_body_impl = *(anychar_t &amp;amp; ~ch_t(&#8216;&#8221;&#8216;));<br />RuleType vdata_sz_body = vdata_sz_body_impl &gt;&gt; <br /> *(vdata_sz_continue &gt;&gt; vdata_sz_body_impl);<br />// String data always starts and ends with &#8216;&#8221;&#8216; symbol<br />RuleType ident_vdata_sz = ch_t(&#8216;&#8221;&#8216;) &gt;&gt; vdata_sz_body &gt;&gt; +ch_t(&#8216;&#8221;&#8216;);</p>
<p>// Check value data format <br />RuleType ident_vdata = ident_vdata_sz | vdata_bin;
<p>This rule can be represented on the scheme like this:</p>
</p>
<p> Rule that describes the line with the key name // line with key name <br />RuleType l_key = <br /> other_data&gt;&gt; // Can be comments or start title <br /> ch_t(&#8216;[') &gt;&gt; // start of the key name<br /> // Call OnKeyFound function if rule succeeds<br /> ident_key_name [bind(&amp;amp;CRegFileParserImpl::OnKeyFound, <br /> this, _1,_2) ] &gt;&gt;<br /> blanks &gt;&gt; // can be blanks<br /> ch_t(&#8216;]&#8217;) &gt;&gt; // end of the key name<br /> blanks &gt;&gt; // can be blanks<br /> *eol_t; // one or more end of line symbols
<p>This rule requires the execution of several rules in sequence. The new idea here is to use the operator []. In this case, it means that when the rule is activated, the functor transferred as the parameter should be called. And, the range where this rule worked will be transferred to this functor via two parameters.</p>
<p> Rule that describes the line with the Value // lines with value name and data<br />RuleType l_values = <br /> other_data&gt;&gt; // Can be comments or start title<br /> // Call OnValueNameFound function if rule succeed<br /> ident_value_name <br /> [bind(&amp;amp;CRegFileParserImpl::OnValueNameFound, this, _1,_2) ] &gt;&gt; <br /> blanks &gt;&gt; // can be blanks <br /> ch_t(&#8216;=&#8217;) &gt;&gt; // always separates value name and value data<br /> blanks &gt;&gt; // can be blanks<br /> // Call OnValueDataFound function if rule succeeded<br /> value_data <br /> [bind(&amp;amp;CRegFileParserImpl::OnValueDataFound, this, _1,_2) ] &gt;&gt;</p>
<p> blanks &gt;&gt; // can be blanks<br /> *eol_t; // one or more end of line symbols
<p>This rule is much like the previous one. At this moment, we can return to the question stated during the interface discussion: &#8220;Why is the processing of Value separated into two functions OnValueNameFound and OnValueDataFound, after all it is one single entity?&#8221;. Now, we can give a more detailed answer. As it&#8217;s seen from the code above, it&#8217;s hard to support an interface corresponding to the reg file structure by means of boost::spirit &#8211; a function call with 4 parameters for the whole value.</p>
<p> Gathering everything together // Any line can satisfy one of the three rules<br />RuleType lines = l_key | l_values | empty_data;</p>
<p>// Start lexeme_d pars that compares also additional symbols<br />// if does just *lines, symbols &#8216; &#8216;,&#8217;\t&#8217;,'\n&#8217; are not compared<br />RuleType reg_file = lexeme_d [*lines] ;</p>
<p>// Execute parse<br />return (parse(buffer, reg_file).full);
<p>So, we finished the algorithm of reg file parsing. The rules for the key name are set, the value is aggregated, and the file parsing starts.</p>
<p>The whole function looks like the following:</p>
<p> template&lt;class charT&gt;<br />inline bool ParseRegFileImpl(const charT* buffer,<br /> IResultProcessor&lt;charT&gt;* resultProc)<br />{<br /> using namespace boost::spirit;<br /> typedef rule&lt;scanner&lt;const charT*&gt; &gt; RuleType;<br /> typedef chlit&lt;charT&gt; ch_t; // Single character<br /> typedef chset&lt;charT&gt; chs_t; // Character set<br /> typedef IResultProcessor&lt;charT&gt; ResProcT;</p>
<p> chs_t anychar_t(anychar_p); // Pattern to char set<br /> chs_t eol_CR(&#8216;\r&#8217;); // End of line CR<br /> chs_t eol_LF(&#8216;\n&#8217;); // End of line LF<br /> chs_t eol_t(eol_CR);// CR or LF end of line<br /> eol_t |= eol_LF;</p>
<p>/* &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; */<br />/* Help rules*/</p>
<p> // Matches spaces or tabs<br /> RuleType blanks = * blank_p;<br /> // Symbols &#8216;]&#8217;and &#8216;[' - separate Key Name<br /> RuleType not_name_separator = ~ch_t(']&#8216;) &amp;amp; ~ch_t(&#8216;[');<br /> // empty data<br /> RuleType empty_data = blanks &gt;&gt; (eol_t | ch_t('\0'));<br /> // Data in what we aren't interested<br /> // @ - it's default value name, "</p>
<p> // - requires additional processing<br /> RuleType other_data = *(anychar_t &amp;amp; not_name_separator &amp;amp; <br /> ~ch_t('@')&amp;amp; ~ch_t('"')); </p>
<p>/* -------------------------------------------------------------- */<br />/* Rules that describe identifier of key name */</p>
<p> RuleType ident_kname_continue = ch_t(']&#8216;) &gt;&gt; ~eol_t;<br /> RuleType ident_key_name = *(anychar_t &amp;amp; ~ch_t(&#8216;]&#8217;)) || <br /> ident_kname_continue &gt;&gt; ident_key_name;</p>
<p>/* &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; */<br />/* Rules that describe identifier of value name */</p>
<p> // Skip \&#8221; sequence<br /> RuleType ident_vname_sz_skip = ch_t(&#8216;\\&#8217;) &gt;&gt; ch_t(&#8216;&#8221;&#8216;);<br /> RuleType ident_vname_sz_impl = <br /> *(anychar_t &amp;amp; ~ch_t(&#8216;&#8221;&#8216;) || ident_vname_sz_skip ); <br /> // Add trailing symbols to match pattern<br /> RuleType ident_vname_sz = ch_t(&#8216;&#8221;&#8216;) &gt;&gt; <br /> ident_vname_sz_impl &gt;&gt; +ch_t(&#8216;&#8221;&#8216;);<br /> // Rule for default value name <br /> RuleType ident_vname_def = ch_t(&#8216;@&#8217;);<br /> // &#8220;text&#8221; or DEFAULT<br /> RuleType ident_value_name = ident_vname_def | ident_vname_sz;</p>
<p>/* &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; */<br />/* Rules that describe value content */</p>
<p> // if value content is binary<br /> // Data can be any character except for &#8216;\\&#8217; and &#8216;\n&#8217; in sequence<br /> RuleType vdata_bin_body = <br /> *(anychar_t &amp;amp; ~ch_t(&#8216;\0&#8242;) &amp;amp; ~eol_t &amp;amp; ~ch_t(&#8216;\\&#8217;));<br /> RuleType vdata_bin_continue = ch_t(&#8216;\\&#8217;) &gt;&gt; eol_t;<br /> // if &#8216;\\&#8217; and &#8216;\n&#8217; in sequence then<br /> // data continue on the next line<br /> RuleType vdata_bin = vdata_bin_body &gt;&gt; <br /> *(vdata_bin_continue &gt;&gt; vdata_bin_body);</p>
<p> // if value content is string<br /> // String data always end with &#8216;&#8221;&#8216; and &#8216;\n&#8217; symbols in sequence<br /> RuleType vdata_sz_continue = +ch_t(&#8216;&#8221;&#8216;) &gt;&gt; ~eol_t;<br /> RuleType vdata_sz_body_impl = *(anychar_t &amp;amp; ~ch_t(&#8216;&#8221;&#8216;));<br /> RuleType vdata_sz_body = vdata_sz_body_impl &gt;&gt; <br /> *(vdata_sz_continue &gt;&gt; vdata_sz_body_impl);<br /> // String data always start and end with &#8216;&#8221;&#8216; symbol<br /> RuleType ident_vdata_sz = ch_t(&#8216;&#8221;&#8216;) &gt;&gt; <br /> vdata_sz_body &gt;&gt; +ch_t(&#8216;&#8221;&#8216;);</p>
<p> // Check value content format <br /> RuleType ident_vdata = ident_vdata_sz | vdata_bin;</p>
<p>/* &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; */<br />/* Put all rules together */</p>
<p> // line with key name <br /> RuleType l_key = <br /> other_data&gt;&gt; // Can be comments or start title <br /> ch_t(&#8216;[') &gt;&gt; // starts key name<br /> // Call OnKeyFound function if rule succeed<br /> ident_key_name [bind(&amp;amp;ResProcT::OnKeyFound, <br /> resultProc, _1,_2) ] &gt;&gt;</p>
<p> blanks &gt;&gt; // can be blanks<br /> ch_t(&#8216;]&#8217;) &gt;&gt; // ends key name<br /> blanks &gt;&gt; // can be blanks<br /> *eol_t; // one or more end of line symbols</p>
<p> // lines with value name and data<br /> RuleType l_values = <br /> other_data&gt;&gt; // Can be comments or start title<br /> // Call OnValueNameFound function if rule succeed<br /> ident_value_name [bind(&amp;amp;ResProcT::OnValueNameFound, <br /> resultProc, _1,_2) ] &gt;&gt; <br /> blanks &gt;&gt; // can be blanks <br /> ch_t(&#8216;=&#8217;) &gt;&gt; // always separates value name and value data<br /> blanks &gt;&gt; // can be blanks<br /> // Call OnValueDataFound function if rule succeed<br /> ident_vdata [bind(&amp;amp;ResProcT::OnValueDataFound, <br /> resultProc, _1,_2) ] &gt;&gt;</p>
<p> blanks &gt;&gt; // can be blanks<br /> *eol_t; // one or more end of line symbols</p>
<p> // Any line can satisfy one of three rules<br /> RuleType lines = l_key | l_values | empty_data;</p>
<p> // Do lexeme_d pars that compare also additional symbols<br /> // if do just *lines, symbols &#8216; &#8216;,&#8217;\t&#8217;,'\n&#8217; are not compared<br /> RuleType reg_file = lexeme_d [*lines] ;</p>
<p> // Execute parse<br /> return (parse(buffer, reg_file).full);<br />} CRegFileParser
<p>It&#8217;s time to consider the wrapper class for this algorithm. This class assumes the processing of the value name and the value content. In other words, this class supports the following intrface:</p>
<p> template&lt;class charT&gt;<br />struct IRegFileObserver<br />{<br /> virtual ~IRegFileObserver(){}</p>
<p> virtual void OnKeyFound(const charT* begin, const charT* end)=0;<br /> virtual void OnValueFound(const charT* nameBegin, const charT* nameEnd,<br /> const charT* dataBegin, const charT* dataEnd)=0;<br />};
<p>And the class itself:</p>
<p> template&lt;class charT&gt;<br />class CRegFileParser:public IResultProcessor&lt;charT&gt;<br />{ <br /> typedef std::pair&lt;const charT*,const charT*&gt; BuferRange;<br /> BuferRange lastVName_;</p>
<p> IRegFileObserver&lt;charT&gt;* pObserver_;</p>
<p> bool bLastVNameProcessed_;<br />public:<br /> CRegFileParser(IRegFileObserver&lt;charT&gt;* pObserver)<br /> : pObserver_(pObserver)<br /> , bLastVNameProcessed_(true)<br /> {}</p>
<p> bool Parse(const charT* buffer)<br /> {<br /> return ParseRegFileImpl(buffer,this);<br /> }</p>
<p>private:<br /> void OnKeyFound(const charT* begin, const charT* end)<br /> {<br /> CheckVNameProcessed(true);</p>
<p> pObserver_-&gt;OnKeyFound(begin,end);<br /> }<br /> void OnValueNameFound(const charT* begin, const charT* end)<br /> {<br /> CheckVNameProcessed(true);</p>
<p> bLastVNameProcessed_ = false;<br /> lastVName_.first = begin;<br /> lastVName_.second = end; <br /> }<br /> void OnValueDataFound(const charT* begin, const charT* end)<br /> {<br /> CheckVNameProcessed(false);</p>
<p> bLastVNameProcessed_ = true;<br /> pObserver_-&gt;OnValueFound(lastVName_.first, <br /> lastVName_.second,begin,end);<br /> }<br /> void CheckVNameProcessed(bool needToBeProcessed)<br /> {<br /> if(bLastVNameProcessed_ != needToBeProcessed)<br /> throw std::exception(&#8220;Value data not &#8221; + <br /> &#8220;found for founded value name&#8221;);<br /> }<br />}; Using Pool
<p>Before considering the observers created for testing, we should describe the usage of the boost Pool library.</p>
<p> What is Pool?
<p>Pool allocation is a memory allocation scheme that is very fast, but limited in its usage.</p>
<p> Installation
<p>The Boost Pool library is a header file library. That means there is no .lib, .dll, or .so to build; just add the Boost directory to your compiler&#8217;s include file path, and you should be good to go!</p>
<p> How do I use Pool?
<p>To make it convenient, I created the following classes that have the functionality of the standard STL containers but use the boost Pool library:</p>
<p> #include &lt;boost/pool/pool_alloc.hpp&gt;<br />#include &lt;map&gt;<br />#include &lt;vector&gt;<br />#include &lt;list&gt;</p>
<p>#include &lt;string&gt;</p>
<p>template&lt;class _Kty, class _Ty&gt;<br />class QMap : public std::map&lt; _Kty, _Ty, std::less&lt;_Kty&gt;, <br /> boost::fast_pool_allocator&lt; std::pair&lt;_Kty,_Ty&gt; &gt; &gt;</p>
<p>{};</p>
<p>template&lt;class _Ty&gt;<br />class QVect : public std::vector&lt; _Ty, boost::pool_allocator&lt;_Ty&gt; &gt;<br />{};</p>
<p>template&lt;class _Ty&gt;<br />class QList : public std::list&lt; _Ty, boost::pool_allocator&lt;_Ty&gt; &gt;</p>
<p>{};</p>
<p>template&lt;class _Ty&gt;<br />class QStringStream : <br /> public std::basic_stringstream&lt; _Ty,std::char_traits&lt;_Ty&gt;, <br /> boost::pool_allocator&lt;_Ty&gt; &gt;<br />{};</p>
<p>template&lt;class _Ty&gt;<br />class QString: public std::basic_string&lt;_Ty,std::char_traits&lt;_Ty&gt;,<br /> boost::pool_allocator&lt;_Ty&gt; &gt;</p>
<p>{<br /> typedef std::basic_string&lt;_Ty,std::char_traits&lt;_Ty&gt;,<br /> boost::pool_allocator&lt;_Ty&gt; &gt;<br /> BaseClass;<br />public:<br /> QString(){}<br /> // construct from [_First, _Last), const pointers<br /> QString(const _Ty* first,const _Ty* last)<br /> : BaseClass(first,last)<br /> {}<br />};
<p>The only disadvantage - as you could notice - is no full support for original constructors. I actually think that it's not a big problem, you can just insert the necessary constructor if it's needed.</p>
<p> Observers
<p>Some observers were created for testing purposes:</p>
<p> CRegStatusObserver - assigned to print the status of the parsing process on the screen in percentage. CRegCountObserver - assigned to print the number of keys and the values on the screen. CRegPrintObserver - assigned to print all the keys and values on the screen. CRegFullObserver - assigned to store all the keys in std::map, where the name of the Registry key is key and the vector of all the values of this Registry key is the std::vector values. CRegObserversPool - assigned to make it possible to use several observers simultaneously.
<p>It's important to mention that these observers print information on the screen, but they can be used to print to the file or some other stream. For example, CRegCountObserver:</p>
<p> template&lt;class charT,class streamT&gt;<br />class CRegCountObserver:public IRegFileObserver&lt;charT&gt;<br />{<br /> size_t keysCount_; <br /> size_t valuesCount_;</p>
<p> streamT&amp;amp; out_;<br />public:<br /> CRegCountObserver(streamT&amp;amp; out)<br /> : keysCount_(0)<br /> , valuesCount_(0)<br /> , out_(out)<br /> {}<br /> ~CRegCountObserver()<br /> {<br /> out_ &lt;&lt; "Keys count: "<br /> &lt;&lt; keysCount_ <br /> &lt;&lt; "\t Values count: " <br /> &lt;&lt; valuesCount_<br /> &lt;&lt; "\n";<br /> }<br />...<br />};
<p>And some examples of its usage:</p>
<p> // 1<br />CRegCountObserver&lt;char&gt; screenObsr(std::cout);</p>
<p>// 2<br />std::stringstream strStream;<br />CRegPrintObserver&lt;char,std::stringstream&gt; stringObsr(strStream);</p>
<p>// 3<br />std::fstream fileStream;<br />CRegPrintObserver&lt;char,std::fstream&gt; fileObsr(fileStream);
<p>The usage of other observers is the same.</p>
<p> Auto-tests description
<p>All auto-test are represented in the one project, RegFileParserAutoTest.</p>
<p>The test is a console application developed with the Boost Testing Framework. Five complicated cases were chosen to be the test data: one for key name, two for value name, and two for value content.</p>
<p>There is one more case with the typical content of a reg file. So, we have six cases, and there are two versions of reg file format - ANSI and UNICODE (Regedit4 and Regedit5 correspondingly); each of our cases duplicates for two formats. As a result, we have 12 test files.</p>
<p>To control the results of parsing, we use a comparison of the original content and the content parsed and saved in memory using CRegPrintObserver:</p>
<p> template&lt;class charT&gt;<br />class TestRunner<br />{<br />protected:<br /> typedef std::basic_string&lt;charT&gt; stringT;<br /> typedef std::basic_stringstream&lt;charT&gt; stringstreamT;</p>
<p> typedef std::basic_fstream&lt;charT&gt; fstreamT;<br />public:</p>
<p> ...</p>
<p> static void <br /> RunTest(const std::wstring&amp;amp; fileName)<br /> {<br /> std::vector&lt;char&gt; buffer;<br /> ReadFile(fileName,&amp;amp;buffer);</p>
<p> stringstreamT stream; <br /> reg_parser::CRegPrintObserver&lt;charT,stringstreamT&gt; <br /> coutObserver(stream);<br /> reg_parser::CRegFileParser&lt;charT&gt; regParser(&amp;amp;coutObserver);</p>
<p> // Run parsing<br /> if( !regParser.Parse( (charT*)&amp;amp;buffer[0] ) )<br /> throw std::exception(&#8220;Parsing fail.&#8221;);</p>
<p> // Prepare data for comparison<br /> stringT parsedStr;<br /> AddRegHeader(&amp;amp;parsedStr);<br /> parsedStr += stream.str();</p>
<p> stringT originalStr = stringT((charT*)&amp;amp;buffer[0]);</p>
<p> // Trim unneeded symbols<br /> using namespace boost;<br /> trim_if(originalStr,is_any_of(&#8220;\n\t\0 &#8220;));<br /> trim_if(parsedStr,is_any_of(&#8220;\n\t\0 &#8220;));</p>
<p> if( parsedStr != originalStr)<br /> {<br /> // Save to file result of parsing<br /> std::wstring parsedFileName = fileName + L&#8221;_parsed&#8221;;<br /> fstreamT file(parsedFileName.c_str(), <br /> fstreamT::out | fstreamT::trunc);<br /> if( file.is_open() == false )<br /> throw std::exception(&#8220;Can&#8217;t create file for &#8221; <br /> &#8220;result of parsing.&#8221;);</p>
<p> BOOST_SCOPE_EXIT( (&amp;amp;file) )<br /> {<br /> file.close();<br /> } <br /> BOOST_SCOPE_EXIT_END</p>
<p> file &lt;&lt; parsedStr;</p>
<p> throw std::exception(&#8220;Parsed data not &#8221; <br /> &#8220;equal to original data.&#8221;);<br /> }<br /> }</p>
<p> &#8230;<br />}; Description for manual testing
<p>Manual tests are represented in one project, RegFileParserTestCmd. The test is a console application implemented using Boost Program Options that has these parameters:</p>
<p> C:\RegFileParser\bin\Debug&gt;RegFileParserTestCmd.exe &#8211;help<br />Allowed options:<br /> &#8211;help produce help message<br /> &#8211;reg_file arg source reg file<br /> &#8211;print Enable printing to the screen<br /> &#8211;count Enable counting parsed keys and values<br /> &#8211;status Enable printing status of parsing
<p>It&#8217;s a pity that I don&#8217;t have enough time to add options to save the parsed content to a file, and using the save option like it is in autotest doesn&#8217;t seem to be aesthetic to me.</p>
<p> Registry export using Regedit
</p>
<p> Conclusion
<p>This article is a special piece of knowledge, so may be it&#8217;s not as systematic as it should be.</p>
<p>It was really interesting to learn boost spirit, and I managed to get the pleasure of my work with it and some aesthetic satisfaction &#8211; not just get my task done. After all, this discovered to be very effective; for example, the calculation of number of keys and values in a Registry file of 250 MB now takes a couple of seconds only.</p>
<p>So learn something new, and good luck to you in your development!</p>
<p>Download sources from <a rel="nofollow" onclick="javascript:pageTracker._trackPageview('/outgoing/article_exit_link');" href="http://www.apriorit.com/our-articles/reg-file-parser.html">Apriorit site</a>.</p>
<div style="margin:5px;padding:5px;border:1px solid #c1c1c1;font-size: 10px;">
</div>
]]></content:encoded>
			<wfw:commentRss>http://classregistration.net/reg-file-parser-using-the-boost-spirit-parser-framework/381/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What Is Distance Education?</title>
		<link>http://classregistration.net/what-is-distance-education/378/</link>
		<comments>http://classregistration.net/what-is-distance-education/378/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 08:32:31 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[class registration software]]></category>
		<category><![CDATA[distance]]></category>
		<category><![CDATA[Education]]></category>

		<guid isPermaLink="false">http://classregistration.net/what-is-distance-education/378/</guid>
		<description><![CDATA[What is Distance Education? 
Establish a definition of Distance Education, after analyzing how define some educational institutions. Examine the origin of distance education and compare the term with similar expressions. Before attempting to explain the complex and controversial issue is useful to define the terms in question. In this case, before defining distance education, we [...]]]></description>
			<content:encoded><![CDATA[<p><strong>What is Distance Education? </strong></p>
<p>Establish a definition of Distance Education, after analyzing how define some educational institutions. Examine the origin of distance education and compare the term with similar expressions. <br />Before attempting to explain the complex and controversial issue is useful to define the terms in question. In this case, before defining distance education, we should first define Education.</p>
<p><strong>Education </strong><strong><br /></strong>A dictionary definition of education is: <br />&#8220;The act or process of educating or being educated.&#8221; Or more simple &#8220;The act of imparting knowledge.</p>
<p>It is important to note that the words in the definitions above are action or process. But Education is associated with a place such as school, university, schools and not the process. </p>
<p><strong>Learning </strong><strong><br /></strong>With regard to the concept of learning, there are various conceptions and interpretations. Examine some of them, as well as elements of them. <br />We call learning modality or man&#8217;s ability to learn, which occurred as a result of motor activities that cannot be attributed simply to the process of growth and development as human beings. <br />We can say that learning is a process of acquiring knowledge and skills. For this process can be defined as learning, rather than passing a simple restraint must involve retention of knowledge or skill in question to allow for their demonstration at a future time. Learning can be defined in a more formal &#8220;as a relatively permanent change in behavior or potential behavior, comes from experience.&#8221;</p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>We note that learning can be understood: </strong><strong></p>
<p></strong></p>
<p>As a product, ie the result of an experience or a change that comes with   practice.<br />
 As a process in which the behavior changes, improves or controls.<br />
 As a function since it is the change that occurs when the subject interacts with the information (materials, activities and academic experiences). </p>
<p><strong> </strong></p>
<p><strong>In the 80s there were three major changes on the theme of education and learning. </strong><strong><br /></strong>1. The passage of a psychosocial orientation of education to their integration into   a theory of teaching.</p>
<p>2. The paradigm shift from a predominantly behavioral, cognitive orientation to another. <br />3. Expanding the concept of learning which includes cognitive and effective.</p>
<p>For now define that distance education is a form of education, referring to the process, but this process is done remotely. For what could be defined as the act or process of educating or being educated, when this process is done remotely without using a physical space where members are meeting the educational process. <br />Consider that the concept of education includes the teaching-learning process, according to modern interpretations of the same, thus acting to achieve a better relationship with existing and common concepts. <br />The Distance Education Program was conceived as a means of informal education that would integrate with people who, for cultural, social or economic not adapt or no access to conventional education systems. </p>
<p><strong>Definitions of other institutions </strong><strong></p>
<p></strong></p>
<p><strong>Let&#8217;s see how some institutions define distance education. </strong><strong><br /></strong>Combination of education and technology to reach their audience through large distances is the hallmark of distance learning. This amounts to a strategic means to provide training, education and new communication channels for businesses, educational institutions, government and other public and private agencies. With predictions of being one of the seven major developments in the area of education in the future, distance education is crucial in our geopolitical situation as a means of disseminating and assimilating information on a global basis .- (Texas A &amp; M University) . <br />Distance Education is distributing education that does not require students to be physically present in the same place with the instructor. Historically, Distance Education meant studying by correspondence. Today, audio, video and computer technology are most common modes of transmission: (The Distance Learning Resource Network DLRN). <br />The term distance education represents a variety of education models have in common the physical separation of teachers and some or all students (University of Maryland). <br />At its basic level, distance education takes place when students and teachers are separated by physical distance and technology (voice, video, data and impressions) often in combination with face to face classes, is used as a bridge to reduce this barrier (Distance Education at a Glance).</p>
<p>Using the above definitions we can identify three criteria for distance education. </p>
<p><strong>These are: </strong><strong><br /></strong>• Separation of teachers and students, at least in most parts of the process, <br />• The use of technological means to unite education teachers and students, <br />• Using two-way communication between students and instructors. </p>
<p><strong>Like terms. </strong><strong><br /></strong> Now to distinguish between some similar terms, synonyms, Distance Education. <br />To define more clearly the issue now discuss terms associated. There are many terms that are used as synonyms for Distance Education. While many of these terms are related, there are differences. Usually when people use one of these terms or otherwise, unless they have a specific purpose related to distance education. </p>
<p><strong>These terms include </strong><strong></p>
<p></strong></p>
<p><strong>Distance Learning (Distance Learning) </strong><br />The school and instructor control of distance education but the learning is student responsibility. The student is responsible for obtaining the knowledge, understanding or application through the educational process. <br />Learning is the result of education. The teacher provides the environment that makes learning possible, but the student is performing it. <br />Distance learning can be considered a product of distance education. </p>
<p><strong>Open Learning (Open Learning) </strong><strong><br /></strong>Open learning is a possibility of access to educational opportunities. Opening up opportunities for groups of the population that traditionally lacked the prerequisites for higher education. Open learning has changed the concept that education must be conducted within a prescribed schedule and school formal means. </p>
<p><strong>Distributed Learning (Distributed Learning) </strong><strong><br /></strong>Distributed learning, also known as learning networks, combining different ways of sending mail. It is characterized by user groups and modes of communication, all computerized. The distributed learning are increasingly combining internal computer networks (Intranets) running on LANs (local area networks) and Internet. </p>
<p><strong>Flexible Learning (Flexible Learning) </strong><strong><br /></strong>Flexible Learning seeks to optimize every opportunity for education. Recognizes that not all students learn the same way. Flexible learning focuses on learning strategies for individual students. Using all the strategies and techniques available to maximize the educational process. Flexible learning aims to be student-centered, emphasizing the responsibility of students, learning to train and rhythm of individual advancement.</p>
<p>At a basic level distance education takes place when educators and students are physically separated and technologies (video, voice, data, and print) are used combined with witnessing activities to reduce the impact of distance learning.</p>
<p>The distance education programs are providing adults a second chance at higher education and are helping those with limited time, distance, work or physical limitations, to update the skills required in their work. </p>
<p><strong>How is Distance Education? </strong><strong><br /></strong>Currently using a variety of electronic means to send or receive support materials for distance education. Each institution determines the most appropriate media, in which it has at its disposal and its students well, and with them makes the combinations that best suit their capabilities. The media can be classified into four broad categories:</p>
<p><strong>Voice: </strong>The educational tools related to the voice can be divided into passive and interactive. Among the former are the telephone, audio conferencing, voice mail and shortwave radio. The technological tools are passive voice audio recorders. Interactive technologies allow simultaneous communication in both directions, send and receive, while in the passive the student only receives the message and cannot answer it at that time. </p>
<p><strong>Video:</strong> Inside find the video images, such as computer presentations (slide shows, Power Point, etc.) Filmed moving images (movies, videos, digitized film, etc.). And moving images transmitted in time real. These can be in one direction, such as those sent via satellite or commercial television or may be through computers in desktop video conferencing or interactive video conferencing. </p>
<p><strong>Data:</strong> Applies to the information sent and received through computers. In this category are four broad categories:</p>
<p>• Computer Aided Education (Computer-assisted instruction (CAI)) <br />• Administered by Computer Education (Computer-managed instruction (CMI)) <br />• Education for Computer Multimedia through. (Computer-Based Multimedia (CBM) <br />• Education through Computers. (Computer-mediated education (CME))</p>
<p><strong>Materials:</strong> This was the basic form of distance education programs, from the current systems evolved. It includes textbooks, study guides, workbooks, curricula, case studies, etc.. Currently one of the forms printed have been displaced by data sent via computer and made available to students via the Internet, where it is common to find programs of classes, lectures, study guides and some materials more. The student can now consult the Internet, forward them to your computer or print if desired. </p>
<p><strong>Is Distance Education Effective? </strong><strong><br /></strong>Many educators ask if distant students learn as well as traditional students. Researchers who have compared the methods of distance education with traditional forms have concluded that distance education can be as effective as traditional forms of education face when using the methods and technologies, ie, when there is interaction between students and when they have timely feedback from the teacher. <br />One of the key questions associated with educational technology is whether it helps or not student learning. There have been two main approaches used to investigate the media. It compares the new medium (radio, tv computer) with a traditional classroom. In these studies comparing distance education with traditional methods in the classroom. Many studies have shown no significant difference in the achievements made as a result of the comparisons. The result achieved by students is not a function of the mode of teaching. Some studies have found higher returns when students used interactive computer programs, including email, video one way or two-way communication and media. <br />Other studies have focused on the learning context rather than a specific means of transmission. These studies have shown that students perform better when you combine several means of delivery and teaching techniques. They have studied the effects of using desktop videoconferencing used to evaluate the work of other colleagues or the effect of participating in large workgroups. The interaction between collaborative working groups and new educational technologies generally produce positive outcomes for students. <br />Finally, some studies have identified several factors that appear to be particularly important in distance education. A high level of student motivation, hard work and ethical, academic and technical support to students include measures which generally produce good results in the students. Support to students has been defined as providing not only academic, but also the identification and solution of problems of students, providing opportunities for interaction between students and teachers, and the ability to keep them motivated through monitoring of achievements and feedback. </p>
<p><strong>Key elements in Distance Education </strong><strong><br /></strong>At first we define education as a process and as such has elements that play roles in the process. We discuss the key elements of distance education process and the changes they have experienced their roles for the effects of technology. </p>
<p><strong>Students:</strong> Regardless of the context in which to develop education, the role of students is learning. This is a daunting task that usually in most cases requires motivation, planning and the ability to analyze and apply knowledge they learn. When distance education is to have a special burden that are separated from their companions, and they have near them who share their interests and knowledge. Furthermore, with the new technologies are now able to interact with peers who may live in very different to his, and enrich their learning experiences with others, and the experience of their teachers. <br /><strong>Educators:</strong> The effectiveness of any distance education process rests firmly on the shoulders of educators and teachers. In a traditional classroom, the teacher&#8217;s responsibilities also include determining the specific content of the course, understand and address the particular needs of students. In distance education teachers must also:</p>
<p>• Develop an understanding and knowledge of the characteristics and needs of distance learners with little or no personal contact.</p>
<p>• Adapt teaching styles taking into consideration the needs and expectations of a wide and diverse audience.</p>
<p>• Knowing how to operate educational technology while keeping their attention on their roles as educators.</p>
<p>• Operate effectively as a facilitator and as a content provider. </p>
<p><strong>Consultants: </strong>It&#8217;s a new character in distance education that is used in remote sites to support the teacher or principal instructor, providing advice and support to students and being a bridge between students and lead teacher. Carry out functions such as installation of equipment and software meet the jobs and tasks, and use tests are the eyes and ears of the teacher in distant sites. </p>
<p><strong>Support Staff:</strong> They are responsible for the numerous technical details and communication required in a distance education process function effectively. Usually responsible for the registration of students, duplication and distribution of materials, shipment of textbooks, control and distribution of correspondence between students and teachers, scheduling courses, checking grades, following the development of courses . On the technical side of educational technology, are responsible for the installation and operation of communication networks, installation or development of software required for the process of distance education, technical assistance with questions from students or correcting faults and communication problems, or performance. </p>
<p><strong>Administrators:</strong> Administrators are directly related to the planning and implementation of distance education programs. Once in operation the programs achieve coordination among support personnel, technical, academic to ensure there are material resources, technological and human resources to achieve the objectives of the institution. Maintain the academic focus of distance education programs. </p>
<p><strong>Why teach at a distance? </strong><strong><br /></strong>Teachers in a traditional school classroom support the realization of its kind in that they can observe the behavior of their students. Eye contact is an essential element for imparting knowledge. A quick glance lets them know who is paying attention and taking notes, who is preparing to ask a question or comment. It also allows them to detect a student who is bored and tired, as it is equally clear. Good teachers are attentive to the manifestations of their students&#8217; behavior and modify the alternate class activities according to the circumstances they detect. <br />In contrast, the distance teacher has little or no eye contact with students. In addition to the few contacts that are distorted or are somehow affected by the barriers imposed by technology. It is more difficult to maintain a stimulating teacher-student discussion when you are not seeing the faces or when to expect the arrival of the sound between the two remote sites.</p>
<p>However, many teachers who use it have the idea that the opportunities offered by distance education outweigh the obstacles to the use of technology. In fact, many instructors agree that the distance that requires preparation courses to help improve their performance as teachers. The challenges of distance education means are offset by opportunities for:</p>
<p>• To reach a wider audience of students. </p>
<p>• Meet the needs of students who cannot attend regular classes at universities due to limited work, time or space. </p>
<p>• Engage in class participation of experts from other areas that are located anywhere and that would not otherwise be accessible to students. </p>
<p>• Gather students of different cultural, economic, social and with varied work experiences and knowledge. </p>
<p>• Make education and training accessible to students in remote areas. </p>
<p>• Allowing can continue their studies without having to stop working and getting paid. </p>
<p>• Ensure that students can get expert advice from highly skilled teachers.</p>
<p>From a strictly educational standpoint, not managerial or administrative, that is, from the perspective of the creation, production, dissemination and critical evaluation of knowledge, technology can be applied in four basic ways which are:</p>
<p>1. How to help education? </p>
<p>2. How direct support learning? </p>
<p>3. &#8220;As an analytical tool for thinking systemically education? </p>
<p>4. How research helps to intellectual, scientific or artistic creation?</p>
<p>We do not doubt the enormous positive impact which the use of various telecommunications technologies in educational processes. Benefits are reported in economy of time in more individualized to the specific needs of each user, to facilitate content learning through greater connection audiovisual sensory and sequential themes, subjects studied, to shorten geographical distances, to communicate quickly to multiple people simultaneously, in rapid dissemination of findings, research and knowledge on student interaction with the learning experience and I can go on citing many advantages for the educational process appropriate use of technologies. It is a way of encouraging active student participation in learning. </p>
<p><strong> What to do to be successful learning? </strong><strong><br /></strong>Good educational practice is essentially the same distance to the traditional good educational practice and the factors that influence education are generally universal in different environments. Since the technology using distance education requires more planning and preparation, teachers who teach distance should consider the following factors to improve its effectiveness:</p>
<p>• It requires extensive planning and evaluation of equipment and training courses. The distance students appreciate teachers who are well prepared course and being organized. </p>
<p>• Students perform better when the program and class materials are well presented. The use of images and graphics and interactivity contributes to the understanding by students of the course. However, the use of visual aids should be considered in terms of the environment in which they taught the class and possible characteristics of students. </p>
<p>• Teachers need to be trained in the use of equipment and techniques suitable for distance education. Students learn best when the teacher dominates the hardware and software used for distance education. </p>
<p>Many distance students need advice and support to perform most of the learning experience. The support they can get from the combination of interaction with the teacher or other students through discussion forums and tools that will provide the teacher. </p>
<p>• Students appreciate timely feedback on course content, examinations or assessments and projects or works to be performed. </p>
<p>• Students will gain great benefits from learning to participate in small learning groups. These groups provide support and encouragement as well as feedback on course work and tasks. The groups also provide them with the assurance that if they need help, where will get it. </p>
<p>• Students generally stay more motivated if they are in contact with the teacher or counselor. The formal contact within the course design can be used as a motivational tool. </p>
<p>• The use of local facilitators who are responsible for developing a friendly environment for working with students and those familiar with the team and the course content, increase student satisfaction with the course. </p>
<p>For teachers, participating in distance education programs requires the improvement of skills they already have, rather than the development of new skills, so they must put attention to the following aspects.</p>
<p>• Evaluate the content really can be included and addressed effectively in any course. Given the logistics that distance education requires, submit the same content at a distance usually requires more time to present it in a classroom. </p>
<p>• Note that students who participate in your course will probably have different learning styles. Some team will facilitate learning, while others will be excellent independent work. </p>
<p>• Diversify and schedule the course activities and avoid long readings. Interleave content presentations with discussions and exercises for students. Keep in mind the medium or combination of them, which will run the course and discover all the advantages we offer. </p>
<p>• humanize the course keeping the focus on student learning and not the medium of transmission or technology. </p>
<p>• Consider using some components of printed material to supplement non-print materials. </p>
<p>• Use examples and case studies of local students as possible and support their students to understand and apply its knowledge environment of the course. Remember that the circumstances and environments in which students will be located are varied. </p>
<p>• Impulse their students to share experiences with peers and with the group. You can learn much more by sharing the experiences of all, in orderly fashion. Ask them to explain how things in their environment and how they apply the knowledge they are acquiring. </p>
<p>• Be concise. Use short statements and comprehensive. Ask things directly. Always remember that the distances make communication slower and that students need more time to respond. </p>
<p>• Develop strategies to strengthen students for review, repetition and remediation. For this, the phone counseling, email or audio conference can be very useful. </p>
<p>• Stay relaxed. Students need to familiarize participants with the new form of distance education in which they are participating. After the initial period the rate of progress in improving learning. <br />If the teacher uses appropriate strategies for interaction and feedback can identify and meet the individual needs of their students, while establishing adequate mechanisms to enable it to constantly improve the course. To improve interaction and feedback, keep the following: </p>
<p>• Use questions that students can study before classes to promote critical thinking and well-informed participation of students. Use the time on his side and avoid the improvisations of the students. Let them investigate and substantiate their shares. </p>
<p>• Since the beginning of the courses ask students to make contact with you and each other through e-mail to feel accustomed to the process. Maintain electronic communication forums can be a very effective tool. </p>
<p>• Establish and respect for their office hours at that distance learners can locate him by telephone, audio conferencing or desktop videoconferencing. Use the evening or night if the majority of students work during the day. </p>
<p>• Keep a variety of forms of interaction and feedback. The easier it is for different types of students select one in which they feel most comfortable. Consider also the personal visits whenever possible. </p>
<p>• Communicate with all sites or all students, if possible every week, especially early in the course. Determine students not participating in the first session and establish communication with them. </p>
<p>• Keep forms of communication available to discuss matters related to the content, relevance, the course syllabus, shipping materials, work in teams and form of instruction. </p>
<p>• Have students keep a journal about their experiences and thoughts on the process and ideas about course content. Ask them to send their units frequently. </p>
<p>• Use local facilitators to stimulate interaction when their students are hesitant to ask questions or participate. </p>
<p>• Ensure that all students have equal opportunities to participate. Diplomatically but firmly discourage students&#8217; attempts to monopolize or sites wishing to participate in class time. </p>
<p>• Make detailed comments on the work or opinions received, refer them to additional sources of information where they can enrich their learning. Answer promptly by the most effective and expeditious disposal. </p>
<p><strong>BENEFITS OF DISTANCE  EDUCATION </strong><strong><br /></strong>• No boundaries of time or place. </p>
<p>• Ability to offer courses according to needs at the right time. </p>
<p>• Adaptation of content. </p>
<p>• Greater possibility of renovation continues. </p>
<p>• Provision of courses taught by professionals from the Association. </p>
<p>• Sharing Resources: Distance education enables the institutional resources of a school or institution will be used to teach students from other schools or institutions </p>
<p>• Greater access to students: Through distance education, students have access to instruction in more than one location, instead of only the local instruction. This makes learning more accessible for many students. </p>
<p>• Improving the quality of education: Distance education should be considered as a future goal of the organizations and institutions, as well as how to take advantage of any special characteristics of a remote location. </p>
<p>• Flexibility in time and space <br />Provides participants the flexibility to access the study material and study schedule that allows asynchronous, anywhere where they are </p>
<p>• Rate of custom study <br />Allow time management and use of the hours that best suit the participant according their own needs </p>
<p>• Specialized Faculty <br />It puts teachers experts in the field of knowledge available to participants </p>
<p><strong>OTHER BENEFITS </strong></p>
<p>• Autonomy in the study. </p>
<p>• Convenience. </p>
<p>• Flexibility. </p>
<p>• Time saving. </p>
<p>• Tutoring. </p>
<p>• Lower Costs.</p>
<p><strong>Why are successful students? </strong></p>
<p><strong><br /></strong>Research suggests that students involved in distance education programs have certain characteristics that influence their performance in the courses: </p>
<p>• Student volunteers are seeking more education. </p>
<p>• Have college education goals </p>
<p>• They are highly motivated and self disciplined. </p>
<p>• Are older than those attending universities. <br />Studies have also shown that the following factors are important in both traditional and distance education. </p>
<p>• Willingness to seek help from the instructors. </p>
<p>• Serious attitude throughout the course. </p>
<p><strong>Conclusion:</strong><strong><br /></strong>A high level of student motivation, hard work and ethical, academic and technical support to students include measures which generally produce good results in the students. Support to students has been defined as providing not only academic, but also the identification and solution of problems of students, providing opportunities for interaction between students and teachers, and the ability to keep them motivated through monitoring of achievements and feedback.</p>
<div style="margin:5px;padding:5px;border:1px solid #c1c1c1;font-size: 10px;">
<p>DR. CARLOS I. GARCIA RAMIREZ</p>
<p>CATEDRATICO ASOCIADO</p>
<p>UNIVERSIDAD INTERAMERICANA DE PUERTO RICO</p>
<p>FAJARDO CAMPUS</p>
<p>FAJARDO, PUERTO RICO</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://classregistration.net/what-is-distance-education/378/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

