<?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/"
	>

<channel>
	<title>Thomas René Sidor</title>
	<atom:link href="http://www.thomassidor.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thomassidor.com</link>
	<description>Just another WordPress weblog</description>
	<pubDate>Wed, 11 Mar 2009 14:19:41 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Concentration in Business Oriented Tasks Working with IT</title>
		<link>http://www.thomassidor.com/cs-papers/concentration-in-business-oriented-tasks-working-with-it/</link>
		<comments>http://www.thomassidor.com/cs-papers/concentration-in-business-oriented-tasks-working-with-it/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 19:16:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Computer science papers]]></category>

		<guid isPermaLink="false">http://www.thomassidor.com/?p=93</guid>
		<description><![CDATA[I denne rapport præsenteres resultaterne af et kvalitativt studie om koncentration ved forretningsorienterede opgaver med IT. Koncentration er evnen til at fokusere eller rette opmærksomhed mod ét punkt med udelukkelse af uvedkommende punkter. Målet med undersøgelsen er at afdække hvilke faktorer der indvirker på koncentration, hvilke sammenhænge der er imellem disse faktorer samt at danne teori ud fra disse observationer. Undersøgelsen tager udgangspunkt i grounded theory som præsenteret i Bacis of Qualitative Research af Anselm Strauss og Juliet Corbin. Målet er altså at danne teori fremfor at validere eksisterende hypoteser. Teoriudviklingen er baseret på otte semistrukturerede enkeltpersoninterviews af en halv til en hel times varighed. Informanterne består af tre kvinder og fem mænd i aldrene 24 - 43 år med forskellig grad af uddannelse.]]></description>
			<content:encoded><![CDATA[<p><strong>This report is in Danish.</strong></p>
<p>I denne rapport præsenteres resultaterne af et kvalitativt studie om koncentration ved forretningsorienterede opgaver med IT. Koncentration er evnen til at fokusere eller rette opmærksomhed mod ét punkt med udelukkelse af uvedkommende punkter.</p>
<p>Målet med undersøgelsen er at afdække hvilke faktorer der indvirker på koncentration, hvilke sammenhænge der er imellem disse faktorer samt at danne teori ud fra disse observationer.</p>
<p>Undersøgelsen tager udgangspunkt i grounded theory som præsenteret i<em> Bacis of Qualitative Research</em> af Anselm Strauss og Juliet Corbin. Målet er altså at danne teori fremfor at validere eksisterende hypoteser. Teoriudviklingen er baseret på otte semistrukturerede enkeltpersoninterviews af en halv til en hel times varighed. Informanterne består af tre kvinder og fem mænd i aldrene 24 - 43 år med forskellig grad af uddannelse.</p>
<p>Resultaterne viser en klar forskel på koncentrationsopgaver imod almindelige opgaver. Der er evidens for at koncentrationsopgaver er relativt mere kognitivt krævende eller har højere kvalitetskrav i forhold til almindelige opgaver. Desuden præsenteres en lang række faktorer som har både negativ og positiv indflydelse på muligheden for at kunne koncentrere sig om en given opgave. Disse faktorer kan opdeles i to kategorier - praktiske forhold og omstændigheder. De praktiske forhold vedrører de håndgribelige ting omkring opgaveløsning; dette er faktorer som miljø, situation og programmel. Omstændighederne er de faktorer som danner rammerne for opgaveløsning generelt - dette er faktorer som opgaveløserens personlighed, arbejdsrolle, selve opgaven samt hvilke foranstatltninger der tages i brug for at reducere negativ indvirkning fra de praktiske forhold.</p>
<p>Herudover viser resultaterne to interessante egenskaber ved personers forhold til koncentrationsopgaver. Opgaveløserne er i høj grad begrænset af evnen og viljen til at være koncentreret over længere tid - informanterne benytter sig af bevidste strategier som at opdele opgaver i brudstykker, og en ubevidst trang til overspringshandlinger.</p>
<p>De gjorte observationer omkring faktorerne og deres sammenhænge benyttes afslutningsvis til at udarbejde et bud på en samlet model for koncentration i forretningsorienterede opgaver med IT.</p>
<p>I alle disse ovenstående resultater spiller IT en stor rolle. Det argumenteres at IT og især computere danner et rammeværk for opgaveløsning generelt; computere er altså ikke et tilvalg, men et krav for opgaveløsning i vores samfund. Det er altså vigtigt at være bevidst om denne rolle for at kunne reducere den overvejende negative indvirkning som teknologien har, på muligheden for at vi kan fordybe os i udfordrende opgaver.</p>
<p><a href="/files/Concentration-report.pdf">Download the comlete paper</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomassidor.com/cs-papers/concentration-in-business-oriented-tasks-working-with-it/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Interaction Design and Information Visualization for Wall-Size Displays with User Tracking</title>
		<link>http://www.thomassidor.com/cs-papers/interaction-design-and-information-visualization-for-wall-size-displays-with-user-tracking/</link>
		<comments>http://www.thomassidor.com/cs-papers/interaction-design-and-information-visualization-for-wall-size-displays-with-user-tracking/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 19:14:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Computer science papers]]></category>

		<guid isPermaLink="false">http://www.thomassidor.com/?p=91</guid>
		<description><![CDATA[The use of wall-size displays are becoming increasingly popular due to declining prices and high availability. However, many questions about how to effectively interact with and utilize wall-size displays still exist. Based on insight from the literature I have developed a novel interaction technique and tailored information visualization for wall-size displays. The technique utilizes users' embodied resources such as opportunity of physical navigation and increased peripheral vision. The user is tracked relative to the display and her position and movement are used as primary method of interaction. Results of a empirical study comparing two approaches to physical navigation with a gyroscopic mouse show no significant difference between the approaches in terms of efficiency, accuracy or satisfaction. Analysis suggest that technical issues with the implementation hindered the two user tracking approaches from exploiting their full potential.]]></description>
			<content:encoded><![CDATA[<p><!--[endif]--></p>
<p class="MsoPlainText">This is my masters thesis completed in january 2009.</p>
<h2 class="MsoPlainText">Abstract</h2>
<p class="MsoPlainText">The use of wall-size displays are becoming increasingly popular due to declining prices and high availability. However, many questions about how to effectively interact with and utilize wall-size displays still exist. Based on insight from the literature I have developed a novel interaction technique and tailored information visualization for wall-size displays. The technique utilizes users&#8217; embodied resources such as opportunity of physical navigation and increased peripheral vision. The user is tracked relative to the display and her position and movement are used as primary method of interaction. Results of a empirical study comparing two approaches to physical navigation with a gyroscopic mouse show no significant difference between the approaches in terms of efficiency, accuracy or satisfaction. Analysis suggest that technical issues with the implementation hindered the two user tracking approaches from exploiting their full potential.</p>
<p class="MsoPlainText">
<p class="MsoPlainText"><a href="/files/NasterThesis.pdf">Download the complete thesis with high quality photos, 33.2 mb</a></p>
<p class="MsoPlainText"><a href="/files/MasterThesisLQ.pdf">Donload the complete thesis with low quality photos, 1.9 mb</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomassidor.com/cs-papers/interaction-design-and-information-visualization-for-wall-size-displays-with-user-tracking/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Semantic Zooming on Data Tables</title>
		<link>http://www.thomassidor.com/cs-papers/semantic-zooming-on-data-tables/</link>
		<comments>http://www.thomassidor.com/cs-papers/semantic-zooming-on-data-tables/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 09:07:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Computer science papers]]></category>

		<guid isPermaLink="false">http://thomassidor.com/?p=49</guid>
		<description><![CDATA[This paper (in danish) presents a semantic zooming approach to visualization of data tables - specifically on time series data. The semantic approach uses a technique of collapsing cells, columns and rows to reduce the amount of information visible at one time. Collapsed cells show the underlying data in different formats such as average, average yearly growth rate, etc.]]></description>
			<content:encoded><![CDATA[<blockquote><p>In a multiscale interface like PAD++, normal, geometric zooming simply changes the size of objects in the view. In semantic zooming, objects change appearance or shape as they change size. For example, a growing dot will become a simple box, then a box with a one-word label, then a box with a longer label, then a rectangle filled with text and pictures. The goal is to give the most meaningful presentation at each size.</p></blockquote>
<p>This paper (in danish) presents a semantic zooming approach to visualization of data tables - specifically on time series data. The semantic approach uses a technique of collapsing cells, columns and rows to reduce the amount of information visible at one time. Collapsed cells show the underlying data in different formats such as average, average yearly growth rate, etc.</p>
<p>An user study with seven participants has been carried out as to evaluate relative performance of a semantic zooming approach as opposed to a regular geometric zoomable interface.</p>
<p>Below is the report (in danish) and source code for the semantic zoomable prototype application. The prototype application uses <a href="http://www.cs.umd.edu/hcil/jazz/">Piccolo .NET</a>.</p>
<p><a href="/files/2006.05.18%20-%20Bachelor.pdf">Download the full paper in Danish (PDF)</a></p>
<p><a href="/files/SemanticZoomSheet-Src.zip">Download the source code for the SemanticZoomSheet prototype application</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomassidor.com/cs-papers/semantic-zooming-on-data-tables/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fisheye Visualization of Source Code</title>
		<link>http://www.thomassidor.com/cs-papers/fisheye-visualization-of-source-code/</link>
		<comments>http://www.thomassidor.com/cs-papers/fisheye-visualization-of-source-code/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 09:05:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Computer science papers]]></category>

		<guid isPermaLink="false">http://thomassidor.com/?p=47</guid>
		<description><![CDATA[This paper describes a novel approach to fisheye visualization of source code. We redefine how elements for emphasization are chosen by using a dynamically defined degree of interest function. We propose a dynamic degree of interest approach, D-DOI, derived from user interaction history.]]></description>
			<content:encoded><![CDATA[<blockquote><p>Fisheye views is a visualization technique in which information in focus is clear and of normal size, while information surrounding it is progressively miniaturized and distorted, thus allowing presentation of more context within a limited screen size.</p></blockquote>
<p>This paper describes a novel approach to fisheye visualization of source code. We redefine how elements for emphasization are chosen by using a dynamically defined degree of interest function. We propose a dynamic degree of interest approach, D-DOI, derived from user interaction history.</p>
<p>This report accounts for the development of this D-DOI approach by discussion of alternative approaches, design choices and the construct of dynamic and working sets. An empirical user study with eight participants has been carried out as to evaluate the relative performance of a static approach, S-DOI, and the proposed D-DOI approach.</p>
<p>A video presentation of the implemented interface in action are available in various formats from <a href="/CodeFish">http://www.thomassidor.com/CodeFish</a></p>
<p><a href="/files/2007.08%20-%20Fisheye%20visualization%20of%20source%20code.pdf">Download the full report in English</a></p>
<p><a href="/files/CodeFish-src.zip">Download the source code for the CodeFish prototype application</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomassidor.com/cs-papers/fisheye-visualization-of-source-code/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SDL Sand</title>
		<link>http://www.thomassidor.com/software/sdl-sand/</link>
		<comments>http://www.thomassidor.com/software/sdl-sand/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 09:04:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Developed software]]></category>

		<guid isPermaLink="false">http://thomassidor.com/?p=45</guid>
		<description><![CDATA[SDL Sand is a simulation of falling sand and other materials heavily written in C++ and based on the original JAVA implementation - World Of Sand. ]]></description>
			<content:encoded><![CDATA[<p><span class="caps">SDL</span> Sand is a simulation of falling sand and other materials written in C++ and based on the original <span class="caps">JAVA </span>implementation - World Of Sand.</p>
<p>Download at: <a href="http://sourceforge.net/projects/sdlsand/">http://sourceforge.net/projects/sdlsand/</a></p>
<p>The project has been ported to a multitude of platforms - <a href="http://www.google.com/search?hl=en&amp;q=sdlsand&amp;btnG=Google+Search">just search google.</a></p>
<p><img src="http://thomassidor.com/files/images/sldsand.jpg" alt="" width="605" height="480" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomassidor.com/software/sdl-sand/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Graphing Module</title>
		<link>http://www.thomassidor.com/software/graphing-module/</link>
		<comments>http://www.thomassidor.com/software/graphing-module/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 09:04:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Developed software]]></category>

		<guid isPermaLink="false">http://thomassidor.com/?p=43</guid>
		<description><![CDATA[This component is a graphing component for Windows applications. It is written in C# using the Microsoft .NET 1.1 Framework. The component features various settings such as grid adjustment, background color, automatic y-axis adjustment, real time tracing of graphs with mouse (including special events) and of course an arbitrarily number of simultaneous graphs.]]></description>
			<content:encoded><![CDATA[<p>This component is a graphing component for Windows applications. It is written in C# using the Microsoft .NET 1.1 Framework. The component features various settings such as grid adjustment, background color, automatic y-axis adjustment, real time tracing of graphs with mouse (including special events) and of course an arbitrarily number of simultaneous graphs.</p>
<p>This is one of my first shots at writing a extensive form control and the source code may therefore be subject to rich optimization possibilities. The component is open source and can be used free of cost for non commercial projects. Credits to the real author, me, will be much appreciated.</p>
<p><a href="/files/TradeOff-bin.zip">Download the TradeOff demo application</a></p>
<p><a href="/files/TradeOff-src.zip">Download the source code for TradeOff and the graphing module</a></p>
<h2>How to use the component</h2>
<p>The graphing component consists of two parts - the main graphing area control, implemented in the Graph class in Graph.cs and the data channels (actually the graphs to be shown) implemented in the DataChannel class in DataChannel.cs. The sample application TradeOff is a little game made to demonstrate the use of the graphing component.</p>
<p align="center"><span class="inline center" style="width: 250px;"><img class="image _original" title="TradeOff" src="http://thomassidor.com/files/images/TradeOff09.jpg" alt="TradeOff" width="250" height="228" /><span class="caption" style="width: 248px;"><strong></strong></span></span></p>
<p>The use of the component is straight forward. First of all, insert the control in your form. Hereafter you can use the Graph class&#8217; methods for creating data channels and inserting values and events. Take a look at Game.cs for inspiration.</p>
<h2>Methods and fields</h2>
<h3>DataChannel class</h3>
<table border="0" cellspacing="5" cellpadding="0" width="90%">
<tbody>
<tr bgcolor="#e2e2e2">
<th scope="col"> Field</th>
<th scope="col"> Description</th>
</tr>
<tr align="left" valign="top">
<td>bool Display</td>
<td>Sets visibility of graph. true = show graph, false = hide graph</td>
</tr>
<tr align="left" valign="top" bgcolor="#e2e2e2">
<td>System.Drawing.Color Color</td>
<td>The color of the graph</td>
</tr>
<tr align="left" valign="top">
<td>string Name</td>
<td>Name of graph</td>
</tr>
<tr align="left" valign="top" bgcolor="#e2e2e2">
<td>bool DisplayEvents</td>
<td>Sets visibility of special events (dots) for graphs. true = show events, false = hide events.</td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="5" cellpadding="0" width="90%">
<tbody>
<tr bgcolor="#e2e2e2">
<th scope="col"> Method</th>
<th scope="col"> Description</th>
</tr>
<tr align="left" valign="top">
<td>DataChannel(System.Drawing.Color)</td>
<td>Constructor. Creates a DataChannel with a specific color. Name set to empty string, graph visible and events visible.</td>
</tr>
<tr align="left" valign="top" bgcolor="#e2e2e2">
<td>DataChannel(System.DrawingColor, string)</td>
<td>Constructor. Creates a DataChannel with a given color and name. Graph and events set to visible.</td>
</tr>
</tbody>
</table>
<h3>Graph class</h3>
<table border="0" cellspacing="5" cellpadding="0" width="90%">
<tbody>
<tr bgcolor="#e2e2e2">
<th scope="col"> Field</th>
<th scope="col"> Description</th>
</tr>
<tr align="left" valign="top">
<td>int TimeSpan</td>
<td>Span of x-axis. The graphs only saves TimeSpan values.</td>
</tr>
<tr align="left" valign="top" bgcolor="#e2e2e2">
<td>int TopBottomMargin</td>
<td>Margin below top border and above bottom border in pixels.</td>
</tr>
<tr align="left" valign="top">
<td>int Gridlines</td>
<td>Number of horizontal gridlines</td>
</tr>
<tr align="left" valign="top" bgcolor="#e2e2e2">
<td>int MarkerSize</td>
<td>Size of markers for special graph events and circle for graph tracing, in pixels.</td>
</tr>
<tr align="left" valign="top">
<td>int GraphThickness</td>
<td>Thickness of graphs in pixels.</td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="5" cellpadding="0" width="90%">
<tbody>
<tr bgcolor="#e2e2e2">
<th scope="col"> Method</th>
<th scope="col"> Description</th>
</tr>
<tr align="left" valign="top">
<td>int CreateDataChannel(System.Drawing.Color, string)</td>
<td>Creates a data channel (graph) with a given name and color. Returns the handle (int) for the data channel.</td>
</tr>
<tr align="left" valign="top" bgcolor="#e2e2e2">
<td>int CreateDataChannel(System.Drawing.Color)</td>
<td>Creates a data channel with a given color. Returns the handle for the data channel.</td>
</tr>
<tr align="left" valign="top">
<td>void InsertEvent(int, string)</td>
<td>Inserts a event (string) at the graph with the given int handle.</td>
</tr>
<tr align="left" valign="top" bgcolor="#e2e2e2">
<td>void Insert(int, double)</td>
<td>Adding a value (double) to a given graph given by its handle.</td>
</tr>
<tr align="left" valign="top">
<td>void Inserts(ArrayList)</td>
<td>Inserting data to a list of graphs, given by a list of doubles, where first entry is graph index and second entry is the value to be inserted.</td>
</tr>
<tr align="left" valign="top" bgcolor="#e2e2e2">
<td>void Display(int, bool)</td>
<td>Sets visibility of graph with the given handle.</td>
</tr>
</tbody>
</table>
<h2>Points of clarification</h2>
<p>The component include some procedures that might need clarification, which this section is intended to provide.</p>
<h3>The working of data channels</h3>
<p>A crucial part of the graphing component is the data channels (graphs). These are implemented in the DataChannel class and are basically a feature extended queue (the class inherits from the Queue class). The queue is limited to containing a set amount of data (this property is maintained by the graphing module - and could be disabled if you want to save all inserted data, look in the code piece of the &#8216;Adjusting y-axis scale&#8217; below, line 11) and a local min and max value is maintained on enqueueing and dequeueing.</p>
<p>Besides the value queue there is visible-, name- and color properties - and the channel can easily be extended to contain even more use specific features.</p>
<p>Lastly there is the event feature of a data channel. This feature allow you to insert special events at a current point in time (it is not possible to add, edit or remove future or past events) like the trading of a good in the TradeOff application. A event is added as a simple string using AddEvent(string) and is stored in a temporarily list. It is therefore possible to insert multiple events at the same point in time. The temporary list is at value enqueueing inserted in the events queue.</p>
<h3>Adjusting y-axis scale</h3>
<p>The scale of the y-axis is automatically adjusted to display the graphs relative values - ie. the maximum and minimum values of the y-axis corresponds to the maximum and minimum values of all the graphs. Although this will cause the y-axis values to change over time - as new graph values are inserted, this can easily be redesigned to keep a static or partly static y-scale. As for now - with the current implementation there&#8217;s a few extra steps to be taken when inserting new data to a graph - that is, we have to update the min. and max. values in the graphing module. This is done easily by comparing to the current min and max to a newly inserted value - in the following method, line 8 and 9.</p>
<div class="csharpcode">
<pre><span class="lnum">   1:  </span><span class="rem">// Adding a value to a given graph. (Moving time forward)</span></pre>
<pre><span class="lnum">   2:  </span><span class="kwrd">public</span> <span class="kwrd">void</span> Insert(<span class="kwrd">int</span> index, <span class="kwrd">double</span> data)</pre>
<pre><span class="lnum">   3:  </span>{</pre>
<pre><span class="lnum">   4:  </span>    DataChannel dc = (DataChannel) _DataSources[index];</pre>
<pre><span class="lnum">   5:  </span>    dc.Enqueue(data);</pre>
<pre><span class="lnum">   6:  </span>    <span class="kwrd">if</span> ( dc.Display )</pre>
<pre><span class="lnum">   7:  </span>    {</pre>
<pre><span class="lnum">   8:  </span>        _HighestValue = Math.Max(_HighestValue, data);</pre>
<pre><span class="lnum">   9:  </span>        _LowestValue = Math.Min(_LowestValue, data);</pre>
<pre><span class="lnum">  10:  </span>    }</pre>
<pre><span class="lnum">  11:  </span>    <span class="kwrd">if</span> ( dc.Count &gt;= _TimeSpan )</pre>
<pre><span class="lnum">  12:  </span>    {</pre>
<pre><span class="lnum">  13:  </span>        <span class="kwrd">double</span> deq = (<span class="kwrd">double</span>) dc.Dequeue();</pre>
<pre><span class="lnum">  14:  </span></pre>
<pre><span class="lnum">  15:  </span>        <span class="kwrd">if</span> ( dc.Display )</pre>
<pre><span class="lnum">  16:  </span>        {</pre>
<pre><span class="lnum">  17:  </span>            <span class="kwrd">if</span> ( deq == _LowestValue || deq == _HighestValue )</pre>
<pre><span class="lnum">  18:  </span>                FindMaxMinValues();</pre>
<pre><span class="lnum">  19:  </span>        }</pre>
<pre><span class="lnum">  20:  </span>    }</pre>
<pre><span class="lnum">  21:  </span>    <span class="kwrd">this</span>.Invalidate();</pre>
<pre><span class="lnum">  22:  </span>}</pre>
</div>
<p>Notice also that if the newly inserted value implicitly causes a forward shift in time (Number of inserted values greater than the specified time span - line 11) then we dequeue a element in the data channel. If the dequeued element is either the currently overall minimum or maximum we update these values using the FindMaxMinValues-method. The FindMaxMinValues method iterates through the data channels looking for the overall max and min values - only checking the data channels internal max and min values (which are maintained on enqueueing and dequeueing of data as mentioned above.</p>
<h3>The TradeOff application implementation specific parts</h3>
<p>The application TradeOff (see below) is used as a test bed for the application, and the component therefore might include code parts specific to this application. These minor implementation specific parts should easily be changed.</p>
<h3>Drawing markers and info box</h3>
<p>The component, as mentioned earlier, supports real time tracing of graphs using the mouse. The following method is responsible for this:</p>
<div class="csharpcode">
<pre><span class="lnum">   1:  </span><span class="rem">// Drawing a marker at the nearest graph value to the mouse pointer</span></pre>
<pre><span class="lnum">   2:  </span><span class="kwrd">private</span> <span class="kwrd">void</span> DrawMarker(MouseEventArgs e)</pre>
<pre><span class="lnum">   3:  </span>{</pre>
<pre><span class="lnum">   4:  </span>    <span class="kwrd">if</span> ( _MouseDown )</pre>
<pre><span class="lnum">   5:  </span>    {</pre>
<pre><span class="lnum">   6:  </span>        <span class="kwrd">this</span>.Refresh();</pre>
<pre><span class="lnum">   7:  </span>        <span class="kwrd">int</span> xOffsetLocation = (<span class="kwrd">int</span>) Math.Round(e.X / _OffsetX );</pre>
<pre><span class="lnum">   8:  </span>        <span class="kwrd">double</span> MinDistance = <span class="kwrd">int</span>.MaxValue;</pre>
<pre><span class="lnum">   9:  </span>        <span class="kwrd">int</span> MinDistancePosition = 0;</pre>
<pre><span class="lnum">  10:  </span>        <span class="kwrd">bool</span> MarkerFound = <span class="kwrd">false</span>;</pre>
<pre><span class="lnum">  11:  </span>        <span class="kwrd">double</span> MinDistanceValue = 0;</pre>
<pre><span class="lnum">  12:  </span>        <span class="kwrd">string</span> MinDistanceName = <span class="str">""</span>;</pre>
<pre><span class="lnum">  13:  </span>        <span class="kwrd">string</span>[] MinDistanceEvents = <span class="kwrd">null</span>;</pre>
<pre><span class="lnum">  14:  </span>        <span class="rem">// Looking for the nearest graph and point in time</span></pre>
<pre><span class="lnum">  15:  </span>        <span class="kwrd">foreach</span> ( DataChannel dc <span class="kwrd">in</span> _DataSources )</pre>
<pre><span class="lnum">  16:  </span>        {</pre>
<pre><span class="lnum">  17:  </span>            <span class="kwrd">if</span> ( dc.Count &gt; xOffsetLocation &amp;&amp; xOffsetLocation &gt;= 0 &amp;&amp; dc.Display )</pre>
<pre><span class="lnum">  18:  </span>            {</pre>
<pre><span class="lnum">  19:  </span>                <span class="kwrd">double</span> CurrentValue = (<span class="kwrd">double</span>) ( dc.ToArray() )[xOffsetLocation];</pre>
<pre><span class="lnum">  20:  </span>                <span class="kwrd">int</span> CurrentYPosition = CalculateY(CurrentValue);</pre>
<pre><span class="lnum">  21:  </span>                <span class="kwrd">int</span> CurrentDistance = Math.Abs(e.Y - CurrentYPosition);</pre>
<pre><span class="lnum">  22:  </span></pre>
<pre><span class="lnum">  23:  </span>                <span class="kwrd">if</span> ( CurrentDistance &lt; MinDistance )</pre>
<pre><span class="lnum">  24:  </span>                {</pre>
<pre><span class="lnum">  25:  </span>                    MinDistance = CurrentDistance;</pre>
<pre><span class="lnum">  26:  </span>                    MinDistancePosition = CurrentYPosition;</pre>
<pre><span class="lnum">  27:  </span>                    MinDistanceValue = CurrentValue;</pre>
<pre><span class="lnum">  28:  </span>                    MinDistanceName = dc.Name;</pre>
<pre><span class="lnum">  29:  </span>                    MinDistanceEvents = dc.GetEvents(xOffsetLocation);</pre>
<pre><span class="lnum">  30:  </span></pre>
<pre><span class="lnum">  31:  </span>                }</pre>
<pre><span class="lnum">  32:  </span>                MarkerFound = <span class="kwrd">true</span>;</pre>
<pre><span class="lnum">  33:  </span>            }</pre>
<pre><span class="lnum">  34:  </span>        }</pre>
<pre><span class="lnum">  35:  </span>        <span class="rem">// When point and graph found, draw the marker</span></pre>
<pre><span class="lnum">  36:  </span>        <span class="kwrd">if</span> ( MarkerFound )</pre>
<pre><span class="lnum">  37:  </span>        {</pre>
<pre><span class="lnum">  38:  </span>            <span class="kwrd">string</span> DrawString = String.Format(<span class="str">"Good: "</span> + MinDistanceName +</pre>
<pre>                                          <span class="str">", Price: {0:c}"</span>, MinDistanceValue);</pre>
<pre><span class="lnum">  39:  </span></pre>
<pre><span class="lnum">  40:  </span>            <span class="kwrd">if</span> ( MinDistanceEvents != <span class="kwrd">null</span> )</pre>
<pre><span class="lnum">  41:  </span>            {</pre>
<pre><span class="lnum">  42:  </span>                <span class="rem">// adding events to info to be displayed</span></pre>
<pre><span class="lnum">  43:  </span>                DrawString += <span class="str">"\n"</span>;</pre>
<pre><span class="lnum">  44:  </span>                <span class="kwrd">for</span> ( <span class="kwrd">int</span> i = 0; i &lt; MinDistanceEvents.Length; i++ )</pre>
<pre><span class="lnum">  45:  </span>                    DrawString += <span class="str">" + "</span> + MinDistanceEvents[i] + <span class="str">"\n"</span>;</pre>
<pre><span class="lnum">  46:  </span>            }</pre>
<pre><span class="lnum">  47:  </span></pre>
<pre><span class="lnum">  48:  </span>            Graphics g = <span class="kwrd">this</span>.CreateGraphics();</pre>
<pre><span class="lnum">  49:  </span>            g.SmoothingMode = SmoothingMode.AntiAlias;</pre>
<pre><span class="lnum">  50:  </span></pre>
<pre><span class="lnum">  51:  </span>            <span class="kwrd">int</span> X = (<span class="kwrd">int</span>) Math.Round((xOffsetLocation+1) * _OffsetX);</pre>
<pre><span class="lnum">  52:  </span>            <span class="kwrd">int</span> Y = MinDistancePosition;</pre>
<pre><span class="lnum">  53:  </span>            <span class="kwrd">int</span> MSH = MarkerSize / 2; <span class="rem">//Marker Size half</span></pre>
<pre><span class="lnum">  54:  </span></pre>
<pre><span class="lnum">  55:  </span>            g.DrawEllipse(<span class="kwrd">new</span> Pen(Brushes.DarkRed, GraphThickness), X - MSH,</pre>
<pre>                                                     Y - MSH, MarkerSize, MarkerSize);</pre>
<pre><span class="lnum">  56:  </span></pre>
<pre><span class="lnum">  57:  </span>            SizeF size = g.MeasureString(DrawString, <span class="kwrd">new</span> Font(<span class="str">"Arial"</span>, 7));</pre>
<pre><span class="lnum">  58:  </span></pre>
<pre><span class="lnum">  59:  </span>            <span class="rem">// Making sure that infobox doesn't exceeds control drawing area</span></pre>
<pre><span class="lnum">  60:  </span>            <span class="kwrd">if</span>( (Y + size.Height) &gt; Height )</pre>
<pre><span class="lnum">  61:  </span>                Y -= ((<span class="kwrd">int</span>) Math.Round(size.Height) + MarkerSize);</pre>
<pre><span class="lnum">  62:  </span></pre>
<pre><span class="lnum">  63:  </span>            <span class="kwrd">if</span>( (X + size.Width) &gt; Width)</pre>
<pre><span class="lnum">  64:  </span>                X -= ((<span class="kwrd">int</span>) Math.Round(size.Width) + MarkerSize);</pre>
<pre><span class="lnum">  65:  </span></pre>
<pre><span class="lnum">  66:  </span>            <span class="rem">// Drawing info</span></pre>
<pre><span class="lnum">  67:  </span>            g.FillRectangle(Brushes.LightYellow, X + MSH, Y + MSH, size.Width, size.Height);</pre>
<pre><span class="lnum">  68:  </span>            g.DrawRectangle(<span class="kwrd">new</span> Pen(Color.Black), X + MSH, Y + MSH, size.Width, size.Height);</pre>
<pre><span class="lnum">  69:  </span>            g.DrawString(DrawString, <span class="kwrd">new</span> Font(<span class="str">"Arial"</span>, 7), Brushes.Black, X + MSH, Y + MSH);</pre>
<pre><span class="lnum">  70:  </span>        }</pre>
<pre><span class="lnum">  71:  </span>    }</pre>
<pre><span class="lnum">  72:  </span>}</pre>
</div>
<p>I&#8217;ll just explain the procedure used. A x-value at the graphing area corresponding to the current mouse position is calculated (line 7) - hereafter while iterating through all graphs (Data channels) we look for the nearest graph to the mouse position (line 15 - 34) and the data bound to the graph is saved - if a graph is found at the given x-value. Next we simply draw a marker at the graph (line 55), drawing a info box containing some information (including actual y-value) and possibly events belonging to the given point (line 67 - 69).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomassidor.com/software/graphing-module/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Font Visualizer</title>
		<link>http://www.thomassidor.com/software/font-visualizer/</link>
		<comments>http://www.thomassidor.com/software/font-visualizer/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 09:03:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Developed software]]></category>

		<guid isPermaLink="false">http://thomassidor.com/?p=41</guid>
		<description><![CDATA[FontVisualizer is a small utility designed for showing collections of fonts, supported font styles, font character sets and more.]]></description>
			<content:encoded><![CDATA[<p>FontVisualizer is a small utility designed for showing collections of fonts, supported font styles, font character sets and more. Features include:</p>
<ul>
<li>Display system fonts or fonts from a selected folder.</li>
<li>Install fonts</li>
<li>Character map</li>
<li>Printing</li>
<li>Etc.</li>
</ul>
<p><a href="/files/fontvisualizer.zip">Download FontVisualizer 1.5 installer</a></p>
<p><a href="/files/FontVisualizer_src_20071227.zip">Download the source code for Font Visualizer 1.5</a></p>
<p><img class="alignnone" src="/files/images/FontVisualizer15.jpg" alt="" width="350" height="230" /></p>
<h2>Acknowledgements</h2>
<p>Eugene Pankov, &#8216;MenuExtender&#8217;<br />
Christian Tratz, &#8216;Auto-resize C# ListBox&#8217;<br />
Lelieveld, &#8216;An auto-resize C# Listbox (updated)&#8217;<br />
The users at Graphic-Forums.net for ideas and support.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomassidor.com/software/font-visualizer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Compact FTP Backup</title>
		<link>http://www.thomassidor.com/software/compact-ftp-backup/</link>
		<comments>http://www.thomassidor.com/software/compact-ftp-backup/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 08:58:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Developed software]]></category>

		<guid isPermaLink="false">http://thomassidor.com/?p=39</guid>
		<description><![CDATA[Compact FTP Backup is an application for backking up files and folders at FTP servers - for instance websites. The applications is written in C# using the .NET 2.0 Framework and takes use of the Recurrence .NET and MonthCalendarPlus controls.]]></description>
			<content:encoded><![CDATA[<p>Compact <span class="caps">FTP</span> Backup is an application for backking up files and folders at <span class="caps">FTP </span>servers - for instance websites. The applications is written in C# using the .NET 2.0 Framework and takes use of the Recurrence .NET and MonthCalendarPlus controls.</p>
<p><a href="/files/cfb-setup.zip">Download Compact FTP Backup installer</a></p>
<p><a href="/files/cfb-src-20060427.zip">Download the source code for Compact FTP Backup</a></p>
<p><img class="alignnone" src="/files/images/cfb062.preview.jpg" alt="" width="640" height="480" /></p>
<p>Backups are automatically compressed to an zip-archive and stored locally. The application can run in the background automatically starting backups acording to the recurrence pattern.</p>
<p>Although the project has been on stand by for some time I&#8217;ve decided to release the sourse as well as a working install.</p>
<p>To get the source to work you&#8217;ll need the following</p>
<ul>
<li><a href="/software/recurrence-net/">Recurrence .NET</a></li>
<li><a href="http://www.enterprisedt.com/products/edtftpnet/overview.html">edtFTPnet</a></li>
<li><a href="http://www.icsharpcode.net/OpenSource/SharpZipLib/">#ZipLib</a></li>
</ul>
<h2>Changelog</h2>
<p><strong>0.6.2.0 - 2005.12.23</strong></p>
<ul>
<li>Fixed deletion of wrong activities</li>
<li>Fixed dialog stating that files had been changed  from the outside when saving a project</li>
<li>Fixed crash when selecting activities and backups with short names</li>
</ul>
<p><strong>0.6.2.0 - 2005.12.18</strong></p>
<ul>
<li>Added check for over due backups
<ol>
<li>Run backups automatically or display dialog</li>
</ol>
</li>
<li>Closed connections left open by the <span class="caps">FTP</span> Browser</li>
<li>Created change log and added it to about box</li>
<li>Added &#8216;Next backup&#8217; to backup entry editor</li>
<li>Other bug fixes</li>
</ul>
<h2>Known bugs</h2>
<ul>
<li>Taking backup of large files takes up memory equvilent to the file size</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.thomassidor.com/software/compact-ftp-backup/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Recurrence .NET</title>
		<link>http://www.thomassidor.com/software/recurrence-net/</link>
		<comments>http://www.thomassidor.com/software/recurrence-net/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 08:56:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Developed software]]></category>

		<guid isPermaLink="false">http://thomassidor.com/?p=37</guid>
		<description><![CDATA[Recurrence .NET is a Windows Form Control, written in C# using the Microsoft .NET 2.0 framework, for creating recurring events. The control includes a GUI with all the various settings in a recurrence pattern as well as a calendar for previewing the recurrence.]]></description>
			<content:encoded><![CDATA[<p>Recurrence .NET is a Windows Form Control, written in C# using the Microsoft .NET 2.0 framework, for creating recurring events. The control includes a GUI with all the various settings in a recurrence pattern as well as a calendar for previewing the recurrence.</p>
<p>Source and testing application available for download at SourceForge.net project site: <a class="linkification-ext" title="Linkification: https://sourceforge.net/projects/recurrence-net/" href="https://sourceforge.net/projects/recurrence-net/">https://sourceforge.net/projects/recurrence-net/</a></p>
<p>The application is no longer under development, but if you create an updated version you would like to share, please let me know.</p>
<p><a href="/files/images/RecurrenceNetEdit.jpg"><img class="alignnone" src="/files/images/RecurrenceNetEdit.thumbnail.jpg" alt="" width="78" height="100" /></a></p>
<p><a href="/files/images/RecurrenceNetPreview.jpg"><img class="alignnone" src="/files/images/RecurrenceNetPreview.thumbnail.jpg" alt="" width="78" height="100" /></a></p>
<h2>Bugfixes</h2>
<p>Thanks to Kees van den Broek the following minor bugs have been fixed</p>
<ul>
<li>Renamed MontCalendarPlus to MonthCalendarPlus</li>
<li>Deleted Recurrence.cs as it was empty</li>
<li>Changed use of ToShortTimeString() to ToString(&#8221;HH:mm&#8221;) in RecurrenceUI.cs as it parsed times worngly (for instance 18:00 became 6:00 am)</li>
</ul>
<p><em>(Friday, November 11th 2006)</em></p>
<h2>Updated with bugfixes and XML serialization capabilities</h2>
<p>Thanks to Lüuis Lauri [laluu - at - wmdata.com] the comtrol has been updated with a few bugfixes as well as XML serialization capabilities.</p>
<p>I appreciate any feedback on fixes and enhancements to the code. This XML serialization feature is a great idea.</p>
<p><em>(Thursdag, April 27th 2006)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomassidor.com/software/recurrence-net/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

