<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3" -->
<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/"
	>

<channel>
	<title>as through a mirror dimly</title>
	<link>http://www.shocksolution.com/blog</link>
	<description>Scientific software development, stage lighting, and stuff</description>
	<pubDate>Tue, 19 Aug 2008 22:50:55 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3</generator>
	<language>en</language>
			<item>
		<title>Python threads are easy (with example)</title>
		<link>http://www.shocksolution.com/blog/2008/08/19/python-threads-are-easy-with-example/</link>
		<comments>http://www.shocksolution.com/blog/2008/08/19/python-threads-are-easy-with-example/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 22:50:07 +0000</pubDate>
		<dc:creator>craig</dc:creator>
		
		<category><![CDATA[Software development]]></category>

		<category><![CDATA[debate]]></category>

		<category><![CDATA[global interpreter lock]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[threads]]></category>

		<guid isPermaLink="false">http://www.shocksolution.com/blog/2008/08/19/python-threads-are-easy-with-example/</guid>
		<description><![CDATA[It&#8217;s remarkably easy to spawn a Python thread.  However, before doing so, I caution you that a Python thread is not the same thing as an OS thread.  Python threads run within the Python interpreter, but the Python interpreter always executes in a single process.  The reasons why have already been explained elsewhere, so I [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s remarkably easy to spawn a Python thread.  However, before doing so, I caution you that a Python thread is not the same thing as an OS thread.  Python threads run within the Python interpreter, but the Python interpreter always executes in a single process.  The reasons why have already been explained elsewhere, so I refer you to the <a href="http://docs.python.org/api/threads.html" title="thread module docs" target="_blank">thread module documentation</a> to learn about the Global Interpreter Lock.  You probably have objections to this state of affairs, and I assure you they have already been <a href="http://blog.snaplogic.org/?p=94" title="Objections to the Global Interpreter Lock" target="_blank">voiced</a> by Juergen Brendel and <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=214235" title="Guido van Rossum's response" target="_blank">responded to</a> by Guido van Rossum (creator of Python).  Anyway, the upshot is that Python can only utilize one core of a multi-core CPU.  This isn&#8217;t such a big deal for me because I&#8217;m a scientific programmer, and if I really need to write parallel code it&#8217;s going to have to run on a cluster or a grid.  Threads don&#8217;t help with that.</p>
<p>Having said all that, threads in Python are still useful.  I will detail one example in which I spawn a thread to load a large binary file.  While this doesn&#8217;t spread the work across multiple CPU cores, it does enable the GUI to remain interactive while the file loads.  All you have to do to create a Python thread is create a class that is derived from Thread.  In the example below, I derived a class called Loader, which &#8220;wraps&#8221; the function that actually reads the binary files.  The __init__ method accepts the filename and other options as arguments.  The run() method is required.  Don&#8217;t call run() directly&#8211;instead, call the start() method (inherited from the base class) to start the thread.<br />
<code></p>
<pre>from threading import Thread

class Loader(Thread):
    """The Loader class is a derivative of Thread that allows file loading to take place in a
    separate thread from the GUI."""

    def __init__(self,fileName, readSecondDerivatives, monitor, notifyWindow):
        Thread.__init__(self)
        self._notifyWindow = notifyWindow
        self.fileName = fileName
        self.readSecondDerivatives = readSecondDerivatives
        self.monitor = monitor

    def run(self):
        """Required method that is run by Thread.start() calls the function that loads the binary."""
        binaryFile = open(self.fileName, mode='rb')
        self.data = readWGMfile(binaryFile, self.readSecondDerivatives, self.monitor)
        binaryFile.close()
        wx.PostEvent(self._notifyWindow, DataLoadedEvent(self.data))
####</pre>
<p></code><br />
Using the class:<br />
<code></p>
<pre>loader = Loader(self.path+os.sep+self.fileName, readSecondDerivatives, monitor, self)
loader.start()</pre>
<p> </code><br />
Even though this doesn&#8217;t create a true OS thread, it keeps the GUI from freezing, and allows the GUI to receive and display status updates from the file loading.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shocksolution.com/blog/2008/08/19/python-threads-are-easy-with-example/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Redirecting text output from Python functions</title>
		<link>http://www.shocksolution.com/blog/2008/08/16/redirecting-text-output-from-python-functions/</link>
		<comments>http://www.shocksolution.com/blog/2008/08/16/redirecting-text-output-from-python-functions/#comments</comments>
		<pubDate>Sat, 16 Aug 2008 20:47:05 +0000</pubDate>
		<dc:creator>craig</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[redirect]]></category>

		<category><![CDATA[standard out]]></category>

		<category><![CDATA[stdout]]></category>

		<category><![CDATA[wx]]></category>

		<category><![CDATA[wxPython]]></category>

		<guid isPermaLink="false">http://www.shocksolution.com/blog/2008/08/16/redirecting-text-output-from-python-functions/</guid>
		<description><![CDATA[Two posts ago, I described how I wrote a function in Python that reads in a binary file from Labview.  In my last post, I described using wxPython to write a GUI to process the data from those binary files.  Naturally, I called the binary-file-reader function from the GUI.  The problem is [...]]]></description>
			<content:encoded><![CDATA[<p>Two posts ago, I described how I wrote a function in Python that reads in a binary file from Labview.  In my last post, I described using wxPython to write a GUI to process the data from those binary files.  Naturally, I called the binary-file-reader function from the GUI.  The problem is that the file reader prints a lot of information to the terminal, using Python <strong>print</strong> statements.  None of this goes to the GUI, requiring the user to run the GUI from a terminal and keep an eye on the text output, which is inconvenient.  However, I don&#8217;t want to modify the file reader to include GUI-specific code, because that would be less modular and less re-usable.  Instead, I learned that Python has a very easy facility to redirect <strong>stdout</strong>,  the default destination of the <strong>print</strong> statement.  I modified the file reader as follows:</p>
<pre><code>def readWGMfile(binaryFile, readSecondDerivatives, output=None):
    if output is not None:
        # allow the caller to hand in an alternative to standard out--for example, if
        # the caller is a GUI, redirect "print" statements to a GUI control
        print "Redirecting output..."
        import sys
        sys.stdout = output

    # rest of the function... </code></pre>
<p>I added an optional argument to the file reader, allowing the caller to specify an object to replace stdout.  The sys module is then used to redirect <strong>stdout</strong> to the object specified by the caller.  There&#8217;s no change to the default usage of the function, but it&#8217;s a lot more flexible.  Here is the object that I defined to capture the text:</p>
<pre><code>class Monitor:
    """The Monitor class defines an object which is passed to the function readWGMfile(). Standard
    output is redirected to this object."""

    def __init__(self, notifyWindow):
        import sys
        self.out = sys.stdout
        self._notifyWindow = notifyWindow        # keep track of which window needs to receive events

    def write(self, s):
        """Required method that replaces stdout."""
        if s.rstrip() != "":        # don't need to be passing blank messages
        #            self.out.write("Posting string: " + s.rstrip() + "\n")
        wx.PostEvent(self._notifyWindow, TextMessageEvent(s.rstrip()))</code></pre>
<p>The only requirement of the Monitor class is that it implement a write(self, string) method that accepts a string that would otherwise have gone to standard out.  In my case, I post a special event which is sent to the specified window.  Here is the definition of that event:</p>
<pre><code>class TextMessageEvent(wx.PyEvent):
    """Event to notify GUI that somebody wants to pass along a message in the form of a string."""
    def __init__(self,message):
        wx.PyEvent.__init__(self)
        self.SetEventType(TEXT_MESSAGE)
        self.message = message
</code></pre>
<p>Once again, I&#8217;m impressed with the way that Python makes hard things easy and very hard things possible.  In my next post, I&#8217;ll give a quick example of how easy it is &#8220;thread&#8221; things in Python.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shocksolution.com/blog/2008/08/16/redirecting-text-output-from-python-functions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fun with threads in Python and wxPython</title>
		<link>http://www.shocksolution.com/blog/2008/08/11/fun-with-threads-in-python-and-wxpython/</link>
		<comments>http://www.shocksolution.com/blog/2008/08/11/fun-with-threads-in-python-and-wxpython/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 22:12:07 +0000</pubDate>
		<dc:creator>craig</dc:creator>
		
		<category><![CDATA[Software development]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[threads]]></category>

		<category><![CDATA[wxPython]]></category>

		<category><![CDATA[wxWidgets]]></category>

		<guid isPermaLink="false">http://www.shocksolution.com/blog/2008/08/11/fun-with-threads-in-python-and-wxpython/</guid>
		<description><![CDATA[I have finally gotten back to programming in the last couple of days.  Our project has finally started to generate a lot of data, so I&#8217;ve been refactoring and improving my code that reads data stored in LabView binaries.  Today I spent a lot of time creating a GUI for browsing data.  Arguably, this wasn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>I have finally gotten back to programming in the last couple of days.  Our project has finally started to generate a lot of data, so I&#8217;ve been refactoring and improving my code that <a href="http://www.shocksolution.com/blog/2008/06/25/reading-labview-binary-files-with-python/" title="Reading Labview binaries with Python" target="_blank">reads data stored in LabView binaries</a>.  Today I spent a lot of time creating a GUI for browsing data.  Arguably, this wasn&#8217;t the best use of my time, but I learned a lot about multi-threaded Python GUI programming with wxPython.  You can find a gold mine of <a href="http://wiki.wxpython.org/LongRunningTasks" title="Multi-threading with wxpython" target="_blank">information on the multi-threaded wx programming</a> at the wxPython wiki.  Because the LabView binary data has to be read sequentially, and the files are rather large, it takes a long time to read in a file.  I spawn a thread to handle the file reading,  while allowing the GUI to remain responsive.  The thread posts messages to the GUI window, which are used to update the user on the status of the file reading operation.  When the file is read, a final message containing the data is posted to the window.  It&#8217;s really pretty slick now that I&#8217;ve figured out how to do it.</p>
<p>I will soon post a clever scheme to capture text output from the file-reading function, and display it in the GUI, without making substantial changes to the file-reading function.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shocksolution.com/blog/2008/08/11/fun-with-threads-in-python-and-wxpython/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Reading Labview binary files with Python</title>
		<link>http://www.shocksolution.com/blog/2008/06/25/reading-labview-binary-files-with-python/</link>
		<comments>http://www.shocksolution.com/blog/2008/06/25/reading-labview-binary-files-with-python/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 16:04:46 +0000</pubDate>
		<dc:creator>craig</dc:creator>
		
		<category><![CDATA[Software development]]></category>

		<category><![CDATA[binary]]></category>

		<category><![CDATA[data]]></category>

		<category><![CDATA[file]]></category>

		<category><![CDATA[labview]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.shocksolution.com/blog/2008/06/25/reading-labview-binary-files-with-python/</guid>
		<description><![CDATA[My research group uses Labview 7.1 to write custom data acquisition (DAQ) software. I code everything else in Python, so I need to get data from Labview into Python for processing.  Our DAQ program produces Labview binary files, so I had to find a way to read them with Python. Binary files are nice [...]]]></description>
			<content:encoded><![CDATA[<p>My research group uses Labview 7.1 to write custom data acquisition (DAQ) software. I code everything else in Python, so I need to get data from Labview into Python for processing.  Our DAQ program produces Labview binary files, so I had to find a way to read them with Python. Binary files are nice because they are a compact way to store numerical data as compared to ASCI or (heaven forbid) XML, but they are much harder to read.  The binary format used by Labview is documented only indirectly, so I had to hack a little.</p>
<p>The first thing to realize is that the Labview binary file is a direct dump of the data that was stored in RAM.  <a href="http://zone.ni.com/reference/en-XX/help/371361A-01/lvconcepts/how_labview_stores_data_in_memory/" title="How Labview stores data in RAM" target="_blank">How Labview stores data in memory is documented here.</a>  Indirectly, this documents how binary files are stored on disk.  Our DAQ program writes a rather complex &#8220;cluster&#8221; (Labview&#8217;s version of a C structure) to disk.  The elements of the cluster are stored contiguously as a sequence of bytes, and there&#8217;s no way to know which byte goes with which element, unless you know the size of each element and the order in which they are stored in the cluster.  So, the first step is to document the cluster that&#8217;s being written to disk.  You can use the context help in Labview to view the data type of the wire that leads to the VI that writes the file.  With this in hand, you are ready to write Python code.</p>
<p>First, make sure you open the file in binary mode:</p>
<pre>binaryFile = open("Measurement_4.bin", mode='rb')</pre>
<p>Now you can use the <strong>file.read(<em>n</em>)</strong> command to read <em>n</em> bytes of data from the file.  This data is read as a string, so you will need the <strong><a href="http://docs.python.org/lib/module-array.html" title="Python array module docs" target="_blank">struct</a> </strong>module to interpret the string as packed binary data.  This is what it looks like:</p>
<pre> (data.offset,) = struct.unpack('&gt;d', binaryFile.read(8))</pre>
<p>The first argument to <strong>struct </strong>is a format string.  The &#8216;&gt;&#8217; tells <strong>struct </strong>to interpret the data as big-endian (the default for Labview) and the &#8216;d&#8217; tells it to produce a data type of double.  The data type has to match the number of bytes read in by <strong>file.read()</strong>.  Remember that we&#8217;re reading the file sequentially, and there are no delimiters, so if you read in the wrong number of bytes for any data, all the subsequent data will be junk.</p>
<p>One final note about arrays: arrays are represented by a 32-bit dimension, followed by the data.  If the array contains no elements, it is stored as 32 zero bits with no other data.  It would probably be a good idea to use the Python <strong>array </strong>module if you need to read in large arrays efficiently.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shocksolution.com/blog/2008/06/25/reading-labview-binary-files-with-python/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Server move completed and general update</title>
		<link>http://www.shocksolution.com/blog/2008/06/22/server-move-completed-and-general-update/</link>
		<comments>http://www.shocksolution.com/blog/2008/06/22/server-move-completed-and-general-update/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 19:37:44 +0000</pubDate>
		<dc:creator>craig</dc:creator>
		
		<category><![CDATA[Lighting]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Software development]]></category>

		<guid isPermaLink="false">http://www.shocksolution.com/blog/2008/06/22/server-move-completed-and-general-update/</guid>
		<description><![CDATA[The site is back online after a server move.  Actually I can&#8217;t blame the server move for the downtime, because I went out of town and then had a lot of catching up to do, and as a result I didn&#8217;t switch the domain to point to the new server.
I haven&#8217;t been blogging much because [...]]]></description>
			<content:encoded><![CDATA[<p>The site is back online after a server move.  Actually I can&#8217;t blame the server move for the downtime, because I went out of town and then had a lot of catching up to do, and as a result I didn&#8217;t switch the domain to point to the new server.</p>
<p>I haven&#8217;t been blogging much because I haven&#8217;t done much software development, Linux admin, or lighting design lately.  I have been busy in the lab at work and I&#8217;ve been supervising a trainee lighting operator instead of running my own shows.  We haven&#8217;t been moving forward with plans to purchase a new lighting control console, so no update on that, either.  Hopefully, I&#8217;ll have something interesting to post soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shocksolution.com/blog/2008/06/22/server-move-completed-and-general-update/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Presentation at BarCamp Orlando 2008</title>
		<link>http://www.shocksolution.com/blog/2008/04/06/presentation-at-barcamp-orlando-2008/</link>
		<comments>http://www.shocksolution.com/blog/2008/04/06/presentation-at-barcamp-orlando-2008/#comments</comments>
		<pubDate>Mon, 07 Apr 2008 03:14:32 +0000</pubDate>
		<dc:creator>craig</dc:creator>
		
		<category><![CDATA[Software development]]></category>

		<guid isPermaLink="false">http://www.shocksolution.com/blog/2008/04/06/presentation-at-barcamp-orlando-2008/</guid>
		<description><![CDATA[I gave a presentation at BarCamp Orlando on 5 April 2008.  Here is a link to my presentation, Data Analysis with Python.
]]></description>
			<content:encoded><![CDATA[<p>I gave a presentation at BarCamp Orlando on 5 April 2008.  Here is a link to my presentation, <a href="http://www.shocksolution.com/blog/wp-content/uploads/2008/04/dataanalysiswithpython.pdf" title="Data Analysis with Python">Data Analysis with Python</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shocksolution.com/blog/2008/04/06/presentation-at-barcamp-orlando-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Connecting to a Windows file server from a Linux box</title>
		<link>http://www.shocksolution.com/blog/2008/01/23/connecting-to-a-windows-file-server-from-a-linux-box/</link>
		<comments>http://www.shocksolution.com/blog/2008/01/23/connecting-to-a-windows-file-server-from-a-linux-box/#comments</comments>
		<pubDate>Wed, 23 Jan 2008 18:26:00 +0000</pubDate>
		<dc:creator>craig</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.shocksolution.com/blog/2008/01/23/connecting-to-a-windows-file-server-from-a-linux-box/</guid>
		<description><![CDATA[I was surprised how hard it was to find out how to mount a Windows file server as a drive on a Linux box.  Fortunately, once I found out how, it was really pretty easy.  First of all, you DO NOT need Samba.  Most of the information I found on the web [...]]]></description>
			<content:encoded><![CDATA[<p>I was surprised how hard it was to find out how to mount a Windows file server as a drive on a Linux box.  Fortunately, once I found out how, it was really pretty easy.  First of all, you DO NOT need Samba.  Most of the information I found on the web involved installing Samba and using your Linux box as a file server for Windows machines.  If you want the Linux machine to be a <em>client</em> to a Windows server, Samba is not required.  You need to enable support for the <strong>cifs</strong> filesystem in your kernel&#8211;in fact, it&#8217;s probably already compiled in (cifs is just a &#8220;rebranding&#8221; of smb).  Then install the <a href="http://linux-cifs.samba.org/" title="mount-cifs" target="_blank">mount-cifs</a> utility and you&#8217;re ready to go.  Here is a command line  you can use to mount a shared partition on a Windows server:<br />
<code> mount -t cifs //xx.xx.xx.xx/sharename /mnt/server -v -o user=myusername,prefixpath="myhomedirectory",noperm</code></p>
<p>It will prompt you for your password.  You might need to tweak the options&#8211;for example, the <strong>noperm</strong> option prevents Linux from trying to map Windows permissions to Linux permissions.  This is necessary on my network to enable Linux to copy nested directories to the Windows share.  Once you get it working, it can be added to fstab like any other file system.<br />
<code>//xx.xx.xx.xx/sharename   /mnt/server       cifs            user,credentials=/etc/cifs_credentials,noperm         0 0</code></p>
<p>The cifs_credentials file can have any file name, in any location you choose, with the format described in the man page for mount.cifs.   Since this file will contain your network login and password, make sure it can be read only by root or the user who owns those credentials.</p>
<p>For reference: <a href="http://ubuntuforums.org/archive/index.php/t-318943.html" title="Ubuntu forums thread">mount-cifs thread on the Ubuntu forums</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.shocksolution.com/blog/2008/01/23/connecting-to-a-windows-file-server-from-a-linux-box/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Found a bunch of templates</title>
		<link>http://www.shocksolution.com/blog/2008/01/22/found-a-bunch-of-templates/</link>
		<comments>http://www.shocksolution.com/blog/2008/01/22/found-a-bunch-of-templates/#comments</comments>
		<pubDate>Tue, 22 Jan 2008 21:02:05 +0000</pubDate>
		<dc:creator>craig</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.shocksolution.com/blog/2008/01/22/found-a-bunch-of-templates/</guid>
		<description><![CDATA[I use XFCE as my window manager, with Thunar as my file manager.  Thunar has always had this &#8220;Create Document -&#62; from template&#8221; entry in the File menu, but it didn&#8217;t come with any templates.  I finally went looking for some templates, and found a good collection at stalefries.  Just unpack the archive in a [...]]]></description>
			<content:encoded><![CDATA[<p>I use XFCE as my window manager, with Thunar as my file manager.  Thunar has always had this &#8220;Create Document -&gt; from template&#8221; entry in the File menu, but it didn&#8217;t come with any templates.  I finally went looking for some templates, and found a good collection at <a href="http://stalefries.googlepages.com/howtosnautilustemplates" title="stalefries' document templates" target="_blank">stalefries</a>.  Just unpack the archive in a directory called &#8220;Templates&#8221; in your home directory.</p>
<p>BTW, isn&#8217;t it about time I created a &#8220;linux&#8221; category instead of trying to stuff my Linux entries under the &#8220;software development&#8221; category?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shocksolution.com/blog/2008/01/22/found-a-bunch-of-templates/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cheap LED fixtures</title>
		<link>http://www.shocksolution.com/blog/2008/01/11/cheap-led-fixtures/</link>
		<comments>http://www.shocksolution.com/blog/2008/01/11/cheap-led-fixtures/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 05:23:47 +0000</pubDate>
		<dc:creator>craig</dc:creator>
		
		<category><![CDATA[Lighting]]></category>

		<guid isPermaLink="false">http://www.shocksolution.com/blog/2008/01/11/cheap-led-fixtures/</guid>
		<description><![CDATA[Normally, we stay far away from anything marketed to DJ&#8217;s, but we&#8217;ve been experimenting with cheap LED fixtures as an inexpensive way to put more colors on stage.  LED fixtures have a few advantages: they efficiently produce light without much heat, they don&#8217;t require a dimmer, and they can produce multiple colors without gel changes.  [...]]]></description>
			<content:encoded><![CDATA[<p>Normally, we stay far away from anything marketed to DJ&#8217;s, but we&#8217;ve been experimenting with cheap LED fixtures as an inexpensive way to put more colors on stage.  LED fixtures have a few advantages: they efficiently produce light without much heat, they don&#8217;t require a dimmer, and they can produce multiple colors without gel changes.  They also have some disadvantages.  Color mixing is produced by combining LED&#8217;s of different colors (RGB) at different intensities, so the color is only &#8220;mixed&#8221; at the surface it is illuminating.  It can be difficult to produce white light that matches light from other fixtures.  LED&#8217;s cannot be dimmed by lowering the voltage, like a conventional light.  Instead the LED is strobed (pulsed) at a rate too fast for your eye to discern.  Unfortunately, the Chauvet ColorPalette fixtures shown below use a pulse rate that is slow enough that it can be picked up on a video camera.  When the fixtures illuminate a set piece like this one, which is in the background of many IMAG shots, the flicker is very distracting if the intensity is run at anything less than 100%</p>
<p><a href="http://www.flickr.com/photos/a_mirror_dimly/1527795969/" class="tt-flickr"><img src="http://farm3.static.flickr.com/2162/1527795969_b1a81dc2ff_t.jpg" alt="COLORpalette LED washes" border="0" height="75" width="100" /></a></p>
<p>Practically speaking, when a Color Palette is visible on camera,we can only get seven full-intensity colors: red, blue, green, white, purple, blue-green, and yellow.   We&#8217;ve since moved them out into the auditorium where they are used to illuminate the walls.  We did find one really cool application for these lights.  We have a number of deep-purple, &#8220;blacklight&#8221; Color Palettes mounted backstage to enable people to move in the dark.  They stay on all the time, draw very little power, and are totally invisible to the audience, even during a dead blackout.</p>
<p><a href="http://www.flickr.com/photos/a_mirror_dimly/1527795941/" class="tt-flickr"><img src="http://farm3.static.flickr.com/2088/1527795941_19043cc3bd_t.jpg" alt="COLORado 1 LED closeup" border="0" height="92" width="100" /></a></p>
<p>This is a Chauvet COLORado 1, which is meant to replace a small par can. It&#8217;s mounted on a pipe above and behind the musicians and lights them from behind.  This is the view you get from the front row in the audience.  See the red, blue, and green LEDs?  That&#8217;s producing white light, but you wouldn&#8217;t know it from this angle.  That&#8217;s what happens when the colors don&#8217;t mix at the light.  We don&#8217;t have the strobing problem on video with the COLORado&#8217;s, but I don&#8217;t know if that&#8217;s due to their positioning or their design.</p>
<p>For more information, see <a href="http://www.onstagelighting.co.uk/category/led-stage-lighting/" title="onstagelighting LED reviews" target="_blank">the LED lighting reviews by onstagelighting.co.uk</a>.  There are also pro-grade LED fixtures that are much better&#8230;but I haven&#8217;t used them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shocksolution.com/blog/2008/01/11/cheap-led-fixtures/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cool set design: Part II</title>
		<link>http://www.shocksolution.com/blog/2008/01/03/cool-set-design-part-ii/</link>
		<comments>http://www.shocksolution.com/blog/2008/01/03/cool-set-design-part-ii/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 02:07:09 +0000</pubDate>
		<dc:creator>craig</dc:creator>
		
		<category><![CDATA[Lighting]]></category>

		<category><![CDATA["discovery church" stage set lighting design]]></category>

		<guid isPermaLink="false">http://www.shocksolution.com/blog/2008/01/03/cool-set-design-part-ii/</guid>
		<description><![CDATA[Here&#8217;s another cool set design.  What&#8217;s interesting about these two pictures is that the set is illuminated using the same lights at two different intensity levels, but the color seems different.  That&#8217;s a neat feature of incandescent lights&#8211;at low intensity you can get deep, saturated colors.

Here is a look in another color.

I didn&#8217;t think to [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s another cool set design.  What&#8217;s interesting about these two pictures is that the set is illuminated using the same lights at two different intensity levels, but the color seems different.  That&#8217;s a neat feature of incandescent lights&#8211;at low intensity you can get deep, saturated colors.</p>
<p><a href="http://www.flickr.com/photos/a_mirror_dimly/2156413885/" class="tt-flickr"><img src="http://farm3.static.flickr.com/2325/2156413885_5d0715c797_t.jpg" alt="Message Lights" border="0" height="49" width="100" /></a><a href="http://www.flickr.com/photos/a_mirror_dimly/2156413887/" class="tt-flickr"><img src="http://farm3.static.flickr.com/2331/2156413887_538e547c2f_t.jpg" alt="walk-in lighting" border="0" height="42" width="100" /></a></p>
<p>Here is a look in another color.</p>
<p><a href="http://www.flickr.com/photos/a_mirror_dimly/2156413879/" class="tt-flickr"><img src="http://farm3.static.flickr.com/2119/2156413879_af9a1ca521_t.jpg" alt="Holy Is The Lord" border="0" height="45" width="100" /></a></p>
<p>I didn&#8217;t think to take close-up pictures of this set.  It turns out that our set designer likes to have these pictures, so now I&#8217;m trying to do a more thorough job.   This one is constructed of a wooden frame with a light colored wrinkly fabric stapled to it.  Like I said, I don&#8217;t design or build these things, but if you want to know the details, I&#8217;m sure I can find out for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shocksolution.com/blog/2008/01/03/cool-set-design-part-ii/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
