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

<channel>
	<title>Vizualbod</title>
	<atom:link href="http://vizualbod.com/feed" rel="self" type="application/rss+xml" />
	<link>http://vizualbod.com</link>
	<description>web marketing</description>
	<pubDate>Tue, 07 Oct 2008 18:35:40 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Nginx &#038; FastCGI/WSGI Django deployment</title>
		<link>http://vizualbod.com/articles/nginx-fastcgiwsgi-django-deployment</link>
		<comments>http://vizualbod.com/articles/nginx-fastcgiwsgi-django-deployment#comments</comments>
		<pubDate>Mon, 29 Sep 2008 17:17:45 +0000</pubDate>
		<dc:creator>Frank Malina</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://vizualbod.com/?p=79</guid>
		<description><![CDATA[Reverse proxying application server (FastCGI / WSGI / Apache) through Nginx is my favourite deployment setup for Django web application framework.
I reviewed my options before settling on this setup that I think it is is the best for my deployments.

How to?

Install Nginx
Configure Nginx (see configuration file below)
Make sure your backend server runs otherwise you&#8217;ll be [...]]]></description>
			<content:encoded><![CDATA[<p>Reverse proxying application server (FastCGI / WSGI / Apache) through Nginx is my favourite deployment setup for Django web application framework.<br />
I reviewed my options before settling on this setup that I think it is is the best for my deployments.<br />
<span id="more-79"></span></p>
<h2>How to?</h2>
<ol>
<li><a href="http://wiki.codemongers.com/NginxGettingStarted">Install Nginx</a></li>
<li>Configure Nginx (see configuration file below)</li>
<li>Make sure your backend server runs otherwise you&#8217;ll be welcomed by an error message 512 bad gateway, e.g. start fastcgi with manage.py</li>
</ol>
<h2>Nginx configuration file</h2>
<p>Tested on Ubuntu Linux 8.04</p>
<pre>worker_processes 1;
error_log logs/error.log info;
pid /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include mime.types;
    default_type application/octet-stream;

    server {
        listen 80;
        server_name localhost;
        location / {
            # Launch proxied server on a separate port
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
        location /media/  {
            # Symlink to django admin media files
            alias /source/media/;
        }
        location /static/ {
            # static files for the project
            root  /clients/goto;
        }
    }
}</pre>
<p>To add a new site you need to add another Nginx <code>server{}</code> to your config file and run another instance of the backend server.</p>
<p>You can use reverse proxy with Apache/mod_python, FastCGI or anything else. I&#8217;ve used this with the WSGI server extracted from the CherryPy and it works like charm.</p>
<p>This is also my preffered Django development setup. The development server is much faster if it doesn&#8217;t have to serve static files. Just proxy Nginx to the development server.</p>
]]></content:encoded>
			<wfw:commentRss>http://vizualbod.com/articles/nginx-fastcgiwsgi-django-deployment/feed</wfw:commentRss>
		</item>
		<item>
		<title>Why TinyMCE and similar WYSIWYG editors suck?</title>
		<link>http://vizualbod.com/articles/wysiwygs-suck</link>
		<comments>http://vizualbod.com/articles/wysiwygs-suck#comments</comments>
		<pubDate>Fri, 29 Aug 2008 13:28:52 +0000</pubDate>
		<dc:creator>Frank Malina</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://vizualbod.com/?p=74</guid>
		<description><![CDATA[TinyMCE WYSIWYG editor totally broke apart on my setup. I fixed this. I can fix anything hypertext, but it made me write this article.
The problem happened as I separated static media files to another server. Separating static files such as Javascript, CSS and images is a recommended step when scaling a website on a threaded [...]]]></description>
			<content:encoded><![CDATA[<p>TinyMCE WYSIWYG editor totally broke apart on my setup. I fixed this. I can fix anything hypertext, but it made me write this article.<span id="more-74"></span></p>
<p>The problem happened as I separated static media files to another server. Separating static files such as Javascript, CSS and images is a recommended step when scaling a website on a threaded server without proxy load balancers.</p>
<p>This WYSYWIG and all similar editors suck for the following reasons:</p>
<ul>
<li>It is slow to load as it needs a bazillion of files</li>
<li>It needs to be on the same server (same domain and same domain level to be exact) as the generated HTML, which brakes it with advanced server setups that need static files on a separate server instance (You can partly fix this with advanced server side URL redirections)</li>
<li>last but not least: It lets any Joe and Jane paste messy HTML tags from Word, which brakes the type consistency and generally brakes beauty of the hypertext in various unimaginable ways</li>
</ul>
<p>However, TinyMCE is <a href="http://www.standards-schmandards.com/2007/wysiwyg-editor-test-2/">one of the best options</a> on this niche market as it allows any Joe and Jane to shoot themselves in the foot with HTML non-data tables. Unfortunately every client requires to be able to do this.</p>
<p><strong>WYSIWYG should be a browser independent extension users can use for any text-area that allows HTML input.</strong></p>
<p>There is still hope. Until someone will open-source solution such as above, developers can use <a  rel="nofollow" href="http://www.wymeditor.org/">WYM</a>.</p>
<p>There is also a fix for all the fine developers who stumbled across a similar TinyMCE error. I guess there is at least <a rel="nofollow" href="http://www.google.com/search?q=tinymce+problem">200,000</a> of you:</p>
<p><em>Editor&#8217;s note: &raquo; marks added line break</em></p>
<pre>Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^path-to-tinymce/(.*)$ &raquo;
http://staticfile.net/path-to-tinymce/$1 [R=301,NC,L]</pre>
<p>Disclosure: I am not dissing just TinyMCE, I am dissing every WYSYWIG that works on a similar principle.</p>
<p><strong>Frank Malina</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://vizualbod.com/articles/wysiwygs-suck/feed</wfw:commentRss>
		</item>
		<item>
		<title>Create a custom data mining application</title>
		<link>http://vizualbod.com/articles/data-mining-application</link>
		<comments>http://vizualbod.com/articles/data-mining-application#comments</comments>
		<pubDate>Sun, 17 Aug 2008 14:26:36 +0000</pubDate>
		<dc:creator>Frank Malina</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://vizualbod.com/?p=73</guid>
		<description><![CDATA[What it takes to create a CEO-friendly tool allowing to analyze custom data sets?
Article graciously provided by Sylvia Hausnerova, edited by Frank Malina.
Data mining is a process of analysis of a data set aiming

to answer a predefined question
to recognize a pattern within a data set

Data-mining process
Application should keep in mind the following user-flow:

Set a question [...]]]></description>
			<content:encoded><![CDATA[<p>What it takes to create a CEO-friendly tool allowing to analyze custom data sets?</p>
<p><strong>Article graciously provided by Sylvia Hausnerova, edited by Frank Malina.</strong><span id="more-73"></span></p>
<p>Data mining is a process of analysis of a data set aiming</p>
<ol>
<li>to answer a predefined question</li>
<li>to recognize a pattern within a data set</li>
</ol>
<h2>Data-mining process</h2>
<p>Application should keep in mind the following user-flow:</p>
<ol>
<li>Set a question you need to answer.</li>
<li>Issue queries on a dataset that will give you insight on your question.</li>
<li>Take actions to take advantage of the new insight.</li>
</ol>
<p>OR a more casual work flow:</p>
<ol>
<li>Browse the dataset in various ways.</li>
<li>Try to recognize patterns.</li>
<li>Take actions to take advantage of the recognized patterns.</li>
</ol>
<h2>What can data mining do?</h2>
<p>Data mining is commonly used in analysis of web site traffic data. Traffic data analysis can give you useful marketing and sales related data.</p>
<p>Such as:</p>
<ul>
<li><strong>When do people shop in my e-commerce store?</strong><br />
When should I bid on ads displayed in Google to increase traffic to my site for cheaper?</li>
<li><strong>Where from are my customers?</strong><br />
Where should I invest to off-line marketing to make my brand stronger?</li>
<li><strong>What browsers my users use?</strong><br />
Should I invest money in testing the design of my site in particular web browser? Will I loose money for not testing my design in IE5.</li>
</ul>
<p>Most commonly used tool for analysis of web traffic data as mentioned above is <a href="http://google.com/analytics/">Google analytics</a>.</p>
<p>However what it takes to create a CEO-friendly tool allowing to analyze custom data sets such as off-line sales data?</p>
<h2>What technology to create Analytics for custom data sets?</h2>
<p>Generally there a tree layers of software to be written</p>
<ol>
<li>Data warehouse - a database that stores the collected data (MySQL, PostgreSQL, Oracle to name a few). This is probably in place already.</li>
<li>Interface for data queries - <a href="http://sqlobject.org/">SQL object</a> is a great tool allowing to create interfaces for data mining. Most of the functionality of SQL object is now baked in the Django web application framework.</li>
<li>Interfaces that display the data retrieved from the warehouse in a human readable form (pie charts, tables, graphs). There a various techniques to make this happen such as <a href="http://teethgrinder.co.uk/open-flash-chart/">open flash chart</a>, CSS bar graphs and HTML tables enhanced with AJAX scripting.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://vizualbod.com/articles/data-mining-application/feed</wfw:commentRss>
		</item>
		<item>
		<title>US Network neutrality solution</title>
		<link>http://vizualbod.com/articles/usnetworkneutralitysolution</link>
		<comments>http://vizualbod.com/articles/usnetworkneutralitysolution#comments</comments>
		<pubDate>Thu, 10 Jul 2008 23:39:13 +0000</pubDate>
		<dc:creator>Frank Malina</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://vizualbod.com/?p=61</guid>
		<description><![CDATA[Network neutrality in the US is a ridiculous issue. Today (10. July 2008) there is network neutrality in the United States, meaning that telecommunications companies don&#8217;t offer different rates to web users based on type of online content or service type; however, there are no clear legal restrictions against this and things might change.
I wrote [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Network neutrality in the US</strong> is a ridiculous issue. Today (10. July 2008) there is network neutrality in the United States, meaning that telecommunications companies don&#8217;t offer different rates to web users based on type of online content or service type; however, there are no clear legal restrictions against this and things might change.<span id="more-61"></span></p>
<p>I wrote down my notes on a solution that will help to keep the American network freedom.</p>
<blockquote><p>It&#8217;s ridiculous that American citizens have even to worry about this issue.</p></blockquote>
<p>Just to worry Americans less, I wrote down my notes on a technical solution that will help to keep the current status quo of the American network freedom.</p>
<p>I&#8217;d imagine that this will be something integrated as an Firefox/Opera/IE7 add-on that seamlessly integrates with the browser. User won&#8217;t even recognize that the add-on is in use.</p>
<p><strong>Behind the scenes: </strong></p>
<ul>
<li>Browser add-on will get a proxy server assigned based on the load-balancing algorithm with each request</li>
<li>Add-on will hook up into the navigation bar, ensuring that each request is send to the user&#8217;s original ISP first</li>
<li>If the content is blocked (404, or redirect detection), or there is a speed limitation (network speedtest),  add-on will request the proxy to check that the content is truly there</li>
<li>If the content exists the Proxy server will request the content on the user&#8217;s behalf and feed it to the client</li>
<li>Bandwidth of proxies and the infrastructure maintenance will be quite expensive</li>
<li>We could save money on the infrastructure maintenance by open-sourcing it</li>
<li>The bandwidth costs could be partially covered by blocking the bandwidth expensive graphical banner ads on the sites, replacing it with fast-loading relevant text links. A lot of work has been done on the ad detection already, so it looks doable. Content providers might not like it though.</li>
</ul>
<p>Proxies are used in China, where CISCO blocked a reasonable part of the network. I&#8217;ve read it works, unless you&#8217;ll get caught.</p>
<p>Anyway, shouldn&#8217;t this two-tiered service be impossible just form the market-driven economy point of view? Would you buy a castrated internet connection? No way. Those ISPs that won&#8217;t provide full access are out of business via competition that gives its users the full online freedom.</p>
<p>If the American market is not competitive enough&#8230; we&#8217;ll have some fun with the above.</p>
]]></content:encoded>
			<wfw:commentRss>http://vizualbod.com/articles/usnetworkneutralitysolution/feed</wfw:commentRss>
		</item>
		<item>
		<title>Web Writing Guidelines</title>
		<link>http://vizualbod.com/articles/writingforweb</link>
		<comments>http://vizualbod.com/articles/writingforweb#comments</comments>
		<pubDate>Tue, 08 Jul 2008 14:56:21 +0000</pubDate>
		<dc:creator>Frank Malina</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://vizualbod.com/?p=58</guid>
		<description><![CDATA[The best guidelines for web writing were written by Jacob Nielsen in 1997, in the ages of internet Pliocene you&#8217;d had to wait 2 seconds to load 4 kB of text. Search engines and social media have changed the web since for a little bit. Best practices evolved and many users learned to read, but [...]]]></description>
			<content:encoded><![CDATA[<p>The best guidelines for web writing were written by Jacob Nielsen in 1997, in the ages of <strong>internet Pliocene</strong> you&#8217;d had to wait 2 seconds to load 4 kB of text. Search engines and social media have changed the web since for a little bit. Best practices evolved and many <strong>users learned to read</strong>, but &#8230;<br />
<span id="more-58"></span></p>
<h2>Never changing best practices</h2>
<ul>
<li><a href="#microcontent">Good Microcontent</a></li>
<li><a href="#scanable-text">Scannable layout</a></li>
<li><a href="#concise-language">Concise / objective language</a></li>
</ul>
<h2 id="microcontent">Microcontent: page title tags, headlines</h2>
<p>Title tags, headings should make sense out of context.</p>
<p>Microcontent needs to be pearls of clarity. You get up to <strong>65 characters to explain your macrocontent</strong>.</p>
<p>Titles longer than 65 characters are concatenated in search results, so don&#8217;t waste your ink.</p>
<p>Unless the title or heading make it absolutely clear what the page is about, users will never read it, because they won&#8217;t find it in Google.</p>
<p>Headings are often displayed out of context. Headline text has to stand on its own. Written in plain language. Make the first word an important, information-carrying one.</p>
<h2 id="scanable-text">Scannable text structure</h2>
<ul>
<li>Use rich semantic markup</li>
<li>Meaningful sub-headings (not &#8220;clever&#8221; ones)</li>
<li>use unordered and ordered lists, where appropriate</li>
<li>one idea per paragraph (users will skip over any additional ideas if they are not caught by the first few words in the paragraph)</li>
<li>the inverted pyramid style, starting with the conclusion</li>
<li>Highlighted keywords: <a href="#">hypertext links</a> serve as one form of highlighting; use <strong>bold</strong> for <code>&lt;strong&gt;</code> emphasis and <em>italic</em> for disturbing-kind-of-<code>&lt;em&gt;</code>phasis.</li>
</ul>
<h2 id="concise-language">Concise / objective language</h2>
<p>Users appreciate professional advice, not promotional language. Keep commercial language to a minimum. Credibility suffers when readers (the human scanners) clearly see your writing exaggerates. <strong>Promotional language has naturally far lower density of common search phrases.</strong> If you&#8217;re in a hurry and can hear bla, bla ,bla.. when you read the copy, it means that the content is very poor on search phrases.</p>
<p><strong>Useful information</strong></p>
<ul>
<li>credible facts</li>
<li>tips and tricks</li>
<li>bits of know-how</li>
</ul>
<p>A wall of text is deadly for an interactive experience. Search engines employ clever algorithms (and a lot of human beings) to find out whether your content is useful or a spam. Keep in mind the language of searchers when writing for the web.</p>
<h2>Inverted Pyramid writing style</h2>
<p>Start with conclusions or short summary and continue with generic info. further down the copy. Users (and Search engines) consider top of the article more important or at least they read it first. First and last paragraphs need to hold the semantic value, search phrases. This is completely different compared to printed media, where conclusions are usually on the end of the article.</p>
]]></content:encoded>
			<wfw:commentRss>http://vizualbod.com/articles/writingforweb/feed</wfw:commentRss>
		</item>
		<item>
		<title>PayPal hack, donation link</title>
		<link>http://vizualbod.com/articles/paypalhack</link>
		<comments>http://vizualbod.com/articles/paypalhack#comments</comments>
		<pubDate>Fri, 04 Jul 2008 21:36:44 +0000</pubDate>
		<dc:creator>Frank Malina</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://vizualbod.com/?p=54</guid>
		<description><![CDATA[Many users complained about the PayPal payment page being designed in a way that intentionaly hides the credit card payment option and forces users to login with a PayPal account. Bad for PayPal as it slays their user base, double evil for online merchants conversions. I&#8217;ve hacked PayPal to fix this (not cracked).
Edit: PayPal have [...]]]></description>
			<content:encoded><![CDATA[<p>Many users complained about the PayPal payment page being designed in a way that intentionaly hides the credit card payment option and forces users to login with a PayPal account. Bad for PayPal as it slays their user base, double evil for online merchants conversions.<span id="more-54"></span> I&#8217;ve hacked PayPal to fix this (not cracked).</p>
<blockquote><p><strong>Edit:</strong> PayPal have fixed the issue. Well done PayPal! Their site now checks for the PayPal login cookie. If you don&#8217;t have one, it presumes you are not a regular PayPal user and returns a complete form. You can still use the below to learn how to <strong>make an elegant PayPal donation link without involving messy HTML form markup</strong>.</p></blockquote>
<p style="text-align:center"><a rel="nofollow" href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=vizualbod%40vizualbod%2ecom&amp;item_name=Give a man the ability to breathe underwater - HINT: TRY TO FIND ON THE SCREEN A TINY LINK TO *CONTINUE* CREDIT CARD PAYMENT&amp;amount=5&amp;currency_code=USD"><img style="border:0;margin:0;float:none" src="https://www.paypal.com/en_GB/i/btn/x-click-but21.gif" alt="Donate" /></a></p>
<p>The link syntax is very simple: <code>https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=***INSERT YOUR EMAIL HERE***&amp;item_name=***YOUR PROJECT/CAMPAIGN/CHARITY... NAME HERE***<span style="text-decoration: line-through;"> - HINT: TRY TO FIND ON THE SCREEN A TINY LINK TO &gt;CONTINUE&lt; CREDIT CARD PAYMENT</span>&amp;amount=***INSERT INTEGER FOR THE AMOUNT HERE***&amp;currency_code=***CURRENCY HERE***</code></p>
<p><span style="text-decoration: line-through;">Note the added hint for the user to click continue link to display the credit card form. The text is a bit cheeky but it illustrates the issue well.</span> Edit: Forget about that bit now.</p>
<p>Every commercial merchant or non-profit organization can use my simple technique to increase conversions. This technique doesn&#8217;t break PayPal terms of service (I&#8217;ve read carefully). It doesn&#8217;t break PayPal undefeated security. It&#8217;s just a tiny clever trick in fact.</p>
<p style="text-align:left">
]]></content:encoded>
			<wfw:commentRss>http://vizualbod.com/articles/paypalhack/feed</wfw:commentRss>
		</item>
		<item>
		<title>How to make a video streaming site</title>
		<link>http://vizualbod.com/articles/makeyourownyoutube</link>
		<comments>http://vizualbod.com/articles/makeyourownyoutube#comments</comments>
		<pubDate>Thu, 03 Jul 2008 12:16:21 +0000</pubDate>
		<dc:creator>Frank Malina</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://vizualbod.com/?p=48</guid>
		<description><![CDATA[The video streaming application setup based on my assumptions to explain what a developer needs to consider from the technical/scalability point of view  to create video streaming social media website such as YouTube, Break.com or Google video.

Video precessing
Conversion of various uploaded video file types to the FLV (Flash video streaming format)
Mature video conversion classes are [...]]]></description>
			<content:encoded><![CDATA[<p>The video streaming application setup based on my assumptions to explain what a developer needs to consider from the technical/scalability point of view  to create video streaming social media website such as YouTube, Break.com or Google video.</p>
<p><span id="more-48"></span></p>
<h2>Video precessing</h2>
<p><strong>Conversion of various uploaded video file types to the FLV (Flash video streaming format)</strong></p>
<p>Mature video conversion classes are available in public license for Python programming language. Pyhton or C will make the processing more real-time although a processing queue is very likely to happen. Resulting FLVs are stored on a permanent storage device.<br />
Video precessing server certainly needs a massive processing power.</p>
<h2>Application server</h2>
<p>Django/RoR or other web frameworks will be useful at this point. I would prefer to use Django framework. There is a built in object caching and support for memcached. Heavy load is to be expected as a nature of the video streaming sites and caching at various levels of the process is very handy.<br />
This needs to be engineered to expect load on the certain videos, while other videos will have hardly any views. Caching will make sure that the pages for videos under heavy load are served instantly, freeing up the resources on the machine.</p>
<h2>Database server</h2>
<p>Running MySQL or PosgreSQL instance serving user posts and and comments controllers&#8217; textual data requested from the website processing server.</p>
<h2>Static content server<strong><br />
</strong></h2>
<p><strong>Serving thumbnails, cached pages, streaming video files</strong></p>
<p>Nature of video files is that they are big, therefore this machine(s) will need a some disk space, separate from the three machines above. Nginx is a good hint for serving video thumbnails. This server will also serve the JavaScript, CSS files, Flash action scripts + design related imagery. This should also account for the scheduled backups to a tape storage device as the project grows (not necessarily at the start).</p>
<p>See <a href="http://vizualbod.com/articles/nginx-fastcgiwsgi-django-deployment">Nginx proxy to the application server</a> for a good hint on serving static content.</p>
<p>Database server, website precessing &amp; video precessing and static content parts will need to be loosely coupled allowing the developer to separate them and replicate setups on more physical machines as the site grows.</p>
]]></content:encoded>
			<wfw:commentRss>http://vizualbod.com/articles/makeyourownyoutube/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
