<?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>Compdigitec Labs</title>
	<atom:link href="http://www.compdigitec.com/labs/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.compdigitec.com/labs</link>
	<description>The place for interesting things</description>
	<lastBuildDate>Sun, 28 Feb 2010 01:02:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Sound in Windows 98 on VMware</title>
		<link>http://www.compdigitec.com/labs/2010/02/27/sound-in-windows-98-on-vmware/</link>
		<comments>http://www.compdigitec.com/labs/2010/02/27/sound-in-windows-98-on-vmware/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 00:59:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[create ensoniq audiopci]]></category>
		<category><![CDATA[creative]]></category>
		<category><![CDATA[creative technologies]]></category>
		<category><![CDATA[ntkern.vxd]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[vmware player]]></category>
		<category><![CDATA[vmware server]]></category>
		<category><![CDATA[vmware workstation]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[windows 98]]></category>
		<category><![CDATA[windows 98 fe]]></category>
		<category><![CDATA[windows 98 se]]></category>
		<category><![CDATA[windows 9x]]></category>

		<guid isPermaLink="false">http://www.compdigitec.com/labs/?p=155</guid>
		<description><![CDATA[By default, even after installing the VMWare Tools provided by VMWare (Player, Workstation or Server), the VMWare Tools package still does not install an audio driver, even though it installed a mouse driver and a SVGA driver for true colour graphics. However, most of the time we would like some audio in Windows 9x guests, [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_156" class="wp-caption alignright" style="width: 826px"><a href="http://www.compdigitec.com/labs/wp-content/uploads/2010/02/windows98vmware.png"><img class="size-full wp-image-156 " title="Windows 98 Sound in VMware" src="http://www.compdigitec.com/labs/wp-content/uploads/2010/02/windows98vmware.png" alt="Windows 98 Sound in VMware" width="816" height="381" /></a><p class="wp-caption-text">Windows 98 Sound in VMware</p></div>
<p>By default, even after installing the VMWare Tools provided by VMWare (Player, Workstation or Server), the VMWare Tools package still does not install an audio driver, even though it installed a mouse driver and a SVGA driver for true colour graphics. However, most of the time we would like some audio in Windows 9x guests, whether to test old Win9x applications or to have a copy of Windows to run Windows-only software that refuses to run under Linux or Wine.</p>
<p><strong>Requirements</strong></p>
<ol>
<li><a href="/labs/files/directx_9c_redist.exe">DirectX 9.0</a> (important, very important, without it you&#8217;ll get the dreaded NTKERN.VXD and MMDEVLDR.VXD errors)</li>
<li><a href="/labs/files/SBPCI_WebDrvsV5_12_01.exe">Creative Ensoniq AudioPCI drivers</a> (the card emulated by VMware)</li>
<li><a href="/labs/files/eapci8m.ecw">eapci8m.ecw</a> (if you want to play MIDI files)</li>
<li>Windows 9x (98 FE or SE, but should work on all versions of Windows) running in&#8230;</li>
<li>A VMWare product (any, be it Server, Player or Workstation) with VMWare Tools installed.</li>
</ol>
<p><strong>Steps</strong></p>
<ol>
<li>Run<strong> SBPCI_WebDrvsV5_12_01.exe</strong> and install it, but <em>do not reboot</em>.</li>
<li>Move <strong>eapci8m.ecw</strong> to C:\windows\system.</li>
<li>Install DirectX 9 (<strong>directx_9c_redist.exe</strong>).</li>
<li>Now restart the system.</li>
<li>After logging in, sound should start working. Enjoy!</li>
</ol>
<p><strong>Troubleshooting  The NTKERN.VXD and MMDEVLDR.VXD</strong><strong> device loader(s) for this device could not load the device driver. (Code 2) </strong></p>
<p>This error message results because the code used by Creative Technology, Inc uses APIs from DirectX or other supporting libraries that are not incuded by default with Windows 98. Installing the DirectX 9 package did however fix the problem.</p>
<p>If you found this article helpful or interesting, please help Compdigitec spread the word. Don’t forget to <a title="Subscribe to Compdigitec Labs" href="/labs/feed/">subscribe to Compdigitec Labs</a> for more interesting articles!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compdigitec.com/labs/2010/02/27/sound-in-windows-98-on-vmware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixing &#8220;/usr/lib/cups/backend/smb failed&#8221; error in Ubuntu</title>
		<link>http://www.compdigitec.com/labs/2010/01/16/fixing-usrlibcupsbackendsmb-failed-error-in-ubuntu/</link>
		<comments>http://www.compdigitec.com/labs/2010/01/16/fixing-usrlibcupsbackendsmb-failed-error-in-ubuntu/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 01:49:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[cups]]></category>
		<category><![CDATA[cups webadmin]]></category>
		<category><![CDATA[printing]]></category>
		<category><![CDATA[smb error]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[ubuntu 9.04]]></category>
		<category><![CDATA[ubuntu 9.10]]></category>
		<category><![CDATA[usr lib cups backend failed]]></category>

		<guid isPermaLink="false">http://www.compdigitec.com/labs/?p=153</guid>
		<description><![CDATA[The new setups for printing has been modernized in Ubuntu 9.10 and 9.04 work perfectly most of the time, but sometimes a misbehaving script or update decides to have it&#8217;s own mind and messes up all the permissions for CUPS to work properly. Here is a guide to restore the former printing versatility before the mess-up.
To [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_154" class="wp-caption alignleft" style="width: 511px"><a href="http://www.compdigitec.com/labs/wp-content/uploads/2010/01/cups.png"><img class="size-full wp-image-154 " title="CUPS server showing error" src="http://www.compdigitec.com/labs/wp-content/uploads/2010/01/cups.png" alt="CUPS server showing error" width="501" height="391" /></a><p class="wp-caption-text">CUPS server showing error</p></div>
<p>The new setups for printing has been modernized in Ubuntu 9.10 and 9.04 work perfectly most of the time, but sometimes a misbehaving script or update decides to have it&#8217;s own mind and messes up all the permissions for <a href="http://cups.org/">CUPS</a> to work properly. Here is a guide to restore the former printing versatility before the mess-up.</p>
<p>To fix the permission errors:</p>
<pre class="brush: bash;">
sudo chown root -hR /usr/lib/cups/backend
sudo chmod 755 -hR /usr/lib/cups/backend
sudo aa-complain cupsd
sudo chmod a+x /usr/lib/cups/backend/smb
sudo chmod a+x /usr/lib/cups/backend
</pre>
<p>That&#8217;s all there is. Also make sure your Windows printer is <span style="text-decoration: underline;">actually accessible</span> in order to prevent further access issues. In addition, to access the CUPS web interface just navigate to <a href="http://127.0.0.1:631/">http://127.0.0.1:631/</a>. When it asks for your password, use your Linux login.</p>
<p>If you found this article helpful or interesting, please help Compdigitec spread the word. Don’t forget to <a title="Subscribe to Compdigitec Labs" href="/labs/feed/">subscribe to Compdigitec Labs</a> for more interesting articles!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compdigitec.com/labs/2010/01/16/fixing-usrlibcupsbackendsmb-failed-error-in-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows SteadyState &#8211; a free DeepFreeze?</title>
		<link>http://www.compdigitec.com/labs/2010/01/08/windows-steadystate-a-free-deepfreeze/</link>
		<comments>http://www.compdigitec.com/labs/2010/01/08/windows-steadystate-a-free-deepfreeze/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 01:08:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[cost]]></category>
		<category><![CDATA[deepfreeze]]></category>
		<category><![CDATA[expensive]]></category>
		<category><![CDATA[faronics]]></category>
		<category><![CDATA[faronics deepfreeze]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[freeze]]></category>
		<category><![CDATA[freeze system partition]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[steadystate]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[windows steadyfreeze]]></category>

		<guid isPermaLink="false">http://www.compdigitec.com/labs/?p=151</guid>
		<description><![CDATA[For quite a while, the program Faronics DeepFreeze has been the standard program for locking down Windows installations against abuse by end-users. However, now even Microsoft themselves are trying to obtain a piece of this pie with a new freeware called Windows SteadyState.
This new program can act just like the full DeepFreeze program and can [...]]]></description>
			<content:encoded><![CDATA[<p>For quite a while, the program <a href="http://www.faronics.com/html/deepfreeze.asp">Faronics DeepFreeze</a> has been the standard program for locking down Windows installations against abuse by end-users. However, now even Microsoft themselves are trying to obtain a piece of this pie with a new freeware called <a href="http://www.microsoft.com/windows/products/winfamily/sharedaccess/default.mspx">Windows SteadyState</a>.</p>
<p><a href="http://www.compdigitec.com/labs/wp-content/uploads/2010/01/steadystate.png"><img class="alignleft size-full wp-image-152" title="Windows SteadyState" src="http://www.compdigitec.com/labs/wp-content/uploads/2010/01/steadystate.png" alt="Windows SteadyState" width="480" height="350" /></a>This new program can act just like the full DeepFreeze program and can even protect user profiles and lock down the system for certain users. To freeze the hard drive it is a simple matter composing of:</p>
<ol>
<li>Open the SteadyState application.</li>
<li>Select the &#8220;Protect the Hard Disk&#8221; option.</li>
<li>Reboot!</li>
</ol>
<p>However, this new program also has some limitations, such as no Group Policy integration, no ability to choose which drives to freeze and no full protection like those offered by DeepFreeze. However, this program is much more cheaper than DeepFreeze ($0) and is suited for those who don&#8217;t need the full protection of DeepFreeze. You can <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d077a52d-93e9-4b02-bd95-9d770ccdb431&amp;DisplayLang=en">download Windows SteadyState here</a>, but your systems must be able to pass WGA successfully. If you can&#8217;t or don&#8217;t want to install the WGA component you can <a href="http://download.microsoft.com/download/a/f/4/af4fca6d-1202-4c30-a1bc-853e9a166695/SteadyState.msi">directly download it from Microsoft</a>.</p>
<p>If you found this article helpful or interesting, please help Compdigitec spread the word. Don’t forget to <a title="Subscribe to Compdigitec Labs" href="/labs/feed/">subscribe to Compdigitec Labs</a> for more interesting articles!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compdigitec.com/labs/2010/01/08/windows-steadystate-a-free-deepfreeze/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free and open source XML beautifers to format XML</title>
		<link>http://www.compdigitec.com/labs/2009/12/26/free-and-open-source-xml-beautifers-to-format-xml/</link>
		<comments>http://www.compdigitec.com/labs/2009/12/26/free-and-open-source-xml-beautifers-to-format-xml/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 14:07:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[(X)HTML]]></category>
		<category><![CDATA[HTTP (Internet)]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[free and open source]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xml beautifier]]></category>
		<category><![CDATA[xml code formatting]]></category>
		<category><![CDATA[xml formatting]]></category>

		<guid isPermaLink="false">http://www.compdigitec.com/labs/?p=149</guid>
		<description><![CDATA[XML is a great format for storing data, but an improperly-formatted XML file (e.g. whole file on one line, unusual breaking, improper line wrap, etc) can be just as difficult to read as a binary blob. In order to make &#8220;blob&#8221; XML readable, here are some tools you can use to format XML so it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>XML is a great format for storing data, but an improperly-formatted XML file (e.g. whole file on one line, unusual breaking, improper line wrap, etc) can be just as difficult to read as a binary blob. In order to make &#8220;blob&#8221; XML readable, here are some tools you can use to format XML so it&#8217;s readable.</p>
<ul>
<li><a href="http://jyro.blogspot.com/2009/08/makeshift-xml-beautifier-in-python.html"><strong>A makeshift Python beautifier</strong></a> &#8211; A simple XML formattor written in Python, this formattor formats XML and actually works. Unfortunately, it formats &lt;element&gt;value&lt;/element&gt; into
<pre class="brush: xml;">&lt;element&gt;
    value
&lt;/element&gt;</pre>
<p>Which can actually decrease readability, especially if you have lots of short elements.</li>
<li><a href="http://tidy.sourceforge.net/"><strong>HTML Tidy</strong></a> &#8211; Official HTML/XHTML formattor endorsed by the World Wide Web Consortorium. However the XML it formatted refused to contain indents, even after enabling all indenting and formatting options. It formatted &lt;tag1&gt;&lt;tag2&gt;&lt;tag3&gt;xyz&lt;/tag3&gt;&lt;/tag2&gt;&lt;/tag1&gt; into
<pre class="brush: xml;">&lt;tag1&gt;
&lt;tag2&gt;
&lt;tag3&gt;xyz&lt;/tag3&gt;
&lt;/tag2&gt;
&lt;/tag1&gt;</pre>
<p>This is not much good since indents are generally required in human readable XML.</li>
<li><a href="http://www.thedeveloperday.com/xml-beautifier-tool/"><strong>PHP XML beautifier</strong></a> &#8211; Small PHP based XML beautifier. The only one that actually worked properly and formatted readable XML. Formatted &lt;tag1&gt;&lt;tag2&gt;&lt;tag3&gt;xyz&lt;/tag3&gt;&lt;/tag2&gt;&lt;/tag1&gt; into
<pre class="brush: xml;">&lt;tag1&gt;
    &lt;tag2&gt;
        &lt;tag3&gt;xyz&lt;/tag3&gt;
    &lt;/tag2&gt;
&lt;/tag1&gt;</pre>
<p>Which is the expected result. For more consistency, you might want to change (in BeautyXML.class.php)</p>
<pre class="brush: php;">var $how_to_ident = &quot;    &quot;; // you can user also \t or more/less spaces</pre>
<p>to</p>
<pre class="brush: php;">var $how_to_ident = &quot;\t&quot;; // you can user also \t or more/less spaces</pre>
<p>to use tabs instead of spaces to save file space.</li>
</ul>
<p>If you found this article helpful or interesting, please help Compdigitec spread the word. Don’t forget to <a title="Subscribe to Compdigitec Labs" href="/labs/feed/">subscribe to Compdigitec Labs</a> for more interesting articles!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compdigitec.com/labs/2009/12/26/free-and-open-source-xml-beautifers-to-format-xml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple C++ gettext-like toolkit</title>
		<link>http://www.compdigitec.com/labs/2009/12/20/simple-c-gettext-like-toolkit/</link>
		<comments>http://www.compdigitec.com/labs/2009/12/20/simple-c-gettext-like-toolkit/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 00:04:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[catalog]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[cxx]]></category>
		<category><![CDATA[flat file]]></category>
		<category><![CDATA[gettext]]></category>
		<category><![CDATA[gettext-like]]></category>
		<category><![CDATA[pd]]></category>
		<category><![CDATA[public domain]]></category>
		<category><![CDATA[text file]]></category>
		<category><![CDATA[translation]]></category>

		<guid isPermaLink="false">http://www.compdigitec.com/labs/?p=147</guid>
		<description><![CDATA[Here is a small gettext-compatible interface for reading simple translation catalogs (not to be confused with gettext&#8217;s *.mo style catalogs, which are binary) in form of &#8220;original/english string&#60;tab&#62;translated string&#8221;. It is not fool-proof, but you can play around with it and it works.

/*
 *      gettextpd.h
 * 		Main file for GettextPD
 [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a small gettext-compatible interface for reading simple translation catalogs (not to be confused with gettext&#8217;s *.mo style catalogs, which are binary) in form of &#8220;original/english string&lt;tab&gt;translated string&#8221;. It is not fool-proof, but you can play around with it and it works.</p>
<pre class="brush: cpp;">
/*
 *      gettextpd.h
 * 		Main file for GettextPD
 *
 *      © Copyright 2009 Compdigitec. All rights reserved.
 *
 *      Copying and distribution of this file, with or without modification,
 * 		are permitted in any medium without royalty provided the copyright
 * 		notice and this notice are preserved.  This file is offered as-is,
 * 		without any warranty.
 */
#ifndef __GETTEXTPD__
#define __GETTEXTPD__

#include &lt;stdlib.h&gt;
#include &lt;cstring&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;

// gettext functions
char* gettext (char *msgid);
std::string gettext (std::string msgid);
char* textdomain (const char *domain_name);
char* bindtextdomain (const char *domain_name, const char *dir_name);
char* setlocale (int category, const char* locale);

// macros
#define _(str) gettext(str)

// globals
std::string gtpd_locale = &quot;&quot;;
std::string gtpd_domain = &quot;&quot;;
std::string gtpd_location = &quot;&quot;;

// function bodies
char* gettext(char* msgid)
{
	std::string x(msgid);
	std::string result;
	result = gettext(x);
	char* nb = (char*)malloc(sizeof(char)*result.length());
	strcpy(nb,result.c_str());
	return nb;
}

std::string gettext(std::string msgid)
{
	std::string path = gtpd_location + &quot;/&quot; + gtpd_locale + &quot;/LC_MESSAGES/&quot; + gtpd_domain + &quot;.mo&quot;;
	std::ifstream stream;
	stream.open(path.c_str());
	std::string resultline;
	while(!stream.eof()) {
		getline(stream,resultline);
		if(strstr(resultline.c_str(),msgid.c_str()) != NULL) {
			break;
		}
		resultline = &quot;&quot;;
	}
	if(resultline == &quot;&quot;) {
		// not found
		return msgid;
	}
	int splitloc = resultline.find(&quot;\t&quot;);
	return resultline.substr(splitloc+1);
}

char* textdomain(const char *domain_name)
{
	gtpd_domain = domain_name;
	char* res = (char*)malloc(sizeof(char)*100);
	strcpy(res,domain_name);
	return res;
}

char* bindtextdomain (const char *domain_name, const char *dir_name)
{
	gtpd_location = dir_name;
	textdomain(domain_name);
	char* res = (char*)malloc(sizeof(char)*100);
	strcpy(res,dir_name);
	return res;
}

char* setlocale (int category, const char* locale)
{
	gtpd_locale = locale;
	char* res = (char*)malloc(sizeof(char)*100);
	strcpy(res,locale);
	return res;
}

#endif
</pre>
<p>Example usage:</p>
<pre class="brush: cpp;">
// test.cpp
#include &quot;gettextpd.h&quot;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
int main(void)
{
  setlocale( LC_ALL, &quot;fr_FR&quot; );
bindtextdomain( &quot;hello&quot;, &quot;.&quot; );
textdomain( &quot;hello&quot; );
std::cout &lt;&lt; gettext(&quot;Hello, world!&quot;) &lt;&lt; &quot;\n&quot;;
std::cout &lt;&lt; _(&quot;THis is A TeST StriNg&quot;) &lt;&lt; &quot;\n&quot;;
exit(0);
}
</pre>
<p>folder/fr_FR/LC_MESSAGES/hello.mo</p>
<pre class="brush: plain;">
Hello, world!	Zu bu zu translated str
THis is A TeST StriNg	test string translated this is#2
</pre>
<p>If you found this article helpful or interesting, please help Compdigitec spread the word. Don’t forget to <a title="Subscribe to Compdigitec Labs" href="/labs/feed/">subscribe to Compdigitec Labs</a> for more interesting articles!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compdigitec.com/labs/2009/12/20/simple-c-gettext-like-toolkit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to take out the system built-in beeper in Linux</title>
		<link>http://www.compdigitec.com/labs/2009/12/18/how-to-take-out-the-system-built-in-beeper-in-linux/</link>
		<comments>http://www.compdigitec.com/labs/2009/12/18/how-to-take-out-the-system-built-in-beeper-in-linux/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 02:21:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[annoying]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[beeping]]></category>
		<category><![CDATA[laptop]]></category>
		<category><![CDATA[modprobe]]></category>
		<category><![CDATA[sh]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.compdigitec.com/labs/?p=145</guid>
		<description><![CDATA[Usually the system beeper (not to be confused with speakers) can be a rather useful tool in informing or alerting the user. Sometimes however, the beeper can be just plain annoying, especially if you already know what you are doing. For example, it is very annoying to have a laptop suddenly start beeping in the [...]]]></description>
			<content:encoded><![CDATA[<p>Usually the system beeper (not to be confused with speakers) can be a rather useful tool in informing or alerting the user. Sometimes however, the beeper can be just plain annoying, especially if you already know what you are doing. For example, it is very annoying to have a laptop suddenly start beeping in the middle or a presentation or on a subway train. Here&#8217;s how to disable it to avoid such embarrassment.</p>
<p><strong>To permanently disable:</strong></p>
<p>Execute in a shell (Applications &gt;&gt; Terminal):</p>
<pre class="brush: bash;">echo -e &quot;\nblacklist pcspkr\c&quot; &gt;&gt; /etc/modprobe.d/blacklist.conf</pre>
<p><strong>To temporarily disable:</strong></p>
<p>Execute in a shell (Applications &gt;&gt; Terminal):</p>
<pre class="brush: bash;">sudo modprobe -r pcspkr</pre>
<p>If you found this article helpful or interesting, please help Compdigitec spread the word. Don’t forget to <a title="Subscribe to Compdigitec Labs" href="/labs/feed/">subscribe to Compdigitec Labs</a> for more interesting articles!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compdigitec.com/labs/2009/12/18/how-to-take-out-the-system-built-in-beeper-in-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Console-free gtkmm applications in Visual Studio 2008</title>
		<link>http://www.compdigitec.com/labs/2009/12/06/console-free-gtkmm-applications-in-visual-studio-2008/</link>
		<comments>http://www.compdigitec.com/labs/2009/12/06/console-free-gtkmm-applications-in-visual-studio-2008/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 20:39:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[box]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[dosbox]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[gtkmm]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[visual studio 2008]]></category>
		<category><![CDATA[vs]]></category>
		<category><![CDATA[vs2008]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.compdigitec.com/labs/?p=144</guid>
		<description><![CDATA[When compiling Gtkmm programs on Microsoft Windows using Visual C++, a black console box pops up when you run the program. However, setting the application subsystem to Windows will cause the program to complain about WinMain and other problems. Here is a versatile solution from the Gtkmm mailing list to get Gtkmm to work on [...]]]></description>
			<content:encoded><![CDATA[<p>When compiling <a href="http://www.gtkmm.org/">Gtkmm</a> programs on Microsoft Windows using Visual C++, a black console box pops up when you run the program. However, setting the application subsystem to Windows will cause the program to complain about WinMain and other problems. Here is a <a href="http://old.nabble.com/how-to-prevent-the-console-window-poping-out-when-running-gtkmm-app--in-windows-vista--td23334287.html">versatile solution from the Gtkmm mailing list</a> to get Gtkmm to work on Windows transparently without breaking interoperability with other platforms, such as Linux, though some modifications were required to make it work.</p>
<p>Insert the following code before your <em>main()</em> and after your header <em>#include</em>s:</p>
<pre class="brush: cpp;">
#ifdef WIN32
	#include &lt;windows.h&gt;
#endif

using namespace std;
using namespace Gtk;

int main(int argc, char* argv[]);

#ifdef WIN32

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
	// check windows version
         DWORD dwVersion = GetVersion();

         if (!(dwVersion &lt; 0x80000000))
         {
                 MessageBox(0, _T(&quot;This application requires Windows 2000/XP or above!&quot;), _T(&quot;Fatal Error&quot;), MB_OK);
                 return -1;
         }

         return main(__argc, __argv);
}

#endif
</pre>
<p>Here is a sample Gtkmm application without console boxes on Windows:</p>
<pre>
<pre class="brush: cpp;">
#include &lt;gtkmm.h&gt;
#include &lt;iostream&gt;
#ifdef WIN32
	#include &lt;windows.h&gt;
#endif

using namespace std;
using namespace Gtk;

int main(int argc, char* argv[]);

#ifdef WIN32

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
	// check windows version
         DWORD dwVersion = GetVersion();

         if (!(dwVersion &lt; 0x80000000))
         {
                 MessageBox(0, _T(&quot;This application requires Windows 2000/XP or above!&quot;), _T(&quot;Fatal Error&quot;), MB_OK);
                 return -1;
         }

         return main(__argc, __argv);
}

#endif

int main(int argc, char* argv[])
{
	Gtk::Main kit(argc, argv);
	Gtk::Window window;
	Gtk::Main::run(window);

	return 0;
}
</pre>
</pre>
<p>If you found this article helpful or interesting, please help Compdigitec spread the word. Don’t forget to <a href="/labs/feed/" title="Subscribe to Compdigitec Labs">subscribe to Compdigitec Labs</a> for more interesting articles!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compdigitec.com/labs/2009/12/06/console-free-gtkmm-applications-in-visual-studio-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Live and Bad Behaviour plugin incompatiblity</title>
		<link>http://www.compdigitec.com/labs/2009/11/16/windows-live-and-bad-behaviour-plugin-incompatiblity/</link>
		<comments>http://www.compdigitec.com/labs/2009/11/16/windows-live-and-bad-behaviour-plugin-incompatiblity/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 23:00:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTTP (Internet)]]></category>
		<category><![CDATA[bad behavior]]></category>
		<category><![CDATA[bad behaviour]]></category>
		<category><![CDATA[We can't get infromation for this web activity]]></category>
		<category><![CDATA[whitelist]]></category>
		<category><![CDATA[windows live]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.compdigitec.com/labs/?p=142</guid>
		<description><![CDATA[While the Bad Behaviour plugin is an excellent plugin for blocking annoying comment spam and other stuff, but there is a known incompatibility with the Bad Behaviour plugin with the Windows Live. You can go and read the full article, but here is a quick drill-down of what you need to know:


Bad Behaviour Logs


Basically, the [...]]]></description>
			<content:encoded><![CDATA[<p>While the Bad Behaviour plugin is an excellent plugin for blocking annoying comment spam and other stuff, but there is a known incompatibility with the Bad Behaviour plugin with the Windows Live. You can go and <a href="http://steve.heyvan.com/2009/05/09/technology-reviews/bad-behavior-workaround-dealing-with-windows-live/">read the full article</a>, but here is a quick drill-down of what you need to know:</p>
<div class="mceTemp">
<dl class="wp-caption alignnone" style="width: 822px;">
<dd class="wp-caption-dd"><a href="/images/labs/bblog.png"><img class=" " title="Bad Behaviour Logs" src="/images/labs/bblog.png" alt="Bad Behaviour Logs" width="812" height="310" /></a>Bad Behaviour Logs</dd>
</dl>
</div>
<div class="wp-caption alignnone" style="width: 617px"><a href="/images/labs/cantgetinfo.png"><img class=" " title="We cant get information for this web activity..." src="/images/labs/cantgetinfo.png" alt="We cant get information for this web activity..." width="607" height="275" /></a><p class="wp-caption-text">We can&#39;t get information for this web activity...</p></div>
<div class="wp-caption alignnone" style="width: 603px"><a href="/images/labs/done.png"><img class=" " title="WordPress has been added to your profile..." src="/images/labs/done.png" alt="WordPress has been added to your profile..." width="593" height="64" /></a><p class="wp-caption-text">WordPress has been added to your profile...</p></div>
<p>Basically, the Bad Behaviour plugin for some reason seems to think that the Windows Live &#8220;robot&#8221; sends a bad User-Agent string, and blocks Windows Live from accessing your recent posts. To remedy this, add &#8220;65.54.233.0/24&#8243;, after line 19 in <em>&lt;blogpath&gt;/wp-content/bad-behavior/bad-behavior/whitelist.inc.php</em>. It should look like this after you&#8217;re done:</p>
<pre class="brush: php;">&lt;?php if (!defined('BB2_CORE')) die('I said no cheating!');

function bb2_whitelist($package)
{
 // DANGER! DANGER! DANGER! DANGER! DANGER! DANGER! DANGER! DANGER!

 // Inappropriate whitelisting WILL expose you to spam, or cause Bad
 // Behavior to stop functioning entirely!  DO NOT WHITELIST unless you
 // are 100% CERTAIN that you should.

 // IP address ranges use the CIDR format.

 // Includes four examples of whitelisting by IP address and netblock.
 $bb2_whitelist_ip_ranges = array(
 &quot;64.191.203.34&quot;,    // Digg whitelisted as of 2.0.12
 &quot;208.67.217.130&quot;,    // Digg whitelisted as of 2.0.12
 &quot;10.0.0.0/8&quot;,
 &quot;172.16.0.0/12&quot;,
 &quot;192.168.0.0/16&quot;,
 &quot;65.54.233.0/24&quot;,
//        &quot;127.0.0.1&quot;,
 );

 // DANGER! DANGER! DANGER! DANGER! DANGER! DANGER! DANGER! DANGER!

 // Inappropriate whitelisting WILL expose you to spam, or cause Bad
 // Behavior to stop functioning entirely!  DO NOT WHITELIST unless you
 // are 100% CERTAIN that you should.

 // You should not whitelist search engines by user agent. Use the IP
 // netblock for the search engine instead. See http://whois.arin.net/
 // to locate the netblocks for an IP.

 // User agents are matched by exact match only.

 // Includes one example of whitelisting by user agent.
 // All are commented out.
 $bb2_whitelist_user_agents = array(
 //    &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) It's me, let me in&quot;,
 );

 // DANGER! DANGER! DANGER! DANGER! DANGER! DANGER! DANGER! DANGER!

 // Inappropriate whitelisting WILL expose you to spam, or cause Bad
 // Behavior to stop functioning entirely!  DO NOT WHITELIST unless you
 // are 100% CERTAIN that you should.

 // URLs are matched from the first / after the server name up to,
 // but not including, the ? (if any).

 // Includes two examples of whitelisting by URL.
 $bb2_whitelist_urls = array(
 //    &quot;/example.php&quot;,
 //    &quot;/openid/server&quot;,
 );

 // DANGER! DANGER! DANGER! DANGER! DANGER! DANGER! DANGER! DANGER!

 // Do not edit below this line

 if (!empty($bb2_whitelist_ip_ranges)) {
 foreach ($bb2_whitelist_ip_ranges as $range) {
 if (match_cidr($package['ip'], $range)) return true;
 }
 }
 if (!empty($bb2_whitelist_user_agents)) {
 foreach ($bb2_whitelist_user_agents as $user_agent) {
 if (!strcmp($package['headers_mixed']['User-Agent'], $user_agent)) return true;
 }
 }
 if (!empty($bb2_whitelist_urls)) {
 $request_uri = substr($settings['request_uri'], 0, strpos($settings['request_uri'], &quot;?&quot;));
 foreach ($bb2_whitelist_urls as $url) {
 if (!strcmp($request_uri, $url)) return true;
 }
 }
 return false;
}

?&gt;</pre>
<p>The edit to line 20 is the change required in order to accommodate Windows Live services on your WordPress blog. If you found this article helpful or interesting, please help Compdigitec spread the word. Don’t forget to <a title="Subscribe to Compdigitec Labs" href="/labs/feed/">subscribe to Compdigitec Labs</a> for more interesting articles!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compdigitec.com/labs/2009/11/16/windows-live-and-bad-behaviour-plugin-incompatiblity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New e-mail phishing alert &#8211; &#8220;It&#8217;s Easy, Secure and Free!&#8221; in big bold letters</title>
		<link>http://www.compdigitec.com/labs/2009/11/02/new-e-mail-phishing-alert-its-easy-secure-and-free-in-big-bold-letters/</link>
		<comments>http://www.compdigitec.com/labs/2009/11/02/new-e-mail-phishing-alert-its-easy-secure-and-free-in-big-bold-letters/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 23:37:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTTP (Internet)]]></category>
		<category><![CDATA[attack]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[phishing]]></category>
		<category><![CDATA[phishing attack]]></category>
		<category><![CDATA[scam]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.compdigitec.com/labs/?p=140</guid>
		<description><![CDATA[According to a recent news report, some 20,000 e-mail accounts have been hijacked from Internet phishing. This includes major e-mail providers such as Hotmail and Gmail. This results in spam being sent on behalf of the hijacked accounts and creates a major headache for both the hijacked and the non-hijacked caused by both spam and [...]]]></description>
			<content:encoded><![CDATA[<p>According to a recent news report, some 20,000 e-mail accounts have been <a href="http://www.neowin.net/news/main/09/10/06/hotmail-phishing-attack-confirmed-20000-accounts-in-total">hijacked from Internet phishing</a>. This includes major e-mail providers such as Hotmail <a href="http://news.bbc.co.uk/1/hi/technology/8292928.stm">and Gmail</a>. This results in spam being sent on behalf of the hijacked accounts and creates a major headache for both the hijacked and the non-hijacked caused by both spam and unauthorized usage of the victims&#8217; accounts.</p>
<div class="wp-caption alignright" style="width: 491px"><a href="/images/labs/spam.png"><img class="  " title="E-mail spam sample" src="/images/labs/spam.png" alt="E-mail spam sample" width="481" height="190" /></a><p class="wp-caption-text">E-mail spam sample</p></div>
<p>Major hallmarks of the spam include misspellings in the message, poor grammar and in the center a big bold sentence which goes like this:</p>
<p><strong>It&#8217;s Easy, <span style="font-size: small;">Secure</span> and <span style="font-size: medium;">Free</span>!</strong></p>
<p>Followed by a link to a suspicious website that looks something like superb-blocked-check.com or see-alarming-block-check.com.</p>
<p>Things you can do to stay clear of this:</p>
<ul>
<li>If people in your contact list are sending you this spam, mark the message as spam in your inbox (to train the spam filter) and then send a message to your contact informing them their account has been hijacked.</li>
<li>There is no need for a virus panic over this &#8211; it is a phishing attack, not a virus attack even though some mix those up.</li>
<li><strong>Do not click on the link.</strong></li>
<li>If you have already fallen for the scam (by clicking on the link) or if you are on the &#8220;leaked&#8221; list, immediately change your e-mail password and any other passwords in which it is identical or similar to the leaked password.</li>
</ul>
<p>If you found this article helpful or interesting, please help Compdigitec spread the word. Don’t forget to <a href="/labs/feed/">subscribe to Compdigitec Labs</a> for more interesting articles!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compdigitec.com/labs/2009/11/02/new-e-mail-phishing-alert-its-easy-secure-and-free-in-big-bold-letters/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Virtual MIDI Keyboard in Ubuntu</title>
		<link>http://www.compdigitec.com/labs/2009/10/04/virtual-midi-keyboard-in-ubuntu/</link>
		<comments>http://www.compdigitec.com/labs/2009/10/04/virtual-midi-keyboard-in-ubuntu/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 18:54:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[jack]]></category>
		<category><![CDATA[jackd]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[midi]]></category>
		<category><![CDATA[midi channelling]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[piano]]></category>
		<category><![CDATA[qjackctl]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[virtual keyboard]]></category>
		<category><![CDATA[virtual midi piano keyboard]]></category>
		<category><![CDATA[virtual piano]]></category>
		<category><![CDATA[vkeybd]]></category>
		<category><![CDATA[vmpk]]></category>
		<category><![CDATA[zynaddsubfx]]></category>

		<guid isPermaLink="false">http://www.compdigitec.com/labs/?p=138</guid>
		<description><![CDATA[On Windows, you could find many freeware virtual piano software. But on Linux, you have no such easy setup or such choice. There are two major pieces virtual piano software &#8211; they are Virtual Keyboard and Virtual MIDI Piano Keyboard.
You should be sure you have your sound card proper set before you start this &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>On Windows, you could find many freeware virtual piano software. But on Linux, you have no such easy setup or such choice. There are two major pieces virtual piano software &#8211; they are <a href="http://packages.ubuntu.com/jaunty/vkeybd">Virtual Keyboard</a> and <a href="http://vmpk.sourceforge.net/">Virtual MIDI Piano Keyboard</a>.</p>
<div class="wp-caption alignleft" style="width: 400px"><a href="/images/labs/VirtualKeyboard.png"><img title="Virtual Keyboard" src="/images/labs/VirtualKeyboard.png" alt="Virtual Keyboard" width="390" height="378" /></a><p class="wp-caption-text">Virtual Keyboard</p></div>
<div class="wp-caption alignright" style="width: 548px"><a href="/images/labs/VirtualPianoKeyboard.png"><img title="Virtual MIDI Piano Keyboard" src="/images/labs/VirtualPianoKeyboard.png" alt="Virtual MIDI Piano Keyboard" width="538" height="317" /></a><p class="wp-caption-text">Virtual MIDI Piano Keyboard</p></div>
<p>You should be sure you have your sound card proper set before you start this &#8211; i.e. make sure you can play a file in Totem or something.</p>
<p>To install Virtual Keyboard:</p>
<pre class="brush: bash;">sudo apt-get install vkeybd</pre>
<p>To install Virtual MIDI Piano Keyboard (<a href="/labs/files/vmpk.deb">download vmpk.deb</a> to /tmp first):</p>
<pre class="brush: bash;">sudo dpkg --install /tmp/vmpk.deb</pre>
<p>After you have chosen one (or both) of the above, install the remaining dependencies:</p>
<pre class="brush: bash;">sudo apt-get install qjackctl zynaddsubfx</pre>
<p>After you have installed everything, run the following and restart your computer:</p>
<pre class="brush: bash;">sudo su -c 'echo @audio - rtprio 99 &gt;&gt; /etc/security/limits.conf'
sudo su -c 'echo @audio - memlock 250000 &gt;&gt; /etc/security/limits.conf'
sudo su -c 'echo @audio - nice -10 &gt;&gt; /etc/security/limits.conf'</pre>
<p>After restarting, open the JACK control center (Applications &gt;&gt; Sound &amp; Video &gt;&gt; JACK Control), and start the JACK server. Once it is started, click the Connect button at the lower left corner. Start ZynAddSubFx and Virtual Keyboard/Virtual MIDI Piano Keyboard and go back to the JACK control center, select Connect, then the ALSA tab. Connect the Virtual Keyboard/VMPK on the left to your sound card and the ZynAddSubFx. Connect your sound card on the left to the right. The result should look something like this:</p>
<div class="wp-caption aligncenter" style="width: 596px"><a href="/images/labs/JACKAudio.png"><img title="JACK audio connecitons" src="/images/labs/JACKAudio.png" alt="JACK audio connecitons" width="586" height="316" /></a><p class="wp-caption-text">JACK audio connecitons</p></div>
<p>After that is complete, go back to Virtual Keyboard/Virtual MIDI Piano Keyboard and click on a few piano keys. Enjoy!</p>
<p>If you found this article helpful or interesting, please help Compdigitec spread the word. Don’t forget to <a href="/labs/feed/">subscribe to Compdigitec Labs</a> for more interesting articles!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compdigitec.com/labs/2009/10/04/virtual-midi-keyboard-in-ubuntu/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
