<!-- id is the same as the file name without the extension
     type is one of "committer" or "add-in-provider" -->
<boardmember id="resheim" type="add-in-provider">

	<name>Torkild Ulvøy Resheim</name>

	<title>Senior Software Engineer and Co-owner, Itema AS</title>

	<!-- Name of the file containing the image of the candidate; location relative to this file.  -->
	<image>resheim.jpg</image>

	<!-- eMail address will be modified before it is included on a webpage so that robots will not harvest it. -->
	<email>torkildr@gmail.com</email>

	
	<!-- What do you do with eclipse? -->
	<eclipse_affiliation>
		<![CDATA[
<p>
	Since I got involved in the Eclipse Community I've had several roles. Most of the time as a committer, but also as a member of the Eclipse S
	cience Working Group; member of the Board of the Directors for the past four years; and the EclipseCon Europe Program Committee. I was the EclipseCon 
	Europe Program Committee Chair for the 2018 and 2019 conferences.
</p>

<p>
	Details can be found at the Eclipse <a href="https://accounts.eclipse.org/users/tresheim">profile page</a>
</p>
		]]>
	</eclipse_affiliation>

	<!-- Feel free to include html tags and what-not between the CDATA tags. -->
	<vision>
		<![CDATA[
<p>
		Since I first joined the board four years ago, the foundation has undergone many important changes. Among 
		them being able to handle specification projects such as those from Jakarta EE and AsciiDoc, establishing a new 
		GitLab based software forge in Switzerland, to moving the organisation to Europe and Brussels. It has been an exiting period.
</p>

<p>
		If reelected as a contributing member representative I would like to:
</p>

<p>
<p>
<b>Continue to support efforts to establish the Eclipse Foundation as the premier open source foundation</b> – based in Europe, and with a global reach. 
</p>

		<b>Advance the use of Eclipse technologies</b>, particularly in scientific and industrial applications, where a diverse 
		collection of our APIs is already suitably used.
</p>

<p>
		<b>Improve the Eclipse Platform</b> — which is such an important part of all the various IDEs built on top. Not forgetting about
		 RCP, which many companies are basing their products on.
</p>

<p>
	<b>Encourage and support new projects</b>. Moving to Europe and changing the bylaws in favor of a neutral legislation enables new opportunities.
</p>

<p>
		<b>Take care of committers and community.</b> It should be easy and fun to work with Foundation tools and 
		infrastructure. Providing excellent service and lowering the bar will also encourage outside contributions. 
		Developing the community also means being open and inclusive towards all; regardless of religion, colour, culture or 
		gender. This is something I would like the Eclipse Community to become famously known for.

</p>
		]]>
	</vision>

	<!-- Tell us a little bit about yourself. -->
	<bio>
		<![CDATA[
<p>
		I have a background from electronics, but started at the Trondheim College of Engineering (now NTNU) in 1994 to study 
		software engineering. I have built on the Eclipse Platform since 2004, and have as a contractor and consultant helped 
		companies use various Eclipse technologies for more than a decade. Most of this time I have spent developing industrial 
		solutions for the semiconductor, maritime and offshore energy sectors.
</p>
<p>
		I work for and are a co-owner of Itema, a small software consultancy with 32 highly skilled and dedicated people, all 
		also co-owners. We do everything from prize winning web sites to marine operations simulation tools and games for iOS and 
		Android. We are based in Trondheim, Norway — a university city with around 33,000 students, about half of those with a STEM 
		curriculum. Much of the work we do is for technology companies that are spin-offs from the university and SINTEF, the largest 
		independent research organisation in Scandinavia.
 
</p>
<p>
		I founded the <a href="https://www.meetup.com/Trondheim-Eclipse-User-Group/">Trondheim Eclipse User Group</a> in 2013 and 
		have with Itema hosted an Eclipse DemoCamp for a few years before that.
</p>
<p>
		I can be reached on Twitter using the <a href="https://twitter.com/torkildr">@torkildr</a> handle.
</p>
		]]>
	</bio>

	<!-- Who do you work for? -->
	<affiliation>
		<![CDATA[
<a href="https://www.itema.no/?lang=en">Itema AS</a>
		]]>
	</affiliation>

</boardmember>
