<?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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Litui.Net &#187; cansel</title>
	<atom:link href="http://www.litui.net/archives/tag/cansel/feed" rel="self" type="application/rss+xml" />
	<link>http://www.litui.net</link>
	<description></description>
	<lastBuildDate>Thu, 19 Aug 2010 22:41:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>GPS Infrastructure Abstractions and Bolt-ons</title>
		<link>http://www.litui.net/archives/656</link>
		<comments>http://www.litui.net/archives/656#comments</comments>
		<pubDate>Wed, 22 Apr 2009 00:50:04 +0000</pubDate>
		<dc:creator>litui</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[abstraction]]></category>
		<category><![CDATA[bolt-on]]></category>
		<category><![CDATA[can-net]]></category>
		<category><![CDATA[cansel]]></category>
		<category><![CDATA[erp]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[gps infrastructure]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[http authentication]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[ntrip]]></category>
		<category><![CDATA[ntrip caster]]></category>
		<category><![CDATA[snmp]]></category>
		<category><![CDATA[trimble]]></category>
		<category><![CDATA[tshark]]></category>
		<category><![CDATA[vrs]]></category>
		<category><![CDATA[wireshark]]></category>

		<guid isPermaLink="false">http://76.74.187.200/~litui/blog/?p=656</guid>
		<description><![CDATA[The company I work for, Cansel Survey Equipment runs a network of Trimble GPS base stations across Canada in multiple VRS configurations. This network (Can-Net) is powered on the backend by Trimble Infrastructure software. I&#8217;ve been integrating around this software for about 2 years now. Integration and Abstraction While performing admirably at its intended job [...]]]></description>
			<content:encoded><![CDATA[<p>The company I work for, <a href="http://www.cansel.ca">Cansel Survey Equipment</a> runs a network of Trimble <a href="http://en.wikipedia.org/wiki/Base_station#Land_surveying">GPS base stations</a> across Canada in multiple <a href="http://www.trimble.com/vrs.shtml">VRS</a> configurations.  This network (<a href="http://www.can-net.ca">Can-Net</a>) is powered on the backend by <a href="http://www.trimble.com/infrastructure/vrs_networks.aspx">Trimble Infrastructure</a> software.  I&#8217;ve been integrating around this software for about 2 years now.</p>
<h3>Integration and Abstraction</h3>
<p>While performing admirably at its intended job (many of the details of which still elude me as I&#8217;m no geomatics engineer) the software can be a little monolithic.  It works as advertised, make no mistake, but its UI is a bit clunky and it doesn&#8217;t seem to integrate well into other applications without a great deal of massaging.  [Please Note: I say this with respect for the fact that the software is easily the best available for GPS/GNSS infrastructure and it does seem as though Trimble is making strides towards modernizing their applications.]</p>
<p>One of my main goals with regard to the infrastructure software has been (while working within and around the known limitations of the software) to abstract account management, reporting, and our internal tech support processes from staff access to the actual servers themselves.  There are many reasons why this is necessary in an operation this size:</p>
<dl>
<dt>Automation</dt>
<dd>It can be very difficult for staff to manage sales and account terms in <a href="http://en.wikipedia.org/wiki/Enterprise_resource_planning">ERP</a> software alongside user accounts in the GPS Infrastructure.  Automation is necessary to ensure that customers are getting the accounts and access they paid for and freeloaders are kept out.</dd>
<dt>Accountability</dt>
<dd>Having user access to the database abstracted through a custom management tool means a greater level of logging of historic changes to user access tables and moderation of the types of changes that can be made.</dd>
<dt>Stability</dt>
<dd>More staff accessing the servers means a greater possibility of staff accidentally closing the server applications (much of the software runs windowed) and making problematic changes.  These sorts of things can interrupt end-user access.  Abstraction means greater regulation of what software runs on the servers and the resources used by that software.</dd>
<dt>Security</dt>
<dd>Giving direct access to staff invites unintended use.  Since simply opening a web browser to a questionable page in Windows can result in virus/malware infection it&#8217;s important to keep the list of users with access to the actual servers to a minimum.</dd>
</dl>
<p>This necessity resulted in the ongoing programming of an intranet web application (written primarily in <a href="http://rubyonrails.org/">Ruby on Rails</a>) which I may discuss in more detail in another post.</p>
<h3>Bolt-ons</h3>
<p>One of the roadblocks in the abstraction process has been the lack of useful real-time output from the infrastructure software for monitoring purposes.  Access logging occurs only <em>after</em> a user logs off.  This has made it necessary for our technical support to call the server admins to obtain information on whether or not a station is streaming data or a user is online.  This is not ideal and for reasons stated above, it&#8217;s even less ideal to give them server access simply to check the online users list.</p>
<h4>Bolt-on #1: Google Maps</h4>
<p>While not my idea, this was a good choice for (near) real-time stationary station connectivity status.   Using Google Maps allows not only our staff, but all users and the general public (required by Google&#8217;s terms of use) the ability to check our station connectivity status.</p>
<p>My implementation uses protocols available in the infrastructure software to obtain a list of stations and logs that to a static file on a periodic basis.  This allows me to place the file off the servers (better for security) as well as to provide a very quick-loading source of data for the Google map (the server&#8217;s own protocols for obtaining this data are insanely slow).</p>
<p>I have a plan to implement more up-to-date station statistics to our tech support staff using a means other than Google Maps, but more on that another time.</p>
<h4>Bolt-on #2: Who&#8217;s Online?</h4>
<p>As mentioned earlier, getting a list of the users currently connected to our system requires access to the server.  In particular, access to the User Interface software for Trimble&#8217;s NTRIP Caster service.  The UI provides usernames of connected users, amounts of data transferred, mountpoints (data streams), source IP addresses and source ports. Unfortunately, owing to the fact that many of our accounts have serialized alphanumeric usernames (an important part of our ERP integration) the username itself doesn&#8217;t tell us much about who is connected.  Ideally, we need an approach that allows us to cross-reference the usernames with our ERP to provide customer associations and to view the list of users via a management tool running on a separate machine.</p>
<p>I&#8217;ve heard of some administrators using screen scraping utilities to provide this data to their customers.  This method would require the GUI to be maximized and foremost on the screen at all times.  Additionally, the data would be an image (unsortable, unfilterable and unusable for anything but display).</p>
<p>My method requires a little more diligence but results in the type of data and access we need:</p>
<p>The most important part of this method is the tool <a href="http://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html">TShark</a>, part of the <a href="http://www.wireshark.org/">Wireshark</a> package.  TShark and Wireshark are network packet analysis tools.  They (with the help of passive packet capturing tools) can apply filters to network traffic in realtime and output specific information about the data.  For this purpose, I set up TShark to run realtime analysis on the same system running the NTRIP Caster, monitor the same ports, filter out <a href="http://en.wikipedia.org/wiki/HTTP_Authentication">HTTP Authentication</a> data (NTRIP is based on HTTP and uses basic auth) on those ports and produce log files of selected fields (namely: source IP, source port, and username/password).</p>
<p>I then wrote a script on a separate server that obtains these authentication log files, uses <a href="http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol">SNMP</a> to obtain a list of source IPs and ports for current connections to the NTRIP caster, compares the IPs and ports to those in the log files, and loads the most recent matching usernames into an array.  It then does some database magic to match the usernames to customers and outputs the result as a <a href="http://www.json.org/">JSON</a> file which can be parsed using libraries available in most programming languages.  This script is run by <a href="http://en.wikipedia.org/wiki/Cron">Cron</a> every minute.</p>
<p>Using an AJAX intranet web page that reloads and parses the JSON file every minute, I can provide a list of current users to our technical support staff that&#8217;s internal to our company network and does not require direct access to the servers.</p>
<p>[<strong>Edit:</strong> It should be noted that TShark chews up RAM pretty quickly.  I have it restarting on a daily basis so it doesn't eat all the system memory.  There are probably other tools that can do the job, or you could write a custom parser that's more efficient if that's a concern.  I chose TShark because it was the easiest solution to implement out-of-the-box.]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litui.net/archives/656/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Printing: A Tale of Victory (and Nerdiness)</title>
		<link>http://www.litui.net/archives/562</link>
		<comments>http://www.litui.net/archives/562#comments</comments>
		<pubDate>Wed, 23 Jul 2008 01:50:21 +0000</pubDate>
		<dc:creator>litui</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[3g]]></category>
		<category><![CDATA[acronym]]></category>
		<category><![CDATA[cansel]]></category>
		<category><![CDATA[cups]]></category>
		<category><![CDATA[erp]]></category>
		<category><![CDATA[ghostpcl]]></category>
		<category><![CDATA[ghostpdl]]></category>
		<category><![CDATA[ghostscript]]></category>
		<category><![CDATA[hp]]></category>
		<category><![CDATA[pcl]]></category>
		<category><![CDATA[ppd]]></category>
		<category><![CDATA[printing]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[vpn]]></category>
		<category><![CDATA[xerox]]></category>

		<guid isPermaLink="false">http://76.74.187.200/~litui/blog/?p=562</guid>
		<description><![CDATA[Once upon a time, there was a company called Cansel that used ERP software that was only capable of printing directly to PCL5 and PCL6 printers. This worked very well for a long time as the company only used popular (HP and Xerox) laser printers that met this criteria. One day, it was decided that [...]]]></description>
			<content:encoded><![CDATA[<p>Once upon a time, there was a company called <a title="Cansel" href="http://www.cansel.ca/">Cansel</a> that used <a title="Wikipedia: Enterprise Resource Planning" href="http://en.wikipedia.org/wiki/Enterprise_resource_planning">ERP</a> software that was only capable of printing directly to <a title="Wikipedia: Printer Command Language" href="http://en.wikipedia.org/wiki/Printer_Command_Language">PCL</a>5 and PCL6 printers. This worked very well for a long time as the company only used popular (HP and Xerox) laser printers that met this criteria.</p>
<p>One day, it was decided that one of the sales staff would be working long-term in a town where we had no office and he would need a small inkjet printer that could run in his car. He would be connecting to the internet using a mobile <a title="Wikipedia: 3G" href="http://en.wikipedia.org/wiki/3g">3G</a> <a title="Wikipedia: ExpressCard" href="http://en.wikipedia.org/wiki/Expresscard">ExpressCard</a> and the printer would be connected to his laptop by Bluetooth. On his laptop, he would be running the corporate <a title="Wikipedia: VPN" href="http://en.wikipedia.org/wiki/Vpn">VPN</a> software so that he could access email and use the ERP software to make sales and what not. However, his new special printer only supported PCL3 and nobody had yet determined how he would be printing invoices.</p>
<p>I was asked to look into it and started to examine the inner workings of the printing system in order to find a way. If I did not succeed, the salesman would be emailing himself invoices to print off, which would be an annoying extra step, to be sure.</p>
<p>First I tried making the ERP software print PCL3 directly, which was largely unsuccessful. I could get the template to print cleanly, but as the software was outputting the overlay in PCL5 or 6, I couldn&#8217;t get the text to print on the same page or even line up cleanly. There had to be a way to interpret and convert PCL data in much the same way that <a title="Wikipedia: PostScript" href="http://en.wikipedia.org/wiki/Postscript">PostScript</a> can be interpreted and converted to other formats.</p>
<p>After a great deal of searching, Google found me <a title="GhostPCL, GhostPDF, and GhostXPS" href="http://www.artifex.com/downloads/">GhostPDL</a> (new name of GhostPCL), which was exactly that–a PCL interpreter and converter. It is to PCL as <a title="Ghostscript, Ghostview and GSview" href="http://pages.cs.wisc.edu/~ghost/">Ghostscript</a> is to PostScript. I tested this tool with the template files (stored in pcl) and it worked! I could convert a PCL5/6 template to PCL3 directly, or convert it to postscript and have Ghostscript render the PCL3 (seemed to look much nicer this way). I was still stumped, however, about how I would perform this operation on the fly without being able to modify the ERP software.</p>
<p>It was time to investigate the workings of the <a title="Common UNIX Printing System" href="http://www.cups.org/">Common UNIX Printing System</a> (CUPS). Typically, our ERP would print to a raw spool on CUPS which would then forward the raw PCL to a network-capable PCL printer. This new printer was bluetooth and spoke only to the salesman&#8217;s laptop. In addition, the salesman was not connected to the internet all the time. It would be hard for CUPS to find the printer each time it needed to spool to it.</p>
<p>First things first, to keep the laptop as secure as possible while allowing the printer to be shared, I installed the Print Services for UNIX component in Windows XP. This runs an <a title="Wikipedia: Line Printer Daemon protocol" href="http://en.wikipedia.org/wiki/Line_Printer_Daemon_protocol">LPD</a> server on port 515 which is very easy for CUPS to connect to. That solved the communication issue with the bluetooth printer. However, the system was still only connected to the internet by a mobile 3G card and got a new IP address on almost every connection. I decided to solve this by using <a title="Wikipedia: Dynamic Host Configuration Protocol" href="http://en.wikipedia.org/wiki/Dhcp">DHCP</a> over the VPN connection to reserve the laptop a statically assigned IP address. Every time the VPN client software was running, the laptop would accept LPD connections on the same IP, so CUPS could always find it. This works very well.</p>
<p>Unfortunately, the data was still not being properly filtered to PCL3. This was the most difficult part of the ordeal. CUPS does not have a simple method of adding a filter on a particular print queue. It supports global filters on specific mime types and allows overrides in the print drivers, but no simple per-queue filter. So, I put together a PPD file with an appropriate <em>*cupsFilter</em> line, made some changes to the <a title="Wikipedia: Internet media type" href="http://en.wikipedia.org/wiki/Mime_type">mime types</a> so PCL was no longer captured under the <em>application/vnd.cups-raw</em> heading and voila (well, not quite that quick, but after a lot of tweaking and testing), things worked.</p>
<p>A number of other little things had to be changed, but they aren&#8217;t really worth mention independently.</p>
<p>Presumably the salesman will live happily ever after. At the very least, I&#8217;m entertained by this working as well as it has. When the overlay printed smoothly over a perfectly printed template the first time today, I was cheering aloud.</p>
<p>This has been a nerdy moment brought to you by the letters I and T and a lot of acronyms.</p>
<p> <img src='http://www.litui.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.litui.net/archives/562/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Yearly update</title>
		<link>http://www.litui.net/archives/539</link>
		<comments>http://www.litui.net/archives/539#comments</comments>
		<pubDate>Mon, 10 Mar 2008 11:08:00 +0000</pubDate>
		<dc:creator>litui</dc:creator>
				<category><![CDATA[Dancing]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[7plex]]></category>
		<category><![CDATA[cansel]]></category>
		<category><![CDATA[lindy hop]]></category>
		<category><![CDATA[livejournal post]]></category>
		<category><![CDATA[money]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[prairie lindy exchange]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[swing dance calgary]]></category>
		<category><![CDATA[u of c swing]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://76.74.187.200/~litui/blog/archives/539</guid>
		<description><![CDATA[Facebook has become my online social networking site of choice lately, for better or worse, so I&#8217;m seldom to be found on the ol&#8217; LJ. Therefore, some of you may not be aware of what&#8217;s up lately in the life of Aron. I&#8217;m still working at the same place as last year, which is nice. [...]]]></description>
			<content:encoded><![CDATA[<p>Facebook has become my online social networking site of choice lately, for better or worse, so I&#8217;m seldom to be found on the ol&#8217; LJ.  Therefore, some of you may not be aware of what&#8217;s up lately in the life of Aron.</p>
<p>I&#8217;m still working at <a href="http://www.cansel.ca/">the same place as last year</a>, which is nice.  It&#8217;s the longest I&#8217;ve worked full time in a single IT position, and I&#8217;m very happy to be there.  My boss is still amazing, and I&#8217;m keeping challenged.  My main project as of the past couple/few months has been to integrate our GPS infrastructure backend with our <a href="http://en.wikipedia.org/wiki/Enterprise_resource_planning"><acronym title="Enterprise Resource Planning">ERP</acronym></a>/accounting system and it continues to be fun.  I&#8217;ve been using <a href="http://www.ruby-lang.org/en/">Ruby</a> and <a href="http://www.rubyonrails.org/">Ruby on Rails</a> lately and have been rediscovering a love for programming that was soured by <a href="http://www.php.net/"><acronym title="PHP Hypertext Preprocessor">PHP</acronym></a> for some time.  I&#8217;ve also been doing a bit of contract work on the side.</p>
<p>I miss school somewhat, but I don&#8217;t miss having a student budget.  I&#8217;m still in debt, but slowly whittling it down while living reasonably well.  It&#8217;s been a refreshing change to be able to buy what I want and give gifts without worrying about how I&#8217;m going to afford to feed myself.  I&#8217;m pretty sure I&#8217;m not ready for that to end yet.</p>
<p><a href="http://pics.livejournal.com/litui/pic/000pkk0b/"><img src="http://pics.livejournal.com/litui/pic/000pkk0b/s320x240" width="320" height="240" border='0'/></a><br /><span style="font-size: 80%;">I&#8217;m in the white fedora.</span></p>
<p>Since the end of January, I&#8217;ve been learning to <a href="http://en.wikipedia.org/wiki/Lindy_Hop">Lindy Hop</a> with the <a href='http://www.ucalgary.ca/~lindyhop/'>U of C Swing Dance</a> club and attending weekly dances with <a href='http://swingdancecalgary.com/'>Swing Dance Calgary</a>.  Previously, I had never been very taken with or good at any particular styles of dance, but after just one class and one dance I was completely sold on Lindy.  Having only learned some basic <a href="http://en.wikipedia.org/wiki/East_Coast_Swing">East Coast Swing</a> in junior high school, I didn&#8217;t have any idea that there were different types of swing or that what we were learning at the time was really a regulated ballroom version of often far more entertaining classic swing styles.</p>
<p>The classes at the University consist of an hour or so of class followed by social dancing at The Den (which is where I can be found after 9PM every Tuesday).  Since one can never get enough extra instruction, I signed on for a second beginners&#8217; course with Swing Dance Calgary (I&#8217;ve had 2 lessons so far of that one) and next weekend I&#8217;m going to the <a href='http://plexology.org/'>Prairie Lindy EXchange (PLEX)</a> in Edmonton which will be a weekend of dance events, activities and live music.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litui.net/archives/539/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cons and Pros</title>
		<link>http://www.litui.net/archives/512</link>
		<comments>http://www.litui.net/archives/512#comments</comments>
		<pubDate>Tue, 11 Jul 2006 19:58:00 +0000</pubDate>
		<dc:creator>litui</dc:creator>
				<category><![CDATA[Anime]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[animethon]]></category>
		<category><![CDATA[cansel]]></category>
		<category><![CDATA[grand & toy]]></category>
		<category><![CDATA[haruhi suzumiya]]></category>
		<category><![CDATA[network administration]]></category>
		<category><![CDATA[retail]]></category>
		<category><![CDATA[stye]]></category>

		<guid isPermaLink="false">http://76.74.187.200/~litui/blog/archives/512</guid>
		<description><![CDATA[AnimeThon was good overall. We went up with Alan and Shawn and stayed at Lister Hall. I didn&#8217;t end up seeing a lot of anime but I saw part of one really good (weird) series called The Melancholy of Haruhi Suzumiya. I&#8217;ve decided that I will spend most of my time next AnimeThon in the [...]]]></description>
			<content:encoded><![CDATA[<p>AnimeThon was good overall.  We went up with Alan and Shawn and stayed at Lister Hall.  I didn&#8217;t end up seeing a lot of anime but I saw part of one really good (weird) series called The Melancholy of Haruhi Suzumiya.  I&#8217;ve decided that I will spend most of my time next AnimeThon in the Room of Mystery.  At the Hotel (where we didn&#8217;t stay, but hung out a bit) I attended a good portion of the 4chan session and now finally understand a lot more of the jokes certain groups of my friends pass around.</p>
<p>I met Heather&#8217;s friend Phil who seems pretty cool, and got to hang out with Jeremy on Sunday.</p>
<p>I contracted an evil type of Stye in my left eyelid on Sunday morning and am currently on antibiotics to combat it.  I blame grungy Otaku touching things (doorknobs, desks, etc) with their unclean hands (things which I subsequently touched prior to rubbing my eye).  There were some foul odours among certain of the crowd.  I think Grant MacEwan&#8217;s health services or similar body should be contacted for next year&#8217;s event to hand out soap, antiseptic wipes, hand sanitizer, and pamphlets.  The comic that appeared in the Otafest guide should be enlarged and posted at the registration desk.</p>
<p>I received an offer today for a 3 month Network Administration (and helpdesk, and jack of all trades tech support guy) contract which I accepted and will commence next Tuesday.  Hooray!  Props to tozetre for helping this to happen.</p>
<p>I gave a week&#8217;s notice to Grand and Toy and committed to at least a couple more Saturday shifts for Black&#8217;s, though I&#8217;m thinking it&#8217;d be pretty sweet to work the one day a week at Black&#8217;s for a couple more months and use the extra pay there to get a camera at employee discount or something.  We&#8217;ll see.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.litui.net/archives/512/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
