<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
	$pageTitle 		= "SMILA - Newsgroup";
	$pageKeywords	= "SMILA, Unified Information Access Architecture, unstructured information management, information logistics, semantic web, framework, platform, eclipse, big data, bigdata";
	$pageAuthor		= "Igor Novakovic";
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

	<div id="midcolumn">
		<h1>Newsgroup</h1>
		<p>
		    <b>The SMILA newsgroup is the main forum for user questions and support.</b>
		</p>
		<p>
			Chances are your question has already been answered in the newsgroup. Therefore, before posting a 
			question to the newsgroup, please <a href="http://dev.eclipse.org/newslists/news.eclipse.rt.smila/maillist.html">
			browse</a> or <a href="http://www.eclipse.org/search/search.cgi?cmd=Search%21&form=extended&wf=574a74&ps=10&m=all&t=5&ul=%2Fnewslists%2Fnews.eclipse.rt.smila&wm=wrd&t=News&t=Mail">  
			search</a> the newsgroup archives online. To post a question, you have to <a href="http://www.eclipse.org/newsgroups/register.php">
			require a password</a> first.
		</p>
		<p>
			Frequently asked questions in the newsgroup will ultimately end up in the 
			<a href="http://wiki.eclipse.org/SMILA/FAQ">FAQ</a>. Feel free to contribute!
		</p>
		<p>
			Although eclipse.org offers a <a href="http://dev.eclipse.org/newslists/news.eclipse.rt.smila/maillist.html">
			web user interface for news</a>, we suggest you to use a newsreader, such as e.g.
			<a href="http://www.mozilla.org/products/thunderbird/" target="_out">Mozilla Thunderbird</a>. 
		</p>

		<div class="homeitem3col">
			<h3>Newsgroup links</h3>
			<ul>               	
               	<li>
					<a href="http://dev.eclipse.org/newslists/news.eclipse.rt.smila/maillist.html">
					Newsgroup web user interface</a>  
               	</li>
               	<li>
					<a href="http://www.eclipse.org/search/search.cgi?cmd=Search%21&form=extended&wf=574a74&ps=10&m=all&t=5&ul=%2Fnewslists%2Fnews.eclipse.rt.smila&wm=wrd&t=News&t=Mail">
					Newsgroup search</a>
               	</li>
               	<li>
					<a href="http://dev.eclipse.org/newslists/news.eclipse.rt.smila/maillist.html">
					Newsgroup archive</a>
               	</li>
               	<li>
					<a href="http://dev.eclipse.org/newslists/news.eclipse.technology.eilf/maillist.html">
					Newsgroup OLD archive</a> (Old news during the proposal phase.)
               	</li>
               	<li>
					<a href="news://news.eclipse.org/eclipse.rt.smila">
					NNTP (news://news.eclipse.org/eclipse.rt.smila)</a>
                </li>
			</ul>
		</div>
	</div>
	  
EOHTML;

	include('rightColumn.php');
	$html .= $rightColumn;

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
