<?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/"
	>

<channel>
	<title>Blink 7</title>
	<atom:link href="http://www.blink7.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blink7.com</link>
	<description>Making Technology Interesting</description>
	<pubDate>Fri, 15 May 2009 05:12:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Importing and Exporting Large Wordpress Blogs</title>
		<link>http://www.blink7.com/2009/05/14/importing-and-exporting-large-wordpress-blogs/</link>
		<comments>http://www.blink7.com/2009/05/14/importing-and-exporting-large-wordpress-blogs/#comments</comments>
		<pubDate>Fri, 15 May 2009 05:12:39 +0000</pubDate>
		<dc:creator>Blink 7</dc:creator>
		
		<category><![CDATA[Blogging]]></category>

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

		<guid isPermaLink="false">http://www.blink7.com/?p=125</guid>
		<description><![CDATA[Wordpress created the import and export admin functions to make the task of moving posts, comments and categories between blogs relatively simple.  This tutorial reviews the process of transferring content from one Wordpress site to another with an emphasis on how to handle the import/export of larger blogs.]]></description>
			<content:encoded><![CDATA[<p>Wordpress created the import and export admin functions to make the task of moving posts, comments and categories between blogs relatively simple.  No longer did one have to be a database expert to cleanly transfer content from one blog to another, while creating backups of written content became a trivial exercise with Wordpress’ custom XML files.  While the import and export functions work fine with small to medium-sized blogs, extra configuration is often required to address the various errors that occur when working with data from blogs with a high volume of posts and/or comments.</p>
<p>This tutorial reviews the process of transferring content from one Wordpress site to another with an emphasis on how to handle the import/export of larger blogs.  Some of the solutions require PHP configuration (accomplished by changing the php.ini file on the server) or manipulation of the Wordpress XML data file.</p>
<h3>Pre-Requisites</h3>
<p>Before attempting to follow this tutorial, please make sure you have the following.</p>
<ul>
<li>Administrator access to both the source and destination Wordpress sites.  The destination site should be a freshly-installed copy of Wordpress (v2.7 or higher)</li>
<li>FTP access to the destination site</li>
<li>If possible, FTP access to the source site (not available on wordpress.com sites)</li>
</ul>
<h3>Downloads</h3>
<p>(<a title="Sample php.ini configuration file" href="http://www.blink7.com/wp-content/uploads/2009/05/phpini.zip">download</a>) Sample php.ini file<br />
(<a title="FileZilla - The FREE FTP Solution" href="http://filezilla-project.org/download.php?type=server">link</a>) Optional: Filezilla (free FTP client)<br />
(<a title="Notepad ++ Text Editor" href="http://notepad-plus.sourceforge.net/uk/site.htm" target="_blank">link</a>) Optional: Notepad++ (free text editor with xml support)</p>
<h3>Exporting from the Source Site</h3>
<p style="text-align: center;"><img class="alignnone size-full wp-image-128" title="Wordpress Tutorial - Importing and Exporting Data" src="http://www.blink7.com/wp-content/uploads/2009/05/tutorial011-01.jpg" alt="Wordpress Tutorial - Importing and Exporting Data" width="310" height="324" /></p>
<p>Type in URL for the admin page<br />
If your Wordpress blog’s URL is www.mysite.com then your admin URL would be www.mysite.com/wp-admin/<br />
Log in as an administrator.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-129" title="Wordpress Tutorial - Importing and Exporting Data" src="http://www.blink7.com/wp-content/uploads/2009/05/tutorial011-02.jpg" alt="Wordpress Tutorial - Importing and Exporting Data" width="146" height="131" /></p>
<p>Click on the Tools menu item (Wordpress 2.7.x places the admin menu along the left side of the screen)<br />
Click on the Export sub-menu item</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-130" title="Wordpress Tutorial - Importing and Exporting Data" src="http://www.blink7.com/wp-content/uploads/2009/05/tutorial011-03.jpg" alt="Wordpress Tutorial - Importing and Exporting Data" width="342" height="137" /></p>
<p>(optional) If you want to export the posts by a single author, click on the drop-down box beside the “Restrict Author”.  Select the author.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-131" title="Wordpress Tutorial - Importing and Exporting Data" src="http://www.blink7.com/wp-content/uploads/2009/05/tutorial011-04.jpg" alt="Wordpress Tutorial - Importing and Exporting Data" width="341" height="143" /></p>
<p>Click on the Download Export File button.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-132" title="Wordpress Tutorial - Importing and Exporting Data" src="http://www.blink7.com/wp-content/uploads/2009/05/tutorial011-05.jpg" alt="Wordpress Tutorial - Importing and Exporting Data" width="378" height="286" /></p>
<p>Ensure the “Save to Disk” radio option is selected.<br />
Click OK to save the XML file to disk</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-133" title="Wordpress Tutorial - Importing and Exporting Data" src="http://www.blink7.com/wp-content/uploads/2009/05/tutorial011-06.jpg" alt="Wordpress Tutorial - Importing and Exporting Data" width="410" height="182" /></p>
<p>Open the XML file in a text editor.  Make sure the last lines in the file consist of the following tags:</p>
<pre>&lt;/channel&gt;
&lt;/rss&gt;</pre>
<p>These close tags suggest that the file has been fully downloaded.<br />
If you do not see these tags at the end of your file or you see an HTML 500 Internal Server Error message embedded in the XML file, see the Troubleshooting section.</p>
<h3>Importing to the Destination Site</h3>
<p style="text-align: center;"><img class="alignnone size-full wp-image-134" title="Wordpress Tutorial - Importing and Exporting Data" src="http://www.blink7.com/wp-content/uploads/2009/05/tutorial011-07.jpg" alt="Wordpress Tutorial - Importing and Exporting Data" width="303" height="318" /></p>
<p>Type in URL for the admin page<br />
If your Wordpress blog’s URL is www.mynewsite.com then your admin URL would be www.mynewsite.com/wp-admin/</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-135" title="Wordpress Tutorial - Importing and Exporting Data" src="http://www.blink7.com/wp-content/uploads/2009/05/tutorial011-08.jpg" alt="Wordpress Tutorial - Importing and Exporting Data" width="149" height="130" /></p>
<p>Click on the Tools menu item (Wordpress 2.7.x places the admin menu along the left side of the screen)<br />
Click on the Import sub-menu item</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-136" title="Wordpress Tutorial - Importing and Exporting Data" src="http://www.blink7.com/wp-content/uploads/2009/05/tutorial011-09.jpg" alt="Wordpress Tutorial - Importing and Exporting Data" width="445" height="179" /></p>
<p>Click on “Wordpress”</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-137" title="Wordpress Tutorial - Importing and Exporting Data" src="http://www.blink7.com/wp-content/uploads/2009/05/tutorial011-10.jpg" alt="Wordpress Tutorial - Importing and Exporting Data" width="452" height="152" /></p>
<p>Verify that the maximum allowed file size for upload is larger than the size of your Wordpress XML file.  If not, proceed to the troubleshooting section.<br />
Otherwise, click on the browse button</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-138" title="Wordpress Tutorial - Importing and Exporting Data" src="http://www.blink7.com/wp-content/uploads/2009/05/tutorial011-11.jpg" alt="Wordpress Tutorial - Importing and Exporting Data" width="450" height="74" /></p>
<p>Select the XML file created during the import process.  Click the Open button</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-127" title="Wordpress Tutorial - Importing and Exporting Data" src="http://www.blink7.com/wp-content/uploads/2009/05/tutorial011-12.jpg" alt="Wordpress Tutorial - Importing and Exporting Data" width="446" height="134" /></p>
<p>Click the Upload and Import button.  Processing may take a few minutes.<br />
If the import was successful, the screen will eventually display a list of the posts in the xml, along with how many comments were associated with the post and how whether the post was successfully imported.</p>
<p>Click on the menu option Posts to verify that the import was successful.</p>
<h3>Troubleshooting</h3>
<p><strong>Problem: The export File did not finish downloading</strong></p>
<p>If the source website is a self-installed copy of Wordpress, note the php.ini file can be altered to extend the amount of time PHP will allow for a script to be processed.  To make this change, load the php.ini file into your text editor and set the variable max_execution_time to a higher value.  Upload the updated .ini file to /wp-admin directory of the source website.  Numeric values are in seconds.  The .ini file provided with this tutorial is set to 500 seconds, which was sufficient for producing a 50MB XML file.</p>
<p>If your source website is on wordpress.com then simply try downloading the file again.</p>
<p><strong>Problem: The XML file larger than the max file size on the import screen</strong></p>
<p>The maximum upload file size is determined by the upload_max_filesize variable, located inside the php.ini file.  The sample .ini file that comes with this tutorial has the max upload set to 100 megabytes, which should be enough for just about any site.  If you already have a php.ini file then you can adjust the variable to be just larger than the file you wish to upload.  Megabyte denominations are marked with a capital M – for instance, if you wanted the maximum upload size to be 60 megabytes, then you would set upload_max_filesize equal to 60M.</p>
<p>Alternatively, you could split the XML file into several XML files that are smaller than the upload limit.  Note that splitting an XML file is not as simple as physically partitioning the file – the header and trailer must be present in each file.  One relatively safe way to split the file is to make x copies of the file and strategically delete posts from the middle of each file (posts are enclosed in the  and  tags).  For instance, to split the XML file into 2 pieces you could make a copy of the file then delete the first half of the posts from the first file and the second half of the posts from the second file.  After importing both files you should have all your posts in the destination site.  Wordpress will ignore duplicate posts or channels during import, so there’s little risk in overlapping information between files.</p>
<p><strong>Problem: During import, a 500 Internal Server Error appears</strong></p>
<p>If you have an especially large import file (20MB or more) the server could running into a processing limit related to the amount of data being extracted from the source website.  Most PHP installations place a cap on the amount of data that can be uploaded via a POST query.</p>
<p>Once again, this problem could be solved by splitting the XML file into several smaller files (smaller imports files means less data to be posted).</p>
<p>Alternatively, you could alter the php.ini file to allow more data to be uploaded via POST query.  Find the variable post_max_size and increase its value.  Megabyte denominations are marked with a capital M – for instance, if you wanted the maximum data processed to be 70 megabytes, then you would set post_max_size equal to 70M.</p>
<p><strong>Problem: The uploaded php.ini file does not seem to be making any difference</strong></p>
<p>To verify that this is the problem, change the value for variable post_max_size to some unusual value (e.g. 41M, which will be interpreted as 41 megabytes) and re-upload the file.  Refresh the import interface.  If the upload max size does not change, then PHP is not picking up the .ini file.</p>
<p>First, verify that the .ini file was uploaded to the /wp-admin sub-directory of the destination Wordpress installation.</p>
<p>If the max file upload still isn’t changing, try uploading the same .ini file to the html root directory on your web server.  Some shared hosting solutions, like those provided by BlueHost.com, require that you put a copy of a custom php.ini file in the html document root and then another of that file in any directory where you wish to use the custom settings.  If you do not own the web account then you may have to provide the .ini file to the account owner to upload.  Typically, root folder name is public_html.</p>
<p>If the max file upload still isn’t changing, then custom php.ini settings may be disabled on your server.  Contact technical support for more assistance.  Some hosts will even run the script for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blink7.com/2009/05/14/importing-and-exporting-large-wordpress-blogs/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SQL for SAS Programmers - Part 1 - Extracting Data</title>
		<link>http://www.blink7.com/2009/04/14/sql-for-sas-programmers-part-1-extracting-data/</link>
		<comments>http://www.blink7.com/2009/04/14/sql-for-sas-programmers-part-1-extracting-data/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 01:07:36 +0000</pubDate>
		<dc:creator>Blink 7</dc:creator>
		
		<category><![CDATA[Development]]></category>

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

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

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

		<guid isPermaLink="false">http://www.blink7.com/?p=93</guid>
		<description><![CDATA[The first part of this tutorial deals with using the SAS PROC SQL statement to perform basic data extraction. Screenshots of the code and output are included. Readers who wish to follow along on their own systems or copy the code can download the files provided]]></description>
			<content:encoded><![CDATA[<p>The first part of this tutorial deals with using the PROC SQL statement to perform basic data extraction.  Screenshots of the code and output are included.  Readers who wish to follow along on their own systems or copy the code can download the files provided below (right click and select &#8220;save as&#8221; or &#8220;save link as&#8221;):</p>
<p><a title="SQL Code for Tutorial Part 1" href="http://www.blink7.com/wp-content//uploads/2009/04/sql01.sas">(download)</a> SAS Code for Tutorial Part 1<br />
<a title="SAS Data: Transactions" href="http://www.blink7.com/wp-content//uploads/2009/04/transactions.sas7bdat"> (download)</a> SAS Data: Transactions<br />
<a title="SAS Data: Payment Types" href="http://www.blink7.com/wp-content//uploads/2009/04/payment_types.sas7bdat">(download)</a> SAS Data: Payment Types<br />
<a title="SAS Data: Staff" href="http://www.blink7.com/wp-content//uploads/2009/04/staff.sas7bdat"> (download)</a> SAS Data: Staff</p>
<p><strong>Note</strong>: This tutorial uses SAS terms and SQL terms interchangeably.  The following sets of terms are equivalent:</p>
<ul>
<li> Variable, column</li>
<li> Data set, table</li>
</ul>
<h3>Reading a Data Set</h3>
<p>SQL defines the SELECT command to extract data from an existing table.  The FROM command specifies the source table.</p>
<p><strong>Example</strong>: Read and output all available information on the store staff –</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-95" title="SAS PROC SQL: Read an entire data set and output to the screen" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-01-1.jpg" alt="SAS PROC SQL: Read an entire data set and output to the screen" width="441" height="151" /></p>
<p>Using the * argument with SELECT command automatically selects all the columns available in the table.  By default, PROC SQL outputs to the screen, so no additional PROC PRINT is required to view the result.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-119" title="SAS Output: List of Store Employees" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-01-21.jpg" alt="SAS Output: List of Store Employees" width="450" height="426" /></p>
<p>The output is equivalent to the result of using a SET command inside a DATA step without any conditional statements.</p>
<h3>Reading Specific Variables from a Data Set</h3>
<p>To query specific columns from a source table, list the variables as comma-delimited arguments after the SELECT command</p>
<p><strong>Example</strong>: Read and output first and last names of the store staff</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-97" title="SAS PROC SQL: Read specific variables from a data set" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-02-1.jpg" alt="SAS PROC SQL: Read specific variables from a data set" width="395" height="166" /></p>
<p>In SQL, column names are listed separated by commas, whereas in the DATA step column names (variables) are separated by spaces.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-98" title="SAS Output: First and Last Names of Store Employees" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-02-2.jpg" alt="SAS Output: First and Last Names of Store Employees" width="319" height="461" /></p>
<p>The output is equivalent to the result of issuing SET and KEEP commands inside a DATA step.<span id="more-93"></span></p>
<h3>Filtering a Data Set</h3>
<p>The WHERE command can be used to filter individual records from a source table.  This command is followed by one or more conditional arguments based on the variables available in the source data set.</p>
<p><strong>Example</strong>: List staff with the last name “Wilson”</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-99" title="SAS PROC SQL: Filter data results" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-03-1.jpg" alt="SAS PROC SQL: Filter data results" width="399" height="177" /></p>
<p>The simplest conditional statement matches one column to a literal value.  Numeric data can also be compared using = but the literal value would not be enclosed in quotes.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-100" title="SAS Output: Store Employees with the Surname Wilson" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-03-2.jpg" alt="SAS Output: Store Employees with the Surname Wilson" width="449" height="108" /></p>
<p>The SQL WHERE command functions the same way as the WHERE command used in the DATA step</p>
<p>The WHERE command is not limited to simple comparisons.  Multiple columns can be evaluated at a time.</p>
<p><strong>Example</strong>: List staff in the media station with the last name “Wilson”</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-101" title="SAS PROC SQL: Filter data results by matching on multiple variables" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-03-3.jpg" alt="SAS PROC SQL: Filter data results by matching on multiple variables" width="453" height="166" /></p>
<p>The Boolean operators AND and OR can be used, as well as parenthesis to create more complicated conditional logic.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-102" title="SAS Output: Store Employees in the Media station with the Surname Wilson" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-03-4.jpg" alt="SAS Output: Store Employees in the Media station with the Surname Wilson" width="444" height="93" /></p>
<p>The output shows the one employee with the last name “Wilson” who also works in the Media station.  Once again, the operation of the SQL WHERE command is identical to the WHERE statement used in the DATA step.</p>
<p>The ^ symbol can be used to negate a logical condition within a WHERE command</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-103" title="SAS PROC SQL: Filter data results using negative matching" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-03-5.jpg" alt="SAS PROC SQL: Filter data results using negative matching" width="449" height="147" /></p>
<p>The ^ symbol also be placed in front of an open parenthesis to negate more complicated conditional logic.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-104" title="SAS Output: Store Employees that do NOT have the Surname Wilson" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-03-6.jpg" alt="SAS Output: Store Employees that do NOT have the Surname Wilson" width="448" height="423" /></p>
<p>The output shows every employee not named “Wilson”</p>
<p>Combining the WHERE command with the IN command makes it possible compare a column to a list of possible values.</p>
<p><strong>Example</strong>: List store employees in the Media or Computer stations</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-105" title="SAS PROC SQL: Filter data results using a list of values" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-03-7.jpg" alt="SAS PROC SQL: Filter data results using a list of values" width="365" height="151" /></p>
<p>The IN command can be used with any valid data type (or even a sub-query producing one column of data) but lists may not mix data types.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-106" title="SAS Output: Store Employees in the Computer or Media station" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-03-8.jpg" alt="SAS Output: Store Employees in the Computer or Media station" width="450" height="199" /></p>
<p>The output lists all employees in the aforementioned stations.</p>
<h3>Reading Data into a New Data Set</h3>
<p>So far, all of the examples have output directly to the screen, which is PROC SQL’s default behaviour (in SAS EG, the output goes to the default ODS destination).  In most cases, the desired target will be another table – often a brand new table.  To redirect output from an SQL query to a new data set, use the CREATE TABLE / AS syntax at the beginning of the statement:</p>
<p><strong>Example</strong>: Create a duplicate of the staff table</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-107" title="SAS PROC SQL: Read an entire data set and output to a new data se" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-04-1.jpg" alt="SAS PROC SQL: Read an entire data set and output to a new data se" width="244" height="111" /></p>
<p>Virtually any SQL statement that produces screen output can be output directly to another table.  To avoid system slow-downs, large SQL queries (e.g. queries that produce thousands of lines) should always be output to a new data set before viewing.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-109" title="SAS Data Set - Replica of Staff table" src="http://www.blink7.com/wp-content/uploads/2009/04/tutorial010-04-21.jpg" alt="SAS Data Set - Replica of Staff table" width="450" height="347" /></p>
<p>No output is produced on the screen, but a new table has been created in the WORK directory, containing an exact replica of the data in the source table.</p>
<p><a title="SQL for SAS Programmers - Introduction" href="http://http://www.blink7.com/2009/04/12/sql-for-sas-proogrammers-introduction/">&lt;&lt; Back to Start of Series</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blink7.com/2009/04/14/sql-for-sas-programmers-part-1-extracting-data/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SQL for SAS Programmers - Introduction</title>
		<link>http://www.blink7.com/2009/04/12/sql-for-sas-proogrammers-introduction/</link>
		<comments>http://www.blink7.com/2009/04/12/sql-for-sas-proogrammers-introduction/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 21:22:07 +0000</pubDate>
		<dc:creator>Blink 7</dc:creator>
		
		<category><![CDATA[Development]]></category>

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

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

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

		<guid isPermaLink="false">http://www.blink7.com/?p=88</guid>
		<description><![CDATA[Most SAS programmers are already familiar with the DATA step - arguably the most important statement in the SAS language. So, why learn another statement that performs the same tasks? SQL offers many advantages over the DATA step and other statements.]]></description>
			<content:encoded><![CDATA[<h3>What is SQL?</h3>
<p>SQL stands for Structured Query Language and was designed for development and maintenance within a Database Management System (DBMS).  A DBMS consists of one or more tables of data, typically joined in a hierarchical fashion, and a series of programs for organizing the data.</p>
<p>Typical tasks performed with SQL code include the following:</p>
<ul>
<li> Retrieve (or query) data from one or more data tables</li>
<li> Manipulate data within existing tables</li>
<li> Define new tables and create data within new table</li>
<li> Alter existing table definitions</li>
<li> Set permissions for different users to access existing tables</li>
</ul>
<p>The original implementation of SQL was developed by IBM to manipulate data within its System R.  While the language has since been standardized by ANSI and the ISO, most major DBMS’s extend SQL’s query-based syntax to include procedural language constructs like conditional statements and variable storage.  The extensions tend to be specific to the DBMS, resulting in several sub-languages like PL/SQL (Oracle) and T-SQL (Microsoft SQL Server).</p>
<p>SAS implements SQL using the PROC SQL statement.  PROC SQL can be used as an alternative to the DATA step for creating and manipulating data sets, where each SAS data set is treated as a table.  Most of the commands available within the DATA step can be used in PROC SQL, while the statement can be used to control macro variables and screen output.</p>
<h3>Why Learn SQL when SAS has the DATA Step?</h3>
<p>Most SAS programmers are already familiar with the DATA step - arguably the most important statement in the SAS language.  So, why learn another statement that performs the same tasks?  SQL offers many advantages over the DATA step and other statements, including the following:</p>
<ul>
<li><strong>Interoperability</strong>.  PROC SQL can be used to retrieve data directly from sources that would be otherwise unavailable to the DATA Step.  For instance, The Oracle PIPE driver can be used by PROC SQL to issue pass-through statements directly to an Oracle database (via Oracle SQL syntax) and retrieve the results to the SAS environment.</li>
<li><strong>Powerful data merging facilities</strong>. The SQL programming language does not require data sets to be sorted before merging.  The syntax for performing the various merges (Inner Join, Outer Join, Left Join, Right Join) is relatively simple compared to the DATA step</li>
<li><strong>Simplified reporting</strong>.  A single SQL statement can retrieve data from one or more data sets, summarize the data and output the results to the screen.  To perform the same task would require at least one DATA Step and a PROC PRINT statement.</li>
</ul>
<p>Whether PROC SQL is superior to the DATA step or vice-versa is a religious debate that rages on, even among SAS instructors during training classes.  In practice, I’ve found that each statement excels in different situations and that most complex projects involve frequent use of both.</p>
<h3>What potential Benefits can SQL provide for the SAS Universe?</h3>
<p>The PROC SQL command provides an easy entry point for the large number of SQL programmers who are unfamiliar with SAS.  While SAS is generally used as a statistical tool, there exist very powerful facilities that would make SAS an attractive platform for other database-related applications such as ETL and main-frame processing.</p>
<p>Similarly, learning SQL can benefit the SAS-only programmer by introducing a language that is almost always in demand outside the SAS universe and for which jobs are readily available.  Although exact implementations of SQL differ between the various databases, the core commands remain consistent across nearly all databases.</p>
<h3>The Project</h3>
<p>The following tutorial will be based on generated data for a fictional electronics store.  The main data set / table consists of 10 days of transaction data containing the following pieces of information:</p>
<ul>
<li> Unique transaction ID</li>
<li> Date of transaction</li>
<li> ID of employee who made the sale</li>
<li> Payment method</li>
<li> Transaction amount</li>
</ul>
<p>Keeping with DBMS recommended practices, employee and payment method information are stored in the transaction tables as numeric ID’s.  Two more reference tables have been created to provide additional details about each employee and method of payment.</p>
<h3>Tutorial Index</h3>
<p>The SAS PROC SQL Tutorial consists of the following sections –</p>
<p><a title="SAS For SAS Programmers Part 1 - Extracting Data" href="http://www.blink7.com/2009/04/14/sql-for-sas-programmers-part-1-extracting-data/">Part 1 – Extracting Data</a><br />
Part 2 – Manipulating Data (coming soon!)<br />
Part 3 – Combining Data (coming soon!)<br />
Part 4 – Advanced Techniques (coming soon!)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blink7.com/2009/04/12/sql-for-sas-proogrammers-introduction/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Setting up Email for Bell Sympatico&#8217;s new SMTP Server</title>
		<link>http://www.blink7.com/2009/01/31/setting-up-email-for-bell-sympaticos-new-smtp-server/</link>
		<comments>http://www.blink7.com/2009/01/31/setting-up-email-for-bell-sympaticos-new-smtp-server/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 16:20:18 +0000</pubDate>
		<dc:creator>Blink 7</dc:creator>
		
		<category><![CDATA[Quick Fixes]]></category>

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

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

		<guid isPermaLink="false">http://www.blink7.com/?p=78</guid>
		<description><![CDATA[Identifying the Problem

Mozilla Thunderbird, Microsoft Outlook or another email client gives frequent errors when trying to send mail through Bell Sympatico’s SMTP server.    For Thunderbird users, the error message reads as follows:
Sending of message failed.
An error occurred sending mail: unable to connect to SMTP server smtphm.sympatico.ca via STARTTLS since it doesn’t offer [...]]]></description>
			<content:encoded><![CDATA[<h3>Identifying the Problem</h3>
<p><img class="aligncenter size-full wp-image-80" title="errors when trying to send mail through Bell Sympatico’s server" src="http://www.blink7.com/wp-content/uploads/2009/01/tutorial009-01.jpg" alt="" width="450" height="115" /></p>
<p>Mozilla Thunderbird, Microsoft Outlook or another email client gives frequent errors when trying to send mail through Bell Sympatico’s SMTP server.    For Thunderbird users, the error message reads as follows:</p>
<blockquote><p><em>Sending of message failed.<br />
An error occurred sending mail: unable to connect to SMTP server smtphm.sympatico.ca via STARTTLS since it doesn’t offer STARTTLS in EHLO response. Please verify that your Mail/News account settings are correct and try again.</em></p></blockquote>
<p><em>T</em>he service has worked in the past and no settings were recently changed.</p>
<h3>Explanation</h3>
<p>Depends on who you ask … but Bell is obviously tinkering with its back-end software and inadvertently knocked out a whole bunch of people’s SMTP (outgoing mail) server access.</p>
<h3>Solution (for Mozilla Thunderbird)</h3>
<p><a href="http://www.blink7.com/wp-content/uploads/2009/01/tutorial009-02.jpg"><img class="aligncenter size-full wp-image-81" title="From the menu, select Tools -&gt; Account Settings…" src="http://www.blink7.com/wp-content/uploads/2009/01/tutorial009-02.jpg" alt="" width="165" height="109" /></a></p>
<p>From the menu, select <strong>Tools -&gt; Account Settings…</strong></p>
<p><img class="aligncenter size-full wp-image-82" title="select the option Outgoing Server (SMTP)" src="http://www.blink7.com/wp-content/uploads/2009/01/tutorial009-03.jpg" alt="" width="194" height="266" /></p>
<p>In the left pane of the Account Settings window, select the option <em>Outgoing Server (SMTP)</em></p>
<p><img class="aligncenter size-full wp-image-83" title="select the sympatico.ca server" src="http://www.blink7.com/wp-content/uploads/2009/01/tutorial009-04.jpg" alt="" width="405" height="157" /></p>
<p>In the right pane, select the sympatico.ca server.  Click on the <strong>Edit </strong>button.</p>
<p><img class="aligncenter size-full wp-image-84" title="In the SMTP Server window, ensure the settings" src="http://www.blink7.com/wp-content/uploads/2009/01/tutorial009-05.jpg" alt="" width="326" height="318" /></p>
<p>In the SMTP Server window, ensure the settings are as follows:</p>
<p><strong>Server Name:</strong> smtphm.sympatico.ca<br />
<strong> Port:</strong> 587<br />
<strong> User Name:</strong> ____@sympatico.ca<br />
<strong> Use Secure Connection:</strong> TLS</p>
<p>Click on the <strong>OK </strong>button<br />
In the Account settings window, click on the <strong>OK </strong>button</p>
<p>You should once again be able to send email through Sympatico’s SMTP server.</p>
<p>A similar process will have to be performed with other email clients (using the settings described above)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blink7.com/2009/01/31/setting-up-email-for-bell-sympaticos-new-smtp-server/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cuil Runnings Part 2</title>
		<link>http://www.blink7.com/2008/07/28/cuil-runnings-part-2/</link>
		<comments>http://www.blink7.com/2008/07/28/cuil-runnings-part-2/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 04:29:12 +0000</pubDate>
		<dc:creator>Blink 7</dc:creator>
		
		<category><![CDATA[Net Life]]></category>

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

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

		<guid isPermaLink="false">http://www.blink7.com/2008/07/28/cuil-runnings-part-2/</guid>
		<description><![CDATA[Part 1 of Cuil Runnings described the self-proclaimed Google-beating search engine and summarized industry’s initial response after launch.  Their reception was … frosty, to say the least.  Was the response justified?  Several tests were performed using common search types to determine whether Cuil is fit to replace Google on discerning desktops.
Test 1: [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.blink7.com/2008/07/28/cuil-runnings-part-1/" title="Cuil Runnings Part 1" target="_blank">Part 1 of Cuil Runnings</a> described the self-proclaimed Google-beating search engine and summarized industry’s initial response after launch.  Their reception was … frosty, to say the least.  Was the response justified?  Several tests were performed using common search types to determine whether Cuil is fit to replace Google on discerning desktops.</p>
<h3>Test 1: Music Group</h3>
<p>For engineers, these ex-Googlers did a poor job of estimating the initial server load but let’s not be petty – it’s only day one.  The search results matter most and in particular page 1 of the search results (which is where most people look).  Total number of search results, while often used as a selling point, mean very little in practical terms since most surfers only look at the top 10 or 20.</p>
<p align="center"><a href="http://www.blink7.com/wp-content/uploads/2008/07/cuil2.jpg" title="Cuil Search Engine Test 1: 4Hero"><img src="http://www.blink7.com/wp-content/uploads/2008/07/cuil2.thumbnail.jpg" alt="Cuil Search Engine Test 1: 4Hero" /></a><br />
(click to enlarge)</p>
<p>My first test was done using a moderately popular music group, the British RnB / Drum n Bass outfit 4Hero.  Cuil really showed its best side for this example: firstly, the results displayed in a three-column magazine style (two-column displays are selectable).  To the right are a series of categories related to the group 4Hero, including albums from the group and related artists.  If you were to click on the link titled “Goldie” (another Drum n Bass artist) Cuil would search for “4Hero Goldie”.  This accessible drill down display will be indispensable for people doing actual research.</p>
<h3>Test 2: Ancient Civilization</h3>
<p align="center"><a href="http://www.blink7.com/wp-content/uploads/2008/07/cuil3.jpg" title="Cuil Search Engine Test 2: Nubia"><img src="http://www.blink7.com/wp-content/uploads/2008/07/cuil3.thumbnail.jpg" alt="Cuil Search Engine Test 2: Nubia" /></a><br />
(click to enlarge)</p>
<p>Inspired by the implications from the first test, I keyed in an ancient civilization –Nubia- to determine how easily research could be accomplished.  Again, the category drill down was available on the right but this time a result filter was available above the search results.  Since Nubia is a pretty broad topic, Cuil gave the option to filter the existing results on major subtopics like Ancient Nubia and Rhadopis of Nubia.  Cuil’s interface is closer to an interactive encyclopedia than a straight search engine.</p>
<h3>Test 3: Direct Website Reference</h3>
<p align="center"><a href="http://www.blink7.com/wp-content/uploads/2008/07/cuil4.jpg" title="cuil4.jpg"><img src="http://www.blink7.com/wp-content/uploads/2008/07/cuil4.thumbnail.jpg" alt="cuil4.jpg" /></a><br />
(click to enlarge)</p>
<p>Cuil really fails when it comes to identifying name of actual websites.  This is important because a worrying number of people still find websites by entering the English name in a search engine and clicking on the first link they see.  I tried that with <a href="http://www.jacksnewswatch.com/" title="Jack's NewsWatch" target="_blank">Jack’s NewsWatch</a> and no link to the site root exists on the front page.  In fact, the first link on the list is to Jack’s new-found nemesis at <a href="http://www.stageleft.info/gregarius/Jack's_Newswatch/" target="_blank">StageLeft</a>.  The average site-owner probably doesn’t want a large % of potential search traffic going to his detractors.  A significant % of the search results were also coming from third-party services like HaloScan and blog aggregators. Conversely, Google’s first link went directly to the front of Jack’s site, with lesser quantities of the parasitic sites in later links.  The same test was performed with other blog sites (Cynics Unlimited, Crux of the Matter, Blue Like You) and only Google linked to the root of the actual site within the first page.  The first search result for <a href="http://www.smalldeadanimals.com/" target="_blank">Small Dead Animals</a> links to a <a href="http://www.cuil.com/search?q=Small%20Dead%20Animals&amp;sl=long" target="_blank">site attacking the blog owner</a>.  The first search for Blink 7 links to Blink 182’s band site.</p>
<p>Cuil was much better at identifying major websites like CNN, but that’s hardly an indication of a search engine’s ability to determine link relevance.</p>
<h3>Test 4: Recent News Articles</h3>
<p align="center"> <a href="http://www.blink7.com/wp-content/uploads/2008/07/cuil5.jpg" title="Cuil Search Engine Test 4: Recent News Article"><img src="http://www.blink7.com/wp-content/uploads/2008/07/cuil5.thumbnail.jpg" alt="Cuil Search Engine Test 4: Recent News Article" /><br />
</a>(click to enlarge)<a href="http://www.blink7.com/wp-content/uploads/2008/07/cuil5.jpg" title="Cuil Search Engine Test 4: Recent News Article"><br />
</a></p>
<p>Testing Cuil’s ability to retrieve the latest news stories involved writing two tests per article.  First, the full title of the article entered verbatim into the browser to determine whether a link to the actual article or reprint of the article appeared on the first page.  The second test was completed using key words.  The tests are listed below (key words in brackets)</p>
<ul>
<li> Associated Press: <a href="http://ap.google.com/article/ALeqM5ggP77qC4esV3XpNNgJq25XW25f0QD9274VTG0" target="_blank">Bush OKs execution of Army death row prisoner</a> (keywords: Bush Ronald Gray Execution)</li>
<li> Reuters: Zimbabwe crisis negotiations deadlocked (keywords: Zimbabwe negotiations)</li>
<li> Canadian Press: Bell Canada to cut 2,500 jobs to lower operating costs ahead of takeover (keywords: Bell Canada job cuts)</li>
</ul>
<p>Cuil returned no results for the title of the AP or CP articles.  The Reuters subject line returned an excerpt from a Zimbabwe site unrelated to the article in question.  Amazingly, Cuil had no results at all for they keywords related to the AP article, meaning not even info on traditional websites.  The CP keywords returned several Wikipedia pages about Bell and one WSWS article about Bell cutting jobs … in 1999.  Conversely, Google found all of the articles by title and keywords within the first page.  Cuil may be indexing more pages than Google but surely aren’t doing so with great speed.</p>
<h3>Conclusion</h3>
<p>Cuil’s interface is beautiful and intuitive. General-purpose researchers and students will quickly take to its OLAP-style interface and numerous search refinement options.  The search engine itself needs help, however.  Cuil was not intuitive enough to recognize all by the most ubiquitous site names while third party sites and junk aggregators pushed actual site content out of the top listings.  Cuil performed abysmally at retrieving current events or recently-updated sites, which is unacceptable in a 24-hour news environment.  As of now, Google has little to fear.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blink7.com/2008/07/28/cuil-runnings-part-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cuil Runnings Part 1</title>
		<link>http://www.blink7.com/2008/07/28/cuil-runnings-part-1/</link>
		<comments>http://www.blink7.com/2008/07/28/cuil-runnings-part-1/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 04:08:31 +0000</pubDate>
		<dc:creator>Blink 7</dc:creator>
		
		<category><![CDATA[Net Life]]></category>

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

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

		<guid isPermaLink="false">http://www.blink7.com/2008/07/28/cuil-runnings-part-1/</guid>
		<description><![CDATA[
Cuil (pronounced “cool”) is the creation of Google alumni Anna Patterson, who is working in conjunction with her husband (former IBM employee Tom Costello) and two other ex Google engineers.  Patterson’s last major search engine effort was purchased by the mighty Google in 2004.  Costello’s previous efforts include a 1990’s search engine called [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/07/cuil1.jpg" alt="Cuil Search Engine" /></p>
<p>Cuil (pronounced “cool”) is the creation of Google alumni Anna Patterson, who is working in conjunction with her husband (former IBM employee Tom Costello) and two other ex Google engineers.  Patterson’s last major search engine effort was purchased by the mighty Google in 2004.  Costello’s previous efforts include a 1990’s search engine called Xift and IBM’s WebFountain technology.  Monier is the former Chief Technology officer of AltaVista – considered by many to be the best search engine in the pre-Google webverse.  This group has credentials.  They also have funding, to the tune of $33 million in venture capital investments.</p>
<p>Cuil’s self-purported advantages over the competition (read: Google) are as follows</p>
<ul>
<li><strong> More Links</strong>.  The Cuil search engine claims an index spanning 120 billion web pages, dwarfing both Google’s most recently reported figure of 8.2 billion web pages and the industry’s estimate of 40 billion pages</li>
<li><strong> More privacy</strong>.  Cuil promises not to track the habits of individual users, purporting to track general web trends instead.  This feature seems designed to appeal to the privacy experts who have complained about Google’s invasive data gathering efforts.</li>
<li><strong> Content-based rankings</strong>.  Cuil’s engine reportedly places more emphasis on the content of the page than which pages link to it.  This is a potential advantage to both users more interested in research than buzz and content providers who concentrate on quality rather than social networking to build their sites.</li>
</ul>
<h3>Survey Says …</h3>
<p>Alas, many engines have come and faltered in light of Google’s massive 62% market share (USA).  How well did Cuil hold up on its opening day?  Not too well, judging by reports in the IT media:</p>
<p><em>“If you are going to roll out a new search engine, please try to make one that has more going for it than a silly name and cheap, misleading PR. Thus we have Cuil, the search engine rolled out this last week by some ex-Google folks who see a market opportunity. While all the people involved seem competent and have great resumes, the site itself out-and-out stinks”</em><br />
-<a href="http://www.pcmag.com/article2/0,1895,2326643,00.asp" target="_blank">John C. Dvorak</a></p>
<p><em>“Cuil went live last night and then went down after only a couple of hours of operation due to an apparently overwhelming response which lead to a server melt down. At the time of writing this article they were back up again, but you&#8217;d have thought that with all the hype around their launch they would have been better prepared?”</em><br />
-<a href="http://www.nzherald.co.nz/feature/story.cfm?c_id=1502269&amp;objectid=10524092" target="_blank">New Zealand Herald</a></p>
<p><em>“What&#8217;s the first thing people check in a new, more-powerful Internet search? Their own name, of course. The SAI staff ran our own names through Cuil&#8217;s search. It hadn&#8217;t heard of some of us, while for others it returned our bylines next to pictures of&#8230; other people.<br />
SAI&#8217;s commenters noted that searches for terms like &#8220;penguins&#8221; or &#8220;failure&#8221; returned zero results.”</em><br />
-<a href="http://www.alleyinsider.com/2008/7/google-wannabe-cuil-worst-launch-ever" target="_blank">Silicon Valley Insider</a></p>
<p>Cuil’s lackluster performance is explained briefly in an equally critical CNET article</p>
<p><em>“Cuil isn&#8217;t set up as a massively parallel search network the way, say, Google is. Tom Costello had explained this to me a bit when we talked last week. Each of Cuil&#8217;s search appliances is specialized to a particular subcategory of results. There are machines that understand and index sports; others are experts on medicine, etc. As these search machines get overloaded, Sollitto said, they drop offline for some queries, and the machines left online return less-than-relevant results that then appear at the top of users&#8217; pages.”</em><br />
-<a href="http://news.cnet.com/8301-17939_109-10000670-2.html" target="_blank">WebWare</a></p>
<p>Overall, it can be said Cuil’s launch was one of the least successful in recent tech history.  Is the criticism fair, however? <a href="http://www.blink7.com/2008/07/28/cuil-runnings-part-2/" title="Part 2 of Cuil Runnings" target="_blank">Proceed to part 2</a> to find out!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blink7.com/2008/07/28/cuil-runnings-part-1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Amiga Demos 102: Desert Dream</title>
		<link>http://www.blink7.com/2008/06/02/amiga-demos-102-desert-dream/</link>
		<comments>http://www.blink7.com/2008/06/02/amiga-demos-102-desert-dream/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 03:24:21 +0000</pubDate>
		<dc:creator>Blink 7</dc:creator>
		
		<category><![CDATA[Amiga]]></category>

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

		<guid isPermaLink="false">http://www.blink7.com/2008/06/02/amiga-demos-102-desert-dream/</guid>
		<description><![CDATA[Who are the Demo Writers?
The typical demogroup consists of coders, musicians and graphics artists (sometimes referred to as graphicians).  Some prominent scene figures (e.g. Laxity/Kefrens) perform multiple roles.  Many legendary demogroups, like Razor 1911 and Fairlight, have roots in software piracy. In fact, the demo scene itself evolved out of the game piracy [...]]]></description>
			<content:encoded><![CDATA[<h3>Who are the Demo Writers?</h3>
<p>The typical demogroup consists of coders, musicians and graphics artists (sometimes referred to as graphicians).  Some prominent scene figures (e.g. Laxity/Kefrens) perform multiple roles.  Many legendary demogroups, like Razor 1911 and Fairlight, have roots in software piracy. In fact, the demo scene itself evolved out of the game piracy scene, where cracking groups tagged their releases with a short graphical “intro”.  Some demo creators crossed over into game design, a pursuit naturally suited the hardware-intensive routines that make demos visually attractive.  Digital Illusions Creative Entertainment, developers of Pinball Dreams for the Amiga and Battlefield 2 for the Xbox 360, was created by former members of Swedish demogroup The Silents.</p>
<p>The majority of demos for all computer platforms are produced in Northern and Eastern Europe.  Finland, Sweden, Norway, the United Kingdom, Poland and Germany are the primary nations involved in the demo scene.  Demo writers span a wide age range, owing mostly to the maturity of the scene.  In the golden era of the early 1990’s, the typical demogroup consisted of young men in their late teens and early to mid 20’s.  Programmers must also have a strong mathematical background and intricate knowledge of the computer hardware – assembly language is the preferred language to maximize performance while keeping the compiled code size small enough to fit in a boot block or on a floppy disk.<br />
<span id="more-70"></span></p>
<h3>Amiga Demos 102: Desert Dream</h3>
<p><center><object height="350" width="425"><param name="movie" value="http://www.youtube.com/v/p8mC95RBNBw"></param>  <embed src="http://www.youtube.com/v/p8mC95RBNBw" type="application/x-shockwave-flash" height="350" width="425"></embed></object></center> </p>
<p><center><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/tazqUCil7cU"></param> <embed src="http://www.youtube.com/v/tazqUCil7cU" type="application/x-shockwave-flash" width="425" height="350"></embed></object></center></p>
<p><strong> Name:</strong> Desert Dream<br />
<strong> Demogroup:</strong> Kefrens<br />
<strong> Demo Party:</strong> The Gathering (1st Place)<br />
<strong> Release Date:</strong> 1993<br />
<strong> Hardware:</strong> 1MB, ECS Chipset, OS 1.3<br />
<strong> Genre:</strong> Megademo<br />
<strong> Notes:</strong> Desert Dream is a traditional megademo that appealed to a wide audience (i.e. not just programmers) via its cinematic intro, pumping soundtrack and continuous assault of visuals that were both visually and technically impressive.  The Demo comes in two parts and is split along this division for YouTube.  One of the top 5 Amiga demos of all time and certainly one of the best pre-AGA chipset releases.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blink7.com/2008/06/02/amiga-demos-102-desert-dream/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Amiga Demos 101: State of the Art</title>
		<link>http://www.blink7.com/2008/05/30/amiga-demos-101-state-of-the-art/</link>
		<comments>http://www.blink7.com/2008/05/30/amiga-demos-101-state-of-the-art/#comments</comments>
		<pubDate>Sat, 31 May 2008 01:47:50 +0000</pubDate>
		<dc:creator>Blink 7</dc:creator>
		
		<category><![CDATA[Amiga]]></category>

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

		<guid isPermaLink="false">http://www.blink7.com/2008/05/30/amiga-demos-101-state-of-the-art/</guid>
		<description><![CDATA[What is a Demo?
A “demo” (short for demonstration) is a multimedia presentation designed to show off both the graphical capabilities of the computer and prowess of the programmer.  The Commodore Amiga was a popular platform for demo creators due to its advanced (for the time) and standardized hardware (as opposed to a PC, which [...]]]></description>
			<content:encoded><![CDATA[<h3>What is a Demo?</h3>
<p>A “demo” (short for demonstration) is a multimedia presentation designed to show off both the graphical capabilities of the computer and prowess of the programmer.  The Commodore Amiga was a popular platform for demo creators due to its advanced (for the time) and standardized hardware (as opposed to a PC, which comes shipped with many possible hardware configurations).</p>
<p>Most demos consist of various 3D (vector) graphics, 2D “blitter” displays and still art.  The 3D graphics were typically rendered in the Amiga’s low-resolution mode (320&#215;256 for European PAL; 320&#215;200 for NTSC machines) while stills could be in high resolution mode or even high resolution interlaced (640&#215;512 PAL; 640&#215;400 NTSC).<br />
<span id="more-69"></span><br />
There are several varieties of demos, not limited to the following –</p>
<p>Intros – A looping demonstration that typically shows one effect and/or a scrolling message on a single screen.  Intros are typically used as opening screens for pirated games, though there are “intro” contests where the demo-writers compete to see who can create the greatest effects for a certain file size (e.g. 128 kilobytes).  Amiga intros were designed to fit within the boot-block of a double density floppy disk, so good programming was essential.</p>
<ul>
<li> <strong>Megademos </strong>– demonstrations that span one or more floppies, typically lasting between 5 and 30 minutes.  The effects and pictures were accompanied by one or more songs programmed in the Amiga .MOD format (4 channels of 8-bit samples) or some variant.  Megademos concentrated primarily on pushing the hardware to its maximum capabilities.</li>
<li> <strong>Trackmos </strong>– typically 1 disk demos (occasionally 2-disks) that are built around the soundtracks.  Early 90’s techno and acid was the genre of choice (and well suited to the Amiga’s limited sample memory) and the graphics were assembled like a music video.  Unlike megademos, trackmos focused on presentation rather than</li>
<li><strong> Music demos</strong> – collections of tracks accompanied by a WinAmp-style interface.  These demos were used to showcase the talents of one or more musicians.  Many musicians also distributed the original .MOD files via BBS systems or on public domain [no copyright] software collections.</li>
<li> <strong>Slideshows </strong>– As the name implies, usually accompanied by atmospheric music.</li>
</ul>
<h3>Demo: State of the Art</h3>
<p><center><object height="350" width="425"><param name="movie" value="http://www.youtube.com/v/FB10C16xSqY"></param>  <embed src="http://www.youtube.com/v/FB10C16xSqY" type="application/x-shockwave-flash" height="350" width="425"></embed></object><br />
</center><br />
<strong>Name:</strong> State of the Art<br />
<strong> Demogroup:</strong> Spaceballs<br />
<strong> Demo Party:</strong> The Party (1st Place)<br />
<strong> Release Date:</strong> 1992<br />
<strong> Hardware:</strong> 1MB, ECS Chipset, OS 1.3<br />
<strong> Genre:</strong> Trackmo<br />
<strong> Notes:</strong> This demo was tremendously popular due to its used of vectorized dancing silhouettes (trivia: the dancing was provided by the programmer’s girlfriend) synchronized to a dance music soundtrack and psychedelic backgrounds.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blink7.com/2008/05/30/amiga-demos-101-state-of-the-art/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tutorial: Adding Hotlink Protection to Wordpress</title>
		<link>http://www.blink7.com/2008/05/21/tutorial-adding-hotlink-protection-to-wordpress/</link>
		<comments>http://www.blink7.com/2008/05/21/tutorial-adding-hotlink-protection-to-wordpress/#comments</comments>
		<pubDate>Thu, 22 May 2008 05:14:25 +0000</pubDate>
		<dc:creator>Blink 7</dc:creator>
		
		<category><![CDATA[Blogging]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://www.blink7.com/2008/05/21/tutorial-adding-hotlink-protection-to-wordpress/</guid>
		<description><![CDATA[What is Hotlinking?
Hotlinking (also known as inline linking, piggybacking, leeching and bandwidth theft) refers to when one site links directly to an object on a second site.  Typically, the object is a picture that can then be displayed on the linking site without the owner having to copy the actual file from the second [...]]]></description>
			<content:encoded><![CDATA[<h3>What is Hotlinking?</h3>
<p>Hotlinking (also known as inline linking, piggybacking, leeching and bandwidth theft) refers to when one site links directly to an object on a second site.  Typically, the object is a picture that can then be displayed on the linking site without the owner having to copy the actual file from the second site.</p>
<h3> How Hotlinking can Affect your Wordpress Blog</h3>
<p>Hotlinking not only allows another site to use your content without permission but also uses your bandwidth to do it.  Every time a user surfs to the page of the offending site, the actual image shown is downloaded from your server to the user’s browser, even though the user is not on one of your web pages.  This can degrade performance on your site or even cause your site to run over the bandwidth limit allotted by your web host - typically resulting in additional charges or even a suspension of service.<br />
<span id="more-55"></span></p>
<h3> How not to Solve the Problem</h3>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-00.jpg" alt="tutorial007-00.jpg" /></p>
<p>A large proportion of web hosts provide the CPanel front-end for clients to set up and maintain their websites.  Recent versions of CPanel contain a security script called “Hotlink Protection”, designed to allow easy protection for all client sites against hotlinking.  Unfortunately, this script can cause Wordpress to malfunction.  For more information on why this happens and how to fix it, see the post “<a href="http://www.blink7.com/2008/05/19/fixing-the-cpanel-hotlink-error-in-wordpress/" title="Blink 7: Fixing the CPanel Hotlink Error in Wordpress" target="_blank">Fixing the CPanel HotLink Error in Wordpress</a>”.</p>
<h3> Adding Hotlink Protection</h3>
<p>The following tools and access are required:</p>
<ol>
<li> A text editor.  Notepad will do, though Notepad++ is a fantastic editor.</li>
<li> Full read/write access to the Wordpress blog’s installation directory</li>
<li> An FTP client (if the site is not being hosted on the local machine).  Of course a login/password to the server would also be required.  SmartFTP is a good (and free) client.</li>
</ol>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-01.jpg" alt="tutorial007-01.jpg" /></p>
<p>Open the text editor and enter the following code.</p>
<pre>RewriteEngine On
 RewriteCond %{HTTP_REFERER} !^http://(.+\.)?blink7\.com/ [NC]
 RewriteCond %{HTTP_REFERER} !^http://(.+\.)?google\.com/ [NC]
 RewriteCond %{HTTP_REFERER} !^$
 RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [F]</pre>
<p>In the second line of code Replace <em>blink7\.com</em> with the root URL of the Wordpress blog<br />
For example … http://www.mysite.com = <em>mysite\.com</em><br />
And http://blog.mysite.org = <em>mysite\.org</em><br />
Save the file as <strong>htaccess.txt</strong></p>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-02.jpg" alt="tutorial007-02.jpg" /></p>
<p>Open the FTP client and login to site where the blog is installed.  Navigate to the following subdirectory:<br />
<em> /wp-content/uploads</em><br />
Drill down further to a directory containing picture uploads (JPEF, GIF, …)</p>
<p>Upload htacess.txt to the FTP directory<br />
Rename the file to <strong>.htaccess</strong></p>
<p>Eventually, this file will have to be uploaded and renamed in every subdirectory that contains uploaded files.  For now, proceed to the next section to verify that the htaccess file performs correctly.</p>
<h3>Testing Hotlink Protection</h3>
<p>Testing the htaccess file involves two parts</p>
<ul>
<li> Verifying that the Wordpress blog still links properly to the files protected by the htaccess file</li>
<li> Ensuring that external sites cannot hotlink to the files protected by the htaccess file</li>
</ul>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-03.jpg" alt="tutorial007-03.jpg" /></p>
<p>Open a browser window and navigate to the section of a blog whose uploaded pictures are in the directory with the htaccess file. Right-click on the picture and select <strong>Copy Image Location…</strong> from the pop-up menu.  This will be the test picture.</p>
<p align="center">Firefox: <img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-04.jpg" alt="tutorial007-04.jpg" /></p>
<p align="center"> Internet Explorer: <img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-04-2.jpg" alt="tutorial007-04-2.jpg" /></p>
<p>Hit the <strong>refresh/reload</strong> button on the web browser.<br />
Ensure the pictures still display correctly.</p>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-05.jpg" alt="tutorial007-05.jpg" /></p>
<p align="center"> <img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-05-2.jpg" alt="tutorial007-05-2.jpg" /></p>
<p> Clear the browser cache  (Firefox 2.x)</p>
<ul>
<li> Select the menu item <strong>Tools &#8211;&gt; Clear Private Data…</strong></li>
<li> Ensure the option “Browsing History” is selected.  Click on the <strong>Clear Private Data Now</strong> button</li>
</ul>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-06.jpg" alt="tutorial007-06.jpg" /></p>
<p align="center"> <img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-06-2.jpg" alt="tutorial007-06-2.jpg" /></p>
<p align="center"> <img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-06-3.jpg" alt="tutorial007-06-3.jpg" /></p>
<p>Clear the browser cache (Internet Explorer 7.x):</p>
<ul>
<li> Select the menu item <strong>Tools &#8211;&gt; Internet Options</strong></li>
<li> Click on the <strong>Delete </strong>button, located underneath the “Browsing History” heading.</li>
<li> Click on the <strong>Delete Files</strong> button, located beside the “Temporary Internet Files” title.  Click on the <strong>Close </strong>button. Click on the <strong>OK </strong>button to return to the main browser</li>
</ul>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-07.jpg" alt="tutorial007-07.jpg" /></p>
<p>Surf to the following URL:</p>
<p><a href="http://www.htaccesstools.com/test-hotlink-protection/" title="Test Hotlink Protection" target="_blank">http://www.htaccesstools.com/test-hotlink-protection/</a></p>
<p>Paste the previously-copied URL for the test picture into the text box.<br />
Click on the <strong>Test Hotlink Protection</strong> button.</p>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial007-08.jpg" alt="tutorial007-08.jpg" /></p>
<p>If the htaccess has been configured properly, a red x or the text “Hotlinked Image” will show on the screen.  The actual image should NOT show on this page if the access rules have been set up correctly.</p>
<p>Once verification has been completed, copy the .htaccess file to other file upload subdirectories.  Typically, Wordpress creates one subdirectory for each year/month of uploads.</p>
<h3>Further Modifications</h3>
<p>The example code allow is designed to allow hotlinking from the blog itself and the Google search engine.  The Google.com line can be removed, though Google’s image search can be a rich source of search engine traffic.  Similarly, the Google line can be changed to allow hotlinking from a different URL.  More servers can be added by  duplicating the RewriteCond for the blog’s URL and changing the parameters accordingly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blink7.com/2008/05/21/tutorial-adding-hotlink-protection-to-wordpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fixing the CPanel HotLink Error in Wordpress</title>
		<link>http://www.blink7.com/2008/05/19/fixing-the-cpanel-hotlink-error-in-wordpress/</link>
		<comments>http://www.blink7.com/2008/05/19/fixing-the-cpanel-hotlink-error-in-wordpress/#comments</comments>
		<pubDate>Tue, 20 May 2008 03:36:15 +0000</pubDate>
		<dc:creator>Blink 7</dc:creator>
		
		<category><![CDATA[Blogging]]></category>

		<category><![CDATA[Quick Fixes]]></category>

		<guid isPermaLink="false">http://www.blink7.com/2008/05/19/fixing-the-cpanel-hotlink-error-in-wordpress/</guid>
		<description><![CDATA[Identifying the Problem
Using CPanel, you turn on Hotlink protection to prevent outside hot linking to your files from unauthorized sites.


Enabling Hotlink protection causes a 404 error for previously-working Wordpress URL’s


Explanation
CPanel’s hotlink protection feature makes a series of changes to the .htaccess file at the root of each subdirectory of the public_html directory.

If the permalink structure [...]]]></description>
			<content:encoded><![CDATA[<h3>Identifying the Problem</h3>
<p>Using CPanel, you turn on Hotlink protection to prevent outside hot linking to your files from unauthorized sites.</p>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial006-01.jpg" alt="tutorial006-01.jpg" /></p>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial006-02.jpg" alt="tutorial006-02.jpg" /></p>
<p>Enabling Hotlink protection causes a 404 error for previously-working Wordpress URL’s</p>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial006-03.jpg" alt="tutorial006-03.jpg" /></p>
<p><span id="more-47"></span></p>
<h3>Explanation</h3>
<p>CPanel’s hotlink protection feature makes a series of changes to the .htaccess file at the root of each subdirectory of the public_html directory.</p>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial006-04.jpg" alt="tutorial006-04.jpg" /></p>
<p>If the permalink structure in Wordpress was changed from the default then the root .htaccess file was previously altered to accommodate the custom URL structure (default Wordpress URL’s are structured <em>http://www.mysite.com/?page=123</em>).  CPanel’s modifications interfere with Wordpress’ settings, causing the modified URL’s to stop functioning correctly.</p>
<h3>Solution</h3>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial006-01.jpg" alt="tutorial006-01.jpg" /></p>
<p>Login to CPanel.  Click on the <strong>Hotlink Protection</strong> option.  Click on the <strong>Disable </strong>Button.  Close CPanel.</p>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial006-05.jpg" alt="tutorial006-05.jpg" /></p>
<p>Login to the admin section of the affected Wordpress site.  Click on <strong>Settings</strong></p>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial006-06.jpg" alt="tutorial006-06.jpg" /></p>
<p>Click on <strong>Permalinks</strong></p>
<p align="center"><img src="http://www.blink7.com/wp-content/uploads/2008/05/tutorial006-07.jpg" alt="tutorial006-07.jpg" /></p>
<p>Verify that the custom URL structure is the same as before the error occurred.  Click on the <strong>Save Changes</strong> Button</p>
<p>The Wordpress site’s custom URL’s should be restored.</p>
<p>See Also: &#8220;<a href="http://www.blink7.com/2008/05/21/tutorial-adding-hotlink-protection-to-wordpress/" title="Blink 7: Adding Hotlink Protection to Wordpress" target="_blank">Adding Hotlink Protection to Wordpress</a>&#8220;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blink7.com/2008/05/19/fixing-the-cpanel-hotlink-error-in-wordpress/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
