<?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://www.eclipse.org/newsportal/thread.php?group=eclipse.rt.smila">
			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://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://www.eclipse.org/newsportal/thread.php?group=eclipse.rt.smila">
					Newsgroup web user interface</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://)</a>
                </li>
			</ul>
		</div>
	</div>
	  
EOHTML;

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

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