About site: Speech Technology/VoiceXML - Speakright Framework
Return to Computers also Computers
  About site: http://speakrightframework.blogspot.com/

Title: Speech Technology/VoiceXML - Speakright Framework Open source framework for writing VoiceXML applications in Java.
Membex Specializing in interface design, usability testing, site development, database architecture, and ecommerce sites. Located in Pennsylvania, USA.

GNS_Network_Services,_Inc_ Computing hardware and software for law practice management solutions and support for Northern and Central California small and medium law firms.

Filesystems_HOWTO Describes a wide variety of filesystems and instructs you on how to access them from a wide variety of operating systems.

Document_and_Records_Management GRM specializes in document management, data storage, certified shredding and imaging services.

User\'s_Guide_to_the_Changing_Usenet Explains how RFDs (Requests For Discussion) and CFVs (Call For Votes) can be used to change a Usenet newsgroup. Gives tips on how to stay abreast of changes in newsgroups and how to be an active parti

CrazyBeans An extensible framework to generate code or to read, modify, analyze and create models in RationalRose's petal format.


  Alexa statistic for http://speakrightframework.blogspot.com/





Get your Google PageRank






Please visit: http://speakrightframework.blogspot.com/


  Related sites for http://speakrightframework.blogspot.com/
    GBS_Consultants,_Inc_ Tracker Help Desk Management, Tracker Customer Service, and Tracker Asset Management.
    My_Card_Maker Print custom greeting cards & invitations using templates or uploading your personal pictures. Designs can be sent by e-mail too.
    Font_Maniacs Webring community. Links sites with font related content together.
    NetPlus Contract negotiations services, frame relay and private line support, project management, and technical consulting.
    Advanced_Searchbar Offers the ability to search multiple search engines and directories.
    PC_Activity_Monitor_Pro Invisible keylogger, that captures all users activity on the computer. Product specifications, screenshots, and downloads.
    JavaOne Sun Microsystems' annual show; includes call for papers, archives, registration information, and schedule.
    Legion_of_The_Bouncy_Castle Provides open source implentations of the Java Cryptography Extension 1.2.1, and a lightweight Java Cryptography API for the J2ME, and the JDK. [Open Source]
    Agility_Recovery_Solutions Offering business continuity with disaster preparedness and recovery plans.
    Distributed_Folding_GUI dfGUI is an add-on to the Distributed Folding client that adds benchmarking and other options. Linux and Windows source and executable.
    SYSNET UK Premier Business Partner with over a decade of providing products, services and solutions using Lotus and IBM technology. Document Management, Intranet, Security, Business Value.
    An_in-depth_look_at_WMI_and_instrumentation,_Part_II WMI stands for Windows Management Instrumentation and, as the name indicates, is about managing your IT infrastructure this article is the second part of a two-part series.
    JavaScript_for_beginners Learn basic JavaScript coding through interactive examples.
    Content_Injector A PHP Based content management system that allows you to manage your entire site content and news from a single web based interface. [Freeware]
    RFC_0314 Network Graphics Working Group Meeting. I.W. Cotton. March 1972.
    Opera_Web_Browser_Knowledge_Base Information to help you if you have a specific problem or a technical question about using Opera.
    Scratch_Software Maker of Cache Killer, for web browser cache management.
    Fluid_Dynamics__CGI_Collection Freeware and shareware Perl scripts including search engine, visitor tracking system and page generator.
    AAA_Web_Design_Limited Design, site analysis, hosting, e-commerce solutions, and domain name registration. Based in the UK.
    MX_Force Enables VARs, OEMs, and ISPs to provide world-class managed email security services.
This is websites2007.org cache of m/ as retrieved on 2008.10.08 websites2007.org's cache is the snapshot that we took of the page as we crawled the web. The page may have changed since that time.
The SpeakRight Framework #navbar-iframe { display:block } function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener("load", function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } skip to main | skip to sidebar

The SpeakRight Framework

Building VoiceXML apps faster using reusable Java components.

What is SpeakRight?

SpeakRight is an open-source Java framework for writing speech recognition applications in VoiceXML.Unlike most proprietary speech-app tools, SpeakRight is code-based. Applications are written in Java using SpeakRight's extensible classes. Java IDEs such as Eclipse provide great debugging, fast Java-aware editing, and refactoring. Dynamic generation of VoiceXML is done using the popular StringTemplate templating framework. Read more...See Getting Started, Tutorial, and Table of ContentsPowered By Blogger

Friday, February 1, 2008

Bottom-up ProgrammingPeter Bell's blog is a great guide to domain-specific programming, application frameworks, and DSLs. His article Bottom-Up Programming really captures a style of programming I like. It refers to Paul Graham article that contrasts the old top-down programming style of Structure Programming, and the bottom-up programming often used in LISP. LISP, like Smalltalk, allows you to extend the language itself. LISP programmers would simply add to the language as they needed new features or mechanisms. The resulting solution grew from the bottom up until it could express cleanly and concisely what the domain problem required.This ties in to the Agile notion of "listening to the code". Code a solution normally and then look at the code for common patterns. Extract those into re-usable classes and components. Repeat. You end up with a framework for building a family of related programs. Most programmers work on related products in a particular area (telephony, graphics, web commerce, whatever), so this framework-building is rarely wasted effort. Bottom-up programming also ties into Dijkstra's notion that programmers produce about the same number of lines of code regardless of the language. So the higher a level at which you can work, the more productive you can be.Speakright shares this philosophy. Make a framework which lets programmers write speech apps at a higher level. And able to extend the framework themselves.Posted byIanRaeat8:52 AM0comments

Tuesday, December 4, 2007

The StringTemplate Template EngineThe StringTemplate template engine is a popular choice for generating markup text in Java. It comes from Terrence Parr, the inventor of ANTLR.SpeakRight uses StringTemplate (ST) for all its VoiceXML generation. When a flow object is rendered, it is first converted into a SpeechPage object. A SpeechPage is not VoiceXML-specific, and allows SpeakRight to output other formats such as SALT, or whatever you want. It's also the glue that ST requires. SpeechPages are rendered using one of the ISpeechPageWriter classes. For testing, an HTML page writer is available. The main page writer though is VoiceXMLPageWriter.VoiceXMLPageWriter into VoiceXML. A StringTemplate file defines the format for prompts, grammars, fields, forms and other VoiceXML tags. This gives a lot of flexibility. If your VoiceXML platform has special requirements, simply modify the speakright.stg template file.Posted byIanRaeat3:46 PM0commentsMatt Raible on web frameworksMatt Raible has a fascinating video comparing web frameworks. Comparisons are tricky since frameworks are changing rapidly, with multiple releases per year. However, he makes an interesting aside about the (lack of) value of visual IDEs. JSF comes with a drag-and-drop IDE that is "appealing to managers", but "if one wants to develop anything substantial, we're going to have to get down and dirty with the code."I've been espousing a code-based approach for speech applications for while. Indeed that's the whole premise of the SpeakRight framework. Any substantial app will use dynamically generated code, and not be pages of handwritten markup text.Things are a bit simpler for speech applications. The following criteria for comparing web frameworks don't applyBookmarkable URLs.Avoiding the double-POST problemAJAXMassive scalability. Web applications may involve millions of users but speech apps are still orders of magnitude smaller.Page decoration. The vast topic of graphical design doesn't exist in a speech app. Persona is as close as one gets to "decoration".Posted byIanRaeat12:42 PM0comments

Monday, December 3, 2007

NBestNBest is a very useful feature for handling similar sounding words. Normally a speech rec engine finds the grammar rule that is the best match for the user's speech utterance. Large grammars can suffer from substitution errors where the wrong rule is matched: caller says "Boston" but the engine selects "Austin". NBest helps the application sort out this type of ambiguity.When enabled, NBest is a request to the speech rec engine to return the top N matches, sorted in order of decreasing confidence level. N is usually a small number, such as 4. Remember that the NBest value is a maximum; fewer results may be returned.In SpeakRight, NBest is enabled using the QuestionFlow method enableNBest.flow.enableNBest(4); //up to 4 resultsWhen the SRResults come back for that question, you can check for NBest results. The SRResults method hasNBest which indicates that more than one result was returned.NBest PruningThe simplest thing an application can do, is check the NBest results in validateInput, and use additional application logic to select the most likely result. This is called NBest pruning. For example, if the user is asked for her account number, each result can be checked against the database. If only one result is a valid account number, the application could assume that's what the caller said.String probableAccountNumber = "";int matches = 0;for (int i = 0; i String value = results.getNBestValue(i);if (CheckAccountNumber(value)) { //check against the databaseprobableAccountNumber = value;matches++;}}if (matches == 1) {results.replaceInput(probableAccountNumber); //let's use it!}NBest ConfirmationA more common use for NBest is to do confirmation. When NBest results are returned, the application confirms each NBest result, stopping as soon as the user says "yes".C: What city?H: BostonC: (returns 'Austin' and 'Boston' as NBest results) Do you want Austin?H: NoC: Do you want Boston?H: YesC: Great. Flying to Boston on what date?...The application may still want to prune the NBest results, re-ordering the results according to the most likely answers. This way the first confirmation question is more likely to be the correct one. This is an important part of NBest -- using additional context information and application logic to improve on the speech rec engine's results.Pass an NBestConfirmerFlow and the question flow object to a ConfirmationWrapper object that will manage the confirmation process. It will ask the user to confirm values until the caller accepts one (by saying "yes" or whatever your confirmation grammar uses for acceptance). If the caller says "no" to all NBest values, then the question is asked again, and the process repeats. You can override NBestConfirmerFlow to adjust this behaviour.Note that NBest confirmation is an extension of basic confirmation. A YesNoConfirmerFlow confirms a single result, while a NBestConfirmerFlow confirms multiple results. ConfirmationWrapper cw = new ConfirmationWrapper(new AskCity(), new NBestConfirmer("yesno.grxml"));Skip ListsA skip list is a list of words that the application will not confirm because the caller has already rejected them. This is an optional feature of NBestConfirmerFlow. Enable it with the enableSkipList method. If the caller says "no" to all NBest values, then the question is asked again. Before beginning confirmation, NBestConfirmerFlow will remove from the new NBest results any values that were rejected during the previous round of confirmation questions. If this results in only a single NBest result, then there is no need for confirmation.C: What city?H: CrosstonC: (returns 'Austin' and 'Boston' as NBest results) Do you want Austin?H: NoC: Do you want Boston?H: NoC: (asking the question again) Let's try again. What city?H: CrosstonC: (returns 'Austin' and 'Crosston' and 'Aulston' as NBest results. Austin is removed.)Do you want Crosston?H: yesC: Got it. Flying to Crosston on what date?...If you don't use a skip list, the application can infuriatingly confirm the same wrong result again and again.NBest With SROsSpeakRight Reusable Objects (SROs) are pre-built flow objects for gathering common data such as numbers, dates, etc.To enable NBest for an SRO, use its enableNBest method. This will use an SROConfirmNBest confirmer object. If you need to use a custom confirmer, call enableNBest followed by setConfirmer to pass in your custom confirmer.SRONumber flow = new SRONumber("tickets", 1, 10);flow.enableNBest(4); //up to 4 resultsPosted byIanRaeat2:00 PM0comments

Friday, November 30, 2007

Version 0.1.4 now availableThe latest release is available here. Transfer and Record are now supported. There are several new flow object classes, including RawContentFlow (roll your own VoiceXML), and GotoUrlFlow (transfer to another VoiceXML application).Content-logging is a new feature that's helpful during development -- vxml content is dumped to text files so you can see what the rendered VoiceXML looks like. Some code refactoring has also been done. Flow object classes are now in the package org.speakright.core.flows.Enjoy.Posted byIanRaeat3:24 PM0comments

Thursday, June 14, 2007

InitializationSpeakRight apps normally run in three different environments: in a JUnit test, in the interactive tester, and most importantly in a servlet. You can avoid problems by creating a single piece of initialization code that is used across all environments. This pace is called the app factory. It should be derived from SRFactory, which performs standard initialization.Your class should override onCreateRunner and onInitRunner to do additional initialization, such as: create and attach a model object register prompt file(s) set the extension point factoryother things. For example, the SimpsonsDemo app records votes in a text file, and its Voting object needs to be initialized with the pathInitialization is done using the createRunner method of SRFactory public SRRunner createRunner(String projectDir, String returnUrl, String baseUrl, ISRServlet servlet);The projectDir is a path to the application's base directory, which usually has sub-directories audio, grammar, and sro.The two URLs are only needed in a servlet environment. returnUrl is the URL that the VoiceXML page should postback to. baseUrl is used to generate URLs for audio and grammars.servlet can be null. It's an extension point that allows the servlet to do extra initialization.Now let's look at each environment in turn.JUnitIn a unit test, the dependencies can be visualized like this, from top to bottom:JUnit test classApp (your callflow)SRRunnerSRFactory or your derived classSRConfigUse your app factory to create a runner AppFactory factory = new AppFactory(); SRRunner run = factory.createRunner();Then run your application using the start and proceed methods of SRRunner.If your app uses properties in the srf.properties file, you need to initialize SRConfig first. JUnit 4 has a per-class initializer called @BeforeClass@BeforeClass static public void redirectStderr() { SRConfig.init("C:\\source\\app2\\", "srf.properties");}Interactive testerThe interactive tester is a console app. It's The dependencies can be visualized like this, from top to bottom:App (your callflow)SRInteractiveTesterSRRunnerSRFactory or your derived classSRConfigSRInteractiveTester inits SRConfig for you. SRInteractiveTester tester = new SRInteractiveTester(); AppFactory factory = new AppFactory(); SRRunner runner = factory.createRunner(appDir, "http://def.com", "", null);App app = new App(); tester.init(app, run);tester.run();ServletIn a servlet, the dependencies can be visualized like this, from top to bottom:ServletApp (your callflow)SRRunnerSRServletRunnerSRFactory or your derived classSRConfigIn a servlet the SRServletRunner class is used. You pass your app factory and it does initialization, including SRConfig. The SRRunner's project directory is set to the directory corresponding to the web apps' "/" url.The code in doGet should be SRServletRunner runner = new SRServletRunner(new AppFactory(), null, request, response, "GET"); if (runner.isNewSession()) { SRRunner run = runner.createNewSRRunner(this); IFlow flow = new App(); runner.startApp(flow); } else { runner.continueApp(); }The code in doPost should be SRServletRunner runner = new SRServletRunner(new AppFactory(), null, request, response, "POST"); if (runner.isNewSession()) { //err!! runner.log("can't get new session in a POST!!"); } else { runner.continueApp(); }SRConfigSRConfig provides access to an srf.properties file. Properties are often used by the constructors of flow objects. Therefore it's important to initialize SRConfig early:SRConfig.init(path, "srf.properties");For console apps or JUnit, a hard-coded path is used. For servlets, this is done for you by SRServletRunner, which uses the directory corresponding to the web app's "/" base url.Currently the SpeakRight framework itself does not use any properties, but applications are free to.Posted byIanRaeat10:20 AM0comments

Thursday, May 24, 2007

List of Flow ObjectsFlow objects are the building blocks of SpeakRight applications. Here is the list of available objects:BranchFlow Performs branching in the callflow based on an application-defined conditionChoiceFlow Branches based on user input, such as in a menuDisconnectFlow Hangs up the callFlowList a sequence of flow objects, optionally ending with an AppEventGotoUrlFlow Redirects to an external URLLoopFlow Iterates over a sequence of sub-flowsNBestConfirmerFlow confirms NBest resultsPromptFlow Plays one or more promptsQuestionFlow Asks the user a question. Has built-in error retries for silence and nomatch.RawContentFlow Ouput raw VoiceXMLRecordAudioFlow record the caller's voice to an audio file.SRApp The root flow objectTransferFlow Transfer the callYesNoConfirmerFlow used to confirm a single resultAdditional flow objects can be created by implementing the IFlow interface.There are also SROs (SpeakRight Reusable Objects) which you can use.Posted byIanRaeat9:49 AM0commentsOlder PostsSubscribe to:Posts (Atom)

Links

Table Of ContentsFeaturesFAQSimpsons DemoTutorialDownloadSourceForgeSilent Software (blog)SourceForge.net LogoContact Us

Blog Archive

▼ 2008(1)▼ February(1)Bottom-up Programming ► 2007(36) ► December(3)The StringTemplate Template EngineMatt Raible on web frameworksNBest ► November(1)Version 0.1.4 now available ► June(1)Initialization ► May(9)List of Flow ObjectsCall ControlOptional Sub-Flow ObjectsSupported PlatformsVoiceXML Tags SupportedVersion 0.0.3 ReleasedAutomated TestingBenefits of a Code-Based ApproachPrompt Ids and Prompt XML Files ► April(2)Simpsons DemoSpeakRight Reusable Objects (SROs) ► March(4)Prompts in SROsRelease 0.0.2 is outTestingServlets ► February(16)Technorati sign-upFirst Release!Control Flow, Errors, and Event HandlingInternal ArchitectureTable of ContentsGrammarsPromptsWhat is SpeakRight?TutorialTutorial 2 - Adding a MenuTutorial 1 - Creating an Hello appGetting StartedFrequently Asked QuestionsWhat is SpeakRight?FeaturesPre-launch stuff _WidgetManager._Init('http://www.blogger.com/rearrange?blogID=350232640321685673', 'http://speakrightframework.blogspot.com/','350232640321685673');_WidgetManager._SetPageActionUrl('http://www.blogger.com/display?blogID=350232640321685673', 'CJar4nQo33-Awz-GWq55ciDVuoo:1223458052562');_WidgetManager._SetDataContext([{'name': 'blog', 'data': {'title': 'The SpeakRight Framework', 'pageType': 'index', 'url': 'http://speakrightframework.blogspot.com/', 'homepageUrl': 'http://speakrightframework.blogspot.com/', 'pageName': '', 'pageTitle': 'The SpeakRight Framework', 'encoding': 'UTF-8', 'isPrivate': false, 'languageDirection': 'ltr', 'feedLinks': '\74link rel\75\42alternate\42 type\75\42application/atom+xml\42 title\75\42The SpeakRight Framework - Atom\42 href\75\42http://speakrightframework.blogspot.com/feeds/posts/default\42 /\76\n\74link rel\75\42alternate\42 type\75\42application/rss+xml\42 title\75\42The SpeakRight Framework - RSS\42 href\75\42http://speakrightframework.blogspot.com/feeds/posts/default?alt\75rss\42 /\76\n\74link rel\75\42service.post\42 type\75\42application/atom+xml\42 title\75\42The SpeakRight Framework - Atom\42 href\75\42http://www.blogger.com/feeds/350232640321685673/posts/default\42 /\76\n\74link rel\75\42EditURI\42 type\75\42application/rsd+xml\42 title\75\42RSD\42 href\75\42http://www.blogger.com/rsd.g?blogID\075350232640321685673\42 /\076', 'meTag': '\74link rel\75\42me\42 href\75\42http://www.blogger.com/profile/16160687602135118496\42 /\76\n', 'openIdOpTag': '\74link rel\75\42openid.server\42 href\75\42http://www.blogger.com/openid-server.g\42 /\76\n', 'latencyHeadScript': ''}}]);_WidgetManager._SetSystemMarkup({'layout': {'varName': '', 'template': '\74div class\75\47widget-wrap1\47\76\n\74div class\75\47widget-wrap2\47\76\n\74div class\75\47widget-wrap3\47\76\n\74div class\75\47widget-content\47\76\n\74div class\75\47layout-title\47\76\74data:layout-title\76\74/data:layout-title\76\74/div\76\n\74a class\75\47editlink\47 expr:href\75\47data:widget.quickEditUrl\47 expr:onclick\75\47\46quot;return _WidgetManager._PopupConfig(document.getElementById(\\\46quot;\46quot; + data:widget.instanceId + \46quot;\\\46quot;));\46quot;\47 target\75\47chooseWidget\47\76\74data:edit-link\76\74/data:edit-link\76\74/a\76\n\74/div\76\n\74/div\76\n\74/div\76\n\74/div\076'}, 'quickedit': {'varName': '', 'template': '\74div class\75\47clear\47\76\74/div\76\n\74span class\75\47widget-item-control\47\76\n\74span class\75\47item-control blog-admin\47\76\n\74a class\75\47quickedit\47 expr:href\75\47data:widget.quickEditUrl\47 expr:onclick\75\47\46quot;return _WidgetManager._PopupConfig(document.getElementById(\\\46quot;\46quot; + data:widget.instanceId + \46quot;\\\46quot;));\46quot;\47 expr:target\75\47\46quot;config\46quot; + data:widget.instanceId\47 expr:title\75\47data:edit-link\47\76\n\74img alt\75\47\47 height\75\04718\47 src\75\47http://img1.blogblog.com/img/icon18_wrench_allbkg.png\47 width\75\04718\47/\76\n\74/a\76\n\74/span\76\n\74/span\76\n\74div class\75\47clear\47\76\74/div\076'}, 'all-head-content': {'varName': 'page', 'template': '\74data:blog.latencyHeadScript\76\74/data:blog.latencyHeadScript\76\n\74meta expr:content\75\47\46quot;text/html; charset\75\46quot; + data:page.encoding\47 http-equiv\75\47Content-Type\47/\76\n\74meta content\75\47true\47 name\75\47MSSmartTagsPreventParsing\47/\76\n\74meta content\75\47blogger\47 name\75\47generator\47/\76\n\74data:blog.feedLinks\76\74/data:blog.feedLinks\76\n\74data:blog.meTag\76\74/data:blog.meTag\76\n\74data:blog.openIdOpTag\76\74/data:blog.openIdOpTag\76\n\74b:if cond\75\47data:page.isPrivate\47\76\n\74meta content\75\47NOINDEX,NOFOLLOW\47 name\75\47robots\47/\76\n\74/b:if\076'}});_WidgetManager._RegisterWidget('_ImageView', new _WidgetInfo('Image1', 'sidebar',{'main': {'varName': '', 'template': '\74b:if cond\75\47data:title !\75 \46quot;\46quot;\47\76\n\74h2\76\74data:title\76\74/data:title\76\74/h2\76\n\74/b:if\76\n\74div class\75\47widget-content\47\76\n\74b:if cond\75\47data:link !\75 \46quot;\46quot;\47\76\n\74a expr:href\75\47data:link\47\76\n\74img expr:alt\75\47data:title\47 expr:height\75\47data:height\47 expr:id\75\47data:widget.instanceId + \46quot;_img\46quot;\47 expr:src\75\47data:sourceUrl\47 expr:width\75\47data:width\47/\76\n\74/a\76\n\74b:else\76\74/b:else\76\n\74img expr:alt\75\47data:title\47 expr:height\75\47data:height\47 expr:id\75\47data:widget.instanceId + \46quot;_img\46quot;\47 expr:src\75\47data:sourceUrl\47 expr:width\75\47data:width\47/\76\n\74/b:if\76\n\74br/\76\n\74b:if cond\75\47data:caption !\75 \46quot;\46quot;\47\76\n\74span class\75\47caption\47\76\74data:caption\76\74/data:caption\76\74/span\76\n\74/b:if\76\n\74/div\76\n\74b:include name\75\47quickedit\47\76\74/b:include\076'}}, document.getElementById('Image1'), {'resize': true}, 'displayModeFull'));_WidgetManager._RegisterWidget('_LinkListView', new _WidgetInfo('LinkList1', 'sidebar',{'main': {'varName': '', 'template': '\74b:if cond\75\47data:title\47\76\74h2\76\74data:title\76\74/data:title\76\74/h2\76\74/b:if\76\n\74div class\75\47widget-content\47\76\n\74ul\76\n\74b:loop values\75\47data:links\47 var\75\47link\47\76\n\74li\76\74a expr:href\75\47data:link.target\47\76\74data:link.name\76\74/data:link.name\76\74/a\76\74/li\76\n\74/b:loop\76\n\74/ul\76\n\74b:include name\75\47quickedit\47\76\74/b:include\76\n\74/div\076'}}, document.getElementById('LinkList1'), {}, 'displayModeFull'));_WidgetManager._RegisterWidget('_TextView', new _WidgetInfo('Text2', 'sidebar',{'main': {'varName': '', 'template': '\74b:if cond\75\47data:title !\75 \46quot;\46quot;\47\76\n\74h2 class\75\47title\47\76\74data:title\76\74/data:title\76\74/h2\76\n\74/b:if\76\n\74div class\75\47widget-content\47\76\n\74data:content\76\74/data:content\76\n\74/div\76\n\74b:include name\75\47quickedit\47\76\74/b:include\076'}}, document.getElementById('Text2'), {}, 'displayModeFull'));_WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar',{'main': {'varName': '', 'template': '\74b:if cond\75\47data:title\47\76\n\74h2\76\74data:title\76\74/data:title\76\74/h2\76\n\74/b:if\76\n\74div class\75\47widget-content\47\76\n\74div id\75\47ArchiveList\47\76\n\74div expr:id\75\47data:widget.instanceId + \46quot;_ArchiveList\46quot;\47\76\n\74b:if cond\75\47data:style \75\75 \46quot;HIERARCHY\46quot;\47\76\n\74b:include data\75\47data\47 name\75\47interval\47\76\74/b:include\76\n\74/b:if\76\n\74b:if cond\75\47data:style \75\75 \46quot;FLAT\46quot;\47\76\n\74b:include data\75\47data\47 name\75\47flat\47\76\74/b:include\76\n\74/b:if\76\n\74b:if cond\75\47data:style \75\75 \46quot;MENU\46quot;\47\76\n\74b:include data\75\47data\47 name\75\47menu\47\76\74/b:include\76\n\74/b:if\76\n\74/div\76\n\74/div\76\n\74b:include name\75\47quickedit\47\76\74/b:include\76\n\74/div\076'}, 'flat': {'varName': 'data', 'template': '\74ul\76\n\74b:loop values\75\47data:data\47 var\75\47i\47\76\n\74li class\75\47archivedate\47\76\n\74a expr:href\75\47data:i.url\47\76\74data:i.name\76\74/data:i.name\76\74/a\76 (\74data:i.post-count\76\74/data:i.post-count\76)\n \74/li\76\n\74/b:loop\76\n\74/ul\076'}, 'menu': {'varName': 'data', 'template': '\74select expr:id\75\47data:widget.instanceId + \46quot;_ArchiveMenu\46quot;\47\76\n\74option value\75\47\47\76\74data:title\76\74/data:title\76\74/option\76\n\74b:loop values\75\47data:data\47 var\75\47i\47\76\n\74option expr:value\75\47data:i.url\47\76\74data:i.name\76\74/data:i.name\76 (\74data:i.post-count\76\74/data:i.post-count\76)\74/option\76\n\74/b:loop\76\n\74/select\076'}, 'interval': {'varName': 'intervalData', 'template': '\74b:loop values\75\47data:intervalData\47 var\75\47i\47\76\n\74ul\76\n\74li expr:class\75\47\46quot;archivedate \46quot; + data:i.expclass\47\76\n\74b:include data\75\47i\47 name\75\47toggle\47\76\74/b:include\76\n\74a class\75\47post-count-link\47 expr:href\75\47data:i.url\47\76\74data:i.name\76\74/data:i.name\76\74/a\76\n\74span class\75\47post-count\47 dir\75\47ltr\47\76(\74data:i.post-count\76\74/data:i.post-count\76)\74/span\76\n\74b:if cond\75\47data:i.data\47\76\n\74b:include data\75\47i.data\47 name\75\47interval\47\76\74/b:include\76\n\74/b:if\76\n\74b:if cond\75\47data:i.posts\47\76\n\74b:include data\75\47i.posts\47 name\75\47posts\47\76\74/b:include\76\n\74/b:if\76\n\74/li\76\n\74/ul\76\n\74/b:loop\076'}, 'toggle': {'varName': 'interval', 'template': '\74b:if cond\75\47data:interval.toggleId\47\76\n\74b:if cond\75\47data:interval.expclass \75\75 \46quot;expanded\46quot;\47\76\n\74a class\75\47toggle\47 expr:href\75\47data:widget.actionUrl + \46quot;\46amp;action\75toggle\46quot; + \46quot;\46amp;dir\75close\46amp;toggle\75\46quot; + data:interval.toggleId + \46quot;\46amp;toggleopen\75\46quot; + data:toggleopen\47\76\n\74span class\75\47zippy toggle-open\47\76\46#9660; \74/span\76\n\74/a\76\n\74b:else\76\74/b:else\76\n\74a class\75\47toggle\47 expr:href\75\47data:widget.actionUrl + \46quot;\46amp;action\75toggle\46quot; + \46quot;\46amp;dir\75open\46amp;toggle\75\46quot; + data:interval.toggleId + \46quot;\46amp;toggleopen\75\46quot; + data:toggleopen\47\76\n\74span class\75\47zippy\47\76\n\74b:if cond\75\47data:blog.languageDirection \75\75 \46quot;rtl\46quot;\47\76\n \46#9668;\n \74b:else\76\74/b:else\76\n \46#9658;\n \74/b:if\76\n\74/span\76\n\74/a\76\n\74/b:if\76\n\74/b:if\076'}, 'posts': {'varName': 'posts', 'template': '\74ul class\75\47posts\47\76\n\74b:loop values\75\47data:posts\47 var\75\47i\47\76\n\74li\76\74a expr:href\75\47data:i.url\47\76\74data:i.title\76\74/data:i.title\76\74/a\76\74/li\76\n\74/b:loop\76\n\74/ul\076'}}, document.getElementById('BlogArchive1'), {'languageDirection': 'ltr'}, 'displayModeFull'));_WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header'));_WidgetManager._RegisterWidget('_NavbarView', new _WidgetInfo('Navbar1', 'navbar'));_WidgetManager._RegisterWidget('_TextView', new _WidgetInfo('Text1', 'main',{'main': {'varName': '', 'template': '\74b:if cond\75\47data:title !\75 \46quot;\46quot;\47\76\n\74h2 class\75\47title\47\76\74data:title\76\74/data:title\76\74/h2\76\n\74/b:if\76\n\74div class\75\47widget-content\47\76\n\74data:content\76\74/data:content\76\n\74/div\76\n\74b:include name\75\47quickedit\47\76\74/b:include\076'}}, document.getElementById('Text1'), {}, 'displayModeFull'));_WidgetManager._RegisterWidget('_BloggerButtonView', new _WidgetInfo('BloggerButton1', 'main',{'main': {'varName': '', 'template': '\74div class\75\47widget-content\47\76\n\74a href\75\47http://www.blogger.com\47\76\74img alt\75\47Powered By Blogger\47 expr:src\75\47data:fullButton\47/\76\74/a\76\n\74b:include name\75\47quickedit\47\76\74/b:include\76\n\74/div\076'}}, document.getElementById('BloggerButton1'), {}, 'displayModeFull'));_WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main'));
 

Open

source

framework

for

writing

VoiceXML

applications

in

Java.

http://speakrightframework.blogspot.com/

Speakright Framework 2008 October

dvd rental

dvd


Open source framework for writing VoiceXML applications in Java.

Rules




© 2008 Internet Explorer 5+ or Netscape 6+

Recommended Sites: 1. Arts - Business - Computers - Games - Health - Home - Kids and Teens - News - Recreation - Reference - Regional - Science - Shopping - Society - Sports - World Miss Gallery - Top Anime Hentai - DVD rental by mail - Rapidshare eBooks Download - Personal Loans - Mortgages - Credit Card - Online Loans
2008-10-08 05:24:07

Copyright 2005, 2006 by Webmaster
Websites is cool :) 271Hotel Glasgow - Hotell Galway - Wesele - Hotell Klagenfurt - Geoma.pl