<?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>Prodigy Productions, LLC</title>
	<atom:link href="http://www.prodigyproductionsllc.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.prodigyproductionsllc.com</link>
	<description>Learn software development, computer vision, and A.I. programming.</description>
	<lastBuildDate>Mon, 30 Jan 2012 15:23:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Avoid Using EventSource (Server-Sent Events)</title>
		<link>http://www.prodigyproductionsllc.com/articles/programming/javascript/avoid-using-eventsource-server-sent-events/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/programming/javascript/avoid-using-eventsource-server-sent-events/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 05:05:47 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2317</guid>
		<description><![CDATA[Earlier this month, I told you about a new project I&#8217;m working on for a real-time collaboration platform. During the early stages of development, I tested several technologies to use for communicating with the platform from a web browser. Well, today I want to talk about one of those technologies and the reason it wasn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/google_chrome_logo.jpg"><img class="alignleft  wp-image-2325" title="google_chrome_logo" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/google_chrome_logo.jpg" alt="Google Chrome Logo" width="143" height="102" /></a>Earlier this month, I told you about a new project I&#8217;m working on for a real-time collaboration platform. During the early stages of development, I tested several technologies to use for communicating with the platform from a web browser. Well, today I want to talk about one of those technologies and the reason it wasn&#8217;t selected. I&#8217;m talking about &#8220;EventSource&#8221; (aka &#8220;Server-Sent Events&#8221; or &#8220;SSE&#8221; for short). Even though SSE is cool and fun to learn, I would highly recommend staying away from it for anything running in a production environment. Let me explain why.</p>
<p><span id="more-2317"></span>To begin with, what are &#8220;server-sent events&#8221;? Basically, SSE is a one-way technology used for streaming content from a server to the browser. Until recently, web browsers were not designed with the intent of listening for messages from a server. Instead, they were designed to call a server when they wanted something and disconnect once the data had been received. For today&#8217;s purposes, this isn&#8217;t enough. So, technologies like SSE were created that will &#8220;listen&#8221; for messages that are sent from the server.</p>
<p>Take chat rooms for example. Chat rooms are intended to allow multiple users to connect to a central server where messages can be posted and re-posted to all connected clients. Until recently, browsers would have to continuously refresh, making new requests each time, back to the server to check for messages posted from other users. As you can see, this is not a very efficient way of handling things like this. Instead, technologies like SSE will make one connection to a server and will listen for any message posted from any user.</p>
<p>But, like I said earlier, SSE is a &#8220;one-way&#8221; technology. Well, what does that mean? This means that SSE is only designed to &#8220;listen&#8221; for messages sent from the server. SSE is not designed to post messages back to the server. Technologies such as WebSockets allow for a two-way communication over a single connection. So, you can probably already see one of the reasons why SSE was not the technology of choice for my real-time collaboration platform.</p>
<p>Aside from the fact that SSE is a one-way technology, there are still a few other reasons why I suggest avoiding SSE. For example, SSE is not supported by all browsers. In fact, Chrome is the only browser I know of that fully supports EventSource. So, unless you plan on limiting your users to only using Chrome, you will have to write your own version of EventSource, which I did just for fun. But, that&#8217;s for another article. Ok. SSE is a one-way technology and isn&#8217;t cross-browser compatible. That makes 2 reasons why I suggest avoiding SSE. What else?</p>
<p>Even though SSE isn&#8217;t cross-browser compatible, I decided to make my own version which is. But still, that too isn&#8217;t enough. The next reason for avoiding SSE is probably the biggest. Apparently, EventSource has a huge memory leak. Now, before you start sending me hate mail claiming that the memory leak only exists in my hand-written version of EventSource, I have proven that the memory leak also exists in Chrome&#8217;s native EventSource and I provide a test case to prove that at the end of this article.</p>
<p>So, what is this memory leak I speak of? Well, in order to make SSE work, you have to bind a connection to the server that never closes. And this is where the memory leak comes in. Once you bind that persistent connection, the server will continuously pump down data thru that connection back to the client. If not handled properly, this will cause your browser to eat up all of your system resources until the browser crashes.</p>
<p>You&#8217;ll probably notice that I said &#8220;if not handled properly&#8221;. If done correctly, SSE can have less of an impact on your browser. For example, when you log into Facebook and sit there for a while, if someone else sends you a message, your browser will notify you without requiring any interaction from you such as refreshing your browser. To do that using SSE, you could store a variable for the last message sent or add an ID to your messages. Then, when a new message is ready to be sent, you can compare the 2 messages. If the messages or message IDs are alike, you can simply ignore the message and not send it to the client. If the messages are different, you can send the new message to the client and set the value of the last message to that of the new message so that upon the next iteration of your messages, the new message will not be duplicated and re-sent to the client.</p>
<p>But, what if you wanted to create a page that monitors the performance of your server? Maybe you want to have your server tell you how many clients it has connected to it or how much memory your server is consuming. Well, since these are variables that can and will most likely change quite often, this is where the memory leak comes in when working with SSE. Since that data will continuously be sent to the client, the browser will be constantly collecting data until it runs out of resources and &#8220;KABOOM!&#8221; The browser crashes. Let&#8217;s take a look at an example of this.</p>
<p>To prove this memory leak exists, I have created a simple HTTP server using Python and have created a test client using HTML and Javascript. Since I won&#8217;t be including my custom version of EventSource, the client used in this example will only work in Chrome. So, let&#8217;s begin.</p>
<p>In order for SSE to work, you have a couple of guidelines you must follow. The first is that you must return the content-type header as &#8220;text/event-stream&#8221;. Next, you must return a specific body structure to the client where each variable is written on a separate line. For example, one line must include the event your client will be listening for. In this example, my event is called &#8220;message&#8221;. So, I will return &#8220;event: message&#8221; in the response body. Then, on another line, I can include things such as message IDs or whatever I want. But, the last line needs to be a variable for &#8220;data&#8221;. This variable will contain any content you want posted to the client. For this example, my &#8220;data&#8221; variable will contain a timestamp which Python will provide me.</p>
<p><pre class="brush: python">from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
import time

class RequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('content-type', 'text/event-stream')
        self.end_headers()
        while True:
            self.wfile.write('event: message\nid: 1\ndata: {0}\ndata:\n\n'.format(time.time()))
        
serveraddr = ('', 9292)
srvr = HTTPServer(serveraddr, RequestHandler)
srvr.serve_forever()
</pre></p>
<p>As you can see, the server listens on all IP addresses on port 9292 for incoming requests. Once a connection is established, it returns a 200 success response with header &#8220;content-type&#8221; of &#8220;text/event-stream&#8221;. Then, it goes into a loop where it continuously sends the time to the client. It&#8217;s a very simple example. So, you shouldn&#8217;t have any problems figuring it out.</p>
<p>Next, we need to create a client that can listen for messages from the server. Again, this is a very simple example. So, you shouldn&#8217;t have any issues following it either. But,  I&#8217;ll still explain it anyways. First, you&#8217;ll see that I have a div with an id of &#8220;ticker&#8221;. This is where we will write the response from the server. Next, you&#8217;ll see that there&#8217;s a javascript variable for a new EventSource object. The only parameter required for EventSource is the URL to the server you will be calling. After that, I&#8217;ve added an event listener that will fire every time EventSource gets an event from the server. As I mentioned earlier, I am using the event name &#8220;message&#8221;. But, you can change this to whatever you want as long as you also change it in the server. Inside that event handler, I simply take the response from the server and plug that into the div we built earlier. So, when we run this example, the server will return the time which is written into the &#8220;data&#8221; variable. Once that&#8217;s received, the div that reads &#8220;[TIME]&#8221; will show the the server time instead of the placeholder &#8220;[TIME]&#8220;. Here is my client which I named &#8220;sseclient.html&#8221;:</p>
<p><pre class="brush: xml">&lt;html&gt;
&lt;body&gt;
&lt;div id=&quot;ticker&quot;&gt;[TIME]&lt;/div&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
   var source = new EventSource('http://localhost:9292/');
   source.addEventListener(&quot;message&quot;, eventHandler, false);
   function eventHandler(event)
   {
       document.querySelector('#ticker').innerHTML = event.data;
   }
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></p>
<p>Ok. Now we have our client built. However, if you run this from your filesystem as-is, you&#8217;re going to encounter the good &#8216;ol DOM Exception: &#8220;<span style="color: #ff0000;">Uncaught Error:SECURITY_ERR: DOM Exception 18</span>&#8220;. This occurs because you are attempting to use Javascript to call an external domain. Even if you run this example client from &#8220;localhost&#8221;, by changing the port number, the browser will see this as a different domain and will throw the DOM exception. In order to get around this, you will need to create some sort of proxy using something like PHP and Curl. However, instead of going thru all of that, I chose to go with a simpler approach and use some of the resources I already had available. Since I already had Apache installed on my computer, I opened Apache&#8217;s httpd.conf file (located in &#8220;Apache Install Folder/conf/&#8221;) and enabled &#8220;mod_proxy&#8221; and &#8220;mod_rewrite&#8221;. After I restarted Apache, I copied my sseclient.html example file into the root &#8220;htdocs&#8221; folder of Apache so that I could call my file from the URL &#8220;http://localhost/sseclient.html&#8221;.</p>
<p>But, that too isn&#8217;t enough to bypass the DOM exception. In the &#8220;htdocs&#8221; folder, I created a file called &#8220;.htaccess&#8221;. Make sure you include the beginning &#8220;.&#8221; (period) before the file name. Inside that file, I checked to make sure mod_rewrite was available and enabled the rewrite engine if it was. Next, I added my rewrite rule which pointed to my Python server running on localhost on port 9292. Here is the entire contents of my &#8220;.htaccess&#8221; file:</p>
<p><span style="color: #0000ff;">&lt;IfModule mod_rewrite.c&gt;</span><br />
<span style="color: #0000ff;"> RewriteEngine on</span><br />
<span style="color: #0000ff;"> RewriteRule client http://localhost:9292/ [NC,L,P]</span><br />
<span style="color: #0000ff;"> &lt;/IfModule&gt;</span></p>
<p>You&#8217;ll notice that my rewrite rule includes the word &#8220;client&#8221;. This is the URL pattern I want to watch for and proxy all requests to my Python server. So, back in sseclient.html,  I had to change the URL parameter of EventSource to match. Here is what that now looks like:</p>
<p><span style="color: #0000ff;">var source = new EventSource(&#8216;/client&#8217;);</span></p>
<p>Alrighty. That&#8217;s everything you need to test this memory leak. So, to test it, start your Python server. Then, open up Chrome and press the F12 key to open the debugger window. Next, click on the &#8220;Network&#8221; tab so that you can see all requests. Once you have the &#8220;Network&#8221; debugger window open, browse to &#8220;http://localhost/sseclient.html&#8221;. When you do that, you should see 2 requests in your Network window. One request should be for &#8220;sseclient.html&#8221; (or whatever you named your HTML client) and the other should be for &#8220;/client&#8221;. If everything worked correctly, you should not see &#8220;[TIME]&#8221; in your page. Instead, you should see a number that looks something like &#8220;1327935361.6&#8243;. You should also see the Timeline bar in your Network tab rising. At this point, you should also see the Size column for &#8220;/client&#8221; rising very quickly. In just a couple of seconds, the Size column for my &#8220;/client&#8221; jumped to over 10MB. If you open Task Manager, you will see the memory utilization go thru the roof for Chrome there as well. These are the indicators that tell me EventSource has a memory leak.</p>
<p>If you have any questions or suggestions, please let me know in the comments below. In another post, I will share with you the technology and approach I used in place of server-sent events and EventSource.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/programming/javascript/avoid-using-eventsource-server-sent-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I couldn&#8217;t agree more!</title>
		<link>http://www.prodigyproductionsllc.com/articles/general/i-couldnt-agree-more/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/general/i-couldnt-agree-more/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 17:33:13 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2312</guid>
		<description><![CDATA[I just read this on Slashdot and wanted to re-post it as I am totally 100% on board with the original author: &#8220;Obama&#8217;s State of the Union focused on the return of manufacturing jobs to America. This New Yorker story makes the case that the manufacturing jobs aren&#8217;t going to come back, and he should [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/state_of_the_union2012.jpg"><img class="alignleft  wp-image-2314" title="state_of_the_union2012" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/state_of_the_union2012.jpg" alt="2012 Presidential State of the Union" width="192" height="128" /></a>I just read this on <a title="Slashdot" href="http://tech.slashdot.org/story/12/01/27/1542207/americas-future-is-in-software-not-hardware" target="_blank">Slashdot</a> and wanted to re-post it as I am totally 100% on board with the original author:</p>
<p>&#8220;Obama&#8217;s <a title="State of the Union" href="http://www.whitehouse.gov/the-press-office/2012/01/24/remarks-president-state-union-address" target="_blank">State of the Union</a> focused on the return of manufacturing jobs to America. This New Yorker story makes the case that <a title="The manufacturing jobs aren't coming back" href="http://www.newyorker.com/online/blogs/newsdesk/2012/01/apple-and-obama.html" target="_blank">the manufacturing jobs aren&#8217;t going to come back, and he should be focusing on software</a>. Quoting: &#8216;Yes, there are industries where manufacturing jobs can be brought back to America through proper tax incentives and training programs. But maybe he should have talked more about the things that he could do to keep software jobs here. He spoke of federal funding for university and scientific research. But a real pro-software agenda would also include reforming patent law to stop trolling (and perhaps eliminating software patents altogether); increasing H-1B visas for highly skilled coders; stopping Congress from defunding DARPA, whose research helped create Siri, the iPhone’s talking assistant; and opening up the unused, federally owned wireless spectrum. That agenda wouldn’t bring Apple’s manufacturing jobs back, but it would help to keep the company’s coding jobs here. And it would certainly help develop &#8220;an economy that’s built to last.&#8221;&#8216;&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/general/i-couldnt-agree-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# Woot! Off Notifier</title>
		<link>http://www.prodigyproductionsllc.com/articles/programming/c-woot-off-notifier/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/programming/c-woot-off-notifier/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 05:04:27 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2293</guid>
		<description><![CDATA[Yesterday, I showed you how to create a Woot! Off notifier using Python. As promised, I&#8217;m now going to show you how to create a Woot! Off notifier using C#. In case you didn&#8217;t read yesterday&#8217;s article, it basically told how I love Woot! Off&#8217;s, but hate having to constantly refresh my browser to check [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2010/12/woot_logo.jpg"><img class="alignleft size-full wp-image-729" title="woot! Logo" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2010/12/woot_logo.jpg" alt="woot! Logo" width="151" height="53" /></a>Yesterday, I showed you <a title="Python Woot! Off Notifier" href="http://www.prodigyproductionsllc.com/articles/programming/python-woot-off-notifier/">how to create a Woot! Off notifier using Python</a>. As promised, I&#8217;m now going to show you how to create a <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> Off notifier using C#. In case you didn&#8217;t read yesterday&#8217;s article, it basically told how I love <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> Off&#8217;s, but hate having to constantly refresh my browser to check for new items. Instead, I decided to write a tool that does that for me. In the Python version I wrote, it only displays the item name and price. In today&#8217;s article, I&#8217;m taking it a bit further by showing you how to create a Windows Form that displays the item description along with the item name and price. And, I even show you how to display the item image and the progress bar that shows how many items are left just like on the <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> site. So, let&#8217;s get started.</p>
<p><span id="more-2293"></span>The first thing you need to do is to fire up Visual C# and create yourself a new Windows Form application. Once you have your application built, you will need to add a few controls to your form. So, go ahead and add a picture box control for displaying the item image, a rich text box control for displaying the item information such as name, price, and description, a progress bar for showing how many items are remaining, a numeric up / down control for setting the wait interval, and a button control for starting and stopping the thread that we&#8217;ll use for our timer. You can layout your form however you want. Here&#8217;s what my layout looks like:</p>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/csharp_woot_off_layout.png"><img class="aligncenter size-full wp-image-2297" title="csharp_woot_off_layout" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/csharp_woot_off_layout.png" alt="C# Woot! Off Form Layout" width="447" height="214" /></a>For this demo, I&#8217;ll be working with System.Threading.Thread to give our application a way to repeat the check for new items. But, you don&#8217;t have to use threads. If you&#8217;d prefer, you can use the Background Worker Control found in your toolbox. The reason you need to use either a Thread or a Background Worker is because your app will freeze, preventing you from changing your wait interval or clicking the Stop button while the application waits. Here are the dependencies I&#8217;m working with and the thread I&#8217;m using to do the work. You&#8217;ll also see that I&#8217;ve declared the <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> url as a global variable as well. This isn&#8217;t really needed, but I did it anyways.</p>
<p><span style="color: #0000ff;">using</span> System;<br />
<span style="color: #0000ff;">using</span> System.Drawing;<br />
<span style="color: #0000ff;">using</span> System.IO;<br />
<span style="color: #0000ff;">using</span> System.Net;<br />
<span style="color: #0000ff;">using</span> System.Text.RegularExpressions;<br />
<span style="color: #0000ff;">using</span> System.Threading;<br />
<span style="color: #0000ff;">using</span> System.Windows.Forms;</p>
<p><span style="color: #0000ff;">private</span> <span style="color: #008080;">Thread</span> _workerThread;<br />
<span style="color: #0000ff;">private string</span> _url = <span style="color: #800000;">&#8220;</span><span style="color: #0000ff;">http://www.woot.com</span><span style="color: #800000;">&#8220;</span>;</p>
<p>Typically, when working with threads, you will need to use delegates when accessing form components to prevent cross thread exceptions. But, to keep things simple, we&#8217;re just going to tell our app to not check for illegal cross thread calls. To do that, we only need to add one line to our form&#8217;s constructor.</p>
<p>CheckForIllegalCrossThreadCalls = <span style="color: #0000ff;">false</span>;</p>
<p>Next, you will need to add a click event listener to the button you added earlier. This event handler is where we will create and start our worker thread. When you build your new thread, you will need to pass it a function which will be where the work actually takes place. I called my thread function &#8220;Run&#8221; as shown below, but you can call yours whatever you want.</p>
<p>_workerThread = <span style="color: #0000ff;">new</span> <span style="color: #008080;">Thread</span>(<span style="color: #0000ff;">new</span> <span style="color: #008080;">ThreadStart</span>(Run));<br />
_workerThread.Start();</p>
<p>After you&#8217;ve setup your thread, make sure you have a function created with the same name as the name you passed to your ThreadStart above. That&#8217;s where we&#8217;ll be doing all of the heavy lifting. Instead of getting into all of the details about how to make your call to <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a>, I&#8217;m just going to go ahead and show you the code.</p>
<p><pre class="brush: csharp">        private void Run()
        {
            WebClient wc = new WebClient();
            wc.UseDefaultCredentials = true;
            wc.Proxy = WebRequest.DefaultWebProxy;
            wc.Proxy.Credentials = CredentialCache.DefaultCredentials;

            while (true)
            {
                txtDescription.Text = &quot;&quot;;
                pctImage.Image = null;
                pctImage.Invalidate();
                status.Value = 0;

                string html = wc.DownloadString(_url);
                Match m = Regex.Match(html, &quot;&lt;meta property=\&quot;og:title\&quot; content=\&quot;(.*?)\&quot; /&gt;&quot;);
                if (m.Success)
                {
                    string title = m.Groups[1].Value;
                    txtDescription.AppendText(title + &quot;\n\n&quot;);
                }
                m = Regex.Match(html, &quot;&lt;span class=\&quot;amount\&quot;&gt;(.*?)&lt;/span&gt;&quot;);
                if (m.Success)
                {
                    string amount = m.Groups[1].Value;
                    txtDescription.AppendText(&quot;$&quot; + amount + &quot;\n\n&quot;);
                }
                m = Regex.Match(html, &quot;&lt;meta property=\&quot;og:image\&quot; content=\&quot;(.*?)\&quot; /&gt;&quot;);
                if (m.Success)
                {
                    string imgUrl = m.Groups[1].Value;
                    pctImage.ImageLocation = imgUrl;
                }
                m = Regex.Match(html, &quot;&lt;div class='wootOffProgressBarValue' style='width:(.*?)%'&gt;&lt;/div&gt;&quot;);
                if (m.Success)
                {
                    int s = int.Parse(m.Groups[1].Value);
                    status.Value = s;
                }
                m = Regex.Match(html.Replace(&quot;\r&quot;, &quot;&quot;).Replace(&quot;\n&quot;, &quot;&quot;).Replace(&quot;\t&quot;, &quot;&quot;).Replace(&quot;  &quot;, &quot;&quot;), &quot;&lt;dt&gt;Product:&lt;/dt&gt;&lt;dd&gt;(.*?)&lt;/dd&gt;&quot;);
                if (m.Success)
                {
                    string description = m.Groups[1].Value.Trim();
                    txtDescription.AppendText(description + &quot;\n&quot;);
                }

                Thread.Sleep(Convert.ToInt32(interval.Value) * 1000);
            }
        }</pre></p>
<p>The most important piece to note here is that I&#8217;m using System.Net.WebClient to make the call to <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> to download the HTML which we&#8217;ll be scraping to find the important pieces. You&#8217;ll also notice that I&#8217;ve wrapped a good portion of this code with a &#8220;while&#8221; loop that never ends. That&#8217;s because I want this app to continuously check for new items either until I close the app or click the Stop button. I&#8217;m using System.Text.RegularExpressions.Regex to search for the item name, price, description, and image URL. Once found, that information gets appended to the rich text box we created earlier. If we hadn&#8217;t added the &#8220;CheckForIllegalCrossThreadCalls = false&#8221; line earlier, this is where we would&#8217;ve hit the Illegal Cross Thread Exception.</p>
<p>At the end of the function, you&#8217;ll see that I&#8217;m also System.Threading.Thread to tell the application to &#8220;wait&#8221; for a given amount of time. The Sleep method expects a time interval in milliseconds. Since our numeric up / down control only has the time in seconds, we simply multiply that value times 1000 to get the time into milliseconds.</p>
<p>Well, that&#8217;s pretty much it. If everything worked accordingly, you should be able to run your app and should see something like shown below. Keep in mind that this is only intended to be used on days that there&#8217;s a <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> Off happening. Even though it&#8217;ll probably work on other days, it hasn&#8217;t been tested and might not work as expected. If you are interested, I have provided the entire application solution available for download from <a title="C# Woot! Off Notifier" href="http://www.prodigyproductionsllc.com/downloads/CSharpWootOff.zip">http://www.prodigyproductionsllc.com/downloads/CSharpWootOff.zip</a>. It contains a couple of extra things not mentioned here that make the app complete such as checking if the worker thread is not null and is active and killing it if it is when closing the app.</p>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/csharp_woot_off.png"><img class="aligncenter size-full wp-image-2296" title="csharp_woot_off" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/csharp_woot_off.png" alt="C# Woot! Off Notifier Example" width="479" height="241" /></a>As always, please leave your comments, questions, and suggestions in the comments section below and I&#8217;ll answer you as soon as possible. Until next time, HAPPY CODING!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/programming/c-woot-off-notifier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Woot! Off Notifier</title>
		<link>http://www.prodigyproductionsllc.com/articles/programming/python-woot-off-notifier/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/programming/python-woot-off-notifier/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 05:05:54 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2285</guid>
		<description><![CDATA[If you&#8217;re like me, you enjoy the occasional Woot! Off. If you aren&#8217;t like me, there&#8217;s a good chance you don&#8217;t even know what a Woot! Off is. Hell, you probably don&#8217;t even know what Woot! is. If you aren&#8217;t familiar with Woot!, you should checkout an article I wrote a while back called &#8220;woot! woot! woot! [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2010/12/woot_logo.jpg"><img class="alignleft size-full wp-image-729" title="woot! Logo" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2010/12/woot_logo.jpg" alt="woot! Logo" width="151" height="53" /></a>If you&#8217;re like me, you enjoy the occasional <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> Off. If you aren&#8217;t like me, there&#8217;s a good chance you don&#8217;t even know what a <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> Off is. Hell, you probably don&#8217;t even know what <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> is. If you aren&#8217;t familiar with <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a>, you should checkout an article I wrote a while back called &#8220;<a title="woot! woot! woot! woot!" href="http://www.prodigyproductionsllc.com/articles/misc/woot-woot-woot-woot/">woot! woot! woot! woot!</a>&#8220;. Catchy title, huh? Anyways, a <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> Off is basically an event that happens periodically where the guys at <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> sell off their inventory one item after the other until everything is gone. Unlike their normal routine of only having one deal a day, a <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> Off can have several items in a short amount of time. It&#8217;s their way of cleaning house. But, you&#8217;ve gotta be quick if you want to land some of the good stuff as it goes quick! You have to constantly refresh your browser to see when something new has arrived. That&#8217;s what lead me to writing this article.</p>
<p><span id="more-2285"></span>Instead of constantly hitting the refresh button in your browser, waiting for something new to arrive, wouldn&#8217;t it just be easier to write a quick tool that would poll <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> for you? Yep. I thought so too. So, being the geek that I am, I fired up my Python Idle GUI and started hammering out some code to that will check with <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> every 60 seconds and print out each item. This tool is a simple screen scraper that downloads the HTML code from <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> and uses regular expressions to search for certain pieces of code, the pieces that contain things like item name and price.</p>
<p>I&#8217;ve written <a title="Write a Screen Scraper with Python" href="http://www.prodigyproductionsllc.com/articles/programming/write-a-screen-scraper-with-python/">other articles showing how to create screen scrapers using Python</a>. For this tool, I basically used the same thing, but added one extra class that provides me with a timer function which will be used to repeat the <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> check every minute. I&#8217;m sure there are other ways of creating timers and I know there are all kinds of modules out there that do this for me. But, this was a small chunk of code that I used in another project and decided it would be an easy fit here as well. So, without further ado, here is the Python code I wrote for scraping <a title="Woot!" href="http://www.woot.com" target="_blank">Woot!</a> and printing out the current item.</p>
<p><pre class="brush: python">import urllib, sgmllib
import re

from threading import Event, Thread

class RepeatTimer(Thread):
    def __init__(self, interval, function, iterations=0, args=[], kwargs={}):
        Thread.__init__(self)
        self.interval = interval
        self.function = function
        self.iterations = iterations
        self.args = args
        self.kwargs = kwargs
        self.finished = Event()
 
    def run(self):
        count = 0
        while not self.finished.is_set() and (self.iterations &lt;= 0 or count &lt; self.iterations):
            self.finished.wait(self.interval)
            if not self.finished.is_set():
                self.function(*self.args, **self.kwargs)
                count += 1
 
    def cancel(self):
        self.finished.set()

class Woot(sgmllib.SGMLParser):
    def __init__(self, verbose = 0):
        sgmllib.SGMLParser.__init__(self, verbose)
        self.url = &quot;http://www.woot.com&quot;
        self.content = &quot;&quot;

    def get_content(self):
        self.content = urllib.urlopen(self.url).read()
        self.close()
        return self.content

    def get_item_title(self):
        s = self.get_content()
        m = re.search('&lt;meta property=&quot;og:title&quot; content=&quot;(.*?)&quot; /&gt;', s)
        if m:
            return m.group(1)
        else:
            return &quot;&quot;

    def get_item_price(self):
        s = self.get_content()
        m = re.search('&lt;span class=&quot;amount&quot;&gt;(.*?)&lt;/span&gt;', s)
        if m:
            return &quot;${0}&quot;.format(m.group(1))
        else:
            return &quot;N/A&quot;

woot = Woot()

def check_woot():
    print &quot;n&quot;
    print woot.get_item_title()
    print woot.get_item_price()
    woot.close()

r = RepeatTimer(60.0, check_woot)
r.start()
</pre></p>
<p>If you run this code from your Idle GUI, you should see something that looks like this:</p>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/python_woot_off.png"><img class="aligncenter size-full wp-image-2288" title="python_woot_off" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/python_woot_off.png" alt="Python Woot! Off Notifier Example" width="555" height="321" /></a></p>
<p>You can change the wait time for the check to run by changing the first parameter passed to the RepeatTimer class at line 62 above. This parameter is defaulted to 60 seconds.</p>
<p>Feel free to extend this code by using IronPython or something similar to fire alerts when a new item is available. I was going to do that in this article, but decided against it as I&#8217;ve also created a C# version which I&#8217;ll be explaining in my next article. As always, please leave any questions, comments, and / or suggestions in the comments area below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/programming/python-woot-off-notifier/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Strong Typing vs. Loose Typing</title>
		<link>http://www.prodigyproductionsllc.com/articles/programming/strong-typing-vs-loose-typing/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/programming/strong-typing-vs-loose-typing/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 05:05:40 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2281</guid>
		<description><![CDATA[A few days ago, I told you about a conversation I had with some co-workers about the future of programming. One of the questions that was brought up in that conversation was should the &#8220;next programming language&#8221; be strong typed or loose typed? One of the others in the conversation completely believes that strong typing [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/strong_vs_weak.jpg"><img class="alignleft  wp-image-2282" title="strong_vs_weak" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/strong_vs_weak.jpg" alt="Strong vs Weak" width="128" height="96" /></a>A few days ago, I told you about a conversation I had with some co-workers about the future of programming. One of the questions that was brought up in that conversation was should the &#8220;next programming language&#8221; be strong typed or loose typed? One of the others in the conversation completely believes that strong typing is the only way to go. Being a student of all programming languages, I have mixed feelings about this. Before I get into that, let me explain the difference between strong typed and loose typed programming.</p>
<p><span id="more-2281"></span>To begin with, programming is nothing more than writing a list of commands that the computer must follow. To do that efficiently, the program needs to know what data type each object is. For example, the application needs to know if an object is a string or if it&#8217;s an integer. If it&#8217;s a string, the computer doesn&#8217;t know that &#8220;one plus one equals two&#8221;. Instead, the application needs to know that you have 2 objects, both of which are integers and can be added together. That way, when you want to add them, it can simply process 1 + 1 = 2. So, any object that has its object type explicitly defined is known as being &#8220;strong typed&#8221;. Anything that isn&#8217;t explicitly defined is known as being &#8220;loose typed&#8221;.</p>
<p>So, what does it matter which I use? Well, depending on which programming language you use, you will typically be forced to use one or the other. For example, if you&#8217;re programming in languages like Java or C#, you are required to tell the application what the data type is for each object used in your app. If you&#8217;re programming in languages like Perl, PHP, or Python, you don&#8217;t need to define your object types as the interpreters can figure it out on its own.</p>
<p>Ok. Then why should a developer prefer one over the other? Well, depending on who you ask, you will get different answers.  For example, one of my co-workers will only work with languages that rely on strong typing because he feels like it&#8217;s easier to look at a chunk of code, even when taken out of context, and know explicitly what type of object he&#8217;s looking at. While that&#8217;s true, an experienced coder can also look at a loose typed chunk of code and identify what type of objects he is looking at. Does the object value have quotes around it? Is it being used in an arithmetic formula? Does it include a decimal? These are some of the checks that interpreters follow when auto-identifying object types for loosely typed languages.</p>
<p>Even though I like the ability to explicitly tell my application what my object types are, I sometimes feel it time consuming to be required to do this for every object in my application. Take the code snippet below for example.</p>
<p>String name = &#8220;&#8221;;</p>
<p>The object type declaration makes up 35% of that line. Over time, this can add up to a lot of time wasted declaring data types for every object in an app.</p>
<p>There are plenty of other reasons to prefer one method over the other, but I won&#8217;t get into those right now. The examples listed above are enough to raise the question to other developers out there. What method do you prefer? In the comments below, let me know if you prefer strong typing or loose typing and let me know why. In the dicussion I had with my co-workers, we were split down the middle. But, for me, my answer is always based on the language needed for the job at hand.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/programming/strong-typing-vs-loose-typing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s Next for Software Development?</title>
		<link>http://www.prodigyproductionsllc.com/articles/programming/whats-next-for-software-development/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/programming/whats-next-for-software-development/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 18:13:55 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2275</guid>
		<description><![CDATA[Some co-workers and I recently had a conversation about programming and the question was asked, &#8220;what&#8217;s next?&#8221; The conversation started after reading an article about how Oracle is making a lot of changes that are effecting a huge crowd of developers and companies. I&#8217;ve said plenty of times before that i think Oracle will be [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/08/future_next_exit.jpg"><img class="alignleft  wp-image-2157" title="future_next_exit" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/08/future_next_exit.jpg" alt="The Future - Next Exit" width="143" height="114" /></a>Some co-workers and I recently had a conversation about programming and the question was asked, &#8220;what&#8217;s next?&#8221; The conversation started after reading an article about how Oracle is making a lot of changes that are effecting a huge crowd of developers and companies. I&#8217;ve said plenty of times before that i think Oracle will be the down fall of Java. However, one of my co-workers is wrapped up in Java that he feels like it is &#8220;the future&#8221; of programming. If he would have said that back in the &#8217;90s, I would&#8217;ve agreed. But, I don&#8217;t think that statement still stands true today. Let me explain why.</p>
<p><span id="more-2275"></span>Although I believe that Java is a great language, I believe that its time has come that something bigger and better will knock it down. For example, hardware is getting faster and faster with every passing moment. In fact, it&#8217;s pretty much impossible these days to find a processor that doesn&#8217;t have more than 1 core. In the programming world, this is a great thing as it means more speed! However, in the Java world, this is a bad thing as Java isn&#8217;t designed to work with multiple cores. So, you can throw parallel processing out the window when working with Java.</p>
<p>Even though it&#8217;s possible, Java also makes it very difficult to design applications that run distributed. Because of this, it&#8217;s extremely hard to design applications that can be separated onto multiple machines, but still share state or even play well with each other. So, if you want to get more performance out of the hardware itself, you find yourself throwing more memory at the server and adding a faster processor.</p>
<p>Ok. So Java doesn&#8217;t provide support for multi-core processors. It&#8217;s still a mature programming language that&#8217;s used widely enough to continue its growth. That&#8217;s true, but I believe that in about 5 years or so, we&#8217;re going to look back on Java the same way we do about languages like COBOL as we do today. Back in its day, COBOL was a good language. And, even though it&#8217;s still widely used, it&#8217;s still an old technology that people need to let go off and learn to embrace newer technologies. In a few years time, we will be saying the same thing about Java. &#8220;Back in its day, Java was a good language.&#8221; But, we need to stop using technologies just because &#8220;they&#8217;re good today&#8221;. We need to start looking at technologies of tomorrow.</p>
<p>Ok. So what about other languages? Well, there are some other languages out there right now that get just as much game-time as Java like C#. Being a developer of both Java and C#, I would definitely have to lean more toward C# for certain application types because of its willingness to work well with multi-core systems. For example, since the release of .NET 4, Microsoft has made parallel-processing much simpler. Before .NET 4, C# was still capable of working with multiple cores, but it was up to the developer to write their own parallel-processing modules, which were still relatively easy to do. However, even as big of a fan of C# as I am, I&#8217;m still doubting its ability to carry the title of &#8220;the programming language of the future&#8221;.</p>
<p>I know there are a number of other languages out there, languages that far exceed the performance and ease of use of Java and C#. In fact, there are hundreds of languages out there that better utilize multi-core processors and make the whole development process extremely simple. But, I still haven&#8217;t seen anything yet that I would learn towards as being the future of programming. Now, before I start getting hate mail from you guys, I will remind you that I write in almost every programming language you will write to me about. With that said, I am more than qualified to make that statement. So, don&#8217;t be hating on me because you think that I&#8217;m not being fair about any language (C# and Java included) imparticular because I&#8217;m not. I am a huge fan of other languages as well whether they are compiled or interpreted. And, although I will admit that there are some languages out there that fall pretty close to what I would consider the future of programming, I believe that those candidates are still a little too premature to award that title just yet. But, I&#8217;m hoping that over the next couple of years we will see some of those languages evolve into the greatest thing since sliced bread or that someone will come along with something even better than anything I&#8217;ve ever seen before, something that just rocks my socks! Until then, it&#8217;s back to my world of writing code in Java, C#, C++, Perl, PHP, Python, Scheme, Lisp, Ruby, R, etc&#8230;</p>
<p>Ok. Now you can start sending me hate mail. Or, you can just leave your comments below. <img src='http://www.prodigyproductionsllc.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>P.S. The last time I wrote about this, I received over 200 emails telling me I don&#8217;t know what I&#8217;m talking about. So, I&#8217;m looking forward to getting those again. It shows me that there are a lot of you out there asking the same questions I am. And, as always, your feedback is greatly appreciated!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/programming/whats-next-for-software-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Real-Time Collaboration Server</title>
		<link>http://www.prodigyproductionsllc.com/articles/general/real-time-collaboration-server/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/general/real-time-collaboration-server/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 02:22:54 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2268</guid>
		<description><![CDATA[As most of you have pointed out, I haven&#8217;t been actively posting articles on this site like I use to. You may also have read that&#8217;s because I am currently working on yet another startup. I can&#8217;t go into details about that startup just yet. But, I can tell you about one small piece of [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/team_collaboration.jpg"><img class="alignleft  wp-image-2269" title="team_collaboration" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2012/01/team_collaboration.jpg" alt="Team Collaboration" width="196" height="107" /></a>As most of you have pointed out, I haven&#8217;t been actively posting articles on this site like I use to. You may also have read that&#8217;s because I am currently working on yet another startup. I can&#8217;t go into details about that startup just yet. But, I can tell you about one small piece of it. In fact, it&#8217;s a piece that has actually spun off into its own side-project.</p>
<p><span id="more-2268"></span>One of the things that my new startup will be utilizing a great deal is real-time collaboration. If you don&#8217;t know what real-time collaboration (RTC) is, you should checkout <a title="Google Docs" href="http://docs.google.com" target="_blank">Google Docs</a>. Basically, RTC is a system that allows multiple users to work on the same document at the same time over the web from anywhere in the world. For example, I could be typing this very article into an RTC app and you could also have this same article pulled up at the same time. As I type, you would see everything I type within your screen. Plus, you could make modifications to this same document while I&#8217;m typing it. If you&#8217;ve never messed around with RTC, now would be a great time for you to as it&#8217;s a fast growing phenomenon that I believe is going to be the future for all of us.</p>
<p>If you&#8217;re interested in starting your own RTC server &amp; site, you should checkout <a title="Etherpad Real-time Collaboration Server" href="http://www.etherpad.org" target="_blank">Etherpad</a> (<a title="Etherpad Real-time Collaboration Server" href="http://www.etherpad.org" target="_blank">http://www.etherpad.org</a>). <a title="Etherpad Real-time Collaboration Server" href="http://www.etherpad.org" target="_blank">Etherpad</a> is an open source RTC server and client that provides everything you need for collaborating on documents in real-time. However, that&#8217;s where the buck stops. Although it&#8217;s great for editing text documents in real-time, it doesn&#8217;t provide anything more than that. <a title="Google Docs" href="http://docs.google.com" target="_blank">Google Docs</a> on the other hand provides support for collaborating on text documents, spreadsheets, presentations, and drawings. For my new startup, that&#8217;s not enough.</p>
<p>So, I&#8217;ve decided to build my own RTC system, but with more power. My new RTC system is more of a platform than an basic RTC system like <a title="Etherpad Real-time Collaboration Server" href="http://www.etherpad.org" target="_blank">Etherpad</a>. However, it does allow for the same functionality that <a title="Etherpad Real-time Collaboration Server" href="http://www.etherpad.org" target="_blank">Etherpad</a> and <a title="Google Docs" href="http://docs.google.com" target="_blank">Google Docs</a> have. A couple of days ago, I began creating a platform using Python and jQuery that allow you to build and bolt-on any type of collaboration mechanisms you want. The platform provides you with a fast and reliable server that can handle pretty much any time of multiple user collaboration. For example, to test the system, I built a plugin that does basically what <a title="Etherpad Real-time Collaboration Server" href="http://www.etherpad.org" target="_blank">Etherpad</a> does. It allows you to create and edit text documents in real-time. But, I didn&#8217;t stop there. I also built a plugin that allows you to collaborate on spreadsheets in real-time just like <a title="Google Docs" href="http://docs.google.com" target="_blank">Google Docs</a>. I even took things a little further by creating a plugin that allows you to quickly and easily build a real-time chatroom complete with video conferencing. Heck, I&#8217;ve even taken it one step further and began introducing a plugin that allows you to open and collaborate on drawings in real-time, again just like <a title="Google Docs" href="http://docs.google.com" target="_blank">Google Docs</a>.</p>
<p>Even though I&#8217;ve only spent a few days working on this real-time collaboration platform, I still have a lot to show for it. And, hopefully, I&#8217;ll have something stable to release into the open source community within the next couple of weeks. I want to iron out as many bugs as I can and build several more plugins before I release the platform into the wild. Once I do, the system is flexible enough that anyone can quickly and easily build more plugins to run on top of my platform that can handle any kind of real-time collaboration needs that users may require. For example, some of the other plugins I plan on building include a software application development module for any type of language (Java, C#, Javascript, Opa, PHP, Perl, Python, etc&#8230;) complete with compilers and version control. I also plan to include a web site designer / collaboration plugin.</p>
<p>Anyways, enough mumbling. I&#8217;ve gotta get back to work on the new project. Once it&#8217;s ready for the world, I&#8217;ll come back here and post a full article about it. So, stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/general/real-time-collaboration-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Droid Motorola RAZR Review</title>
		<link>http://www.prodigyproductionsllc.com/articles/reviews/droid-motorola-razr-review/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/reviews/droid-motorola-razr-review/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 15:18:15 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2263</guid>
		<description><![CDATA[I know that the 2 remaining Research In Motion customers are going to be pissed when they read this article. But, I&#8217;m writing it anyways. Yes, it is true. I have finally retired my Blackberry and moved over to the Droid side of the force. Being a (very very very) long time Blackberry user, it [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/12/droid_razr.jpg"><img class="alignleft  wp-image-2264" title="droid_razr" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/12/droid_razr.jpg" alt="Motorola Droid RAZR" width="120" height="105" /></a>I know that the 2 remaining Research In Motion customers are going to be pissed when they read this article. But, I&#8217;m writing it anyways. Yes, it is true. I have finally retired my Blackberry and moved over to the Droid side of the force. Being a (very very very) long time Blackberry user, it was a sad day when I decided I&#8217;d had enough. Even though the rest of the world had already accepted that RIM was on a downward spiral, I kept my faith in the company and their products. But recently, it seems like RIM wants to go out of business. First it was the premature release of their Blackberry Playbook (which was an over priced and under sized piece of crap). Then RIM suffered several world-wide network outages. And recently, RIM executives were the cause of international flights being grounded because they had a few too many drinks. All of that aside, I felt like the Blackberry products I once loved were gradually degrading. My last Blackberry was nice at first, but over time it seemed to literally fall apart. Even though I take great care of things I own (including my cellphone), my last Blackberry broke to a point that I couldn&#8217;t bare to use it any more. That&#8217;s when I decided to take the leap and purchase a new Droid device.</p>
<p><span id="more-2263"></span>First off, I hate Apple. So, the iPhone was not an option for a new cellphone for me. When deciding on a new phone, I compared several droid phones and even threw in the new Blackberry for good measure. But, I quickly dismissed the Blackberry as I don&#8217;t have confidence that RIM will exist much longer, not in its current form anyway. Since I would be signing a new 2 year contract with my carrier, I didn&#8217;t want to invest in a Blackberry, or any phone for that matter, that was manufactured by a company that might not be around for the remainder of my contract. With Google&#8217;s recent purchase of Motorola Mobility and Google already being the owner of Android, I felt like the I should put my money into a new Motorola Droid device and that&#8217;s when I found the Motorola RAZR.</p>
<p>The new Droid RAZR has a blazing fast dual core 1.2GHz processor and 1GB of LP DDR2 RAM. With it&#8217;s 16GB of internal memory and the additional pre-installed 16GB microSD card, this little guy provides me with plenty of storage. And, all of that storage can easily be filled up since this phone is 4G LTE compatible. The RAZR has an 8MP rear facing camera and a 1.3MP front facing camera which is nice for several reasons. The rear facing camera records HD video at 1080p while the front facing camera only records HD at 720p. This is plenty since I don&#8217;t plan on recording the next mega-movie with my phone anyways.</p>
<p>For video, the RAZR has a huge 4.3&#8243; Super AMOLED advanced display with qHD resolution of 960&#215;540. I dropped a couple of ripped HD videos onto the microSD card and watched them on the phone. Needless to say, the video playback was beautiful! The colors were nice and crisp. The contrast was perfect and the lighting was spot on. Even though the video playback of my Blackberry was sharp, it has nothing on the video and screen size of the RAZR.</p>
<p>I&#8217;ve only had my new RAZR for a week now. But, so far, the battery life has been pleasing. With this being a new &#8220;toy&#8221; for me, I&#8217;ve put it to some heavy use over the last week and the battery seems to only drop by a little. Every night before bed, I still plug my phone into the charger. So, the next day the phone is ready to rock &#8216;n roll all over again.</p>
<p>As for the things I don&#8217;t like about this phone, I only have a few. The first thing I noticed about this phone is that it comes with a lot of crapware pre-installed. Even though you can remove the majority of it, there are still several apps that you can&#8217;t get rid of. Everyone in the forums recommend using the application groups to create a group for apps I don&#8217;t want to see and then simply hide that group. Out of sight out of mind I guess. The second thing I don&#8217;t like about this phone is that it&#8217;s still running Android 2.3.5 (Gingerbread). With this being such a recent released phone, you would think that it would&#8217;ve at least been running Honeycomb or even better Ice Cream Sandwich. Hopefully there will be an update released in the very near future. The third and final thing I don&#8217;t like about this phone is that it does not have a &#8220;real&#8221; keyboard. Being completely touchscreen, the RAZR does have the virtual qwerty keyboard. So, going from the traditional Blackberry chicklet keyboard to a virtual keyboard is not fun for me.</p>
<p>Even though the RAZR is much bigger than my Blackberry, it feels like it&#8217;s a lot lighter. The body of the RAZR is made of KEVLAR &amp; carbon fiber and the screen is made of Gorilla Glass. So, this thing can also take a beating.</p>
<p>Overall, I&#8217;m very pleased with my new RAZR and think that I made a good purchase when deciding to go with it. Being the geek that I am, I&#8217;ve already started writing a few apps for it and hope to have them added to the Market Place some time around the beginning of the year. When I do get my apps in the Market Place, I&#8217;ll be sure to come back here and post some information about the apps, including links to them in the store.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/reviews/droid-motorola-razr-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Book Builder</title>
		<link>http://www.prodigyproductionsllc.com/articles/books/book-builder/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/books/book-builder/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 17:50:48 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2251</guid>
		<description><![CDATA[A while back, I mentioned that I was starting work on a new book called &#8220;Computer vision with OpenCV &#38; C#&#8221;. Since that announcement, I have received a lot of feedback from readers interested in the book. At the same time, I have also received almost as much interest in the tool I&#8217;m using to [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/12/book_building.jpg"><img class="alignleft size-full wp-image-2252" title="book_building" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/12/book_building.jpg" alt="Book Building" width="141" height="115" /></a>A while back, I mentioned that I was starting work on a new book called &#8220;Computer vision with OpenCV &amp; C#&#8221;. Since that announcement, I have received a lot of feedback from readers interested in the book. At the same time, I have also received almost as much interest in the tool I&#8217;m using to write the book. Almost every person I have answered this question for was surprised to learn that I&#8217;m actually using an application I designed myself. That brings me to the purpose of this post. I want to take a minute to share with you my application as some of you might find it useful as well.</p>
<p><span id="more-2251"></span>For many writers, tools like Microsoft Office (Word) are more than enough for writing. However, I&#8217;m not a typical writer. I&#8217;m a programmer. I&#8217;m a true, natural born coder. And for that, I decided to write my own tool to help me with my writing. Now, I know that there are plenty of commercial and even some free applications already out there that are designed to to assist with writing books and such. But, I still felt like I needed a tool to call my own. That&#8217;s when the &#8220;Book Builder&#8221; was born.</p>
<p>Book Builder is a simple C# application that assists in the creation and maintenance of writing books, but can also be used for much more. The tool is a simple text editor complete with spell check and is currently capable of exporting to TXT, HTML, and PDF. In the near future, I will also be adding the ability to publish directly to WordPress. The tool begins with you creating a new book. Once you have your new book created, you can add as many chapters as you want in the list on the left. As you add new chapters, the Table of Contents is auto-updated to reflect each chapter. The TOC even updates in-real-time as you change the chapter names. You can re-order your chapters by simply dragging and dropping the chapters in the list on the left.</p>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/12/book_builder_screenshot.jpg"><img class="aligncenter size-full wp-image-2253" title="book_builder_screenshot" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/12/book_builder_screenshot.jpg" alt="Book Builder" width="403" height="350" /></a></p>
<p>When you export to PDF, each chapter is started on a new page. PDFs include a &#8220;first page&#8221; that includes the title of your book and the author&#8217;s name. Each page after the Table of Contents includes auto-generated page numbers and the time and date the PDF was generated. In a future release, these auto-generated timestamps and page numbers will be customizable and can be completely omitted if desired. In the next couple of days, I also plan on auto-linking chapters in the TOC directly to the pages that each chapter is on in the exported PDF. I will also be including an auto-generated Appendix that can be modified by the user, but will auto-update page numbers as you modify your book.</p>
<p>One of the cool features of the program as it stands is the ability to easily switch between chapters. When working in tools like Word, you have to scroll forever until you get to the chapter you want to work on. With this tool, you can jump between chapters by simply clicking the chapter name in the list on the left. You can even do this without having to save each chapter before navigating to another. In the next version, I will be including an indicator next to chapter names to signal chapters that have not been saved. I will also be allowing you to save individual chapters one at a time or all chapters at the same time.</p>
<p>As mentioned earlier, the tool comes complete with a spell checker. However, spell check currently only works for the chapter you currently have selected. In a future version, I will allow you to spell check the entire book and not have to check each chapter individually. The spell checker is a fully functional utility that even allows you to add new words to your dictionary. When words are flagged as being misspelled, the word is highlighted red as shown below.</p>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/12/book_builder_spellcheck.jpg"><img class="aligncenter size-full wp-image-2254" title="book_builder_spellcheck" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/12/book_builder_spellcheck.jpg" alt="Book Builder - Spell Check" width="542" height="333" /></a></p>
<p>I still have a lot of work to do before the tool is production ready. But, you can still download a copy of it as it is today to play around with. After I add the features already mentioned above, I still have to add some other basic functionality such as formatting. Once all of this is in place, I&#8217;ll come back here and post a link to the newest version and will also be providing the source code for others to work with. Until then, feel free to grab a copy of the tool from <a title="Book Builder Download" href="http://www.prodigyproductionsllc.com/downloads/BookBuilder.zip">http://www.prodigyproductionsllc.com/downloads/BookBuilder.zip</a>. And, as always, let me know what you think about it in the comments below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/books/book-builder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ceylon Gets a Site</title>
		<link>http://www.prodigyproductionsllc.com/articles/programming/ceylon-gets-a-site/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/programming/ceylon-gets-a-site/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 12:49:07 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2243</guid>
		<description><![CDATA[Back in April, we mentioned an upcoming programming language called &#8220;Ceylon&#8221;. Ceylon is suppose to be the new &#8220;Java killer&#8221; combining some of the best things from both Java and C#. Until now, there hasn&#8217;t been much more said about the Ceylon project. However, the project now has an official website which you can find [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/11/ceylon_logo.jpg"><img class="alignleft size-full wp-image-2244" title="ceylon_logo" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/11/ceylon_logo.jpg" alt="Ceylon Logo" width="120" height="89" /></a>Back in April, we <a title="Ceylon – The Java Killer" href="http://www.prodigyproductionsllc.com/articles/programming/java/ceylon-the-java-killer/">mentioned an upcoming programming language called &#8220;Ceylon&#8221;</a>. Ceylon is suppose to be the new &#8220;Java killer&#8221; combining some of the best things from both Java and C#. Until now, there hasn&#8217;t been much more said about the Ceylon project. However, the project now has an official website which you can find at <a title="Celyon Project" href="http://www.ceylon-lang.org/" target="_blank">http://www.ceylon-lang.org/</a>. If you&#8217;re like me and have been looking forward to checking out Ceylon, don&#8217;t get too excited just yet. The project developers still don&#8217;t have a date for the official launch of their project. But, they do have the source code available via their <a title="Ceylon on GitHub" href="http://github.com/ceylon" target="_blank">GitHub page</a> which you can download and check out for yourself. When / if I get some extra time, I&#8217;m going to pull it down and see what it has to offer. Let me know what your thoughts are about Ceylon and the future of programming in the comments below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/programming/ceylon-gets-a-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why do I do?</title>
		<link>http://www.prodigyproductionsllc.com/articles/misc/why-do-i-do/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/misc/why-do-i-do/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 18:07:30 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2237</guid>
		<description><![CDATA[I started this blog just over a year ago. Since then, I have received hundreds of emails, each of which have always contained the same stuff. The emails usually start out with something like the sender had a project they were working on and my site had the final answer they needed; the so called [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/11/good_job.jpg"><img class="alignleft size-full wp-image-2238" title="good_job" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/11/good_job.jpg" alt="Good Job!" width="116" height="160" /></a>I started this blog just over a year ago. Since then, I have received hundreds of emails, each of which have always contained the same stuff. The emails usually start out with something like the sender had a project they were working on and my site had the final answer they needed; the so called final piece of the puzzle. Whether the reader was finishing up a senior project in college, kick starting their new career, helping them keep their current job, or just assisting with a weekend project, each sender ended their email with the question asking why is it I do what I do? To be more specific, why do I provide all of the source code and examples I do on this site, yet I ask for nothing in return? Well, even though I&#8217;ve always personally replied to each of those emails, I&#8217;m now going to answer the question in this article for anyone else wanting the answer.</p>
<p><span id="more-2237"></span>I have spent the last 23 years learning and perfecting my craft. I have spent numerous days and nights sitting behind the desk, reading websites, reading books, writing code, and asking questions. I have spent my entire life trying to learn more about software and technology in general. Some people enjoy reading, watching movies, or going out with friends. Even though I also enjoy these same things, my number one passion in life is designing software. I like solving problems. I like creating something from nothing. And, I like answering unanswered questions (mostly my own). I believe that technology is the only reason the human species is still in existence and that technology is the only thing that will help us advance and to continue having an existence in the first place. Therefore, I do whatever it takes to learn as much as I can about the field I&#8217;m in and to share as much as I can along the journey.</p>
<p>Even though I had to learn my craft the hard way, I only know what I do because someone else figured it out before me or paved the way for me to continue building on that knowledge. So, in return, I&#8217;m trying to pass along the same knowledge that I&#8217;ve gained over the years by posting articles on this very site. I try my best to answer any and all questions that are submitted either by email or in the comments below. Sure, I know that I could make millions of dollars by designing these same applications for other companies, but so can everyone else. Yes, I&#8217;d like to one day make a billion dollars and I know that day will come. But, until then, I enjoy helping the next generation of technology specialists learn this craft a little faster and easier than I did. Technology is a cut throat industry and that alone makes learning anything new almost impossible. Whether it&#8217;s one guy learning something new and keeping it all to himself or some worthless patent troll suing companies out of existence in order to fatten their own wallets, these days it&#8217;s almost impossible to do anything innovative.</p>
<p>With all of the readers I have, I hope to one day read where one of those readers created the next Facebook or Google. I hope to one day wake up to an email where one of my readers created the next stage of artificial intelligence. I hope to read about one of my readers creating a new system that can detect diseases sooner, predict the next natural disaster, or invent a system that can help those with disabilities. In fact, I already have several readers that are working on these very things. For example, I have a few readers that are working on applications that assist the blind and other disables with using computers. I have readers that are working on computer vision applications that can detect and process sign language so that the computer can interpret it into spoken languages. I have readers that are working on applications that can bridge the communication barrier between different cultures by developing applications that involve speech recognition and text-to-speech. I have readers that are working on applications that can sift thru patient data and detect patterns of genetic diseases and other health risks. I even have readers that are working on creating self-driving cars and other navigation systems.</p>
<p>People like the ones mentioned above are the reasons I do what I do. Who knows? Maybe one day I&#8217;ll depend on a system that was developed by one of my readers. Knowing that there might have been a possibility that I somehow assisted with the creation of those systems is more than enough reason to provide source code &amp; examples and to answer every question I can. Even though I appreciate the donations and gifts that many of you have sent me in return for the information and knowledge I&#8217;ve provided on this site, I will never ask for any of you to pay me for what I provide here. I&#8217;ve already made a lot of money in life by developing software and other systems for companies all around the world. Plus, I know that I&#8217;ll continue doing so as, like they say, money will come and go. There will always be opportunities for me to make more money. I just hope that the information I share on this website will continue helping others make money as well which will hopefully in turn help the next batch of technologists and possibly build empires of their own. The only things I ask in return are that you continue the hard work, continue inventing new &amp; exciting technologies, and continue sharing your success stories with the rest of us. It is you that will invent tomorrow!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/misc/why-do-i-do/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Web Server Surveillance Using BackTrack</title>
		<link>http://www.prodigyproductionsllc.com/articles/security/web-server-surveillance-using-backtrack/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/security/web-server-surveillance-using-backtrack/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 05:05:07 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[BackTrack]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2221</guid>
		<description><![CDATA[A couple of days ago, I posted an article showing you how to exploit PHP using BackTrack and backdoors from weevely. Today, I want to show you another cool trick in BackTrack. This time, I want to show you how to analyze any webserver to look for known vulnerabilities and other unknown server issues. This [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/11/backtrack_logo.jpg"><img class="alignleft size-full wp-image-2217" title="backtrack_logo" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/11/backtrack_logo.jpg" alt="BackTrack Logo" width="89" height="89" /></a>A couple of days ago, I posted an article showing you how to exploit PHP using BackTrack and backdoors from weevely. Today, I want to show you another cool trick in BackTrack. This time, I want to show you how to analyze any webserver to look for known vulnerabilities and other unknown server issues. This technique is very simple. So, this article will be very short.</p>
<p><span id="more-2221"></span>To get started, fire up BackTrack, click on the menu and navigate to BackTrack &gt; Vulnerability Assessment &gt; Web Application Assessment &gt; Web Vulnerability Scanners and click on &#8220;nikto&#8221;. That will throw you into a shell prompt. At that point, you can do a scan of any webserver with one basic command and parameter. Here is the command:</p>
<p><span style="color: #0000ff;">#./nikto.pl -h http://www.some-target.com</span></p>
<p>As you can see, the only parameter I&#8217;m passing to the nikto tool is the option &#8220;-h&#8221; for host and the URL for that host. When you run that command, you&#8217;ll immediately begin receiving useful information about your target webserver. For example, when I ran that command, right I way I saw that I my target server was running Apache on Fedora. It even told me which version of Apache the server was running. With that knowledge alone, I could go to a site like <a title="Security Focus" href="http://www.securityfocus.com" target="_blank">http://www.securityfocus.com</a> and search for Apache Software Foundation &gt; Apache &gt; 2.2.8 and get a list of known exploits for that particular version of Apache. By the time the scan was finished, I had a list of known vulnerabilities that were exploitable on my target server. Using some of the other tools in BackTrack, I could easily gain access and root control of the server.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/security/web-server-surveillance-using-backtrack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speech Recognition with C# and XML Grammars</title>
		<link>http://www.prodigyproductionsllc.com/articles/programming/speech-recognition-with-c-and-xml-grammars/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/programming/speech-recognition-with-c-and-xml-grammars/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 05:05:21 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2226</guid>
		<description><![CDATA[By request from a couple of my readers, I am back to show more speech recognition using C#. In my first speech recognition article &#8220;Simple Speech Recognition Using C#&#8220;, I introduced you to the Speech Recognition Engine provided by the .NET framework. In that article, I showed you how to setup a new SRE and [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/11/crazy_ear.jpg"><img class="alignleft size-full wp-image-2229" title="crazy_ear" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/11/crazy_ear.jpg" alt="Listening Ear" width="120" height="120" /></a>By request from a couple of my readers, I am back to show more speech recognition using C#. In my first speech recognition article &#8220;<a title="Simple Speech Recognition Using C#" href="http://www.prodigyproductionsllc.com/articles/programming/simple-speech-recognition-using-c/">Simple Speech Recognition Using C#</a>&#8220;, I introduced you to the Speech Recognition Engine provided by the .NET framework. In that article, I showed you how to setup a new SRE and to accept any voice input and display it in a rich text box. The very next day, I took that application one step further in my article &#8220;<a title="Simple Speech Recognition Using C# - Part 2" href="http://www.prodigyproductionsllc.com/articles/programming/simple-speech-recognition-using-c-part-2/">Simple Speech Recognition Using C# &#8211; Part 2</a>&#8221; by introducing you to grammars. Grammars are basically a list of input options you want your application to listen for. Adding grammars will cause your application to listen for only those options and nothing else. The grammar used in that article was built using the Choices object and by providing that object with a list of hardcoded options. Today, I want to show you how to replace the Choices object with a grammar XML file. Let&#8217;s begin.</p>
<p><span id="more-2226"></span>The first thing you are going to need for this is of course your grammar file.  The grammar file is simply an XML file that contains a list of rules where each rule has a list of items that the SRE will listen for. Each rule must contain an id which will be used to tell the SRE which list of options to listen for. In the example below, you will see that I have defined 2 rules. You will also notice that I have added a scope attribute with the value &#8220;public&#8221; to each rule. If you do not specify the &#8220;root&#8221; attribute in the first &#8220;&lt;grammar&gt;&#8221; tag of your XML file, you will need to add a public scope to your rules, otherwise your SRE will not be able to read the rules.</p>
<p><pre class="brush: xml">&lt;grammar xmlns=&quot;http://www.w3.org/2001/06/grammar&quot;
  xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  xsi:schemaLocation=&quot;http://www.w3.org/2001/06/grammar http://www.w3.org/TR/speech-grammar/grammar.xsd&quot;
  xml:lang=&quot;en-US&quot; version=&quot;1.0&quot; root=&quot;command1&quot;&gt;

  &lt;rule id=&quot;command1&quot; scope=&quot;public&quot;&gt;
    &lt;one-of&gt;
      &lt;item&gt;start&lt;/item&gt;
      &lt;item&gt;stop&lt;/item&gt;
      &lt;item&gt;continue&lt;/item&gt;
    &lt;/one-of&gt;
  &lt;/rule&gt;

  &lt;rule id=&quot;command2&quot; scope=&quot;public&quot;&gt;
    &lt;one-of&gt;
      &lt;item&gt;test&lt;/item&gt;
      &lt;item&gt;help&lt;/item&gt;
      &lt;item&gt;hello&lt;/item&gt;
    &lt;/one-of&gt;
  &lt;/rule&gt;

&lt;/grammar&gt;</pre></p>
<p>For this example, we are going to be using the first rule from our grammar XML file. In order for us to do that, we&#8217;ll need to create a new SpeechRecognitionEngine, tell it which audio device to use, and give it a callback handler where the recognized text will be processed and handled. To keep it simple, we&#8217;ll just copy the construction of our SRE from our other articles.</p>
<p><pre class="brush: csharp">            SpeechRecognitionEngine recognitionEngine = new SpeechRecognitionEngine();
            recognitionEngine.SetInputToDefaultAudioDevice();
            recognitionEngine.SpeechRecognized += (s, args) =&gt;
            {
                foreach (RecognizedWordUnit word in args.Result.Words)
                {
                    // You can change the minimun confidence level here
                    if (word.Confidence &gt; 0.8f)
                        freeTextBox.Text += word.Text + &quot; &quot;;
                }
                freeTextBox.Text += Environment.NewLine;
            };</pre></p>
<p>Now that we have our SRE constructed, it&#8217;s time to build our Grammar object. In the last article, you will that we built a new GrammarBuilder object and constructed our Grammar object using this grammar builder. This time, we&#8217;re going to replace that grammar builder with a string indicating the name of the grammar XML file we&#8217;ll be using. After that, we&#8217;ll go ahead and load our grammar object into our SRE and tell it to begin listening by calling the RecognizeAsync method like we did in the other articles.</p>
<p><pre class="brush: csharp">            Grammar g = new Grammar(&quot;grammar.xml&quot;, &quot;command1&quot;);
            recognitionEngine.LoadGrammar(g);
            recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);</pre></p>
<p>In the snippet above, you&#8217;ll see that I passed 2 arguments to my Grammar object&#8217;s constructor. The first parameter is the name of the XML file that contains my grammar rules. The second parameter is the id of the rule I want to use from that XML file. If you want to omit the second parameter, you will need to include the &#8220;root&#8221; parameter on the &#8220;&lt;grammar&gt;&#8221; element of your XML file. If you do that, the first element of your XML file would look like:</p>
<p><span style="color: #0000ff;">&lt;grammar &#8230;. root=&#8221;command1&#8243;&gt;</span></p>
<p>That&#8217;s it! You are now ready to start using your grammar XML file in your SRE application. Here is a screenshot of the code below in action.</p>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/11/speech_recognition_example.png"><img class="aligncenter size-full wp-image-2228" title="speech_recognition_example" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/11/speech_recognition_example.png" alt="Speech Recognition Example" width="436" height="274" /></a></p>
<p>And, here is the complete code I used to make this happen.</p>
<p><pre class="brush: csharp">using System;
using System.Text;
using System.Windows.Forms;
using System.Speech.Recognition;

namespace SpeechRecognition
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();

            SpeechRecognitionEngine recognitionEngine = new SpeechRecognitionEngine();
            recognitionEngine.SetInputToDefaultAudioDevice();
            recognitionEngine.SpeechRecognized += (s, args) =&gt;
            {
                foreach (RecognizedWordUnit word in args.Result.Words)
                {
                    // You can change the minimun confidence level here
                    if (word.Confidence &gt; 0.8f)
                        freeTextBox.Text += word.Text + &quot; &quot;;
                }
                freeTextBox.Text += Environment.NewLine;
            };

            Grammar g = new Grammar(&quot;grammar.xml&quot;, &quot;command1&quot;);
            recognitionEngine.LoadGrammar(g);
            recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
        }
    }
}
</pre></p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/programming/speech-recognition-with-c-and-xml-grammars/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Exploit PHP with BackTrack 5 and Backdoors</title>
		<link>http://www.prodigyproductionsllc.com/articles/programming/php/exploit-php-with-backtrack-5-and-backdoors/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/programming/php/exploit-php-with-backtrack-5-and-backdoors/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 13:45:47 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[BackTrack]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Exploits]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[Vulnerabilities]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2213</guid>
		<description><![CDATA[One of my biggest pet peeves in life is having some non-techie ask me a question about how to do something the right way, then spend the next three hours justifying to me why they did it the wrong way and will continue doing it wrong. I&#8217;m not saying that I&#8217;m the best at what [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/11/backtrack_logo.jpg"><img class="alignleft size-full wp-image-2217" title="backtrack_logo" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/11/backtrack_logo.jpg" alt="BackTrack Logo" width="99" height="99" /></a>One of my biggest pet peeves in life is having some non-techie ask me a question about how to do something the right way, then spend the next three hours justifying to me why they did it the wrong way and will continue doing it wrong. I&#8217;m not saying that I&#8217;m the best at what I do, but I am pretty good. At least, I&#8217;m better at programming than someone that has never written a line of code in their life. I don&#8217;t take my car to the mechanic and tell him how to fix it. I don&#8217;t go to the doctor and tell him how to do a surgery. No! Instead, I trust them and rely on them to do what it is that they have been trained to do.</p>
<p>Until about five years ago, one of the services that I provided as a contractor was network and web application security auditing. In fact, I even taught classes on how to protect your software and web applications for misuse and abuse. During a class I was teaching about PHP security &amp; exploitation, I had a guy stand up during the middle of my speech and tell me that I didn&#8217;t know what I was talking about. He said that everything I talked about was bullshit and was not possible in the real world. More specifically, he said that my techniques could not be used against his company&#8217;s website.</p>
<p>So, to humor him, myself, and the rest of the people in the room, I asked if he would allow me to do a live evaluation of his website which he bravely agreed to. The first thing I asked was did he have an outward facing website? Meaning, did he have a website that could be accessed over the web? He said he did and gave me the URL to the site. So, I loaded up the page in my browser and almost pissed in my pants from laughing at all of the security vulnerabilities right there on the home page. One of the biggest and probably easiest vulnerabilities is what I&#8217;m going to share with you now.</p>
<p><span id="more-2213"></span>The website that he gave me to evaluate was a blog for his sales reps. It was designed so that any sales representative could post news updates and sales lead information for other reps to follow. Although a username and password were required to gain access to the page that allowed the reps to post new messages and to view contact information, there was still a huge vulnerability staring me in the face, just waiting to be exploited. Right there on the home page was a form that allowed sales reps and their customers to upload PDF files which once uploaded were listed in a section just below the form that allowed anyone to download these files without being required to log in. So, to prove that this guy didn&#8217;t know what he was talking about, I decided to make this my first target (and it was easy enough to do to humiliate this guy a little, especially after he tried humiliating me first.)</p>
<p>The first thing I did to get this exploit going was I clicked around a couple of the links on the page, taking notice of what the URLs said in the address bar. Even though this guy came to my &#8220;PHP&#8221; class, I still needed to verify that his site was written in PHP. After a few link clicks on his site, I knew that it was indeed written in PHP. Already having BackTrack running for the class, I next clicked on the menu and navigated off to BackTrack &gt; Maintaining Access &gt; Web Backdoors &gt; Weevely. This opened a shell prompt and displayed the usage report for the weevely.py script. Now, I could&#8217;ve easily went with the simple backdoor PHP script that weevely provided. But, some virus scanners and intrusion detection systems will detect this script as a trojan and will block it from being used. To get around that, I needed to make an encrypted copy of the file that was also password protected so that only I could make use of it. To do that, I ran the following command:</p>
<p><span style="color: #0000ff;">#./weevely.py -g -o /root/Desktop/hello.php -p SomePassword</span></p>
<p>The command above simply tells weevely to generate (-g) a new backdoor file and output (-o) it to my desktop as &#8220;hello.php&#8221; and encrypt it with the password (-p) &#8220;SomePassword&#8221;. I could&#8217;ve output this file to any folder on my filesystem, but the desktop seemed to be the easiest location for me to get to quickly. Anyways, now that I had an encrypted backdoor file ready, it was time to put it to work. To do that, I went back to my browser and navigated back to the homepage where the file upload form was located. From there, I went ahead and clicked the &#8220;Browse&#8221; button, selected my &#8220;hello.php&#8221; file from my desktop, and uploaded it to the server using the &#8220;Upload&#8221; button. Once the file was uploaded, it appeared in the list below.</p>
<p>Next, I right-clicked on the file in the list and selected &#8220;Copy Link Location&#8221;. Then, I went back to my shell prompt where I used weevely to generate my backdoor and issued a new command which told weevely to connect to that backdoor and open a shell prompt on the remote computer. Here is the command I used to do that:</p>
<p><span style="color: #0000ff;">#./weevely.py -t -u http://www.his-website.com/path/to/uploaded/file/hello.php -p SomePassword</span></p>
<p>As you can see in the command above, I replaced his actual URL with a dummy URL for privacy. You&#8217;ll also noticed that I passed the same password (-p) as the one I used when I generated the backdoor earlier. Once I issued this command, I was immediately presented with a shell prompt for his server. From there, I could issue any command just like I would if I was actually sitting at his computer. With a simple &#8220;whoami&#8221; command, I realized I was running as the user &#8220;apache&#8221;. I could now wreak havoc on this guy&#8217;s server and there was nothing he could do about it. However, he still wasn&#8217;t convinced that I was actually on his server. He thought that I was blowing smoke and that the weevely script did nothing more than display a fake shell prompt. So, I typed in &#8220;cat /etc/passwd&#8221; and showed him a list of the users that were on his server. To take things one step further, I issued a &#8220;wget&#8221; command to download a privilege escalation Perl scrip I had and in no time had full root access to his server.</p>
<p>After a few changes to his website&#8217;s homepage, he finally realized that I did indeed have full control of his server. Since the class was intended to educate developers about vulnerabilities in PHP if left untreated, I had to go into an explanation of how I did this, why it happened, and how to avoid it. I told him that all of this could have been avoided if 1) He put his file upload form behind a password protected form and 2) He added file extension checking to the code that handled the file upload. If a user uploaded a file that didn&#8217;t meet his specific file criteria, the file would be rejected. Also, this would&#8217;ve never been possible if he had &#8220;safe_mode&#8221; enabled in PHP.</p>
<p>Anyways, even after showing the guy that I did indeed have complete access to his server, he was still convinced that his web applications were 100% bullet proof and secure. I think that he continued believing that for 2 reasons. The first reason is because we offered ourselves to be hired as independent security specialists where we would do a complete evaluation of his systems at a cost. But, the guy seemed cheap and not interested in paying us to help him. He acted like we should do it for free. Plus, he also made a few unnecessary remarks about my age. At that time, I was only 25 years old and this guy was probably in his late 70s. During my 23 years of developing software, he&#8217;s not the first or last person to not believe in me just because I was so young. I later found out that this guy had a granddaughter that was only a couple of years younger than me. So, I can see where he felt that my young age meant lack of experience and knowledge. But, that&#8217;s for another post. <img src='http://www.prodigyproductionsllc.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/programming/php/exploit-php-with-backtrack-5-and-backdoors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Goodbye Netflix!</title>
		<link>http://www.prodigyproductionsllc.com/articles/misc/goodbye-netflix/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/misc/goodbye-netflix/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 16:59:54 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2208</guid>
		<description><![CDATA[For those of you that know me, you know that I&#8217;m a huge movie buff. As you can imagine, I was like a little kid in a candy store when I first signed up with Netflix years ago. Every time I opened the mailbox and found that little red envelope waiting on me, it was [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/10/goodbye_netflix.jpg"><img class="alignleft size-full wp-image-2209" title="goodbye_netflix" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/10/goodbye_netflix.jpg" alt="Goodbye Netflix" width="113" height="113" /></a>For those of you that know me, you know that I&#8217;m a huge movie buff. As you can imagine, I was like a little kid in a candy store when I first signed up with Netflix years ago. Every time I opened the mailbox and found that little red envelope waiting on me, it was almost like finding money. When signing up for my Netflix account, I chose the highest plan you could get. I was receiving 3 DVDs at a time and streaming every movie I could squeeze into a single day. But, that&#8217;s all behind me now and for good reason.</p>
<p><span id="more-2208"></span>The first thing that Netflix did to piss me off was when they began delaying new movie releases by 28 days. I understand the reason for this was because apparently Netflix was hurting the movie industry and their profits. So, the movie producers decided to quit providing Netflix with new releases until the initial release month was over. Even though this might have caused movie purchases to bounce back a little, it was still a bad move on Netflix&#8217;s part. Although I hated having to wait 28 days before I could get a new release, I eventually found myself comfortable with this.</p>
<p>A little while later, out of pure greed, Netflix decided to jack up their prices. Then they did it again. From the time I joined Netflix until the time I cancelled my account, Netflix had gone up on their price by more than 60%! They gave some bullshit excuse that these price hikes were going to help them get more content for their collection which would in return lead to more selections for their customers. Whatever! Even with the price increases, Netflix was still the better option considering I was spending almost $50 a week at the local Movie Gallery.</p>
<p>The next thing that Netflix did to lose my business was their decline of good movie choices in their streaming service. Although they were constantly adding more titles to the streaming service, the movies were still C-class movies from the 70&#8242;s. Those movies were crap back then and they&#8217;re still crap today. In the beginning, I liked the fact that I could pull up some movies from my childhood that I haven&#8217;t watched in forever. After a while though, that&#8217;s all you have to choose from. My fiancee hates watching movies more than once. So, both of us got really annoyed with the fact that Netflix wasn&#8217;t introducing anything new to their streaming service. The very few times they did offer something worth watching, it would only be available for a couple of days and then disappear like it never happened.</p>
<p>The straw that finally broke the camel&#8217;s back came when Netflix thought it would be a good idea to divide their company into 2. One company, named Qwikster, would provide the mail-order DVDs &amp; Blurays while the other company, still named Netflix, would focus only on streaming. As many of you have agreed, this was a terrible idea. And, like the other 800,000 of you that didn&#8217;t like this idea, I too have decided to cancel my Netflix account.</p>
<p>After losing almost 1 million customers in total, Netflix finally realized that they haven&#8217;t been making the best decisions lately. It didn&#8217;t take long for Netflix to ditch the idea of dividing their company. But, the damage has already been done. I have cancelled my Netflix account and will never return. I refuse to do business with a company that is so f***ing clueless. Apparently, they don&#8217;t know how to listen to their customers until it&#8217;s too late. So, if they don&#8217;t care about me, then I don&#8217;t care about them. Adios Netflix!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/misc/goodbye-netflix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Augmented Reality Using C# and OpenCV</title>
		<link>http://www.prodigyproductionsllc.com/articles/programming/augmented-reality-using-c-and-opencv/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/programming/augmented-reality-using-c-and-opencv/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 17:32:39 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[OpenCV]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2203</guid>
		<description><![CDATA[As I&#8217;ve mentioned before, my articles about using OpenCV and C# are the most viewed articles on this site. Among those articles, I get more emails asking about using OpenCV and C# for augmented reality applications than I do anything else. It appears that AR is a pretty big topic these days and everyone looking [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/03/opencv_logo.jpg"><img class="alignleft size-full wp-image-1424" title="opencv_logo" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/03/opencv_logo.jpg" alt="OpenCV Logo" width="103" height="95" /></a>As I&#8217;ve mentioned before, my articles about using OpenCV and C# are the most viewed articles on this site. Among those articles, I get more emails asking about using OpenCV and C# for augmented reality applications than I do anything else. It appears that AR is a pretty big topic these days and everyone looking at getting into the field needs a good place to start. So, I&#8217;ve put together a small application that uses OpenCV and C# to do augmented reality. As always, I&#8217;m using the OpenCvSharp .NET wrapper for OpenCV. But, the same principles that apply here can also be used in pretty much any other wrapper or in OpenCV itself. Usually, I&#8217;ll walk thru every line of code in my example applications and explain what I&#8217;m doing. But, this time, I&#8217;ve decided to just provide you with the code and let you figure it out for yourself. However, as always, I&#8217;m more than willing to answer any questions you may have as you go along with the example.</p>
<p><span id="more-2203"></span>To get started, you will need to download my OpenCV Augmented Reality example application from <a title="Augmented Reality Example Using OpenCV and C#" href="http://www.prodigyproductionsllc.com/downloads/OpenCvAugmentedReality.zip">http://www.prodigyproductionsllc.com/downloads/OpenCvAugmentedReality.zip</a>. It already has everything you need to begin your augmented reality application including the OpenCvSharp and OpenCV runtimes which are located in the bin &gt; Debug directory. In that same directory, you will see a file called &#8220;chessboard 6&#215;5.jpg&#8221;. In order for this example to work, you will need to print a copy of that image onto a typical 8.5&#215;11 piece of paper (scale doesn&#8217;t really matter here). Once you&#8217;ve printed the chessboard image, go ahead and launch the app by opening the .sln file in Visual C# or by running the AugmentedReality.exe file also found in the bin &gt; Debug folder.</p>
<p>When you run the application, you will see a Windows form that only includes a button with the word &#8220;Start&#8221; on it and a combo box next to it. The combo box includes options for 1, 2, &amp; 3. Picking number 1 means that the application will look for the checkerboard image in a video feed and will overlay a typical image over it. The image used in this example is a standard JPG file of the OpenCV logo. If you choose number 2 from the combo box, the application will look for the checkerboard in a video feed and will overlay a video over it. For this example, I&#8217;ve included a video file called &#8220;trailer.avi&#8221; which is a trailer for the &#8220;Big Buck Bunny&#8221; movie created by the Peach Open Movie Project (<a title="Big Buck Bunny - Peach Open Movie Project" href="http://www.bigbuckbunny.org/" target="_blank">http://www.bigbuckbunny.org/</a>). If you choose number 3 from the combo box, the application will look for the checkerboard image in a video feed and will draw a box around the portion of the image that is used to overlay the image or video. Here is an example of the application using number 2 to display the &#8220;Big Buck Bunny&#8221; trailer video over the checkerboard.</p>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/10/arexample.png"><img class="aligncenter size-full wp-image-2204" title="arexample" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/10/arexample.png" alt="Augmented Reality Example Using OpenCV and C#" width="379" height="324" /></a></p>
<p>I&#8217;m using a cheapo USB webcam to capture the video and even running on low end laptop, I&#8217;m still getting pretty good performance out of the application. The possibilities of technology like this are endless. For example, since OpenCV can be ran on an iPhone, one could easily write an augmented reality iPhone app that can overlay advertisements on top of images when the iPhone is pointed at things like store fronts or billboards. Imagine pointing your phone at a still image in a magazine and having a video commercial play in your screen. You could do that with this kind of technology. Anyways, whatever you decide to use this for, be sure to come back here and share your story with the rest of us in the comments below. I&#8217;m extremely curious as to what all kinds of cool stuff you guys can come up with. Until next time, HAPPY CODING!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/programming/augmented-reality-using-c-and-opencv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Back from Las Vegas</title>
		<link>http://www.prodigyproductionsllc.com/articles/misc/back-from-las-vegas/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/misc/back-from-las-vegas/#comments</comments>
		<pubDate>Sat, 01 Oct 2011 21:12:10 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2197</guid>
		<description><![CDATA[For the last week, I&#8217;ve been in Las Vegas for a software conference called TUCON (Tibco User Conference). Thankfully, I am now home where I belong. Don&#8217;t get me wrong, I enjoy Las Vegas as much as the next person. But, when you&#8217;re there for business, it isn&#8217;t as fun as it is when you&#8217;re [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/10/welcome_to_las_vegas.jpg"><img class="alignleft size-full wp-image-2198" title="welcome_to_las_vegas" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/10/welcome_to_las_vegas.jpg" alt="Welcome to Las Vegas Nevada" width="128" height="85" /></a>For the last week, I&#8217;ve been in Las Vegas for a software conference called TUCON (Tibco User Conference). Thankfully, I am now home where I belong. Don&#8217;t get me wrong, I enjoy Las Vegas as much as the next person. But, when you&#8217;re there for business, it isn&#8217;t as fun as it is when you&#8217;re only purpose there is to have a good time. The company I work for is currently under going an RFP and POC for a Master Data Management (MDM) solution from a company called Tibco (short for &#8220;The Information Bus Company&#8221;). Every year, Tibco has a gathering in Las Vegas where all of their customers are invited to hear keynote speakers from some of the world&#8217;s largest companies that also happen to be Tibco customers. For 4 days, Tibco also provides technology breakout sessions where you&#8217;re invited to listen to other customers give feedback on what their companies are doing and how they&#8217;re using Tibco products.</p>
<p><span id="more-2197"></span>The conference is held in the convention center of the Aria Resort and Casino (<a title="Las Vegas Aria Resort and Casino" href="http://www.arialasvegas.com/" target="_blank">http://www.arialasvegas.com/</a>) located in what is now called &#8220;City Center&#8221; (<a title="Las Vegas City Center" href="http://www.citycenter.com/" target="_blank">http://www.citycenter.com/</a>). The Aria is a property of MGM that holds several world-wide awards. One of the awards that the Aria holds is for being the greenest hotel in the world. However, being the geek that I am, the award that Aria holds that interests me is the award for the most technology advanced hotel in the world. Yep. The Aria is decked out with all kinds of sweet treats for the techno geeks. For example, each room comes with its own bedside touch-screen tablet that is capable of controlling everything in the room. It can control the TV, lights, curtains, temperature, etc&#8230; Compared to other hotels I&#8217;ve stayed in, this one little feature is a huge bonus. I say that because I&#8217;ve also stayed in other hotels in Vegas where it was almost impossible to locate and change the temperature of the room. Being situated in the middle of the desert, temperatures can reach in the triple digits even at night. So, being able to keep my room comfortable is definitely expected, but made simpler by the cool gadgets offered in each room of the Aria.</p>
<p>Since the majority of my trip was spent sitting in banquet halls, I didn&#8217;t have much time to venture out. But, I did get to visit some really nice restaurants in the area. One of the nice restaurants I ate at was located on the casino level of the hotel. Called &#8220;Cafe Vettro&#8221;, this restaurants offered something on the menu I had never thought of trying, but turned out to be more than delicious. It was the BBQ grilled salmon. Who in the hell would&#8217;ve ever thought to put BBQ on salmon? I know I never would have ever tried it, but it did sound interesting. So, I ordered it and would highly recommend it to anyone else that enjoys salmon.</p>
<p>Another nice restaurant I went to was a nice little Meditteranean restaurant located in the Bellagio. I can&#8217;t remember the name of the place, but it was really nice and really expensive. My waiter recommended the Swordfish which was remarkable! Plus, I got a window seat where I was able to watch the beautiful Bellagio fountains. By the time dinner was over, night time had fallen and the entire strip was lit up. So, I decided to take a stroll to see the lights and night life that the strip had to offer. But, before I strayed too far, I did stop to watch the Bellagio fountains&#8217; night time show where everything was lit up, making it 10 times better than the day time show where the only source of light comes from the scorching sun over head.</p>
<p>Being the big sushi fan that I am, I went to a sushi bar called the Social House one day for lunch. The Social House is located inside the Crystals mall which happen to be attached to the hotel I was staying in. Having stores like Tiffany&#8217;s and Harry Winstons, shopping in the mall was a little out of my price range. But, the Social House sushi bar had a lot of really good food to choose from. Since it was lunch, I decided to keep my meal small because we were also expecting to be eating a large dinner only a couple of hours later. So, I went with the seared albacore roll and the crunchy eel roll. Both of these rolls make my mouth water just thinking about them.</p>
<p>On the last night of our trip, our sales rep took myself, my boss, and 2 co-workers to a restaurant at the Cosmpolitan hotel called the Blue Ribbon. This too was a sushi shop, but had way more on the menu to choose from than the Social House. Being self-proclaimed sushi specialists, me and 3 of the other guys decided to go with a $200 sushi platter which was suppose to feed 4. Well, the platter was definitely capable of feeding 4, but it also invoked a feeding frenzy between the 4 of us. So, we had no other choose but to order a couple more of the same platters. Each platter came with about 5 different kinds of rolls such as a dragons roll, mixed fish roll, lobster roll, etc&#8230; The platter also included plain sushi and various selections of shashimi. Having eaten at a lot of sushi restaurants, I&#8217;ve eaten a lot of really good sushi. Although I wouldn&#8217;t say this takes the number 1 spot, I would definitely rank it number 2. However, I would definitely give the Blue Ribbon the title of best sushi in Las Vegas and the best sushi on the west coast. My number one sushi place is a restaurant called &#8220;Strip&#8221; which is located in the Atlantic Center of downtown Atlanta, Georgia.</p>
<p>Anyways, the overall trip was definitely a success in my opinion. I got to meet a lot of great people and learned a lot about the way other companies conduct business both with and without Tibco&#8217;s software. Unfortunately, I&#8217;m now back in the real world where none of that matters any more. Instead, it&#8217;s back to the day-to-day life and politics that I enjoyed an escape from even for the brief time that it was. I did, however, gain a lot of knowledge about the Tibco products that my company is now considering. I know that the information I gathered from the conference will help make more informed decisions about the purchase and use of any software my company purchases from Tibco. Plus, I also want to go on the record as saying that I learned a lot of valuable information that can benefit my company even aside from the Tibco software.</p>
<p>Even though I had a great trip, it&#8217;s still good to be home!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/misc/back-from-las-vegas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>enTourage Pocket eDGE Dual eReader Tablet Review</title>
		<link>http://www.prodigyproductionsllc.com/articles/reviews/entourage-pocket-edge-dual-ereader-tablet-review/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/reviews/entourage-pocket-edge-dual-ereader-tablet-review/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 14:27:23 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2188</guid>
		<description><![CDATA[A few times now, my favorite daily deals site Woot.com has had this little gizmo called the enTourage Pocket eDGe Dual eReader Tablet. It&#8217;s basically an eReader attached to a tablet. At first glance, this little guy didn&#8217;t look like anything I would be interested in having for myself. However, I did think it would [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/09/edge_tablet.jpg"><img class="alignleft size-full wp-image-2189" title="edge_tablet" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/09/edge_tablet.jpg" alt="enTourage Pocket eDGe Tablet eReader" width="110" height="86" /></a>A few times now, my favorite daily deals site Woot.com has had this little gizmo called the enTourage Pocket eDGe Dual eReader Tablet. It&#8217;s basically an eReader attached to a tablet. At first glance, this little guy didn&#8217;t look like anything I would be interested in having for myself. However, I did think it would make a good Christmas gift for my grandmother. So, for about $79, I went ahead and ordered one. After a week of waiting, it finally arrived. Here are my thoughts about it.</p>
<p><span id="more-2188"></span>To begin with, the form factor is definitely different. This thing operates just like a book. It opens from the middle just like turning back the cover of a book. Once opened, you are presented with an e-book reader on the left and an Android based tablet on the right. The &#8220;binding&#8221; of the device includes a fairly good size speaker which actually has some pretty amazing sound quality. The eDGe includes both full-size and mini USB ports as well as a micro-SD card slot. The device supports bluetooth connectivity as well as WiFi for 802 b &amp; g. It has an 1.2GHz processor which isn&#8217;t much compared to most of today&#8217;s tablets, but it&#8217;s still pretty rockin&#8217; for the what it is. The device includes 3GB internal storage which is quite a bit for a tablet. But, with the addition of the micro-SD slot and USB capabilities, storage is not an issue.</p>
<p>The eReader is pretty standard, but comes with a little extra. Using e-ink technology, the eReader is extremely easy to read and very light weight on the battery. It has navigation buttons on the bezel around the edge, but can also be manipulated using an included stylus for use with the eReader touch screen. Having the stylus included makes for easy note taking by drawing directly on to the eReader screen.</p>
<p>The tablet side isn&#8217;t quite up to par with other tablets today. But, it&#8217;s still pretty nice, especially for the price I paid for it. Earlier versions of the device were running Android Donut. However, enTourage did manage to push out Android Froyo to the last batch of devices. Even though it&#8217;s Froyo, the OS is still rock solid. The screen is very responsive and navigation is extremely smooth. The eDGe comes pre-installed with several cool applications that can be extended via the Android Marketplace.</p>
<p>One of the things I like about this dual-device setup is that the 2 screens can be treated autonomously, but also have the ability to communicate with each other. For example, on the tablet side, I installed the Amazon Kindle app and downloaded some of my books to the device. Then, I navigated to my library on the tablet, clicked a book, and launched it on the eReader screen from the tablet screen.</p>
<p>Unlike some of the other &#8220;cheap / inexpensive&#8221; tablets I&#8217;ve messed with, web browsing and networking on this guy seems to be very fast. On one of my other tablets, the browser seems to take forever to launch. Once it finally does open, the pages seem to take forever to load. Not on this one. On the eDGE, the browser fires the second you click the icon and the pages seem to load almost as fast as they do on my laptop.</p>
<p>Now for the bad news. Let&#8217;s start with the hardware layout. Since the device is in a book-ish form factor, you have 2 &#8220;lids&#8221; which can sometimes become a problem, especially when considering true tablets are just one-sided. However, having the 2 pieces does allow you to fold the device so that one side can stand up for things like watching movies. The 2 lids also fold backwards onto each other, giving you that &#8220;true&#8221; tablet feel.</p>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/09/edge_tablet2.jpg"><img class="aligncenter size-full wp-image-2190" title="edge_tablet2" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/09/edge_tablet2.jpg" alt="enTourage Pocket eDGe Tablet eReader Dualbook" width="273" height="184" /></a></p>
<p>Another issue I have is that the camera, as nice as it is to be included, is located just above the eReader screen. Since the camera video is displayed on the tablet screen, I think it would&#8217;ve made more sense to put the camera on the same panel as the tablet. Having the camera where it is does allow you to fold the 2 panels backwards so that the camera is facing away from the user. But, this could&#8217;ve also been accomplished by simply placing the camera on the backside of the tablet. Well, at least it does include a camera which can&#8217;t be said for many of the other tablets out there today.</p>
<p>Now it&#8217;s time for the really bad news. The enTourage company no longer exists. So, if you&#8217;re expecting to get any kind of support for this device, I don&#8217;t think you&#8217;ll have much luck. For some reason, this device wasn&#8217;t accepted enough which lead to the device&#8217;s EOL. Because the company no longer exists, their website no longer exists either. This is where I almost returned the device. When you first turn it on, you are greeted with a welcome screen that requires you to register your device. On step 6 of the registration, the device attempts to &#8220;phone home&#8221; for registration. Since the website doesn&#8217;t exist, you will always get a network connection error code 80 message. I tried 10 times to get the device to register, the whole time thinking it might have been something to do wtih my wireless router or the WPA2 encryption I was running on it. Nothing I did seemed to work. But then there was hope.</p>
<p>After a little bit of digging on the interwebernets, I came across a YouTube video that showed me how to bypass the registration screen. To do that, take your stylus and touch once in the upper-left corner of the tablet screen just below the white bar at the top. Then, touch once in the bottom-left corner of the screen. Then the bottom-right corner of the screen. And, once more in the upper-right corner of the screen just below the white bar again. If done correctly, you should be taken directly to the Android dashboard where you&#8217;ll never be bothered with the registration screen again.</p>
<p>I admit that the whole unpassable registration screen thing was extremely annoying. But, once I got past that frustration, I&#8217;ve been nothing but pleased with this thing. In fact, I think I&#8217;m going to keep it for myself and find another gift for my grandmother for Christmas. Hopefully I can find another one of these for sale before then so that I can get her one of her own.</p>
<p>Oh, one more thing. While playing around with the video playback, I thought I&#8217;d attempt to plug in my USB-powered Western Digital harddrive that is connected to my WD Media Player since it has most of my movies on it. When I plugged it into the full-size USB port on the eDGe, the device was immediately recognized and mounted as a device. At that point, I was able to open my library and play a movie directly from the harddrive. I did the same thing using a thumbdrive. So, like I mentioned before, storage for this thing is definitely not an issue.</p>
<p>Anyways, if you&#8217;ve been debating about buying a tablet or at least would like to get your feet wet with one at an extremely low price, and if you can actually find one of these for sale, I would definitely recommend buying one. It&#8217;s very cool and definitely worth the $79 I paid for mine. I&#8217;ve been very pleased with mine so far and I believe you will feel the same. If you don&#8217;t mind paying full price for one, you can pick one up from Amazon via the link below. If you do get one or have one already, I&#8217;d like to hear from you in the comments below.</p>
<div style="text-align: center;">
<iframe src="http://rcm.amazon.com/e/cm?t=proprollc-20&#038;o=1&#038;p=8&#038;l=as1&#038;asins=B005JTHNY8&#038;ref=qf_sp_asin_til&#038;fc1=000000&#038;IS2=1&#038;lt1=_blank&#038;m=amazon&#038;lc1=0088CC&#038;bc1=FFFFFF&#038;bg1=FFFFFF&#038;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/reviews/entourage-pocket-edge-dual-ereader-tablet-review/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Parrot AR.Drone Meet SkyNET. SkyNET Meet Parrot AR.Drone</title>
		<link>http://www.prodigyproductionsllc.com/articles/misc/parrot-ar-drone-meet-skynet-skynet-meet-parrot-ar-drone/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/misc/parrot-ar-drone-meet-skynet-skynet-meet-parrot-ar-drone/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 11:30:44 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2183</guid>
		<description><![CDATA[A while back, I told you about my new toy called the AR.Drone by Parrot. It&#8217;s basically an inexpensive quadcopter that includes 2 cameras, can fly indoors &#38; outdoors, and can be controlled from your cellphone or  tablet. Well, in my case, I can now control my drone from my computer as well using a [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/09/3g_skynet_ardrones.jpg"><img class="alignleft size-full wp-image-2184" title="3g_skynet_ardrones" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/09/3g_skynet_ardrones.jpg" alt="3G Enabled AR.Drones" width="122" height="127" /></a>A while back, I told you about my new toy called the AR.Drone by Parrot. It&#8217;s basically an inexpensive quadcopter that includes 2 cameras, can fly indoors &amp; outdoors, and can be controlled from your cellphone or  tablet. Well, in my case, I can now control my drone from my computer as well using a small C# application I wrote. But, none of the things I&#8217;ve done so far can compare to what I&#8217;m about to share with you.</p>
<p><span id="more-2183"></span>Theodore Reed, Joseph Geis, and Sven Dietrich have created the ultimate, low cost hacking drone. They have modified a standard $300 Parrot quadcopter to include a 3G card, GPS unit, and 2 WiFi cards so that it can be controlled from anywhere in the world. The drone can be flown into populated areas where it can sniff out wireless networks and initiate a break-in. Once they&#8217;ve successfully penetrated a network, they locate computers that are on those networks, commence an attack against them, and install a botnet client on each machine. Then, those computers are used by a botmaster to do whatever bidding they have in store for their zombies.</p>
<p>I know it all sounds like something right out of a science fiction novel, but it&#8217;s really happening. If you think about it, it&#8217;s actually the most secure way of adding zombie nodes to a botnet as even if someone snags the drone, there&#8217;s still no easy way of linking the drone back to the botmaster. I can just picture swarms of these things flying around down town infecting everyone as they go. You can read more at <a title="3G Enabled Parrot AR.Drone SkyNET" href="https://db.usenix.org/events/woot11/tech/final_files/Reed.pdf" target="_blank">https://db.usenix.org/events/woot11/tech/final_files/Reed.pdf</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/misc/parrot-ar-drone-meet-skynet-skynet-meet-parrot-ar-drone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recovering From Being Hacked</title>
		<link>http://www.prodigyproductionsllc.com/articles/misc/recovering-from-being-hacked/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/misc/recovering-from-being-hacked/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 16:28:12 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2176</guid>
		<description><![CDATA[As many of you have pointed out, one of our servers had been performing extremely slow for about the last month. I&#8217;m happy to say that the issue has been found and resolved. For those of you that have been asking what the issue was, I want to take a few minutes to address your [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/09/bandaids.jpeg"><img class="alignleft size-full wp-image-2179" title="bandaids" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/09/bandaids.jpeg" alt="Bandaids" width="114" height="114" /></a>As many of you have pointed out, one of our servers had been performing extremely slow for about the last month. I&#8217;m happy to say that the issue has been found and resolved. For those of you that have been asking what the issue was, I want to take a few minutes to address your question and to share with you the steps we took to locate the issue and how to correct it. Although I&#8217;m not going to go into all of the details in this article, I will try my best to explain the majority of what went on. Plus, if any of you have any more specific questions regarding anything in this article, feel free to ask them in the comments below and I&#8217;ll answer you the best I can.</p>
<p><span id="more-2176"></span>Yes, the rumors are true. One of our servers was recently compromised. Apparently, unbeknown to me, one of our co-located servers was running an unpatched FTP demon. Firstly, I know how unsecure FTP is. Secondly, I don&#8217;t like running anything unpatched or out of date. So, let&#8217;s just say I was a little more than pissed to find out that our network admin had been slacking on his job. Even though we&#8217;re getting out of the web hosting business, I still expect people to do the work I am paying them for. But, that&#8217;s for another article.</p>
<p>About a month ago, we started getting reports that one of our load balanced servers was taking upwards of 60 seconds to respond. So, the first thing I did (after contacting my network guy and finding out he hasn&#8217;t been keeping up the servers as he was suppose to be) was to ping the server from a remote location. The ping seemed to be responding as expected. The next thing I did was to bring up a web page hosted on that server. Unfortunately, the reports were correct. It took more than 60 seconds for the page to load. So, I made a secured connection remotely to the box and began checking to see where the hangup was. When I connected via SSH, the response time was also slow. But, I finally made a connection and began the troubleshooting process.</p>
<p>The first command I issued was &#8220;ps -aux&#8221;. I wanted to see all the processes running on that machine and who was running them. However, the results didn&#8217;t indicate that anything was running unexpectedly. So, I next ran the &#8220;top&#8221; tool. Again, everything looked good. The CPU and memory utilization was &#8220;normal&#8221;, swap wasn&#8217;t being used at all, and there were no rogue programs running.</p>
<p>After seeing that there was nothing running on the machine that shouldn&#8217;t have been, I suspected it might have been a hardware issue. Luckily, this particular server is at a location that is within my driving distance. So, I loaded up and drove to the data center. When I got there, I noticed that one of my network cards wasn&#8217;t responding. Could this have been the problem? With a little bit of &#8220;ifconfig&#8221; magic, I got the card back online. Once it was, I tested the server again, but the problem still existed.</p>
<p>Still thinking this might be a hardware issue, I disconnected the ethernet cables from both network cards and tried to SSH back into the machine. When connecting on localhost, everything was fine. But, when I tried using the IP address of either of the network cards, the 60 second delay once again showed its ugly face. While the ethernet cables were both pulled, I decided to try and ping an outside server. For some reason, I got back a successful ping response. How could this be? Neither card was plugged in.</p>
<p>Again, I ran &#8220;top&#8221; &amp; &#8220;ps&#8221;, but found nothing. I went digging thru all of my log files and still couldn&#8217;t find anything out of the norm. Well, this is when I began realizing it wasn&#8217;t hardware related, but instead was a possible compromise. To test that theory, I issued the &#8220;yum&#8221; command to install &#8220;htop&#8221;. After &#8220;htop&#8221; was installed, I noticed all kinds of processes running that &#8220;top&#8221; wasn&#8217;t reporting. For example, htop report &#8220;ttyload&#8221; and &#8220;ttymon&#8221; when top didn&#8217;t. After a little bit of research, I found that these files were part of the SHV4 and SHV5 rootkits. These rootkits were responsible for replacing several of my system applications such as top, ifconfig, ps, netstat, lsof, etc&#8230;</p>
<p>Now that I knew what the problem was, I knew what to do to fix it. To begin with, I had to use &#8220;htop&#8221; to kill the &#8220;ttyload&#8221; and &#8220;ttymon&#8221; processes. Next, I needed to get rid of them from the file system. Before doing that, I installed a sweet little program called &#8220;rkhunter&#8221; that when ran, verified that the SHV4 and SHV5 rootkits were indeed installed on my computer and also informed me of several other issues I needed to resolve. I also had to reinstall netstat and most of the other apps so that I could do a &#8220;real&#8221; check to make sure there were no other rogue processes running.</p>
<p>Both of the rootkits that were installed had opened ports for listening. They also created backups of some of my files and created new files for &#8220;/usr/lib/libsh/hide&#8221;, &#8220;/usr/lib/libsh/.backup&#8221;, &#8220;/usr/lib/libsh/.sniff&#8221;, &#8220;/lib/libsh.so/sshk&#8221;, &#8220;/lib/libsh.so/shdcf&#8221;, &#8220;/usr/sbin/ttyload&#8221;, and a few others. However, when I tried to &#8220;ls -la&#8221; those files / folders, none of them showed up. This was because they were flagged as immutable and hidden. In order to &#8220;see&#8221; them, I had to issue an &#8220;lsattr&#8221; command on the parent folder. Once the files appeared, I could issue commands like &#8220;chattr -sia /bin/ls&#8221; to unhide them and to remove the immutable flag.</p>
<p>Anyways, after an extensive amount of cleaning and reinstalling apps, I finally got everything cleaned up. However, even after the rootkits had been removed, Apache still seemed to be responding slowly. With a little more digging, I found that my &#8220;/etc/resolv.conf&#8221; file had a bogus nameserver IP address listed in the first position and this file too was flagged as immutable. After removing the immutable flag and bogus IP address, everything went back to normal.</p>
<p>Now, I know that everyone in the forums suggest wiping out the entire box and starting over, but that wasn&#8217;t a possibility for me in this situation. So, I had to take the manual steps required to &#8220;fix the glitch&#8221; myself. Besides, I learned a lot of new tricks and found some really useful tools such as rkhunter and chrootkit which will come in handy if anything like this ever happens again (and from experience of owning a web hosting company know it will).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/misc/recovering-from-being-hacked/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Operating System Written Entirely in C#</title>
		<link>http://www.prodigyproductionsllc.com/articles/programming/c/operating-system-written-entirely-in-c/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/programming/c/operating-system-written-entirely-in-c/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 11:02:25 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2171</guid>
		<description><![CDATA[Holy c-sharp, Batman! As you already know, I&#8217;m a huge fan of C#. So, you can probably imagine what happened when I found out someone actually wrote an entire operating system in C#. It&#8217;s called &#8220;Cosmos&#8221; (http://cosmos.codeplex.com/). Short for &#8220;C# Open Source Managed Operating System&#8221;, Cosmos is an operating system that runs on x86 and [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/09/cosmos_logo.jpg"><img class="alignleft size-full wp-image-2172" title="cosmos_logo" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/09/cosmos_logo.jpg" alt="Cosmos Logo" width="227" height="112" /></a>Holy c-sharp, Batman! As you already know, I&#8217;m a huge fan of C#. So, you can probably imagine what happened when I found out someone actually wrote an entire operating system in C#. It&#8217;s called &#8220;Cosmos&#8221; (<a title="Cosmos - C# Open Source Managed Operating System" href="http://cosmos.codeplex.com/" target="_blank">http://cosmos.codeplex.com/</a>). Short for &#8220;C# Open Source Managed Operating System&#8221;, Cosmos is an operating system that runs on x86 and 64 bit processors, although support for ARM processors, iPhone, and even the Nintendo Wii are on the roadmap. I haven&#8217;t had a chance to test out the OS yet, but you can definitely be assured that I will be taking it for a spin some time today. So, if you&#8217;re interested in some C# wonderful-ness, head on over to Codeplex and snag a copy of the source code and check out Cosmos for yourself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/programming/c/operating-system-written-entirely-in-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Third Party Frameworks for Startups</title>
		<link>http://www.prodigyproductionsllc.com/articles/misc/using-third-party-frameworks-for-startups/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/misc/using-third-party-frameworks-for-startups/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 20:41:55 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2165</guid>
		<description><![CDATA[Throughout my programming career, I&#8217;ve been involved in lots and lots of startups. Many of the startups were my own. Of the startups that weren&#8217;t mine, I was brought on board for all kinds of reasons and at different points during their life cycles. Some times, I was brought in from day one for things [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/08/lock_and_chain.jpg"><img class="alignleft size-full wp-image-2166" title="lock_and_chain" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/08/lock_and_chain.jpg" alt="Lock and Chain" width="167" height="94" /></a>Throughout my programming career, I&#8217;ve been involved in lots and lots of startups. Many of the startups were my own. Of the startups that weren&#8217;t mine, I was brought on board for all kinds of reasons and at different points during their life cycles. Some times, I was brought in from day one for things like recommending technologies, overseeing the entire development process, and even creating the initial code / cornerstone for others to use as building blocks for their projects. Other times, I was brought on board for testing security &amp; performance, assisting with scaling, and even finishing up code to achieve an earlier release date. No matter when I got involved with a startup, I was always brought in as an outside consultant that brought with me a lot of experience and expertise.</p>
<p>Among that expertise, there was one topic that I almost always had to discuss with the startup owners no matter what point I got involved. Whether I got involved in the beginning before any code had been written, toward the end when it was time to apply the polish, or any where in between, I always found myself having to discuss the use of 3rd party frameworks within their applications. In the end, this topic was always appreciated most by the startup owners as they have all told me that this topic alone had the most impact in the way they designed their applications and their final results. Since everyone else found this information beneficial, I&#8217;d like to take a few minutes to share this same information with you.</p>
<p><span id="more-2165"></span>When deciding to partake in a startup, most developers feel that using third-party frameworks is the best way to go. Although this is true some of the time, it isn&#8217;t the best all of the time. Before I get into why 3rd party frameworks are not always best, let&#8217;s first explore the benefits of using 3rd party frameworks.</p>
<p>First, using a 3rd party framework can drastically cut down your design time. With a little bit of research, you will almost always find a 3rd party framework that is already capable of doing whatever it is you&#8217;re trying to do. So, it only makes sense to use these outside frameworks as opposed to writing all of this functionality by hand. Besides, who wants to reinvent the wheel? All you need is a place to start and you can easily build on top of that. Depending on the scope of your project, 3rd party frameworks can prevent you from writing hundreds or even thousands of lines of code.</p>
<p>Second, using a 3rd party framework prevents you from having to worry about certain kinds of updates. For example, if you&#8217;re project is intended to run in the web browser, do you really want to have to write the code necessary to make your app run on all of the different web browsers out there? Even if you stick with only the major browsers (Internet Explorer, Firefox, Chrome, Opera, etc&#8230;), you still have to worry about their many versions. What happens when they release a new version? Will it break your app? Will you have to retrofit your code to accomodate the new version? Why not drop in a 3rd party framework that&#8217;s entire purpose is to provide you with cross-browser functionality without you have to change any of your business logic?</p>
<p>Makes sense, right? Well, let me now explain to you a few reasons why using a 3rd party framework isn&#8217;t always the best choice.</p>
<p>First, if your application uses any kind of open source framework, that means that everyone can see how your app works. I know that open source frameworks are intended to allow for collaborative enhancements. But it also means that whenever a flaw is found, all of the bad guys can use it to exploit your application. If you don&#8217;t stay on top of bugs and especially known security vulnerabilities in the framework you&#8217;re using and keep it updated, anyone can easily exploit your application since they know how it works. By writing the code yourself and keeping it secret, it&#8217;s a whole lot harder for attackers to penetrate your application.</p>
<p>Second, you are at the mercy of the framework designers. If you decide to use a 3rd party framework for your application and later down the road the framework designers decide to change their license or start charging for use of their framework, you can either pony up &amp; pay the piper or you can stick with the current version. Since this is a startup, you probably chose to use an open source framework so that you can save money. If the framework designers begin charging to use their product, you&#8217;re probably not going to want to pay for it. So, you&#8217;ll probably just stick with the current free version. However, if you do this, you&#8217;ll eventually find yourself stuck using an obsolete version that could be full of security risks and will miss out on all of the new features that are included in the new version.</p>
<p>Lastly, before deciding to use a 3rd party framework, you need to ask yourself what your end goal is going to be. For instance, if you don&#8217;t plan on being married to this project for the rest of your life or you think there might be a chance of cashing out and moving on, then using a 3rd party framework probably isn&#8217;t for you. The reason I say that goes back to the whole licensing issue. Depending on what kind of license the 3rd party framework has, you probably won&#8217;t be able to sell your application easily if at all because it contains a third-party framework that includes a license that prohibits this. Plus, you should trust me when I say that asking for someone to pay you for a product that you created entirely on your own without help from any outsiders is a whole lot easier than asking for money for a product that you&#8217;re only half responsible for. Besides, neither you nor the potential buyer wants to be tied to an outside vendor just because you decided to use their products inside your own. If you can take your product to a potential investor and show that you or your developers wrote every last line of code in the app, you will see a much larger offer than you would if you had to explain that by buying this app, the buyer also has to pay an outside vendor for a license to use their product inside the one you&#8217;re selling.</p>
<p>So, as you can see, there are both pros and cons to using a 3rd party framework in your project. Before doing so, it is your responsibility to weigh those pros &amp; cons and see what is the better choice for you. If you don&#8217;t have an issue with security, licensing &amp; versioning, and / or resale possibilities, then I would recommend using a 3rd party framework. However, if you have a little more flexible time frame and / or wish to increase your app&#8217;s security, keep yourself from being tied to any other party, or want to make your project easier to sell down the road, then I would recommend taking the time to write the code and do the work yourself. In the end, your project will be worth 10 times more than it would if you went with a 3rd party framework. Even if you don&#8217;t make a dime from your project, you&#8217;ll still have the self-satisfaction of knowing you created that entire product on your own and that feeling alone is worth the labor of doing it yourself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/misc/using-third-party-frameworks-for-startups/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learn to Code with Codecademy</title>
		<link>http://www.prodigyproductionsllc.com/articles/programming/learn-to-code-with-codecademy/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/programming/learn-to-code-with-codecademy/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 11:00:01 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2161</guid>
		<description><![CDATA[If I had to choose one word to best describe the visitors of this site it would have to be &#8220;lazy&#8221;. Yep, I said it. Lazy! About 95% of the visitors to this site would rather ask for an entire working application than to go create it on their own. They don&#8217;t want to spend [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/08/programming.jpg"><img class="alignleft size-full wp-image-2162" title="programming" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/08/programming.jpg" alt="Programming Screen" width="202" height="157" /></a>If I had to choose one word to best describe the visitors of this site it would have to be &#8220;lazy&#8221;. Yep, I said it. Lazy! About 95% of the visitors to this site would rather ask for an entire working application than to go create it on their own. They don&#8217;t want to spend the necessary time learning how to program. Instead, they want instant gratification by having someone else do the work for them.</p>
<p>The articles I&#8217;ve written here are only intended as starting points for your own applications. However, I&#8217;m constantly swamped with emails asking me to write complete programs for people. I get requests for applications for senior college projects and even for commercial applications. For example, just a couple of days ago I received an email asking for an application that can monitor social networks using sentiment analysis and choose which stocks to trade based on that information. This would be a great project to work on if I was getting paid for it. However, I wouldn&#8217;t be receiving anything for it as it was a project that a reader of this site was tasked to do for his day job.</p>
<p>I don&#8217;t mind helping out and answering questions where I can, but having me write the entire program doesn&#8217;t benefit anyone. What happens when you&#8217;re expected to add additional functionality to the app later on? What happens when you&#8217;re asked to fix a bug? What if I&#8217;m not here to help you with that app anymore? I&#8217;ve seen people go down in flames over things just like this.</p>
<p>For example, a few years back I knew a guy that was a basic computer user that copied some code from a website, used it at his job, and told his boss he wrote it himself. Impressed with the application, his bossed offered him a job in IS writing small programs to help automate some of the mundane office tasks that ate up so much of the employees&#8217; time. He thought, &#8220;this is easy. I can do this.&#8221; The new job offer would also come with a hefty pay increase. The job also required that he write the code while at the office. Unfortunately for him, he didn&#8217;t have a clue about programming and wasn&#8217;t allowed internet access from the office. After a week or so, his boss began getting upset at the poor turn around time of his new &#8220;programmer&#8221;. All of the apps that he was asked to write were small one-off jobs that would take any &#8220;real&#8221; developer a few minutes to complete. Each of those jobs had to be handed off to the other developers for completion. When questioned by his boss, he admittedly came clean and confessed to not knowing how to program.</p>
<p>Although his honesty was appreciated, his employeer still deemed it necessary to let him go. He could&#8217;ve avoided this whole mess if he had just taken the time and did the work required to learn how to program. As a guy that has been writing applications for 23 years, I know exactly what it takes to learn how to program. I read everything I can get my hands on and I still occassionally find myself asking for help in the forums. But, I never ask anyone to write an entire application for me.</p>
<p>With today&#8217;s resources, learning how to program could never be easier. There are sites like <a title="Learn to code | Codecademy" href="http://www.codecademy.com" target="_blank">Codecademy</a> (<a title="Learn to code | Codecademy" href="http://www.codecademy.com" target="_blank">http://www.codecademy.com</a>) that help you learn to program in a very friendly way. <a title="Learn to code | Codecademy" href="http://www.codecademy.com" target="_blank">Codecademy</a> does a great job of teaching you the basics of programming by walking you thru simple programming logic using the Javascript programming language. The site provides you with instructions for tasks to complete and a terminal window to do the actual work. If you mess up, you will receive help via the terminal window. The site also allows you to track and share your progress so that you know exactly how you&#8217;re doing and how far you have to go. You won&#8217;t be learning anything like sentiment analysis, but you will be learning the basics that are required before jumping into such an endevour.</p>
<p>So, stop asking for others to write the programs for you and learn how to program already! There&#8217;s no reason you can&#8217;t learn how to write your own programs. Trust me when I say that learning how to program is much more valuable than asking someone else to do the work for you. Besides, the more you know, the more you&#8217;re worth!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/programming/learn-to-code-with-codecademy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Future of Programming</title>
		<link>http://www.prodigyproductionsllc.com/articles/programming/the-future-of-programming/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/programming/the-future-of-programming/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 17:21:36 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2156</guid>
		<description><![CDATA[As a professional geek, I&#8217;m constantly finding myself being pulled into discussions and debates about all-things-technology. For example, some guys from work and I have been engaged in an ongoing debate about the future of programming and what we should be focusing on. Even though most technologies are growing every day at a tremendous rate, [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/08/future_next_exit.jpg"><img class="alignleft size-full wp-image-2157" title="future_next_exit" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/08/future_next_exit.jpg" alt="The Future - Next Exit" width="174" height="139" /></a>As a professional geek, I&#8217;m constantly finding myself being pulled into discussions and debates about all-things-technology. For example, some guys from work and I have been engaged in an ongoing debate about the future of programming and what we should be focusing on. Even though most technologies are growing every day at a tremendous rate, programming technologies have moved seemingly slower, but still maintaining a stable state. It seems as though we have been depending on the same programming technologies for quiet a long time. Now, I know that our current technologies continue to grow and are fairly young in the overall scheme of things. But, it&#8217;s just a matter of time before our current technologies need a bigger upgrade.</p>
<p><span id="more-2156"></span>For example, many years ago, Cobol was one of the leading technologies used in the corporate world. And, unfortunately, it&#8217;s still fairly dominant these days as well. However, Cobol is an antique technology that can&#8217;t keep pace with some of today&#8217;s competitors like Java and .NET. Slowly, businesses have been learning this and have been migrating their internal applications more toward other languages including Java and .NET. But, what&#8217;s going to happen when Java and .NET aren&#8217;t enough any more?</p>
<p>Recently, I&#8217;ve read several articles indicating that Microsoft plans on dropping the entire .NET framework in a future version of their Windows operating system. As a huge fan of the C# language, this isn&#8217;t something I enjoy reading. I&#8217;ve written hundreds if not thousands of apps using C# and find myself more and more impressed with the language as the days go by. I am yet to find anything that C# can&#8217;t do for me. It performs amazingly and is extremely easy to learn and to program. In fact, I&#8217;ve even toyed with the idea of creating my own operating system that is based entirely on the .NET framework. That would allow .NET fans like myself to focus all of my programming attention on 1 specific architecture.</p>
<p>Microsoft says that they plan to drop the .NET framework in favor of HTML5 and Javascript. Although I agree that computer use is gearing more towards web enabled, I don&#8217;t believe that it is a cure-all. For example, Google&#8217;s Chromium operating system is an entire web based OS that is built specifically for web computing where everything will run in the cloud. Even though I like Chromium, I don&#8217;t feel like it is where we should be heading. Plus, we all know that companies like Microsoft want to do things their own way. So, getting them to follow the HTML5 standards specification will most likely not happen. Not to mention, everything we have today in regards to desktop applications won&#8217;t be backwards compatible with a web based OS.</p>
<p>So, if .NET isn&#8217;t the way to go, then what about Java? Well, with the Oracle acquisition of Sun Microsystems and its Java programming language, I think Java will soon meet its demise as well. Oracle is known for its bullying stance and closed, proprietary systems. Over time, I believe that they will begin a process to monetize the Java language which will inevitably push away independent developers such as myself. Sure, the bigger companies won&#8217;t have a problem paying the price tag that Oracle will put on the language. But, what about smaller companies and even startups? They will be more interested in keeping their own costs down and will obviously steer clear of Oracle.</p>
<p>Well, where does that leave us now? First off, if you&#8217;re developing web applications of any kind, I would personally recommend that you be using PHP. I&#8217;ve made this comment before and have always gotten the same feedback. &#8220;PHP is unsecure and it&#8217;s an interpreted language and blah blah blah&#8221;. Listen, I use to teach PHP programming &amp; security and I know first hand that PHP can be just as secure as any other language if treated properly. So, ignore all of those PHP nay-sayers. Most of them are simply misinformed. As for PHP being an interpreted language, you can say the same about almost every language out there including Java and C#.</p>
<p>Just like Java and C#, PHP requires a VM of sorts to read in the code and process accordingly. Java requires its JVM and C# requires the .NET framework. Other languages such as Perl and Python also have their own required interpreters. The only difference between these languages is that Java and C# get compiled and PHP doesn&#8217;t. But, that doesn&#8217;t mean that PHP isn&#8217;t just as powerful at handling web requests. Plus, like Java, languages such as Python, PHP, and Perl are all capable of running on any OS platform. So, don&#8217;t discredit interpreted languages until you know the facts.</p>
<p>Even though I&#8217;m not a huge fan of the indention based practice that Python brings with it, I do believe that Python is extremely powerful and could definitely be a contender in the future of programming. Not too long ago, I read that several schools such as MIT and Stanford are starting to teach Python as their language of choice for beginning programmers. The syntax is easy to follow and very minimalistic. In fact, it&#8217;s almost like writing pseudo code. However, like many other languages, you could assign the same project to 5 different Python programmers and would get back 5 different versions, each version handling things completely different but still producing the same results.</p>
<p>Of all the languages I&#8217;ve mentioned so far, I think that Python has the best chance of becoming the future of programming. But, let&#8217;s take a minute to discuss what &#8220;the future of programming&#8221; should be. For me, I believe that the next big programming language should bring more than simple syntax and / or drag-n-drop GUI editors. I think that it should provide a true all-in-one experience. I would like to see a programming language that allows me to run the same code on any operating system without requiring any extras such as VMs or frameworks. I would like for the application to be completely self-contained. I would also like to see the application run in any environment without any application changes.</p>
<p>For example, if I&#8217;m working on an application that is intended to run as a standalone desktop application, I would like to also have the ability to run that same application over the web. For that, I would want it to have its own built-in web server. I hate having to design web applications that are intended for one specific web server, only to find myself making changes to it in order for it to run on another webserver. You can spend weeks, months, even years creating an app that is targeted to run on Tomcat or Websphere or Weblogic or Glassfish or JBoss or whatever. But, as soon as you make the decision to run that app in another container, you have to make changes. Plus, your changes can vary greatly when having to worry about runtime versions.</p>
<p>Why bother worrying whether or not your app can run on a specific server or with a specific version? Why not just deploy it and let its built-in web server handle everything for you? Plus, I would like to see that same application run as a standalone desktop application that does not provide support for multiple users, but still provides the same functionality using the same code as the app that runs on its own built-in server. If you look around at the apps currently installed on your computer, they&#8217;re all mostly the same. They have some sort of menu bar across the top, a tree panel down the left, and the right or center region houses the content of the app. This is also the default design for web applications. So, why have to reinvent the wheel? Why can&#8217;t I just click a button that allows me to run that same app, same code as a client app and then click another button to run that same app, same code as a web app?</p>
<p>Heck, while we&#8217;re at it, why can&#8217;t we go ahead and get all dependencies added in as well? For example, I would like to wrap up my application, runtimes, the server, and even the database all into one deployable object. Then, I could drop that object on any computer running any operating system and get the same results across the board. The app could contain a config file that allows me to run it as single user or multi-user. If I set it to run as multi-user, I could simply assign it a port number to run on and now anyone with a web browser can access my application and data. If I don&#8217;t want anyone else to access my application or I don&#8217;t want to use a shared application, I can run my own local copy in single-user mode. For example, if I&#8217;m running a Linux desktop as my workstation, I could run my app in mixed mode which would allow me to access the app from a local copy, but would also allow others to access my app from their browser. Why not, it has its own web server built-in?</p>
<p>Anyways, these are just some thoughts I have about the future of programming. I know I&#8217;m not the only person out there that&#8217;s thought about these things. So, be sure to share your thoughts with us in the comments below. Let us know where you think we&#8217;ll be in 5, 10, 15, or 20 years. Let us know what you think will be the next big breakthrough in programming. Let us know if you have anything in the works that might be a possibility for us to checkout. If you have an idea for a new programming language or design model and would like for some help seeing it through, let us know in the comments below. I think this is something that is going to take more than 1 person to accomplish and I for one am willing to help out. In fact, I&#8217;ve already been kicking around some programming language ideas that I might pursue. If I choose to do so, I&#8217;ll definitely come back here and share them with all of you.</p>
<p>Only time will tell!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/programming/the-future-of-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Experiencing Technical Difficulties</title>
		<link>http://www.prodigyproductionsllc.com/articles/general/experiencing-technical-difficulties/</link>
		<comments>http://www.prodigyproductionsllc.com/articles/general/experiencing-technical-difficulties/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 13:44:30 +0000</pubDate>
		<dc:creator>LuCuS</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.prodigyproductionsllc.com/?p=2151</guid>
		<description><![CDATA[As I&#8217;m sure you&#8217;ve noticed, this site has been responding very slow for the last week. That&#8217;s because we have been having all kinds of server issues. Please bare with us as we work to resolve these issues. Because of dealing with server issues, I haven&#8217;t had time to respond to all emails and comments. [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPython.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.prodigyproductionsllc.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p><a href="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/08/technical-difficulties-please-standby.jpg"><img class="alignleft size-full wp-image-2152" title="technical-difficulties-please-standby" src="http://www.prodigyproductionsllc.com/wp-content/uploads/2011/08/technical-difficulties-please-standby.jpg" alt="Experiencing Technical Difficulties - Please Standby" width="129" height="96" /></a>As I&#8217;m sure you&#8217;ve noticed, this site has been responding very slow for the last week. That&#8217;s because we have been having all kinds of server issues. Please bare with us as we work to resolve these issues. Because of dealing with server issues, I haven&#8217;t had time to respond to all emails and comments. Once we have overcome these issues, I will respond to all comments and emails. Thank you for your patience and interest in this site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prodigyproductionsllc.com/articles/general/experiencing-technical-difficulties/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

