<?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>All About Unidev &#187; General Technology</title>
	<atom:link href="http://blog.unidev.com/index.php/category/general-technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.unidev.com</link>
	<description>Custom Software, Website and Mobile Development News</description>
	<lastBuildDate>Wed, 25 Jan 2012 20:54:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>What Makes a Good Developer?</title>
		<link>http://blog.unidev.com/index.php/2012/01/19/what-makes-a-good-developer/</link>
		<comments>http://blog.unidev.com/index.php/2012/01/19/what-makes-a-good-developer/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 21:16:46 +0000</pubDate>
		<dc:creator>PatNiday</dc:creator>
				<category><![CDATA[About Unidev]]></category>
		<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Office News]]></category>
		<category><![CDATA[.net development]]></category>
		<category><![CDATA[custom development]]></category>
		<category><![CDATA[great developer traits]]></category>
		<category><![CDATA[java development]]></category>
		<category><![CDATA[mobile applications development]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=601</guid>
		<description><![CDATA[Here at Unidev we pride ourselves on the diverse skills and years of experience our development teams bring to their projects. Whether it’s custom software design or mobile application development, our developers have what it takes to provide innovative and elegant solutions to our clients. But what exactly makes a great developer? Are there certain [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.unidev.com/wp-content/uploads/2012/01/WhatMakesDeveloper.jpg"><img class="alignright size-full wp-image-625" title="WhatMakesDeveloper" src="http://blog.unidev.com/wp-content/uploads/2012/01/WhatMakesDeveloper.jpg" alt="What Makes A Developer from http://alvar.a-blast.org/plat_forms/ " width="376" height="279" /></a>Here at Unidev we pride ourselves on the diverse skills and years of experience our development teams bring to their projects. Whether it’s <a title="Custom Software Development and Design" href="http://www.unidev.com/services/custom_software_development.aspx" target="_blank">custom software design</a> or <a title="Mobile App Developers, Mobile App Design and Development" href="http://www.unidev.com/services/mobile-development.aspx" target="_blank">mobile application development</a>, our developers have what it takes to provide innovative and elegant solutions to our clients.</p>
<p>But what exactly makes a great developer? Are there certain traits, skills or habits a successful developer needs? Well, we asked the talented members of the Java, .Net, and mobile development teams at Unidev to find out.</p>
<h2>Testing</h2>
<p>Of course, a great developer tests her code thoroughly to ensure it performs just as the client expects. Christine of the Unidev West development team in Las Vegas submitted the mantra, “testing, testing, testing” to highlight its importance. This element is essential in delivering high-quality code with confidence.</p>
<p>But testing isn’t simply a phase at the end of a project; it’s a mentality integral to the entire development process. We couldn’t say it any better than one of Unidev’s talented developers, Teresa:</p>
<blockquote><p>“Besides having some test cases before he starts coding, [a great developer] is also thinking of test cases as he goes, so he can try to break his code in the testing phase. Oh yeah, and he tests his stuff- thoroughly.”</p></blockquote>
<h2>Communication</h2>
<p>This development skill may not seem as obvious as technical skills or problem solving abilities, but it is extremely important nonetheless. Great code cannot simply exist in a vacuum, it needs to comply with client needs and function properly with code from other developers.</p>
<p>Strong communication skills reduce errors and can catch minor problems and miscommunications before they become major headaches. Kevin from our development team in St. Louis puts it best:</p>
<blockquote><p>“A good developer must be a good communicator. He must be able to understand a client’s needs and then be able to respond with useful solutions. He must also be able to explain his development strategy to co-workers.”</p></blockquote>
<h2>Teamwork</h2>
<p>Another intangible skill a great developer must possess is teamwork. Successful development may rely heavily on individual abilities, but without positive interactions between other team members, things can fall apart quickly. Brian, another member of our development team in St. Louis, shares his thoughts:</p>
<blockquote><p>“Although development is largely an individual activity, ultimately the efforts of all the individuals on the team are combined to make the final program, product, or website. If a developer cannot handle the teamwork aspect, he/she will likely be limited to projects where his or her efforts will not adversely affect the larger team.”</p></blockquote>
<p>These are just a few aspects that the Unidev team thought distinguished a “competent developer” from a “great developer”. Do you agree or disagree? Tell us what you think makes a great developer in the comments below!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2012/01/19/what-makes-a-good-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Make A Live Video Broadcast with Livestream</title>
		<link>http://blog.unidev.com/index.php/2011/11/09/how-to-broadcast-online-video-live/</link>
		<comments>http://blog.unidev.com/index.php/2011/11/09/how-to-broadcast-online-video-live/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 19:57:06 +0000</pubDate>
		<dc:creator>PatNiday</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[event marketing]]></category>
		<category><![CDATA[event technology]]></category>
		<category><![CDATA[how to broadcast live video]]></category>
		<category><![CDATA[how to livestream]]></category>
		<category><![CDATA[live online video]]></category>
		<category><![CDATA[live presentation software]]></category>
		<category><![CDATA[livestream guide]]></category>
		<category><![CDATA[webcam uses]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=482</guid>
		<description><![CDATA[Live online video offers an unprecedented level of connectedness between users, events, and the brands that host them. Modern processors, webcams, and bandwidth speeds now allow companies large and small to become their own Live TV studio. Businesses can now stream company announcements, educational seminars, and valuable Q&#38;A sessions directly to users on their website [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_509" class="wp-caption aligncenter" style="width: 643px"><a href="http://blog.unidev.com/wp-content/uploads/2011/11/unidev-live-stream-channel.jpg"><img class="size-full wp-image-509" title="unidev-live-stream-channel" src="http://blog.unidev.com/wp-content/uploads/2011/11/unidev-live-stream-channel.jpg" alt="The Unidev Live Channel" width="633" height="324" /></a><p class="wp-caption-text">Unidev recently launched a channel on Livestream.com</p></div>
<p>Live online video offers an unprecedented level of connectedness between users, events, and the brands that host them. Modern processors, webcams, and bandwidth speeds now allow companies large and small to become their own Live TV studio. Businesses can now stream company announcements, educational seminars, and valuable Q&amp;A sessions directly to users on their website in real time.</p>
<p>Want to broadcast live video around the world but don’t know where to start? Here’s a quick guide to getting started with live streaming video, following the process used to get <a title="Unidev Live" href="http://www.livestream.com/unidevlive" target="_blank">The Unidev Live Channel </a>up and running.</p>
<h3>Hardware and Equipment</h3>
<p>Though the equipment is fairly simple, the hardware involved in the live streaming process is very important. The major elements needed are a camera, a microphone, and a PC robust enough to process the video.</p>
<p>A high-definition webcam is a simple way to capture video that is easy to encode and broadcast. For Unidev live we used a <a title="Amazon.com: Logitech 1080p Webcam Pro C910 with Skype HD" href="http://www.amazon.com/Logitech-1080p-Webcam-Pro-C910/dp/B003M2YT96/ref=pd_bxgy_MI_text_b" target="_blank">Logitech 1080p Webcam Pro C910</a> that cost around $70. This was a fairly inexpensive way to capture high quality video, and its USB output made it simple for encoding and streaming.</p>
<p>Next an audio capturing device is needed. While most webcams have a microphone, higher quality and flexibility is achieved with a dedicated microphone. For Unidev Live we used a <a title="Amazon.com: MXL AC404 USB Conference Microphone" href="http://www.amazon.com/MXL-AC404-USB-Conference-Microphone/dp/B001TGTDFM" target="_blank">MXL AC404 USB Conference Microphone</a> for about $75. This microphone captured the ambient noise in the room, which was ideal for our discussion based events. Again, the USB output on this microphone makes sound capture and encoding very simple on a PC.</p>
<p>A fairly powerful computer is needed to process and encode the video and audio on the fly.  The CPU is the most important component. To achieve a desirable frame rate (at least 30 frames per second), the computer should be equipped with a dual or quad core processor. The computer should also have a decent amount of RAM (4 GB) and a dedicated video card with at least 512MB VRAM.</p>
<p>Streaming video also requires a certain amount of bandwidth to broadcast a quality video. Upload speeds should be around 1.2 Mbps to 1.5 Mbps. As always you can test your bandwidth speeds at <a title="Test Bandwidth Speeds | Speedtest.net" href="speedtest.net" target="_blank">speedtest.net</a>.</p>
<h3>Software and Service</h3>
<p>Once all the hardware is in place, it’s time to select a streaming service to host your live channel. Justin.tv, Ustream.tv, and Livestream.com are all popular services that allow for free live video broadcasting. We decided to host on Livestream.com for The Unidev Live channel due to the simplicity of the interface and software, but all three services are capable and free.</p>
<p>It is possible to broadcast live video from the webcam on the Livestream.com website right away. However, if you would like to incorporate a feed from the desktop to include videos, slides, and graphics you will need to download capturing software.</p>
<p>Livestream.com offers <a title="Procaster Live Broadcasting Software | Livestream.com" href="http://www.livestream.com/platform/procaster" target="_blank">Procaster</a>, a small program that connects directly with your Livestream.com channel. Procaster captures, encodes, and streams the webcam video feed, the audio from the mic, and a feed of the computer monitor. This allows for live editing between video of the presenter and presentation slides on the computer, including picture-in-picture.</p>
<div id="attachment_510" class="wp-caption aligncenter" style="width: 665px"><a href="http://blog.unidev.com/wp-content/uploads/2011/11/live-stream-presentation-unidev-copy.png"><img class="size-large wp-image-510  " title="live-stream-presentation-unidev copy" src="http://blog.unidev.com/wp-content/uploads/2011/11/live-stream-presentation-unidev-copy-1024x594.png" alt="Live stream presentation from Unidev" width="655" height="380" /></a><p class="wp-caption-text">The Procaster software allows on-the-fly mixing of video and desktop feeds.</p></div>
<p>Live streaming allows businesses to create content in real time with their fans in a high impact medium. Additionally, the live player is fully embeddable on your website and the broadcasts are recorded and archived to show other viewers later.</p>
<p>This technology offers a great opportunity for brand building and consumer engagement. Overall, live video broadcasting does have some technical demands, but the content produced is very valuable.</p>
<p>Questions regarding live video broadcasting or video optimization? <a title="Unidev: Contact Us - St Louis, Missouri, Las Vegas, Nevada &amp; Omaha, Nebraska" href="http://www.unidev.com/contact_us.aspx" target="_blank">Contact us</a> today!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2011/11/09/how-to-broadcast-online-video-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don’t Waste Your Money on Obsolete Technology Gifts This Year!</title>
		<link>http://blog.unidev.com/index.php/2011/11/03/dont-waste-your-money-on-obsolete-technology-gifts-this-year/</link>
		<comments>http://blog.unidev.com/index.php/2011/11/03/dont-waste-your-money-on-obsolete-technology-gifts-this-year/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 13:24:04 +0000</pubDate>
		<dc:creator>Samantha Seligsohn</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[black friday]]></category>
		<category><![CDATA[gadgets]]></category>
		<category><![CDATA[holiday shopping]]></category>
		<category><![CDATA[holiday shopping 2011]]></category>
		<category><![CDATA[playstation]]></category>
		<category><![CDATA[playstation3]]></category>
		<category><![CDATA[tech toys]]></category>
		<category><![CDATA[technology gifts]]></category>
		<category><![CDATA[technology toys]]></category>
		<category><![CDATA[video game consoles]]></category>
		<category><![CDATA[video games]]></category>
		<category><![CDATA[video gaming]]></category>
		<category><![CDATA[video gaming consoles]]></category>
		<category><![CDATA[xbox]]></category>
		<category><![CDATA[xbox 360]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=444</guid>
		<description><![CDATA[Holiday shopping is just around the corner and we’re just weeks out from the biggest shopping day of the year, Black Friday. If you’re planning to purchase tech toys for the computer nerd in your life, you might think twice before purchasing the following items. Why? Because they might not even be around soon! 1. [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_459" class="wp-caption alignright" style="width: 261px"><a href="http://blog.unidev.com/wp-content/uploads/2011/11/index.jpg"><img class="size-full wp-image-459  " title="XBox 360 Controller" src="http://blog.unidev.com/wp-content/uploads/2011/11/index.jpg" alt="" width="251" height="201" /></a><p class="wp-caption-text">XBox 360 Controller posted from flickr</p></div>
<p>Holiday shopping is just around the corner and we’re just weeks out from the biggest shopping day of the year, Black Friday. If you’re planning to purchase tech toys for the computer nerd in your life, you might think twice before purchasing the following items. Why? Because they might not even be around soon!</p>
<p>1. Standalone GPS Systems<br />
2. E-Readers<br />
3. Feature Phones (even if they’re only $19.99!!)<br />
4. Low-End Digital Cameras<br />
5. DVD Players<br />
6. Recordable CDs and DVDs and here’s the kicker…<br />
7. Video Game Consoles</p>
<p>We’d like to add USB cables to this list. All hail Wifi, Bluetooth and solar energy! But then again, they may still exist in 2020.</p>
<p>Seth Fiegerman lists these gadgets as the<a title="7 Gadgets That Won't Be Around In 2020" href="http://shopping.yahoo.com/articles/yshoppingarticles/717/7-gadgets-that-wont-be-around-in-2020"> 7 Gadgets That Won&#8217;t Be Around In 2020</a> in a recent Yahoo! Shopping article. In the article, Seth talks about which tech gadgets will be phased out this decade. One surprising gadget that is often associated with “gift unwrap excitement” is the video game console. Ouch!</p>
<p>Video games will forever be popular, but will the separate consoles go away completely and all join as one on smartphone’s, televisions and computers? Seth’s article says, “The gaming systems that will succeed in the future will be those that manage to move away from being focused solely on video games and more on other entertainment options such as movies, evolving from a traditional game console into more of a set-top box.”</p>
<p>Think about the most recent release of gaming consoles, Play Station 3 and X-Box 360. Both of those allow you to access the internet, watch and rent movies and they even have Wi-Fi. But experts still say they won’t be in our homes forever. Rob Enderle, a principle analyst for the Enderle Group expects that consumers will instead buy smart televisions with a gaming system built into it.</p>
<p>If technology is only growing, imagine what the price of these new video games and accessories are going to cost. They already cost an arm and a leg.</p>
<p>What are they going to come up with next?</p>
<p>Interested in <a title="St. Louis IT and Information Technology Consulting Firm, Unidev" href="http://www.unidev.com/services/it_consulting.aspx">technology</a>? Learn more about what <a title="St. Louis custom Web and Software Development Company, Unidev" href="http://www.unidev.com/">Unidev</a> can do for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2011/11/03/dont-waste-your-money-on-obsolete-technology-gifts-this-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Migrate from HP-UX to Linux: Undefined Behavior</title>
		<link>http://blog.unidev.com/index.php/2011/07/27/hpux-linux-undefined-behavior/</link>
		<comments>http://blog.unidev.com/index.php/2011/07/27/hpux-linux-undefined-behavior/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 21:04:45 +0000</pubDate>
		<dc:creator>ScottMcKellar</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[General Technology]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[HP-UX]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[C programming language]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[undefined behavior]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=361</guid>
		<description><![CDATA[The C and C++ languages don’t try to define the results of every syntactically correct program.  For example, if you dynamically allocate some memory, and then free it, and then try to access the memory you freed, you invoke undefined behavior.  The C and C++ standards don’t specify how the program will respond. Undefined behavior [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><span style="font-family: helvetica;">The C and C++ languages don’t try to define the results of every syntactically correct program.  For example, if you dynamically allocate some memory, and then free it, and then try to access the memory you freed, you invoke undefined behavior.  The C and C++ standards don’t specify how the program will respond.</span></p>
<p><span style="font-family: helvetica;">Undefined behavior means that anything can happen, because the compiler is under no constraints.   The traditional formulation is that undefined behavior can make demons fly out your nose.  In practice the consequences are usually less dramatic.</span></p>
<p><span style="font-family: helvetica;">If demons ever fly out your nose, you’ll know you have a bug.  You can track it down and fix it.  More insidious is undefined behavior that happens to be exactly what you want.</span></p>
<p><span style="font-family: helvetica;">I ran across an example as I was preparing to port some code from HP-UX to Linux.  The program was freeing a linked list, using code similar to the following:</span></p>
<p>&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">Node * curr_node = first_node;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">while( curr_node )</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">{</span></p>
<p style="padding-left: 60px;"><span style="font-family: courier new,courier;"> free( curr_node );</span></p>
<p style="padding-left: 60px;"><span style="font-family: courier new,courier;"> curr_node = curr_node-&gt;next;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">}</span></p>
<p>&nbsp;</p>
<p><span style="font-family: helvetica;">To a long-time C coder, this code immediately looks fishy, because the loop has only two statements in it.  Look a little closer.  The second statement in the loop tries to access memory through a pointer that has already been freed.  It invokes undefined behavior.</span></p>
<p><span style="font-family: helvetica;">This program has been running for years with no obvious ill effects from this bug.  Apparently HP-UX isn’t very persnickety about accessing previously freed memory.  That’s legal.  “Anything can happen” includes “what you want.”</span></p>
<p><span style="font-family: helvetica;">When I first saw this code, I wasn’t ready to port the entire program to Linux yet, but I could experiment.  I dashed off a little test program that built a linked list and then freed it, using the logic shown above.  Under HP-UX this program ran to completion without incident.  Under Linux, the same program stopped abruptly in the first iteration.  It didn’t issue any messages, dump core, or even leave a non-zero condition code; it just stopped cold.  That’s legal too.  Anything can happen.</span></p>
<p><span style="font-family: helvetica;">I don’t know whether this difference is attributable to the operating systems, the compilers, the libraries, or the machine architectures.  I don’t care.  What matters is that I can’t run this program under Linux without fixing the loop:</span></p>
<p>&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">Node * curr_node = first_node;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">while( curr_node )</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">{</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;"> Node * temp = curr_node-&gt;next;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;"> free( curr_node );</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;"> curr_node = temp;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">}</span></p>
<p>&nbsp;</p>
<p><span style="font-family: helvetica;">A few days later, another example of undefined behavior popped up, in the form of a buffer overflow.  Under HP-UX the overflow had no visible effect, at least not until I started poking around with printf statements.  Under Linux the code just didn’t work.  Probably the variables are arranged differently in memory.  In HP-UX the overflow didn’t damage anything that mattered, and in Linux it did.</span></p>
<p><span style="font-family: helvetica;">These examples are just things that I stumbled across.  There will be more, and I won’t catch them all so painlessly.  Fancy code analyzers may help catch things in advance, but there is no substitute for vigilance.</span></p>
<p><span style="font-family: helvetica;">It’s tempting to conclude that HP-UX is more forgiving of blunders than Linux is, since some things work in HP-UX but don’t work in Linux.  That conclusion is premature.  Maybe the two platforms are just forgiving about different things.  If the bugs had done obvious damage under HP-UX they would have been fixed already.</span></p>
<p><span style="font-family: helvetica;">There’s a Darwinian process at work here.  Bugs survive when they’re well adapted to the environment.  When the environment changes, some of those bugs will go extinct.  Unfortunately, new species will probably replace them.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2011/07/27/hpux-linux-undefined-behavior/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Clean the LizaMoon SQL Injection Attack</title>
		<link>http://blog.unidev.com/index.php/2011/07/06/how-to-clean-lizamoon-sql-injection-attack/</link>
		<comments>http://blog.unidev.com/index.php/2011/07/06/how-to-clean-lizamoon-sql-injection-attack/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 21:12:30 +0000</pubDate>
		<dc:creator>Kevin Couch</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[clean]]></category>
		<category><![CDATA[cleaning]]></category>
		<category><![CDATA[columns]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[injected code]]></category>
		<category><![CDATA[injection]]></category>
		<category><![CDATA[LizaMoon]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[strings]]></category>
		<category><![CDATA[tables]]></category>
		<category><![CDATA[virus]]></category>
		<category><![CDATA[viruses]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=338</guid>
		<description><![CDATA[When a website’s database has been compromised with a SQL injection attack, it is important to clean it up as soon as possible. An attack of this nature passes SQL commands through a web site into a database. In the following case, many different HTML code statements were spread throughout multiple tables and columns. In [...]]]></description>
			<content:encoded><![CDATA[<p>When a website’s database has been compromised with a SQL injection attack, it is important to clean it up as soon as possible.  An attack of this nature passes SQL commands through a web site into a database. In the following case, many different HTML code statements were spread throughout multiple tables and columns. In short, the way to clean this type of attack is to identify the kind of injection, search for the offensive code, and then remove it.</p>
<p>Recently a company contacted us when they noticed a problem with their page titles.  There was unknown HTML code, a script tag, showing up in the titles linking to ur.php, an obvious problem, so I began my investigation.</p>
<p>The first task was to find information about other sites which had also been attacked with the same HTML injection. A quick web search turned up the so-called LizaMoon attack which has been showing itself around the internet since at least autumn of 2010.  LizaMoon has impacted well over 1 million different websites by inserting malicious code.</p>
<p>The next task was to determine a way to find all variances of the injected code. Besides looking for the URLs that had been known to be inserted (listed on many websites), I wanted to determine what other variants might be hidden in the good data of the database. To do this I compiled a list of strings that are not likely to be widespread in that database, including:</p>
<p>.js, php, script, .pl, .info, cfm, .inc</p>
<p>In order to search through all the tables and columns, I used the SQL script found here:<br />
<a title="search all columns in all tables" href="http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm"><span style="color: #800000;">http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm</span></a><br />
I modified it to include text and ntext columns and then started searching.</p>
<p>Even though the SQL script was finding what I wanted, it still took time to look at some data by hand to determine exactly what to remove. I made a backup of the database before I updated anything, always a good idea before a mass update, and then started removing the injected code. Here are the strings I ended up removing:</p>
<p>&lt;script src=&#8221;hXXp://asweds.cXm/ur.pXp&#8221;&gt;&lt;/script&gt;<br />
&lt;a style=&#8221;display: none;&#8221; href=&#8221;hXXp://bookavio.cXm&#8221;&gt;book&lt;/a&gt;</p>
<p>(“http” replaced with “hXXP” and “.com” replaced with “.cXm” for purposes of this posting only.)</p>
<p>There were ten variations of bookXXXX.com that I found in the data (where XXXX was always a set of 4 other letters). As you can see, besides the script tag, all of the links contained the word “book” and the “display:none” CSS. So that knowledge helped me find additional variants.</p>
<p>Once I started seeing the injected code snippets, I needed to get rid of them. I found a great global search and replace that I also modified for my needs to use text and ntext columns.<br />
<a title="sql server search and replace" href="http://vyaskn.tripod.com/sql_server_search_and_replace.htm"><span style="color: #800000;">http://vyaskn.tripod.com/sql_server_search_and_replace.htm</span></a></p>
<p>Here is a list of additional strings I searched for based on what I had found from the known injections:<br />
asweds<br />
lizamoon<br />
ur.php<br />
display:none<br />
//book%.com</p>
<p>Since injection code viruses like LizaMoon, and others like it are not likely to disappear anytime soon, it is important to know how to walk through the steps of deleting such code from databases.  There is no need to panic if you are faced with one of these SQL injections.  With the right information it can be no more than an irritation.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2011/07/06/how-to-clean-lizamoon-sql-injection-attack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle PL/SQL Date functions</title>
		<link>http://blog.unidev.com/index.php/2011/02/07/oracle-plsql-date-functions/</link>
		<comments>http://blog.unidev.com/index.php/2011/02/07/oracle-plsql-date-functions/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 15:07:06 +0000</pubDate>
		<dc:creator>Dhanya James</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=294</guid>
		<description><![CDATA[ All examples given here selects from DUAL table and DUAL table is a special one row table present by default in all Oracle database installations. All examples have been executed based on sysdate and these SQLs were run on 2/7/2011. sysdate function: You can use sysdate function to get current date and time . select sysdate from dual; [...]]]></description>
			<content:encoded><![CDATA[<p> All examples given here selects from DUAL table and DUAL table is a special one row table present by default in all Oracle database installations. All examples have been executed based on sysdate and these SQLs were run on 2/7/2011.</p>
<p><strong>sysdate function:<br />
</strong>You can use sysdate function to get current date and time .<br />
select sysdate from dual;<br />
return 2/7/2011 7:31:31 AM<br />
 <br />
<strong>to_char function:<br />
</strong>You can use to_char function to convert a date to a formatted string.<br />
select to_char(sysdate, &#8216;yyyy/mm/dd&#8217;) from dual;<br />
return 2011/02/07<br />
select to_char(sysdate, &#8216;DDth MON, YYYY&#8217;) from dual;<br />
return 07TH FEB, 2011<br />
select to_char(sysdate, &#8216;YYYY ,DDth MON&#8217;) from dual;<br />
return 2011 ,07TH FEB<br />
select to_char(sysdate, &#8216;MON DDth, YYYY&#8217;) from dual;<br />
return FEB 07TH, 2011<br />
select to_char(sysdate, &#8216;FMMON DDth, YYYY&#8217;) from dual;<br />
FEB 7TH, 2011<br />
select to_char(sysdate, &#8216;FMMon ddth, YYYY&#8217;) from dual;<br />
Feb 7th, 2011<br />
select to_char(sysdate, &#8216;Month DD, YYYY&#8217;) from dual;<br />
February  07, 2011<br />
select to_char(sysdate, &#8216;FMMonth DD, YYYY&#8217;) from dual;<br />
February 7, 2011</p>
<p><strong>to_date function:<br />
</strong>You can use to_date function to convert a string to a Date.<br />
select to_date(&#8217;2011/02/07&#8242;, &#8216;yyyy/mm/dd&#8217;) from dual;<br />
return 2/7/2011<br />
select to_date(&#8217;070211&#8242;,&#8217;DDMMYY&#8217;) from dual;<br />
return 2/7/2011<br />
 <br />
<strong>trunc function:<br />
</strong>You can use trunc function to return a date truncated to a specific unit of measure.<br />
 <br />
Get beginning of the quarter<br />
select trunc(sysdate, &#8216;Q&#8217;) from dual;<br />
return 1/1/2011<br />
Get first day of the Month<br />
select trunc(sysdate, &#8216;MONTH&#8217;) from dual;<br />
return 2/1/2011<br />
Get start day of the week or get first work day of the week<br />
select trunc(sysdate,&#8217;DD&#8217;) from dual;<br />
return 2/7/2011<br />
Get time in 24 hours<br />
select trunc(sysdate,&#8217;HH24&#8242;) from dual;<br />
return 2/7/2011 7:00:00 AM<br />
Get time in 12 hours<br />
select trunc(sysdate,&#8217;HH12&#8242;) from dual;<br />
return 2/7/2011 7:00:00 AM</p>
<p><strong>add_months function:<br />
</strong>You can use add_months function to add or subtract n months from a given date.<br />
select add_months(sysdate,2) from dual;<br />
return 4/7/2011 7:15:49 AM<br />
select add_months(sysdate,-4) from dual;<br />
return 10/7/2010 7:16:47 AM<br />
 <br />
<strong>last_day function:<br />
</strong>You can use last_day function to return last day of the current month.<br />
select last_day(sysdate) from dual;<br />
return 2/28/2011 7:23:49 AM</p>
<p><strong>next_day function:<br />
</strong>You can use next_day function to get the next week day greater than     the given date.<br />
Today is 02/07/2011 Monday.<br />
 <br />
select next_day(sysdate,&#8217;MONDAY&#8217;) from dual;<br />
return 2/14/2011 7:26:36 AM &#8211; Returns next Monday<br />
select next_day(sysdate,&#8217;TUESDAY&#8217;) from dual;<br />
2/8/2011 7:28:23 AM &#8211; Returns next Tuesday<br />
select next_day(sysdate,&#8217;WEDNESDAY&#8217;) from dual;<br />
2/9/2011 7:28:23 AM &#8211; Returns next Wednesday<br />
select next_day(sysdate,&#8217;THURSDAY&#8217;) from dual;<br />
2/10/2011 7:28:23 AM &#8211; Returns next Thursday<br />
select next_day(sysdate,&#8217;FRIDAY&#8217;) from dual;<br />
2/11/2011 7:28:23 AM &#8211; Returns next Friday<br />
 <br />
<strong>current_date function:<br />
</strong>You can use current_date function to return current date and time in the current time zone.<br />
select current_date from dual;<br />
return 2/7/2011 7:19:07 AM<br />
 <br />
<strong>current_timestamp function:<br />
</strong>You can use current_timestamp function to return current date and and time with the local time zone.<br />
select current_timestamp from dual;<br />
return 07-FEB-11 07.21.20.097093 AM -06:00;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2011/02/07/oracle-plsql-date-functions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ORA-30926: unable to get a stable set of rows in the source tables</title>
		<link>http://blog.unidev.com/index.php/2010/12/21/ora-30926-unable-to-get-a-stable-set-of-rows-in-the-source-tables/</link>
		<comments>http://blog.unidev.com/index.php/2010/12/21/ora-30926-unable-to-get-a-stable-set-of-rows-in-the-source-tables/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 16:40:37 +0000</pubDate>
		<dc:creator>Dhanya James</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=282</guid>
		<description><![CDATA[Merge statement can be used if you are trying to use transformed data fetched from a set of tables to update another table. MERGE INTO table_3 c USING (SELECT a.book_id, a.author_id          FROM table_1 a, table_2 b         WHERE a.author_id = b.author_id) src ON (c.book_id = src.book_id) WHEN MATCHED THEN   UPDATE SET c.author_id  = [...]]]></description>
			<content:encoded><![CDATA[<p>Merge statement can be used if you are trying to use transformed data fetched from a set of tables to update another table.</p>
<p>MERGE INTO table_3 c<br />
USING (SELECT a.book_id, a.author_id<br />
         FROM table_1 a, table_2 b<br />
        WHERE a.author_id = b.author_id) src<br />
ON (c.book_id = src.book_id)<br />
WHEN MATCHED THEN<br />
  UPDATE SET c.author_id  = src.author_id;</p>
<p>This mergae statement might return error &#8216;ORA-30926: unable to get a stable set of rows in the source tables&#8217; , if there is duplicates in the &#8216;USING&#8217; query. For example, duplicate book_id retuned by the &#8216;src&#8217; query in the given example. This can be fixed by using a DISTINCT in the query</p>
<p>MERGE INTO table_3 c<br />
USING (SELECT DISTINCT a.book_id, a.author_id<br />
         FROM table_1 a, table_2 b<br />
        WHERE a.author_id = b.author_id) src<br />
ON (c.book_id = src.book_id)<br />
WHEN MATCHED THEN<br />
  UPDATE SET c.author_id  = src.author_id;</p>
<p>-Dhanya James</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2010/12/21/ora-30926-unable-to-get-a-stable-set-of-rows-in-the-source-tables/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP &#8211; problem trying to connect with Informix on IIS</title>
		<link>http://blog.unidev.com/index.php/2010/07/07/php-problem-trying-to-connect-with-informix-on-iis/</link>
		<comments>http://blog.unidev.com/index.php/2010/07/07/php-problem-trying-to-connect-with-informix-on-iis/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 22:06:44 +0000</pubDate>
		<dc:creator>George Zheng</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Informix]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=249</guid>
		<description><![CDATA[I was working on a project which needs PHP talk to Informix database on Windows platform. After installed IBM Informix Client_SDK, included PHP extension php_ifx.dll, and use following command to connect to Informix: $sync_link_id = ifx_connect($database, $username, $password); I got following error: [SQLSTATE=IX 000 SQLCODE=-25560] If you check Informix document from IBM, you know Environment [...]]]></description>
			<content:encoded><![CDATA[<p>I was working on a project which needs PHP talk to Informix database on Windows platform. After installed IBM Informix Client_SDK, included PHP extension php_ifx.dll, and use following command to connect to Informix:</p>
<p><em>$sync_link_id = ifx_connect($database, $username, $password);</em></p>
<p>I got following error:</p>
<p><strong>[SQLSTATE=IX 000  SQLCODE=-25560]</strong></p>
<p>If you check <a href="http://publib.boulder.ibm.com/infocenter/idshelp/v115/index.jsp"><span style="text-decoration: underline;">Informix document</span></a> from IBM, you know Environment variable INFORMIXSERVER must be set. We know how to set up environment variable on Unix and Apache, but the question is how to set it up for IIS?</p>
<p>People may first think this could be environment variable on Windows as well. But this is wrong. Informix client is using Registry KEY on Windows platform. Here is the path on a 64bit machine.</p>
<p><strong>HKEY_LOCAL_MACHINE\Software\Wow6432Node\Informix\Environment\</strong></p>
<p>Second, you should have your default server setup under KEY: </p>
<p><strong>HKEY_LOCAL_MACHINE\Software\Wow6432Node\Informix\SqlHosts\</strong></p>
<p>At here, you need to provide HOST, PROTOCOL and SERVICE, so php_ifx knows how to connect to your Informix server.</p>
<p>After set them up, PHP should be able to talk to Informix.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2010/07/07/php-problem-trying-to-connect-with-informix-on-iis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redirect to Error page in Wicket</title>
		<link>http://blog.unidev.com/index.php/2010/06/03/redirect-to-error-page-in-wicket/</link>
		<comments>http://blog.unidev.com/index.php/2010/06/03/redirect-to-error-page-in-wicket/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 20:18:38 +0000</pubDate>
		<dc:creator>Dhanya James</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Wicket]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/index.php/2010/06/03/redirect-to-error-page-in-wicket/</guid>
		<description><![CDATA[I was looking for a solution to redirect to an error page in wicket and found this class , RestartResponseAtInterceptPageException , causes wicket to interrupt current request processing and immediately redirect to an intercept page. For example, throw new RestartResponseAtInterceptPageException(new ErrorPage(&#8220;User does not have permission to view this screen&#8221;)); If you need to redirect to [...]]]></description>
			<content:encoded><![CDATA[<p>I was looking for a solution to redirect to an error page in wicket and found this class , RestartResponseAtInterceptPageException , causes wicket to interrupt current request processing and immediately redirect to an intercept page.</p>
<p>For example,<br />
throw new RestartResponseAtInterceptPageException(new ErrorPage(&#8220;User does not have permission to view this screen&#8221;));</p>
<p>If you need to redirect to an intercept page without interrupting the current request processing , call RedirectToInteceptPage(Page) instead.</p>
<p>-Dhanya</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2010/06/03/redirect-to-error-page-in-wicket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>List files sorted by date in java</title>
		<link>http://blog.unidev.com/index.php/2009/10/20/list-files-sorted-by-date-in-java/</link>
		<comments>http://blog.unidev.com/index.php/2009/10/20/list-files-sorted-by-date-in-java/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 20:37:32 +0000</pubDate>
		<dc:creator>Dhanya James</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=186</guid>
		<description><![CDATA[File inboxDir = new File(&#8220;Path to your directory&#8221;); File[] files = inboxDir.listFiles(); Arrays.sort( files, new Comparator() { public int compare(Object o1, Object o2) { return new Long(((File)o1).lastModified()).compareTo(new Long(((File) o2).lastModified())); } });]]></description>
			<content:encoded><![CDATA[<p>File inboxDir = new File(&#8220;Path to your directory&#8221;);<br />
File[] files = inboxDir.listFiles();<br />
Arrays.sort( files, new Comparator()<br />
{<br />
public int compare(Object o1, Object o2) {<br />
return new Long(((File)o1).lastModified()).compareTo(new Long(((File) o2).lastModified()));<br />
}</p>
<p>});</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2009/10/20/list-files-sorted-by-date-in-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

