<?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>Nefaria.com &#187; I.T.</title>
	<atom:link href="http://nefaria.com/tag/it/feed/" rel="self" type="application/rss+xml" />
	<link>http://nefaria.com</link>
	<description>☠ ☠ ☠ ☠ ☠ ☠</description>
	<lastBuildDate>Fri, 03 Sep 2010 13:45:17 +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>Solution for: &#8220;Microsoft office has stopped working&#8221; (applies to Office 2007 &amp; 2010)</title>
		<link>http://nefaria.com/2010/08/solution-for-microsoft-office-has-stopped-working-applies-to-office-2007-2010/</link>
		<comments>http://nefaria.com/2010/08/solution-for-microsoft-office-has-stopped-working-applies-to-office-2007-2010/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 15:44:12 +0000</pubDate>
		<dc:creator>musashi</dc:creator>
				<category><![CDATA[I.T.]]></category>

		<guid isPermaLink="false">http://nefaria.com/?p=944</guid>
		<description><![CDATA[Symptoms: Microsoft word/excel/powerpoint/etc. crash a few seconds after being opened with the error message: &#8220;Microsoft office has stopped working&#8221; As a few clients of mine have upgraded to MS Office 2010, this problem has appeared a few times and it seems damn near impossible to fix&#8230; but there is a fix. You ready? Set your [...]]]></description>
			<content:encoded><![CDATA[<p>Symptoms: Microsoft word/excel/powerpoint/etc. crash a few seconds after being opened with the error message:</p>
<div class="code_block">&#8220;Microsoft office has stopped working&#8221;</div>
<p>As a few clients of mine have upgraded to MS Office 2010, this problem has appeared a few times and it seems damn near impossible to fix&#8230; <em>but there is a fix</em>. You ready?</p>
<p><strong>Set your default printer to the &#8220;Microsoft XPS Document Writer&#8221;.</strong></p>
<p>I don&#8217;t know why this works, but it&#8217;s going to have to do until M$ releases and update/patch/fix/etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://nefaria.com/2010/08/solution-for-microsoft-office-has-stopped-working-applies-to-office-2007-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jqueryFileTree connector script for python cgi</title>
		<link>http://nefaria.com/2010/08/jqueryfiletree-connector-script-for-python-cgi/</link>
		<comments>http://nefaria.com/2010/08/jqueryfiletree-connector-script-for-python-cgi/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 15:49:12 +0000</pubDate>
		<dc:creator>musashi</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[I.T.]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Programming / Scripting]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://nefaria.com/?p=934</guid>
		<description><![CDATA[If you use jquery and haven&#8217;t messed with the jqueryFileTree plugin, I&#8217;d highly recommend you do so. It&#8217;s pretty neat, and there are connector scripts already written in various languages for use with this plugin. However, there wasn&#8217;t one for python cgi (there was one for django however). So, I wrote my own! Try it [...]]]></description>
			<content:encoded><![CDATA[<p>If you use jquery and haven&#8217;t messed with the <a href="http://abeautifulsite.net/blog/2008/03/jquery-file-tree/">jqueryFileTree</a> plugin, I&#8217;d highly recommend you do so. It&#8217;s pretty neat, and there are <a href="http://abeautifulsite.net/blog/2008/03/jquery-file-tree/#connectors">connector scripts</a> already written in various languages for use with this plugin. However, there wasn&#8217;t one for python cgi (there was one for django however). So, I wrote my own! Try it out:</p>
<div class="code_block">
<font color="#8080ff">#!/usr/bin/python</font><br />
<font color="#8080ff"><br />
#&nbsp;&nbsp; jqueryFileTree connector script for python cgi&nbsp;&nbsp;<br />
#&nbsp;&nbsp; Version: 1.0 / 10 August 2010<br />
#&nbsp;&nbsp; Author: Charles Hamilton / musashi@nefaria.com<br />
#&nbsp;&nbsp; Released under the GNU GPLv3<br />
#&nbsp;&nbsp; Modifications and improvements are welcome (and encouraged!)<br />
</font></p>
<p><font color="#ff40ff">import</font>&nbsp;os, cgi, cgitb, urllib<br />
cgitb.enable() <br />
form = cgi.FieldStorage()</p>
<p><font color="#ffff00">print</font>&nbsp;&#8217;<font color="#ff6060">Content-Type: text/html</font><font color="#ff40ff">\n\n</font>&#8216;<br />
<font color="#ffff00">print</font>&nbsp;&#8217;<font color="#ff6060">&lt;ul class=&quot;jqueryFileTree&quot; style=&quot;display: none;&quot;&gt;</font>&#8216;</p>
<p>path = urllib.unquote(form['<font color="#ff6060">dir</font>'].value)</p>
<p>dirs = []<br />
files = []</p>
<p>filelist = sorted(os.listdir(path))</p>
<p><font color="#ffff00">for</font>&nbsp;object <font color="#ffff00">in</font>&nbsp;filelist:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">if</font>&nbsp;os.path.isfile(path + &#8216;<font color="#ff6060">/</font>&#8216;&nbsp;+ object):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext = os.path.splitext(path + &#8216;<font color="#ff6060">/</font>&#8216;&nbsp;+ object)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files.append(&#8216;<font color="#ff6060">&lt;li class=&quot;file ext_</font>&#8216;&nbsp;+ ext[1] + &#8216;<font color="#ff6060">&quot;&gt;&lt;a href=&quot;#&quot; rel=&quot;</font>&#8216;+ path + object + &#8216;<font color="#ff6060">&quot;&gt;</font>&#8216;+ object + &#8216;<font color="#ff6060">&lt;/a&gt;&lt;/li&gt;</font>&#8216;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">elif</font>&nbsp;os.path.isdir(path + &#8216;<font color="#ff6060">/</font>&#8216;&nbsp;+ object):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dirs.append(&#8216;<font color="#ff6060">&lt;li class=&quot;directory collapsed&quot;&gt;&lt;a href=&quot;#&quot; rel=&quot;</font>&#8216;+ path + object +&#8217;<font color="#ff6060">/&quot;&gt;</font>&#8216;&nbsp;+ object + &#8216;<font color="#ff6060">&lt;/a&gt;&lt;/li&gt;</font>&#8216;)</p>
<p><font color="#ffff00">for</font>&nbsp;d <font color="#ffff00">in</font>&nbsp;dirs:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;d</p>
<p><font color="#ffff00">for</font>&nbsp;f <font color="#ffff00">in</font>&nbsp;files:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;f</p>
<p><font color="#ffff00">print</font>&nbsp;&#8217;<font color="#ff6060">&lt;/ul&gt;</font>&#8216;<br />
</font>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nefaria.com/2010/08/jqueryfiletree-connector-script-for-python-cgi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python + Reportlab: example #1</title>
		<link>http://nefaria.com/2010/08/python-reportlab-example-1/</link>
		<comments>http://nefaria.com/2010/08/python-reportlab-example-1/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 14:57:06 +0000</pubDate>
		<dc:creator>musashi</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[I.T.]]></category>
		<category><![CDATA[Programming / Scripting]]></category>

		<guid isPermaLink="false">http://nefaria.com/?p=922</guid>
		<description><![CDATA[So I&#8217;ve been using reportlab lately and I have to say, it&#8217;s pretty neat. This post will (hopefully) be the first of many to follow. It&#8217;s just a simple example that shows how to take input from a web form and insert it into a PDF. First, the code: &#160;1 #!/usr/bin/python &#160;2 &#160;3 import&#160;cgi, sys [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been using <a href="http://www.reportlab.com/software/opensource/">reportlab</a> lately and I have to say, it&#8217;s pretty neat. This post will (hopefully) be the first of many to follow. It&#8217;s just a simple example that shows how to take input from a web form and insert it into a PDF. First, the code:</p>
<div class="code_block">
<font color="#ffff00">&nbsp;1 </font><font color="#8080ff">#!/usr/bin/python</font><br />
<font color="#ffff00">&nbsp;2 </font><br />
<font color="#ffff00">&nbsp;3 </font><font color="#ff40ff">import</font>&nbsp;cgi, sys<br />
<font color="#ffff00">&nbsp;4 </font><br />
<font color="#ffff00">&nbsp;5 </font>form = cgi.FieldStorage()<br />
<font color="#ffff00">&nbsp;6 </font><br />
<font color="#ffff00">&nbsp;7 </font><font color="#ffff00">if</font>&nbsp;<font color="#ffff00">not</font>&nbsp;&quot;<font color="#ff6060">name</font>&quot;&nbsp;<font color="#ffff00">in</font>&nbsp;form:<br />
<font color="#ffff00">&nbsp;8 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;&quot;&quot;<font color="#ff6060">Content-Type: text/html</font><font color="#ff40ff">\n\n</font><br />
<font color="#ffff00">&nbsp;9 </font><font color="#ff6060">&lt;html&gt;</font><br />
<font color="#ffff00">10 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;</font><br />
<font color="#ffff00">11 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;Reportlab Example&lt;/title&gt;</font><br />
<font color="#ffff00">12 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;</font><br />
<font color="#ffff00">13 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;</font><br />
<font color="#ffff00">14 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form action=&quot;index2.cgi&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;</font><br />
<font color="#ffff00">15 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;fieldset&gt;</font><br />
<font color="#ffff00">16 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;legend&gt;Personal Info:&lt;/legend&gt;</font><br />
<font color="#ffff00">17 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name: &lt;input type=&quot;text&quot; name=&quot;name&quot;&gt;&lt;br /&gt;</font><br />
<font color="#ffff00">18 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Photo: &lt;input type=&quot;file&quot; name=&quot;photo&quot;&gt;&lt;br /&gt;</font><br />
<font color="#ffff00">19 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=&quot;submit&quot;&gt;</font><br />
<font color="#ffff00">20 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/fieldset&gt;</font><br />
<font color="#ffff00">21 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt;</font><br />
<font color="#ffff00">22 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;</font><br />
<font color="#ffff00">23 </font><font color="#ff6060">&lt;/head&gt;</font>&quot;&quot;&quot;<br />
<font color="#ffff00">24 </font><br />
<font color="#ffff00">25 </font><font color="#ffff00">else</font>:<br />
<font color="#ffff00">26 </font><br />
<font color="#ffff00">27 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.platypus <font color="#ff40ff">import</font>&nbsp;*<br />
<font color="#ffff00">28 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.lib.styles <font color="#ff40ff">import</font>&nbsp;getSampleStyleSheet<br />
<font color="#ffff00">29 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.lib.units <font color="#ff40ff">import</font>&nbsp;inch<br />
<font color="#ffff00">30 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.lib <font color="#ff40ff">import</font>&nbsp;colors<br />
<font color="#ffff00">31 </font>&nbsp;&nbsp;&nbsp;&nbsp;doc = SimpleDocTemplate(sys.stdout)<br />
<font color="#ffff00">32 </font>&nbsp;&nbsp;&nbsp;&nbsp;styles = getSampleStyleSheet()<br />
<font color="#ffff00">33 </font>&nbsp;&nbsp;&nbsp;&nbsp;content = []<br />
<font color="#ffff00">34 </font>&nbsp;&nbsp;&nbsp;&nbsp;<br />
<font color="#ffff00">35 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">if</font>&nbsp;form['<font color="#ff6060">photo</font>'].filename:<br />
<font color="#ffff00">36 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image = Image(form['<font color="#ff6060">photo</font>'].file)<br />
<font color="#ffff00">37 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image.drawHeight = 2*inch*image.drawHeight / image.drawWidth<br />
<font color="#ffff00">38 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image.drawWidth = 2*inch<br />
<font color="#ffff00">39 </font><br />
<font color="#ffff00">40 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">if</font>&nbsp;form['<font color="#ff6060">name</font>'].value:<br />
<font color="#ffff00">41 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text1 = Paragraph(form['<font color="#ff6060">name</font>'].value, styles['<font color="#ff6060">Heading1</font>'])<br />
<font color="#ffff00">42 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text2 = Paragraph(form['<font color="#ff6060">name</font>'].value, styles['<font color="#ff6060">Heading2</font>'])<br />
<font color="#ffff00">43 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text3 = Paragraph(form['<font color="#ff6060">name</font>'].value, styles['<font color="#ff6060">Heading3</font>'])<br />
<font color="#ffff00">44 </font><br />
<font color="#ffff00">45 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(text1)<br />
<font color="#ffff00">46 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(text2)<br />
<font color="#ffff00">47 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(text3)<br />
<font color="#ffff00">48 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(image)<br />
<font color="#ffff00">49 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;<font color="#ff6060">Content-Type: application/pdf</font>&quot;<br />
<font color="#ffff00">50 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;<font color="#ff6060">Content-Disposition: attachment; filename=example.pdf</font><font color="#ff40ff">\n\n</font>&quot;<br />
<font color="#ffff00">51 </font>&nbsp;&nbsp;&nbsp;&nbsp;doc.build(content)<br />
</font>
</div>
<p>Now the explanation:</p>
<p>Lines #1 &#8211; #5 handle specifying the interpreter, importing modules, and initializing the &#8220;FieldStorage&#8221; dictionary (as the variable &#8216;form&#8217;).</p>
<div class="code_block">
<font color="#ffff00">&nbsp;1 </font><font color="#8080ff">#!/usr/bin/python</font><br />
<font color="#ffff00">&nbsp;2 </font><br />
<font color="#ffff00">&nbsp;3 </font><font color="#ff40ff">import</font>&nbsp;cgi, sys<br />
<font color="#ffff00">&nbsp;4 </font><br />
<font color="#ffff00">&nbsp;5 </font>form = cgi.FieldStorage()
</div>
<p>Line #7 tests whether the form has been submitted by checking to see if the &#8216;name&#8217; field has been filled out. There&#8217;s many better ways to test for form submission, but for the purposes of our example, this will work just fine.</p>
<div class="code_block">
<font color="#ffff00">&nbsp;7 </font><font color="#ffff00">if</font>&nbsp;<font color="#ffff00">not</font>&nbsp;&quot;<font color="#ff6060">name</font>&quot;&nbsp;<font color="#ffff00">in</font>&nbsp;form:
</div>
<p>Lines #8 &#8211; #23 print the form</p>
<div class="code_block">
<font color="#ffff00">&nbsp;8 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;&quot;&quot;<font color="#ff6060">Content-Type: text/html</font><font color="#ff40ff">\n\n</font><br />
<font color="#ffff00">&nbsp;9 </font><font color="#ff6060">&lt;html&gt;</font><br />
<font color="#ffff00">10 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;</font><br />
<font color="#ffff00">11 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;Reportlab Example&lt;/title&gt;</font><br />
<font color="#ffff00">12 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;</font><br />
<font color="#ffff00">13 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;</font><br />
<font color="#ffff00">14 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form action=&quot;index2.cgi&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;</font><br />
<font color="#ffff00">15 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;fieldset&gt;</font><br />
<font color="#ffff00">16 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;legend&gt;Personal Info:&lt;/legend&gt;</font><br />
<font color="#ffff00">17 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name: &lt;input type=&quot;text&quot; name=&quot;name&quot;&gt;&lt;br /&gt;</font><br />
<font color="#ffff00">18 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Photo: &lt;input type=&quot;file&quot; name=&quot;photo&quot;&gt;&lt;br /&gt;</font><br />
<font color="#ffff00">19 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=&quot;submit&quot;&gt;</font><br />
<font color="#ffff00">20 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/fieldset&gt;</font><br />
<font color="#ffff00">21 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt;</font><br />
<font color="#ffff00">22 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;</font><br />
<font color="#ffff00">23 </font><font color="#ff6060">&lt;/head&gt;</font>&quot;&quot;&quot;
</div>
<p>Lines #26 &#8211; #29 import some more modules (i.e., reportlab related stuff).</p>
<div class="code_block">
<font color="#ffff00">26 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.platypus <font color="#ff40ff">import</font>&nbsp;*<br />
<font color="#ffff00">27 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.lib.styles <font color="#ff40ff">import</font>&nbsp;getSampleStyleSheet<br />
<font color="#ffff00">28 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.lib.units <font color="#ff40ff">import</font>&nbsp;inch<br />
<font color="#ffff00">29 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.lib <font color="#ff40ff">import</font>&nbsp;colors
</div>
<p>Now line #30 is important, this is where we decide where we want to write the output. We can either save the output to a file, or we can dump it to stdout (i.e., back to the web browser). In this example, we&#8217;re going to send the output back to the web browser.</p>
<div class="code_block">
<font color="#ffff00">30 </font>&nbsp;&nbsp;&nbsp;&nbsp;doc = SimpleDocTemplate(sys.stdout)
</div>
<p>Line #31 handles getting the style sheet that we&#8217;re going to use to format our text.</p>
<div class="code_block">
<font color="#ffff00">31 </font>&nbsp;&nbsp;&nbsp;&nbsp;styles = getSampleStyleSheet()
</div>
<p>In line #32, we initialize the &#8216;content&#8217; dictionary &#8212; this is where we&#8217;re going to keep the elements of our PDF until we&#8217;re ready to write it to stdout.</p>
<div class="code_block">
<font color="#ffff00">32 </font>&nbsp;&nbsp;&nbsp;&nbsp;content = []
</div>
<p>In lines #34 &#8211; #37, we test for the &#8216;photo&#8217; field &#8212; if it has been submitted, we create an Image object out of it. We&#8217;re assuming that the user is going to submit a photo, but in reality, the user could submit anything so some further &#8220;hardening&#8221; of this form would be required in order to ensure that the only things that actually get submitted are image files.</p>
<div class="code_block">
<p><font color="#ffff00">34 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">if</font>&nbsp;form['<font color="#ff6060">photo</font>'].filename:<br />
<font color="#ffff00">35 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image = Image(form['<font color="#ff6060">photo</font>'].file)<br />
<font color="#ffff00">36 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image.drawHeight = 2*inch*image.drawHeight / image.drawWidth<br />
<font color="#ffff00">37 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image.drawWidth = 2*inch
</div>
<p>Lines #39 &#8211; #42 test to see if the &#8216;name&#8217; field has been submitted; if it has, it creates some text objects to insert into our PDF.</p>
<div class="code_block">
<font color="#ffff00">39 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">if</font>&nbsp;form['<font color="#ff6060">name</font>'].value:<br />
<font color="#ffff00">40 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text1 = Paragraph(form['<font color="#ff6060">name</font>'].value, styles['<font color="#ff6060">Heading1</font>'])<br />
<font color="#ffff00">41 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text2 = Paragraph(form['<font color="#ff6060">name</font>'].value, styles['<font color="#ff6060">Heading2</font>'])<br />
<font color="#ffff00">42 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text3 = Paragraph(form['<font color="#ff6060">name</font>'].value, styles['<font color="#ff6060">Heading3</font>'])
</div>
<p>Lines #44 &#8211; #47 append all the objects that we want to appear in our PDF, to the &#8216;content&#8217; dictionary we created earlier.</p>
<div class="code_block">
<font color="#ffff00">44 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(text1)<br />
<font color="#ffff00">45 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(text2)<br />
<font color="#ffff00">46 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(text3)<br />
<font color="#ffff00">47 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(image)
</div>
<p>Lines #48 &#8211; #49 send the appropriate headers to the web browser, before we send our completed PDF file.</p>
<div class="code_block">
<font color="#ffff00">48 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;<font color="#ff6060">Content-Type: application/pdf</font>&quot;<br />
<font color="#ffff00">49 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;<font color="#ff6060">Content-Disposition: attachment; filename=example.pdf</font><font color="#ff40ff">\n\n</font>&quot;
</div>
<p>And finally, line #50 builds our PDF and sends the output to stdout.</p>
<div class="code_block">
<font color="#ffff00">50 </font>&nbsp;&nbsp;&nbsp;&nbsp;doc.build(content)
</div>
<p>Test it out; you should end up with a PDF that looks something like this:</p>
<p><a class="shutterset_" href='http://nefaria.com/wp-content/gallery/miscellaneous-media/reportlab_example1_img1.png' title=''><img src='http://nefaria.com/wp-content/gallery/miscellaneous-media/thumbs/thumbs_reportlab_example1_img1.png' alt='reportlab_example1_img1' class='ngg-singlepic ngg-center' /></a></p>
<p>Of course, this example doesn&#8217;t even scratch the surface of what you can do with reportlab. Hopefully I&#8217;ll post some more examples later on <img src='http://nefaria.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://nefaria.com/2010/08/python-reportlab-example-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuring &#8220;Per User&#8221; licensing in Terminal Services, remotely *without* Remote Desktop access</title>
		<link>http://nefaria.com/2010/01/configuring-per-user-licensing-in-terminal-services-remotely-without-remote-desktop-access/</link>
		<comments>http://nefaria.com/2010/01/configuring-per-user-licensing-in-terminal-services-remotely-without-remote-desktop-access/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 23:48:00 +0000</pubDate>
		<dc:creator>musashi</dc:creator>
				<category><![CDATA[I.T.]]></category>
		<category><![CDATA[Terminal Services]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://nefaria.com/?p=796</guid>
		<description><![CDATA[So the other day I was trying to connect to one of the terminal servers that I manage (for the purpose of this post, we&#8217;ll call the server &#8216;TERMSVR01&#8242;) and I got the following error message and was promptly disconnected: The remote session was disconnected because there are no Terminal Server client access licenses available [...]]]></description>
			<content:encoded><![CDATA[<p>So the other day I was trying to connect to one of the terminal servers that I manage (for the purpose of this post, we&#8217;ll call the server &#8216;TERMSVR01&#8242;) and I got the following error message and was promptly disconnected:</p>
<div class="code_block">
The remote session was disconnected because there are no Terminal Server client access licenses available for this computer
</div>
<p>At first glance, this seems as though the server ran out of TS CALS (Terminal Server Client Access Licenses). I was pretty sure that the server was configured to use the &#8220;Per User&#8221; licensing mode. However, a Windows Server 2003 Terminal Server operating in the &#8220;Per User&#8221; licensing mode can&#8217;t run out of licenses to the extent that it prevents the user from connecting (and instead, giving them the aforementioned error message). To the best of my knowledge, it can <em>only</em> do this when it is operating in &#8220;Per Device&#8221; mode. So this was the assumption that I ran with &#8212; that somehow, this server was never configured for &#8220;Per User&#8221; -or- it was, but the setting was either changed, reset, or corrupted somehow.</p>
<p>So, even though I wasn&#8217;t able to connect to TERMSVR01 via Remote Desktop, I <em>was</em> able to &#8220;Manage&#8221; it remotely by doing the following:</p>
<ol>
<li>Open &#8220;Active Directory Users and Computers&#8221; on any Domain Controller</li>
<li>Expand the &#8220;Computers&#8221; node</li>
<li>Right-click TERMSVR01 and select &#8216;Manage&#8217;</li>
</ol>
<p>Now we can do a few things (not many) on the server. One thing I wanted was to have a look at the Event Viewer. There were a few error messages like the following:</p>
<div class="code_block">
Event Type: Information<br />
Event Source: TermService<br />
Event Category: None<br />
Event ID: 1004<br />
Date: 1/5/2010<br />
Time: 6:18:23 PM<br />
User: N/A<br />
Computer: TERMSVR01<br />
Description:<br />
The terminal server cannot issue a client license.  It was unable to issue the license due to a changed (mismatched) client license, insufficient memory, or an internal error. Further details for this problem may have been reported at the client&#8217;s computer.</p>
<p>For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
</p></div>
<p>The more of these I saw, the more confident I was that my assumption was correct &#8212; the server was operating in &#8220;Per Device&#8221; mode and it had finally run out of licenses. I had the following options:</p>
<ol>
<li>Wait for someone to go onsite and reconfigure the licensing mode (easy, but it would have to wait until tomorrow) or&#8230;</li>
<li>Attempt to reconfigure this setting <em>and</em> restart the service remotely (so that the setting takes takes effect) &#8230; all without having &#8220;Remote Desktop&#8221; access to the server.</li>
</ol>
<p>Care to guess which option I chose?  <img src='http://nefaria.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Step #1: Override the licensing mode setting using group policy</strong></p>
<ol>
<li>Click &#8216;Start&#8217;</li>
<li>Click &#8216;Run&#8217;</li>
<li>Type the following command:
<div class="code_block">
gpedit.msc /gpcomputer:TERMSVR01
</div>
</li>
<li>Click &#8216;OK&#8217;</li>
</ol>
<p>Those four steps open the group policy (remotely) for TERMSVR01. Next we need to actually change the setting:</p>
<ol>
<li>In the left-hand panel, expand &#8220;Administrative Templates&#8221;</li>
<li>Expand &#8220;Windows Components&#8221;</li>
<li>Click on &#8220;Terminal Services&#8221;</li>
<li>Locate the following setting in the right-hand panel:
<div class="code_block">
Set the Terminal Server licensing mode
</div>
</li>
<li>Double-click the aforementioned setting</li>
<li>Change the option (directly below the heading) to &#8220;Enabled&#8221;</li>
<li>Select &#8220;Per User&#8221; from the drop-down box (below the heading: &#8220;Specify the licensing mode for the terminal server&#8221;.)</li>
<li>Click &#8216;OK&#8217;</li>
<li>Close the &#8220;Group Policy Object Editor&#8221; window</li>
</ol>
<p>Great. The licensing mode has been changed but the setting won&#8217;t take effect until the service is restarted. We <em>could</em> open &#8216;services.msc&#8217; and connect to &#8216;TERMSVR01&#8242; by using the &#8216;Connect to another computer &#8230;&#8217; option in the &#8216;Action&#8217; menu. This will allow us to administer almost all running services on TERMSVR01 &#8230; almost all. You&#8217;ll notice immediately that you cannot start/stop the &#8216;Terminal Services&#8217; service from this management console, so we need to find another way to do it.</p>
<p>The easiest way I know to accomplish this task is to use the WMIC command from the command prompt.</p>
<p><strong>Step #2: Restart a remote service using WMIC</strong></p>
<ol>
<li>Open a command prompt</li>
<li>Type the following command (then hit enter) to stop the service:
<div class="code_block">
wmic /node:TERMSVR01 service where &#8220;caption=&#8217;Terminal Services&#8217;&#8221; call StopService
</div>
</li>
<li>Then, type the following command to start the service:
<div class="code_block">
wmic /node:TERMSVR01 service where &#8220;caption=&#8217;Terminal Services&#8217;&#8221; call StartService
</div>
</li>
<li>Close the command prompt</li>
</ol>
<p>If everything was successful (and my assumption about the nature of the problem was correct), then I should be able to connect to the server using the Remote Desktop client. I fired up the client and voilà! It worked perfectly.</p>
]]></content:encoded>
			<wfw:commentRss>http://nefaria.com/2010/01/configuring-per-user-licensing-in-terminal-services-remotely-without-remote-desktop-access/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How to upgrade ClamAV on Ubuntu (Intrepid)</title>
		<link>http://nefaria.com/2009/10/how-to-upgrade-clamav-on-ubuntu-intrepid/</link>
		<comments>http://nefaria.com/2009/10/how-to-upgrade-clamav-on-ubuntu-intrepid/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 14:22:48 +0000</pubDate>
		<dc:creator>musashi</dc:creator>
				<category><![CDATA[I.T.]]></category>
		<category><![CDATA[ClamAV]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://nefaria.com/?p=725</guid>
		<description><![CDATA[On October 5th, the Clam Antivirus team announced that ClamAV 0.94.x is now entering its end-of-life phase. What&#8217;s worse, versions of ClamAV earlier than 0.95 will no longer be able to receive CVD updates; basically rendering any older versions of ClamAV nearly worthless. This is all supposed to happen by April 2010&#8212;soon. You can read [...]]]></description>
			<content:encoded><![CDATA[<p>On October 5th, the Clam Antivirus team announced that ClamAV 0.94.x is now entering its end-of-life phase. What&#8217;s worse, versions of ClamAV earlier than 0.95 will no longer be able to receive CVD updates; basically rendering any older versions of ClamAV nearly worthless. This is all supposed to happen by April 2010&#8212;soon. You can read more about it <a href="http://www.clamav.net/2009/10/05/eol-clamav-094/">here</a>. </p>
<p>Good news though, the upgrade process on Ubuntu is pretty easy:</p>
<p>If you haven&#8217;t already done so, enable the &#8216;<a href="https://help.ubuntu.com/community/UbuntuBackports">backports</a>&#8216; repo by editing your /etc/apt/sources.list file and uncommenting (or, inserting) the following two lines:</p>
<div class='code_block'>
<pre>
deb http://us.archive.ubuntu.com/ubuntu/ intrepid-backports main restricted universe multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ intrepid-backports main restricted universe multiverse
</pre>
</div>
<p>Then, resynchronize the package index files with the following command:</p>
<div class='code_block'>
<pre>
sudo apt-get update
</pre>
</div>
<p>Next, upgrade ClamAV:</p>
<div class='code_block'>
<pre>
sudo apt-get install clamav-daemon
</pre>
</div>
<p>This command will [sometimes] install apparmor as well; I don&#8217;t use apparmor so I uninstall it afterwards:</p>
<div class='code_block'>
<pre>
/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils
</pre>
</div>
<p>That&#8217;s all there is to it!</p>
<div class='code_block'>
<pre>
root@localhost:~# clamd -V
ClamAV 0.95.2/9874/Thu Oct  8 06:24:12 2009
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nefaria.com/2009/10/how-to-upgrade-clamav-on-ubuntu-intrepid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
