<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Grey Panther's Place</title><link>https://www.grey-panther.net/</link><description></description><lastBuildDate>Thu, 05 Jan 2017 19:12:00 +0200</lastBuildDate><item><title>An interesting proof for Pythagoras’s theorem</title><link>https://www.grey-panther.net/2017/01/an-interesting-proof-for-pythagorass-theorem.html</link><description>&lt;p&gt;I recently saw an interesting proof for Pythagoras&amp;#8217;s theorem in the &lt;a href="https://www.youtube.com/playlist?list=PL55C7C83781CF4316"&gt;MathHistory&lt;/a&gt; series which I wanted to share with y&amp;#8217;all&amp;nbsp;:-)&lt;/p&gt;
&lt;p&gt;So a quick reminder, Pythagoras&amp;#8217;s theorem says that if we have a right-angle (90 degree) triangle, then there is the following relation between the length of the&amp;nbsp;sides:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a = sqrt(b^2 + c^2)&lt;/code&gt; (where a is the length of the longest side) - and&amp;nbsp;vice-versa.&lt;/p&gt;
&lt;p&gt;The proof goes like this: lets rewrite the formula like &lt;code&gt;a^2 = b^2 + c^2&lt;/code&gt;. We can interpret this geometrically as: (for a right-angled triangle) the are of the square constructed on the longer side is equal to the sum of the areas of the two squares constructed on the shorter&amp;nbsp;sides.&lt;/p&gt;
&lt;p&gt;And now the proof goes as&amp;nbsp;follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;consider a right angled&amp;nbsp;triangle&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="" src="/images/pythagoras-1.jpg" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="dquo"&gt;&amp;#8220;&lt;/span&gt;clone&amp;#8221; it 4 times and put it together such that the longer sides form a square. Now the area of the inner square is &lt;code&gt;a^2&lt;/code&gt; while the area of the big square is &lt;code&gt;a^2 + 4*At&lt;/code&gt; (&lt;code&gt;At&lt;/code&gt; is the area of a&amp;nbsp;triangle) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="" src="/images/pythagoras-2.jpg" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rearrange the triangles as shown. The outer square is still of the same size (the length of its side - &lt;code&gt;a+b&lt;/code&gt; is the same) but now it can be written as &lt;code&gt;b^2 + c^2 + 4At&lt;/code&gt;. Hence &lt;code&gt;a^2 + 4*At = b^2 + c^2 + 4At&lt;/code&gt; which can be simplified to &lt;code&gt;a^2 = b^2 + c^2&lt;/code&gt;, or if you prefer to &lt;code&gt;a = sqrt(b^2 + c^2)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="" src="/images/pythagoras-3.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;I only had one nagging feeling after seeing this proof - how do we know that the first big square constructed is actually a square. Can&amp;#8217;t it be that its &amp;#8220;edges&amp;#8221; are not lines, but slightly crooked like&amp;nbsp;below?&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="/images/pythagoras-4.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Fortunately we can use the fact that the angles in a triangle add up to 180 degrees (ie. a straight line) and show that the sides of the external triangle are indeed straight&amp;nbsp;lines:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="/images/pythagoras-5.jpg" /&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 05 Jan 2017 19:12:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2017-01-05:2017/01/an-interesting-proof-for-pythagorass-theorem.html</guid></item><item><title>Finding the N-th word in a complete dictionary</title><link>https://www.grey-panther.net/2017/01/finding-the-n-th-word-in-a-complete-dictionary.html</link><description>&lt;h2&gt;Problem&amp;nbsp;statement&lt;/h2&gt;
&lt;p&gt;Find the &lt;code&gt;N&lt;/code&gt;-th word in a dictionary which contains all the words that can be generated from a given alphabet of length at most &lt;code&gt;M&lt;/code&gt; (and sorted by the conventional dictionary sorting rule / &lt;a href="https://en.wikipedia.org/wiki/Lexicographical_order"&gt;lexicographical order&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;As a short detour: why did I become interested in it? It was during my investigation of the upper limit for the number of strings formed from a given alphabet that can be encoded in a given number of bits. Even more concretely: what is the upper limit for the length of a &lt;span class="caps"&gt;DNA&lt;/span&gt;/&lt;span class="caps"&gt;RNA&lt;/span&gt; string formed from nucleotides (ie. a string with alphabet &lt;code&gt;[A,C,G,T]&lt;/code&gt;) that can be encoded on 64 bits. Note: the problem statement that we need a codec (ie. both enCOding and DECoding, so we&amp;#8217;ll solve a bit more generic problem than just the one-way one described in the&amp;nbsp;title).&lt;/p&gt;
&lt;p&gt;The first solution which came to mind was to use some bits for the length and the remaining bits to encode the nucleotides (2 bit / nucleotide) however the question remained: how many bits for the length? And is the solution&amp;nbsp;optimal?&lt;/p&gt;
&lt;p&gt;So finally I came up with the following formulation: consider that we have a dictionary of all the possible nucleotide strings for length at most &lt;code&gt;M&lt;/code&gt;. Now let the 64 bit value just be an index in this dictionary. This is guaranteed to be the optimal solution (if we assume that the probability of occurrence for every string is the same). Now we need three&amp;nbsp;things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;what is the largest value of &lt;code&gt;M&lt;/code&gt; for which the index can be stored on 64&amp;nbsp;bits?&lt;/li&gt;
&lt;li&gt;a time and space efficient way (ie. not generating the entire dictionary and keeping it in memory for lookup) to get the index of a given string (the enCOde&amp;nbsp;step)&lt;/li&gt;
&lt;li&gt;the same to get the word at a given index (the DECode&amp;nbsp;step)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There is also a somewhat related problem on Project Euler (&lt;a href="https://projecteuler.net/problem=24"&gt;24: Lexicographic permutations&lt;/a&gt;) - that wasn&amp;#8217;t the inspiration though, I found out about it&amp;nbsp;later.&lt;/p&gt;
&lt;h2&gt;Some initial&amp;nbsp;observations&lt;/h2&gt;
&lt;p&gt;Just by writing out the complete set of words of length at most &lt;code&gt;M&lt;/code&gt; formed from a given alphabet we can make some observations. For example consider the alphabet &lt;code&gt;[A,B]&lt;/code&gt; and write&amp;nbsp;out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the words of length 0: &lt;code&gt;''&lt;/code&gt; (the empty&amp;nbsp;string)&lt;/li&gt;
&lt;li&gt;the words of length 1: &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;the words of length 2: &lt;code&gt;AA&lt;/code&gt;, &lt;code&gt;AB&lt;/code&gt;, &lt;code&gt;BA&lt;/code&gt; and &lt;code&gt;BB&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So pretty quickly we can see that for a given alphabet and a given length we have exactly &lt;code&gt;len(alphabet) ** length&lt;/code&gt; possible words (where &lt;code&gt;**&lt;/code&gt; is the exponentiation operator - ie. &lt;code&gt;a ** b&lt;/code&gt; is the b-th power of a), since: we have &lt;code&gt;length&lt;/code&gt; positions, at each position we can have one of the &lt;code&gt;len(alphabet)&lt;/code&gt; characters, thus the total possibilities are &lt;code&gt;len(alphabet) * len(alphabet) * ...&lt;/code&gt; &lt;code&gt;length&lt;/code&gt; times which is &lt;code&gt;len(alphabet)&lt;/code&gt; to power &lt;code&gt;length&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;After this we can ask &amp;#8220;how many strings of length less than or equal to &lt;code&gt;M&lt;/code&gt; are there&amp;#8221;? (question 1 from the initial problem statement).  This is simply &lt;code&gt;sum(len(alphabet) ** i for i in [0, M])&lt;/code&gt;, also known as the &lt;a href="https://en.wikipedia.org/wiki/Geometric_progression#Derivation"&gt;geometric progression&lt;/a&gt;: &lt;code&gt;(1 - La ** M) / 1 - La&lt;/code&gt; where &lt;code&gt;La = len(alphabet)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So for example if we have the alphabet &lt;code&gt;[A, C, G, T]&lt;/code&gt; and 64 bits available we can encode &lt;a href="http://www.wolframalpha.com/input/?i=%28%281-4%5Em%29+%2F+%281-4%29%29+%3C+%282%5E64-1%29"&gt;at most 32 characters&lt;/a&gt; according to Wolfram&amp;nbsp;Alpha.&lt;/p&gt;
&lt;h2&gt;Finding the index of a&amp;nbsp;string&lt;/h2&gt;
&lt;p&gt;To find this we just need to count how many strings there are in the dictionary before our string (remember the dictionary is in lexicographical&amp;nbsp;order).&lt;/p&gt;
&lt;p&gt;A concrete example: our dictionary contains all the words of length at most 3 (&lt;code&gt;M=3&lt;/code&gt;) formed from the alphabet &lt;code&gt;[A, B]&lt;/code&gt;. What is the index of the word &lt;code&gt;BA&lt;/code&gt;? (we consider that index 0 is &lt;code&gt;''&lt;/code&gt; - the empty string, index 1 is &lt;code&gt;A&lt;/code&gt;, index 2 is &lt;code&gt;AA&lt;/code&gt; and so&amp;nbsp;on).&lt;/p&gt;
&lt;p&gt;What is the position of &lt;code&gt;BA&lt;/code&gt; in our&amp;nbsp;dictionary?&lt;/p&gt;
&lt;p&gt;If we would only have words of length &lt;em&gt;exactly&lt;/em&gt; &lt;code&gt;K&lt;/code&gt; we could compute this by considering &lt;code&gt;BA&lt;/code&gt; a number in base 2 (binary) where &lt;code&gt;A=0&lt;/code&gt; and &lt;code&gt;B=1&lt;/code&gt;, transform it to base 10 and have our answer (ie &lt;code&gt;BA&lt;/code&gt; -&amp;gt; &lt;code&gt;10b&lt;/code&gt; -&amp;gt; &lt;code&gt;2&lt;/code&gt; -&amp;gt; &lt;code&gt;BA&lt;/code&gt; is at position 2 - or is the 3rd word - in the dictionary &lt;code&gt;AA, AB, BA, BB&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;However our dictionary contains all words of length &lt;em&gt;exactly&lt;/em&gt; 0, 1, 2 and 3. So just consider each in&amp;nbsp;turn!&lt;/p&gt;
&lt;p&gt;In a dictionary containing the words from the alphabet &lt;code&gt;[A, B]&lt;/code&gt; of exactly&amp;nbsp;length:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;K=0&lt;/code&gt;: &lt;code&gt;BA&lt;/code&gt; would have index&amp;nbsp;1&lt;/li&gt;
&lt;li&gt;&lt;code&gt;K=1&lt;/code&gt;: &lt;code&gt;BA&lt;/code&gt; would have index 2 which is the same as &lt;code&gt;indexOf(B) + 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;K=2&lt;/code&gt;: &lt;code&gt;BA&lt;/code&gt; would have index&amp;nbsp;2&lt;/li&gt;
&lt;li&gt;&lt;code&gt;K=3&lt;/code&gt;: &lt;code&gt;BA&lt;/code&gt; would have index 10, which is the same as &lt;code&gt;indexOf(BAA)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, to find the index of a&amp;nbsp;string:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go from 0 to &lt;code&gt;M&lt;/code&gt; (the maximum length allowed for words in our&amp;nbsp;dictionary)&lt;/li&gt;
&lt;li&gt;Generate a word of length &lt;code&gt;K&lt;/code&gt; from our word by either (assuming our strings are zero&amp;nbsp;indexed):&lt;/li&gt;
&lt;li&gt;Taking the characters &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;K&lt;/code&gt; (exclusive) if &lt;code&gt;K &amp;lt; len(word)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Padding the word with the &lt;em&gt;first character of the alphabet&lt;/em&gt; up to length &lt;code&gt;K&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Finding the index of this (sub)word in a dictionary that contains words of length exactly &lt;code&gt;K&lt;/code&gt; by considering the (sub)word as a value written in base &lt;code&gt;La&lt;/code&gt; (&lt;code&gt;La == length(alphabet)&lt;/code&gt;). Add 1 if we&amp;#8217;re in the first case since the longer word would come after the shorter&amp;nbsp;ones.&lt;/li&gt;
&lt;li&gt;Sum up all the&amp;nbsp;values&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Or in &lt;a href="https://github.com/cdman/nth-element-of-dictionary/blob/master/nth_element.py#L83"&gt;Python 3 code&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;indexOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__max_len&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__max_len&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;subword&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__valueInBaseN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subword&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;subword&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__alphabet&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__valueInBaseN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subword&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;Finding the N-th&amp;nbsp;string&lt;/h2&gt;
&lt;p&gt;Finally getting at the problem stated in the title. For this I noted how the dictionary can be constructed for length &lt;code&gt;M&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the dictionary for &lt;code&gt;M=0&lt;/code&gt; is just &lt;code&gt;''&lt;/code&gt; (the empty string) and for &lt;code&gt;M=1&lt;/code&gt; the empty string plus the alphabet&amp;nbsp;itself.&lt;/li&gt;
&lt;li&gt;for &lt;code&gt;M&amp;gt;1&lt;/code&gt; take the dictionary for &lt;code&gt;M-1&lt;/code&gt; and prefix it with each of the characters from the alphabet. Finally add the empty string as the first&amp;nbsp;element.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So for example if we have &lt;code&gt;[A, B]&lt;/code&gt; as the alphabet&amp;nbsp;then:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the dictionary for &lt;code&gt;M=1&lt;/code&gt; is &lt;code&gt;0: '', 1: A, 2: B&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;to construct the dictionary for &lt;code&gt;M=2&lt;/code&gt; we replicate the above dictionary 2 times, first prefixing it with &lt;code&gt;A&lt;/code&gt;, then with &lt;code&gt;B&lt;/code&gt; and finally we add the empty string in&amp;nbsp;front:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;0: &amp;#39;&amp;#39;  1: A    4: B
       2: AA   5: BA
       3: AB   6: BB
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;This suggests an algorithm for finding the&amp;nbsp;solution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;take the value. Decide in &amp;#8220;column&amp;#8221; it would&amp;nbsp;be.&lt;/li&gt;
&lt;li&gt;you know the number of words in each column: &lt;code&gt;len(dictionary) - 1 / len(alphabet)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;len(dictionary)&lt;/code&gt; is &lt;code&gt;sum(len(alphabet) ** i for i in [0, K])&lt;/code&gt; (see the initial&amp;nbsp;observations)&lt;/li&gt;
&lt;li&gt;this can also be precomputed for&amp;nbsp;efficiency&lt;/li&gt;
&lt;li&gt;the column index gives you letter index in the&amp;nbsp;alphabet&lt;/li&gt;
&lt;li&gt;now subtract from the value the index of the first word in the given column. If you get 0,&amp;nbsp;stop.&lt;/li&gt;
&lt;li&gt;Otherwise make &lt;code&gt;K&lt;/code&gt; one less and look up the new value in the dictionary of length at most &lt;code&gt;K&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A small worked&amp;nbsp;example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lets say we have &lt;code&gt;[A, B]&lt;/code&gt; as the alphabet and &lt;code&gt;M=2&lt;/code&gt;. We want to find the word at 5 (which is &lt;code&gt;BA&lt;/code&gt; if you take a peak at the table above).&amp;nbsp;So:&lt;/li&gt;
&lt;li&gt;in each column we have 3 words, so 5 is in the 2nd row (the row with index 1) which gives us &amp;#8220;B&amp;#8221; as the first&amp;nbsp;letter&lt;/li&gt;
&lt;li&gt;now subtract 4 (the index of the first word in the 2nd column - &lt;code&gt;B&lt;/code&gt;) from 5 which leaves us with&amp;nbsp;1&lt;/li&gt;
&lt;li&gt;now find the word with index 1 in a dictionary with &lt;code&gt;M=1&lt;/code&gt; which is&amp;nbsp;&amp;#8220;A&amp;#8221;&lt;/li&gt;
&lt;li&gt;thus the final word is &amp;#8220;&lt;span class="caps"&gt;BA&lt;/span&gt;&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Or in &lt;a href="https://github.com/cdman/nth-element-of-dictionary/blob/master/nth_element.py#L62"&gt;Python 3 code&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;wordAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__lastIndex&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current_len&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__max_len&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;words_per_column&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__wordsPerLetterForLen&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;current_len&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;column_idx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;words_per_column&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__alphabet&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;column_idx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;index_of_first_word_in_col&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;column_idx&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;words_per_column&lt;/span&gt;
        &lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="n"&gt;index_of_first_word_in_col&lt;/span&gt;
        &lt;span class="n"&gt;current_len&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Note: you can find a different algorithm to do the same on &lt;a href="http://math.stackexchange.com/questions/195736/how-to-get-the-n-th-word-in-a-sequence"&gt;math.stackexchange.com&lt;/a&gt;, however I found the above to be visually more&amp;nbsp;intuitive.&lt;/p&gt;
&lt;h2&gt;Can we do it&amp;nbsp;simpler?&lt;/h2&gt;
&lt;p&gt;So we solved the initial problem (both the one stated in the title and the one which motivated this journey) however it took over a thousand words to describe and justify it. Can we do simpler? Turns out yes! We just need abandon our attachment to the lexicographical order and say that as long as we have a bijective encoding and decoding function with the property &lt;code&gt;decode(encode(word)) == word&lt;/code&gt; we are&amp;nbsp;satisfied.&lt;/p&gt;
&lt;p&gt;A simple and efficient function is the transformation of the word from base &lt;code&gt;La&lt;/code&gt; (length of alphabet) to base 10 and vice-versa. For example if we have &lt;code&gt;[A, C, G, T]&lt;/code&gt; as the alphabet and &lt;code&gt;GAT&lt;/code&gt; as the word we can&amp;nbsp;do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;encode: &lt;code&gt;2*(4**2) + 0*(4**1) + 3*(4**0)&lt;/code&gt; which is&amp;nbsp;33&lt;/li&gt;
&lt;li&gt;decode: 33 is written as powers of 4 as above and 2, 0, 3 corresponds to &lt;code&gt;GAT&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Again, the ordering will not be lexicographical (&lt;code&gt;A, AA, AB, ...&lt;/code&gt;) but rather a numerical-order kind-of (&lt;code&gt;A, B, AA, AB, ...&lt;/code&gt;) but the algorithm is much simpler and in the case that &lt;code&gt;La&lt;/code&gt; is a power of two, very efficient to implement on current CPUs since division / remainder can be done using bit-shifts /&amp;nbsp;masking.&lt;/p&gt;
&lt;h2&gt;More&amp;nbsp;speculation&lt;/h2&gt;
&lt;p&gt;I didn&amp;#8217;t actually want to encode &lt;span class="caps"&gt;DNA&lt;/span&gt;/&lt;span class="caps"&gt;RNA&lt;/span&gt; sequences, but rather mutations/variations which are pair of sequences (something like &lt;code&gt;G -&amp;gt; TC&lt;/code&gt; or &lt;code&gt;GT -&amp;gt; ''&lt;/code&gt;).  Now I could just divide the 64 bits into two 32 bit chunks but the same initial question would arise: is this the most optimal way for&amp;nbsp;encoding?&lt;/p&gt;
&lt;p&gt;So we go the same solution: what if we would have a dictionary of all the variants (&lt;code&gt;'' -&amp;gt; A, '' -&amp;gt; AA, ...&lt;/code&gt;) and just index into it. How would we construct such a dictionary and how would we order&amp;nbsp;it?&lt;/p&gt;
&lt;p&gt;Turns out there is an algorithm inspired by the proof that &lt;a href="https://en.wikipedia.org/wiki/Rational_number#Properties"&gt;there are the same number of natural numbers as there are rational ones&lt;/a&gt;. However that doesn&amp;#8217;t give us a way to find the N-th element in the sequence but a Calkin–Wilf sequence &lt;a href="https://en.wikipedia.org/wiki/Calkin%E2%80%93Wilf_tree#Breadth_first_traversal"&gt;does&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So we can have the following&amp;nbsp;algorithm:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;represent the pair &lt;code&gt;to -&amp;gt; from&lt;/code&gt; as two numbers &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt; (refer to the discussion until now how we can do&amp;nbsp;that)&lt;/li&gt;
&lt;li&gt;use the Calkin-Wilf sequence (combined with the &lt;a href="https://en.wikipedia.org/wiki/Continued_fraction#Finite_continued_fractions"&gt;continued fraction formula&lt;/a&gt;) to find the index of &lt;code&gt;A/B&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;or conversely use the sequence to transform the index into the &lt;code&gt;A/B&lt;/code&gt; fraction and then transform the numerator and denominator into the original&amp;nbsp;sequences&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is just speculation but it should work in theory. Also, it is fairly complicated so perhaps there is a better way to do it by making some simplifying assumptions? (like us eliminating the lexicographic ordering&amp;nbsp;requirement).&lt;/p&gt;
&lt;h2&gt;Source&amp;nbsp;code&lt;/h2&gt;
&lt;p&gt;A complete implementation of the above algorithms (with tests!) in Python 3 can be found &lt;a href="https://github.com/cdman/nth-element-of-dictionary/"&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 02 Jan 2017 13:28:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2017-01-02:2017/01/finding-the-n-th-word-in-a-complete-dictionary.html</guid><category>algorithm</category></item><item><title>The limits of science</title><link>https://www.grey-panther.net/2016/09/the-limits-of-science.html</link><description>&lt;p&gt;In a lot of ways Science has become the religion of the day. We can&amp;#8217;t go more than a day to hear / see / read a &amp;#8220;news&amp;#8221; story about &amp;#8220;scientists&amp;#8221; saying something about something important. We can&amp;#8217;t help but feel dazzled, confused, perplexed, overwhelmed by these announcements.
And we have discussions with others:
- I heard that scientists say that X cures cancer.
-  Didn&amp;#8217;t you hear? Scientist announced that X &lt;em&gt;causes&lt;/em&gt; cancer
How is this really different from saying &amp;#8220;my shaman&amp;nbsp;said&amp;#8221;?&lt;/p&gt;
&lt;h2&gt;The core principles of&amp;nbsp;science&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;m going to argue that scientific thinking is really in a different league - but it also has many limitations. The core ideas of scientific thinking&amp;nbsp;are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We can observe things and those observations have some relation to the objective&amp;nbsp;reality&lt;/li&gt;
&lt;li&gt;This objective reality is probabilistically deterministic (ie. if we flip a coin it will land either heads or tails but it generally won&amp;#8217;t turn into a unicorn and fly&amp;nbsp;away)&lt;/li&gt;
&lt;li&gt;Based on our observations we can construct models / hypothesis about cause and effect. While there can be an infinite amount of hypothesis, we assume that reality has a simple and elegant structure and thus prefer the hypothesis which explains the largest category of events with the minimal&amp;nbsp;assumptions&lt;/li&gt;
&lt;li&gt;Scientific hypothesis need to be testable (also called &amp;#8220;falsifiable&amp;#8221;) - ie. they need to be forward looking / have predictive power. For example if I say &amp;#8220;object alway fall downwards&amp;#8221; then you or I can take a ball, a key, a rock, etc and verify that indeed, when I let go of it, it falls towards the ground. 
 &lt;em&gt;However&lt;/em&gt; such positive outcomes have little value (they increase the likelihood that the hypothesis / theory is true only by a small amount) and the most valuable things are falsifications - when somebody makes a prediction based on the theory but then a different outcome is observed - which most likely means that the theory is false (unless there was an error in the&amp;nbsp;experiment).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This looks an awful lot like &amp;#8220;the ten commandments of the science religion&amp;#8221;, doesn&amp;#8217;t it? Because there is no reason to believe them intrinsically. There are only two things in favor of this&amp;nbsp;mindset:&lt;/p&gt;
&lt;p&gt;This is how our world &lt;em&gt;seems&lt;/em&gt; to work - and thus these principles seem intrinsically true to a lot of us. Then again this &amp;#8220;gut feeling&amp;#8221; is no different from being convinced that a given kind of deity governs our&amp;nbsp;lives&lt;/p&gt;
&lt;p&gt;What &lt;em&gt;is&lt;/em&gt; different from &lt;em&gt;every other religion/philosophy&lt;/em&gt; however is that it contains the framework to extend it. You just observe, theorize and then try to falsify your theory. Voilà! You&amp;#8217;re adding to the scientific knowledge. All other religions are closed while the religion of science is&amp;nbsp;open.&lt;/p&gt;
&lt;h2&gt;Science is not&amp;nbsp;&amp;#8220;truth&amp;#8221;&lt;/h2&gt;
&lt;p&gt;You might have observed that the principles - as described in the previous section - have somewhat of a wishy-washy nature. I keep using words like &amp;#8220;likely&amp;#8221; and&amp;nbsp;&amp;#8220;usually&amp;#8221;.&lt;/p&gt;
&lt;p&gt;For example I said &amp;#8220;if we flip a coin it will land either heads or tails but it &lt;em&gt;generally&lt;/em&gt; won&amp;#8217;t turn into a unicorn and fly away&amp;#8221;. I can&amp;#8217;t say for certain that it won&amp;#8217;t turn into a unicorn, but so far nobody reported a case of this happening, but we observed the coin landing heads or tails a lot of times so we&amp;#8217;ll assign a very small probability to something else&amp;nbsp;happening.&lt;/p&gt;
&lt;p&gt;Scientific results are &lt;em&gt;always&lt;/em&gt; probabilistic, but that is just life: if I go out tomorrow I might get hit by a car, but I most probably won&amp;#8217;t. Note that other religions generally avoid saying anything about &amp;#8220;this life/world&amp;#8221; and reserve their proclamations for &amp;#8220;the other/after life&amp;#8221;. At least science is trying to make some predictions, even though they sometimes turn out to be&amp;nbsp;false.&lt;/p&gt;
&lt;p&gt;This bears repeating: Science is not &amp;#8220;truth&amp;#8221;. There is no such thing as a &amp;#8220;scientific fact&amp;#8221;. Our scientific knowledge is simply a collection of theories which we failed to falsify - as of yet. Now, some of those theories have been around for a long time and have been found true in many situations and it&amp;#8217;s prudent to do to act as if they were the absolute truth, but we must accept the fact that there is always the small possibility that they might turn out to be&amp;nbsp;false.&lt;/p&gt;
&lt;p&gt;To pound some more this idea: all the above is true &lt;em&gt;even if&lt;/em&gt; we would &amp;#8220;do science perfectly&amp;#8221;. However we are humans: subject to our biases, feelings and other&amp;nbsp;motivations.&lt;/p&gt;
&lt;h2&gt;Science is not&amp;nbsp;math&lt;/h2&gt;
&lt;p&gt;(a couple of words about&amp;nbsp;induction)&lt;/p&gt;
&lt;p&gt;Related to &amp;#8220;there is no scientific truth&amp;#8221; is the mirage of mathematics in science, which goes something like this: &amp;#8220;we all know that 2+2 is 4, this scientist is using a mathematical formula, so whatever comes out of the formula must be&amp;nbsp;true&amp;#8221;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Mathematics and science use very different ways of&amp;nbsp;reasoning:&lt;/p&gt;
&lt;p&gt;In math we use &lt;em&gt;deduction&lt;/em&gt;: we state some ground rules (&amp;#8220;axioms&amp;#8221;) and from those we deduce (prove) all the other statements. All the deduced statements are &amp;#8220;true&amp;#8221; (if we didn&amp;#8217;t do any mistakes) since they are derived from the axioms which we assume to be true. This doesn&amp;#8217;t mean however that it necessarily has any relation to the objective reality. (And just a side-note: even if we stay within the bounds of such imaginary systems - ie. don&amp;#8217;t try to apply it to the &amp;#8220;real world&amp;#8221; - we will hit some fundamental limitations &lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt;)&lt;/p&gt;
&lt;p&gt;Science however uses &lt;em&gt;induction&lt;/em&gt;: if I see that both an apple and a rock is failing down, I guess that both &amp;#8220;falling down&amp;#8221; events happen because of the same cause. Such &amp;#8220;rules of thumbs&amp;#8221; &lt;sup id="fnref:2"&gt;&lt;a class="footnote-ref" href="#fn:2" rel="footnote"&gt;2&lt;/a&gt;&lt;/sup&gt; work generally but can give the &amp;#8220;wrong&amp;#8221; results sometimes (as opposed to the rules of deduction which are &lt;em&gt;always&lt;/em&gt; correct if we accept the initial axioms). Of course for a scientist these cases of &amp;#8220;unexpected outcome&amp;#8221; are the most interesting ones since they signal an opportunity to learn something new, but they can be most distressing if we think of science as &amp;#8220;the source of&amp;nbsp;truth&amp;#8221;.&lt;/p&gt;
&lt;p&gt;So how does science use mathematics? It is just a precise way to describe hypothesis / theories and to manipulate those. Thus we might say that the maximum distance of a ball thrown is described by the equation &lt;code&gt;v^2 / g&lt;/code&gt; and we can make predictions about the distance of a ball will travel before throwing it (and verify after the fact that prediction was - mostly - correct) but the fact that we formulated the theory in mathematical term does not make it fundamentally more true than any other scientific theory. It still is &amp;#8220;the best theory we have for now which isn&amp;#8217;t refuted by&amp;nbsp;evidence&amp;#8221;.&lt;/p&gt;
&lt;h2&gt;Other limitations of&amp;nbsp;science&lt;/h2&gt;
&lt;p&gt;Coming back to the idea &amp;#8220;science is not the absolute truth &lt;em&gt;even if&lt;/em&gt; we would &amp;#8220;do science&amp;nbsp;perfectly&amp;#8221;:&lt;/p&gt;
&lt;p&gt;We don&amp;#8217;t do science&amp;nbsp;perfectly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We have biases and when we have a theory we might not look &amp;#8220;hard enough&amp;#8221; for evidence to refute&amp;nbsp;it&lt;/li&gt;
&lt;li&gt;The academic structure is not set up to encourage verification of results: publishing replication results or negative results is discouraged (may scientific journals don&amp;#8217;t even accept them for&amp;nbsp;publication)&lt;/li&gt;
&lt;li&gt;Science is entirely probabilistic (it only tells you what &lt;em&gt;probably&lt;/em&gt; is true), however statistics (the branch of mathematics which deals with probabilities) is complicated and it&amp;#8217;s easy to make mistakes when judging what constitutes &lt;em&gt;probably&lt;/em&gt; true&lt;sup id="fnref:3"&gt;&lt;a class="footnote-ref" href="#fn:3" rel="footnote"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;In some very interesting fields it is hard to conduct experiments (more on this in the next&amp;nbsp;section)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And as if the above wasn&amp;#8217;t enough, there is the problem of communicating the results (the step where &amp;#8220;there is a 60% probability that eating a bit of chocolate improves bone density in white women over 50&amp;#8221; turns into &amp;#8220;Science Fact! Women should eat chocolate&amp;nbsp;daily!&amp;#8221;).&lt;/p&gt;
&lt;p&gt;To give &lt;em&gt;some&lt;/em&gt; uplifting news: these issues are known and people &lt;em&gt;are&lt;/em&gt; trying to work on it. There have been scientific journals set up to publish replicating studies and/or studies with negative results. There is a movement to encourage researchers to pre-register their studies (to state what data they&amp;#8217;ll collect and how they will analyze it) and publish the results even if they are negative. Finally some journals require scientists to give a &amp;#8220;simplified abstract&amp;#8221; when publishing the research which can be adapted by journalists&amp;nbsp;easier.&lt;/p&gt;
&lt;p&gt;However these are hard issues and we can help out by not having unrealistic&amp;nbsp;expectations.&lt;/p&gt;
&lt;h2&gt;Words about human-centric&amp;nbsp;fields&lt;/h2&gt;
&lt;p&gt;A couple of final words about the science in fields like health (mental and physical) or economics: these are the fields which are the most important to us but where the difficulties presented&amp;nbsp;multiply:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generally we can&amp;#8217;t do random double-bind trials where we select a group of people and infect them with &lt;span class="caps"&gt;AIDS&lt;/span&gt; or make them live on less than $1 a day (you know, because we value human&amp;nbsp;life)&lt;/li&gt;
&lt;li&gt;This means that we can only study people who already are in this situation but that makes it very likely that we confuse cause and&amp;nbsp;effect&lt;/li&gt;
&lt;li&gt;Even if the experiment is non-intrusive (or we&amp;#8217;re doing an observational study) it is very hard to get a diverse set of participants (ie. most psychology experiments are done on young white males in the &lt;span class="caps"&gt;US&lt;/span&gt; - no wonder that they don&amp;#8217;t replicate across the&amp;nbsp;world)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Again, people are working on addressing these issues, but it is just one more reason not to believe the &amp;#8220;fad&amp;#8221; articles published daily and shared virally on social&amp;nbsp;media.&lt;/p&gt;
&lt;p&gt;Science is not perfect, but it&amp;#8217;s the best that we&amp;nbsp;have.&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;https://en.wikipedia.org/wiki/G%C3%B6del%27s_incompleteness_theorems&amp;#160;&lt;a class="footnote-backref" href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;https://en.wikipedia.org/wiki/Mill%27s_Methods&amp;#160;&lt;a class="footnote-backref" href="#fnref:2" rev="footnote" title="Jump back to footnote 2 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Is Most Published Research Wrong? - https://www.youtube.com/watch?v=42QuXLucH3Q&amp;#160;&lt;a class="footnote-backref" href="#fnref:3" rev="footnote" title="Jump back to footnote 3 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 08 Sep 2016 10:44:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2016-09-08:2016/09/the-limits-of-science.html</guid><category>science</category><category>philosophy</category></item><item><title>A fresh start with Pelican</title><link>https://www.grey-panther.net/2016/01/a-fresh-start-with-pelican.html</link><description>&lt;p&gt;Here we are in 2016, trying to start blogging again. Using &lt;a href="http://blog.getpelican.com/"&gt;Pelican&lt;/a&gt; is more complicate than it needs to be&amp;nbsp;:-(.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 04 Jan 2016 21:18:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2016-01-04:2016/01/a-fresh-start-with-pelican.html</guid></item><item><title>On benchmarks</title><link>https://www.grey-panther.net/2014/03/on-benchmarks.html</link><description>&lt;h2&gt;Numbers every programmer should know and their impact on&amp;nbsp;benchmarks&lt;/h2&gt;
&lt;p&gt;Disclaimer: I don&amp;#8217;t mean to be picking on the particular organizations /
projects / people who I&amp;#8217;ll mention below. They are just examples of a
larger trend I&amp;nbsp;observed.&lt;/p&gt;
&lt;p&gt;Sometimes (most of the times?) we forget just how powerful the machines
in our pockets / bags / desks are and accept the inefficiencies of the
software running on them. When we start to celebrate those
inefficiencies, a line has to be drawn though. Two&amp;nbsp;examples:&lt;/p&gt;
&lt;p&gt;In 2013 Twitter claimed &lt;a href="https://blog.twitter.com/2013/new-tweets-per-second-record-and-how"&gt;a record Tweets Per
Second&lt;/a&gt;
(&lt;span class="caps"&gt;TPS&lt;/span&gt; - cute :-)) of \~143k. Lets round that up to 150k and do some
back-of-the envelope&amp;nbsp;calculations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Communication between the clients and Twitter: a tweet is 140 bytes
    (240 if we allow for unicode). Lets multiple the 150k number by 10
    (just to be generous - remember that 143k was already a big blip) -
    we get a bandwidth requirement of 343 &lt;span class="caps"&gt;MB&lt;/span&gt;/sec. Because tweets are
    going over &lt;span class="caps"&gt;TCP&lt;/span&gt; presumably and \~20% of a &lt;span class="caps"&gt;TCP&lt;/span&gt; connection is overhead,
    you would need 428 &lt;span class="caps"&gt;MB&lt;/span&gt;/s of bandwidth, about 3.5 gigabit or less than
    0.5 of a 10 gigabit&amp;nbsp;connection.&lt;/li&gt;
&lt;li&gt;On the backend: lets assume we want triple redundancy (1 master + 2
    replica) and that the average tweet goes out to 9 subscribers. This
    means that internally we need to write each tweet 30 times (we
    suppose a completely denormalized structure, we need to write the
    tweet to the users timeline also and do all this thrice for
    redundancy). This means 10 &lt;span class="caps"&gt;GB&lt;/span&gt;/sec of data (13 if we&amp;#8217;re sending it
    over the network using &lt;span class="caps"&gt;TCP&lt;/span&gt;).&lt;/li&gt;
&lt;li&gt;Thus \~100 servers would be able to easily handle the load. And
    remember this is &lt;em&gt;10x&lt;/em&gt; of the &lt;em&gt;peak&lt;/em&gt; traffic they&amp;nbsp;experienced.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So why do the have &lt;a href="http://www.quora.com/How-many-servers-does-Twitter-have"&gt;20 to 40 times that many
servers&lt;/a&gt;? This
means that less than 10% (!) of their server capacity is actually used
for business&amp;nbsp;functions.&lt;/p&gt;
&lt;p&gt;Second example: Google with DataStax came out with &lt;a href="http://googlecloudplatform.blogspot.ro/2014/03/cassandra-hits-one-million-writes-per-second-on-google-compute-engine.html"&gt;a
blogpost&lt;/a&gt;
about benchmarking a 300 node Cassandra cluster on Google Compute
Engine. They claim a peak of 1.2M messages per second. Again, lets do
some&amp;nbsp;calculations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The messages were 170 bytes in size. They were written to 2+1 nodes
    which would mean \~600 &lt;span class="caps"&gt;MB&lt;/span&gt;/s of traffic (730 &lt;span class="caps"&gt;MB&lt;/span&gt;/s if over the network
    using &lt;span class="caps"&gt;TCP&lt;/span&gt;).&lt;/li&gt;
&lt;li&gt;They used 300 servers but were also testing the resiliency by
    removing 1/3 of the nodes, so lets be generous and say that the
    volume was divided over 100&amp;nbsp;servers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This means that per server we use 7.3 &lt;span class="caps"&gt;MB&lt;/span&gt;/s network traffic and 6 &lt;span class="caps"&gt;MB&lt;/span&gt;/s
disk traffic or 6% or a Gigabit connection and about 50% of medium
quality spinning rust &lt;span class="caps"&gt;HDD&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;My challenge to you is: next time you see such benchmarks do a quick
back-of-the envelope calculation and if it uses less than 60% of the
available throughput, call the people on&amp;nbsp;it!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 28 Mar 2014 09:17:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2014-03-28:2014/03/on-benchmarks.html</guid><category>rant</category><category>performance</category></item><item><title>Proxying pypi / npm / etc for fun and profit!</title><link>https://www.grey-panther.net/2014/02/proxying-pypi-npm-etc-for-fun-and-profit.html</link><description>&lt;p&gt;Package managers for source code (like pypi, npm, nuget, maven, gems,
etc) are great! We should all use them. But what happens if the central
repository goes down? Suddenly all your continious builds / deploys fail
for no reason. Here is a way to prevent&amp;nbsp;that:&lt;/p&gt;
&lt;p&gt;Configure Apache as a caching proxy fronting these services. This means
that you can tolerate downtime for the services and you have quicker
builds (since you don&amp;#8217;t need to contact remote servers). It also has a
security benefit (you can firewall of your build server such that it
can&amp;#8217;t make any outgoing connections) and it&amp;#8217;s nice to avoid consuming
the bandwidth of those registries (especially since they are provided
for&amp;nbsp;free).&lt;/p&gt;
&lt;p&gt;Without further ado, here are the config bits for Apache&amp;nbsp;2.4&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/apache2/force_cache_proxy.conf&lt;/code&gt; - the general configuration file
for&amp;nbsp;caching:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# Security - we don&amp;#39;t want to act as a proxy to arbitrary hosts
ProxyRequests Off
SSLProxyEngine On

# Cache files to disk
CacheEnable disk /
CacheMinFileSize 0
# cache up to 100MB
CacheMaxFileSize 104857600
# Expire cache in one day
CacheMinExpire 86400
CacheDefaultExpire 86400
# Try really hard to cache requests
CacheIgnoreCacheControl On
CacheIgnoreNoLastMod On
CacheStoreExpired On
CacheStoreNoStore On
CacheStorePrivate On
# If remote can&amp;#39;t be reached, reply from cache
CacheStaleOnError On
# Provide information about cache in reply headers
CacheDetailHeader On
CacheHeader On

# Only allow requests from localhost

        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1


        # Don&amp;#39;t send X-Forwarded-* headers - don&amp;#39;t leak local hosts
        # And some servers get confused by them
        ProxyAddHeaders Off


# Small timeout to avoid blocking the build to long
ProxyTimeout    5
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now with this prepared we can create the individual configurations for
the services we wish to&amp;nbsp;proxy:&lt;/p&gt;
&lt;p&gt;For &lt;a href="https://pypi.python.org"&gt;pypi&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# pypi mirror
Listen 127.1.1.1:8001


        Include force_cache_proxy.conf

        ProxyPass         /  https://pypi.python.org/ status=I
        ProxyPassReverse  /  https://pypi.python.org/
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;For &lt;a href="https://npmjs.org/"&gt;npm&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# npm mirror
Listen 127.1.1.1:8000


        Include force_cache_proxy.conf

        ProxyPass         /  https://registry.npmjs.org/ status=I
        ProxyPassReverse  /  https://registry.npmjs.org/
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After configuration you need to enable the site (a2ensite) as well as
needed modules (a2enmod - ssl, cache, disk_cache, proxy,&amp;nbsp;proxy_http).&lt;/p&gt;
&lt;p&gt;Finally you need to configure your package manager clients to use these&amp;nbsp;endpoints:&lt;/p&gt;
&lt;p&gt;For npm you need to edit &lt;code&gt;~/.npmrc&lt;/code&gt; (or use &lt;code&gt;npm config set&lt;/code&gt;) and add
&lt;code&gt;registry = http://127.1.1.1:8000/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;For Python / pip you need to edit &lt;code&gt;~/.pip/pip.conf&lt;/code&gt; (I recommend having
download-cache as &lt;a href="http://www.stavros.io/posts/faster-installs-with-pip/"&gt;per Stavros&amp;#8217;s
post&lt;/a&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[global]&lt;/span&gt;
&lt;span class="na"&gt;download-cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;~/.cache/pip/&lt;/span&gt;
&lt;span class="na"&gt;index-url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;http://127.1.1.1:8001/simple/&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you use setuptools (why!? just stop and use pip :-)), your config is
&lt;code&gt;~/.pydistutils.cfg&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[easy_install]&lt;/span&gt;
&lt;span class="na"&gt;index_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;http://127.1.1.1:8001/simple/&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Also, if you use buildout, the needed config adjustment in
&lt;code&gt;buildout.cfg&lt;/code&gt; is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[buildout]&lt;/span&gt;
&lt;span class="na"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;http://127.1.1.1:8001/simple/&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This is mostly it. If your client is using any kind of local caching,
you should clear your cache and reinstall all the dependencies to ensure
that Apache has them cached on the disk. There are also dedicated
solutions for caching the repositories (for example
&lt;a href="http://doc.devpi.net/latest/index.html"&gt;devpi&lt;/a&gt; for python and
&lt;a href="https://npmjs.org/package/npm-lazy-mirror"&gt;npm-lazy-mirror&lt;/a&gt; for node),
however I found them somewhat unreliable and with Apache you have a
uniform solution which already has things like startup / supervision
implemented and which is familiar to most&amp;nbsp;sysadmins.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 05 Feb 2014 17:26:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2014-02-05:2014/02/proxying-pypi-npm-etc-for-fun-and-profit.html</guid><category>npm</category><category>mirror</category><category>node</category><category>javascript</category><category>continious integration</category><category>python</category><category>apache</category><category>build</category><category>pypi</category></item><item><title>Programming advent calendars for 2013</title><link>https://www.grey-panther.net/2013/12/programming-advent-calendars-for-2013.html</link><description>&lt;p&gt;Programming advent calendars are posts/articles for a particular topic
posted daily between the 1st and 24th of December. They are modeled on
the advent calendars received by children on some countries which
contain 24 doors for the 24 days of advent and behind each door is a
piece of chocolate or other surprise which the child gets on the
particular&amp;nbsp;day.&lt;/p&gt;
&lt;p&gt;Here is the list of programming related advent calendars for 2013 (if
you know of more, leave a comment and I&amp;#8217;ll update the&amp;nbsp;list):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.javaadvent.com%20/&amp;gt;JavaAdvent&amp;lt;/a&amp;gt;%20-%20the%20Java%20Advent%20calendar%20-%20about%20all%20things%20in%20the%20JVM%20ecosystem%20(Scala,%20Clojure,%20Kawa,%20NetRexx!).%20I'm%20partial%20to%20this%20since%20I%20helped%20start%20this%20last%20year%20:-"&gt;JavaAdvent&lt;/a&gt;&lt;/li&gt;&lt;br%20/&gt;%0A&lt;li&gt;&amp;lt;a%20href=) -
    the Java Advent calendar - about all things in the &lt;span class="caps"&gt;JVM&lt;/span&gt; ecosystem
    (Scala, Clojure, Kawa, NetRexx!). I&amp;#8217;m partial to this since I helped
    start this last year&amp;nbsp;:-)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://24ways.org/"&gt;24 ways&lt;/a&gt; - &amp;#8220;is the advent calendar for web
    geeks. Each day throughout December we publish a daily dose of web
    design and development goodness to bring you all a little Christmas&amp;nbsp;cheer&amp;#8221;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.perladvent.org/2013/"&gt;The Perl Advent Calendar&amp;nbsp;2013&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://perl6advent.wordpress.com/"&gt;Perl 6 Advent Calendar&lt;/a&gt; (if you
    didn&amp;#8217;t hear - Perl 6 is a completely different language from Perl&amp;nbsp;5!)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sysadvent.blogspot.com/"&gt;SysAdvent&lt;/a&gt; (not only) for&amp;nbsp;sysadmins&lt;/li&gt;
&lt;li&gt;&lt;a href="http://calendar.perfplanet.com/"&gt;Performance Calendar&lt;/a&gt; Learn all
    about web performance. (Primarily focused on frontend&amp;nbsp;technologies.)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://uxmas.com/"&gt;UXmas&lt;/a&gt; &lt;span class="caps"&gt;UX&lt;/span&gt; is for everyone. Brush up on the topic
    this&amp;nbsp;December.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.gopheracademy.com/"&gt;Go Advent&lt;/a&gt; - the go(lang) advent&amp;nbsp;calendar&lt;/li&gt;
&lt;li&gt;&lt;a href="http://24pullrequests.com/"&gt;24 Pull Requests&lt;/a&gt; - &amp;#8220;a yearly
    initiative to encourage developers around the world to send a pull
    request every day in December up to&amp;nbsp;Xmas&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 04 Dec 2013 18:41:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2013-12-04:2013/12/programming-advent-calendars-for-2013.html</guid><category>christmas</category><category>advent</category><category>programming</category><category>java advent</category></item><item><title>Cleaning up Google AppEngine Mapreduce Jobs</title><link>https://www.grey-panther.net/2013/11/cleaning-up-google-appengine-mapreduce.html</link><description>&lt;p&gt;Do you use the &lt;a href="https://developers.google.com/appengine/docs/python/dataprocessing/"&gt;Google MapReduce
library&lt;/a&gt;
on AppEngine? And do you have a lot of completed tasks which clutter
your dashboard? Use the &lt;span class="caps"&gt;JS&lt;/span&gt; below by pasting it into your developer
console to clean them up! (use it at your own risk, no warranty is
provided&amp;nbsp;:-))&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;schedule&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;function&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;a:contains(Cleanup)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;a:contains(Next page)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;click&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="err"&gt;}&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;300&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="nt"&gt;return&lt;/span&gt; &lt;span class="nt"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="err"&gt;}&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="nt"&gt;window&lt;/span&gt;&lt;span class="nc"&gt;.confirm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;schedule&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="nt"&gt;schedule&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 12 Nov 2013 12:31:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2013-11-12:2013/11/cleaning-up-google-appengine-mapreduce.html</guid><category>mapreduce</category><category>jquery</category><category>gae</category><category>javascript</category><category>tip</category></item><item><title>Capturing your screen on Ubuntu - with sound</title><link>https://www.grey-panther.net/2013/08/capturing-your-screen-on-ubuntu-with.html</link><description>&lt;p&gt;Today I have a short script which I cobbled together from Google
searches to do screen captures / screen casts with Ubuntu (including
audio in so that you can narrate what is going&amp;nbsp;on):&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1
2
3
4&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;Xaxis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;xrandr -q &lt;span class="p"&gt;|&lt;/span&gt; grep &lt;span class="s1"&gt;&amp;#39;*&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; uniq &lt;span class="p"&gt;|&lt;/span&gt; awk &lt;span class="s1"&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;  cut -d &lt;span class="s1"&gt;&amp;#39;x&amp;#39;&lt;/span&gt; -f1&lt;span class="k"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;Yaxis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;xrandr -q &lt;span class="p"&gt;|&lt;/span&gt; grep &lt;span class="s1"&gt;&amp;#39;*&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; uniq &lt;span class="p"&gt;|&lt;/span&gt; awk &lt;span class="s1"&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;  cut -d &lt;span class="s1"&gt;&amp;#39;x&amp;#39;&lt;/span&gt; -f2&lt;span class="k"&gt;)&lt;/span&gt;
avconv -f alsa -i pulse -f x11grab -s &lt;span class="k"&gt;$((&lt;/span&gt;&lt;span class="nv"&gt;$Xaxis&lt;/span&gt;&lt;span class="k"&gt;))&lt;/span&gt;x&lt;span class="k"&gt;$((&lt;/span&gt;&lt;span class="nv"&gt;$Yaxis&lt;/span&gt;&lt;span class="k"&gt;))&lt;/span&gt; -i &lt;span class="nv"&gt;$DISPLAY&lt;/span&gt;.0 -r &lt;span class="m"&gt;15&lt;/span&gt; -c:v libx264 -crf &lt;span class="m"&gt;0&lt;/span&gt; -c:a libvo_aacenc -b:a 256k -threads &lt;span class="m"&gt;8&lt;/span&gt; ~/Videos/output.mp4
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I found this to work much better than gtk-recordmydesktop, which had
lags, especially when &amp;#8220;effects&amp;#8221; were being drawn on the screen (like
bulletpoints sliding in for a presentation or switching between&amp;nbsp;desktops).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 14 Aug 2013 09:50:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2013-08-14:2013/08/capturing-your-screen-on-ubuntu-with.html</guid><category>ubuntu</category><category>screencapture</category><category>screencasts</category></item><item><title>Tips for running SonarQube on large / legacy codebases</title><link>https://www.grey-panther.net/2013/06/tips-for-running-sonarqube-on-large.html</link><description>&lt;p&gt;&lt;em&gt;Crossposted from &lt;a href="http://www.transylvania-jug.org/archives/5702"&gt;the Transylvania &lt;span class="caps"&gt;JUG&lt;/span&gt;
website&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sonarqube.org/"&gt;SonarQube&lt;/a&gt; (previously Sonar) is a quality
management platform aimed mainly at Java (although other programming
languages are supported to a varying degree. Here are a couple of tips
to get it working on legacy&amp;nbsp;projects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There is an &lt;a href="http://docs.codehaus.org/display/SONAR/Analyzing+with+SonarQube+Ant+Task"&gt;Ant
    runner&lt;/a&gt;
    and a &lt;a href="http://docs.codehaus.org/display/SONAR/Analyzing+with+SonarQube+Runner"&gt;standalone
    runner&lt;/a&gt;,
    it is not mandatory to use Maven (although it is a good idea in
    general to use&amp;nbsp;it)&lt;/li&gt;
&lt;li&gt;Look into &lt;a href="http://docs.codehaus.org/display/SONAR/Analysis+Parameters"&gt;the analysis
    parameters&lt;/a&gt;
    to customize it for your&amp;nbsp;code.&lt;/li&gt;
&lt;li&gt;Give it space and time :-). For reference a \~2 million &lt;span class="caps"&gt;LOC&lt;/span&gt; Java
    project took 77 minutes to be analyzed on my laptop (an Intel i7)
    with 4G&amp;nbsp;heap.&lt;/li&gt;
&lt;li&gt;To avoid having a ton of problems reported and to focus only on new
    problems, look into &lt;a href="http://docs.codehaus.org/display/SONAR/Cutoff+Plugin"&gt;the Cutoff&amp;nbsp;plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Test and coverage reports can be reused, no need to run them twice
    (once for the &lt;span class="caps"&gt;CI&lt;/span&gt; system and then for SonarQube). Look into &lt;a href="http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Project"&gt;reusing
    existing
    reports&lt;/a&gt;.
    Also, make sure to use the latest version of JaCoCo when generating
    profile&amp;nbsp;data.&lt;/li&gt;
&lt;li&gt;Configure your sonar.exclusions property to ignore code you aren&amp;#8217;t
    interested&amp;nbsp;in&lt;/li&gt;
&lt;li&gt;Raise your sonar.findbugs.timeout property (the default of 5 minutes
    can be low for large&amp;nbsp;projects)&lt;/li&gt;
&lt;li&gt;Consider disabling source code related plugins (sonar.scm.enabled,
    sonar.scm-stats.enabled) if the provider for your &lt;span class="caps"&gt;SCM&lt;/span&gt; has an issue
    (&lt;span class="caps"&gt;HG&lt;/span&gt; has an issue currently for example with username containing&amp;nbsp;spaces)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Keep your code&amp;nbsp;clean!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 28 Jun 2013 12:49:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2013-06-28:2013/06/tips-for-running-sonarqube-on-large.html</guid><category>sonarqube</category><category>sonar</category><category>java</category></item><item><title>Nested fluent builders</title><link>https://www.grey-panther.net/2013/06/nested-fluent-builders.html</link><description>&lt;p&gt;&lt;em&gt;Crossposted from &lt;a href="http://www.transylvania-jug.org/archives/5692"&gt;the Transylvania &lt;span class="caps"&gt;JUG&lt;/span&gt;
website&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Builders have become commonplace in current Java code. They have the
effect of transforming the following&amp;nbsp;code:&lt;/p&gt;
&lt;p&gt;&lt;span class="dquo"&gt;&amp;#8220;&lt;/span&gt;` {lang=&amp;#8221;java&amp;#8221; escaped=&amp;#8221;true&amp;#8221;}
new Foo(1, 5, &amp;#8220;abc&amp;#8221;,&amp;nbsp;false);&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;lt;/code&amp;gt;

Into something like

``` {lang=&amp;quot;java&amp;quot; escaped=&amp;quot;true&amp;quot; line=&amp;quot;1&amp;quot;}
Foo.builder()
  .count(1)
  .priority(5)
  .name(&amp;quot;abc&amp;quot;)
  .canonical(true)
  .build();
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This has the advantage of being much easier to understand (as a downside
we can mention the fact that - depending on the implementation - it can
result in the creation of an additional object). The implementation of
such builders is very simple - they a list of &amp;#8220;setters&amp;#8221; which return the
current&amp;nbsp;object:&lt;/p&gt;
&lt;p&gt;&lt;span class="dquo"&gt;&amp;#8220;&lt;/span&gt;` {lang=&amp;#8221;java&amp;#8221; escaped=&amp;#8221;true&amp;#8221; line=&amp;#8221;1&amp;#8221;}
public final class FooBuilder {
  private int count = 1;
  //&amp;nbsp;&amp;#8230;&lt;/p&gt;
&lt;p&gt;public FooBuilder count(int count) {
    this.count = count;
    return this;&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;public Foo build() {
    return new Foo(count, //&amp;#8230;
  }&amp;nbsp;}&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;lt;/code&amp;gt;

Of course writing even this code can become repetitive and annoying, in
which case we can use
[Lombok](http://projectlombok.org/features/experimental/Builder.html) or
other code generation tools. An other possible improvement - which makes
builder more useful for testing - is to add methods like random as
suggested in [this Java Advent
Calendar](http://www.javaadvent.com/2012/12/using-builder-pattern-in-junit-tests.html)
article. We can subclass the builder (into FooTestBuilder for example)
and only use the &amp;quot;extended&amp;quot; version in testing.

What can do however if our objects are more complex (they have
non-primitive fields)? One approach may look like this:

``` {lang=&amp;quot;java&amp;quot; escaped=&amp;quot;true&amp;quot; line=&amp;quot;1&amp;quot;}
Foo.builder()
  .a(1)
  .b(2)
  .bar(Bar.builder().c(1).build())
  .buzz(Buzz.builder().build())
  .build();
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;We can make this a little nicer by overloading the bar / buzz methods to
accept instances of BarBuilder / BuzzBuilder, in which case we can omit
two build calls. Still, I longed for something like the&amp;nbsp;following:&lt;/p&gt;
&lt;p&gt;&lt;span class="dquo"&gt;&amp;#8220;&lt;/span&gt;` {lang=&amp;#8221;java&amp;#8221; escaped=&amp;#8221;true&amp;#8221; line=&amp;#8221;1&amp;#8221;}
Foo.builder()
  .a(1)
  .b(2)
  .bar()
     .c(1).build()
  .buzz()
     .build()&amp;nbsp;.build();&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;lt;/code&amp;gt;

The idea is that the bar / buzz calls call start a new &amp;quot;context&amp;quot; where
we initialize the Bar/Buzz classes. &amp;quot;build&amp;quot; calls end the innermost
context, with the last build returning the initialized Foo object
itself. How can this be written in a typesafe / compiler verifiable way?

My solution is the following:

-   Each builder is parameterized to return an arbitrary type T from its
    build method
-   The actual return value is generated from a Sink of T
-   When using the builder at the top level, we use an IdentitySink with
    just returns the passed in value.
-   When using the builder in a nested context, we use a Sink which
    stores the value and returns the builder from &amp;quot;one level up&amp;quot;.

Some example code to clarify the explanation from above can be found
below. Note that this code has been written as an example and could be
optimized (like making using a single instance of the IdentitySink,
having FooBuilder itself implementing the sink methods, etc).

Implementation of a leaf-level builder:

``` {lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;}
interface Sink {
  T setBar(Bar bar);
}

final class Bar {
  // ...
  public static BarBuilder builder() {
    return new BarBuilder(new Sink() {
      @Override
      public Bar setBar(Bar bar) { return bar; }
    });
  }
}

class BarBuilder {
  // ...

  protected BarBuilder(Sink sink) {
    this.sink = sink;
  }

  // ...

  public T build() {
    return sink.setBar(new Bar(c, d, fizz));
  }
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Implementation of the root level&amp;nbsp;builder:&lt;/p&gt;
&lt;p&gt;&lt;span class="dquo"&gt;&amp;#8220;&lt;/span&gt;` {lang=&amp;#8221;java&amp;#8221; line=&amp;#8221;1&amp;#8221;}
class FooBuilder {
  // &amp;#8230;
  public BarBuilder setBar() {
    return new BarBuilder(new Sink() {
      @Override
      public Bar setBar(Bar bar) { 
        FooBuilder.this.bar = bar;
        return FooBuilder.this;
      }
    });&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;// &amp;#8230;
}&amp;nbsp;&amp;#8220;`&lt;/p&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Conclusion: Java has some missing features (liked named parameters or
the ease of reuse provided by duck-typing). We can work around them
however nicely with some carefully crafted code (and we can put
repeating code into code generators to avoid having to write it over and
over again). In exchange we get a very versatile and good performing
cross-platform&amp;nbsp;runtime.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 23 Jun 2013 15:26:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2013-06-23:2013/06/nested-fluent-builders.html</guid></item><item><title>Passing UTF-8 trough HTTP</title><link>https://www.grey-panther.net/2013/05/passing-utf-8-trough-http.html</link><description>&lt;p&gt;These days we should write every code as if it will be used by
international people with a wide variety of personal information (just
look at &lt;a href="http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/"&gt;Falsehoods Programmers Believe About
Names&lt;/a&gt;
for some headscratchers). I would like to do add my small contribution
to this by showing how &lt;span class="caps"&gt;UTF&lt;/span&gt;-8 encoded strings can be passed into &lt;span class="caps"&gt;GET&lt;/span&gt;/&lt;span class="caps"&gt;POST&lt;/span&gt;&amp;nbsp;parameters.&lt;/p&gt;
&lt;p&gt;For this I&amp;#8217;ll be using the following small &lt;span class="caps"&gt;PHP&lt;/span&gt; script, which can be
quickly run by the &lt;a href="http://php.net/manual/en/features.commandline.webserver.php"&gt;command line &lt;span class="caps"&gt;PHP&lt;/span&gt;
webserver&lt;/a&gt;
added in &lt;span class="caps"&gt;PHP&lt;/span&gt;&amp;nbsp;5.4:&lt;/p&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;GETs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; 
&lt;span class="n"&gt;POSTs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ll test this with the following Python&amp;nbsp;script:&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/usr/bin/python&lt;/span&gt;
&lt;span class="c1"&gt;# vim: set fileencoding=utf-8 :&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;urllib&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;urllib2&lt;/span&gt;

&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;u&amp;#39;東京&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iteritems&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urlencode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;http://localhost:8000/?&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;
&lt;span class="n"&gt;req&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urllib2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urllib2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This all works well and nicely, so here are some&amp;nbsp;conclusions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="caps"&gt;GET&lt;/span&gt; and &lt;span class="caps"&gt;POST&lt;/span&gt; variables need to be &lt;span class="caps"&gt;UTF&lt;/span&gt;-8 encoded after which they
    need to be urlencoded (&amp;#8220;% encoded&amp;#8221;). See &lt;a href="http://stackoverflow.com/a/1549498/1265"&gt;this StackOverflow
    answer&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Based on the same answer: hostnames use Punycode instead (but we are
    not concerned with hostnames&amp;nbsp;here)&lt;/li&gt;
&lt;li&gt;You might need to add the following header for &lt;span class="caps"&gt;POST&lt;/span&gt; requests to
    work: &amp;#8220;Content-Type: application/x-www-form-urlencoded;
    charset=&lt;span class="caps"&gt;UTF&lt;/span&gt;-8&amp;#8221;&lt;/li&gt;
&lt;li&gt;Failing to observe this sequence leads to an UnicodeEncodeError in&amp;nbsp;urllib.urlencode&lt;/li&gt;
&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 29 May 2013 20:36:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2013-05-29:2013/05/passing-utf-8-trough-http.html</guid><category>python</category><category>PHP</category><category>unicode</category></item><item><title>Connecting to the MtGox market data feed using Perl</title><link>https://www.grey-panther.net/2013/05/connecting-to-mtgox-market-data-feed.html</link><description>&lt;p&gt;For a recent project I needed some realistic market data for an
electronic exchange. Seeing how MtGox provides free and open access to
theirs (thank you!) I chose them. However none of the examples floating
around the internet seemed to work, so I whipped one up using
&lt;a href="http://search.cpan.org/~pevans/Net-Async-WebSocket-0.06/lib/Net/Async/WebSocket/Client.pm"&gt;Net::Async::WebSocket::Client&lt;/a&gt;.&amp;nbsp;Enjoy:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;IO::Async::&lt;/span&gt;&lt;span class="n"&gt;Loop&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Net::Async::WebSocket::&lt;/span&gt;&lt;span class="n"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Net::Async::WebSocket::&lt;/span&gt;&lt;span class="n"&gt;Client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;on_frame&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$frame&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;@_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$loop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;IO::Async::&lt;/span&gt;&lt;span class="n"&gt;Loop&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$loop&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$client&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;websocket.mtgox.com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;ws://websocket.mtgox.com:80/mtgox&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;on_connected&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;
        &lt;span class="n"&gt;on_connect_error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;die&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Cannot connect - $_[-1]&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;on_resolve_error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;die&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Cannot resolve - $_[-1]&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$loop&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;loop_forever&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;(it is basically the sample program for the module, with the MtGox
market data &lt;span class="caps"&gt;URL&lt;/span&gt;&amp;nbsp;hardcoded).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 29 May 2013 17:52:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2013-05-29:2013/05/connecting-to-mtgox-market-data-feed.html</guid><category>bitcoin</category><category>websockets</category><category>perl</category><category>mtgox</category></item><item><title>Converting datetime to UTC in python</title><link>https://www.grey-panther.net/2013/02/converting-datetime-to-utc-in-python.html</link><description>&lt;p&gt;So you need to convert a python datetime object which has a timezone set
(&amp;#8220;aware&amp;#8221; in the Python nomenclature) to an &lt;span class="caps"&gt;UTC&lt;/span&gt; one with no timezone set
(&amp;#8220;naive&amp;#8221;), for example because &lt;span class="caps"&gt;NDB&lt;/span&gt; on &lt;span class="caps"&gt;GAE&lt;/span&gt; &lt;a href="http://code.google.com/p/appengine-ndb-experiment/source/browse/ndb/model.py?r=6b3f88b663a82831e9ecee8adbad014ff774c365#1916"&gt;can&amp;#8217;t store anything
else&lt;/a&gt;.
The solution will look something like&amp;nbsp;this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;date = date.astimezone(tz.tzutc()).replace(tzinfo=None)
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;For searcheability: the exception thrown by &lt;span class="caps"&gt;NDB&lt;/span&gt; if you fail to do this
is &amp;#8220;NotImplementedError: DatetimeProperty updated_at can only support
&lt;span class="caps"&gt;UTC&lt;/span&gt;. Please derive a new Property to support alternative&amp;nbsp;timezones.&amp;#8221;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 07 Feb 2013 19:06:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2013-02-07:2013/02/converting-datetime-to-utc-in-python.html</guid><category>gae</category><category>datetime</category><category>python</category><category>ndb</category></item><item><title>Recovering your RoTLD password for domains registered trough Gandi.NET</title><link>https://www.grey-panther.net/2013/02/recovering-your-rotld-password-for.html</link><description>&lt;p&gt;If you need to &amp;#8220;recover&amp;#8221; your &lt;a href="http://www.rotld.ro/"&gt;RoTLD&lt;/a&gt; password
when the .&lt;span class="caps"&gt;RO&lt;/span&gt; domain is registered trough Gandi.&lt;span class="caps"&gt;NET&lt;/span&gt; (I say &amp;#8220;recover&amp;#8221;
because you didn&amp;#8217;t set it in the first place :-)) - do&amp;nbsp;this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In the Gandi interface go to Account Management -&gt; Update account
    information and set &amp;#8220;Anti-spam system&amp;#8221; to&amp;nbsp;No&lt;/li&gt;
&lt;li&gt;Go to the &lt;a href="https://domadmin2.rotld.ro/passwd_rec.html?lang=en"&gt;RoTLD password recovery
    page&lt;/a&gt; and reset
    your password. Now the password recovery email should have arrived
    to your&amp;nbsp;inbox.&lt;/li&gt;
&lt;li&gt;(Optional) go back to the Gandi interface and re-enable the
    anti-spam&amp;nbsp;system&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I needed to do this to enable &lt;a href="cloudflare.com"&gt;CloudFlare&lt;/a&gt; on
&lt;a href="http://it-events.ro"&gt;&lt;span class="caps"&gt;IT&lt;/span&gt;-Events.&lt;span class="caps"&gt;RO&lt;/span&gt;&lt;/a&gt; because RoTLD allows the changing of
nameservers only trough their&amp;nbsp;website.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 05 Feb 2013 16:08:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2013-02-05:2013/02/recovering-your-rotld-password-for.html</guid></item><item><title>Free software for Windows</title><link>https://www.grey-panther.net/2013/01/free-software-for-windows.html</link><description>&lt;p&gt;Inspired by &lt;a href="http://alexj.info/2012/11/15/open-source-software-on-windows/"&gt;this
post&lt;/a&gt; I
decided to list the software I use/recommend under&amp;nbsp;Windows.&lt;/p&gt;
&lt;p&gt;Free/Libre Open Source&amp;nbsp;Software:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.libreoffice.org/"&gt;LibreOffice&lt;/a&gt; (for of OpenOffice) - a
    very capable office solution. Most people don&amp;#8217;t need anything more
    than this. If you are installing it for a non-technical user, make
    sure to set the default file formats to the Microsoft ones (.doc,
    .xls,&amp;nbsp;&amp;#8230;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.farmanager.com/opensource.php"&gt;Far Manager&lt;/a&gt; - a very
    cool two-panel file manager, for those of us who like text-based
    things (don&amp;#8217;t let the looks fool you - it is very modern and very
    capable). You could also take a look at &lt;a href="http://ndn.muxe.com/"&gt;&lt;span class="caps"&gt;NDN&lt;/span&gt;&lt;/a&gt;
    or &lt;a href="http://www.dnosp.com/"&gt;&lt;span class="caps"&gt;DNOSP&lt;/span&gt;&lt;/a&gt;, but &lt;span class="caps"&gt;FAR&lt;/span&gt; is my personal&amp;nbsp;favorite.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.videolan.org/"&gt;&lt;span class="caps"&gt;VLC&lt;/span&gt;&lt;/a&gt; - &lt;span class="caps"&gt;THE&lt;/span&gt; video player. It can play
    99.999% of the media out there and it won&amp;#8217;t pollute your system with
    all kinds of&amp;nbsp;DLLs.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ffdshow-tryout.sourceforge.net/"&gt;ffdshow-tryouts&lt;/a&gt; -
    DirectShow / &lt;span class="caps"&gt;VFW&lt;/span&gt; codecs for all the formats &lt;span class="caps"&gt;VLC&lt;/span&gt; can play (in fact
    they are both based on the &lt;a href="http://ffmpeg.org/"&gt;ffmpeg&lt;/a&gt; project).
    Use this to play back videos in programs which are DirectShow based
    (like &lt;span class="caps"&gt;WMP&lt;/span&gt; or&amp;nbsp;Winamp).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.7-zip.org/"&gt;7-zip&lt;/a&gt; - for all your zipping and unzipping
    needs. It supports a lot of other formats too (mainly for
    extracting) so no need to install the shareware version of&amp;nbsp;WinRar&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mozilla.org/en-US/firefox/new/"&gt;Firefox&lt;/a&gt; - &amp;#8216;nuff said.
    There are also a lot of plugins which one might find useful like
    &lt;a href="https://getfirebug.com/"&gt;Firebug&lt;/a&gt;,
    &lt;a href="http://noscript.net/"&gt;NoScript&lt;/a&gt;,
    &lt;a href="https://www.requestpolicy.com/"&gt;RequestPolicy&lt;/a&gt;, etc. As a download
    manager I would recommend
    &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/downthemall/"&gt;DownThemAll&lt;/a&gt;,
    but I found that with recent increases in Internet access speeds I
    don&amp;#8217;t need a download&amp;nbsp;manager.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.flos-freeware.ch/notepad2.html"&gt;Notepad2&lt;/a&gt; for your small
    (text) editing needs. There is also
    &lt;a href="http://notepad-plus-plus.org/"&gt;Notepad++&lt;/a&gt; and
    &lt;a href="http://xhmikosr.github.com/notepad2-mod/"&gt;notepad2-mod&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.pdfforge.org/"&gt;PDFForge&lt;/a&gt; to create PDFs from any program
    which can print (it acts as a virtual printer which outputs its
    results to a &lt;span class="caps"&gt;PDF&lt;/span&gt; file). Sidenote: LibreOffice can natively save to
    &lt;span class="caps"&gt;PDF&lt;/span&gt;, no need for this if you&amp;#8217;re using it only for&amp;nbsp;that.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.pidgin.im/"&gt;Pidgin&lt;/a&gt; - you might know it as &lt;span class="caps"&gt;GAIM&lt;/span&gt;, a multi
    protocol instant messenger. And it is &lt;em&gt;very&lt;/em&gt; multi protocol. The
    only downside is that some advanced protocol features are not always
    functional (*cough* file-transfer, *cough*), but I find that I
    rarely use those anyways. If you are installing it for someone else
    however, make sure to ask them what features they consider essential
    (like custom background/emoticons) and act&amp;nbsp;accordingly.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://winscp.net/eng/index.php"&gt;WinSCP&lt;/a&gt; to copy files trough
    &lt;span class="caps"&gt;SSH&lt;/span&gt;/&lt;span class="caps"&gt;SCP&lt;/span&gt;, and the &lt;a href="http://filezilla-project.org/"&gt;FileZilla client&lt;/a&gt;
    to do the same over &lt;span class="caps"&gt;FTP&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;Various specialized programs: &lt;a href="http://www.gimp.org/"&gt;&lt;span class="caps"&gt;GIMP&lt;/span&gt;&lt;/a&gt; for
    photo-editing, &lt;a href="http://inkscape.org/"&gt;Inkscape&lt;/a&gt; for vector-based
    graphics, &lt;a href="http://www.virtualdub.org/"&gt;VirtualDub&lt;/a&gt; and
    &lt;a href="http://fixounet.free.fr/avidemux/"&gt;Avidemux&lt;/a&gt; for (linear) video
    editing, &lt;a href="http://www.wireshark.org/"&gt;Wireshark&lt;/a&gt; for network
    analysis, &lt;a href="http://audacity.sourceforge.net/"&gt;Audacity&lt;/a&gt; for audio
    editing,
    &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html"&gt;PuTTY&lt;/a&gt;
    as an &lt;span class="caps"&gt;SSH&lt;/span&gt; client, &lt;a href="https://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; for
    running virtual machines and &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; for
    development (it can do more than Java!). There is also the &lt;a href="http://www.jetbrains.com/idea/free_java_ide.html"&gt;IntelliJ
    Community Edition&lt;/a&gt;
    for developement which &lt;em&gt;is&lt;/em&gt; Open Source Software, but be aware of
    &lt;a href="http://www.jetbrains.com/idea/features/editions_comparison_matrix.html"&gt;the
    limitations&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.apachefriends.org/en/xampp.html"&gt;&lt;span class="caps"&gt;XAMPP&lt;/span&gt;&lt;/a&gt; for quickly
    setting up a &lt;span class="caps"&gt;LAMP&lt;/span&gt; environment under&amp;nbsp;Windows&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Free (as in beer) - these may try to trick you into installing toolbars
/ changing your homepage / your search engine so watch&amp;nbsp;out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.teamviewer.com/"&gt;TeamViewer&lt;/a&gt; - a nice remote control
    solution (also cross platform - although it doesn&amp;#8217;t run perfectly on
    other OSs). I especially like the fact that it can run as a service
    and that it takes care of the &lt;span class="caps"&gt;NAT&lt;/span&gt; traversal&amp;nbsp;problem.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cdburnerxp.se/"&gt;CDBurnerXP&lt;/a&gt; - for burning optical media.
    Nothing special, but it&amp;nbsp;works.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.irfanview.com/"&gt;IrfanView&lt;/a&gt; - a very capable image viewer
    / converter. Don&amp;#8217;t forget to install the plugins to take full
    advantage of its features! It is also so lightweight that won&amp;#8217;t
    believe how quickly the installation finishes. Watch out though, it
    tries to install sponsored programs&amp;nbsp;:-(&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.freecommander.com/"&gt;FreeCommander&lt;/a&gt; - a two panel graphic
    file manager. Recommended if you&amp;#8217;re a Total/Windows Commander fan
    rather than a Norton Commander one&amp;nbsp;:-)&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-products"&gt;&lt;span class="caps"&gt;MS&lt;/span&gt; Visual Studio Express
    series&lt;/a&gt; -
    a good way to get your feet wet with &lt;span class="caps"&gt;MS&lt;/span&gt; specific development (also
    good for university projects), but be aware that you&amp;#8217;ll quickly hit
    a wall with it on professional&amp;nbsp;projects.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.utorrent.com/"&gt;uTorrent&lt;/a&gt; for my downloading&amp;nbsp;needs.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.daemon-tools.cc/eng/downloads"&gt;Daemon Tools Free&lt;/a&gt; for my
    &lt;span class="caps"&gt;ISO&lt;/span&gt; (&lt;span class="caps"&gt;CD&lt;/span&gt;/&lt;span class="caps"&gt;DVD&lt;/span&gt;/&lt;span class="caps"&gt;BR&lt;/span&gt;) mounting needs. Attention during install! It will
    try to &amp;#8220;upgrade&amp;#8221; you several times during install and also try to
    install additional software / change your home page / search
    provider if you just click trough next. Don&amp;#8217;t let it, form a
    technical point of view it is a great product. There is also the
    unsupported &lt;a href="http://www.softpedia.com/get/CD-DVD-Tools/Virtual-CD-DVD-Rom/Virtual-CDROM-Control-Panel.shtml"&gt;Virtual
    &lt;span class="caps"&gt;CD&lt;/span&gt;&lt;/a&gt;
    product from Microsoft and Windows can mount ISOs natively starting
    from Windows 7 I&amp;nbsp;think.&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://www.foxitsoftware.com/downloads/index.php"&gt;FoxIt &lt;span class="caps"&gt;PDF&lt;/span&gt;
    Reader&lt;/a&gt; - a
    lightweight &lt;span class="caps"&gt;PDF&lt;/span&gt; reader, although Adobe Reader X caught up nicely I
    feel (and they also auto-update to eliminate security
    vulnerabilities), so you could give it a second&amp;nbsp;go.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bbsoftware.co.uk/bbflashback.aspx"&gt;&lt;span class="caps"&gt;BB&lt;/span&gt; FlashBack Express&lt;/a&gt;
    for screen recording. Little annoying to install (you need to give
    them an email account, they try to upgrade you to the paid version
    and you need to &amp;#8220;register&amp;#8221; afterwards), but after installing it is
    all good and I found it to be a very capable product (even at the
    free version&amp;nbsp;level).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.google.com/intl/en/chrome/browser/"&gt;Chrome&lt;/a&gt; and
    &lt;a href="http://www.opera.com/"&gt;Opera&lt;/a&gt; as alternative browsers (and no,
    Chrome is not Open Source, Chromium&amp;nbsp;is).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.getpaint.net/"&gt;Paint.&lt;span class="caps"&gt;NET&lt;/span&gt;&lt;/a&gt; for advanced but &amp;#8220;not
    photoshop level&amp;#8221; image&amp;nbsp;editing.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.foobar2000.org/"&gt;foobar2000&lt;/a&gt; or
    &lt;a href="http://www.winamp.com/"&gt;Winamp&lt;/a&gt; (with the classic skin :-)) for
    music. foobar is very lightweight and quick, but it might lack some
    features. Winamp is very complete, but tries to make all kinds of
    changes to your system. You also probably don&amp;#8217;t need the Winamp
    Agent to run in the background all the time&amp;nbsp;:-)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dropbox.com/"&gt;Dropbox&lt;/a&gt; for file synchronization /
    small-scale file serving. Alternatively there is
    &lt;a href="https://skydrive.live.com/"&gt;SkyDrive&lt;/a&gt;, but it isn&amp;#8217;t very Linux&amp;nbsp;friendly.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://windows.microsoft.com/en-US/windows-live/essentials-other-programs?T1=t4"&gt;Windows Live
    Writer&lt;/a&gt; -
    the best blog publishing software I could find. Unfortunately
    Microsoft ruined it with the Office 2007 look and now seems to want
    to abandon it&amp;nbsp;completely&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.skype.com/"&gt;Skype&lt;/a&gt; for video-call / teleconference,
    although lately I&amp;#8217;ve been dropping it in favor of Google&amp;nbsp;Hangouts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: this software looks very promising:
&lt;a href="http://ninite.com/"&gt;Ninite&lt;/a&gt;. It purports to auto-install and
auto-update a lot of common Windows software. Will take it for a spin
the next time I install&amp;nbsp;Windows.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 04 Jan 2013 01:36:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2013-01-04:2013/01/free-software-for-windows.html</guid></item><item><title>What every programmer should know about X</title><link>https://www.grey-panther.net/2012/12/what-every-programmer-should-know-about.html</link><description>&lt;p&gt;Piggybacking on some memes floating around on the internet I would like
to publish my list of &amp;#8220;what every programmer should&amp;nbsp;know&amp;#8221;.&lt;/p&gt;
&lt;p&gt;A couple of introductory words: in my opinion the two most important
things to learn for new programmers are terminology - to know what
things / ideas / algorithms / concepts are called so that they can
search for them on the internet and discuss their ideas) and humility
(if something doesn&amp;#8217;t exists or doesn&amp;#8217;t work the way we expected, the
first thing we should ask ourselves is: &amp;#8220;what am I missing?&amp;#8221; instead of
proclaiming the predecessors to be idiots). Moving along to the&amp;nbsp;list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://multimedia.cx/eggs/what-every-programmer-should-know/"&gt;What every programmer should know about
    X&lt;/a&gt; -
    the Breaking Eggs And Making Omelettes blog contains a very eclectic
    list of articles. The only thing I would add is the &lt;a href="www.akkadia.org/drepper/cpumemory.pdf"&gt;&lt;span class="caps"&gt;PDF&lt;/span&gt; link to
    &amp;#8220;What every programmer should know about
    memory&amp;#8221;&lt;/a&gt; rather than the &lt;span class="caps"&gt;LWN&lt;/span&gt;
    version. Also worth checking out the discussion in the&amp;nbsp;comments.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html"&gt;Latency numbers every programmer should
    know&lt;/a&gt;
    and the &lt;a href="https://news.ycombinator.com/item?id=4966363"&gt;discussion on
    hackernews&lt;/a&gt; (this is
    not the original source of the data, but a particularly good
    visualization of it nevertheless - see also &lt;a href="https://hype-free.googlecode.com/svn/trunk/latency.html"&gt;my extended
    version&lt;/a&gt;
    which allows you to transform the numbers into whichever time-unit -
    s, ms, us - you&amp;nbsp;need).&lt;/li&gt;
&lt;li&gt;From the &amp;#8220;Falsehoods programmers believe about X&amp;#8221; department comes:&lt;ul&gt;
&lt;li&gt;&lt;a href="http://pozorvlak.livejournal.com/174763.html"&gt;Falsehoods programmers believe about build
    systems&lt;/a&gt;
    (additionally to the comments on the post, also see &lt;a href="http://www.reddit.com/r/programming/comments/14eo9w/falsehoods_programmers_believe_about_build_systems/"&gt;the
    discussion on
    Reddit&lt;/a&gt;
    and &lt;a href="http://www.evanjones.ca/build-java.html"&gt;a follow-up
    blogpost&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/"&gt;Falsehoods Programmers Believe About&amp;nbsp;Names&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time"&gt;Falsehoods programmers believe about
    time&lt;/a&gt;
    and &lt;a href="http://infiniteundo.com/post/25509354022/more-falsehoods-programmers-believe-about-time-wisdom"&gt;More falsehoods programmers believe about&amp;nbsp;time&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A video giving an overview of the different Google systems (search,
    map-reduce, &lt;span class="caps"&gt;GFS&lt;/span&gt;, etc). Nothing revolutionary, but a good first-time
    overview:&lt;br /&gt;
   &lt;iframe width="480" height="360" src="https://www.youtube-nocookie.com/embed/modXC5IWTJI" frameborder="0" allowfullscreen="allowfullscreen"&gt;
    &lt;/iframe&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy holiday reading/watching to&amp;nbsp;all!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 31 Dec 2012 11:24:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-12-31:2012/12/what-every-programmer-should-know-about.html</guid></item><item><title>Ensuring the order of execution for tasks</title><link>https://www.grey-panther.net/2012/12/ensuring-order-of-execution-for-tasks.html</link><description>&lt;p&gt;&lt;em&gt;This post was originally published as part of the &lt;a href="http://www.javaadvent.com/2012/12/ensuring-order-of-execution-for-tasks.html"&gt;Java Advent
series&lt;/a&gt;.
If you like it, please spread the word by sharing, tweeting, &lt;span class="caps"&gt;FB&lt;/span&gt;, G+ and
so on! Want to write for the Java Advent blog? We are looking for
contributors to fill all 24 slot and would love to have your
contribution! &lt;a href="mailto:dify.ltd@gmail.com"&gt;Contact Attila Balazs&lt;/a&gt; to&amp;nbsp;contribute!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Sometimes it is necessary to impose certain order on the tasks in a
threadpool. &lt;a href="http://www.javaspecialists.eu/archive/Issue206.html"&gt;Issue 206 of the JavaSpecialists
newsletter&lt;/a&gt;
presents one such case: we have multiple connections from which we read
using &lt;span class="caps"&gt;NIO&lt;/span&gt;. We need to ensure that events from a given connection are
executed in-order but events between different connections can be freely&amp;nbsp;mixed.&lt;/p&gt;
&lt;p&gt;I would like to present a similar but slightly different situation: we
have N clients. We would like to execute events from a given client in
the order they were submitted, but events from different clients can be
mixed freely. Also, from time to time, there are &amp;#8220;rollup&amp;#8221; tasks which
involve more than one client. Such tasks should block the tasks for all
involved clients (but not more!). Let&amp;#8217;s see a diagram of the&amp;nbsp;situation:&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;

![](http://1.bp.blogspot.com/-TuCHb25JBqM/&lt;span class="caps"&gt;UNOOV5&lt;/span&gt;-EjwI/AAAAAAAAFo4/KoIJZOXz2Y8/s320/Untitled%2Bdrawing%2B%25281%2529.png)

&lt;/div&gt;

&lt;p&gt;As you can see tasks from client A and client B are happily processed in
parallel until a &amp;#8220;rollup&amp;#8221; task comes along. At that point no more tasks
of type A or B can be processed but an unrelated task C can be executed
(provided that there are enough threads). The skeleton of such an
executor is available &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/java-grouped-threadpool/src/main/java/com/blogger/hypefree/GroupedThreadPool.java"&gt;in my
repository&lt;/a&gt;.
The centerpiece is the following&amp;nbsp;interface:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;public interface OrderedTask extends Runnable {
    boolean isCompatible(OrderedTask that);
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Using this interface the threadpool decides if two tasks may be run in
parallel or not (A and B can be run in parallel if
&lt;code&gt;A.isCompatible(B) &amp;amp;&amp;amp; B.isComaptible(A)&lt;/code&gt;). These methods should be
implemented in a fast, non locking and time-invariant&amp;nbsp;manner.&lt;/p&gt;
&lt;p&gt;The algorithm behind this threadpool is as&amp;nbsp;follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the task to be added doesn&amp;#8217;t conflict with any existing tasks,
    add it to the thread with the fewest&amp;nbsp;elements.&lt;/li&gt;
&lt;li&gt;If it conflicts with elements from exactly one thread, schedule it
    to be executed on that thread (and implicitly &lt;em&gt;after&lt;/em&gt; the
    conflicting elements which ensures that the order of submission is&amp;nbsp;maintained)&lt;/li&gt;
&lt;li&gt;If it conflicts with multiple threads, add tasks (shown with red
    below) on all but the first one of them on which a task on the first
    thread will wait, after which it will execute the original&amp;nbsp;task.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;

![](http://4.bp.blogspot.com/-IcwKi0hwcyA/UNSsiYecUPI/AAAAAAAAFpU/zk41QVcuxLo/s320/Untitled%2Bdrawing%2B%25282%2529.png)

&lt;/div&gt;

&lt;p&gt;More information about the&amp;nbsp;implementation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The code is only a proof-of-concept, some more would would be needed
    to make it production quality (it needs code for exception handling
    in tasks, proper shutdown,&amp;nbsp;etc)&lt;/li&gt;
&lt;li&gt;For maximum performance it uses lock-free* structures where
    available: each worker thread has an associated
    ConcurrentLinkedQueue. To achieve the sleep-until-work-is-available
    semantics, an additional Semaphore is&amp;nbsp;used**&lt;/li&gt;
&lt;li&gt;To be able to compare a new OrderedTask with currently executing
    ones, a copy of their reference is kept. This list of copies is
    updated whenever new elements are enqueued (this is has the
    potential of memory leaks and if tasks are infrequent enough
    alternatives - like an additional timer for weak references - should
    be&amp;nbsp;investigated)&lt;/li&gt;
&lt;li&gt;Compared to the solution in the JavaSpecialists newsletter, this is
    more similar to a fixed thread pool executor, while the solution
    from the newsletter is similar to a cached thread pool&amp;nbsp;executor.&lt;/li&gt;
&lt;li&gt;This implementation is ideal if (a) the tasks are (mostly) short and
    (mostly) uniform and (b) there are few (one or two) threads
    submitting new tasks, since multiple submissions are mutually
    exclusive (but submission and execution&amp;nbsp;isn&amp;#8217;t)&lt;/li&gt;
&lt;li&gt;If immediately after a &amp;#8220;rollup&amp;#8221; is submitted (and before it can be
    executed) tasks of the same kind are submitted, they will
    unnecessarily be forced on one thread. We could add code rearrange
    tasks after the rollup task finished if this becomes an&amp;nbsp;issue.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Have fun with &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/java-grouped-threadpool/src/main/java/com/blogger/hypefree/GroupedThreadPool.java"&gt;the source
code&lt;/a&gt;!
(maybe some day I&amp;#8217;ll find the time to remove all the rough&amp;nbsp;edges).&lt;/p&gt;
&lt;p&gt;* somewhat of a misnomer, since there are still locks, only at a
lower - &lt;span class="caps"&gt;CPU&lt;/span&gt; not &lt;span class="caps"&gt;OS&lt;/span&gt; - level, but this is the accepted&amp;nbsp;terminology&lt;/p&gt;
&lt;p&gt;** - benchmarking indicated this to be the most performant solution.
This was inspired from the implementation of the&amp;nbsp;ThreadPoolExecutor.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Meta: this post is part of the &lt;a href="http://javaadvent.com/"&gt;Java Advent
Calendar&lt;/a&gt; and is licensed under the &lt;a href="https://creativecommons.org/licenses/by/3.0/"&gt;Creative
Commons 3.0 Attribution&lt;/a&gt;
license. If you like it, please spread the word by sharing, tweeting,
&lt;span class="caps"&gt;FB&lt;/span&gt;, G+ and so on! Want to write for the blog? We are looking for
contributors to fill all 24 slot and would love to have your
contribution! &lt;a href="mailto:dify.ltd@gmail.com"&gt;Contact Attila Balazs&lt;/a&gt; to&amp;nbsp;contribute!&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 21 Dec 2012 21:13:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-12-21:2012/12/ensuring-order-of-execution-for-tasks.html</guid><category>multithreading</category><category>java advent</category><category>java</category></item><item><title>Java Runtime options</title><link>https://www.grey-panther.net/2012/12/java-runtime-options.html</link><description>&lt;p&gt;&lt;em&gt;This post was originally published as part of the &lt;a href="http://www.javaadvent.com/2012/12/java-runtime-options.html"&gt;Java Advent
series&lt;/a&gt;. If
you like it, please spread the word by sharing, tweeting, &lt;span class="caps"&gt;FB&lt;/span&gt;, G+ and so
on! Want to write for the Java Advent blog? We are looking for
contributors to fill all 24 slot and would love to have your
contribution! &lt;a href="mailto:dify.ltd@gmail.com"&gt;Contact Attila Balazs&lt;/a&gt; to&amp;nbsp;contribute!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The Java runtime is a complex beast - and it has to be since it runs
officially on seven platforms and unofficially on many more. Give this,
it is normal that there are many knobs and dials to control how things
function. The more well known ones&amp;nbsp;are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;-Xmx for the maximum heap&amp;nbsp;size&lt;/li&gt;
&lt;li&gt;-client and -server for selecting the default set of parameters from
    classes of&amp;nbsp;defaults&lt;/li&gt;
&lt;li&gt;-&lt;span class="caps"&gt;XX&lt;/span&gt;:MaxPermGen for controlling the permanent generation&amp;nbsp;size&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other than these, it is (very) rarely the case that you need to change
the defaults. However, thanks to Java being open source you can see the
list of options, their default values and a short explanation directly
&lt;a href="http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/b92c45f2bc75/src/share/vm/runtime/globals.hpp"&gt;from the source
code&lt;/a&gt;.
Currently there are almost 800 options in&amp;nbsp;there!&lt;/p&gt;
&lt;p&gt;An other way to see the options (but one which doesn&amp;#8217;t display the
explanations unfortunately) is the following&amp;nbsp;command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;java -XX:+UnlockDiagnosticVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;These options are well worth studying. Not for tweaking them (since
there is a wealth of testing behind the defaults the extent of which
would be very hard to replicate), but rather to understand the different
functionalities offered by the &lt;span class="caps"&gt;JVM&lt;/span&gt; (for example &lt;a href="http://hype-free.blogspot.com/2009/07/why-cant-i-see-stacktrace-under-java.html"&gt;why you might not see
stacktraces in
exceptions&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Meta: this post is part of the &lt;a href="http://javaadvent.com/"&gt;Java Advent
Calendar&lt;/a&gt; and is licensed under the &lt;a href="https://creativecommons.org/licenses/by/3.0/"&gt;Creative
Commons 3.0 Attribution&lt;/a&gt;
license. If you like it, please spread the word by sharing, tweeting,
&lt;span class="caps"&gt;FB&lt;/span&gt;, G+ and so on! Want to write for the blog? We are looking for
contributors to fill all 24 slot and would love to have your
contribution! &lt;a href="mailto:dify.ltd@gmail.com"&gt;Contact Attila Balazs&lt;/a&gt; to&amp;nbsp;contribute!&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 21 Dec 2012 21:06:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-12-21:2012/12/java-runtime-options.html</guid><category>command line</category><category>java advent</category><category>java</category></item><item><title>Changes to String.substring in Java 7</title><link>https://www.grey-panther.net/2012/12/changes-to-stringsubstring-in-java-7.html</link><description>&lt;p&gt;&lt;em&gt;This post was originally published as part of the &lt;a href="http://www.javaadvent.com/2012/12/changes-to-stringsubstring-in-java-7.html"&gt;Java Advent
series&lt;/a&gt;.
If you like it, please spread the word by sharing, tweeting, &lt;span class="caps"&gt;FB&lt;/span&gt;, G+ and
so on! Want to write for the Java Advent blog? We are looking for
contributors to fill all 24 slot and would love to have your
contribution! &lt;a href="mailto:dify.ltd@gmail.com"&gt;Contact Attila Balazs&lt;/a&gt; to&amp;nbsp;contribute!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It is common knowledge that Java optimizes the substring operation for
the case where you generate a lot of substrings of the same source
string. It does this by using the &lt;code&gt;(value, offset, count)&lt;/code&gt; way of
storing the information. See an example&amp;nbsp;below:&lt;/p&gt;
&lt;div class="separator" style="text-align: center"&gt;

![](http://4.bp.blogspot.com/-gnaLPXGMeUQ/UMIaKhQ5wsI/AAAAAAAAFn8/wNPgGPtE2qY/s320/Untitled%2Bdrawing.png)

&lt;/div&gt;

&lt;p&gt;In the above diagram you see the strings &amp;#8220;Hello&amp;#8221; and &amp;#8220;World!&amp;#8221; derived
from &amp;#8220;Hello World!&amp;#8221; and the way they are represented in the heap: there
is one character array containing &amp;#8220;Hello World!&amp;#8221; and two references to
it. This method of storage is advantageous in some cases, for example
for a compiler which tokenizes source files. In other instances it may
lead you to an OutOfMemorError (if you are routinely reading long
strings and only keeping a small part of it - but the above mechanism
prevents the &lt;span class="caps"&gt;GC&lt;/span&gt; from collecting the original String buffer). Some even
&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4513622"&gt;call it a
bug&lt;/a&gt;. I
wouldn&amp;#8217;t go so far, but it&amp;#8217;s certainly a leaky abstraction because you
were forced to do the following to ensure that a copy was made:
&lt;code&gt;new String(str.substring(5, 6))&lt;/code&gt;.&lt;/p&gt;
&lt;div class="separator" style="text-align: center"&gt;

![](http://3.bp.blogspot.com/-NGSJS_psCIc/UMW40g0NLXI/AAAAAAAAFoQ/7kfOVA8JdC0/s320/Untitled%2Bdrawing.png)

&lt;/div&gt;

&lt;p&gt;This all changed in &lt;a href="http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-May/010257.html"&gt;May of
2012&lt;/a&gt;
or Java 7u6. The pendulum is swung back and now full copies are made by
default. What does this mean for&amp;nbsp;you?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For most probably it is just a nice piece of Java&amp;nbsp;trivia&lt;/li&gt;
&lt;li&gt;If you are writing parsers and such, you can not rely any more on
    the implicit caching provided by String. You will need to implement
    a similar mechanism based on buffering and a custom implementation
    of&amp;nbsp;CharSequence&lt;/li&gt;
&lt;li&gt;If you were doing &lt;code&gt;new String(str.substring)&lt;/code&gt; to force a copy of the
    character buffer, you can stop as soon as you update to the latest
    Java 7 (and you need to do that quite soon since &lt;a href="https://blogs.oracle.com/java/entry/end_of_public_updates_for"&gt;Java 6 is being
    EOLd as we
    speak&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thankfully the development of Java is an open process and such
information is at the fingertips of&amp;nbsp;everyone!&lt;/p&gt;
&lt;p&gt;A couple of more references (since we don&amp;#8217;t say pointers in Java :-))
related to&amp;nbsp;Strings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you are storing the same string over and over again (maybe you&amp;#8217;re
    parsing messages from a socket for example), you should &lt;a href="http://hype-free.blogspot.ro/2010/03/stringintern-there-are-better-ways.html"&gt;read up on
    alternatives to
    String.intern()&lt;/a&gt;
    (and also consider reading chapter 50 from the second edition of
    Effective Java: Avoid strings where other types are more&amp;nbsp;appropriate)&lt;/li&gt;
&lt;li&gt;Look into (and do benchmarks before using them!) options like
    UseCompressedStrings (which &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7129417"&gt;seems to have been
    removed&lt;/a&gt;),
    UseStringCache and&amp;nbsp;StringCache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hope I didn&amp;#8217;t strung you along too much and you found this useful! Until
next time&lt;br /&gt;
- Attila&amp;nbsp;Balazs&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Meta: this post is part of the &lt;a href="http://javaadvent.com/"&gt;Java Advent&lt;br /&gt;
Calendar&lt;/a&gt; and is licensed under the &lt;a href="https://creativecommons.org/licenses/by/3.0/"&gt;Creative
Commons 3.0 Attribution&lt;/a&gt;
license. If you like it, please spread the word by sharing, tweeting,
&lt;span class="caps"&gt;FB&lt;/span&gt;, G+ and so on! Want to write for the blog? We are looking for
contributors to fill all 24 slot and would love to have your
contribution! &lt;a href="mailto:dify.ltd@gmail.com"&gt;Contact Attila Balazs&lt;/a&gt; to&amp;nbsp;contribute!&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 12 Dec 2012 10:37:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-12-12:2012/12/changes-to-stringsubstring-in-java-7.html</guid><category>java7</category><category>string</category><category>java advent</category><category>java</category></item><item><title>(Re)Start me up!</title><link>https://www.grey-panther.net/2012/12/restart-me-up.html</link><description>&lt;p&gt;&lt;em&gt;This post was originally published as part of the &lt;a href="http://www.javaadvent.com/2012/12/restart-me-up.html"&gt;Java Advent
series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There are cases where you would like to start a Java process identical
to the current one (or at least using the the same &lt;span class="caps"&gt;JVM&lt;/span&gt; with tweaked
parameters). Some concrete cases where this would be&amp;nbsp;useful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Auto-tuning the maximum memory parameters (ie. you have an algorithm
    to determine the optimal value - for example: 80% of the system
    memory - and your &lt;span class="caps"&gt;JVM&lt;/span&gt; wasn&amp;#8217;t started with that particular&amp;nbsp;value)&lt;/li&gt;
&lt;li&gt;Creating a cluster of processes for high(er)-availability (true &lt;span class="caps"&gt;HA&lt;/span&gt;
    implies multiple physical nodes) or because processes have different
    roles (like the components in&amp;nbsp;MongoDB).&lt;/li&gt;
&lt;li&gt;Daemonizing the current process (that is, the background process
    should run even after the launching process has terminated) - this
    is a very frequent modus-operandi for programs on *nix systems
    where you have the foreground &amp;#8220;control&amp;#8221; process and the background
    &amp;#8220;daemon&amp;#8221; process (not to be confused with the &amp;#8220;daemon&amp;#8221;&amp;nbsp;threads).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Doing this is relatively simple - and can be done in pure Java - after
you find the correct &lt;span class="caps"&gt;API&lt;/span&gt;&amp;nbsp;calls:&lt;/p&gt;
&lt;p&gt;&lt;span class="dquo"&gt;&amp;#8220;&lt;/span&gt;` {style=&amp;#8221;overflow: auto;&amp;#8221;}
List arguments = new ArrayList();
// the java executable
arguments
  .add(String.format(&amp;#8220;%s%sbin%sjava&amp;#8221;,
    System.getProperty(&amp;#8220;java.home&amp;#8221;), File.separator,
    File.separator));
// pre-execuable arguments (like -D, -agent, etc)
arguments.addAll(ManagementFactory.getRuntimeMXBean()&amp;nbsp;.getInputArguments());&lt;/p&gt;
&lt;p&gt;String classPath = System.getProperty(&amp;#8220;java.class.path&amp;#8221;), javaExecutable = System
  .getProperty(&amp;#8220;sun.java.command&amp;#8221;);
if (classPath.equals(javaExecutable)) {
 // was started with -jar
 arguments.add(&amp;#8220;-jar&amp;#8221;);
 arguments.add(javaExecutable);
} else {
 arguments.add(&amp;#8220;-classpath&amp;#8221;);
 arguments.add(classPath);
 arguments.add(javaExecutable);&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;// we might add additional arguments here which will be received by the
// launched program
// in its args[] paramater&amp;nbsp;arguments.add(&amp;#8220;runme&amp;#8221;);&lt;/p&gt;
&lt;p&gt;// launch it!
new ProcessBuilder().command(arguments).start();&amp;nbsp;&amp;#8220;`&lt;/p&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Some explanations about to the&amp;nbsp;code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is largely inspired from &lt;a href="https://github.com/brianm/gressil"&gt;this&amp;nbsp;project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;We suppose that the java executable is named &lt;code&gt;java&lt;/code&gt; and is located
    in &lt;code&gt;bin/java&lt;/code&gt; relative to &lt;code&gt;java.home&lt;/code&gt;. We use &lt;code&gt;File.separator&lt;/code&gt; for
    the code to be&amp;nbsp;portable.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.oracle.com/javase/7/docs/api/java/lang/management/RuntimeMXBean.html#getInputArguments%28%29"&gt;getInputArguments&lt;/a&gt;
    is used to get specific arguments passed to the &lt;span class="caps"&gt;JVM&lt;/span&gt; (like &lt;code&gt;-Xmx&lt;/code&gt;).
    It does &lt;strong&gt;not&lt;/strong&gt; include the&amp;nbsp;classpath.&lt;/li&gt;
&lt;li&gt;Which is taken from &lt;code&gt;java.class.path&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Finally, there is one heuristic step: we try to detect if we were
    launched using the &lt;code&gt;-jar myjar.jar&lt;/code&gt; syntax or the &lt;code&gt;MyMainClass&lt;/code&gt;
    syntax and replicate&amp;nbsp;it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is it! After that we use
&lt;a href="http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html"&gt;ProcessBuilder&lt;/a&gt;
(which we should always favour over Runtime.exec because it auto-escapes
the parts of the command line for&amp;nbsp;us).&lt;/p&gt;
&lt;p&gt;A final thought: if you intend to use this method to &amp;#8220;daemonize&amp;#8221; a
process (that is: to ensure that it stays running after its parent
process has terminated) you should do two&amp;nbsp;things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Redirect the standard input and output. By default they are
    redirected into temporary buffers and the &lt;span class="caps"&gt;JVM&lt;/span&gt; will seemingly
    randomly terminate when those buffers (pipes) fill&amp;nbsp;up.&lt;/li&gt;
&lt;li&gt;Under Windows use &lt;code&gt;javaw&lt;/code&gt; instead of &lt;code&gt;java&lt;/code&gt;. This ensures that the
    process won&amp;#8217;t be tied to the console it was started from (however it
    will still be tied to the user login session and will terminate when
    the user logs out - for a more heavy-duty solution look into the
    &lt;a href="http://wrapper.tanukisoftware.com/doc/english/download.jsp"&gt;Java Service
    Wrapper&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is it for today, hope you enjoyed it, fond it useful. If you run
the code and it doesn&amp;#8217;t work as advertised, let me know so that I can
update it (I&amp;#8217;m especially interested if it works with non Sun/Oracle
JVMs). Come back tomorrow for an other&amp;nbsp;article!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Meta: this post is part of the &lt;a href="http://javaadvent.com/"&gt;Java Advent
Calendar&lt;/a&gt; and is licensed under the &lt;a href="https://creativecommons.org/licenses/by/3.0/"&gt;Creative
Commons 3.0 Attribution&lt;/a&gt;&amp;nbsp;license.&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 01 Dec 2012 18:24:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-12-01:2012/12/restart-me-up.html</guid><category>fork</category><category>daemon</category><category>launch</category><category>process</category><category>java advent</category><category>java</category></item><item><title>Upgrading from MySQL to MariaDB on Ubuntu</title><link>https://www.grey-panther.net/2012/11/upgrading-from-mysql-to-mariadb-on.html</link><description>&lt;p&gt;So you decided that Oracle doesn&amp;#8217;t know its left foot from the back of
his neck when it comes to open source (how&amp;#8217;s that for a mixed metaphor),
but you are not ready just yet to migrate over to PostgreSQL? Consider
&lt;a href="https://en.wikipedia.org/wiki/MariaDB"&gt;MariaDB&lt;/a&gt;. Coming from Monty
Widenius, the original author of MySQL, it aims to be 100% MySQL
compatible while also being truly&amp;nbsp;open-source.&lt;/p&gt;
&lt;p&gt;Give that it&amp;#8217;s 100% MySQL compatible, you can update in-place
(nevertheless it is recommended that do a backup of your data first).
The steps are roughly adapted from
&lt;a href="http://www.sagetree.com/sage-advice/christoph-weber/replace-mysql-mariadb-ubuntu-1204-lts"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to the &lt;a href="https://downloads.mariadb.org/mariadb/repositories/"&gt;MariaDB repository configuration
    tool&lt;/a&gt; and
    generate your .list file (wondering what&amp;#8217;s up with the 5.5 vs 10.0
    version? See &lt;a href="https://en.wikipedia.org/wiki/MariaDB#Versioning"&gt;this short
    explanation&lt;/a&gt;). You
    don&amp;#8217;t know the exact Ubuntu version you&amp;#8217;re running? Just use
    &lt;code&gt;lsb_release -a&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Save the generated file under &lt;code&gt;/etc/apt/sources.list.d/MariaDB.list&lt;/code&gt;
    as recommended and do an &lt;code&gt;sudo aptitude update&lt;/code&gt;. You should see an
    output complaining about some public&amp;nbsp;keys.&lt;/li&gt;
&lt;li&gt;Do
    &lt;code&gt;sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xCBCB082A1BB943DB&lt;/code&gt;
    to add those keys (replace the last number with the one you saw in
    the previous&amp;nbsp;output).&lt;/li&gt;
&lt;li&gt;Issue &lt;code&gt;sudo apt-cache policy mysql-common&lt;/code&gt; and you should see
    mariadb as an upgrade&amp;nbsp;option.&lt;/li&gt;
&lt;li&gt;Finally do &lt;code&gt;sudo aptitude upgrade mysql-common libmysqlclient18&lt;/code&gt; and
    watch your MySQL database being transformed into a MariaDB one and
    all keeping chugging along just as&amp;nbsp;usual!&lt;/li&gt;
&lt;/ol&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 25 Nov 2012 11:14:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-11-25:2012/11/upgrading-from-mysql-to-mariadb-on.html</guid><category>database</category><category>mysql</category><category>ubuntu</category><category>mariadb</category></item><item><title>Cluj-Napoca (Romania) wins the title of European Youth Capital 2015</title><link>https://www.grey-panther.net/2012/11/cluj-napoca-romania-wins-title-of.html</link><description>&lt;p&gt;We interrupt our regular (lack of) posting to bring you this&amp;nbsp;news:&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;

![](http://4.bp.blogspot.com/-cJh3GYVhtbA/ULHdZ2-l8pI/AAAAAAAAFkU/CeHgOqxbKhA/s320/18089_10151270244849851_235858203_n.jpg)

&lt;/div&gt;

&lt;p&gt;&lt;a href="http://youthforum.org/index.php?option=com_content&amp;amp;view=category&amp;amp;layout=blog&amp;amp;id=28&amp;amp;Itemid=89&amp;amp;lang=en"&gt;Cluj-Napoca is European Youth Capital
2015&lt;/a&gt;.
Congratulation to everyone&amp;nbsp;involved!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 25 Nov 2012 10:58:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-11-25:2012/11/cluj-napoca-romania-wins-title-of.html</guid><category>advocacy</category><category>news</category><category>local</category></item><item><title>Writing beautiful code - not just for the aesthetic value</title><link>https://www.grey-panther.net/2012/11/writing-beautiful-code-not-just-for.html</link><description>&lt;p&gt;&lt;em&gt;This article was originally published in &lt;a href="http://www.todaysoftmag.com/article/ro/6/A_scrie_cod_frumos_-_dincolo_de_valoarea_estetica_159"&gt;the 6th edition of
TodaySoftMag in
Romanian&lt;/a&gt;
and on the &lt;a href="http://www.transylvania-jug.org/archives/5477"&gt;Transylvania &lt;span class="caps"&gt;JUG&lt;/span&gt; blog in
English&lt;/a&gt;. Reprinted here
with the permission of the author /&amp;nbsp;magazine.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
&lt;iframe src="https://docs.google.com/presentation/embed?id=1fC4qeDc4zkKGaLZBMrRdgmRMuoDw4KeYmmJAZvVVFLY&amp;amp;start=false&amp;amp;loop=false&amp;amp;delayms=3000" frameborder="0" width="480" height="389" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"&gt;
&lt;/iframe&gt;
&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;Most mainstream programming languages contain a large set of features
and diverse standard libraries. Because of this it becomes important to
know not only “how” you can achieve something (to which there are
usually several answers) but also “what is the recommended&amp;nbsp;way”.&lt;/p&gt;
&lt;p&gt;In this article I will argue that knowing and following the recommended
ways of coding doesn’t only yield shorter (easier to write), easier to
read, understand and maintain code but also prevents programmers from
introducing a lot of&amp;nbsp;bugs.&lt;/p&gt;
&lt;p&gt;This particular article needs a drop of Java language knowledge to
savour, but the fundamental idea can be generalized to any programming
language: there is more to using a language efficiently than just
knowing the&amp;nbsp;syntax.&lt;/p&gt;
&lt;h2&gt;&lt;span id="h.71vcwrw1xmys"&gt;&lt;/span&gt;&lt;/a&gt;Example 1: Double&amp;nbsp;Trouble&lt;/h2&gt;
&lt;p&gt;Lets start with a snippet of code: what does it print&amp;nbsp;out?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Double d1 = (5.0d - 5.0d) *  1.0d;
Double d2 = (5.0d - 5.0d) * -1.0d;
System.out.println(d1.equals(d2));
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;What about the following&amp;nbsp;one?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;double d1 = (5.0d - 5.0d) *  1.0d;
double d2 = (5.0d - 5.0d) * -1.0d;
System.out.println(d1 == d2);
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The answer seems to be clear: in both cases we multiply zero with
different values (plus and minus one respectively), thus the result
should be zero which should compare as equal regardless of the
comparison method used (calling the equals method on objects or using
the equality operator on the primitive&amp;nbsp;values).&lt;/p&gt;
&lt;p&gt;If we run the code, the result might surprise us: the first one displays
false while the second one displays true. What’s going on? On one level
we can talk the technical reasons behind this result: floating point
values are represented in Java (and many other programming languages)
using the sign-and-magnitude notation defined in the &lt;span class="caps"&gt;IEEE&lt;/span&gt; Standard 754.
Because of this technical detail both “plus zero” and “minus zero” can
be represented by variables of this type. And the “equals” method on
Double (and Float) objects in Java considers these values to be&amp;nbsp;distinct.&lt;/p&gt;
&lt;p&gt;On another level however we could have avoided this problem entirely by
using the primitive values as shown in the second code snippet and as
suggested by Item 49 in the Effective Java book^&lt;span
id="ftnt_ref1"&gt;&lt;a href="#ftnt1"&gt;[1]&lt;/a&gt;&lt;/span&gt;^: Prefer primitive types to boxed
primitives. Using primitive types is also more memory efficient and
saves us from having to create special cases for the null&amp;nbsp;value.&lt;/p&gt;
&lt;p&gt;Sidenote: we have a similar situation with the BigDecimal class^&lt;span
id="ftnt_ref2"&gt;&lt;a href="#ftnt2"&gt;[2]&lt;/a&gt;&lt;/span&gt;^ where values scaled differently
don’t compare as equal. For example the following snippet also prints&amp;nbsp;false:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;BigDecimal d1 = new BigDecimal(&amp;quot;1.2&amp;quot;);
BigDecimal d2 = new BigDecimal(&amp;quot;1.20&amp;quot;);
System.out.println(d1.equals(d2));
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The answer in this case (given that there is no primitive equivalent for
this class) would be to use the compareTo method and assert that it
returns zero instead of using the equals method (a method which can also
be used to solve the conundrum in the Double/Float case if we are not
worried about&amp;nbsp;nulls).&lt;/p&gt;
&lt;h2&gt;&lt;span id="h.t3ulkiuv7mcw"&gt;&lt;/span&gt;&lt;/a&gt;Example 2: Where is my null&amp;nbsp;at?&lt;/h2&gt;
&lt;p&gt;What does the following snippet of code print&amp;nbsp;out?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Double v = null;
Double d = true ? v : 0.0d;
System.out.println(d);
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;At first glance we would say: null, since the condition is true and v is
null (and null can be assigned to a reference of any type, so we are
allowed to use it). The actual result is however a NullPointerException
at the second line. This is because the right-hand type of the
assignment is actually double (the primitive type) not Double (as we
would expect) which is silently converted into Double (the boxed type).
The generated code looks like&amp;nbsp;this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Double d = Double.valueOf(true ? v.doubleValue() : 0.0d);
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This behavior is described in the Java Language Specification^&lt;span
id="ftnt_ref3"&gt;&lt;a href="#ftnt3"&gt;[3]&lt;/a&gt;&lt;/span&gt;^:&lt;/p&gt;
&lt;p&gt;“If one of the second and third operands is of primitive type T, and the
type of the other is the result of applying boxing conversion (§5.1.7)
to T, then the type of the conditional expression is&amp;nbsp;T.”&lt;/p&gt;
&lt;p&gt;I would venture to guess that not many of us have read the &lt;span class="caps"&gt;JLS&lt;/span&gt; in its
entirety and even if we would have read it, we might not have realized
the implications of each phrase. The recommendation from EJ2nd mentioned
at the previous example saves us again: we should use primitive types.
We can also draw a parallel with Item 43: Return empty arrays or
collections, not nulls. Would we have used a “neutral element”, which is
analogous to using empty arrays/collections, the problem would not have
appeared. (The neutral element would be 0.0d if we use the value later
in summation or 1.0d if we use it in&amp;nbsp;multiplication.)&lt;/p&gt;
&lt;h2&gt;&lt;span id="h.1mt6ca4376w9"&gt;&lt;/span&gt;&lt;/a&gt;Example 3: We come up&amp;nbsp;empty&lt;/h2&gt;
&lt;p&gt;What is the difference between the following two&amp;nbsp;conditions?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Collection items;
if (items.size() == 0) { ... }
if (items.isEmpty()) { ... }
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;One could argue that they do exactly the same thing as being empty is
equivalent to having zero items. Still, the second condition is easier
to understand (we can almost read it out loud: “if items is empty then
…”). But there is more: in some cases it can be much, much faster. Two
examples from the Java standard libraries where the time needed to
execute “size” grows linearly with the number of elements in the
collection while “isEmpty” returns in constant time:
ConcurrentLinkedQueue^&lt;span id="ftnt_ref4"&gt;&lt;a href="#ftnt4"&gt;[4]&lt;/a&gt;&lt;/span&gt;^ and the
view sets returned by TreeSet’s^&lt;span
id="ftnt_ref5"&gt;&lt;a href="#ftnt5"&gt;[5]&lt;/a&gt;&lt;/span&gt;^ headSet/tailSet methods. And while
the documentation for the first mentions this fact, it doesn’t for the&amp;nbsp;second.&lt;/p&gt;
&lt;p&gt;This is yet another example how nicer code is also&amp;nbsp;faster.&lt;/p&gt;
&lt;h2&gt;&lt;span id="h.orqngpa6ggt9"&gt;&lt;/span&gt;&lt;/a&gt;Example 4: Careful with that static,&amp;nbsp;Eugene!&lt;/h2&gt;
&lt;p&gt;What will the following snippet of code print&amp;nbsp;out?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;public final class Test {
        private static final class Foo {
                static final Foo INSTANCE = new Foo(); // 2
                static final String NAME = Foo.class.getName(); // 3
                Foo() {
                        System.err.println(&amp;quot;Hello, my name is &amp;quot; + NAME);
                }
        }
        public static void main(String[] args) {
                System.err.println(&amp;quot;Your name is what?\nYour name is who?\n&amp;quot;);
                new Foo(); // 1
        }
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It will&amp;nbsp;be&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="x"&gt;Your name is what?&lt;/span&gt;
&lt;span class="x"&gt;Your name is who?&lt;/span&gt;

&lt;span class="x"&gt;Hello, my name is null&lt;/span&gt;
&lt;span class="x"&gt;Hello, my name is Test&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;Foo&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The (probably) unexpected null value happens because we obtain a
reference to a partially constructed&amp;nbsp;object:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We start to create an instance of Foo at point&amp;nbsp;1&lt;/li&gt;
&lt;li&gt;This being the first reference to Foo, the &lt;span class="caps"&gt;JVM&lt;/span&gt; loads it and starts
    to initialize&amp;nbsp;it&lt;/li&gt;
&lt;li&gt;Initializing Foo involves initializing all its static&amp;nbsp;fields&lt;/li&gt;
&lt;li&gt;The initialization of the first static field contains a call to the
    constructor at point 2 which is dutifully&amp;nbsp;executed&lt;/li&gt;
&lt;li&gt;At this point the &lt;span class="caps"&gt;NAME&lt;/span&gt; static field is not yet initialized, so the
    constructor will print out&amp;nbsp;null&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This code demonstrates that static fields can be confusing and we
shouldn’t use them for things other than constants (but even then we
should evaluate if the constant is not better declared as an Enum). By
the same token we should also avoid singletons which make our code
harder to test (thus avoiding them will make the code easier to&amp;nbsp;test).&lt;/p&gt;
&lt;p&gt;We should however favor static member classes over non-static ones (Item
22 in EJ2nd). Static classes in Java are entirely distinct conceptually
from static fields and it is unfortunate that the same word was used to
describe them&amp;nbsp;both.&lt;/p&gt;
&lt;p&gt;We should also run static analysis tools on our code and verify their
output frequently (ideally at every commit). For example the bug
presented is caught by Findbugs^&lt;span
id="ftnt_ref6"&gt;&lt;a href="#ftnt6"&gt;[6]&lt;/a&gt;&lt;/span&gt;^ and tools incorporating&amp;nbsp;Findbugs.&lt;/p&gt;
&lt;h2&gt;&lt;span id="h.26ynxgfuhslr"&gt;&lt;/span&gt;&lt;/a&gt;Example 5: Remove old&amp;nbsp;cruft&lt;/h2&gt;
&lt;p&gt;Name four things wrong with the following&amp;nbsp;snippet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;// WRONG! DON’T DO THIS!
Vector v1;
...
if (!v1.contains(s)) { v1.add(s); }
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;They would&amp;nbsp;be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The wrong container type is used. We clearly want to have each
    string present at most once which suggests using a&amp;nbsp;Set&lt;/li&gt;
&lt;li&gt;which has the benefits of shorter and faster code (the above method
    gets linearly slower with the number of&amp;nbsp;elements)&lt;/li&gt;
&lt;li&gt;Doesn’t use&amp;nbsp;generics&lt;/li&gt;
&lt;li&gt;It unnecessarily synchronizes access to the structure if it is only
    used from a single&amp;nbsp;thread&lt;/li&gt;
&lt;li&gt;If the structure is actually used from multiple threads, the code is
    not thread safe, only “exception safe” (as in: no exceptions will be
    raised, but the data structure can be silently corrupted possibly
    creating a lot of headache&amp;nbsp;downstream)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these can be avoided by dropping Vector and its siblings
(Hashtable, StringBuffer) and using the Java Collection Framework
(available for 14 years^&lt;span id="ftnt_ref7"&gt;&lt;a href="#ftnt7"&gt;[7]&lt;/a&gt;&lt;/span&gt;^) with
generics (available for 8 years^&lt;span
id="ftnt_ref8"&gt;&lt;a href="#ftnt8"&gt;[8]&lt;/a&gt;&lt;/span&gt;^).&lt;/p&gt;
&lt;h2&gt;&lt;span id="h.t7tt7vdn4ji9"&gt;&lt;/span&gt;&lt;/a&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;There are many more examples one could give, but I think the point is
well made that knowing a programming language means more than just
knowing the syntax at a basic level. I’m urging you if you are using
Java: get yourself a copy “Effective Java, 2nd edition” and “Java™
Puzzlers: Traps, Pitfalls, and Corner Cases” each and read through them
if you haven’t done so already. Also, use static analysis on your code
(Sonar^&lt;span id="ftnt_ref9"&gt;&lt;a href="#ftnt9"&gt;[9]&lt;/a&gt;&lt;/span&gt;^ is a good choice in
this domain) and consider fixing the issues signaled by it, or at least
read up on&amp;nbsp;them.&lt;/p&gt;
&lt;p&gt;Again, the conclusions is similar for other&amp;nbsp;languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Try reading up on best practices/idiomatic ways to write code in the
    given language. For example for Perl the best book currently is
    “Modern Perl^&lt;span id="ftnt_ref10"&gt;&lt;a href="#ftnt10"&gt;[10]&lt;/a&gt;&lt;/span&gt;^” by&amp;nbsp;chromatic&lt;/li&gt;
&lt;li&gt;Look to see if there is a good quality static analysis / lint
    program for your language. For Perl there is Perl::Critic^&lt;span
    id="ftnt_ref11"&gt;&lt;a href="#ftnt11"&gt;[11]&lt;/a&gt;&lt;/span&gt;^, for Python there is
    pep8^&lt;span id="ftnt_ref12"&gt;&lt;a href="#ftnt12"&gt;[12]&lt;/a&gt;&lt;/span&gt;^ and pylint^&lt;span
    id="ftnt_ref13"&gt;&lt;a href="#ftnt13"&gt;[13]&lt;/a&gt;&lt;/span&gt;^, all of which are free and
    open&amp;nbsp;source&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Being good a programmer (or an architect, or a business analyst, etc) is
process of lifelong learning and these are the tools which can help us
truly learn a programming&amp;nbsp;language.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;

&lt;span id="ftnt1"&gt;[[1]](#ftnt_ref1)&lt;/span&gt;Joshua Bloch: Effective Java,
Second Edition. &lt;span class="caps"&gt;ISBN&lt;/span&gt;: 0321356683

&lt;/div&gt;

&lt;div&gt;

&lt;span
id="ftnt2"&gt;[[2]](#ftnt_ref2)&lt;/span&gt;&lt;http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;span
id="ftnt3"&gt;[[3]](#ftnt_ref3)&lt;/span&gt;&lt;http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.25&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;span
id="ftnt4"&gt;[[4]](#ftnt_ref4)&lt;/span&gt;&lt;http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html#size()&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;span
id="ftnt5"&gt;[[5]](#ftnt_ref5)&lt;/span&gt;&lt;http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;span
id="ftnt6"&gt;[[6]](#ftnt_ref6)&lt;/span&gt;&lt;http://findbugs.sourceforge.net/bugDescriptions.html#SI_INSTANCE_BEFORE_FINALS_ASSIGNED&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;span
id="ftnt7"&gt;[[7]](#ftnt_ref7)&lt;/span&gt;&lt;http://en.wikipedia.org/wiki/Java_version_history#J2SE_1.2_.28December_8.2C_1998.29&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;span
id="ftnt8"&gt;[[8]](#ftnt_ref8)&lt;/span&gt;&lt;http://en.wikipedia.org/wiki/Java_version_history#J2SE_5.0_.28September_30.2C_2004.29&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;span id="ftnt9"&gt;[[9]](#ftnt_ref9)&lt;/span&gt;&lt;http://www.sonarsource.org/&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;span
id="ftnt10"&gt;[[10]](#ftnt_ref10)&lt;/span&gt;&lt;http://www.onyxneon.com/books/modern_perl/index.html&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;span
id="ftnt11"&gt;[[11]](#ftnt_ref11)&lt;/span&gt;&lt;http://search.cpan.org/~thaljef/Perl-Critic-1.118/lib/Perl/Critic.pm&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;span
id="ftnt12"&gt;[[12]](#ftnt_ref12)&lt;/span&gt;&lt;http://pypi.python.org/pypi/pep8&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;span
id="ftnt13"&gt;[[13]](#ftnt_ref13)&lt;/span&gt;&lt;http://pypi.python.org/pypi/pylint&gt;

&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 06 Nov 2012 14:33:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-11-06:2012/11/writing-beautiful-code-not-just-for.html</guid></item><item><title>A (mostly) cross-platform clickable map of Romanian counties</title><link>https://www.grey-panther.net/2012/11/a-mostly-cross-platform-clickable-map.html</link><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;

[![](http://2.bp.blogspot.com/-efBtXhgduhw/UJItSwviTnI/AAAAAAAAFjw/-D_TsgQlsUs/s320/Screenshot%2Bfrom%2B2012-11-01%2B10%253A02%253A31.png)](http://hype-free.googlecode.com/svn/trunk/map-romania/index.html)

&lt;/div&gt;

&lt;p&gt;&lt;span class="caps"&gt;TL&lt;/span&gt;;&lt;span class="caps"&gt;DR&lt;/span&gt; - I&amp;#8217;ve created a map of Romania&amp;#8217;s counties (judete) using
Javascript which can be used as an alternative for drop-down boxes
during form input. It works great with &lt;span class="caps"&gt;FF&lt;/span&gt; and Chrome :-). See it &lt;a href="http://hype-free.googlecode.com/svn/trunk/map-romania/index.html"&gt;in
action&lt;/a&gt;
and browse &lt;a href="http://code.google.com/p/hype-free/source/browse/#svn%2Ftrunk%2Fmap-romania"&gt;the source
code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The map is based on &lt;a href="https://commons.wikimedia.org/wiki/Atlas_of_Romania"&gt;the &lt;span class="caps"&gt;SVG&lt;/span&gt; drawings from Wikimedia
Commons&lt;/a&gt;
postprocessed in Inkscape to simplify the paths (and to remove the Black
Sea from it). After that it was converted to
&lt;a href="http://raphaeljs.com/"&gt;Raphael.js&lt;/a&gt; using
&lt;a href="http://readysetraphael.com/"&gt;readysetraphael&lt;/a&gt;. I also use
&lt;a href="http://www.shapevent.com/scaleraphael/"&gt;ScaleRaphael&lt;/a&gt; to be able to
render it at an arbitrary size. According to
&lt;a href="http://www.browserstack.com/"&gt;BrowserStack&lt;/a&gt; (a great service well worth
its money &lt;span class="caps"&gt;BTW&lt;/span&gt; if you do web development!) it works with Firefox
(starting with version 3.6), Chrome and Safari. &lt;span class="caps"&gt;IE&lt;/span&gt; has a hard time with
it, but hopefully as the underlying library improves, it will start to
work&amp;nbsp;:-).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 01 Nov 2012 10:06:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-11-01:2012/11/a-mostly-cross-platform-clickable-map.html</guid></item><item><title>Every end is a new beginning</title><link>https://www.grey-panther.net/2012/10/every-end-is-new-beginning.html</link><description>&lt;p&gt;&lt;em&gt;&lt;span class="caps"&gt;TL&lt;/span&gt;;&lt;span class="caps"&gt;DR&lt;/span&gt;: I&amp;#8217;m shutting down the twitfeeder project (it was on lifesupport
for a long time) so I mirrored a technical article from the blog in the
hope that it might be useful for somebody&amp;nbsp;someday.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Proxying &lt;span class="caps"&gt;URL&lt;/span&gt; fetch requests from the Google App&amp;nbsp;Engine&lt;/h3&gt;
&lt;p&gt;Hosting on the Google App Engine means giving up a lot controls: your&lt;br /&gt;
application will run on some machines in one of Google&amp;#8217;s datacenters,&lt;br /&gt;
use some other machines to store data and use yet an other set of&lt;br /&gt;
machines to talk to the outside world (send/receive emails, fetch
URLs,&lt;br /&gt;
etc). You don&amp;#8217;t know the exact identity of these machines (which for&lt;br /&gt;
this article means their external &lt;span class="caps"&gt;IP&lt;/span&gt; address), and even though you can&lt;br /&gt;
find out some of the details (for example by fetching the &lt;a href="http://www.ipchicken.com/"&gt;ipchicken
page&lt;/a&gt;&lt;br /&gt;
and parsing the result or by sending an e-mail and looking at the&lt;br /&gt;
headers), there is no guarantee made that the results are repeatable&lt;br /&gt;
(ie. if you do it again and again you will get the same result) in the&lt;br /&gt;
short or long run. While one might not care about such details most of&lt;br /&gt;
the time, there are some corner cases where it would be nice to have a&lt;br /&gt;
predictable and unique source&amp;nbsp;address:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You might&lt;br /&gt;
    worry that some of the exit points get blocked because other&lt;br /&gt;
    applications on the Google App Engine have an abusive&amp;nbsp;behavior&lt;/li&gt;
&lt;li&gt;You might want a single exit point so that you can &amp;#8220;debug&amp;#8221; your
    traffic at a low (network / tcpdump)&amp;nbsp;level&lt;/li&gt;
&lt;li&gt;And finally, the main reason for which the Twit Feeder uses it: some
    third-party services (like &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt; or
    &lt;a href="http://delicious.com/"&gt;Delicious&lt;/a&gt;) use the source &lt;span class="caps"&gt;IP&lt;/span&gt; to whitelist
    requests to their &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To&lt;br /&gt;
be fair to the &lt;span class="caps"&gt;GAE&lt;/span&gt; Architects: the above considerations don&amp;#8217;t affect&lt;br /&gt;
the main usecase and are more of a cornercase if we look at the
average&lt;br /&gt;
application running on the &lt;span class="caps"&gt;GAE&lt;/span&gt;. Also, having so few commitments (ie.&lt;br /&gt;
they don&amp;#8217;t stipulate things like &amp;#8220;all the &lt;span class="caps"&gt;URL&lt;/span&gt; fetches will come from
the&lt;br /&gt;
10.0.0.1/24 netblock&amp;#8221;) means that they are free to move things around&lt;br /&gt;
(even between datacenters) to optimize uptime and performance which in&lt;br /&gt;
turn benefits the application owners and&amp;nbsp;users.&lt;/p&gt;
&lt;p&gt;Back to&lt;br /&gt;
our scenario: the solution is to introduce an intermediary which has a&lt;br /&gt;
static and well known &lt;span class="caps"&gt;IP&lt;/span&gt; and let it do all the fetching. Ideally I
would&lt;br /&gt;
have installed &lt;a href="http://www.squid-cache.org/"&gt;Squid&lt;/a&gt; and and&lt;br /&gt;
be done with it, but the &lt;span class="caps"&gt;URL&lt;/span&gt; fetch service doesn&amp;#8217;t have support for&lt;br /&gt;
proxies currently. So the solution I came up with looks like&amp;nbsp;this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get&lt;br /&gt;
    a &lt;span class="caps"&gt;VPS&lt;/span&gt; server. I would recommend one which gives you more bandwidth&lt;br /&gt;
    rather than more &lt;span class="caps"&gt;CPU&lt;/span&gt; / memory / disk. It is also a good idea to get
    one&lt;br /&gt;
    in the &lt;span class="caps"&gt;USA&lt;/span&gt; to minimize latency from/to the Google datacenters. I&amp;#8217;m&lt;br /&gt;
    currently using &lt;a href="http://vpslink.com/?ref=PPPMNM"&gt;VPSLink&lt;/a&gt; and I
    didn&amp;#8217;t had any problems (full disclosure: that is a referral link
    and you should get 10% off for lifetime if you use&amp;nbsp;it).&lt;/li&gt;
&lt;li&gt;Install Apache + &lt;span class="caps"&gt;PHP&lt;/span&gt; on&amp;nbsp;it&lt;/li&gt;
&lt;li&gt;Use a simple &lt;span class="caps"&gt;PHP&lt;/span&gt; script to fetch the page encoded in a query
    parameter using the
    &lt;a href="http://www.php.net/manual/en/book.curl.php"&gt;php_curl&lt;/a&gt;&amp;nbsp;extension.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To spice up this blogpost ;-), here is a diagram of the&amp;nbsp;process:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;

![](https://lh4.ggpht.com/_hrvCBhtWhJ4/S1IPu9C6clI/&lt;span class="caps"&gt;AAAAAAAACHI&lt;/span&gt;/YyuBoNYpXOQ/s800/google_app_engine_proxy.png)

&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;A couple of&amp;nbsp;points:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Taking&lt;br /&gt;
    care of a &lt;span class="caps"&gt;VPS&lt;/span&gt; can be challenging, especially if you aren&amp;#8217;t a Linux&lt;br /&gt;
    user. However failing to do so can result in it being taken over
    by&lt;br /&gt;
    malicious individuals. Consider getting a managed &lt;span class="caps"&gt;VPS&lt;/span&gt;. Also, three
    quick&lt;br /&gt;
    security tips: use strong passwords. move the &lt;span class="caps"&gt;SSH&lt;/span&gt; server to a&lt;br /&gt;
    non-standard port and configure your firewall to be as restrictive
    as&lt;br /&gt;
    possible (deny everything, and open ports to only a limited number
    of &lt;span class="caps"&gt;IP&lt;/span&gt;&lt;br /&gt;&amp;nbsp;addresses).&lt;/li&gt;
&lt;li&gt;Yes, this introduces a single point of failure&lt;br /&gt;
    into your application, so plan accordingly (while your application
    is&lt;br /&gt;
    small, this shouldn&amp;#8217;t be a problem - as it grows you can get two
    &lt;span class="caps"&gt;VPS&lt;/span&gt;&amp;#8217;s&lt;br /&gt;
    at two different data centers for example for added&amp;nbsp;reliability).&lt;/li&gt;
&lt;li&gt;The&lt;br /&gt;
    traffic between Google and your &lt;span class="caps"&gt;VPS&lt;/span&gt; can be encrypted using &lt;span class="caps"&gt;TLS&lt;/span&gt;
    (&lt;span class="caps"&gt;HTTPS&lt;/span&gt;).&lt;br /&gt;
    The good news is that the &lt;span class="caps"&gt;URL&lt;/span&gt; fetcher service doesn&amp;#8217;t check the&lt;br /&gt;
    certificates, so you can use self-signed ones. The bad news is that
    the&lt;br /&gt;
    &lt;span class="caps"&gt;URL&lt;/span&gt; fetcher doesn&amp;#8217;t check the certificates, so a determined
    attacker can&lt;br /&gt;
    relatively easily man-in-the-middle you (but it protects the data
    from&lt;br /&gt;
    the casual&amp;nbsp;sniffer).&lt;/li&gt;
&lt;li&gt;Be aware that you need to budget for&lt;br /&gt;
    double of the amount of traffic you estimate using at the &lt;span class="caps"&gt;VPS&lt;/span&gt;
    (because&lt;br /&gt;
    it needs to first download it and then upload it back to Google).
    The&lt;br /&gt;
    &lt;span class="caps"&gt;URL&lt;/span&gt; fetcher service does know how to use gzip compression, so if
    you are&lt;br /&gt;
    downloading mainly text, you shouldn&amp;#8217;t have a bandwidth&amp;nbsp;problem.&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt;&lt;br /&gt;
    might seem like an unusual choice of language, given how most &lt;span class="caps"&gt;GAE&lt;/span&gt;
    users&lt;br /&gt;
    have experience in either Python or Java, but there are a lot of&lt;br /&gt;
    tutorials out there on how to install it (and on modern Linux&lt;br /&gt;
    distribution it can be done in under 10 minutes with the help of
    the&lt;br /&gt;
    package manager) and it was the one I was most comfortable with as
    an&lt;br /&gt;
    Apache&amp;nbsp;module.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without further ado, here are the relevant sourcecode snippets (which I
hereby release into the public&amp;nbsp;domain):&lt;/p&gt;
&lt;p&gt;The &lt;span class="caps"&gt;PHP&lt;/span&gt;&amp;nbsp;script:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="x"&gt; 0) &lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="x"&gt;   curl_setopt(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;ch&lt;/span&gt;&lt;span class="x"&gt;, CURLOPT_POST, true);&lt;/span&gt;
&lt;span class="x"&gt;   &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;postfields&lt;/span&gt;&lt;span class="x"&gt; = array();&lt;/span&gt;
&lt;span class="x"&gt;   foreach (&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;_POST&lt;/span&gt;&lt;span class="x"&gt; as &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="x"&gt; =&amp;gt; &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;val&lt;/span&gt;&lt;span class="x"&gt;) &lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="x"&gt;       &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;postfields&lt;/span&gt;&lt;span class="x"&gt;[] = urlencode(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="x"&gt;) . &amp;#39;=&amp;#39; . urlencode(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;val&lt;/span&gt;&lt;span class="x"&gt;);&lt;/span&gt;
&lt;span class="x"&gt;   }&lt;/span&gt;
&lt;span class="x"&gt;   curl_setopt(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;ch&lt;/span&gt;&lt;span class="x"&gt;, CURLOPT_POSTFIELDS, implode(&amp;#39;&amp;amp;&amp;#39;, &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;postfields&lt;/span&gt;&lt;span class="x"&gt;));&lt;/span&gt;
&lt;span class="x"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;headers&lt;/span&gt;&lt;span class="x"&gt; = array();&lt;/span&gt;
&lt;span class="x"&gt;function header_callback(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;ch&lt;/span&gt;&lt;span class="x"&gt;, &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;header&lt;/span&gt;&lt;span class="x"&gt;) &lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="x"&gt;   global &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;headers&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt;
&lt;span class="x"&gt;   // we add our own content encoding&lt;/span&gt;
&lt;span class="x"&gt;   // also, the content length might vary because of this&lt;/span&gt;
&lt;span class="x"&gt;   if (false === stripos(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;header&lt;/span&gt;&lt;span class="x"&gt;, &amp;#39;Content-Encoding: &amp;#39;)&lt;/span&gt;
&lt;span class="x"&gt;       &amp;amp;&amp;amp; false === stripos(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;header&lt;/span&gt;&lt;span class="x"&gt;, &amp;#39;Content-Length: &amp;#39;)&lt;/span&gt;
&lt;span class="x"&gt;       &amp;amp;&amp;amp; false === stripos(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;header&lt;/span&gt;&lt;span class="x"&gt;, &amp;#39;Transfer-Encoding: &amp;#39;)) &lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="x"&gt;       &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;headers&lt;/span&gt;&lt;span class="x"&gt;[] = &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;header&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt;
&lt;span class="x"&gt;   }&lt;/span&gt;
&lt;span class="x"&gt;   return strlen(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;header&lt;/span&gt;&lt;span class="x"&gt;);&lt;/span&gt;
&lt;span class="x"&gt;}&lt;/span&gt;

&lt;span class="x"&gt;curl_setopt(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;ch&lt;/span&gt;&lt;span class="x"&gt;, CURLOPT_HEADERFUNCTION, &amp;#39;header_callback&amp;#39;);&lt;/span&gt;

&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;output&lt;/span&gt;&lt;span class="x"&gt; = curl_exec(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;ch&lt;/span&gt;&lt;span class="x"&gt;);&lt;/span&gt;
&lt;span class="x"&gt;if (FALSE === &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;output&lt;/span&gt;&lt;span class="x"&gt;) &lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="x"&gt;   header(&amp;quot;HTTP/1.0 500 Server Error&amp;quot;);&lt;/span&gt;
&lt;span class="x"&gt;   print curl_error(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;ch&lt;/span&gt;&lt;span class="x"&gt;);&lt;/span&gt;
&lt;span class="x"&gt;   exit;&lt;/span&gt;
&lt;span class="x"&gt;}&lt;/span&gt;
&lt;span class="x"&gt;curl_close(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;ch&lt;/span&gt;&lt;span class="x"&gt;);&lt;/span&gt;

&lt;span class="x"&gt;foreach (&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;headers&lt;/span&gt;&lt;span class="x"&gt; as &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;header&lt;/span&gt;&lt;span class="x"&gt;) &lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="x"&gt;   header(&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;header&lt;/span&gt;&lt;span class="x"&gt;);&lt;/span&gt;
&lt;span class="x"&gt;}&lt;/span&gt;
&lt;span class="x"&gt;print &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;output&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The &amp;#8220;privatedata.php&amp;#8221; file looks like&amp;nbsp;this:&lt;/p&gt;
&lt;p&gt;Two&lt;br /&gt;
separate files are being used to avoid submitting the password to the&lt;br /&gt;
source repository, while still keeping all the sourcecode&amp;nbsp;open.&lt;/p&gt;
&lt;p&gt;Now with the code in place, you can test it using&amp;nbsp;curl:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;curl --compressed -v -H &amp;#39;X-Shared-Secret: 23tqhwfgj2qbherhjerj&amp;#39; &amp;#39;http://127.0.0.1:1483/fetch_url.php?q=http%3A//identi.ca/api/help/test.json
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;As&lt;br /&gt;
you can see, a custom header is used for authentication. An other&lt;br /&gt;
security measure is to use a non-standard port. Limiting the requests
to&lt;br /&gt;
the IPs of the Google datacenter from the firewall would be the ideal&lt;br /&gt;
solution, but given that this was the problem we are trying to solve
in&lt;br /&gt;
the first place (the Google datacenters not having an officially&lt;br /&gt;
announced set of &lt;span class="caps"&gt;IP&lt;/span&gt; addresses), this doesn&amp;#8217;t seem&amp;nbsp;possible.&lt;/p&gt;
&lt;p&gt;Finally, here is the Python code to use the script from withing an
application hosted on the &lt;span class="caps"&gt;GAE&lt;/span&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;urllib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;quote&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;google.appengine.api&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;urlfetch&lt;/span&gt;

&lt;span class="c1"&gt;# ...&lt;/span&gt;

&lt;span class="n"&gt;fetch_headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;X-Shared-Secret&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;23tqhwfgj2qbherhjerj&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urlfetch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http://127.0.0.1:1483/fetch_url.php?q=&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;quote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;urlfetch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;urlfetch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;fetch_headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;deadline&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;follow_redirects&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;A little more discussion about the&amp;nbsp;code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The&lt;br /&gt;
    method of using a custom header for authorization was chosen, since
    the&lt;br /&gt;
    forwarding of authentication data (ie. the &amp;#8220;Authorization&amp;#8221; header)
    was&lt;br /&gt;
    needed (specifically this is what the Twitter &lt;span class="caps"&gt;API&lt;/span&gt; uses for
    verifying&lt;br /&gt;&amp;nbsp;identity)&lt;/li&gt;
&lt;li&gt;Speaking of things the script forwards: it does&lt;br /&gt;
    forward the user agent and any &lt;span class="caps"&gt;POST&lt;/span&gt; data if present. The forwarding
    of&lt;br /&gt;
    other headers could be quite easily be&amp;nbsp;added.&lt;/li&gt;
&lt;li&gt;Passing&lt;br /&gt;
    variables in a &lt;span class="caps"&gt;GET&lt;/span&gt; request is also supported (they would be&lt;br /&gt;
    double-encoded, but that shouldn&amp;#8217;t be a concern in but the most
    extreme&lt;br /&gt;&amp;nbsp;cases)&lt;/li&gt;
&lt;li&gt;If we are talking about sensitive data, cURL (and the cURL extension
    for &lt;span class="caps"&gt;PHP&lt;/span&gt;) has the ability to fetch &lt;span class="caps"&gt;HTTPS&lt;/span&gt; content &lt;em&gt;and to verify the
    certificates&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While&lt;br /&gt;
this method might look cumbersome, in practice I found it to work
quite&lt;br /&gt;
well. Hopefully this information will help others facing the same&lt;br /&gt;
problem. A final note: if you have questions about the code or about&lt;br /&gt;
other aspects, post them in the comments. I will try to answer them as&lt;br /&gt;
fast as possible. I&amp;#8217;m also considering launching a &amp;#8220;proxy service&amp;#8221; for&lt;br /&gt;
&lt;span class="caps"&gt;GAE&lt;/span&gt; apps to make this process much more simpler (abstracting away the&lt;br /&gt;
setup and administration of the &lt;span class="caps"&gt;VPS&lt;/span&gt;), so if you would be interested in&lt;br /&gt;
paying a couple of bucks for such a service, please contact me either&lt;br /&gt;
directly or trough the&amp;nbsp;comments.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 27 Oct 2012 23:03:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-10-27:2012/10/every-end-is-new-beginning.html</guid></item><item><title>Helper for testing multi-threaded programs in Java</title><link>https://www.grey-panther.net/2012/10/helper-for-testing-multi-threaded.html</link><description>&lt;p&gt;This post was originally published on the &lt;a href="http://www.transylvania-jug.org/archives/5442"&gt;Transylvania
&lt;span class="caps"&gt;JUG&lt;/span&gt;&lt;/a&gt;&amp;nbsp;blog.&lt;/p&gt;
&lt;p&gt;Testing multi-threaded code is hard. The main problem is that you&lt;br /&gt;
invoke your assertions either too soon (and they fail for no good&lt;br /&gt;
reason) or too late (in which case the test runs for a long time,&lt;br /&gt;
frustrating you). A possible solution is to declare an interface like&lt;br /&gt;
the&amp;nbsp;following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;interface ActivityWatcher {
 void before();
 void after(); 
 void await(long time, TimeUnit timeUnit) throws InterruptedException, TimeoutException;
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;It is intended to be used as&amp;nbsp;follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“before” is called before the asynchronous task is delegated to an&lt;br /&gt;
    execution mechanism (threadpool, fork-join framework, etc) and it&lt;br /&gt;
    increments an internal&amp;nbsp;counter.&lt;/li&gt;
&lt;li&gt;“after is called after the asynchronous task has completed and it
    decrements the&amp;nbsp;counter.&lt;/li&gt;
&lt;li&gt;“await” waits for the counter to become&amp;nbsp;zero&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The net result is that when the counter is zero, all your asynchronous
tasks have executed and you can run your assertions. See &lt;a href="https://code.google.com/p/hype-free/source/browse/trunk/espresso-shots/src/org/transylvania/jug/espresso/shots/d20121009/TestMultithreading.java"&gt;the example
code&lt;/a&gt;.
A couple more&amp;nbsp;considerations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There should be a single ActivityWatcher per test (injected trough
    constructors or a dependency injection&amp;nbsp;framework)&lt;/li&gt;
&lt;li&gt;In production code you will use a &lt;a href="https://code.google.com/p/hype-free/source/browse/trunk/espresso-shots/src/org/transylvania/jug/espresso/shots/d20121009/NoopActivityWatcher.java"&gt;dummy/noop
    implementation&lt;/a&gt;
    which removes any&amp;nbsp;overhead.&lt;/li&gt;
&lt;li&gt;This only works for situations where the asynchronous are kicked of&lt;br /&gt;
    immediately. Ie. it doesn’t work for situations where we have&lt;br /&gt;
    periodically executing tasks (like every 5 seconds) and we would
    want to&lt;br /&gt;
    wait for the 7th tasks to be executed for&amp;nbsp;example.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One thing the above code doesn’t do is collecting exceptions: if the&lt;br /&gt;
exceptions happen on different threads than the one executing the&lt;br /&gt;
testrunner, they will just die and the testrunner will happily report&lt;br /&gt;
that the tests passs. You can work around this in two&amp;nbsp;ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;use the &lt;a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#setDefaultUncaughtExceptionHandler%28java.lang.Thread.UncaughtExceptionHandler%29"&gt;default
    UncaughtExceptionHandler&lt;/a&gt;&lt;br /&gt;
    to capture all exceptions and rethrow them in the testrunner if
    they&lt;br /&gt;
    arrise (not so nice because it introduces global state – you can’t
    have&lt;br /&gt;
    two such tests running in parallel for&amp;nbsp;example)&lt;/li&gt;
&lt;li&gt;Extend activity watcher and code calling activity watcher such that
    it has a “&lt;code&gt;collect(Throwable)&lt;/code&gt;” method which gets called with the
    uncaught exceptions and “&lt;code&gt;await&lt;/code&gt;” rethrows&amp;nbsp;them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Implementing this is left as an exercise to the reader
:-).&lt;img alt=";-)" src="http://www.transylvania-jug.org/wp-includes/images/smilies/icon_wink.gif" /&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 27 Oct 2012 22:48:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-10-27:2012/10/helper-for-testing-multi-threaded.html</guid><category>multithreading</category><category>java</category><category>jug</category></item><item><title>GeekMeet talk about Google App Engine</title><link>https://www.grey-panther.net/2012/10/geekmeet-talk-about-google-app-engine.html</link><description>&lt;p&gt;The &lt;span class="caps"&gt;GAE&lt;/span&gt; presentation I&amp;#8217;ve given for &lt;a href="http://geekmeet.ro/cluj/2012/10/23/cum-a-fost-la-geekmeet-12-cluj/"&gt;the 12th edition of Cluj Geek
Meet&lt;/a&gt;
can be found
&lt;a href="https://hype-free.googlecode.com/svn/trunk/geekmeet-ro/gae_presentation/index.html#/"&gt;here&lt;/a&gt;
(created using&amp;nbsp;reveal.js).&lt;/p&gt;
&lt;p&gt;You can find the source code
&lt;a href="https://code.google.com/p/hype-free/source/browse/#svn/trunk/geekmeet-ro/gae_presentation/code"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 27 Oct 2012 22:45:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-10-27:2012/10/geekmeet-talk-about-google-app-engine.html</guid><category>google app engine</category><category>python</category><category>geekmeet</category><category>presentation</category></item><item><title>Lightning talk at Cluj.PM</title><link>https://www.grey-panther.net/2012/08/lightning-talk-at-clujpm.html</link><description>&lt;p&gt;The slides from my &lt;a href="http://cluj.pm/pages/events.html"&gt;Cluj.&lt;span class="caps"&gt;PM&lt;/span&gt;&lt;/a&gt; lightning&amp;nbsp;talk:&lt;/p&gt;
&lt;iframe src="https://docs.google.com/presentation/embed?id=15NM65jNUEGqApX-Ghi3pQd1qKZxE2QNE8Menmn0kreU&amp;amp;start=false&amp;amp;loop=false&amp;amp;delayms=3000" frameborder="0" width="480" height="389" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"&gt;&lt;/iframe&gt;

&lt;p&gt;It was a stressful (but fun!) experience. Thanks to the&amp;nbsp;organizers!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 19 Aug 2012 15:22:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-08-19:2012/08/lightning-talk-at-clujpm.html</guid><category>talk</category><category>lightningtalk</category><category>perlmonks</category><category>perl</category><category>perlmongers</category><category>presentation</category></item><item><title>Running pep8 and pylint programatically</title><link>https://www.grey-panther.net/2012/08/running-pep8-and-pylint-programatically.html</link><description>&lt;p&gt;Having tools like &lt;a href="http://pypi.python.org/pypi/pep8/"&gt;pep8&lt;/a&gt; and
&lt;a href="http://pypi.python.org/pypi/pylint/"&gt;pylint&lt;/a&gt; are great, especially
given the huge amount of dynamism involved in Python - which results in
many opportunities to shooting yourself in the foot. Sometimes however
you want to invoke these tools in more specialized ways, for example
only on the files which changed since the last commit. Here is how you
can do this from a python script and capture their output for later
post-processing (maybe you want merge the output from both tools, or
maybe you want to show only the lines which changed since the last
commit,&amp;nbsp;etc):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pep8&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringIO&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="n"&gt;pep8_checker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pep8&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StyleGuide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config_file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pylint&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;pep8_checker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;check_files&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paths&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dirs&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getvalue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__stdout__&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pylint.lint&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Run&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pylint.reporters.text&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ParseableTextReporter&lt;/span&gt;

&lt;span class="n"&gt;reporter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ParseableTextReporter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringIO&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;reporter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_output&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;--rcfile=pylint.config&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;reporter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;reporter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getvalue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It is recommended that you use pylint/pep8 installed trough
pip/easy_install rather than the Linux distribution repositories, since
they are known to contain outdated software. You can check for this via
code like the&amp;nbsp;following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;if pkg_resources.get_distribution(&amp;#39;pep8&amp;#39;).parsed_version &amp;lt; parse_version(&amp;#39;1.3.3&amp;#39;):
    logging.error(&amp;#39;pep8 too old. At least version 1.3.3 is required&amp;#39;)
    sys.exit(1)
if pkg_resources.get_distribution(&amp;#39;pylint&amp;#39;).parsed_version &amp;lt; parse_version(&amp;#39;0.25.1&amp;#39;):
    logging.error(&amp;#39;pylint too old. At least version 0.25.1 is required&amp;#39;)
    sys.exit(1)
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Finally, if you &lt;em&gt;have&lt;/em&gt; to use an old version of pep8, the code needs to
be modified to the following (however, this older version probably won&amp;#8217;t
be of much use and will most likely annoy you - you should really try to
use an up-to-date version - for example you could isolate this version
using&amp;nbsp;virtualenv):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pep8&lt;/span&gt;
&lt;span class="n"&gt;pep8&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;pep8&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;process_options&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;own_code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;code_dir&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;dirs&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;pep8&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;input_dir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 19 Aug 2012 15:12:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-08-19:2012/08/running-pep8-and-pylint-programatically.html</guid><category>pylint</category><category>lint</category><category>python</category><category>pep8</category><category>static analysers</category></item><item><title>Clearing your Google App Engine datastore</title><link>https://www.grey-panther.net/2012/08/clearing-your-google-app-engine.html</link><description>&lt;p&gt;&lt;strong&gt;Warning! This is a method to erase the data from your Google App
Engine datastore. There is no way to recover your data after you go
trough with this! Only use this if you&amp;#8217;re absolutely&amp;nbsp;certain!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you have a &lt;span class="caps"&gt;GAE&lt;/span&gt; account used for experimentation, you might like to
clean it up sometimes (erase the contents of the datastore and blobstore
associated with the application). Doing this trough the admin interface
can become very tedious, so here is an alternative&amp;nbsp;method:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start your &lt;a href="https://developers.google.com/appengine/articles/remote_api"&gt;Remote &lt;span class="caps"&gt;API&lt;/span&gt;&amp;nbsp;shell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the following code to delete all datastore&amp;nbsp;entities:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;while&lt;/span&gt; &lt;span class="nt"&gt;True&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;keys&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;db&lt;/span&gt;&lt;span class="nc"&gt;.Query&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;keys_only&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;True&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nc"&gt;.fetch&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;500&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="nt"&gt;db&lt;/span&gt;&lt;span class="nc"&gt;.delete&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;keys&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="nt"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Deleted 500 entries, the last of which was %s&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nt"&gt;keys&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="nc"&gt;.to_path&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the following code to delete all blobstore&amp;nbsp;entities:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;google.appengine.ext.blobstore&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;BlobInfo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;  &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Deleted elements, the last of which was &lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The above method is inspired by &lt;a href="http://stackoverflow.com/questions/1062540/how-to-delete-all-datastore-in-google-app-engine"&gt;this stackoverflow
answer&lt;/a&gt;,
but has the advantage that it does the deletion in smaller steps,
meaning that the risk of the entire transaction being aborted because of
deadline exceeded or over quota errors is&amp;nbsp;removed.&lt;/p&gt;
&lt;p&gt;Final&amp;nbsp;caveats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This can be&amp;nbsp;slow&lt;/li&gt;
&lt;li&gt;This consumes your quota, so you might have to do it over several
    days or raise your&amp;nbsp;quota&lt;/li&gt;
&lt;li&gt;The code is written in a very non-pythonic way (multiple statements
    on one line) for the ease of&amp;nbsp;copy-pasting&lt;/li&gt;
&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 15 Aug 2012 10:08:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2012-08-15:2012/08/clearing-your-google-app-engine.html</guid><category>gae</category><category>google app engine</category><category>python</category></item><item><title>Relaxed JSON parsing</title><link>https://www.grey-panther.net/2011/12/relaxed-json-parsing.html</link><description>&lt;p&gt;&lt;em&gt;This blogpost was originally posted to &lt;a href="http://www.transylvania-jug.org/archives/324"&gt;the Transylvania &lt;span class="caps"&gt;JUG&lt;/span&gt;
blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;JSON&lt;/span&gt; is a good alternative when you need a lightweight format to specify
structured data. But sometimes (for example when you want the user to
specify &lt;span class="caps"&gt;JSON&lt;/span&gt; manually) you would like to relax the formalism required to
specify &lt;a href="http://json.org/"&gt;&amp;#8220;valid&amp;#8221; &lt;span class="caps"&gt;JSON&lt;/span&gt;&lt;/a&gt; data. For example the following
snippet is not valid as per the spec, although its intent is quite&amp;nbsp;clear:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;[{ foo: &amp;#39;bar&amp;#39; }]
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To make this standard compliant we would need to write it&amp;nbsp;as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;[{ &amp;quot;foo&amp;quot;: &amp;quot;bar&amp;quot; }]
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;We shouldn&amp;#8217;t run out and blame the standard of course since it needs to
balance many contradictory requirements (ambiguity of encoded data, ease
of understanding, ease of writing parsers, etc). If you decide that you
want to strike the balance differently (make the definition of valid
data more relaxed) you can do this easily with the &lt;a href="http://jackson.codehaus.org/"&gt;Jackson
parser&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;JsonParser parser = new JsonFactory()
    .createJsonParser(&amp;quot;[{ foo: &amp;#39;bar&amp;#39; }]&amp;quot;)
        .enable(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES)
        .enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES);
JsonNode root = new ObjectMapper().readTree(parser);

assertEquals(&amp;quot;bar&amp;quot;, root.get(0).get(&amp;quot;foo&amp;quot;).asText());
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If your tool of choice is &lt;a href="http://code.google.com/p/google-gson/"&gt;gson&lt;/a&gt;,
it is slightly more complicated but still doable. See the &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/espresso-shots/src/org/transylvania/jug/espresso/shots/d20111018/TestRelaxedJSONParsing.java"&gt;linked source
code&lt;/a&gt;
for a complete&amp;nbsp;example.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;JSON&lt;/span&gt; is a good tool for semi-structured data and using a relaxed parsing
can make the programs you write easier to&amp;nbsp;use.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 27 Dec 2011 13:40:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-12-27:2011/12/relaxed-json-parsing.html</guid><category>json</category><category>java</category><category>jug</category></item><item><title>Updating the root certificates for Java</title><link>https://www.grey-panther.net/2011/10/updating-root-certificates-for-java.html</link><description>&lt;p&gt;One usually thinks of &lt;span class="caps"&gt;SSL&lt;/span&gt; in the context of &lt;span class="caps"&gt;HTTPS&lt;/span&gt;, but there are also
other protocols which rely on it to provide security. See &lt;a href="http://www.google.com/url?q=https%3A%2F%2Fssl.trustwave.com%2Fsupport%2Fsupport-how-ssl-works.php&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFrqEzcSKxikCOveGBqInQtKlIeQDxQh1A"&gt;this
link&lt;/a&gt;
for a short overview of &lt;span class="caps"&gt;SSL&lt;/span&gt; – it only mentions &lt;span class="caps"&gt;HTTPS&lt;/span&gt;, but the same
applies for &lt;span class="caps"&gt;IMAPS&lt;/span&gt;, &lt;span class="caps"&gt;FTPS&lt;/span&gt;, etc – &lt;span class="caps"&gt;SSL&lt;/span&gt; is independent of the wrapped
protocol. You can have issues with your Java programs in where the party
you are communicating with provider changes their certificate and the
program rejects it as invalid. The exception is something&amp;nbsp;like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
    PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: 
    unable to find valid certification path to requested target
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;One cause of the problem can be that the server uses an &lt;span class="caps"&gt;SSL&lt;/span&gt; provider
which is based on a root certificate that wasn’t included with the
particular version of Java you are using (this is especially true for
really old versions like Java 1.5). The issue can be solved by updating
to the latest version, but it might be that this isn&amp;#8217;t an option.
Fortunately I found the following article: &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fblogs.sun.com%2Fandreas%2Fentry%2Fno_more_unable_to_find&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFrqEzeLX1QgwCxBswOU7p3Y6eb8qpF_0g"&gt;No more ‘unable to find
valid certification path to requested&amp;nbsp;target’&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;How to use&amp;nbsp;it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compile the program &lt;code&gt;javac InstallCert.java&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run it with the target host/port. For example in our case it would
    be: &lt;code&gt;java InstallCert imap.mailprovider.com:993&lt;/code&gt; (993 is the port
    for &lt;span class="caps"&gt;IMAPS&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;navigate trough the menus and select which certificate to&amp;nbsp;import&lt;/li&gt;
&lt;li&gt;now you have a file called &lt;code&gt;jssecacerts&lt;/code&gt;. You need to copy this to
    &lt;code&gt;$JAVA_HOME/jre/lib/security/cacerts&lt;/code&gt; (&lt;strong&gt;back up the existing file
    first!&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Now the root certificate is imported (you can confirm this by
    rerunning&amp;nbsp;InstallCert)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="caps"&gt;HTH&lt;/span&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 20 Oct 2011 15:36:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-10-20:2011/10/updating-root-certificates-for-java.html</guid><category>ssl</category><category>java</category></item><item><title>Vagrant and VirtualBox on Windows</title><link>https://www.grey-panther.net/2011/10/vagrant-and-virtualbox-on-windows.html</link><description>&lt;p&gt;&lt;a href="http://vagrantup.com/"&gt;Vagrant&lt;/a&gt; is a collection of scripts written in
Ruby to manage VirtualBox images in a shared environment (like the &lt;span class="caps"&gt;QA&lt;/span&gt;
boxes inside a company): install them, update them, etc. Unfortunately
installing it under Windows is not as straight forward as one would
want, so here are some useful&amp;nbsp;tips:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read the &lt;a href="http://vagrantup.com/docs/getting-started/setup/windows.html"&gt;Windows setup
    page&lt;/a&gt;
    and the &lt;a href="http://vagrantup.com/docs/getting-started/setup/windows_x64.html"&gt;Windows x64 setup
    page&lt;/a&gt;
    (if you are on 64&amp;nbsp;bit)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are on a 64 bit Windows&amp;nbsp;install:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check out &lt;a href="http://hype-free.blogspot.com/2011/09/running-jruby-on-64-bit-windows.html"&gt;this
    post&lt;/a&gt;
    if your JRuby is using the 32 bit &lt;span class="caps"&gt;JVM&lt;/span&gt; on a x64 Windows&amp;nbsp;setup&lt;/li&gt;
&lt;li&gt;You need to use version 4.0 of VirtualBox (rather than the latest).
    You can get it from
    &lt;a href="https://www.virtualbox.org/wiki/Download_Old_Builds_4_0"&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You need to use an older version of Vagrant: &lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;jgem install jruby-openssl jruby-win32ole
jgem install --version &amp;#39;=0.7.8&amp;#39; vagrant
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the vagrant box download stops around 4G, check that you have a
    &lt;span class="caps"&gt;NTFS&lt;/span&gt; filesystem (rather than &lt;span class="caps"&gt;FAT&lt;/span&gt;) and deactivate any &amp;#8220;network&amp;#8221;
    scanning capabilities of installed security software (I had problems
    with &lt;span class="caps"&gt;NOD32&lt;/span&gt;&amp;nbsp;particularly)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="caps"&gt;HTH&lt;/span&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 20 Oct 2011 15:27:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-10-20:2011/10/vagrant-and-virtualbox-on-windows.html</guid><category>virtualbox</category><category>windows</category><category>vagrant</category><category>virtualization</category></item><item><title>Another friend blogging</title><link>https://www.grey-panther.net/2011/10/another-friend-blogging.html</link><description>&lt;p&gt;Another friend ~~bit the dust~~ started blogging: &lt;a href="http://cleonte.github.com/"&gt;Cleonte&amp;#8217;s GitHub
blog&lt;/a&gt; - bookmarks at the moment but looking
forward to more involved posts&amp;nbsp;:-).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 13 Oct 2011 18:20:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-10-13:2011/10/another-friend-blogging.html</guid><category>blog</category><category>personal</category></item><item><title>Using Jython from Maven</title><link>https://www.grey-panther.net/2011/10/using-jython-from-maven.html</link><description>&lt;p&gt;&lt;em&gt;This blogpost was originally posted to&lt;/em&gt; &lt;a href="http://www.transylvania-jug.org/archives/303"&gt;&lt;em&gt;the Transylvania &lt;span class="caps"&gt;JUG&lt;/span&gt;
blog&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;On the surface it looks simple: just add the dependency and you can run
&lt;a href="http://www.jython.org/archive/21/docs/embedding.html"&gt;the example
code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However what the &lt;code&gt;jython&lt;/code&gt; artifact doesn’t get you are the standard
python libraries like &lt;code&gt;re&lt;/code&gt;. This means that as soon as you try to do
something like the code below, it will error&amp;nbsp;out:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;PythonInterpreter&lt;/span&gt; &lt;span class="n"&gt;interp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;PythonInterpreter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;interp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;import re&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="n"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PyException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;printStackTrace&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The solution? Use the &lt;code&gt;jython-standalone&lt;/code&gt; artifact which includes the
standard libraries. An other advantage is that it has the latest release
(2.5.2) while &lt;code&gt;jython&lt;/code&gt; lags two minor revisions behind (2.5.0) in Maven
Central. A possible downside is the larger size of the&amp;nbsp;jar.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;org.python
jython-standalone
2.5.2
&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 13 Oct 2011 18:16:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-10-13:2011/10/using-jython-from-maven.html</guid><category>python</category><category>jython</category><category>maven</category><category>java</category></item><item><title>How to post high-quality videos to Google Video</title><link>https://www.grey-panther.net/2011/10/how-to-post-high-quality-videos-to.html</link><description>&lt;p&gt;If you have Google Apps for Business, Google Video is still the
preferred method of storing videos &amp;#8220;in the cloud&amp;#8221;: it is easier to embed
into Google Docs and probably more importantly - it can be truly private
(you can only access it if you are logged in with the correct account -
as opposed to YouTube where you can &amp;#8220;hide&amp;#8221; the video, but still anyone
with the link can access&amp;nbsp;it).&lt;/p&gt;
&lt;p&gt;To post a high quality video to Google Video you only have to&amp;nbsp;do:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Upload the&amp;nbsp;video&lt;/li&gt;
&lt;li&gt;Wait&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I kid you not :-). While initially the uploaded video is of poor
quality, apparently it gets processed in the background and later on (in
my experience: it takes around 30 minutes to process 1 hour of uploaded
video) a high quality version will be&amp;nbsp;available.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;HTH&lt;/span&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 11 Oct 2011 11:58:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-10-11:2011/10/how-to-post-high-quality-videos-to.html</guid><category>google</category><category>video</category></item><item><title>Integrating Maven with Ivy</title><link>https://www.grey-panther.net/2011/10/integrating-maven-with-ivy.html</link><description>&lt;p&gt;&lt;em&gt;This post was originally published on the &lt;a href="http://www.transylvania-jug.org/archives/272"&gt;Transylvania &lt;span class="caps"&gt;JUG&lt;/span&gt;
blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The problem: you have some resources in an Ivy repository (and only
there) which you would like to use in a project based on Maven. Possible&amp;nbsp;solutions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Migrate the repository to Maven (Nexus for example) since Ivy can
    easily use Maven-style repositories (so your Ivy clients can
    continue to use Ivy with some slight configuration changes and Maven
    clients will also work – also the push-to-repo process needs to be&amp;nbsp;changed)&lt;/li&gt;
&lt;li&gt;Try JFrog Artifactory since it &lt;a href="http://blogs.jfrog.org/2010/03/building-enterprise-repository-with.html"&gt;reportedly can serve the same
    resources to both Ivy and
    Maven&lt;/a&gt;
    (disclaimer: I haven’t tried to use it actually and I don’t know if
    the Open Source version includes this feature or&amp;nbsp;not)&lt;/li&gt;
&lt;li&gt;or read&amp;nbsp;on…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My goal for the solution (as complex as it may be)&amp;nbsp;was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It should be as simple and self-explanatory as&amp;nbsp;possible&lt;/li&gt;
&lt;li&gt;It should respect the &lt;span class="caps"&gt;DRY&lt;/span&gt; principle (Don’t Repeat&amp;nbsp;Yourself)&lt;/li&gt;
&lt;li&gt;It shouldn’t have other dependencies than Maven&amp;nbsp;itself&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The solution looks like the following (for the full source check out
&lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/java-maven-ivy/pom.xml"&gt;the
code-repo&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;Have two Maven profiles: &lt;code&gt;ivy-dependencies&lt;/code&gt; activates when the
dependencies have already been downloaded and &lt;code&gt;ivy-resolve&lt;/code&gt; when there
are yet to download. This is based on checking the directory where the
dependencies are to be copied&amp;nbsp;ultimately:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;...
ivy-dependencies

false

&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;basedir&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;/ivy-lib


...
ivy-resolve

false

&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;basedir&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;/ivy-lib


...
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Unfortunately there is a small repetition here, since Maven doesn’t seem
to expand user-defined properties like &lt;code&gt;${ivy.target.lib.dir}&lt;/code&gt; in the
profile activation section. The profiles also serve an other role: to
avoid the consideration of the dependencies until they are actually&amp;nbsp;resolved.&lt;/p&gt;
&lt;p&gt;When the build is first run, it creates the target directory, writes the
files needed for an Ivy build there (&lt;code&gt;ivy.xml&lt;/code&gt;, &lt;code&gt;ivysettings.xml&lt;/code&gt; and
&lt;code&gt;build.xml&lt;/code&gt; – for this example I’ve used some parts from corresponding
files of &lt;a href="http://code.google.com/p/red5/source/browse/java/server/trunk/"&gt;the Red5
repo&lt;/a&gt;),
runs the build and tries to clean up after itself. It also creates
a&lt;code&gt;dependencies.txt&lt;/code&gt; file containing the chunck of text which needs to be
added to the dependencies list. Finally, it bails out (fails)
instructing the user to run the command&amp;nbsp;again.&lt;/p&gt;
&lt;p&gt;On the second (third, fourth, etc) run the dependencies will already be
present, so the resolution process won’t be run repeteadly. This
approach was chosen instead of running the resolution at every build
because – even though the resolution process is quick quick – it can
take tens seconds in some more complicated cases and I didn’t want to
slow the build&amp;nbsp;down.&lt;/p&gt;
&lt;p&gt;And, Ivy, the Apache &lt;span class="caps"&gt;BSF&lt;/span&gt; framework, etc are fetched from the Maven
central repository, so they need not be preinstalled for build to
complete&amp;nbsp;successfully.&lt;/p&gt;
&lt;p&gt;A couple of words about choosing &lt;code&gt;${ivy.target.lib.dir}&lt;/code&gt;: if you choose
it inside your Maven tree (like it was chose in the example), you will
receive warnings from Maven that this might not be supported in the
future. Also, be sure to add the directory to the ignore mechanism of
your &lt;span class="caps"&gt;VCS&lt;/span&gt; (&lt;code&gt;.gitignore&lt;/code&gt;, &lt;code&gt;.hgignore&lt;/code&gt;, &lt;code&gt;.cvsignore&lt;/code&gt;, &lt;code&gt;svn:ignore&lt;/code&gt;, etc),
as to avoid accidentally committing the libraries to &lt;span class="caps"&gt;VCS&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;If you need to add a new (Ivy) dependency to the project, the steps are
as&amp;nbsp;follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Delete the current &lt;code&gt;${ivy.target.lib.dir}&lt;/code&gt; directory&lt;/li&gt;
&lt;li&gt;Update the part of your &lt;code&gt;pom.xml&lt;/code&gt; which writes out the &lt;code&gt;ivy.xml&lt;/code&gt;
    file to include the new&amp;nbsp;dependency&lt;/li&gt;
&lt;li&gt;Run a build and watch the new dependency being&amp;nbsp;resolved&lt;/li&gt;
&lt;li&gt;Update the dependencies section of the &lt;code&gt;ivy-dependencies&lt;/code&gt; profile to
    include the new dependency (possibly copying from
    &lt;code&gt;dependencies.txt&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One drawback of this method is the fact that advanced functionalities of
systems based on Maven will not work with these dependencies (for
example dependency analisys / graphing plugins, automated downloading of
sources / javadocs, etc). A possible workaround (and a good idea in
general) is to use this method for the minimal subset – just the jars
which can’t be found in Maven central. All the rests (even if they are
actually dependencies of the code fetched from Ivy) should be declared
as a normal dependency, to be fetched from the Maven&amp;nbsp;repository.&lt;/p&gt;
&lt;p&gt;Finally I would like to say that this endeavour once again showed me how
flexible both Maven and Ivy/Ant can be and clarified many cornercases
(like how we escape &lt;code&gt;]]&lt;/code&gt; inside of &lt;span class="caps"&gt;CDATA&lt;/span&gt; – we split it in two). And it
can also be further tweaked (for example: adding a clean target to the
ivy-resolve profile, so you can remove the directory with
&lt;code&gt;mvn clean -P ivy-resolve&lt;/code&gt; or re-jar-ing all the downloaded jars into a
single one for example &lt;a href="http://stackoverflow.com/questions/1821803/creating-a-bundle-jar-with-ant"&gt;like
this&lt;/a&gt;,
thus avoiding the need to modify the pom file every time the list of Ivy
dependencies gets changed – then again signed JARs can’t be re-jarred so
it is not an universal solution&amp;nbsp;either).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 11 Oct 2011 11:18:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-10-11:2011/10/integrating-maven-with-ivy.html</guid><category>dependency management</category><category>ivy</category><category>maven</category><category>java</category></item><item><title>Upgrading the Options (GlobeTrotter) GI515m</title><link>https://www.grey-panther.net/2011/10/upgrading-options-globetrotter-gi515m.html</link><description>&lt;p&gt;Recently I needed to install an Options (GlobeTrotter) GI515m 3G &lt;span class="caps"&gt;USB&lt;/span&gt;
modem on a machine which previously used an older version of the modem
(the iCON 225). This seems a pretty common scenario (an existing user
getting an update), however the process seems less-than-straight&amp;nbsp;forward:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Get a second computer with the same operating system version which
    didn&amp;#8217;t have a 3G modem installed (for example if your target system
    is running Windows 7 64 bit you need a second system with Windows 7
    64 bit - different skews like Home vs Ultimate are ok, but the
    version and &amp;#8220;bitness&amp;#8221; must coincide - you could also try using a
    virtual machine for the second machine which supports &lt;span class="caps"&gt;USB&lt;/span&gt; forwarding
    like VirtualBox or&amp;nbsp;VMWare)&lt;/li&gt;
&lt;li&gt;Plug in the modem in the second machine. First it will recognize it
    as an &lt;span class="caps"&gt;USB&lt;/span&gt; stick / &lt;span class="caps"&gt;CD&lt;/span&gt;-&lt;span class="caps"&gt;ROM&lt;/span&gt;. Copy all the files from it to a separate
    folder (you should see files like &amp;#8220;&lt;code&gt;setup.exe&lt;/code&gt;&lt;span class="dquo"&gt;&amp;#8220;&lt;/span&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Let the setup complete. Now copy the installed drivers to the same
    place you&amp;#8217;ve saved setup file. Under Windows 7 you would find them
    in the location &lt;code&gt;C:\Windows\System32\DriverStore\FileRepository\&lt;/code&gt; in
    several folders starting with &amp;#8220;gth&amp;#8221; (like
    &lt;code&gt;gthsubus_64.inf_amd64_neutral_4810563f34b37ef5&lt;/code&gt;), but here is the
    generic way to identify the&amp;nbsp;folder:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start Device&amp;nbsp;Manager&lt;/li&gt;
&lt;li&gt;Look for one of the devices associated with the modem (you will
    find actually several, like GlobeTrotter &lt;span class="caps"&gt;GI515M&lt;/span&gt; - Modem
    Interface, Network Interface and so&amp;nbsp;on)&lt;/li&gt;
&lt;li&gt;Properties -&gt; Driver -&gt; Driver Details. Note the name of the
    driver for which the provider is Option (for example
    &lt;code&gt;gtuhsser.sys&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Now search your Windows folder for files ending in .inf which
    contain the name of driver from the previous step. This will
    point you to the right&amp;nbsp;folders&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the first computer (the one you actually want to install the
    modem on) remove all previous versions of the software using the
    Add-Remove Programs facility (you will see two-three entries but
    they can be easily identified by the same orange icon). Restart the
    computer for good&amp;nbsp;measure.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Copy over the setup program and the drivers from the second
    computer. Plug in the modem to the first computer, install the
    application (using the setup file captured on the second computer).
    Go into the device manager and look for &amp;#8220;Unknown device&amp;#8221;s (you
    should see four of them). Use the drivers captured on the second
    computer to resolve these&amp;nbsp;issues.&lt;/li&gt;
&lt;li&gt;Unplug and replug the modem - it now should&amp;nbsp;work!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A couple more talking&amp;nbsp;points:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;don&amp;#8217;t use &amp;#8220;driver manager&amp;#8221; type software - they very rarely (read:
    never) seem to&amp;nbsp;work&lt;/li&gt;
&lt;li&gt;a symptom that you&amp;#8217;ve hit this problem is when the management
    interface (dialer / &amp;#8220;Internet Everywhere&amp;#8221;) for the modem starts but
    it gets stuck in the &amp;#8220;Initializing&amp;#8221; phase when you connect the modem
    and consumes &lt;span class="caps"&gt;CPU&lt;/span&gt; (from what I&amp;#8217;ve seen with a debugger it seems to be
    looking for the installed device in a&amp;nbsp;loop)&lt;/li&gt;
&lt;li&gt;the modem seems to be prone to overheating if the signal-strength is
    low (around two bars) and in this case it shuts down after \~10
    minutes (I assume that this is some kind of thermal protection). You
    can check if this is the case by putting your hand on the bottom
    side of the modem. I couldn&amp;#8217;t find and solution for this, other than
    looking for a spot which has better signal. Using the modem in &lt;span class="caps"&gt;EDGE&lt;/span&gt;
    rather than 3G mode also seems to do the trick, but it has lower
    speeds and I don&amp;#8217;t know of any reliable method to make the modem use
    &lt;span class="caps"&gt;EDGE&lt;/span&gt; if 3G is also&amp;nbsp;available.&lt;/li&gt;
&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 08 Oct 2011 15:55:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-10-08:2011/10/upgrading-options-globetrotter-gi515m.html</guid><category>hardware</category><category>orange</category><category>windows</category><category>modem</category><category>networking</category></item><item><title>Getting the most out of your audio recording with Audacity</title><link>https://www.grey-panther.net/2011/10/getting-most-out-of-your-audio.html</link><description>&lt;p&gt;This article aims to show you some &lt;em&gt;simple&lt;/em&gt; techniques to improve the
quality of your voice recording quickly and cheaply (for free actually).
But first things&amp;nbsp;first:&lt;/p&gt;
&lt;p&gt;The best audio is the one you don’t have to improve. Some simple steps
you can perform in advance to maximize&amp;nbsp;quality:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use quality equipment.
    &lt;a href="http://www.joelonsoftware.com/articles/PodcastEquipment.html"&gt;Here&lt;/a&gt;
    &lt;a href="http://twit.tv/podcastequipment"&gt;are&lt;/a&gt;
    &lt;a href="http://www.pwop.com/podcastingkit.aspx"&gt;some&lt;/a&gt; &lt;a href="http://nerds-central.blogspot.com/2011/09/good-quality-youtube-posts-with-cheep.html"&gt;articles&lt;/a&gt;
    about the equipment great-sounding podcasters use. You don’t have to
    spend a lot of money, but definitely stay away from the built-in
    laptop&amp;nbsp;microphone&lt;/li&gt;
&lt;li&gt;Eliminate ambient noise as much as possible (close windows, draw the
    blinds, stop other electronic equipment in the room,&amp;nbsp;etc)&lt;/li&gt;
&lt;li&gt;Record each person on a separate channel - if possible on a computer
    local to them (avoid recording trough Skype, GoToMeeting or other
    VoIP&amp;nbsp;solutions)&lt;/li&gt;
&lt;li&gt;Try keeping the recording volume for each microphone at the optimal
    level – not too low, but also avoiding&amp;nbsp;clipping&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After you have the audio recording there is still a lot you can do, but
it is preferable to start out with the best source material. For the
example below I’ll be using the raw recordings from a recent &lt;a href="http://www.se-radio.net/"&gt;&lt;span class="caps"&gt;SE&lt;/span&gt; Radio
podcast&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh4.ggpht.com/-pxj_nuiaWgo/TpApn9YkG2I/AAAAAAAAEVA/m8V9P5DsdTY/s1600-h/tmp9FD15.png"&gt;&lt;img alt="tmp9FD1" src="http://lh6.ggpht.com/-Th92EbElRnQ/TpAppSbw3XI/AAAAAAAAEVE/SbttRJPwSPY/tmp9FD1_thumb2.png?imgmax=800" title="tmp9FD1" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The situation with this recording is as&amp;nbsp;follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There are separate audio tracks for the interviewer and interviewee&amp;nbsp;(good)&lt;/li&gt;
&lt;li&gt;There is background noise on the tracks (easily&amp;nbsp;correctable)&lt;/li&gt;
&lt;li&gt;Both persons were picked up by both microphones&amp;nbsp;(correctable)&lt;/li&gt;
&lt;li&gt;The interviewer has some clipping (partially correctable – luckily
    it’s not the interviewee who has&amp;nbsp;clipping)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The steps to improve the quality of this recording are as&amp;nbsp;follows:&lt;/p&gt;
&lt;p&gt;First, install the &lt;a href="http://wiki.audacityteam.org/wiki/Nyquist_Effect_Plug-ins#Noise_Gate"&gt;Noise Gate
plugin&lt;/a&gt;
for Audacity, since it requires program restart (under Windows you have
to copy the downloaded &lt;code&gt;noisegate.ny&lt;/code&gt; to
&lt;code&gt;C:\Program Files (x86)\Audacity 1.3 Beta (Unicode)\Plug-Ins&lt;/code&gt; or to a
similar location, under Linux you have to place it in
&lt;code&gt;/usr/share/audacity&lt;/code&gt;). After copying the file you have to close and
restart Audacity. To verify that the plugin was properly installed check
in the Effect menu – you should see an entry title “Noise&amp;nbsp;gate”.&lt;/p&gt;
&lt;p&gt;Now that we have Audacity all set up and the plugin installed, first
split the stereo track into mono tracks, since they don’t actually
represent left-right channels but rather two speakers which will be
mixed together at the end. For this click on the arrow after the
filename in the track and select “Split Stereo to Mono”. Sidenote: some
people will prefer to mix different speakers in podcasts with different
panning (that is to the left or to the right). I would advise against
this: it is distracting if you are doing something else while listening
to the podcast (like walking / jogging / riding a bike / etc). It can
also backfire if for some reason the listening device is missing one of
the channels (the “damaged headphone”&amp;nbsp;scenario).&lt;/p&gt;
&lt;p&gt;The first thing will be to remove the constant background noise (like &lt;span class="caps"&gt;AC&lt;/span&gt;
hum for example). To do this zoom in (Ctrl + 1) and look for low volume
zones. Select those zones and go to Effects –&gt; Noise Removal –&gt; Get
Noise Profile. Now select a zone where the noise is mixed with speech
and test out the settings (Effect –&gt; Noise Removal –&gt; Ok). After the
test you can use Undo (Ctrl + Z) to roll back the changes. You should
watch for the noise being removed but also the natural sound of the
voice being preserved (too aggressive of a noise removal can lead to a
“robot voice” effect). If you are satisfied, you can go ahead and apply
it to the entire track. Also, since the noise source might change during
the recording, you should at least do a quick scroll to check for other
low-volume zones which can be a sign of noise. If you find noise from
other sources, you can use the same steps to remove&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;Now that you have removed the noise, the next step would be to remove
the voices from the channels they don’t belong to. This is where we’ll
be using the Noise Gate plugin: since there is a considerable level
difference between the wanted audio and the unwanted audio on each
channel, we can just declare everything below a certain volume “noise”
and use the plugin to silence it. A couple of&amp;nbsp;tips:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This needs to be done separately for each channel, since the cutoff
    volume will be&amp;nbsp;different&lt;/li&gt;
&lt;li&gt;You can use the “Analyse Noise Level” function of the plugin to
    gauge the approximate level of the cutoff volume – this will only
    give you an estimate and you will have to play around with the
    settings a little bit to find the optimal&amp;nbsp;volume&lt;/li&gt;
&lt;li&gt;Use a “Level reduction” of –100 dB to completely filter out the
    sound and an “Attack/Decay” of 1000 milliseconds to avoid false&amp;nbsp;positives&lt;/li&gt;
&lt;li&gt;As with all the steps, you can experiment on a smaller portion of
    the audio file (since it is much quicker) to fine tune the settings
    by repeatedly applying the effect with different parameters and
    undoing (Ctrl+Z) the result after evaluation. When the parameters
    seem right, just select the entire track and press Ctrl+R (Repeat
    last&amp;nbsp;effect)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After we’ve finished with both tracks, we have a better&amp;nbsp;situation:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh6.ggpht.com/-bQuXJCuceZk/TpAprrOXcqI/AAAAAAAAEVI/8Pz8XHdC1KA/s1600-h/tmpA9355.png"&gt;&lt;img alt="tmpA935" src="http://lh4.ggpht.com/-UBD2l2IuZ6M/TpApsxxchEI/AAAAAAAAEVM/OvfXFt8SFdc/tmpA935_thumb2.png?imgmax=800" title="tmpA935" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now we will fix the clipping as much as possible (a perfect fix isn’t
possible since clipping means that information got lost and all the
plugins can do is to “guess” what the information might have looked
like). First we reduce the aplification of the second track (the one
which contains the clipping) by 10 dB as the Clip Fix plugin suggests
(Effect –&gt; Aplify –&gt; –10 dB) after which we use the Clip Fix plugin.
Unfortunately this plugin runs very slowly if we would to apply it to
the entire track at once. Fortunately we have a reasonable workaround:
select portions of the track and apply the plugin to them individually.
After the first application you can use the “Repeat last effect”
shortcut (Ctrl+R) to speed up the operation. Sidenote: it is a good
habit to use the “Find Zero Crossing” function whenever you do a
selection (the shortcut is Z – so whenever you select a portion, just
press Z afterwards). This eliminates some weird artifacts when cutting /
pasting / silencing part of the audio and it might even help when
applying different effects. The fixed audio looks like&amp;nbsp;this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh6.ggpht.com/-OTPZJgmoVZE/TpApuBGpFbI/AAAAAAAAEVQ/R0cNJMaawGw/s1600-h/tmpA4D3%25255B5%25255D.png"&gt;&lt;img alt="tmpA4D3" src="http://lh4.ggpht.com/-Tl2basYoDrQ/TpApvWB-svI/AAAAAAAAEVU/K3KxlkOfjw0/tmpA4D3_thumb%25255B2%25255D.png?imgmax=800" title="tmpA4D3" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now, that all the cleanup steps have been performed, there is one last
step which is as important as the cleanup: maximizing the audible volume
without introducing clipping. This is very important because all devices
can &lt;em&gt;reduce&lt;/em&gt; volume but few of them can &lt;em&gt;increase&lt;/em&gt; it (some exceptions
being: the Linux audio stack and &lt;span class="caps"&gt;VLC&lt;/span&gt;). The easiest way to do this is by
using the Levelator (note: while the Levelator is free – as in beer –
and does not restrict what you can do with the output, it is not free as
in freedom if this is a consideration for&amp;nbsp;you).&lt;/p&gt;
&lt;p&gt;To do this, export the audio to &lt;span class="caps"&gt;WAV&lt;/span&gt; (make sure that all tracks are
unmuted during export) and run the Levelator on it. The end result will
look like the&amp;nbsp;following:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh3.ggpht.com/-J5yUvt9KAgc/TpApwQStEeI/AAAAAAAAEVY/0weSgZTtRYc/s1600-h/tmpC726%25255B5%25255D.png"&gt;&lt;img alt="tmpC726" src="http://lh6.ggpht.com/-N4ISXjxSgWA/TpApxE1lutI/AAAAAAAAEVc/W1Ncs98kSmo/tmpC726_thumb%25255B2%25255D.png?imgmax=800" title="tmpC726" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Of course the Levelator isn’t magic pixie dust either, so here are a
couple of things to check after it has been&amp;nbsp;run:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Did it amplify some residual noise which wasn’t available in the
    initial audio? (if so, you should remove it using the Noise Removal&amp;nbsp;plugin)&lt;/li&gt;
&lt;li&gt;Did it miss segments? (it is rare, but it happens – those segments
    need to be amplified&amp;nbsp;manually)&lt;/li&gt;
&lt;li&gt;It results in “weird” sounding audio if the recording has been
    preprocessed by a dynamic compressor – for example GoToMeeting has
    an option to improve sound quality which uses dynamic compression
    and thus makes the recording unsuitable for the use with&amp;nbsp;Levelator&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That’s it for this rather long article. Don’t be discouraged by the
length of the article: after going over the steps a couple of times, it
shouldn’t take longer than 15 minutes to process a 2 hour interview
(excluding the cutting / pasting / moving parts around) and you will
gain listeners because of the higher production&amp;nbsp;value.&lt;/p&gt;
&lt;p&gt;A final note on the output formats: while during processing you should
always use lossless formats, the final output format I recommend is: &lt;span class="caps"&gt;MP3&lt;/span&gt;
at 64 kbps &lt;span class="caps"&gt;CBR&lt;/span&gt;, Joint Stereo, 22050 MHz sampling rate. I found that this
is the best balance between quality, file size and compatibility with
the most playback devices out&amp;nbsp;there.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 08 Oct 2011 13:45:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-10-08:2011/10/getting-most-out-of-your-audio.html</guid><category>audio</category><category>audacity</category><category>audio processing</category><category>noise removal</category><category>podcast</category></item><item><title>More videos</title><link>https://www.grey-panther.net/2011/09/more-videos.html</link><description>&lt;p&gt;&lt;a href="http://vimeo.com/11693318"&gt;Two inches to the right&lt;/a&gt; via
&lt;a href="http://www.room362.com/mubixlinks/2010/7/11/2-inches-to-the-right.html"&gt;mubix&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
&lt;iframe src="http://player.vimeo.com/video/11693318?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="400" height="225" frameborder="0" webkitallowfullscreen="webkitAllowFullScreen" allowfullscreen="allowFullScreen"&gt;
&lt;/iframe&gt;
&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://vimeo.com/19084266"&gt;Jane Austen&amp;#8217;s Fight Club&lt;/a&gt; via
&lt;a href="http://wondermark.com/check-out-jane-austens-fight-club/"&gt;Wondermark&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
&lt;iframe src="http://player.vimeo.com/video/19084266?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="400" height="225" frameborder="0" webkitallowfullscreen="webkitAllowFullScreen" allowfullscreen="allowFullScreen"&gt;
&lt;/iframe&gt;
[Jane Austen&amp;#8217;s Fight Club](http://vimeo.com/19084266) from [Keith
Paugh](http://vimeo.com/keithpaugh) on [Vimeo](http://vimeo.com).

&lt;p&gt;
&lt;/center&gt;
&lt;/p&gt;
Sink The Bismarck:

&lt;p&gt;
&lt;center&gt;
&lt;iframe width="420" height="315" src="http://www.youtube-nocookie.com/embed/5cs_es5DR8U?rel=0" frameborder="0" allowfullscreen="allowfullscreen"&gt;
&lt;/iframe&gt;
&lt;/center&gt;
&lt;/p&gt;
Storm - a beat poem:

&lt;p&gt;
&lt;center&gt;
&lt;iframe width="560" height="315" src="http://www.youtube-nocookie.com/embed/HhGuXCuDb1U?rel=0" frameborder="0" allowfullscreen="allowfullscreen"&gt;
&lt;/iframe&gt;
&lt;/center&gt;
&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 22 Sep 2011 23:23:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-22:2011/09/more-videos.html</guid><category>misc</category><category>video</category></item><item><title>Of maps and men</title><link>https://www.grey-panther.net/2011/09/of-maps-and-men.html</link><description>&lt;p&gt;A very cool &lt;a href="http://migrationsmap.net/#/JPN/departures"&gt;visualization of the imigration / emigration
data&lt;/a&gt;:&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;

[![](http://2.bp.blogspot.com/-Dwdqbim7Fm4/Tnn4P5DPHZI/&lt;span class="caps"&gt;AAAAAAAAEU0&lt;/span&gt;/iLOqw-j2zU8/s320/migrationsmap.png)](http://migrationsmap.net/#/&lt;span class="caps"&gt;JPN&lt;/span&gt;/departures)

&lt;/div&gt;

&lt;p&gt;To remember: the relative sizes of countries / continents on most maps
is not representative of the true ratios, because most &lt;a href="http://en.wikipedia.org/wiki/Map_projection"&gt;map
projections&lt;/a&gt; were not meant
for that. If you want to play around with different projections, here is
&lt;a href="http://demonstrations.wolfram.com/WorldMapProjections/"&gt;a nice page from
Wolfram&lt;/a&gt;
(unfortunately you have to install a \~&lt;span class="caps"&gt;100MB&lt;/span&gt; plugin to get it to work).
If you need the raw data, just &lt;a href="http://en.wikipedia.org/wiki/List_of_countries_by_total_area_(graphical)"&gt;go to
Wikipedia&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, here is a good essay from Asimov (from 1989) about the
scientific process: &lt;a href="http://chem.tufts.edu/AnswersInScience/RelativityofWrong.htm"&gt;The Relativity of
Wrong&lt;/a&gt; -
small nitpick: it would have been even better if it had used the metric
system or at least it didn&amp;#8217;t switch from miles to inches in he middle of
the&amp;nbsp;essay.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 21 Sep 2011 17:53:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-21:2011/09/of-maps-and-men.html</guid><category>misc</category><category>maps</category><category>html5</category><category>philosophy</category></item><item><title>Informative videos about copyright and remixing issues</title><link>https://www.grey-panther.net/2011/09/informative-videos-about-copyright-and.html</link><description>&lt;p&gt;Walking on Eggshells: Documentary about Remix Culture - via &lt;a href="http://comixtalk.com/walking_eggshells_documentary_about_remix_culture"&gt;the
comixtalk
blog&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
&lt;iframe width="560" height="315" src="http://www.youtube-nocookie.com/embed/videoseries?list=PL38992BF4D81A62FA&amp;amp;hl=en_US" frameborder="0" allowfullscreen="allowfullscreen"&gt;
&lt;/iframe&gt;
&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;Internet is Freedom - a speech given by Lawrence Lessig at the Italian
Parlament - via &lt;a href="http://blog.security4all.be/2010/03/three-strike-law-threatening-belgium.html"&gt;the Security4All
blog&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
&lt;iframe width="420" height="315" src="http://www.youtube-nocookie.com/embed/fe2UsBXr-ls?rel=0" frameborder="0" allowfullscreen="allowfullscreen"&gt;
&lt;/iframe&gt;
&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.pbs.org/independentlens/copyright-criminals/"&gt;&lt;span class="caps"&gt;PBS&lt;/span&gt;: Copyright
Criminals&lt;/a&gt; -
while the video is not online, you can watch the trailer and listen to
some &lt;a href="http://ccmixter.org/copyrightcriminals/view/contest/winners"&gt;remixes inspired by
it&lt;/a&gt; which
are under a &lt;span class="caps"&gt;CC&lt;/span&gt;&amp;nbsp;license.&lt;/p&gt;
&lt;p&gt;And just as a bonus: a cynical video about filtering the Internet - via
&lt;a href="http://www.tjmcintyre.com/2010/05/for-safer-and-cleaner-internet.html"&gt;the &lt;span class="caps"&gt;IT&lt;/span&gt; Law in Ireland
blog&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
&lt;iframe width="560" height="315" src="http://www.youtube-nocookie.com/embed/RkmcupFx3FQ?rel=0" frameborder="0" allowfullscreen="allowfullscreen"&gt;
&lt;/iframe&gt;
&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;The History of Copyright Law - via &lt;a href="http://laughingsquid.com/the-history-of-copyright-law/"&gt;the laughing
squid&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
&lt;iframe width="560" height="315" src="http://www.youtube-nocookie.com/embed/tk862BbjWx4?rel=0" frameborder="0" allowfullscreen="allowfullscreen"&gt;
&lt;/iframe&gt;
&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;&lt;span class="caps"&gt;TED&lt;/span&gt; Johanna Blakley: Lessons from fashion&amp;#8217;s free&amp;nbsp;culture&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: it seems that &lt;a href="http://hype-free.blogspot.com/2010/06/copyright-is-not-theft.html"&gt;I already
posted&lt;/a&gt;
the last video - admittedly I&amp;#8217;m becoming senile with the advance of the
years&amp;nbsp;:-)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 21 Sep 2011 17:02:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-21:2011/09/informative-videos-about-copyright-and.html</guid><category>freedom</category><category>music</category><category>copyright</category><category>advocacy</category><category>internet</category><category>video</category></item><item><title>Recording test performance with Jenkins</title><link>https://www.grey-panther.net/2011/09/recording-test-performance-with-jenkins.html</link><description>&lt;p&gt;In many (most?) systems performance is an important non-functional
requirement. And even if you attained the required performance, it is
useful to keep an eye on it to detect if a codechange involuntarily
deteriorates it. Enter the &lt;a href="https://wiki.jenkins-ci.org/display/JENKINS/Performance+Plugin"&gt;Performance
plugin&lt;/a&gt;
for &lt;a href="http://jenkins-ci.org/"&gt;Jenkins&lt;/a&gt;. Using it you can record the
performance (as in: speed of execution) of your test runs and set alter
thresholds which cause the build to fail. Also it can generate graphs
like the one&amp;nbsp;below:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://www.transylvania-jug.org/wp-content/uploads/2011/09/respondingTimeGraph.png" /&gt;&lt;/p&gt;
&lt;p&gt;To do&amp;nbsp;this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Have Jenkins&amp;nbsp;installed&lt;/li&gt;
&lt;li&gt;Intstall the Performance plugin (or upgrade to the latest version,
    since there was &lt;a href="https://issues.jenkins-ci.org/browse/JENKINS-9655"&gt;a
    bug&lt;/a&gt; in earlier
    versions which prevented the parsing of the JUnit&amp;nbsp;reports)&lt;/li&gt;
&lt;li&gt;For your build check “Publish Performance test result report” and
    add locations where the reports should be collected&amp;nbsp;from.&lt;/li&gt;
&lt;li&gt;That’s it! Future builds will collect the performance data and you
    can access it using the “Performance Trend” link (at the job level)
    or the “Performance Report” link (at the build&amp;nbsp;level)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;More details /&amp;nbsp;caveats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The paths are defined as &lt;span class="caps"&gt;ANT&lt;/span&gt; file expressions (that is you can use
    “**” to specify an arbitrary level of directories, for example:
    &lt;code&gt;target/surefire-reports/**/TEST*.xml&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;JUnit performance is grouped at the test-class level, thus it
    probably makes sense create separate project / module which group
    the performance test&amp;nbsp;cases.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.transylvania-jug.org/archives/174"&gt;Benchmarking is hard&lt;/a&gt;
    and JUnit doesn’t give you any provisions to do warmup or to repeat
    the tests multiple times. To make your test as relevant as possible
    you should do this manually (warmup code can be placed in the
    @Before method for example). A properly set up JMeter task accounts
    for this&amp;nbsp;already.&lt;/li&gt;
&lt;li&gt;TestNG tests can also be parsed as long as the test run is set to
    produce a JUnit compatible&amp;nbsp;report.&lt;/li&gt;
&lt;li&gt;Slightly off-topic: to integrate a JMeter run into your maven build,
    you can use the
    &lt;a href="http://maven.apache.org/plugins/maven-antrun-plugin/"&gt;AntRun&lt;/a&gt;plugin:&lt;code&gt;&lt;/code&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;maven-antrun-plugin
1.6

test

run
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Article originally posted to the &lt;a href="http://www.transylvania-jug.org/archives/241"&gt;Transylvania &lt;span class="caps"&gt;JUG&lt;/span&gt;
blog&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 20 Sep 2011 19:16:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-20:2011/09/recording-test-performance-with-jenkins.html</guid><category>jmeter</category><category>jenkins</category><category>maven</category><category>java</category><category>jug</category></item><item><title>Audio quality redux</title><link>https://www.grey-panther.net/2011/09/audio-quality-redux.html</link><description>&lt;p&gt;Yet an other example for how &lt;a href="http://hype-free.blogspot.com/2011/03/audio-quality.html"&gt;simple
steps&lt;/a&gt; can
improve the audio quality considerably. The clip below is taken from
&lt;a href="http://garry.posterous.com/how-steve-jobs-handles-trolls-wwdc-1997"&gt;this
blogpost&lt;/a&gt;
(which I originally found trough &lt;a href="http://news.ycombinator.com/item?id=2944579"&gt;Hacker
News&lt;/a&gt;). You can find the
processed version &lt;a href="http://www.youtube.com/watch?v=lQadOr9B7Qc"&gt;here&lt;/a&gt;, or
use the controls below to do a quick A/B comparison of the two. The
processing was very simple (1. noise removal and 2. running trough the
Levelator) and&amp;nbsp;quick.&lt;/p&gt;
&lt;p&gt;&lt;link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"&gt;&lt;/link&gt;&lt;/p&gt;
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"&gt;&lt;/script&gt;

&lt;script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"&gt;&lt;/script&gt;

&lt;script src="https://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"&gt;&lt;/script&gt;

&lt;p&gt;&lt;/p&gt;
&lt;style&gt;
  #vplayerWrapper {&lt;br&gt;&lt;/br&gt;
    width: 424px;&lt;br&gt;&lt;/br&gt;
    height: 315px;&lt;br&gt;&lt;/br&gt;&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;.vplayer {&lt;br&gt;&lt;/br&gt;
    overflow: hidden;&lt;br&gt;&lt;/br&gt;
    border: 1px solid black;&lt;br&gt;&lt;/br&gt;&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;#firstVPlayer {&lt;br&gt;&lt;/br&gt;
    float: left;&lt;br&gt;&lt;/br&gt;&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;#secondVPlayer {&lt;br&gt;&lt;/br&gt;
    float: right;&lt;br&gt;&lt;/br&gt;&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;.vplayerContainer {&lt;br&gt;&lt;/br&gt;
    position: relative;&lt;br&gt;&lt;/br&gt;
    width: 420px;&lt;br&gt;&lt;/br&gt;
    height: 315px;&lt;br&gt;&lt;/br&gt;
  }&lt;br&gt;&lt;/br&gt;
  &lt;/style&gt;
&lt;div id="vplayerWrapper"&gt;&lt;/p&gt;
&lt;div id="firstVPlayer" class="vplayer"&gt;

&lt;div id="firstVPlayerContainer" class="vplayerContainer"&gt;

&lt;div id="firstVPlayerTarget"&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;div id="secondVPlayer" class="vplayer"&gt;

&lt;div id="secondVPlayerContainer" class="vplayerContainer"&gt;

&lt;div id="secondVPlayerTarget"&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;p&gt;&lt;input type="button" id="play"&gt;&lt;/input&gt;&lt;br /&gt;&amp;nbsp;Position:&lt;/p&gt;
&lt;div id="video-position" style="margin: 10px; width: 420px;"&gt;

&lt;/div&gt;

&lt;p&gt;Volume:&lt;/p&gt;
&lt;div id="video-volume" style="margin: 10px; width: 100px;"&gt;

&lt;/div&gt;

&lt;p&gt;Crossfade (Original -&amp;nbsp;New):&lt;/p&gt;
&lt;div id="video-crossfade" style="margin: 10px; width: 100px;"&gt;

&lt;/div&gt;

&lt;p&gt;
&lt;script&gt;&lt;br /&gt;
var ytPlayers = [];&lt;br /&gt;
var volume = 100, crossfade =&amp;nbsp;0;&lt;/p&gt;

&lt;p&gt;function onPlayerError(errorCode) {&lt;br /&gt;
  alert("An error occured of type:" + errorCode);&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;

&lt;p&gt;function updatePlayerInfo() {&lt;br /&gt;
  if (0 == ytPlayers.length) { return; }&lt;br /&gt;
  if (!ytPlayers[0]) { return; }&lt;br /&gt;
  if (!ytPlayers[0].getDuration) { return;&amp;nbsp;}&lt;/p&gt;

&lt;p&gt;var position = ytPlayers[0].getCurrentTime() * 100 / ytPlayers[0].getDuration();&lt;br /&gt;
  $("#video-position").slider("option", "value", position);&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;

&lt;p&gt;function setVolume() {&lt;br /&gt;
  var p1 = (100 - crossfade) / 100;&lt;br /&gt;
  var p2 = crossfade /&amp;nbsp;100;&lt;/p&gt;

&lt;p&gt;ytPlayers[0].setVolume(volume * p1);&lt;br /&gt;
  ytPlayers[1].setVolume(volume *&amp;nbsp;p2);&lt;/p&gt;

&lt;p&gt;var width = 420;&lt;br /&gt;
  var w1 = width * p1;&lt;br /&gt;
  var w2 = width *&amp;nbsp;p2;&lt;/p&gt;

&lt;p&gt;$('#firstVPlayer').width(w1);&lt;br /&gt;
  $('#secondVPlayer').width(w2);&lt;br /&gt;
  $('#secondVPlayerContainer').css('left', -w1);&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;

&lt;p&gt;function onYouTubePlayerReady(playerId) {&lt;br /&gt;
  var ytplayer = document.getElementById(playerId);&lt;br /&gt;
  ytplayer.addEventListener("onError", "onPlayerError");&lt;br /&gt;
  ytplayer.cueVideoById(playerId);&lt;br /&gt;
  ytplayer.seekTo(0, true);&lt;br /&gt;
  ytplayer.pauseVideo();&lt;br /&gt;
  ytplayer.setVolume(0);&lt;br /&gt;
  if (2 == ytPlayers.push(ytplayer)) {&lt;br /&gt;
    var ppButton = $('#play');&lt;br /&gt;
    ppButton.val('Play');&lt;br /&gt;
    ppButton.click(function() {&lt;br /&gt;
      if ('Play' == ppButton.val()) {&lt;br /&gt;
        ppButton.val('Pause');&lt;br /&gt;
        for (var i in ytPlayers) { ytPlayers[i].playVideo(); }&lt;br /&gt;
      }&lt;br /&gt;
      else {&lt;br /&gt;
        ppButton.val('Play');&lt;br /&gt;
        for (var i in ytPlayers) { ytPlayers[i].pauseVideo(); }&lt;br /&gt;
      }&lt;br /&gt;&amp;nbsp;});&lt;/p&gt;

&lt;p&gt;$("#video-position").slider({&lt;br /&gt;
      change : function(e, u) {&lt;br /&gt;
        if (!e.orginalEvent) { return; }&lt;br /&gt;
        for (var i in ytPlayers) {&lt;br /&gt;
          if (0 == ytPlayers[i].getDuration()) { return; }&lt;br /&gt;
        }&lt;br /&gt;
        for (var i in ytPlayers) {&lt;br /&gt;
          var d = ytPlayers[i].getDuration();&lt;br /&gt;
          ytplayer.seekTo(d * u.value / 100, true);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;&amp;nbsp;});&lt;/p&gt;

&lt;p&gt;$("#video-volume").slider({&lt;br /&gt;
      value: volume,&lt;br /&gt;
      change: function(e, u) {&lt;br /&gt;
        volume = u.value;&lt;br /&gt;
        setVolume();&lt;br /&gt;
      }&lt;br /&gt;&amp;nbsp;});&lt;/p&gt;

&lt;p&gt;$("#video-crossfade").slider({&lt;br /&gt;
      change: function(e, u) {&lt;br /&gt;
        crossfade = u.value;&lt;br /&gt;
        setVolume();&lt;br /&gt;
      }&lt;br /&gt;&amp;nbsp;});&lt;/p&gt;

&lt;p&gt;setVolume();&lt;br /&gt;
  }&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;

&lt;p&gt;function embedYTPlayer(videoId, targetDivId) {&lt;br /&gt;
  var params = { allowScriptAccess: "always" };&lt;br /&gt;
  var atts = { id: videoId };&lt;br /&gt;
  swfobject.embedSWF("http://www.youtube.com/apiplayer?" +&lt;br /&gt;
                     "version=3&amp;enablejsapi=1&amp;playerapiid=" + videoId,&lt;br /&gt;
                     targetDivId, "420", "315", "9", null, null, params, atts)&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;

&lt;p&gt;embedYTPlayer('&lt;span class="caps"&gt;FF&lt;/span&gt;-tKLISfPE', 'firstVPlayerTarget');&lt;br /&gt;
embedYTPlayer('lQadOr9B7Qc', 'secondVPlayerTarget');&lt;br /&gt;
setInterval(updatePlayerInfo, 250);&lt;br /&gt;
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;: For people reading the post trough an &lt;span class="caps"&gt;RSS&lt;/span&gt; reader: you probably need
to click trough &lt;a href="http://hype-free.blogspot.com/2011/09/audio-quality-redux.html"&gt;to the
site&lt;/a&gt; to
see the comparison in action, since most (all?) &lt;span class="caps"&gt;RSS&lt;/span&gt; readers filter out
javascript for security&amp;nbsp;reasons.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;: If you are interested in the simple script which was use to interact
with the two youtube players, you can find it in &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/youtube_mix/youtube_mix.html"&gt;my code
repository&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 20 Sep 2011 15:20:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-20:2011/09/audio-quality-redux.html</guid><category>audio</category><category>audacity</category><category>audio processing</category><category>noise removal</category></item><item><title>Power Line Humm Removal With Audacity</title><link>https://www.grey-panther.net/2011/09/power-line-humm-removal-with-audacity.html</link><description>&lt;p&gt;As a response to George Starcher&amp;#8217;s &lt;a href="http://www.youtube.com/watch?v=u14m99vFcE4"&gt;Removing Power Line Hum from Audio
with GarageBand&lt;/a&gt; I would
like to post a quick tutorial on how to do the same with
&lt;a href="http://audacity.sourceforge.net/"&gt;Audacity&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
&lt;iframe width="560" height="315" src="http://www.youtube-nocookie.com/embed/w0E-UO2Br1o" frameborder="0" allowfullscreen="allowfullscreen"&gt;
&lt;/iframe&gt;
&lt;/center&gt;
&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 18 Sep 2011 16:45:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-18:2011/09/power-line-humm-removal-with-audacity.html</guid><category>audio</category><category>audacity</category><category>audio processing</category><category>noise removal</category></item><item><title>Protein Shakes site review</title><link>https://www.grey-panther.net/2011/09/protein-shakes-site-review.html</link><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;

[![](http://www.strongernutrition.com/productimages/400216_500_500.jpg)](http://www.strongernutrition.com/productimages/400216_500_500.jpg)

&lt;/div&gt;

&lt;p&gt;This is something new for me: &lt;a href="http://www.strongernutrition.com/Products/Sports-Nutrition/Proteins/Protein-Shakes.aspx"&gt;protein
shakes&lt;/a&gt;.
Medically I can&amp;#8217;t offer advice about it (I&amp;#8217;m weary about using foreign
substances not recommended by a specialist), but the site certainly is
has some positive&amp;nbsp;signs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The badges at the bottom are clickable and they go to the respective
    sites which certify the&amp;nbsp;site&lt;/li&gt;
&lt;li&gt;The domain is registered since 2006 and they are paypal verified
    since&amp;nbsp;2007&lt;/li&gt;
&lt;li&gt;They have an active Facebook and Twitter&amp;nbsp;account&lt;/li&gt;
&lt;li&gt;They use paypal / google checkout for payment which reduces your
    risk&amp;nbsp;considerably&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They also have also some less positive&amp;nbsp;signs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There is no physical contact&amp;nbsp;address&lt;/li&gt;
&lt;li&gt;The registration details are hidden by proxy&amp;nbsp;registration&lt;/li&gt;
&lt;li&gt;The phone-number is a generic one (I would have liked one which
    coincides with the physical&amp;nbsp;location)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All in all I would recommend this site for small purchases from inside
the &lt;span class="caps"&gt;USA&lt;/span&gt; (they don&amp;#8217;t deliver internationally). Also, I would consult a
doctor (or multiple doctors) about the possible effect of the
substances. In my view (and I&amp;#8217;m no doctor) this is more serious than the
homeopathic or &amp;#8220;natural&amp;#8221; substances and it should be handled with care.
Then again, I&amp;#8217;m also against medicine / medical devices (like glasses)
being sold in places without expert supervision (like&amp;nbsp;supermarkets).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 16 Sep 2011 20:33:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-16:2011/09/protein-shakes-site-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Running JRuby on 64 bit Windows</title><link>https://www.grey-panther.net/2011/09/running-jruby-on-64-bit-windows.html</link><description>&lt;p&gt;Usually it is as simple as: download, install, run. You can run into
problems however if you have both the 32 bit and 64 bit JVMs installed
(which is quite often) because it will try to use the 32 bit &lt;span class="caps"&gt;JVM&lt;/span&gt;. You
can check which &lt;span class="caps"&gt;JVM&lt;/span&gt; is being used from the command&amp;nbsp;line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;jruby --version
jruby 1.6.3 (ruby-1.8.7-p330) (2011-07-07 965162f) (Java HotSpot(TM) 64-Bit Server VM 1.7.0) [Windows 7-amd64-java] # 64 bit
jruby 1.6.3 (ruby-1.8.7-p330) (2011-07-07 965162f) (Java HotSpot(TM) Client VM 1.6.0_26) [Windows 7-x86-java] # 32 bit
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To work around this issue, specify the &lt;span class="caps"&gt;JVM&lt;/span&gt; to use in your jruby.bat (or
other batch files installed by gems like vagrant.bat) explicitly.
Example&amp;nbsp;jruby.bat:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;@ECHO OFF
java -Djruby.home=C:\jruby-1.6.3 -jar  -jar &amp;quot;C:\jruby-1.6.3\lib\jruby.jar&amp;quot; %1 %2 %3 %4 %5 %6 %7 %8 %9
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Example&amp;nbsp;vagrant.bat&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;@ECHO OFF
java -Djruby.home=C:\jruby-1.6.3 -jar &amp;quot;C:\jruby-1.6.3\lib\jruby.jar&amp;quot; &amp;quot;C:/jruby-1.6.3/bin/vagrant&amp;quot; %1 %2 %3 %4 %5 %6 %7 %8 %9
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 13 Sep 2011 19:33:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-13:2011/09/running-jruby-on-64-bit-windows.html</guid><category>ruby</category><category>windows</category><category>jruby</category><category>64bit</category><category>java</category></item><item><title>Using less with syntax highlight</title><link>https://www.grey-panther.net/2011/09/using-less-with-syntax-highlight.html</link><description>&lt;p&gt;You can use vim as your pager and obtain two benefits: syntax highlight
and access to all the advanced commands (like search). You can do this
under ubuntu by adding the following line to your &lt;code&gt;~/.bashrc&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;alias less=&amp;#39;/usr/share/vim/vimcurrent/macros/less.sh&amp;#39;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You have to have vim installed (which doesn&amp;#8217;t come by default, but
    it is as simple as &lt;code&gt;sudo apt-get install vim-nox&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;It supports viewing directly bz2 and gz archives as well as pipe
    input from stdin (but in that case it fails sometime to&amp;nbsp;highlight)&lt;/li&gt;
&lt;li&gt;Edit commands (like dd) are disabled, so you can&amp;#8217;t accidentally
    modify the file you are&amp;nbsp;viewing&lt;/li&gt;
&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 13 Sep 2011 19:14:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-13:2011/09/using-less-with-syntax-highlight.html</guid><category>ubuntu</category><category>linux</category><category>cli</category></item><item><title>Link love</title><link>https://www.grey-panther.net/2011/09/link-love.html</link><description>&lt;p&gt;Here are a couple of close friends&amp;#8217; blogs. They are just starting out
writing, but hopefully giving them some link love will encourage them to
write even more great content. Without further ado, in no particular&amp;nbsp;order:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://nosuchhost.blogspot.com/"&gt;No Such&amp;nbsp;Host&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.scientixs.com/"&gt;Scienti-&lt;span class="caps"&gt;XS&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://vtopan.wordpress.com/"&gt;VTopan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 09 Sep 2011 18:23:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-09:2011/09/link-love.html</guid><category>friends</category><category>blog</category><category>personal</category></item><item><title>100 years of style</title><link>https://www.grey-panther.net/2011/09/100-years-of-style.html</link><description>&lt;p&gt;A very entertaining video in the style of &lt;a href="http://www.youtube.com/watch?v=dMH0bHeiRNg"&gt;Evolution of
Dance&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
&lt;iframe width="560" height="345" src="http://www.youtube-nocookie.com/embed/7JxfgId3XTs?rel=0" frameborder="0" allowfullscreen="allowfullscreen"&gt;
&lt;/iframe&gt;
&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;Hattip to
&lt;a href="http://refresh.ro/2011/09/100-de-ani-de-moda-londoneza/"&gt;refresh.ro&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 06 Sep 2011 13:15:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-06:2011/09/100-years-of-style.html</guid><category>fun</category><category>video</category></item><item><title>Quick’n’dirty Mediawiki file crawler</title><link>https://www.grey-panther.net/2011/09/quickm.html</link><description>&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http://10.0.0.1&amp;#39;&lt;/span&gt; &lt;span class="nt"&gt;MIME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;image/jpeg&amp;#39;&lt;/span&gt;   
 &lt;span class="nt"&gt;bash&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nt"&gt;wget&lt;/span&gt; &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="nt"&gt;-O&lt;/span&gt; &lt;span class="nt"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;$URL/wiki/index.php?title=Special:MIMESearch&amp;amp;mime;=$MIME&amp;amp;limit;=500&amp;amp;offset;=0&amp;quot;&lt;/span&gt;   
 &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nt"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-Po&lt;/span&gt; &lt;span class="err"&gt;&amp;quot;\&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;wiki&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;images&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;]+&amp;quot;&lt;/span&gt;   
 &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;xargs&lt;/span&gt; &lt;span class="na"&gt;-n1&lt;/span&gt; &lt;span class="na"&gt;-I&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="nx"&gt;wget&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;$URL{}&amp;quot;&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;What it does: it uses the &amp;#8220;&lt;span class="caps"&gt;MIME&lt;/span&gt; search&amp;#8221; functionality on the wiki to
locate files of a certain mime type and then xargs+wget each of&amp;nbsp;them.&lt;/p&gt;
&lt;p&gt;Limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A maximum of 500 files are&amp;nbsp;downloaded&lt;/li&gt;
&lt;li&gt;Downloads are not parallelized, thus slower than they could&amp;nbsp;be&lt;/li&gt;
&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 06 Sep 2011 12:36:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-06:2011/09/quickm.html</guid><category>mediawiki</category><category>wiki</category><category>linux</category><category>bash</category></item><item><title>Creating a non-MAC bound CentOS 6 machine</title><link>https://www.grey-panther.net/2011/09/creating-non-mac-bound-centos-6-machine.html</link><description>&lt;p&gt;I was building VMs to be deployed with &lt;a href="http://vagrantup.com/"&gt;Vagrant&lt;/a&gt;
/ &lt;a href="http://www.virtualbox.org/"&gt;Virtualbox&lt;/a&gt; for our QAs and discovered
that on new instantiations of the machine the networking interface
wasn&amp;#8217;t coming up. The problem was that Virtualbox was assigning a random
&lt;span class="caps"&gt;MAC&lt;/span&gt; address to the &lt;span class="caps"&gt;NIC&lt;/span&gt; (and rightly so, to avoid conflicts). I used the
following steps to solve&amp;nbsp;this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Remove the &lt;span class="caps"&gt;HWADDR&lt;/span&gt; line from
    &lt;code&gt;/etc/sysconfig/network-scripts/ifcfg/eth0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Delete the file &lt;code&gt;/etc/udev/rules.d/70-persistent-net.rules&lt;/code&gt; (&lt;a href="http://bachem.wordpress.com/2010/08/27/udev-renamed-network-interface-eth0-to-eth5/"&gt;hat
    tip&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These two steps are specific to CentOS 6 (on 5.x the first step is
sufficient). Also, the second if is recreated at the next boot, thus
after rm-ing it, you should shut down the machine and package it (not
start it again, or if you do, you should remove the file&amp;nbsp;again).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 05 Sep 2011 10:04:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-05:2011/09/creating-non-mac-bound-centos-6-machine.html</guid><category>virtualbox</category><category>centos</category><category>linux</category><category>networking</category><category>vagrant</category><category>virtualization</category></item><item><title>Levant Digital Marketing review</title><link>https://www.grey-panther.net/2011/09/levant-digital-marketing-review.html</link><description>&lt;p&gt;Levant Digital Marketing is a company which does &lt;a href="http://www.levantdigital.com/services/seooptimization/"&gt;Search Engine
Optimization in the Middle
East&lt;/a&gt;. They seem
to be a very new company (the domain was registered in January of 2011).
They are part of &amp;#8220;&lt;span class="caps"&gt;JHG&lt;/span&gt; Holding&amp;#8221;, but this itself is also only from 2009
(and their site contains minimal content). I didn&amp;#8217;t manage to find their
headquarters on Google Maps either (but this might just be an issue with
Google Maps in foreign countries). Their phone number is indeed from
Lebanon (as their physical address is). Their facebook page is
non-existent at the moment (was it deleted?) and the twitter account is
completely&amp;nbsp;empty.&lt;/p&gt;
&lt;p&gt;All in all, while I couln&amp;#8217;t find anything explicitly negative about
them, it is more the case that I couldn&amp;#8217;t find anything concrete about
them :-). As far as advice goes, when starting out you are better off
with &lt;a href="http://sixrevisions.com/web-development/10-seo-tips-to-remember-when-building-your-site/"&gt;some simple
steps&lt;/a&gt;,
and when you grow you might consider looking into a &lt;span class="caps"&gt;SEO&lt;/span&gt; consultancy, but
take care to find a reputable one rather than a cheap one or one which
promises you the&amp;nbsp;moon.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from ReviewMe. Under the terms
of the understanding I was not obligated to skew my viewpoint in any way
(ie. only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 01 Sep 2011 16:15:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-09-01:2011/09/levant-digital-marketing-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Paving site review</title><link>https://www.grey-panther.net/2011/08/paving-site-review.html</link><description>&lt;p&gt;This is a fairly trustworthy site to buy &lt;a href="http://www.wickes.co.uk/paving+walling/paving/icat/phdpaving/"&gt;paving
slabs&lt;/a&gt;
and other construction materials. It checks out on on all sources I
usually use: domain registration, physical address, reputation sites and
a quick search for complains. So go ahead and look around, but remember
that for larger purchases you should consult an expert. They also have a
fairly standard return policy, so if you do find out that you don&amp;#8217;t need
a certain item, you might still be able to salvage some&amp;nbsp;money.&lt;/p&gt;
&lt;p&gt;External pavement is tricky in general, so you really need to consult
somebody who done it before. It requires some kind of foundation (mostly
compacted sand) and manual work to lay each piece. When finished it can
look very nice, but it can also be very adversarial to people / children
who happen to fall on them. I would recommend grass, asphalt (possibly a
small strip of it for the tires if we are talking about a garage) and
only after that paving with slabs. Good luck with the&amp;nbsp;construction!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 03 Aug 2011 22:16:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-08-03:2011/08/paving-site-review.html</guid><category>reviewme</category><category>review</category></item><item><title>IVA site review</title><link>https://www.grey-panther.net/2011/08/iva-site-review.html</link><description>&lt;p&gt;Reviewing this site pose a conundrum to me (other than how to write the
word conundrum): on the one side they seem to be a legitimate site for
&lt;a href="http://www.bainesandernst.co.uk/iva/"&gt;&lt;span class="caps"&gt;IVA&lt;/span&gt; advice&lt;/a&gt;, with a long standing
domain registration, a physical address and even an entry at the Office
of Fair trading (which seem to be the equivalent of the Better Business
Bureau). On the other hand there are other sites with the same profile -
debt relief - which refer the same physical address but are hosted
elsewhere (in Germany for&amp;nbsp;example).&lt;/p&gt;
&lt;p&gt;I can&amp;#8217;t draw a definite conclusion about this. I&amp;#8217;m not from the &lt;span class="caps"&gt;UK&lt;/span&gt; and
have zero familiarity with the &lt;span class="caps"&gt;UK&lt;/span&gt; law. Probably the only advice I can
give at this moment is to try asking your close family or your trusted
friends. I imagine that it is painful to do so, but this is the only
source I can think of where you can get money without the exorbitant
rates asked by payday lenders. All that I can do is hope that you
prevail, since I have a deep belief that as long as you have
determination, you will find your&amp;nbsp;place.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 03 Aug 2011 21:50:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-08-03:2011/08/iva-site-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Setting up git-daemon under Ubuntu</title><link>https://www.grey-panther.net/2011/06/setting-up-git-daemon-under-ubuntu.html</link><description>&lt;p&gt;The scenario is the following: inside a (somewhat) trusted &lt;span class="caps"&gt;LAN&lt;/span&gt; you would
like to set up git-daemon so that your coworkers can access your
repositories. This solution is not appropriate in cases where you want
to share with random people on the interwebs. This short description is
based loosely on &lt;a href="http://rockfloat.com/blog/?id=40"&gt;this blogpost&lt;/a&gt; and
it was updated to contain more details and tested with Ubuntu&amp;nbsp;11.04.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;install the git-daemon-runit package:
    &lt;code&gt;sudo apt-get install git-daemon-runit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;decide where you would like to keep your git repositories - it can
    be your home folder, if it&amp;#8217;s not encrypted (if it&amp;#8217;s encrypted it
    won&amp;#8217;t work because it only gets decrypted once you log in, so the
    git repositories won&amp;#8217;t be available unless you log in). Lets say
    that you&amp;#8217;ve decided it to be &lt;code&gt;/var/git&lt;/code&gt;. Create it:&lt;br /&gt;
&lt;code&gt;sudo mkdir /var/git        sudo chown $USER /var/git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Now edit the file &lt;code&gt;/etc/sv/git-daemon/run&lt;/code&gt; and make it like the
    following (bold marks the spots which were changed):&lt;br /&gt;
&lt;code&gt;#!/bin/sh        exec 2&amp;gt;&amp;amp;1         echo 'git-daemon starting.'         exec chpst -ugitdaemon \           "$(git --exec-path)"/git-daemon --verbose --export-all --base-path=/var/git /var/git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Restart the service:&lt;br /&gt;
&lt;code&gt;sudo sv restart git-daemon&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Enable it from the firewall:&lt;br /&gt;
&lt;code&gt;sudo ufw allow 9418/tcp&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;#8217;s it. Now every subdirectory from /var/git which &amp;#8220;looks like&amp;#8221; a git
repo (has a .git subdirectory) will be available over the git protocol.
Alternatively, you can remove the &amp;#8220;&amp;#8212;export-all&amp;#8221; option and create a
&amp;#8220;git-daemon-export-ok&amp;#8221; file in each subdirectory you would like to
export: touch&amp;nbsp;/var/git/core/git-daemon-export-ok&lt;/p&gt;
&lt;p&gt;You can symlink the directory to your home folder for your convenience:&lt;br /&gt;
&lt;code&gt;ln -s /var/git ~/projects/git&lt;/code&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 01 Jun 2011 20:19:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-06-01:2011/06/setting-up-git-daemon-under-ubuntu.html</guid><category>ubuntu</category><category>git</category><category>git-daemon</category></item><item><title>Adding tab completition to Maven3 under Ubuntu</title><link>https://www.grey-panther.net/2011/06/adding-tab-completition-to-maven3-under.html</link><description>&lt;p&gt;&lt;/p&gt;
Maven 3 was released recently (depending on your definition of recent),
but is not yet packaged for Ubuntu. This is generally not a problem,
since the &lt;a href="http://maven.apache.org/download.html"&gt;installation
instructions&lt;/a&gt; are easy to follow
(alternatively
&lt;a href="http://www.sonatype.com/books/mvnex-book/reference/installation-sect-maven-install.html#installation-sect-maven-linux"&gt;here&lt;/a&gt;
are the installation instructions from the Sonatype maven book), but you
don’t get tab completion in your terminal, which is quite a bummer,
since I don’t know how to write correctly without a&amp;nbsp;spellchecker.&lt;/p&gt;
&lt;p&gt;Fortunately the steps to add it are&amp;nbsp;simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://packages.ubuntu.com/natty/all/maven2/download"&gt;Download&lt;/a&gt; an
    older Maven2&amp;nbsp;package&lt;/li&gt;
&lt;li&gt;Extract from it the &lt;code&gt;/etc/bash_completion.d/maven2&lt;/code&gt; file (take care
    &lt;em&gt;not&lt;/em&gt; to install the package by&amp;nbsp;mistake)&lt;/li&gt;
&lt;li&gt;Put the extracted file into &lt;code&gt;/etc/bash_completion.d/maven3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Restart your&amp;nbsp;terminal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These steps should also work with other Linux distributions if they have
&lt;a href="http://bash-completion.alioth.debian.org/"&gt;bash-completion&lt;/a&gt;&amp;nbsp;installed.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This is a cross-post from the &lt;a href="http://www.transylvania-jug.org/archives/218"&gt;Transylvania-&lt;span class="caps"&gt;JUG&lt;/span&gt;
blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 01 Jun 2011 20:10:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-06-01:2011/06/adding-tab-completition-to-maven3-under.html</guid><category>ubuntu</category><category>bash</category><category>maven</category><category>java</category></item><item><title>adulttoys.com review</title><link>https://www.grey-panther.net/2011/05/adulttoyscom-review.html</link><description>&lt;p&gt;Sex sells, but in this case it is the reverse: money sold me to review
an &lt;a href="http://www.adulttoys.com/adult-sex-toys/"&gt;adult sex toys&lt;/a&gt; website.
Here we&amp;nbsp;go:&lt;/p&gt;
&lt;p&gt;I didn&amp;#8217;t use any sextoys myself to-date (although I would be open to try
some of the lighter versions), but I can see how online shopping and
discreet delivery can be a big advantage. A word of caution: always
consider the medical implications and don&amp;#8217;t force yourself into
un-natural situations which could end up hurting&amp;nbsp;you.&lt;/p&gt;
&lt;p&gt;Getting back to the store at&amp;nbsp;hand:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It only delivers inside of the &lt;span class="caps"&gt;USA&lt;/span&gt;, so it is a no-go for me (but
    there are plenty of local stores here, so I&amp;#8217;m not&amp;nbsp;complaining)&lt;/li&gt;
&lt;li&gt;Their site interface is pretty well made and usable, but there are
    bugs: for example when added one product to the cart and tried to
    check out, it appeared twice in the&amp;nbsp;cart&lt;/li&gt;
&lt;li&gt;One big plus: their entire site is available trough
    &lt;a href="https://www.adulttoys.com/adult-sex-toys/vibrators/bullet-eggs/"&gt;&lt;span class="caps"&gt;HTTPS&lt;/span&gt;&lt;/a&gt;.
    Even though they default to &lt;span class="caps"&gt;HTTP&lt;/span&gt;, this is still&amp;nbsp;great.&lt;/li&gt;
&lt;li&gt;Unfortunately their contact details are a little sketchy (and I mean
    it in the literal sense: there is very little information): they
    don&amp;#8217;t give a physical address, just a &lt;span class="caps"&gt;PO&lt;/span&gt; box from San Diego. They
    are also hosted by a San Diego company, which makes it very probable
    that they are based there, but again, there is no clear indication
    of this. Their contact form doesn&amp;#8217;t give an email address or a phone
    number. They are hosted on a dedicated server (good) but with &lt;span class="caps"&gt;IIS&lt;/span&gt;
    6.0 (not so good). They are doing their own credit-card processing
    from what I&amp;#8217;ve seen (I didn&amp;#8217;t go trough with an actual order) and I
    would be weary entrusting my credit-card to a company which is not
    specialized in this domain (the &lt;span class="caps"&gt;CC&lt;/span&gt; processing domain that&amp;nbsp;is).&lt;/li&gt;
&lt;li&gt;The site has no negatives on security rating sites like SiteAdvisor,
    &lt;span class="caps"&gt;WOT&lt;/span&gt; or Norton&amp;nbsp;SafeWeb.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All in all, I would do only small purchases on this site, at least
initially, from a disposable credit-card (PayPal offers these for&amp;nbsp;example)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 21 May 2011 09:53:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-05-21:2011/05/adulttoyscom-review.html</guid><category>reviewme</category><category>review</category></item><item><title>blackjackpractice.org review</title><link>https://www.grey-panther.net/2011/04/blackjackpracticeorg-review.html</link><description>&lt;p&gt;I was hired to write a review about blackjackpractice.org which
purportedly &lt;a href="http://blackjackpractice.org/"&gt;blackjack practice&lt;/a&gt;, however
I wasn&amp;#8217;t able to verify this, since the site is down (currently it is
showing a default directory listing from Apache, earlier today it was
showing an empty page). There is very little know about this by the
&lt;a href="http://whois.domaintools.com/blackjackpractice.org"&gt;usual&lt;/a&gt;
&lt;a href="http://www.mywot.com/en/scorecard/blackjackpractice.org"&gt;sources&lt;/a&gt;, and
there doesn&amp;#8217;t seem to be anything interesting on the same server (it is
hard to tell if the same person owns all the domain on the server due to
the &amp;#8220;privacy protected&amp;#8221;&amp;nbsp;registration).&lt;/p&gt;
&lt;p&gt;Now back to the idea to blackjack practice: can you really train
yourself? Probably, to some extent (hey, even Kent Beck - yes, that Kent
Back - has &lt;a href="http://pokerworkout.appspot.com/"&gt;a poker training
website&lt;/a&gt;). With regular exercise you
can memorize &lt;a href="http://en.wikipedia.org/wiki/Blackjack#Basic_strategy"&gt;basic strategy
table&lt;/a&gt; (this will
help you with any game, regardless if its with a live dealer or with a
machine - supposing that the machine is playing fair) and then you can
move to more advanced techniques like card counting or shuffle tracking.
I doubt however that you can achieve a level where this would be a
profitable&amp;nbsp;endeavor.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from ReviewMe. Under the&lt;br /&gt;
terms of the understanding I was not obligated to skew my viewpoint in&lt;br /&gt;
any way (ie. only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 15 Apr 2011 20:53:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-04-15:2011/04/blackjackpracticeorg-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Booting the Linux Kernel from Grub2</title><link>https://www.grey-panther.net/2011/04/booting-linux-kernel-from-grub2.html</link><description>&lt;p&gt;Recently a good friend of mine managed to uninstall all the kernels from
his Ubuntu machine (what can I say - Monday morning and no coffee is a
deadly combination). Luckily he had the install &lt;span class="caps"&gt;CD&lt;/span&gt; on hand so we did the&amp;nbsp;following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Boot from the &lt;span class="caps"&gt;CD&lt;/span&gt; (we had Internet&amp;nbsp;connection)&lt;/li&gt;
&lt;li&gt;Mount the Linux partition and chroot into&amp;nbsp;it&lt;/li&gt;
&lt;li&gt;Reinstall the kernel with&amp;nbsp;aptitude&lt;/li&gt;
&lt;li&gt;Reboot and go into Grub2 command&amp;nbsp;mode&lt;/li&gt;
&lt;li&gt;Now do the following (commands need to be adjusted to match your
    partition - also, tab completion works, so you don&amp;#8217;t have to guess)&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;insmod part_msdos
insmod ext2
set root=(hd0,3)
linux /boot/vmlinuz-2.6.32.38-generic root=/dev/sda3 ro
initrd /boot/initrd.img-2.6.38-6-686
boot
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It seems that most of the examples on the &amp;#8216;net are for Grub 1 and little
is out there for Grub 2. I found the following three: &lt;a href="http://www.justlinux.com/forum/showthread.php?threadid=152790"&gt;How to use Grub2
to boot Linux
manually&lt;/a&gt;,
&lt;a href="http://ubuntuforums.org/showthread.php?t=1195275"&gt;The Grub 2 Guide&lt;/a&gt;,
&lt;a href="http://www.dedoimedo.com/computers/grub-2.html#mozTocId584691"&gt;&lt;span class="caps"&gt;GRUB&lt;/span&gt; 2 bootloader - Full
tutorial&lt;/a&gt;.
Also, I didn&amp;#8217;t perform steps 4-5 because he just reinstalled Ubuntu (it
was a fresh install anyway), but I tried it out separately on my laptop
and it&amp;nbsp;works.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;HTH&lt;/span&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 12 Apr 2011 18:59:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-04-12:2011/04/booting-linux-kernel-from-grub2.html</guid><category>grub</category><category>linux</category><category>troubleshooting</category><category>grub2</category></item><item><title>The wrong time to update software…</title><link>https://www.grey-panther.net/2011/04/wrong-time-to-update-software.html</link><description>&lt;p&gt;is when the user is the busiest, for example when s/he just started your
application. See for example the screenshot below with Adobe Air (click
trough to see it in its full&amp;nbsp;beauty).&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;

[![](http://3.bp.blogspot.com/-r_lf3uTwZgY/TaMCg6ba3pI/&lt;span class="caps"&gt;AAAAAAAADWA&lt;/span&gt;/d2bvVKLpVQE/s320/adobe-air-update.png)](http://3.bp.blogspot.com/-r_lf3uTwZgY/TaMCg6ba3pI/&lt;span class="caps"&gt;AAAAAAAADWA&lt;/span&gt;/d2bvVKLpVQE/s1600/adobe-air-update.png)

&lt;/div&gt;

&lt;p&gt;The mistakes it&amp;nbsp;makes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It tries to do the update when I&amp;#8217;m trying to start Grooveshark (it
    interferes with my&amp;nbsp;intention)&lt;/li&gt;
&lt;li&gt;It consumes 100% of a core by polling for the presence of running
    applications (I suppose), effectively obliging me to do the update.
    This is combined with frequent releases (which otherwise would be a
    good thing) for maximum&amp;nbsp;annoyance.&lt;/li&gt;
&lt;li&gt;Although you can&amp;#8217;t see it in the screenshot, the updater has (had?)
    a bug when it asks for your sudo password: if you misstype it at
    first, then it asks for the root password (which doesn&amp;#8217;t exists
    under Ubuntu by default) and then it just gets into some weird state
    until the next update is&amp;nbsp;released.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To sum it up: You should download and install the updates in the
background (in a separate, versioned directory, always keeping just the
two most recent versions). Users shouldn&amp;#8217;t be bothered with this,
&lt;em&gt;especially when they are trying to get work&amp;nbsp;done!&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 11 Apr 2011 16:41:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-04-11:2011/04/wrong-time-to-update-software.html</guid><category>rant</category><category>programming</category></item><item><title>Recovering encrypted home directory under Ubuntu</title><link>https://www.grey-panther.net/2011/04/recovering-encrypted-home-directory.html</link><description>&lt;p&gt;While the home-folder encryption in Ubuntu is far from a perfect
solution (there is considerable data leakage from the swap file and the
temp directory - for example once I&amp;#8217;ve observed the flash videos from
Chromium ~~porn~~ private browsing mode being present in the /tmp
directory), it is a partial solution nevertheless and very easy to set
up during installation. However what can you do if you need to recover
the data because you &lt;a href="http://en.wikipedia.org/wiki/FUBAR"&gt;fubard&lt;/a&gt; your&amp;nbsp;system?&lt;/p&gt;
&lt;p&gt;Credit where credit is due: this guide is taken mostly from the &lt;a href="https://help.ubuntu.com/community/EncryptedPrivateDirectory"&gt;Ubuntu
wiki page&lt;/a&gt;.
Also, this is not an easy &amp;#8220;one-click&amp;#8221; process. You should proceed
carefully, especially if you don&amp;#8217;t have much experience with the command&amp;nbsp;line.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start Ubuntu (from a separate install, from the LiveCD, etc) and
    mount the source filesystem (this is usually as simple as going to
    the Places menu and selecting the&amp;nbsp;partition)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start a terminal (Alt+F2 -&gt; gnome-terminal) and navigate to the
    partitions home directory. Usually this will look like the&amp;nbsp;following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cd /media/9e6325c9-1140-44b7-9d8e-614599b27e05/home/
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now navigate to the users ecryptfs directory (things to note: it is
    &lt;strong&gt;e&lt;/strong&gt;cryptfs not encryptfs and your username does not coincide with
    your full name - the one you click on when you log&amp;nbsp;in)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cd .ecryptfs/username
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The next step is to recovery your &amp;#8220;mount password&amp;#8221; which is
    different from the password you use to log in (when it asks you,
    type in the login password used for this account - for which you are
    trying to recover the data). Take note of the returned password (you
    can copy it by selecting it and pressing Shift+Ctrl+C if you are
    using the Gnome&amp;nbsp;Terminal)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ecryptfs-unwrap-passphrase .ecryptfs/wrapped-passphrase
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now create a directory where you would like to mount the decrypted
    home&amp;nbsp;directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo mkdir /media/decrypted
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Execute the following and type in (or better - copy-paste) the
    &lt;em&gt;mount password&lt;/em&gt; you&amp;#8217;ve recovered&amp;nbsp;earlier&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo ecryptfs-add-passphrase --fnek
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;It will return something like the following. Take note of the
&lt;em&gt;second&lt;/em&gt; key (auth&amp;nbsp;tok):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Inserted auth tok with sig [9986ad986f986af7] into the user session keyring 
Inserted auth tok with sig [76a9f69af69a86fa] into the user session keyring
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now you are ready to mount the&amp;nbsp;directry:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo mount -t ecryptfs /media/9e6325c9-1140-44b7-9d8e-614599b27e05/home/.ecryptfs/username/.Private /media/decrypted
 Passphrase:  # mount passphrase
 Selection: aes
 Selection: 16
 Enable plaintext passthrough: n 
 Enable filename encryption: y # this is not the default!
 Filename Encryption Key (FNEK) Signature: # the second key (auth tok) noted
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;p&gt;
You will probably get a warning about this key not being seen before
(you can type yes) and asking if it should be added to your key
cache (you should type no, since you won&amp;#8217;t be using it again&amp;nbsp;probably).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&amp;#8217;s it, now (assuming everything went right) you can access your
decrypted folder in /media/decrypted. The biggest gotcha is that
home/username/.Private is in fact a symlink, which - if you have an
other partition mounted - will point you to the wrong directory, so you
should use the home/.ecryptfs/username directory&amp;nbsp;directly.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;HTH&lt;/span&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 10 Apr 2011 22:24:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-04-10:2011/04/recovering-encrypted-home-directory.html</guid><category>ubuntu</category><category>encryption</category><category>linux</category><category>troubleshooting</category></item><item><title>scentsy review take two</title><link>https://www.grey-panther.net/2011/04/scentsy-review-take-two.html</link><description>&lt;p&gt;I&amp;#8217;ve already &lt;a href="http://hype-free.blogspot.com/2011/01/scentsy-review.html"&gt;written
about&lt;/a&gt;
&lt;a href="https://scentsified.scentsy.us/"&gt;Scentsy Products&lt;/a&gt;, so I will try not
to repeat myself that much (other than reiterating that you should
really think before investing in a referral system) and will focus on
their special&amp;nbsp;product:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://scentsified.scentsy.us/Buy/ProductDetails/DSW-SFF-ATSM"&gt;Piece by Piece Full-Size Scentsy
Warmer&lt;/a&gt;
– this a usual warmer (usual for Scentsy that is – it uses a lightbulb
to provide the heat, thus avoiding the open flame and smoke) with a
puzzle-piece decoration. What makes this item (more) special is the fact
that parts of the revenue from it go to &lt;a href="http://www.autismspeaks.org/"&gt;Autism
Speaks&lt;/a&gt;. While currently this is the only
one in the &lt;a href="http://scentsyfamilyfoundation.org/causewarmer.aspx"&gt;Charitable Cause
Warmers&lt;/a&gt; product
line, hopefully there will be more in the future, allowing you to get
something for both your body and your&amp;nbsp;soul.&lt;/p&gt;
&lt;p&gt;An other item I didn’t talk about in the last article is the gift
certificate: if you consider appropriate, you could give a &lt;a href="https://scentsified.scentsy.us/Buy/ProductDetails/GC-25"&gt;25 &lt;span class="caps"&gt;USD&lt;/span&gt; Gift
Certificate&lt;/a&gt; to
the person. There are also &lt;a href="https://scentsified.scentsy.us/Buy/Category/535"&gt;replacement
parts&lt;/a&gt; and &lt;a href="https://scentsified.scentsy.us/Buy/Collection/463"&gt;individual
warmer parts&lt;/a&gt; if your
warmer breaks but you don’t want to buy a completely new one. Also, the
light bulbs in the Scentsy products are standard ones (compared to
something like a Philips wake-up light) so you can buy a replacement in
almost any store, as long as you watch for the socket size and the&amp;nbsp;wattage.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from ReviewMe. Under the terms
of the understanding I was not obligated to skew my viewpoint in any way
(ie. only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 10 Apr 2011 22:19:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-04-10:2011/04/scentsy-review-take-two.html</guid><category>reviewme</category><category>review</category></item><item><title>rubberecycle.com review</title><link>https://www.grey-panther.net/2011/04/rubberecyclecom-review.html</link><description>&lt;p&gt;There isn&amp;#8217;t much I can say about this company. They seem very legitimate
by all indications (domain name registered more than 10 years ago, with
the physical address of the company, no complaints on the web, etc).
Their goal seems also very laudable: creating &lt;a href="http://www.rubberecycle.com/playground_rubber_mulch.asp"&gt;playground
surfacing&lt;/a&gt; out
of recycled tire rubber. While I don’t have enough information to
ascertain if this is truly more eco-friendly than getting rid of the
tires in other ways (burning them for example – there are many factors
here – the recycling process itself might consume a larger amount of
energy – see a similar issue with the fact that placing solar panels in
the Sahara desert might actually &lt;em&gt;increase&lt;/em&gt; global warming), reusing is
always a laudable&amp;nbsp;goal.&lt;/p&gt;
&lt;p&gt;The company is also relatively media-savvy: they have a (Facebook) like
button on their website, they have &lt;a href="http://blog.rubberecycle.com/"&gt;a
blog&lt;/a&gt; and their site is relatively nice
looking (even more important: it doesn’t look like one of the stock
templates from designers). The only thing you can’t do is to order
online, but probably it’s better this way, since we are talking about
relatively large amount of material (and automatically large amount of
money) so a personal contact is a better option. Also, I didn’t see any
indication that they ship outside of the &lt;span class="caps"&gt;USA&lt;/span&gt;, probably for the same&amp;nbsp;reason.&lt;/p&gt;
&lt;p&gt;Thumbs up for a small-medium business which has a good&amp;nbsp;product!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 10 Apr 2011 11:17:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-04-10:2011/04/rubberecyclecom-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Medicalhealthinsurancetoday.com review</title><link>https://www.grey-panther.net/2011/04/medicalhealthinsurancetodaycom-review.html</link><description>&lt;p&gt;Today I&amp;#8217;m reviewing a site which has the goal of comparing different
&lt;a href="http://medicalhealthinsurancetoday.com/"&gt;private health insurance&lt;/a&gt;
companies and giving you the cheapest one. Unfortunately I&amp;#8217;m not
familiar with the &lt;span class="caps"&gt;USA&lt;/span&gt; insurance rules (because I&amp;#8217;m on a different
continent :-)), so I can only comment on generic impressions related to
this&amp;nbsp;site:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The domain was registered in 2007, which is reassuring, however the
    registration information is hidden, which raises some questions,
    especially given the fact that you are supposed to trust this site
    with personal data (like address, phone number, date of birth,&amp;nbsp;name)&lt;/li&gt;
&lt;li&gt;The design is ok, although there are some technical glitches (like
    using the sitemap link to give the sitemap for the search engines,
    although this wouldn&amp;#8217;t be necessarry - there are &lt;a href="http://www.sitemaps.org/protocol.php#submit_robots"&gt;other
    ways&lt;/a&gt; to point
    the search engines to&amp;nbsp;it)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However the biggest downfall of the site is the confusing interaction
model and stale data: when you request a free quote it asks you &lt;em&gt;a lot&lt;/em&gt;
of personal information (then again I don&amp;#8217;t know how much data the
individual insurance companies risk model needs) in a separate popup. It
presents the result in both the popup window (however both links it gave
me gave me an 404 error) and also the main window, but clicking trough
the main window requires to fill the form again.&lt;br /&gt;
In conclusion I have a low confidence level that such comparison sites
would be a reliable information source and also the comparison on price
alone isn&amp;#8217;t enough when making such an important&amp;nbsp;decision.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review
from &lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 08 Apr 2011 17:44:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-04-08:2011/04/medicalhealthinsurancetodaycom-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Setting the maximum number of opened files under Ubuntu (for JProfiler)</title><link>https://www.grey-panther.net/2011/03/setting-maximum-number-of-opened-files.html</link><description>&lt;p&gt;&lt;strong&gt;As I found out &amp;#8220;on my own skin&amp;#8221;, setting fs.file-max in
/etc/sysctl.conf is a &lt;span class="caps"&gt;BAD&lt;/span&gt; idea. It can render your system useless in one
step. Please don&amp;#8217;t do it! If you did it, use the recovery mode to roll
back the change. Also, currently I would only recommend doubling the
limit (ie going from 1024 to 2048 or from 2048 to 4096) not going to the
maximum&amp;nbsp;value.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ej-technologies.com/products/jprofiler/overview.html"&gt;JProfiler&lt;/a&gt;
is a great tool, however under 32 bit Ubuntu you can run into the
problem of having a too low limit for open filehandles. This is a
problem for
&lt;a href="http://www.ej-technologies.com/products/jprofiler/overview.html"&gt;JProfiler&lt;/a&gt;
because it uses temporary files to work around the address-space
limitation created by 32 bit (yeah, I know, I should upgrade to 64 bit -
but 32 bit works great for&amp;nbsp;now&amp;#8230;)&lt;/p&gt;
&lt;p&gt;To raise the maximum filehandle limit, do the&amp;nbsp;following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo gedit /etc/security/limits.conf
# add the following two lines before the # End of file marker
# yes, the initial star is also part of line, and you should add it
*       hard    nofile  4096
*       soft    nofile  4096
sudo gedit /etc/sysctl.conf
# restart your system
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;You can check if the changes were successful by using the ulimit&amp;nbsp;command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ulimit -n
# it should print out 4096
&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 20 Mar 2011 14:29:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-03-20:2011/03/setting-maximum-number-of-opened-files.html</guid><category>ubuntu</category><category>linux</category><category>jprofiler</category><category>java</category><category>tip</category></item><item><title>DiskMap - an disk backed Map in Java</title><link>https://www.grey-panther.net/2011/03/diskmap-disk-backed-map-in-java.html</link><description>&lt;p&gt;I have the following problem: a Java application was running out of
memory. It was not feasible to mandate 64 bit &lt;span class="caps"&gt;JVM&lt;/span&gt; for this application
and the \~1.4G limit wasn&amp;#8217;t&amp;nbsp;enough.&lt;/p&gt;
&lt;p&gt;My solution was to implement a Map which - when an element is added -
also saves the value to disk and only holds a weak reference to the
value. When the memory pressure occurs, these objects, only linked by
the weak references are evicted. Later, when they need to be read, they
are read from the backing&amp;nbsp;file.&lt;/p&gt;
&lt;p&gt;Limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adding elements takes considerably longer (because they need to be&amp;nbsp;serialized)&lt;/li&gt;
&lt;li&gt;There is no way to reclaim space from the backing file (this is only
    intended for short-running mostly read-only&amp;nbsp;tasks)&lt;/li&gt;
&lt;li&gt;This is only useful if the values are considerably larger than the
    keys (because the keys are kept in-memory and only the values have
    the potential to be&amp;nbsp;removed)&lt;/li&gt;
&lt;li&gt;There is a memory overhead: when the objects are in-memory, you will
    take up an additional 20 to 40 bytes per entry. However, when the &lt;span class="caps"&gt;GC&lt;/span&gt;
    kicks in will only take up a 20 to 40 bytes per&amp;nbsp;key.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Long story short: you can find the code (together with unit-tests) &lt;a href="http://code.google.com/p/hype-free/source/browse/#svn%2Ftrunk%2Fjava-diskmap"&gt;in
my
repo&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 08 Mar 2011 18:12:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-03-08:2011/03/diskmap-disk-backed-map-in-java.html</guid><category>java</category></item><item><title>Why running sushi is the best fast-food?</title><link>https://www.grey-panther.net/2011/03/why-running-sushi-is-best-fast-food.html</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/billward/2844598635/" title="Sushi Bar - Angle View by Bill Ward's Brickpile, on Flickr"&gt;&lt;img alt="Sushi Bar - Angle
View" src="http://farm4.static.flickr.com/3042/2844598635_090d198036_m.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I just realized that running sushi is the best fast-food &lt;em&gt;ever&lt;/em&gt;. (Yes, I
have &lt;a href="http://www.codinghorror.com/blog/2008/05/strong-opinions-weakly-held.html"&gt;strong opinions weakly
held&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You get you food in small chunks, so you can stop at any time and
    still don&amp;#8217;t feel like you&amp;#8217;ve wasted&amp;nbsp;food&lt;/li&gt;
&lt;li&gt;You have a great variety of food and you can look at it before
    taking (rather than just looking at a picture in the menu and
    wondering how the real thing will look&amp;nbsp;like)&lt;/li&gt;
&lt;li&gt;It is most probably healthier than other kinds of&amp;nbsp;fast-food&lt;/li&gt;
&lt;li&gt;It is neither hot nor cold, so you can eat it right away (you don&amp;#8217;t
    have to wait for it to warm up or to cool&amp;nbsp;down)&lt;/li&gt;
&lt;li&gt;You don&amp;#8217;t have to order! The last thing you want to do when you are
    hungry is to stare at food and&amp;nbsp;wait&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. If you are Cluj (Romania) you can check out the &lt;a href="http://www.wasabi-sushi.ro/"&gt;Wasabi Running
Sushi&lt;/a&gt;. As far as I know they are the only
running sushi in&amp;nbsp;Romania!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 08 Mar 2011 16:44:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-03-08:2011/03/why-running-sushi-is-best-fast-food.html</guid><category>asian</category><category>japan</category><category>food</category></item><item><title>Microbenchmarking and you</title><link>https://www.grey-panther.net/2011/03/microbenchmarking-and-you.html</link><description>&lt;p&gt;&lt;em&gt;Crossposted from the &lt;a href="http://www.transylvania-jug.org/archives/174"&gt;Transylvania &lt;span class="caps"&gt;JUG&lt;/span&gt;
website&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Microbenchmarking is the practice of measuring the performance
characteristics (like &lt;span class="caps"&gt;CPU&lt;/span&gt;, memory or I/O) of a small piece of code to
determine which would be better suited for a particular scenario. If I
could offer but one advice on this, it would be this: don&amp;#8217;t. It is too
easy to get it wrong and bad advice resulting from bad measurement is
like&amp;nbsp;cancer.&lt;/p&gt;
&lt;p&gt;If you don&amp;#8217;t want to take my first advice, here is my second advice: if
you really want to do microbenchmarking watch this talk by Joshua Bloch:
&lt;a href="http://parleys.com/#sl=3&amp;amp;st=5&amp;amp;id=2103"&gt;Performance Anxiety&lt;/a&gt; and use a
framework like &lt;a href="http://code.google.com/p/caliper/"&gt;caliper&lt;/a&gt;, which I
present&amp;nbsp;below.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://code.google.com/p/caliper/"&gt;caliper&lt;/a&gt; is a Java framework written
at Google for doing Java microbenchmarks as correctly as possible. To
use, first you have to build it (there are no prebuild jars yet, nor is
it present in the central Maven repository,&amp;nbsp;sorry):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;svn checkout http://caliper.googlecode.com/svn/trunk/ caliper
cd caliper
ant
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now you can start writing your benchmark. Benchmarks are written in a
style similar to the JUnit3&amp;nbsp;tests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you have to extend the &lt;code&gt;com.google.caliper.SimpleBenchmark&lt;/code&gt; class&lt;/li&gt;
&lt;li&gt;your methods must conform to the &lt;code&gt;public void timeZZZZ(int reps)&lt;/code&gt;
    signature&lt;/li&gt;
&lt;li&gt;you can override the setUp and tearDown methods to implement
    initialization /&amp;nbsp;finalization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Below is a simple example (taken from the caliper&amp;nbsp;homepage):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;public class MyBenchmark extends SimpleBenchmark {
  public void timeMyOperation(int reps) {
    for (int i = 0; i &amp;lt; reps; i++) {
      MyClass.myOperation();
    }
  }
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;To run this you have multiple&amp;nbsp;possibilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use the &lt;code&gt;caliper&lt;/code&gt; script included in the code distribution (this is
    a &lt;span class="caps"&gt;SH&lt;/span&gt; script, so it won&amp;#8217;t work under&amp;nbsp;Windows):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;~/projects-personal/caliper/build/caliper-0.0/caliper --trials 10 org.transylvania.jug.espresso.shots.d20110306.MyBenchmark
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;p&gt;
you can also execute the script without parameters to get a list and
description of command line&amp;nbsp;parameters.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run it from your favorite &lt;span class="caps"&gt;IDE&lt;/span&gt;. You need to add the following
    libraries: allocation.jar, caliper-0.0.jar. The main class is
    com.google.caliper.Runner and the parameters are the same you would
    pass to the caliper&amp;nbsp;runner&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Add a main method to your test class which would contain the
    following:&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;public static void main(String... args) throws Exception {
  Runner.main(MyBenchmark.class, args);
}
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By default caliper outputs an easy to understand text output. You have
also the option to publish the benchmark as a nice &lt;span class="caps"&gt;HTML&lt;/span&gt; page (see &lt;a href="http://microbenchmarks.appspot.com/run/jessewilson@google.com/examples.ArraySortBenchmark"&gt;this
page&lt;/a&gt;
for example). The publication is done trough a Google AppEngine app and
is publicly available to anyone (a caveat to remember). For more
information see the &lt;a href="http://stackoverflow.com/questions/tagged/caliper"&gt;caliper questions on
StackOveflow&lt;/a&gt;. You
might also be interested in the &lt;a href="http://www.javaperformancetuning.com/"&gt;java performance tunning
website&lt;/a&gt; if you need to perform
such&amp;nbsp;tasks.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 07 Mar 2011 15:13:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-03-07:2011/03/microbenchmarking-and-you.html</guid><category>benchmark</category><category>java</category></item><item><title>Doing some estimations</title><link>https://www.grey-panther.net/2011/03/doing-some-estimations.html</link><description>&lt;p&gt;This is again one of those topics which I like to rant about, so I give
you the short version: when you see a number, question it! Most of the
numbers thrown at us in different media can be disproven quite easily
and it is our responsibility as people not to just repeat whatever we’ve
heard, but rather stop and think a little about it (of course I’m not
immune to this myself, since I’ve just fallen into this trap when
reading the “&lt;a href="http://http://science.slashdot.org/story/11/03/04/0048244/Contemplating-Financial-Trading-At-Picosecond-Resolution"&gt;Contemplating Financial Trading At Picosecond
Resolution&lt;/a&gt;”
on Slashdot, only to see the very insightful comment: light travels 3mm
in a picosecond – yes I’ve done the math - so this article is pure &lt;span class="caps"&gt;BS&lt;/span&gt;).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Offtopic&lt;/em&gt;: why do sayings in different languages have so much in
common? For example we have the “beating the dead horse” expression in
English and in Hungarian we would say somebody is talking about is
“horse made of branch” (vesszoparipa). Ain’t it&amp;nbsp;interesting?&lt;/p&gt;
&lt;p&gt;Getting back to my rant :-). I’ve seen an article recently about a local
(Romanian) affiliate program: &lt;a href="http://refresh.ro/2011/03/emag-profitshare-2010-3-000-000-de-click-uri-rasplatite-cu-463-000-ron/"&gt;eMAG Profitshare
2010&lt;/a&gt;.
I applaud them for their openness and it also gives us the possibility
to do a quick calculation. They say that they’ve given out 463 000 &lt;span class="caps"&gt;RON&lt;/span&gt;
(\~109 905 &lt;span class="caps"&gt;EUR&lt;/span&gt; / 153 499 &lt;span class="caps"&gt;USD&lt;/span&gt;) to 8690&amp;nbsp;sites.&lt;/p&gt;
&lt;p&gt;Does it sound like a lot? Yes. Is it a lot for each individual site?
Unlikely. Lets do a quick math: assuming that each site gets the same
share (a very simplistic assumption) we have: 109 905 &lt;span class="caps"&gt;EUR&lt;/span&gt; / 8690 site =
\~13 &lt;span class="caps"&gt;EUR&lt;/span&gt; per site / per year (these are yearly figures for 2010) so
around 1 &lt;span class="caps"&gt;EUR&lt;/span&gt; (!) per site per month&amp;nbsp;(!).&lt;/p&gt;
&lt;p&gt;Ok, so be more real. You have a big fanbase, so you should be in the top
sites as revenue. Lets consider a binomial distribution of the sites and
do a little chart with Google&amp;nbsp;Docs:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_hrvCBhtWhJ4/TXNIJSgdYyI/AAAAAAAADVo/KZiem2sWWJg/s1600-h/chart_1%5B6%5D.png"&gt;&lt;img alt="chart_1" src="http://lh5.ggpht.com/_hrvCBhtWhJ4/TXNIJ4o-VvI/AAAAAAAADVs/ZapGhYS3lgk/chart_1_thumb%5B4%5D.png?imgmax=800" title="chart_1" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What you see here is the revenue &lt;em&gt;per month&lt;/em&gt; for a site in a certain
category (categories are from 1 to 10, 1 being the lowest traffic one
and 10 the highest traffic one). The number is in &lt;span class="caps"&gt;EUR&lt;/span&gt;. The conclusion:
this business model is a very poor revenue source for the individuals
participating, but probably a very good marketing avenue for companies
(I assume that the cost for companies is around the same as doing a ad
campaign, but the returns must be much better – not to mention the
google juice they must be getting from this&amp;nbsp;referrals!).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;:&lt;/em&gt; in the name of transparency, you can see the sheet I used for
calculation
&lt;a href="https://spreadsheets.google.com/pub?hl=en&amp;amp;key=0AmIAds6a-fs7dE5Gd09ZUExzdkp2X19QMDlVNE1kbGc&amp;amp;hl=en&amp;amp;gid=1"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 06 Mar 2011 10:39:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-03-06:2011/03/doing-some-estimations.html</guid><category>statistics</category><category>marketing</category><category>mathematics</category></item><item><title>Audio quality</title><link>https://www.grey-panther.net/2011/03/audio-quality.html</link><description>&lt;p&gt;This is just one of those topics which comes up from time to time in my
life (probably because I consume a lot of media). I was recently
watching the &lt;a href="http://www.youtube.com/watch?v=VVUHaC1somA"&gt;Jim Zemlin interviewed by Jeremy
Allison&lt;/a&gt; (Jim Zemlin is the
Executive Director of the Linux Foundation) on the &lt;a href="http://www.youtube.com/user/googleOSPO"&gt;Google Open Source
YouTube channel&lt;/a&gt; and was
frustrated by the background noise and low audio volume, since the topic
was really interesting to me. So I decided to look into the problem and
see if the audio quality could have been easily improved. I &lt;a href="http://hype-free.blogspot.com/2009/07/basic-multi-media-postprocessing.html"&gt;covered the
topic&lt;/a&gt;
a couple of years so I won’t go into details, rather just give a 10 000
foot view of the process. Please read &lt;a href="http://hype-free.blogspot.com/2009/07/basic-multi-media-postprocessing.html"&gt;the original
post&lt;/a&gt;
for more details, since everything in it still&amp;nbsp;applies.&lt;/p&gt;
&lt;p&gt;Step 1: download the YouTube video. &lt;a href="http://www.videolan.org/vlc/"&gt;&lt;span class="caps"&gt;VLC&lt;/span&gt;&lt;/a&gt;
natively supports YouTube playback, so exporting the sound to a &lt;span class="caps"&gt;FLAC&lt;/span&gt;
file (you should always use lossless codecs during processing!) was just
a matter of a couple of clicks and one or two&amp;nbsp;minutes.&lt;/p&gt;
&lt;p&gt;&lt;img alt="export_youtube_vlc" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/TXHosoGuYVI/AAAAAAAADVQ/ebhm_f4Ay2Q/export_youtube_vlc%5B5%5D.png?imgmax=800" title="export_youtube_vlc" /&gt;&lt;/p&gt;
&lt;p&gt;Step 2: load up in &lt;a href="http://audacity.sourceforge.net/"&gt;Audacity&lt;/a&gt; and
remove the noise. The loading of the &lt;span class="caps"&gt;FLAC&lt;/span&gt; file is a little buggy (the
progress bar keeps jumping between 0 and 100% and the time estimation is
useless, but it loaded in under a minute). As you can see in the
screenshot below, the volume is really low, but there are the occasional
spikes, so plain normalization wouldn’t help you here. On the upside,
there is no clipping which would result in a hard (impossible?) to
repair&amp;nbsp;artifacts.&lt;/p&gt;
&lt;p&gt;&lt;img alt="audacity_interview_pre" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/TXHotLl-BAI/AAAAAAAADVU/n_6FaZpcjYA/audacity_interview_pre%5B5%5D.png?imgmax=800" title="audacity_interview_pre" /&gt;&lt;/p&gt;
&lt;p&gt;After noise removal and keeping only one channel (no need for stereo
here – we would add it back in the last step if we would to publish it
since some devices can’t handle mono and the overhead with joint stereo
is almost zero) the file was exported into &lt;span class="caps"&gt;WAV&lt;/span&gt; and fed into the
&lt;a href="http://www.conversationsnetwork.org/levelator"&gt;Levelator&lt;/a&gt;. Here is the
end&amp;nbsp;result:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_hrvCBhtWhJ4/TXHot4oDY7I/AAAAAAAADVY/p1cHEUkeet4/s1600-h/audacity_interview_post%5B4%5D.png"&gt;&lt;img alt="audacity_interview_post" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/TXHouYC1SAI/AAAAAAAADVc/r7fvY3mZKGE/audacity_interview_post_thumb%5B2%5D.png?imgmax=800" title="audacity_interview_post" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As you can see, we have &lt;em&gt;much&lt;/em&gt; better volume resulting in a &lt;em&gt;much&lt;/em&gt;
improved experience for the consumer, all this with a couple of minutes
of work while browsing &lt;a href="http://news.ycombinator.com/"&gt;Hacker News&lt;/a&gt; and
with free (and mostly open-source) cross platform&amp;nbsp;tools.&lt;/p&gt;
&lt;p&gt;Content publishers of the world: please take a couple of minutes of your
time after editing to do a proper post-production! Thank&amp;nbsp;you.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: YouTube downloading is broken in the current &lt;span class="caps"&gt;VLC&lt;/span&gt; release but
it will be fixed in the next version (1.1.12). Until then you can use
the &lt;a href="http://nightlies.videolan.org/"&gt;nighly builds&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 05 Mar 2011 09:39:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-03-05:2011/03/audio-quality.html</guid><category>audio</category><category>audacity</category><category>audio processing</category></item><item><title>Sorry for the malware warning!</title><link>https://www.grey-panther.net/2011/02/sorry-for-malware-warning.html</link><description>&lt;p&gt;If you have tried to visit my blog recently, you might have to a warning
like this from your&amp;nbsp;webbrowser:&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Warning&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Something&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;Not&lt;/span&gt; &lt;span class="n"&gt;Right&lt;/span&gt; &lt;span class="n"&gt;Here&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;

&lt;span class="n"&gt;hype&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;free&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;blogspot&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt; &lt;span class="n"&gt;contains&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;randaclay&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;
&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;site&lt;/span&gt; &lt;span class="n"&gt;known&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;distribute&lt;/span&gt; &lt;span class="n"&gt;malware&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;Your&lt;/span&gt; &lt;span class="n"&gt;computer&lt;/span&gt; &lt;span class="n"&gt;might&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;virus&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;visit&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;/blockquote&gt;
&lt;p&gt;The source of the warning is the image / link in the comment form, which
I have now removed (or more precisely replaced with a local copy). It
seems that the randaclay.com has been hacked and thus it is classified
as malicious by Google, which in turn leads to all sites linking to it
being marked a potentially malicious. So, while I&amp;#8217;m sorry for doing
this, I will remove the links to their site until they manage to resolve
the issue and will mirror their manifesto&amp;nbsp;below:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Almost all blog platforms by default are set up so that a “dead end”
piece of code is inserted wherever there is a link in a comment, so
that search engines will not “count” the link as they are crawling the
internet. This was originally designed to help stop comment spam, but
it doesn’t work. What it does is remove some of the incentive for your
readers contribute to your site by commenting on your&amp;nbsp;posts.&lt;/p&gt;
&lt;p&gt;What can you do about it? Turn off “nofollow”. Show your commenters
that you appreciate them. Spread the link&amp;nbsp;love.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div align="center"&gt;

![](http://1.bp.blogspot.com/-zrkpq0-gFoI/TWd7gbceiOI/&lt;span class="caps"&gt;AAAAAAAADVE&lt;/span&gt;/a8N_wMwWdrw/s1600/ifollowltgreen.gif)

&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 25 Feb 2011 12:02:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-02-25:2011/02/sorry-for-malware-warning.html</guid><category>security</category><category>Blogger</category><category>malware</category><category>blog</category><category>comments</category></item><item><title>mytrendyphone.co.uk review</title><link>https://www.grey-panther.net/2011/02/mytrendyphonecouk-review.html</link><description>&lt;p&gt;My assignment - which I choose to accept :-) - was to review a &lt;a href="http://www.mytrendyphone.co.uk/shop/mobile-accessories-categories-2418s.html"&gt;mobile
accessories&lt;/a&gt;
site, namely mytrendyphone.co.uk. All the signs for this site check&amp;nbsp;out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It was &lt;a href="http://whois.domaintools.com/mytrendyphone.co.uk"&gt;registered a couple of years
    ago&lt;/a&gt; and didn&amp;#8217;t
    move around&amp;nbsp;much&lt;/li&gt;
&lt;li&gt;It has several real seals (real meaning that they are linked to the
    originating site, where you can check out the referring site is
    really approved, didn&amp;#8217;t just faked the&amp;nbsp;seal)&lt;/li&gt;
&lt;li&gt;Their contact address checks out (based on Google maps) as does
    their phone number (which is in the London&amp;nbsp;area)&lt;/li&gt;
&lt;li&gt;I found a couple of complaints about them &lt;a href="http://www.trustpilot.co.uk/review/www.mytrendyphone.co.uk"&gt;on this
    site&lt;/a&gt;,
    however they seem to be very responsive to the negative&amp;nbsp;complaints&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After doing the basic safety research I went on to browse the site and I
found many interesting items, for example &lt;a href="http://www.mytrendyphone.co.uk/shop/jabra-bt3030-bluetooth-8008p.html"&gt;this Jabra
headset&lt;/a&gt;.
What I like about about these models of headsets is the fact that they
use standard minijack for headphones, which means that they can easily
be replaced in case they stop working (and it is my experience that
headphones are the first to go&amp;nbsp;bad).&lt;/p&gt;
&lt;p&gt;An other category which I found interesting was &lt;a href="http://www.mytrendyphone.co.uk/shop/tools-111s.html"&gt;the tools
section&lt;/a&gt;. While
some of the tools are clearly overpriced, the more complex kits look
interesting and I am tempted to buy something from&amp;nbsp;there.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 25 Feb 2011 11:48:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-02-25:2011/02/mytrendyphonecouk-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Setting up IMAP with Yahoo! Mail</title><link>https://www.grey-panther.net/2011/02/setting-up-imap-with-yahoo-mail.html</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/alecperkins/4948726439/" title="Mail Snail by alecperkins, on Flickr"&gt;&lt;img alt="Mail
Snail" src="http://farm5.static.flickr.com/4095/4948726439_c3a632e5f9_t.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m a long time Yahoo Mail user. Just to illustrate how long I&amp;#8217;ve been
with them: when I joined the space available was a couple of MBs! I
staid with them because I was mostly satisfied (never really caught the
GMail bug), however recently I started looking for options to
consolidate the different email accounts (work / personal / yahoo /
gmail / etc). I explicitly wanted &lt;span class="caps"&gt;IMAP&lt;/span&gt; support because I really need to
keep in sync between multiple&amp;nbsp;machines.&lt;/p&gt;
&lt;p&gt;The common wisdom seems to be on the &amp;#8216;net that Yahoo! Mail doesn&amp;#8217;t
support &lt;span class="caps"&gt;IMAP&lt;/span&gt; (not even for paid accounts) or that various hacks are
needed to support it (like sending custom / non-standard commands after
login). This information however seems to be outdated, since I was able
to find a least 3 &lt;span class="caps"&gt;IMAP&lt;/span&gt; servers (I&amp;#8217;ve tested them all and they all work -
with standard email clients with no&amp;nbsp;hacks!):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;imap.mail.yahoo.com (this is the one Thunderbird configures by&amp;nbsp;default)&lt;/li&gt;
&lt;li&gt;winmo.imap.mail.yahoo.com (from this
    &lt;a href="http://www.withinwindows.com/2011/01/31/yahoo-confirmed-culprit-in-windows-phone-data-usage-overages/"&gt;article&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;zimbra.imap.mail.yahoo.com&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of the servers support &lt;span class="caps"&gt;SSL&lt;/span&gt;/&lt;span class="caps"&gt;TLS&lt;/span&gt; encryption, so they are safe to
access even from public hotspots. The outgoing server is
smtp.mail.yahoo.com, which also supports &lt;span class="caps"&gt;SSL&lt;/span&gt;/&lt;span class="caps"&gt;TLS&lt;/span&gt; (and you should use&amp;nbsp;it!)&lt;/p&gt;
&lt;p&gt;The easiest to set up is Mozilla Thunderbird, however Evolution seems to
work much better. One important feature in particular is that it works
with large (10 000+ emails) folders, while Thunderbird chokes with an
error (&amp;#8220;&lt;span class="caps"&gt;UNAVAILABLE&lt;/span&gt;] &lt;span class="caps"&gt;UID&lt;/span&gt; &lt;span class="caps"&gt;FETCH&lt;/span&gt; too many messages in request&amp;#8221;). To have
Evolution work properly, you need to select &amp;#8220;&lt;span class="caps"&gt;IMAP&lt;/span&gt;+&amp;#8221; (also called &lt;span class="caps"&gt;IMAPX&lt;/span&gt;)
as the&amp;nbsp;protocol.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;HTH&lt;/span&gt; somebody out&amp;nbsp;there.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 22 Feb 2011 23:03:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-02-22:2011/02/setting-up-imap-with-yahoo-mail.html</guid><category>email</category><category>yahoo</category><category>imap</category></item><item><title>Manually enabling IP routing in Windows XP</title><link>https://www.grey-panther.net/2011/02/manually-enabling-ip-routing-in-windows.html</link><description>&lt;p&gt;While Internet Connection Sharing is a nifty tool, there are some cases
where you would like to do the steps manually. One such case would be if
the “primary” network is already using the 192.168.0.1/24 address space,
since &lt;span class="caps"&gt;ICS&lt;/span&gt; is hardcoded (as far as I can tell) to use the same network.
One concrete case I have encountered&amp;nbsp;was:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ADSL Modem+Router (no wireless) –-&amp;gt; laptop broadcasting over writess –-&amp;gt; ... –-&amp;gt; other laptops&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The solution is the&amp;nbsp;following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set up an ad-hoc network on laptop wifi card (using a different
    subnet – 10.0.0.0/24 for
    example)&lt;a href="http://lh5.ggpht.com/_hrvCBhtWhJ4/TU5rsO2uxwI/AAAAAAAADUw/MkhnLDzuvRs/s1600-h/wireless-network-setup%5B4%5D.png"&gt;&lt;img alt="wireless-network-setup" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/TU5rtQ6LazI/AAAAAAAADU0/SooFF6rYhIE/wireless-network-setup_thumb%5B2%5D.png?imgmax=800" title="wireless-network-setup" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;“Connect” to it to make it
    work:&lt;a href="http://lh3.ggpht.com/_hrvCBhtWhJ4/TU5ruIg4-kI/AAAAAAAADU4/DSyFrIZ8s-M/s1600-h/wireless-network%5B5%5D.png"&gt;&lt;img alt="wireless-network" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/TU5ru8_YhcI/AAAAAAAADU8/4pzk87-wpw0/wireless-network_thumb%5B3%5D.png?imgmax=800" title="wireless-network" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc962461.aspx"&gt;Enable &lt;span class="caps"&gt;IP&lt;/span&gt; forwarding on the machine from the&amp;nbsp;registry&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is simple as 1-2-3 :-p. Some caveats&amp;nbsp;though:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This setup won’t give you &lt;span class="caps"&gt;DHCP&lt;/span&gt;. So make sure that you configure your
    other machines with a static &lt;span class="caps"&gt;IP&lt;/span&gt;&amp;nbsp;address&lt;/li&gt;
&lt;li&gt;It also won’t give you &lt;span class="caps"&gt;DNS&lt;/span&gt;, so configure something like the Google
    &lt;span class="caps"&gt;DNS&lt;/span&gt; (8.8.8.8 or 8.8.4.4) or OpenDNS (208.67.222.222 or
    208.67.220.220) or even your ISPs &lt;span class="caps"&gt;DNS&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;The ad-hoc wifi connection has reliability issues. It happened
    multiple times that I had to restart it because it disconnected and
    wouldn’t connect any more, but it is a good temporary&amp;nbsp;solution.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. You can download the drivers and user manual for the SmartAX &lt;span class="caps"&gt;MT882&lt;/span&gt;
&lt;span class="caps"&gt;ADSL&lt;/span&gt; Router
&lt;a href="http://dl.dropbox.com/u/5973603/SmartAX%20MT882%20ADSL%20Router.exe"&gt;here&lt;/a&gt;
(the link might go dead unexpectedly, since it is served out of
Dropbox). This is a standard modem provided by Romtelecom (the Romanian
telecom provider) and I couldn’t find it elsewhere because Huawei is
very secretive about its stuff (the files were copied from the &lt;span class="caps"&gt;CD&lt;/span&gt;
provided with the modem). The driver makes the &lt;span class="caps"&gt;USB&lt;/span&gt; connection work as a
network card (which is very elegant and&amp;nbsp;simple).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 06 Feb 2011 11:37:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-02-06:2011/02/manually-enabling-ip-routing-in-windows.html</guid><category>windows</category><category>networking</category></item><item><title>Is hand-writing assembly still necessary these days?</title><link>https://www.grey-panther.net/2011/02/is-hand-writing-assembly-still.html</link><description>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_hrvCBhtWhJ4/TU5KXCBpA-I/AAAAAAAADUk/nz5JLoVBru8/s1600-h/12878535_df4197ea6b_o%5B4%5D.jpg"&gt;&lt;img alt="12878535_df4197ea6b_o" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/TU5KYLbHO1I/AAAAAAAADUo/XSFzXb1UgJ4/12878535_df4197ea6b_o_thumb%5B2%5D.jpg?imgmax=800" title="12878535_df4197ea6b_o" /&gt;&lt;/a&gt;
Some time ago I came over the following article: &lt;a href="http://wj32.wordpress.com/2010/09/19/fast-crc32-in-assembly/"&gt;Fast &lt;span class="caps"&gt;CRC32&lt;/span&gt; in
Assembly&lt;/a&gt;.
It claimed that the assembly implementation was faster than the one
implemented in C. Performance was always something I’m interested in, so
I repeated and extended the&amp;nbsp;experiment.&lt;/p&gt;
&lt;p&gt;Here are the numbers I got. This is on a Core 2 Duo T5500 @ 1.66 Ghz
processor. The numbers express Mbits/sec&amp;nbsp;processed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The assembly version from the blogpost (table taken from
    &lt;a href="http://www.koders.com/c/fid699AFE0A656F0022C9D6B9D1743E697B69CE5815.aspx?s=crc32#L19"&gt;here&lt;/a&gt;):&amp;nbsp;\~1700&lt;/li&gt;
&lt;li&gt;Optimized C implementation (taken from the same source): \~1500. The
    compiler used was Microsoft Visual C++ Express&amp;nbsp;2010&lt;/li&gt;
&lt;li&gt;Unoptimized C implementation (ie. Debug build):&amp;nbsp;\~900&lt;/li&gt;
&lt;li&gt;Java implementation using polynomials: \~100 (using &lt;span class="caps"&gt;JRE&lt;/span&gt;&amp;nbsp;1.6.0_23)&lt;/li&gt;
&lt;li&gt;Java implementation using table: &lt;strong&gt;\~1900&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Built-in Java implementation:&amp;nbsp;\~1700&lt;/li&gt;
&lt;li&gt;Javascript (for the fun of it) implementation (using the code from
    &lt;a href="http://noteslog.com/post/crc32-for-javascript/"&gt;here&lt;/a&gt; with
    optimization – storing the table as numeric rather than string) on
    Firefox 4.0 Beta 10:&amp;nbsp;\~80&lt;/li&gt;
&lt;li&gt;Javascript on Chrome 10.0.648.18:&amp;nbsp;\~40&lt;/li&gt;
&lt;li&gt;(No &lt;span class="caps"&gt;IE9&lt;/span&gt; test – they don’t offer it for Windows &lt;span class="caps"&gt;XP&lt;/span&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Final&amp;nbsp;thoughts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hand coding assembly &lt;strong&gt;is not&lt;/strong&gt; necessary in 99.999% (then again 80%
    of all statistics are made up :-p). Using better tools or better
    algorithms (see the “Java table based” vs. “Java polynomial”) can
    give just as good of performance improvement. Maintainability and
    portability (almost always) trump&amp;nbsp;performance&lt;/li&gt;
&lt;li&gt;Be pragmatic. Are you sure that your performance is &lt;span class="caps"&gt;CPU&lt;/span&gt; bound? If
    you are calculating a &lt;span class="caps"&gt;CRC32&lt;/span&gt; of disk files, a gigabit per second is
    more than&amp;nbsp;enough&lt;/li&gt;
&lt;li&gt;Revisit your assumptions periodically (especially if you are dealing
    with legacy code). The performance characteristics of modern systems
    (CPUs) differ enormously from the old ones. I would wager that on an
    old &lt;span class="caps"&gt;CPU&lt;/span&gt; with little cache the polynomial version would have
    performed much better, but now that we have &lt;span class="caps"&gt;CPU&lt;/span&gt; caches measured in
    &lt;span class="caps"&gt;MB&lt;/span&gt; rather than &lt;span class="caps"&gt;KB&lt;/span&gt; the table one performs much&amp;nbsp;better&lt;/li&gt;
&lt;li&gt;Javascript engines are getting better and&amp;nbsp;better.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some other interesting&amp;nbsp;remarks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The source code can be found &lt;a href="http://code.google.com/p/hype-free/source/browse/#svn%2Ftrunk%2Fcrc32-benchmark"&gt;in my
    repo&lt;/a&gt;.
    Unfortunately I can’t include the C version since I managed to
    delete it by mistake&amp;nbsp;:-(&lt;/li&gt;
&lt;li&gt;The file used to benchmark the different implementations was &lt;a href="http://producingoss.com/en/producingoss.pdf"&gt;a &lt;span class="caps"&gt;PDF&lt;/span&gt;
    copy&lt;/a&gt; of the Producing
    Open Source Software&amp;nbsp;book&lt;/li&gt;
&lt;li&gt;The &lt;span class="caps"&gt;HTML5&lt;/span&gt; implementation is surprisingly inconsistent between
    Firefox and Chrome, so I needed to add the following line to keep
    them both happy:
    &lt;code&gt;var blob = file.slice ? file.slice(start, len) : file;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The Javascript code doesn’t work unless it is loaded via the http(s)
    protocol. Loading it from a local file gives “Error no. 4”, so I
    used a &lt;a href="http://hype-free.blogspot.com/2011/02/how-to-quickly-start-up-webserver-with.html"&gt;small python&amp;nbsp;webserver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Javascript timing has &lt;a href="http://ejohn.org/blog/accuracy-of-javascript-time/"&gt;some
    issues&lt;/a&gt;, but my
    task took longer than 15ms, so I got stable&amp;nbsp;measurements&lt;/li&gt;
&lt;li&gt;The original post mentions a variation of the algorithm which can
    take 16 bits at one (rather than 8) which could result in a speed
    improvement (and maybe it can be extended to 32&amp;nbsp;bits)&lt;/li&gt;
&lt;li&gt;Be aware of the “free” tools from Microsoft! This article would have
    been published sooner if it wasn’t for the fact &lt;span class="caps"&gt;MSVC&lt;/span&gt;++ 2010 Express
    require an online registration and when I had time I had no Internet&amp;nbsp;access!&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Update&lt;/em&gt;: If you want to run the experiment with &lt;span class="caps"&gt;GCC&lt;/span&gt;, you might find
    the following post useful: &lt;a href="http://xorl.wordpress.com/2009/01/01/intel-syntax-on-gcc/"&gt;Intel syntax on
    &lt;span class="caps"&gt;GCC&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Picture taken from the &lt;a href="http://www.flickr.com/photos/tudor/12878535/"&gt;TheGiantVermin&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 06 Feb 2011 09:14:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-02-06:2011/02/is-hand-writing-assembly-still.html</guid><category>optimization</category><category>programming</category><category>javascript</category><category>assembly</category><category>c</category><category>performance</category><category>java</category></item><item><title>How to quickly start up a webserver with Python</title><link>https://www.grey-panther.net/2011/02/how-to-quickly-start-up-webserver-with.html</link><description>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_hrvCBhtWhJ4/TU48NhVJ-OI/AAAAAAAADUY/98zjzpClrvY/s1600-h/4046936655_d7f4067d5c_o%5B5%5D.jpg"&gt;&lt;img alt="SONY
DSC" src="http://lh5.ggpht.com/_hrvCBhtWhJ4/TU48Om-cOpI/AAAAAAAADUc/acZFvbo5170/4046936655_d7f4067d5c_o_thumb%5B3%5D.jpg?imgmax=800" title="SONY DSC" /&gt;&lt;/a&gt;
Sometimes you need to quickly start up a webserver that serves up static
files (I will describe such a case in the next post). Python to the
rescue (works on both Linux and Windows if you have Python&amp;nbsp;installed):&lt;/p&gt;
&lt;p&gt;For Python 2.x (this is what most sites show&amp;nbsp;you):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;python -m SimpleHTTPServer 9914&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;For Python 3.x (thanks to &lt;a href="http://linux.byexamples.com/archives/506/python-simple-http-server-for-file-sharing/#comment-99256"&gt;this
comment&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;python -m http.server 9914&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;These will start up a webserver on port 9914, and you can access it via
the address &lt;a href="http://localhost:9914"&gt;http://localhost:9914&lt;/a&gt;. Warning! The webserver will be
available to anyone who can connect to your computer directly (unless
there are other mechanisms to restrict it – like firewalls or &lt;span class="caps"&gt;NAT&lt;/span&gt;), so
use your&amp;nbsp;judgment!&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/mahbobyusof/4046936655/"&gt;bob&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 06 Feb 2011 08:14:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-02-06:2011/02/how-to-quickly-start-up-webserver-with.html</guid></item><item><title>Why you should use 0.0.0.0 in your hosts file - redux</title><link>https://www.grey-panther.net/2011/02/why-you-should-use-0000-in-your-hosts.html</link><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_hrvCBhtWhJ4/TU2cCPyZ3XI/AAAAAAAADUM/Bhu5tNWwaJM/s1600-h/port_80_application%5B17%5D.png"&gt;&lt;img alt="port_80_application" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/TU2cC5oFBAI/AAAAAAAADUQ/Ok_LZtTSurA/port_80_application_thumb%5B11%5D.png?imgmax=800" title="port_80_application" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Some time ago I (wow, time files!) &lt;a href="http://hype-free.blogspot.com/2009/07/speedy-hosts-blocklists.html"&gt;I
suggested&lt;/a&gt;
that using 0.0.0.0 for host-file based blocklists would be faster than
using 127.0.0.1. Above you can see an other reason for using 0.0.0.0:
some applications take up port 80 on the localhost and accessing it can
(potentially) create&amp;nbsp;havoc.&lt;/p&gt;
&lt;p&gt;In the example above &lt;a href="http://www.teamviewer.com/"&gt;TeamViewer&lt;/a&gt; (which is
quite a nice remote control application &lt;span class="caps"&gt;BTW&lt;/span&gt; – with support for Linux!)
has taken it over and thus it displays a mock page instead of the
advertisement (which is very&amp;nbsp;courteous).&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. This was also mentioned in the original article, I just wanted to
give an other&amp;nbsp;example.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 05 Feb 2011 20:50:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-02-05:2011/02/why-you-should-use-0000-in-your-hosts.html</guid><category>advertisment</category><category>networking</category></item><item><title>Augmenting Log4J stack traces with class versions</title><link>https://www.grey-panther.net/2011/02/augmenting-log4j-stack-traces-with.html</link><description>&lt;p&gt;If you have multiple versions of your code in production, it is
&lt;em&gt;extremely&lt;/em&gt; useful for the log to include the version of the classes
when producing a stacktrace, otherwise it is very hard to match the
lines in the stacktrace with the lines of the source code (sidenote:
there is an optimization in the Sun &lt;span class="caps"&gt;JVM&lt;/span&gt; where - if an exception is
thrown &amp;#8220;too much&amp;#8221; - the &lt;span class="caps"&gt;JVM&lt;/span&gt; stops providing stacktrace - see &lt;a href="http://jawspeak.com/2010/05/26/hotspot-caused-exceptions-to-lose-their-stack-traces-in-production-and-the-fix/"&gt;this
article&lt;/a&gt;
about it and to learn how to disable this&amp;nbsp;feature).&lt;/p&gt;
&lt;p&gt;If you are using Log4J as your logging framework, with a little magic
you can turn the following&amp;nbsp;stacktrace:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;208&lt;/span&gt; &lt;span class="n"&gt;ERROR&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TestLog4jExtendedStacktrace&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="n"&gt;An&lt;/span&gt; &lt;span class="n"&gt;exception&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;occurred&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;
&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Test&lt;/span&gt; &lt;span class="n"&gt;exception&lt;/span&gt;
 &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="n"&gt;Callee&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;called&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TestLog4jExtendedStacktrace&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;144&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
 &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="n"&gt;Caller&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TestLog4jExtendedStacktrace&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;136&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
 &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Into this (note the class versions at the&amp;nbsp;bottom):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="x"&gt;java.lang.IllegalArgumentException: Test exception&lt;/span&gt;
&lt;span class="x"&gt; at ...Callee.called(TestLog4jExtendedStacktrace.java:144)&lt;/span&gt;
&lt;span class="x"&gt; at ...Caller.call(TestLog4jExtendedStacktrace.java:136)&lt;/span&gt;
&lt;span class="x"&gt; ...&lt;/span&gt;

&lt;span class="x"&gt;Callee: &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;Revision&lt;/span&gt;&lt;span class="x"&gt;: 56 &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="x"&gt;Caller: &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;Revision&lt;/span&gt;&lt;span class="x"&gt;: 56 &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The main mechanism is as&amp;nbsp;follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each class contains a static String field called &amp;#8220;VCS_VERSION&amp;#8221;.
    This field is set (trough the magic keyword substitution - see the
    documentation for
    &lt;a href="http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.keywords.html"&gt;&lt;span class="caps"&gt;SVN&lt;/span&gt;&lt;/a&gt;,
    &lt;a href="http://www-igm.univ-mlv.fr/~bedon/Enseignement/Outils/Docs/cvs/cvs_12.html"&gt;&lt;span class="caps"&gt;CVS&lt;/span&gt;&lt;/a&gt;)
    to the last version when the file was committed to your &lt;span class="caps"&gt;VCS&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;When a stacktrace is sent to the logger, it will look at the classes
    and if they have the &amp;#8220;VCS_VERSION&amp;#8221; field, it will output it at the
    end (it doesn&amp;#8217;t annotate the stacktrace itself, because some tools -
    like IDEs - depend on the stacktrace having a certain format for
    them to be able to process it - like adding one-click &amp;#8220;go-to-line&amp;#8221;&amp;nbsp;shortcuts)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As usual, the source can be found &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/espresso-shots/src/org/transylvania/jug/espresso/shots/d20110203/TestLog4jExtendedStacktrace.java"&gt;in the
repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some more implementation details: the current way of modifying the
stacktrace is quite hackish (adding a filter and trough reflection
modifying the passed in LoggingEvent object). However it has the
advantage of being usable without modifying your config files (ie. if
you have many config files, but can modify it in only one place in the
code, this is a good solution. More &amp;#8220;proper&amp;#8221; alternatives would be to
implement a &amp;#8220;wrapper&amp;#8221; appender (like
&lt;a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/AsyncAppender.html"&gt;AsyncAppender&lt;/a&gt;)
or a wrapper around
&lt;a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Layout.html"&gt;Layout&lt;/a&gt;,
however both of these require you to modify your configuration&amp;nbsp;files.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 03 Feb 2011 18:07:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-02-03:2011/02/augmenting-log4j-stack-traces-with.html</guid><category>log4j</category><category>stacktrace</category><category>java</category></item><item><title>Remote debugging with Java</title><link>https://www.grey-panther.net/2011/01/remote-debugging-with-java.html</link><description>&lt;p&gt;Sometimes you have the situation that an issue is only occurring on
certain machines or only at a certain time of day. There are a couple of
possible methods to investigate such an issue (like: adding extra
logging), however I would like to add an other one: remote debugging
trough &lt;span class="caps"&gt;TCP&lt;/span&gt;/&lt;span class="caps"&gt;IP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;To do this, start your java program with the following jvm&amp;nbsp;paramters:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=23334
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The meaning of the parameters is as&amp;nbsp;follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;server=y&lt;/code&gt; – this application will act as a &lt;span class="caps"&gt;TCP&lt;/span&gt;/&lt;span class="caps"&gt;IP&lt;/span&gt; server
    (“acceptor”) and wait for incoming connections rather than trying to
    connect to&amp;nbsp;you&lt;/li&gt;
&lt;li&gt;&lt;code&gt;suspend=n&lt;/code&gt; – the server will not suspend on startup (alternatively
    you can set it to “y” in which case it will pause and wait for the
    debugger to connect – useful if you need to debug issues occurring
    at&amp;nbsp;startup)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;address=23334&lt;/code&gt; – the port on which the debugger will listen. Keep
    in mind that only one program can listen on a given port on a
    machine and if the given port is not available, the given program
    will not&amp;nbsp;start&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After the program has started open your Eclipse, go to Debug
configrations, Remote Java application, create a new entry and set
&amp;#8220;Host&amp;#8221; to the machine name or &lt;span class="caps"&gt;IP&lt;/span&gt; and &amp;#8220;Port&amp;#8221; to 23334 (or whatever other
port you&amp;#8217;ve set up). Connect to it and off you go. The configuration
steps for IntelliJ can be found
&lt;a href="http://www.javaranch.com/journal/200408/DebuggingServer-sideCode.html"&gt;here&lt;/a&gt;
(I didn’t check it, but they seem right). A couple of final&amp;nbsp;thoughts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If your sources are not in sync with the remote jars, you will see
    weird stuff (like breakpoints not triggering, triggering and the
    “wrong” line, etc), so you should make sure that you have the same
    sources as the jar does. If you still get into the situation where
    the sources are different from the classfiles, I found that setting
    breakpoints on &amp;#8220;method entry&amp;#8221; works as expected (ie. it breaks even
    if the method in the classfile is on a different&amp;nbsp;line)&lt;/li&gt;
&lt;li&gt;You can &amp;#8220;detach&amp;#8221; from a certain process and it keeps running (and
    later on you can re-attach to&amp;nbsp;it)&lt;/li&gt;
&lt;li&gt;This method is of low bandwidth / overhead, so it can be used to
    debug servers in remote&amp;nbsp;locations&lt;/li&gt;
&lt;li&gt;Never, ever do this in production! unless you are absolutely, 100%
    certain that you know what you are&amp;nbsp;doing.&lt;/li&gt;
&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 25 Jan 2011 15:35:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-01-25:2011/01/remote-debugging-with-java.html</guid><category>debug</category><category>networking</category><category>java</category></item><item><title>Navigating (Searching) Collections</title><link>https://www.grey-panther.net/2011/01/navigating-searching-collections.html</link><description>&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: this article has been crossposted to &lt;a href="http://www.transylvania-jug.org/archives/212"&gt;the Transylvania &lt;span class="caps"&gt;JUG&lt;/span&gt;
blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Java collections framework includes the concept of
&lt;a href="http://download.oracle.com/javase/6/docs/api/java/util/NavigableSet.html"&gt;NavigableSet&lt;/a&gt;s
/
&lt;a href="http://download.oracle.com/javase/6/docs/api/java/util/NavigableMap.html"&gt;NavigableMap&lt;/a&gt;s.
The principle behind these interfaces is that taking a
SortedSet/SortedMap you can use a subset of it. Some&amp;nbsp;examples:&lt;/p&gt;
&lt;p&gt;Given the following&amp;nbsp;set:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;@Before
public void setUp() {
  set = new TreeSet();
  set.addAll(Arrays.asList(1, 2, 3, 4, 6, 7, 8));
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The following is&amp;nbsp;true:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;// Returns the least element in this set greater than or equal to the given element
assertEquals(Integer.valueOf(6), set.ceiling(5)); 
// Returns the greatest element in this set less than or equal to the given element
assertEquals(Integer.valueOf(4), set.floor(5));
// Returns the least element in this set strictly greater than the given element
assertEquals(Integer.valueOf(7), set.higher(6));
// Returns the greatest element in this set strictly less than the given element
assertEquals(Integer.valueOf(3), set.lower(4));

// Returns a view of the portion of this set whose elements are strictly less than toElement.
assertTrue(set.headSet(4).containsAll(Arrays.asList(1, 2, 3)));
assertEquals(3, set.headSet(4).size());
// Returns a view of the portion of this set whose elements are greater than or equal to fromElement.
assertTrue(set.tailSet(4).containsAll(Arrays.asList(4, 6, 7, 8)));
assertEquals(4, set.tailSet(4).size());
// Returns a view of the portion of this set whose elements range from fromElement, inclusive, to toElement, exclusive.
assertTrue(set.subSet(4, 8).containsAll(Arrays.asList(4, 6, 7)));
assertEquals(3, set.subSet(4, 8).size());
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Also, the subsets / submaps / &amp;#8220;views&amp;#8221; remain connected to the parent
collection, so adding / removing to/from the parent collection updates&amp;nbsp;them:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;SortedSet headSet = set.headSet(4);
assertTrue(headSet.containsAll(Arrays.asList(1, 2, 3)));
assertEquals(3, headSet.size());

// subsets remain connected
set.removeAll(Arrays.asList(1, 2));
assertTrue(headSet.containsAll(Arrays.asList(3)));
assertEquals(1, headSet.size());

// subsets remain connected
set.addAll(Arrays.asList(-1, 1, 2, 3, 4, 5));
assertTrue(headSet.containsAll(Arrays.asList(-1, 1, 2, 3)));
assertEquals(4, headSet.size());
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Finally, you manipulate the subsets and the result will be reflected in
the original set (however if you try to add an out-of-range element, you
will get an&amp;nbsp;exception):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;SortedSet headSet = set.headSet(4);
headSet.add(-1);
assertTrue(headSet.containsAll(Arrays.asList(-1, 1, 2, 3)));
assertEquals(4, headSet.size());
assertTrue(set.containsAll(Arrays.asList(-1, 1, 2, 3, 4, 6, 7, 8)));
assertEquals(8, set.size());
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The implementation is very memory efficient, there is no copying of
elements going on. One thing to consider is that by default these
operations are not thread safe! Ie. if you generate two subsets of the
same set and process them on two different threads, you must take care
to properly synchronize the&amp;nbsp;processing.&lt;/p&gt;
&lt;p&gt;The complete source code can be found on &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/espresso-shots/src/org/transylvania/jug/espresso/shots/d20110124/TestNavigableSet.java"&gt;Google
Code&lt;/a&gt;
under Public Domain or the &lt;span class="caps"&gt;BSD&lt;/span&gt;&amp;nbsp;license.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 25 Jan 2011 15:04:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-01-25:2011/01/navigating-searching-collections.html</guid><category>espresso shots</category><category>unit tests</category><category>java</category></item><item><title>How to test for the implementation of toString()</title><link>https://www.grey-panther.net/2011/01/how-to-test-for-implementation-of.html</link><description>&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: This entry has been crossposted to the &lt;a href="http://www.transylvania-jug.org/archives/165"&gt;transylvania-jug
blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Problem statement: you have some value objects for which you implemented
toString() (for debugging purposes) and now you would like to test using
a unit test that these implementations&amp;nbsp;exist.&lt;/p&gt;
&lt;p&gt;Possible&amp;nbsp;solutions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Use reflection to detect the existence of the&amp;nbsp;method:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kr"&gt;boolean&lt;/span&gt; &lt;span class="nx"&gt;hasToStringViaReflection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Class&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;clazz&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;Method&lt;/span&gt; &lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;toString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;clazz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDeclaredMethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;toString&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;NoSuchMethodException&lt;/span&gt; &lt;span class="nx"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getReturnType&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;p&gt;
Advantage: no third party libraries needed. Also, no instance of the
class is needed. Disadvantage: the actual code is not executed, so
even trivial errors (like null dereferences) are not caught. Also,
code coverage tools will report the lines as not&amp;nbsp;covered.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compare the string returned by the toString method to the string
    returned by Object and expect them to be different. This uses
    &lt;a href="http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/ObjectUtils.html#identityToString%28java.lang.Object%29"&gt;ObjectUtils&lt;/a&gt;
    from Apache Commons&amp;nbsp;Lang:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;boolean hasToStringViaInvocation(Object o) {
  return !ObjectUtils.identityToString(o).equals(o.toString());
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;p&gt;
Advantage: the actual code is executed, so trivial errors are
detected. Also the code will be &amp;#8220;covered&amp;#8221;. Disadvantage: it requires
an external library (however Commons Lang contains a lot of goodies,
so it is sensible to add it most of the time). Also, it requires an
instance of the class, so you need to be able to instantiate&amp;nbsp;it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don&amp;#8217;t use hand-coded methods at all, but rather some code-generation
    / &lt;span class="caps"&gt;AOP&lt;/span&gt; style programming like &lt;a href="http://projectlombok.org/features/ToString.html"&gt;Project
    Lombok&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Again, these methods are to be used for toString methods which have
debugging purpose only. In case the output of the method needs to
conform to some stricter rule, more checks need to&amp;nbsp;applied.&lt;/p&gt;
&lt;p&gt;The complete source code can be found on &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/espresso-shots/src/org/transylvania/jug/espresso/shots/d20110124/TestForToString.java"&gt;Google
Code&lt;/a&gt;
under Public Domain or the &lt;span class="caps"&gt;BSD&lt;/span&gt;&amp;nbsp;license.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 25 Jan 2011 13:45:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-01-25:2011/01/how-to-test-for-implementation-of.html</guid><category>espresso shots</category><category>unit tests</category><category>java</category><category>junit</category></item><item><title>Non-buffered processor in Perl</title><link>https://www.grey-panther.net/2011/01/non-buffered-processor-in-perl.html</link><description>&lt;p&gt;Lets say that you have the following problem: you want to write a script
which processes the output of a program and writes out the modified
somewere, with as little buffering as possible. One concrete example
(for which I needed the script) is log rotation: you want to save the
output of a program (which doesn&amp;#8217;t support log rotation by itself) to a
logfile which gets rotate at midnight (because it includes the date in
the name). Also, an other constraint is that you would like to
“time-out” the read attempt to do some maintenance work (for example you
would like to rotate your logs – create the files with the different
dates - even when no data is written to&amp;nbsp;it).&lt;/p&gt;
&lt;p&gt;One possibility would have been to use
&lt;a href="http://perldoc.perl.org/IO/Select.html"&gt;&lt;span class="caps"&gt;IO&lt;/span&gt;::Select&lt;/a&gt;, however it doesn&amp;#8217;t
support filehandles on Windows (not that Windows wouldn’t have &lt;a href="http://en.wikipedia.org/wiki/Overlapped_I/O"&gt;the &lt;span class="caps"&gt;API&lt;/span&gt;
to do so&lt;/a&gt;, it’s just that
nobody was implemented it in Perl core). Fortunately we can have
something very similar to&amp;nbsp;it:&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/usr/bin/perl&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;IO::&lt;/span&gt;&lt;span class="n"&gt;Handle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nb"&gt;binmode&lt;/span&gt; &lt;span class="bp"&gt;STDIN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;binmode&lt;/span&gt; &lt;span class="bp"&gt;STDOUT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="bp"&gt;STDIN&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;blocking&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="bp"&gt;STDOUT&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;autoflush&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$BUFFLEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$buffer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$read_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;sysread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;STDIN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$BUFFLEN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nb"&gt;defined&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$read_count&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;# nothing to read, pause&lt;/span&gt;
    &lt;span class="nb"&gt;sleep&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nv"&gt;$read_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;# EOF condition&lt;/span&gt;
    &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nb"&gt;syswrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;STDOUT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;The magic is done here by &lt;code&gt;STDIN-&amp;gt;blocking(0);&lt;/code&gt; which sets the
filehandle into a non-blocking mode, returning “undef” is there is
nothing to read. Whenever this happens (ie. there is no data on the
input) it pauses for a brief moment (1/10 of a second) and then&amp;nbsp;retries.&lt;/p&gt;
&lt;p&gt;Some other remarks about the&amp;nbsp;code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the input is read and the output is written as binary. This means
    that no processing is done which could screw up the flow (for
    example trying to convert data between character sets and screwing
    up Unicode&amp;nbsp;characters)&lt;/li&gt;
&lt;li&gt;care is taken to introduce minimal buffering. Output is produced as
    soon as the input arrives. For more intricacies of Linux buffering
    see &lt;a href="http://www.pixelbeat.org/programming/stdio_buffering/"&gt;this nice article at
    pixelbeat&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;the code is very performant. I’ve measured throughputs up to 1.4
    Gb/sec and can certainly handle anything the disk can (if we
    consider it in the context of log&amp;nbsp;rotator)&lt;/li&gt;
&lt;li&gt;the code has been tested and works on both Windows (Strawberry Perl
    5.12.1) and Linux. It should work mostly anywhere since it uses Core&amp;nbsp;Perl.&lt;/li&gt;
&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 25 Jan 2011 05:44:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-01-25:2011/01/non-buffered-processor-in-perl.html</guid><category>perl</category></item><item><title>Comparative book review</title><link>https://www.grey-panther.net/2011/01/comparative-book-review.html</link><description>&lt;p&gt;Below is a a short comparative review of tow books about Java
concurrency which I&amp;#8217;ve read in the last couple of months. Disclaier: the
Amazon links are affiliate&amp;nbsp;ones.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0321349601?ie=UTF8&amp;amp;tag=hypefree-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321349601"&gt;&lt;img alt="" src="http://3.bp.blogspot.com/_hrvCBhtWhJ4/TT2c4haJJWI/AAAAAAAADTg/ShRRPEb9EHk/s200/51AG8p4X7WL._SL160_.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Java Concurrency in Practice is an interesting book, which should be a
must-read for anyone doing concurrent programming in Java (and in these
days if you aren’t, you’re missing out on a whole lot of possible
performance improvement). While some reader criticize it for the dense
stile, it is hard to see how one could tackle such a complicated topic
in simpler way (to paraphrase Albert Einstein: one needs to make things
as simple as they need to be and no simpler). That said, the book
definitely has the topics ordered from simple to more advanced, so even
if you find the idea of reading the whole book daunting, you should look
at the first couple of chapters at least. I would especially recommend
chapter 3 (Sharing Objects) from part I (Fundementals) which should give
a clear motive to everyone why they should be concerned by thread-safety
and how they should reason about concurrent programs (I find that many
concurrency errors occur because people have a naive and simplistic
understanding of the way concurrency works on modern&amp;nbsp;hardware).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0201310090?ie=UTF8&amp;amp;tag=hypefree-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0201310090"&gt;&lt;img alt="" src="http://2.bp.blogspot.com/_hrvCBhtWhJ4/TT2diMcyd-I/AAAAAAAADTo/PcrXEzkm9aY/s200/51F057WGQNL._SL160_.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Concurrent Programming in Java: Design Principles and Pattern (2nd
Edition): The CPiJ book is much older, ancient even by computer age
standards (published in 1999, compared to the JCiP book published in
2006). If also describes a much more manual, tedious way of doing things
compared to the newer book. Also, it talks about the precursor of the
java.util.concurrent package, since the package didn’t exists back then.
All in all: if possible, get the JCiP book. If you already have the CPiJ
book, it is a good introduction to the topic, however be ware that much
of the advice is outdated and Java 6 (and even Java 5) contain better
and simpler ways to perform the tasks described in the&amp;nbsp;book.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 24 Jan 2011 17:42:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-01-24:2011/01/comparative-book-review.html</guid><category>review</category><category>book</category><category>concurrency</category><category>java</category></item><item><title>noevir review</title><link>https://www.grey-panther.net/2011/01/noevir-review.html</link><description>&lt;p&gt;&lt;img alt="" src="http://www.noevirusa.com/images/products/herbal_bathsalts_icn.gif" /&gt;&lt;a href="http://www.mynoevirbiz.com/buy"&gt;noevir&lt;/a&gt;
is a &amp;#8220;direct marketing&amp;#8221; company focusing on cosmetics and &amp;#8220;* care&amp;#8221;
(skin, body, etc) type of products. After looking at their site I&amp;#8217;m
mostly neutral about them. I wouldn&amp;#8217;t recommend anyone to join such
(&amp;#8220;direct marketing&amp;#8221;) organizations, but that&amp;#8217;s not specific to noevir.
It also says &amp;#8220;Ginza Tokyo&amp;#8221; in the header, which is a big shopping street
in Tokyo, but I couldn&amp;#8217;t find any other connection to Tokyo (nor did I
see this brand advertised last summer when I was in Tokyo and I visited
Ginza, but then again, I wasn&amp;#8217;t looking for it). I also can&amp;#8217;t find it on
the &lt;span class="caps"&gt;BBB&lt;/span&gt; site (a worrisome sign), but the contact address conincides with
the domain registration (a good sign) and it is a real address, findable
on Google Maps. There are also a lot of negative articles on the web,
but they are related to the &amp;#8220;direct marketing&amp;#8221; part of the business (ie.
if you join as a consultant) not to the products. I couldn&amp;#8217;t find
anything negative about the&amp;nbsp;products.&lt;/p&gt;
&lt;p&gt;My final verdict is: use a temporary credit card if buying from them
(always a good idea when dealing with smaller merchants). If you buy
something, buy it for its obvious qualities (like its scent), not for
the advertised but hard to quantify qualities (like &amp;#8220;clensing&amp;#8221;,
&amp;#8220;protection&amp;#8221;, etc). If you need help with a skin issue, consult a&amp;nbsp;medic.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from ReviewMe. Under the terms
of the understanding I was not obligated to skew my viewpoint in any way
(ie. only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 24 Jan 2011 17:11:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-01-24:2011/01/noevir-review.html</guid><category>reviewme</category><category>review</category></item><item><title>scentsy review</title><link>https://www.grey-panther.net/2011/01/scentsy-review.html</link><description>&lt;p&gt;&lt;img alt="" src="https://scentsified.scentsy.us/LiveCMSImages/Products/MSW-ENCH.jpg" /&gt;
&lt;a href="https://scentsified.scentsy.us/Buy"&gt;scentsy&lt;/a&gt; has an interesting concept
for providing different scents in the room: rather than burning
different materials (like candles or sticks) it uses a lightbulb to heat
the wax. This provides a &amp;#8220;smoke-free&amp;#8221; way to enjoy your fragrances. An
other advantage of the concept is that it keeps the warm glow of the
candle. If scents are your thing and you don&amp;#8217;t like the smoke part, give
this a try. Take care however that some people are sensible to strong
scents and they can have adverse reactions (like headache). The electric
system can help here also: you can use an electric timer (easy to find
is most places) to control the dosage. This is also helpful if you are
concerned (as I am) about electric appliances&amp;nbsp;overheating.&lt;/p&gt;
&lt;p&gt;A couple of final&amp;nbsp;thoughts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it uses its own checkout system rather than something more known
    like Google Checkout. I would recommend using a one-time creditcard
    (like the ones offered by PayPal) for added safety (I just don&amp;#8217;t
    feel comfortable giving my creditcard details to small&amp;nbsp;merchants)&lt;/li&gt;
&lt;li&gt;it has &lt;a href="http://www.bbb.org/boise/business-reviews/candles-retail/scentsy-inc-in-meridian-id-5006323/#"&gt;an A rating on
    &lt;span class="caps"&gt;BBB&lt;/span&gt;&lt;/a&gt;
    (which is&amp;nbsp;good)&lt;/li&gt;
&lt;li&gt;it also has some kind of a referral system. I would strongly advise
    people against participating in such systems, but if the products
    are good, buy&amp;nbsp;them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from ReviewMe. Under the terms
of the understanding I was not obligated to skew my viewpoint in any way
(ie. only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 24 Jan 2011 16:37:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-01-24:2011/01/scentsy-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Processing clipboard data in Perl</title><link>https://www.grey-panther.net/2011/01/processing-clipboard-data-in-perl.html</link><description>&lt;p&gt;The problem: lets say you have a program which generates data to the
clipboard (or it is easier to get the data into the clipboard than into
a file) and you want to process the data (create a summary for&amp;nbsp;example).&lt;/p&gt;
&lt;p&gt;Perl to the&amp;nbsp;rescue!&lt;/p&gt;
&lt;p&gt;Get the
&lt;a href="http://search.cpan.org/~king/Clipboard-0.13/lib/Clipboard.pm"&gt;Clipboard&lt;/a&gt;
module (if you use Linux, it is as easy as
&lt;code&gt;sudo cpan -i Clipboard; sudo apt-get install xclip&lt;/code&gt; but the package is
also available as an ActivePerl package for&amp;nbsp;example).&lt;/p&gt;
&lt;p&gt;Write a script like the&amp;nbsp;following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;Clipboard&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$clippy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Clipboard&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;paste&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$sum&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$cnt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$clippy&lt;/span&gt; &lt;span class="o"&gt;=~&lt;/span&gt;&lt;span class="sr"&gt; /Processed in: (\d+)/g&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$sum&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;$cnt&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$sum&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Profit!!!&amp;nbsp;:-)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: you can combine this with &lt;a href="http://advent.rjbs.manxome.org/2010/2010-12-13.html"&gt;syntax
highlight&lt;/a&gt; for
example to obtain nicely formatted source&amp;nbsp;code.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: copying stuff to the clipboard doesn&amp;#8217;t seem to work under
Linux (tested under Ubuntu 10.10) because it invokes xclip with the
&amp;#8220;primary&amp;#8221; clipboard but it only seems to work with the &amp;#8220;clipboard&amp;#8221;
clipboard. Unfortunately I didn&amp;#8217;t find any good material about the
distinction between these different clipboard types, but the &amp;#8220;monkey
patch&amp;#8221; below fixes the problem for me (of course I also &lt;a href="https://rt.cpan.org/Public/Bug/Display.html?id=65399"&gt;filed a
bug&lt;/a&gt; with the
package so this should be resolved in a future&amp;nbsp;version).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="x"&gt;use strict;&lt;/span&gt;
&lt;span class="x"&gt;use warnings;&lt;/span&gt;
&lt;span class="x"&gt;use Clipboard;&lt;/span&gt;

&lt;span class="x"&gt;if (&amp;#39;Clipboard::Xclip&amp;#39; eq &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;Clipboard&lt;/span&gt;&lt;span class="x"&gt;::driver) &lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;span class="x"&gt;  no warnings &amp;#39;redefine&amp;#39;;&lt;/span&gt;
&lt;span class="x"&gt;  *Clipboard::Xclip::all_selections = sub &lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="x"&gt;  &lt;/span&gt;
&lt;span class="x"&gt;    qw(clipboard primary buffer secondary)&lt;/span&gt;
&lt;span class="x"&gt;  };&lt;/span&gt;
&lt;span class="x"&gt;}&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="x"&gt; ... your code here ...&lt;/span&gt;
&lt;span class="x"&gt;Clipboard-&amp;gt;copy(&amp;#39;foofooo1&amp;#39;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 03 Jan 2011 17:03:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-01-03:2011/01/processing-clipboard-data-in-perl.html</guid><category>ubuntu</category><category>perl</category></item><item><title>Why Ubuntu 10.10 is better than Windows XP?</title><link>https://www.grey-panther.net/2011/01/why-ubuntu-1010-is-better-than-windows.html</link><description>&lt;p&gt;I want to preface this with the following: I don&amp;#8217;t want to pull a fanboy
move here. The only thing I assert is that a recent &lt;span class="caps"&gt;OS&lt;/span&gt; (ie. Ubuntu
10.10) can give a considerable performance improvement (without changing
the hardware) compared to an almost 10 year old &lt;span class="caps"&gt;OS&lt;/span&gt; (Windows &lt;span class="caps"&gt;XP&lt;/span&gt;).&lt;/p&gt;
&lt;p&gt;Without further ado, compiling a large(ish) Java project on Windows &lt;span class="caps"&gt;XP&lt;/span&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;real    3m16.776s
user    0m2.333s
sys     0m0.796s
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And Ubuntu&amp;nbsp;10.10:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;real    1m32.169s
user    2m10.488s
sys     0m12.677s
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;More than twice as fast!&amp;nbsp;Neat!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: a friend just got a newer machine with better processor (Core
i5 vs Core Duo) with Windows 7. The new machine with Windows 7 compiles
the project in \~1m50s, so still Ubuntu seems to be the better&amp;nbsp;choice.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 03 Jan 2011 16:37:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-01-03:2011/01/why-ubuntu-1010-is-better-than-windows.html</guid><category>ubuntu</category><category>windows</category></item><item><title>Java has some surprising amount of dinamism in it</title><link>https://www.grey-panther.net/2011/01/java-has-some-surprising-amount-of.html</link><description>&lt;p&gt;Not long ago I saw &lt;a href="http://pastie.org/1411379"&gt;some java code&lt;/a&gt; from
&lt;a href="http://people.apache.org/~simonetripodi/"&gt;Simone Tripodi&lt;/a&gt;. It generates
synchronization wrappers around arbitrary objects at runtime in a
typesafe manner with a couple of easy to understand lines of code. The
heavy lifting is done by the dynamic proxy mechanism available from Java
1.5 if I recall&amp;nbsp;correctly.&lt;/p&gt;
&lt;p&gt;The downside is that there seems to be a 30% to 40% performance impact
based on some &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/java-dynproxy-perf/src/TestJavaDynproxyPerf.java"&gt;quick
benchmark&lt;/a&gt;
I&amp;#8217;ve done. However one can not understate the value of not having to
write or maintain&amp;nbsp;code!&lt;/p&gt;
&lt;p&gt;There are surprisingly many things one can do in Java in a typesafe
manner (including things usually associated with dynamic languages)
which helps catching more errors early (at compile time) and take full
advantage of the different helper features available in IDEs (such as&amp;nbsp;auto-complete).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 02 Jan 2011 18:15:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-01-02:2011/01/java-has-some-surprising-amount-of.html</guid><category>programming</category><category>java</category></item><item><title>Java Date objects can mutate, even when read</title><link>https://www.grey-panther.net/2011/01/java-date-objects-can-mutate-even-when.html</link><description>&lt;p&gt;Ran into this problem a couple of months ago, when we saw some strange
dates in production. So I dug into the Java library sources (thank you
Sun for providing those!) and found that Date objects aren&amp;#8217;t always
&amp;#8220;normalized&amp;#8221;. Rather, sometimes a &amp;#8220;denormalized&amp;#8221; value is stored which
is later (lazily) normalized. The normalized value isn&amp;#8217;t properly
synchronized with regards to the Java memory model however, which means
that sometimes you can get weir (and incorrect!)&amp;nbsp;results.&lt;/p&gt;
&lt;p&gt;To illustrate the problem, I&amp;#8217;ve created &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/java-data-mutation/DataMutation.java"&gt;a small
program&lt;/a&gt;.
It does the&amp;nbsp;following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It creates a Date object and sets it to certain&amp;nbsp;values&lt;/li&gt;
&lt;li&gt;Schedules multiple Runnable&amp;#8217;s which examine the value of the object
    on a&amp;nbsp;threadpool&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Everything looks fine and dandy, right? The object isn&amp;#8217;t changed
(apparently) after being handed of to the threadpool, yet sometimes
wrong answers still appear (it takes around \~30 min on my laptop for
such an event). So what are the lessons&amp;nbsp;here?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get your &lt;span class="caps"&gt;API&lt;/span&gt; right! If the user doesn&amp;#8217;t &lt;em&gt;seem&lt;/em&gt; to be doing writing,
    don&amp;#8217;t do&amp;nbsp;writing!&lt;/li&gt;
&lt;li&gt;You can still do lazy initialization (if you really want to), but be
    sure to make it thread-correct (volatile, synchronized, etc) or at
    least document it (even though nobody reads the&amp;nbsp;documentation)&lt;/li&gt;
&lt;li&gt;Source code &lt;span class="caps"&gt;FTW&lt;/span&gt;! I couldn&amp;#8217;t have debugged this without source code.
    Ok, maybe I could (decompiling class files is not that hard), but
    probably I wouldn&amp;#8217;t have&amp;nbsp;bothered.&lt;/li&gt;
&lt;li&gt;Finally, the solution (hack) in this particular situation is to call
    &lt;code&gt;getTime()&lt;/code&gt; after setting the values, which preemptively normalizes
    the internal representation. Of course the proper solution would be
    to pass around truly immutable objects (like timestamps or value
    objects from &lt;a href="http://joda-time.sourceforge.net/"&gt;Joda Time&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 02 Jan 2011 10:43:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2011-01-02:2011/01/java-date-objects-can-mutate-even-when.html</guid><category>programming</category><category>multithreading</category><category>java</category></item><item><title>TigerChef review</title><link>https://www.grey-panther.net/2010/12/tigerchef-review.html</link><description>&lt;p&gt;Lately I&amp;#8217;ve been experimenting with some simple cooking, and of course
for cooking you need &lt;a href="http://www.tigerchef.com/cooking-equipment.html"&gt;cooking
equipment&lt;/a&gt;. TigerChef
is one of the many sources of &lt;a href="http://www.tigerchef.com/cooking-equipment.html"&gt;cooking
equipment&lt;/a&gt; you can get,
although they are oriented more at restaurants than individual&amp;nbsp;needs.&lt;/p&gt;
&lt;p&gt;Anyway, I&amp;#8217;m quite happy with the initial experiments and with the help
of my dear wife who endures them and gives feedback on it I hope to
start making more and more complex dishes. It seems incredible how
simple it is to put together a dish following a recipe (but it is also
hard work). And you get a (hopefully) delicious reward at the&amp;nbsp;end.&lt;/p&gt;
&lt;p&gt;The two things I cooked so fare are potatoes cooked in their &amp;#8220;skin&amp;#8221; and
&amp;#8220;turosgomboc&amp;#8221; (Google translate is no help to me finding the
translations of these terms). The potatoes were the simpler of the two
(you just had to cook them in the oven for 40 minutes and eat it with
butter or cheese) while the &amp;#8220;turosgomboc&amp;#8221; was quite an involvement.
Fortunately I found &lt;a href="http://szekelyrecept.blogspot.com/2009/03/tehenturos-gomboc.html"&gt;this
recipe&lt;/a&gt;
and it worked out&amp;nbsp;great.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 09 Dec 2010 22:23:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-12-09:2010/12/tigerchef-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Problems (and a semi-solution) for tcpdump with DAG cards</title><link>https://www.grey-panther.net/2010/08/problems-and-semi-solution-for-tcpdump.html</link><description>&lt;p&gt;Documenting here for posterity, since I didn&amp;#8217;t find much information
about it on the&amp;nbsp;&amp;#8216;net:&lt;/p&gt;
&lt;p&gt;Disclaimer: I&amp;#8217;m not a network head, just an amateur who dabbles with it
when he needs to fix a&amp;nbsp;problem.&lt;/p&gt;
&lt;p&gt;Given one Ninjabox (the nickname for packet capture boxes from
&lt;a href="http://www.endace.com/"&gt;Endace&lt;/a&gt;) with a &lt;span class="caps"&gt;DAG&lt;/span&gt; card (some kind of custom
packet capture network card from the same company), you could get the
following error when trying to use tcpdump on the dag&amp;nbsp;interface:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;tcpdump&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dag_attach_stream&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Permission&lt;/span&gt; &lt;span class="n"&gt;denied&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/p&gt;
The problem seems to be unrelated to your privilege level (you will get
this even if you are running as root), but rather to the fact that some
other program is/was using the particular interface. You can quickly
check this by doing a &lt;code&gt;lsof | grep dag0&lt;/code&gt;. In my case it was softflowd.
But even after killing the softflowd process, I was getting the same
error message. I had to reset the card using the following&amp;nbsp;commands:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;/etc/init.d/dag_drivers_load stop
/etc/init.d/dag_drivers_load start
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/p&gt;
After this tcpdump worked like a charm. Hope that this information will
save people from searching around as I had to&amp;nbsp;do.&lt;/p&gt;
&lt;p&gt;Off topic minirant: why use custom hardware / software? In my experience
they almost never deliver the performance they promise and are hard to
troubleshoot because of lack of&amp;nbsp;information.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 13 Aug 2010 04:30:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-08-13:2010/08/problems-and-semi-solution-for-tcpdump.html</guid><category>pcap</category><category>packet capture</category><category>tcpdump</category><category>linux</category><category>tcp/ip</category></item><item><title>shuttledirect review</title><link>https://www.grey-panther.net/2010/08/shuttledirect-review.html</link><description>&lt;p&gt;The purpose of this website is to offer prebookable &lt;a href="http://www.shuttledirect.com"&gt;Airport taxi
transfers&lt;/a&gt;. This means that you can rent a
transportation method to/from the airport before you even embark on your&amp;nbsp;journey.&lt;/p&gt;
&lt;p&gt;Is it worth it? I have to admit that I&amp;#8217;m far from being a big traveler,
but until now every airport I&amp;#8217;ve been to offers many ways to travel to
the nearest city which are clearly marked. Also, this site is an
aggregator of local offerings (it doesn&amp;#8217;t provide the services itself),
which means that the quality may vary between different&amp;nbsp;parts.&lt;/p&gt;
&lt;p&gt;The trustlevel I have in the site (since security is a feeling, not some
objective thing for most people) is medium for several&amp;nbsp;reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;They exist since a long time (since 2002), which is good, but don&amp;#8217;t
    have the proper &lt;span class="caps"&gt;SSL&lt;/span&gt; setup (which is bad, especially for a site which
    wants to take my&amp;nbsp;money)&lt;/li&gt;
&lt;li&gt;They &lt;a href="http://www.domaintools.com/reverse-ip/?hostname=92.52.85.11"&gt;don&amp;#8217;t run on a dedicated
    server&lt;/a&gt;,
    although probably the other sites hosted on the same server belong
    to the same company (so not as bad as using shared&amp;nbsp;hosting)&lt;/li&gt;
&lt;li&gt;The different security logos which they present are not linked to
    the respective organizations (you can&amp;#8217;t click on them to access the
    information the third-party has about the&amp;nbsp;site)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Considering all the above, plus the fact that I never felt the need for
such a service, I am somewhat reticent to recommend it, but it might
work for other&amp;nbsp;people.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 13 Aug 2010 03:44:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-08-13:2010/08/shuttledirect-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Copyright is not theft!</title><link>https://www.grey-panther.net/2010/06/copyright-is-not-theft.html</link><description>&lt;p&gt;Recently there have been quite a few copyright-related posts which came
up in my feedreader. This is of course a complicated and layered problem
which can’t be solved in the couple of paragraphs of this blogpost, but
at least I can post a bunch of great materials which should contribute
to the edification of all of&amp;nbsp;us.&lt;/p&gt;
&lt;p&gt;From
&lt;a href="http://comixtalk.com/nina_paleys_copying_not_theft"&gt;comixtalk.com&lt;/a&gt;:
Copyright Is Not&amp;nbsp;theft&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
http://www.youtube-nocookie.com/v/IeTybKL1pM4&amp;hl=en\_US&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00

&lt;/center&gt;
Also from comixtalk: [Nina Paley Discusses State of Sita Sings The
Blues](http://comixtalk.com/xerexes/nina_paley_discusses_state_sita_sings_blues).
This is an animated movie (which you can [watch for
free](http://www.archive.org/details/Sita_Sings_the_Blues)) that had
legal problems because of the backing soundtrack, even though the music
in question was created in 1920, so it should be in the public domain.

&lt;p&gt;
&lt;center&gt;
&lt;embed src="http://blip.tv/play/kG2Bl7UpAg" type="application/x-shockwave-flash" width="480" height="376" allowscriptaccess="always" allowfullscreen="true"&gt;
&lt;/embed&gt;
&lt;/center&gt;
You might also be interested in the documentary [rip! a remix
manifesto](http://ripremix.com/) (embedded below for your convenience).
It is a documentary (Michael Moore style) talking about the issue. And
while it isn&amp;#8217;t perfect, it manages to raise a lot of interesting issues
(&lt;span class="caps"&gt;BTW&lt;/span&gt;, personally I find the songs on the [Grey
Album](http://en.wikipedia.org/wiki/The_Grey_Album) much better than the
originals on the Black album - just a random example how derivative
works can improve the original):

&lt;p&gt;
&lt;center&gt;
&lt;embed src="http://blip.tv/play/AYHkzV4C" type="application/x-shockwave-flash" width="480" height="307" allowscriptaccess="always" allowfullscreen="true"&gt;
&lt;/embed&gt;
&lt;/center&gt;
Finally here is a presentation from &lt;span class="caps"&gt;TED&lt;/span&gt; comparing industries with
different level of copyright protection (via
[Slashdot](http://news.slashdot.org/story/10/05/25/2222207/The-Fashion-Industry-As-a-Model-For-&lt;span class="caps"&gt;IP&lt;/span&gt;-Reform)):

&lt;p&gt;
&lt;center&gt;
http://www.youtube-nocookie.com/v/zL2FOrx41N0&amp;hl=en\_US&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00

&lt;/center&gt;
This should be enough information to keep you outraged for weeks :-)

&lt;span class="caps"&gt;PS&lt;/span&gt;. Just a quick rundown of my current opinion: all [works
are](http://hype-free.blogspot.com/2009/09/myths-of-innovation.html)
[derivative](http://hype-free.blogspot.com/2009/08/myth-of-cognitive-quantum-jumps.html).
But even if we skip over this, long copyright stifles innovation. And
even if we don’t consider (or don’t accept) this premise, labelling
*all* copying as “theft” is (depending) wrong, (possibly purposefully)
misleading and unethical. For example I posses the copyright for all the
materials published on this blog (since it is my original work), but I
explicitly grant anyone to reuse the content under the conditions of the
[&lt;span class="caps"&gt;CC&lt;/span&gt;-&lt;span class="caps"&gt;BY&lt;/span&gt;-&lt;span class="caps"&gt;SA&lt;/span&gt; 3.0](http://creativecommons.org/licenses/by-sa/3.0/) license.

&lt;span class="caps"&gt;PS&lt;/span&gt; \#2: An other interesting documentary to watch is [Patently
absurd](http://patentabsurdity.com/). I didn&amp;#8217;t include it above because
it deals with patent law, not copyright, two domains which are
frequently bundled together under the term &amp;#8220;Intellectual Property&amp;#8221;
(together with trademark law), but the fact is that these three domains
are completely separate and the laws governing them are distinct, ergo I
didn&amp;#8217;t want to add to the confusion.

&lt;span class="caps"&gt;PS&lt;/span&gt; \#3: Technology != Breaking the law. Just because I use bittorrent,
it doesn&amp;#8217;t mean that I&amp;#8217;m breaking the copyright law! I might be very
well downloading a Linux &lt;span class="caps"&gt;ISO&lt;/span&gt; (as I frequently do), one of the many
*free* (as in freedom) material from
[Clearbits](http://www.clearbits.net/) (previosuly legaltorrents) or a
World of Warcraft patch for that&amp;nbsp;matter.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 09 Jun 2010 15:36:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-06-09:2010/06/copyright-is-not-theft.html</guid><category>copyright</category><category>rant</category><category>law</category></item><item><title>Dear people: try to think harder, even if it makes your head hurt!</title><link>https://www.grey-panther.net/2010/06/dear-people-try-to-think-harder-even-if.html</link><description>&lt;p&gt;This again is the case of a couple of links on the same topic piling up
in my reader (this tends to happen if you take a pause in blogging&amp;nbsp;:-)):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://googlesystem.blogspot.com/2010/05/gmails-spam-filter-no-longer-effective.html"&gt;Gmail&amp;#8217;s Spam Filter No Longer&amp;nbsp;Effective?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sophos.com/blogs/gc/g/2010/05/19/60-facebook-users-quitting-privacy/"&gt;60% of Facebook users consider quitting over&amp;nbsp;privacy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sophos.com/blogs/gc/g/2010/05/27/poll-93-facebook-optin-sharing-optout/"&gt;Poll: 93% say Facebook should make you &amp;#8216;opt-in&amp;#8217; to sharing rather
    than&amp;nbsp;&amp;#8216;opt-out&amp;#8217;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sunbeltblog.blogspot.com/2010/06/marketing-study-avid-gamers-average.html"&gt;Marketing study: avid gamers average seven hours per&amp;nbsp;day&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The commonality between all these articles is that they make statements
based on faulty questions (&lt;a href="http://hype-free.blogspot.com/2010/01/you-go-phd-comics.html"&gt;&lt;span class="caps"&gt;PHD&lt;/span&gt; Comics says it
best&lt;/a&gt;). A
website poll is not the same as a scientific study (to name just  one
the problems - it has a selection bias towards the reader of the
particular site - which wouldn&amp;#8217;t be a problem if the results wouldn&amp;#8217;t be
presented as applicable for the general population). And even if they
were scientific studies, the purpose of a scientific study isn&amp;#8217;t to find
the absolute truth! It is to present a hypothesis which doesn&amp;#8217;t
contradict any of the current observation. But it doesn&amp;#8217;t exclude the
possibility that in the future there will be an observation which
contradicts the hypothesis, and as such, it must be&amp;nbsp;changed.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 07 Jun 2010 05:36:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-06-07:2010/06/dear-people-try-to-think-harder-even-if.html</guid><category>rant</category><category>statistics</category><category>marketing</category></item><item><title>Who is hype-free?</title><link>https://www.grey-panther.net/2010/06/who-is-hype-free.html</link><description>&lt;p&gt;I’ve done &lt;a href="http://hype-free.blogspot.com/2006/09/print-hello-world.html"&gt;a writeup about the name of
blog&lt;/a&gt; when
I started it. However recently two links came up in my Google&amp;nbsp;Alerts:&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.urbandictionary.com/define.php?term=Hype%20Free"&gt;first
one&lt;/a&gt; is from
Urban Dictionary and it defines hype free as “Slang word for drug&amp;nbsp;free”.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://answers.yahoo.com/question/index?qid=20100601161548AAmEFtl"&gt;second
one&lt;/a&gt;
is from Yahoo! Answers and states pretty much the same thing (in a
conversational&amp;nbsp;form).&lt;/p&gt;
&lt;p&gt;I didn’t know this meaning of the expression until these items came on
my radar recently, but they are very funny (and certainly true in more
than one&amp;nbsp;sense).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: the Yahoo Answers page states that it was deleted “according
to our Community Guidelines”.&amp;nbsp;Bummer.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 06 Jun 2010 11:14:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-06-06:2010/06/who-is-hype-free.html</guid><category>fun</category><category>blog</category><category>personal</category></item><item><title>On the hopelessness of pulling content from the interwebs</title><link>https://www.grey-panther.net/2010/05/on-hopelessness-of-pulling-content-from.html</link><description>&lt;p&gt;&lt;img alt="3864920222_87dfd17f9e_b" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/S-gwg-5PuDI/AAAAAAAACQA/XRuR3KTb-4I/3864920222_87dfd17f9e_b%5B2%5D.jpg?imgmax=800" title="3864920222_87dfd17f9e_b" /&gt;
In the last couple of weeks I had at least two cases where I saw a
(provocative) post come up in my feedreader, click trough to read the
entire piece (&lt;span class="caps"&gt;BTW&lt;/span&gt;, partial feeds just suck!), just to find that the
owner removed the post. The first was from the DynDNS blog named “&lt;a href="http://dyn.com/opendialogue"&gt;Open
Dialogue&lt;/a&gt;” (apparently openness and
censorship can co-exists in some people’s minds, without having their
brains blown-up by the cognitive dissonance) and it said the&amp;nbsp;following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h5&gt;We hope we&amp;#8217;re wrong, but it looks like &lt;span class="caps"&gt;DNS&lt;/span&gt; Made Easy (aka Tiggee &lt;span class="caps"&gt;LLC&lt;/span&gt;) is secretly behind&amp;nbsp;DNSComparison.com&lt;/h5&gt;
&lt;p&gt;Let’s first start off by providing some definitions of key attributes
that &lt;a href="http://www.dyn.com"&gt;Dyn Inc.&lt;/a&gt; lives by across our organization
and takes pride in while representing the &lt;span class="caps"&gt;DNS&lt;/span&gt; industry. These
characteristics define us and make us the company we are today. Call
us naïve, but we also “still” hold out hope that the rest of the &lt;span class="caps"&gt;DNS&lt;/span&gt;
space (and the business world, in general) believes the same and truly
means well when their actions might seem&amp;nbsp;otherwise.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The second one comes from the &lt;a href="http://maradns.blogspot.com/"&gt;MaraDNS
blog&lt;/a&gt; (is there a pattern here? are there
many frustrated people in the &lt;span class="caps"&gt;DNS&lt;/span&gt; space?&amp;nbsp;:-p):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://maradns.blogspot.com/2010/05/xonotic-type-2-freetards-cant-make.html"&gt;Xonotic: Type 2 Freetards can’t make&amp;nbsp;content&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you want to piss a type 2 freetard off, take an open-source
project, make it proprietary (after getting everything with copyright
to the code to agree to the non-&lt;span class="caps"&gt;GPL&lt;/span&gt; terms), and sell the proprietary
product.&lt;br /&gt;
This happened with Tux Racer. Boy were the freetards pissed off,
whining about how the commercial game wasn’t very good, blah blah
blah. But, bottom line: The developers worked hard making the program.
They wanted to get paid for their work. The type 2 freetards felt
something was stolen from them because the next version of their
program was not open-source.&lt;br /&gt;
Another successful open-source game is now doing the same thing:
Nexuiz, an excellent fun little first person shooter with everything
(both the engine &lt;em&gt;and&lt;/em&gt; the content) under a &lt;span class="caps"&gt;GPL&lt;/span&gt;-compatible license.&lt;br /&gt;
Well, the developers realized one day that they wanted to get paid for
their work, so they decided to have a remake of Nexuiz for consoles
that will be closed-sourced using different content.&lt;br /&gt;
The freetards went ballistic. It became &lt;a href="http://games.slashdot.org/story/10/03/22/1859212/Nexuiz-Founder-Licenses-It-For-Non-GPL-Use"&gt;a front page
story&lt;/a&gt;
at &lt;a href="http://slashdot.org"&gt;Freetard central&lt;/a&gt;. In short order, a
&lt;a href="http://www.xonotic.org/"&gt;fork&lt;/a&gt; was declared. Freetards everywhere
talked about how evil Nexuiz was; their declarations were mainly based
on ignorance; inaccurate posts accusing the Nexuiz development team of
violating the &lt;span class="caps"&gt;GPL&lt;/span&gt; were posted everywhere.&lt;br /&gt;
The next Nexuiz will, for the record, be 100% legal: All of the Nexuiz
code has been licensed for non-free use. The content will be, for the
most part, entirely new. There is no &lt;span class="caps"&gt;GPL&lt;/span&gt; violation here.&lt;br /&gt;
Once the dust cleared, development on the fork (called Xonotic)
stalled. One developer &lt;a href="http://forums.xonotic.org/showthread.php?tid=409"&gt;recently
admitted&lt;/a&gt; that, two
months after declaring this fork,&amp;nbsp;that&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It is my opinion that such actions inherently undermine the trust in a
person / brand. It is also ineffective (proven by the fact that at least
one person – ie. myself – was able to read the content). My ideal
publishing platform would&amp;nbsp;be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Versioned, so that everyone could look up what the text looked like
    at a given moment in&amp;nbsp;time&lt;/li&gt;
&lt;li&gt;Verified by a third-party agency (such as a timestamp signing
    service) which guarantees that it had a certain content at given
    point in time (you don’t have to transmit the full text to such a
    service &lt;span class="caps"&gt;BTW&lt;/span&gt; – them signing a cryptographic hash is good&amp;nbsp;enough)&lt;/li&gt;
&lt;li&gt;Digitally signed by the&amp;nbsp;author&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We all make mistakes. Lets act as grownups about it. Don’t try to wish
some things away. I understand that in some circumstances there are
legal obligations to take some things down, but at least post the
takedown reason in these cases (ie. “this post was taken down because of
allegedly defamatory content.&amp;nbsp;sorry”).&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/sararichards/"&gt;sara\~&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 10 May 2010 19:12:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-05-10:2010/05/on-hopelessness-of-pulling-content-from.html</guid><category>rant</category><category>internet</category><category>blog</category><category>web</category><category>personal</category></item><item><title>Putting the eval into Java</title><link>https://www.grey-panther.net/2010/04/putting-eval-into-java.html</link><description>&lt;p&gt;&lt;img alt="2254800793_185ccbdfa1_b" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/S9BgS0EaV4I/AAAAAAAACP4/XNLXHNTtS9U/2254800793_185ccbdfa1_b%5B2%5D.jpg?imgmax=800" title="2254800793_185ccbdfa1_b" /&gt;
“eval” (short for evaluate) is usually the name given to the method in
dynamic languages which makes it possible for the programmer to access
the compiler / runtime. Here are a few links to the documentation for
the function in different&amp;nbsp;languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval"&gt;Javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://perldoc.perl.org/functions/eval.html"&gt;Perl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://php.net/manual/en/function.eval.php"&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.python.org/library/functions.html#eval"&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ruby-doc.org/core/classes/Kernel.html#M005922"&gt;Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lua.org/manual/5.1/manual.html#pdf-loadstring"&gt;&lt;span class="caps"&gt;LUA&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They are usually used to quickly evaluate a &lt;span class="caps"&gt;DSL&lt;/span&gt; (Domain Specific
Language) expression. What I mean by this is the following: lets say
that the user supplies an expression which can be easily (ie. with a few
string replacements or regular expressions at most) converted into a
valid expression in the current language. Then you don’t have to write
your own lexer / parser / runtime to support this&amp;nbsp;function.&lt;/p&gt;
&lt;p&gt;To make this example even more concrete, lets say that you are
implementing a simple graphing calculator where the user can supply the
right part of the f(x)=&amp;#8230; expression and you draw the function for a
given interval of x. If the user supplies something like 1 + 2*x +
3*x*x, this is pretty much a valid expression in all programming
languages (there are minor syntactic differences to be precise - like
Perl/&lt;span class="caps"&gt;PHP&lt;/span&gt; requiring you to prefix variable names by the “\$” sign), so
you could simply use “eval” on&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Warning! Running eval on unverified, user supplied code is a
really, really bad idea! (yes, I know that red and bold underline is a
little over the top, but this is just that bad! Never, never, ever do
this! It is equivalent to letting everybody connected to the Internet
(assuming that we are talking about an webapp) running arbitrary code on
your server. Implement very strict filtering (based on whitelisting if
at all possible) for such features!&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Surely, you would say, such a dynamic feature isn’t easily accessible
for a statically typed compiled language as Java&amp;#8230; And you would be
wrong! As of Java 6 each &lt;span class="caps"&gt;JVM&lt;/span&gt; install (including the JREs) includes the
Java compiler, and it also includes &lt;a href="http://java.sun.com/javase/6/docs/api/javax/tools/JavaCompiler.html"&gt;a public &lt;span class="caps"&gt;API&lt;/span&gt; to access
it&lt;/a&gt;.
Using this feature you can implement the Java equivalent of “eval”:
giving a string to the compiler and getting a class instance back, on
which you can call methods. You can find the source &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/java-dyncompile/src/com/hypefree/blogspot/dyncompile/DynCompile.java"&gt;in my &lt;span class="caps"&gt;SVN&lt;/span&gt;
repo&lt;/a&gt;.
It is (almost entirely) based on the following article from 2007 (just
to give you an idea how long this option has been around): &lt;a href="http://www.ibm.com/developerworks/java/library/j-jcomp/index.html"&gt;Create
dynamic applications with
javax.tools&lt;/a&gt;.
An other (pleasant) surprise was the fact that this process doesn’t
require any security privileges and works perfectly in restricted
environments such as&amp;nbsp;browser.&lt;/p&gt;
&lt;p&gt;An additional advantage of using the &lt;span class="caps"&gt;JVM&lt;/span&gt; rather than your own runtime is
speed: many man-hours have gone into optimizing both the source –&gt;
bytecode and the bytecode –&gt; machine code transformations. Which brings
me to an other possible use for this kind of solution: generating
particularized instances of generic classes to give more hints to the
&lt;span class="caps"&gt;JVM&lt;/span&gt; about possible&amp;nbsp;implementations.&lt;/p&gt;
&lt;p&gt;For example, the StrinkTokenizer class does the following when looking
for separator&amp;nbsp;characters:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;char c = str.charAt(position);
if ((c &amp;gt; maxDelimCodePoint) || (delimiters.indexOf(c) &amp;lt; 0))
    break;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now imagine how much more efficient (in the sense of: easier for the &lt;span class="caps"&gt;JVM&lt;/span&gt;
to translate into an efficient machinecode) this code would be if we
knew that we have exactly one possible delimiter (as it is the case most
of the time). Replacing &lt;code&gt;delimiters.indexOf(c)&lt;/code&gt; with &lt;code&gt;delimiter == c&lt;/code&gt;
can give you an order of magnitude speedup for this particular&amp;nbsp;code.&lt;/p&gt;
&lt;p&gt;The takeaway should&amp;nbsp;be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This is a very powerful technique, but it should be used with care!
    Only use this method if you’ve proven (by using a profiler for
    example) that the given class is the dominant factor in the
    performance&amp;nbsp;picture.&lt;/li&gt;
&lt;li&gt;Be particularly aware of potential security risks which could&amp;nbsp;appear!&lt;/li&gt;
&lt;li&gt;Also, be aware that you give up many things when going this route:&lt;ul&gt;
&lt;li&gt;Automated&amp;nbsp;refactoring&lt;/li&gt;
&lt;li&gt;Reports generated by bytecode analysis tools (like coverage or
    bug&amp;nbsp;detection)&lt;/li&gt;
&lt;li&gt;Debugger&amp;nbsp;support&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;In conclusion: use it with great care, but if used properly, it can
    result in considerable performance&amp;nbsp;improvements!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Picture taken from&lt;/em&gt; &lt;a href="http://www.flickr.com/photos/hexadecimal_time/"&gt;&lt;em&gt;Hexadecimal Time&amp;#8217;s
photostream&lt;/em&gt;&lt;/a&gt; &lt;em&gt;with&amp;nbsp;permission.&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 22 Apr 2010 17:42:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-04-22:2010/04/putting-eval-into-java.html</guid><category>programming</category><category>java</category></item><item><title>Update to the Blogger Tag Cloud</title><link>https://www.grey-panther.net/2010/04/update-to-blogger-tag-cloud.html</link><description>&lt;p&gt;A small &lt;span class="caps"&gt;PSE&lt;/span&gt; (Public Service Announcement): if you were using the
&lt;a href="http://hype-free.blogspot.com/2009/03/blogger-tag-cloud.html"&gt;Blogger Tag
Cloud&lt;/a&gt;
I’ve put together based on the &lt;span class="caps"&gt;WP&lt;/span&gt;-Cumulus plugin, you might have noticed
that it stopped working some time ago (I’m not entirely sure when, since
I didn’t notice it, until a reader commented and brought it to my
attention – thanks again &lt;a href="http://www.leblogger.com/"&gt;Soufiane&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The problem was that the server hosting the &lt;span class="caps"&gt;SWF&lt;/span&gt; and &lt;span class="caps"&gt;JS&lt;/span&gt; file didn’t serve
them anymore, instead giving a 403 – access refused error. To mitigate
this problem I’ve uploaded the &lt;span class="caps"&gt;SWF&lt;/span&gt; file to Google Code and used the &lt;span class="caps"&gt;JS&lt;/span&gt;
file from the Google Ajax Library and bought the plugin back to&amp;nbsp;life.&lt;/p&gt;
&lt;p&gt;So, if you are using the plugin and you are subscribed to my feed, go to
the &lt;a href="http://hype-free.blogspot.com/2009/03/blogger-tag-cloud.html"&gt;original (now updated)
post&lt;/a&gt; and
use the new&amp;nbsp;code.&lt;/p&gt;
&lt;p&gt;Thank you and sorry for any inconvenience&amp;nbsp;caused!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 20 Apr 2010 17:27:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-04-20:2010/04/update-to-blogger-tag-cloud.html</guid><category>Blogger</category><category>flash</category><category>plugin</category><category>javascript</category><category>blog</category></item><item><title>“Funny things I found while browsing the web” post</title><link>https://www.grey-panther.net/2010/04/funny-things-i-found-while-browsing-web.html</link><description>&lt;p&gt;The Geek/Nerd/Dork/Dweeb Venn Diagram (via Joel Esler’s&amp;nbsp;blog):&lt;/p&gt;
&lt;p&gt;&lt;img alt="geek-diagram" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/S785AwKjnfI/AAAAAAAACPY/MGsHYuLMWlw/geek-diagram%5B4%5D.gif?imgmax=800" title="geek-diagram" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;BTW&lt;/span&gt;, here is a quick way to convert JPEGs which should be PNGs or GIFs
(because they aren’t photos!): simply use a photo editing software (like
the &lt;a href="http://www.gimp.org/"&gt;&lt;span class="caps"&gt;GIMP&lt;/span&gt;&lt;/a&gt; or
&lt;a href="http://www.irfanview.com/"&gt;IrfanView&lt;/a&gt; /
&lt;a href="http://www.getpaint.net/"&gt;Paint.&lt;span class="caps"&gt;NET&lt;/span&gt;&lt;/a&gt;) and reduce the color depth
&lt;em&gt;without dithering&lt;/em&gt;. This should pretty much get you there. You might
want to play around with the number of colors to&amp;nbsp;retain.&lt;/p&gt;
&lt;p&gt;The second one is &lt;a href="http://www.dailymotion.com/video/xcv6dv_pixels-by-patrick-jean_creation"&gt;Pixels by Patrick
Jean&lt;/a&gt;
(via &lt;a href="http://wondermark.com/three-things-you-may-like/"&gt;Wondermark&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
[dailymotion id=video/xcv6dv]

&lt;/center&gt;
[&lt;span class="caps"&gt;MC&lt;/span&gt; Frontalot](http://frontalot.com/) released his newest album Zero Day
(via the [Veracode
blog](http://www.veracode.com/blog/2010/04/mc-frontalot-releases-zero-day/)):

&lt;p&gt;
&lt;center&gt;
http://www.youtube-nocookie.com/v/5cBM4DdoC2A&amp;hl=en\_US&amp;fs=1&amp;rel=0&amp;color1=0x234900&amp;color2=0x4e9e00

&lt;/center&gt;
&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 09 Apr 2010 17:26:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-04-09:2010/04/funny-things-i-found-while-browsing-web.html</guid><category>funny</category><category>links</category></item><item><title>Updated YARPG</title><link>https://www.grey-panther.net/2010/04/updated-yarpg.html</link><description>&lt;p&gt;&lt;img alt="3273756192_6008cde373_b" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/S78ZSy3nSpI/AAAAAAAACPQ/bqrf4VZA3h4/3273756192_6008cde373_b5.jpg?imgmax=800" title="3273756192_6008cde373_b" /&gt;
This has been sitting in my queue for some time: almost four years ago
(it’s incredible how time flies!) – amongst the first posts I’ve
published on the blog – I’ve written &lt;a href="http://hype-free.blogspot.com/2006/10/javascript-password-generator.html"&gt;a random password generator in
Javascript&lt;/a&gt;
which I’ve named &lt;span class="caps"&gt;YARPG&lt;/span&gt; (for “Yet Another Random Password Generator”).
The advantages to using it are the same as they were back&amp;nbsp;then:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Customizable (password length, types of characters included,&amp;nbsp;etc)&lt;/li&gt;
&lt;li&gt;Secure (it doesn’t communicate over the network, hence no need for
    &lt;span class="caps"&gt;SSL&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;Fully reviewable (as opposed to server-based solutions, where you
    have to trust the&amp;nbsp;server)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The only flaw it had (as pointed out by a commenter) was the fact that
passwords didn’t always include all the characters you’ve selected (ie.
the checkboxes represented “possible” not “mandatory” characters, which
was a little&amp;nbsp;counter-intuitive).&lt;/p&gt;
&lt;p&gt;I’ve thought about how to create passwords which included at least one
character from each set. My first ideas were around generating a
password, then checking that it contained at least one character from
each set and if not, replacing some of the characters with ones from the
missing set. However this train of thought quickly ran into problems
when I had to decide which character to replace. Choosing something
fixed (like the first one, last one, etc) is too predictable. If I
choose a random one, I run the risk of overwriting previous change. So
finally I realized that there is a simple solution: just re-generate the
password until it satisfies all of the constraints. Although this might
seem like a brute-force solution, in practice its speed is
indistinguishable from a constant-time&amp;nbsp;solution.&lt;/p&gt;
&lt;p&gt;Below you have the new and improved &lt;span class="caps"&gt;YARPG&lt;/span&gt;:&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--&lt;br /&gt;
div.password_generator_noscript {&lt;br /&gt;
 background-color: #ff7997;&lt;br /&gt;
 border: thin dashed;&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;div#generated_password {&lt;br /&gt;
 font-family: monospace;&lt;br /&gt;
 font-weight: bold;&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;div#password_generator_div input {&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;div#password_generator_div label {&lt;br /&gt;
 width: 10em;&lt;br /&gt;
}&lt;br /&gt;
--&gt;&lt;/style&gt;

&lt;noscript&gt;
&lt;/noscript&gt;

&lt;table id="password_generator_div" summary="random password generator with javascript"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;label for="password_length"&gt;Password length:&lt;/label&gt;

&lt;/td&gt;
&lt;td&gt;
&lt;input id="password_length" size="size" name="password_length"&gt;&lt;/input&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;label for="password_include_letters"&gt;Include letters&lt;/label&gt;

&lt;/td&gt;
&lt;td&gt;
&lt;input id="password_include_letters" checked="checked" type="checkbox" name="password_include_letters"&gt;&lt;/input&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;label for="password_include_mixed_case"&gt;Include mixed case&lt;/label&gt;

&lt;/td&gt;
&lt;td&gt;
&lt;input id="password_include_mixed_case" checked="checked" type="checkbox" name="password_include_mixed_case"&gt;&lt;/input&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;label for="password_include_numbers"&gt;Include numbers&lt;/label&gt;

&lt;/td&gt;
&lt;td&gt;
&lt;input id="password_include_numbers" checked="checked" type="checkbox" name="password_include_numbers"&gt;&lt;/input&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;label for="password_include_punctuation"&gt;Include punctuation&lt;/label&gt;

&lt;/td&gt;
&lt;td&gt;
&lt;input id="password_include_punctuation" type="checkbox" name="password_include_punctuation"&gt;&lt;/input&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;label for="password_include_all_printable"&gt;Include all printable
characters&lt;/label&gt;

&lt;/td&gt;
&lt;td&gt;
&lt;input id="password_include_all_printable" type="checkbox" name="password_include_all_printable"&gt;&lt;/input&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;label for="password_quantity"&gt;Quantity&lt;/label&gt;

&lt;/td&gt;
&lt;td&gt;
&lt;select id="password_quantity" name="password_quantity"&gt;
&lt;option value="1"&gt;1&lt;/option&gt; &lt;option value="2"&gt;2&lt;/option&gt;
&lt;option value="3"&gt;3&lt;/option&gt; &lt;option value="4"&gt;4&lt;/option&gt;
&lt;option value="5"&gt;5&lt;/option&gt; &lt;option value="6"&gt;6&lt;/option&gt;
&lt;option value="7"&gt;7&lt;/option&gt; &lt;option value="8"&gt;8&lt;/option&gt;
&lt;option value="9"&gt;9&lt;/option&gt; &lt;option value="10"&gt;10&lt;/option&gt;
&lt;option value="11"&gt;11&lt;/option&gt; &lt;option value="12"&gt;12&lt;/option&gt;
&lt;option value="13"&gt;13&lt;/option&gt; &lt;option value="14"&gt;14&lt;/option&gt;
&lt;option value="15"&gt;15&lt;/option&gt; &lt;option value="16"&gt;16&lt;/option&gt;
&lt;option value="17"&gt;17&lt;/option&gt; &lt;option value="18"&gt;18&lt;/option&gt;
&lt;option value="19"&gt;19&lt;/option&gt; &lt;option value="20"&gt;20&lt;/option&gt;
&lt;option value="21"&gt;21&lt;/option&gt; &lt;option value="22"&gt;22&lt;/option&gt;
&lt;option value="23"&gt;23&lt;/option&gt; &lt;option value="24"&gt;24&lt;/option&gt;
&lt;option value="25"&gt;25&lt;/option&gt; &lt;option value="26"&gt;26&lt;/option&gt;
&lt;option value="27"&gt;27&lt;/option&gt; &lt;option value="28"&gt;28&lt;/option&gt;
&lt;option value="29"&gt;29&lt;/option&gt; &lt;option value="30"&gt;30&lt;/option&gt;
&lt;option value="31"&gt;31&lt;/option&gt; &lt;option value="32"&gt;32&lt;/option&gt;
&lt;option value="33"&gt;33&lt;/option&gt; &lt;option value="34"&gt;34&lt;/option&gt;
&lt;option value="35"&gt;35&lt;/option&gt; &lt;option value="36"&gt;36&lt;/option&gt;
&lt;option value="37"&gt;37&lt;/option&gt; &lt;option value="38"&gt;38&lt;/option&gt;
&lt;option value="39"&gt;39&lt;/option&gt; &lt;option value="40"&gt;40&lt;/option&gt;
&lt;option value="41"&gt;41&lt;/option&gt; &lt;option value="42"&gt;42&lt;/option&gt;
&lt;option value="43"&gt;43&lt;/option&gt; &lt;option value="44"&gt;44&lt;/option&gt;
&lt;option value="45"&gt;45&lt;/option&gt; &lt;option value="46"&gt;46&lt;/option&gt;
&lt;option value="47"&gt;47&lt;/option&gt; &lt;option value="48"&gt;48&lt;/option&gt;
&lt;option value="49"&gt;49&lt;/option&gt; &lt;option value="50"&gt;50&lt;/option&gt;
&lt;option value="51"&gt;51&lt;/option&gt; &lt;option value="52"&gt;52&lt;/option&gt;
&lt;option value="53"&gt;53&lt;/option&gt; &lt;option value="54"&gt;54&lt;/option&gt;
&lt;option value="55"&gt;55&lt;/option&gt; &lt;option value="56"&gt;56&lt;/option&gt;
&lt;option value="57"&gt;57&lt;/option&gt; &lt;option value="58"&gt;58&lt;/option&gt;
&lt;option value="59"&gt;59&lt;/option&gt; &lt;option value="60"&gt;60&lt;/option&gt;
&lt;option value="61"&gt;61&lt;/option&gt; &lt;option value="62"&gt;62&lt;/option&gt;
&lt;option value="63"&gt;63&lt;/option&gt; &lt;option value="64"&gt;64&lt;/option&gt; &lt;/select&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="2"&gt;
&lt;button id="generate_password_button"&gt;
Generate

&lt;/button&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="2"&gt;
&lt;div id="generated_password"&gt;

&lt;/div&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
&lt;script language="JavaScript" type="text/javascript"&gt;&lt;!--&lt;br /&gt;
var yajrpg = {&lt;br /&gt;
    //puts each character from the string str in arr and returns a new array&lt;br /&gt;
    PushArray : function (arr, str) {&lt;br /&gt;
        var a = [];&lt;br /&gt;
        for (var i = 0; i &lt; str.length; i++)&lt;br /&gt;
            a[a.length] = str.charAt(i);&lt;br /&gt;
        arr[arr.length] = a;&lt;br /&gt;
        return arr;&lt;br /&gt;&amp;nbsp;},&lt;/p&gt;

&lt;p&gt;addEvent : function (obj, evType, fn) {&lt;br /&gt;
        //taken from: http://www.scottandrew.com/weblog/articles/cbs-events&lt;br /&gt;
        if (obj.addEventListener){&lt;br /&gt;
            obj.addEventListener(evType, fn, false);&lt;br /&gt;
            return true;&lt;br /&gt;
        } else if (obj.attachEvent){&lt;br /&gt;
            var r = obj.attachEvent("on"+evType, fn);&lt;br /&gt;
            return r;&lt;br /&gt;
        } else {&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;&amp;nbsp;},&lt;/p&gt;

&lt;p&gt;CheckAllPrintable : function () {&lt;br /&gt;
        if (!yajrpg.inited)&amp;nbsp;return;&lt;/p&gt;

&lt;p&gt;yajrpg.pass_letters.disabled = yajrpg.pass_printable.checked;&lt;br /&gt;
        yajrpg.pass_uppercase.disabled = yajrpg.pass_printable.checked;&lt;br /&gt;
        yajrpg.pass_numbers.disabled = yajrpg.pass_printable.checked;&lt;br /&gt;
        yajrpg.pass_punctuation.disabled = yajrpg.pass_printable.checked;&lt;br /&gt;&amp;nbsp;},&lt;/p&gt;

&lt;p&gt;GenerateRandomPasswords : function () {&lt;br /&gt;
        if (!yajrpg.inited)&amp;nbsp;return;&lt;/p&gt;

&lt;p&gt;var pass_length = parseInt(yajrpg.pass_length.value);&lt;br /&gt;
        if (pass_length &lt; 1 || pass_length &gt; 256) return&amp;nbsp;false;&lt;/p&gt;

&lt;p&gt;var needed_charsets = [];&lt;br /&gt;
        if (yajrpg.pass_printable.checked) {&lt;br /&gt;
            var print_chars = [];&lt;br /&gt;
            for (var i = 32; i &lt; 127; i++)&lt;br /&gt;
                print_chars[print_chars.length] = String.fromCharCode(i);&lt;br /&gt;
            needed_charsets[0] = print_chars;&lt;br /&gt;
        } else {&lt;br /&gt;
            if (yajrpg.pass_letters.checked) yajrpg.PushArray(needed_charsets, "qwertyuiopasdfghjklzxcvbnm");&lt;br /&gt;
            if (yajrpg.pass_uppercase.checked) yajrpg.PushArray(needed_charsets, "QWERTYUIOPASDFGHJKLZXCVBNM");&lt;br /&gt;
            if (yajrpg.pass_numbers.checked) yajrpg.PushArray(needed_charsets, "0123456789");&lt;br /&gt;
            if (yajrpg.pass_punctuation.checked) yajrpg.PushArray(needed_charsets, ":;,.?!");&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;

&lt;p&gt;if (0 == needed_charsets.length) return&amp;nbsp;false;&lt;/p&gt;

&lt;p&gt;var pass_quantity =&amp;nbsp;parseInt(yajrpg.pass_quantity.options[yajrpg.pass_quantity.selectedIndex].value);&lt;/p&gt;

&lt;p&gt;if (pass_length &lt; needed_charsets.length) pass_length =&amp;nbsp;needed_charsets.length;&lt;/p&gt;

&lt;p&gt;var result = "";&lt;br /&gt;
        for (var i = 0; i &lt; pass_quantity; i++) {&lt;br /&gt;
            var p;&lt;br /&gt;
            while (true) {&lt;br /&gt;
                p = [];&lt;br /&gt;
                var used_charsets = [];&lt;br /&gt;
                for (var j = 0; j &lt; needed_charsets.length; ++j) used_charsets[j] =&amp;nbsp;false;&lt;/p&gt;

&lt;p&gt;for (var j = 0; j &lt; pass_length; ++j) {&lt;br /&gt;
                    var k = Math.floor(Math.random()*needed_charsets.length);&lt;br /&gt;
                    var available_chars = needed_charsets[k];&lt;br /&gt;
                    p[j] = available_chars[Math.floor(Math.random()*available_chars.length)];&lt;br /&gt;
                    used_charsets[k] = true;&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;

&lt;p&gt;var all_charsets_used = true;&lt;br /&gt;
                for (var j = 0; j &lt; needed_charsets.length; ++j) all_charsets_used = all_charsets_used &amp;&amp; used_charsets[j];&lt;br /&gt;
                if (all_charsets_used) break;&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;

&lt;p&gt;for (var j = 0; j &lt; pass_length; j++) {&lt;br /&gt;
                var ch = p[j];&lt;br /&gt;
                if ("&lt;" == ch) ch = "&lt;";&lt;br /&gt;
                if ("&gt;" == ch) ch = "&gt;";&lt;br /&gt;
                result += ch;&lt;br /&gt;
            }&lt;br /&gt;
            result += '&lt;br  /&gt;';&lt;br /&gt;
        }&lt;br /&gt;
        yajrpg.gen_pass_div.innerHTML =&amp;nbsp;result;&lt;/p&gt;

&lt;p&gt;return false;&lt;br /&gt;&amp;nbsp;},&lt;/p&gt;

&lt;p&gt;CheckPasswordLength : function () {&lt;br /&gt;
        if (!yajrpg.inited)&amp;nbsp;return;&lt;/p&gt;

&lt;p&gt;var pass_length = parseInt(yajrpg.pass_length.value);&lt;br /&gt;
        if ((pass_length &lt; 1) || (pass_length &gt; 256))&lt;br /&gt;
            yajrpg.pass_length.style.backgroundColor = 'red';&lt;br /&gt;
        else&lt;br /&gt;
            yajrpg.pass_length.style.backgroundColor = '';&lt;br /&gt;&amp;nbsp;},&lt;/p&gt;

&lt;p&gt;initAfterLoad : function () {&lt;br /&gt;
        //get the elements from the document&lt;br /&gt;
        yajrpg.pass_letters = document.getElementById('password_include_letters');&lt;br /&gt;
        yajrpg.pass_uppercase = document.getElementById('password_include_mixed_case');&lt;br /&gt;
        yajrpg.pass_numbers = document.getElementById('password_include_numbers');&lt;br /&gt;
        yajrpg.pass_punctuation = document.getElementById('password_include_punctuation');&lt;br /&gt;
        yajrpg.pass_printable = document.getElementById('password_include_all_printable');&lt;br /&gt;
        yajrpg.pass_length = document.getElementById('password_length');&lt;br /&gt;
        yajrpg.gen_pass_div = document.getElementById('generated_password');&lt;br /&gt;
        yajrpg.pass_quantity = document.getElementById('password_quantity');&lt;br /&gt;
        yajrpg.gen_pass_button =&amp;nbsp;document.getElementById('generate_password_button');&lt;/p&gt;

&lt;p&gt;//check that we have all the elements&lt;br /&gt;
        if (null == yajrpg.pass_letters || null == yajrpg.pass_uppercase || null == yajrpg.pass_numbers ||&lt;br /&gt;
            null == yajrpg.pass_punctuation || null == yajrpg.pass_printable || null == yajrpg.pass_length ||&lt;br /&gt;
            null == yajrpg.gen_pass_div || null == yajrpg.pass_quantity || null == yajrpg.gen_pass_button)&amp;nbsp;return;&lt;/p&gt;

&lt;p&gt;//fill up the select&lt;br /&gt;
        for (var i = 1; i &lt;= 64; i++)&lt;br /&gt;
            yajrpg.pass_quantity.options[yajrpg.pass_quantity.options.length] = new Option(i,&amp;nbsp;i);&lt;/p&gt;

&lt;p&gt;//attach event handlers&lt;br /&gt;
        if (!yajrpg.addEvent(yajrpg.gen_pass_button, 'click', yajrpg.GenerateRandomPasswords)) return;&lt;br /&gt;
        if (!yajrpg.addEvent(yajrpg.pass_length, 'change', yajrpg.CheckPasswordLength)) return;&lt;br /&gt;
        if (!yajrpg.addEvent(yajrpg.pass_printable, 'click', yajrpg.CheckAllPrintable))&amp;nbsp;return;&lt;/p&gt;

&lt;p&gt;//display the form&lt;br /&gt;
        var pass_generator = document.getElementById('password_generator_div');&lt;br /&gt;
        if (null != pass_generator) pass_generator.style.display = ''; else&amp;nbsp;return;&lt;/p&gt;

&lt;p&gt;//everything has been initialized&lt;br /&gt;
        yajrpg.inited = true;&lt;br /&gt;&amp;nbsp;},&lt;/p&gt;

&lt;p&gt;//this initializes the object.&lt;br /&gt;
    init : function () {&lt;br /&gt;
        //postpone the final initialization after until the whole document has loaded&lt;br /&gt;
        this.addEvent(window, 'load', this.initAfterLoad);&lt;br /&gt;
        return this;&lt;br /&gt;
    }&lt;br /&gt;
}.init();&lt;br /&gt;
//--&gt;&lt;/script&gt;
I&amp;#8217;ve also updated the [original
posting](http://hype-free.blogspot.com/2006/10/javascript-password-generator.html).
You can get the source code for it by looking at the source of this
webpage, or from my &lt;span class="caps"&gt;SVN&lt;/span&gt; repository:
[js\_password\_generator.html](http://code.google.com/p/hype-free/source/browse/trunk/js_password_generator.html).
Hopefully you find it useful!

*Picture taken from [cjc4454&amp;#8217;s
photostream](http://www.flickr.com/photos/cjc4454/) with&amp;nbsp;permission.*</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 09 Apr 2010 15:10:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-04-09:2010/04/updated-yarpg.html</guid><category>security</category><category>programming</category><category>passwords</category><category>javascript</category></item><item><title>Sending an X-Face email with Perl+GMail</title><link>https://www.grey-panther.net/2010/04/sending-x-face-email-with-perlgmail.html</link><description>&lt;p&gt;In the &lt;a href="http://www.softwarefreedom.org/podcast/2010/mar/30/0x24/"&gt;latest Software Freedom Law
Show&lt;/a&gt; Bradley
mentioned the &lt;a href="http://en.wikipedia.org/wiki/X-Face"&gt;X-Face&lt;/a&gt; email header
and challenged listeners to send them an email containing the X-Face
header. So here is the small Perl script I’ve whipped together to send
them an email trough&amp;nbsp;GMail:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Net::SMTP::&lt;/span&gt;&lt;span class="n"&gt;TLS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$from&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;...@gmail.com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;MySuperSecretPassword&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$mailer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nn"&gt;Net::SMTP::&lt;/span&gt;&lt;span class="n"&gt;TLS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s"&gt;&amp;#39;smtp.gmail.com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;Hello&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;smtp.gmail.com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;Port&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;587&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$from&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;Password&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$mailer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$from&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$mailer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;foo@example.com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;;&lt;/span&gt;
&lt;span class="s"&gt;X-Face: &amp;quot;8.]Z_3ptu\NK&amp;#39;CA~DM&amp;gt;M,G.T(h=1.y9&amp;quot;0gXW3V91E:dw2?|&amp;amp;G2R(?/no&amp;#39;F2g4%8Fv.&lt;/span&gt;
&lt;span class="s"&gt; J1p5K-^1epKXxIG)mj4}nGWTi&amp;lt;=iz8n)bUVhLu}MXRFl9&amp;quot;J%&amp;#39;=-;IfMXcuPK&amp;gt;-%^;$uW87O/B&lt;/span&gt;
&lt;span class="s"&gt;Subject: Hello X-Faced World!&lt;/span&gt;

&lt;span class="s"&gt;email body.&lt;/span&gt;
&lt;span class="s"&gt;EOF&lt;/span&gt;

&lt;span class="nv"&gt;$mailer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$mailer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;datasend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$mailer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;dataend&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$mailer&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;quit&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The code is largely based on this snippet: &lt;a href="http://www.nixtutor.com/linux/sending-mail-through-gmail-with-perl/"&gt;Sending Mail Through Gmail
with
Perl&lt;/a&gt;.
The X-Face header was generated using the &lt;a href="http://www.dairiki.org/xface/xface.php"&gt;Online X-Face
Converter&lt;/a&gt; (yes, I know that
there is a
&lt;a href="http://search.cpan.org/~cwrl/Image-XFace-0.1/XFace.pm"&gt;Image::XFace&lt;/a&gt;
module, but it was very cryptic – it didn’t mention supported input /
output formats). One word of warning: if you are using ActivePerl under
Windows, Net::&lt;span class="caps"&gt;SMTP&lt;/span&gt;::&lt;span class="caps"&gt;TLS&lt;/span&gt; isn’t available in the default module list
(&lt;span class="caps"&gt;AFAIK&lt;/span&gt;, because of encryption restrictions), so you might need to
experiment with &lt;a href="http://hype-free.blogspot.com/2006/12/perl-and-windows.html"&gt;alternative package
sources&lt;/a&gt; or
using Linux :-). I’ve also tested the script with an email account I
control (using Thunderbird with the
&lt;a href="http://mnenhy.mozdev.org/customheaders.html"&gt;Mnenhy&lt;/a&gt; plugin – which can
read but not create X-Face emails) and it worked&amp;nbsp;nicely.&lt;/p&gt;
&lt;p&gt;There you have it: how to use an old (from the 1980s according to
Wikipedia) method for embedding pictures which is not supported by most
of the email clients&amp;nbsp;:-)&lt;/p&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 02 Apr 2010 16:17:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-04-02:2010/04/sending-x-face-email-with-perlgmail.html</guid><category>email</category><category>programming</category><category>perl</category><category>google</category></item><item><title>Performance optimization techniques for Java code</title><link>https://www.grey-panther.net/2010/03/performance-optimization-techniques-for.html</link><description>&lt;p&gt;Yesterday I gave a presentation at the &lt;a href="http://groups.google.com/group/transylvania-jug"&gt;Transylvania
&lt;span class="caps"&gt;JUG&lt;/span&gt;&lt;/a&gt; about using
profilers and different techniques which you can use to work around the
discovered performance problems. Below you can find the embedded&amp;nbsp;presentation.&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
&lt;div id="__ss_3561291" style="width: 425px"&gt;

**http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=java-perf-201003-100326052203-phpapp02&amp;rel=0&amp;stripped\_title=performance-optimization-techniques-for-java-code**
&lt;/p&gt;

&lt;/div&gt;

&lt;p&gt;
&lt;/center&gt;
If you are interested in the code samples (as you most probably are,
since a big part of the presentation were demos), you can find them in
[my Google Code &lt;span class="caps"&gt;SVN&lt;/span&gt;
repository](http://code.google.com/p/hype-free/source/browse/#svn/trunk/java-perfopt-201003).
Feel free to contact me if you have questions about the slides or about
something else in&amp;nbsp;general.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 26 Mar 2010 13:56:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-26:2010/03/performance-optimization-techniques-for.html</guid><category>programming</category><category>java</category></item><item><title>Solving mathematical puzzles with brute-force and Perl</title><link>https://www.grey-panther.net/2010/03/solving-mathematical-puzzles-with-brute.html</link><description>&lt;p&gt;After talking a lot about optimizations and selecting the right
algorithm, here is a little brute-force code. This particular one gives
the answer to the &lt;a href="http://richardwiseman.wordpress.com/2010/02/26/its-the-friday-puzzle-48/"&gt;following
puzzle&lt;/a&gt;
from &lt;a href="http://richardwiseman.wordpress.com/"&gt;Richard Wiseman&amp;#8217;s Blog&lt;/a&gt; (one
well worth following &lt;span class="caps"&gt;BTW&lt;/span&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Can you make the number 24 with the number 5, 5, 5, and 1 (again, you
cannot join the numbers together, have to use each number once and
only once, and are only allowed to add, subtract, multiply or divide&amp;nbsp;them)?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And here is my brute-force&amp;nbsp;solution:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;permute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="nf"&gt;permute&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$partial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$numbers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$solution&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;@_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;scalar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;@$numbers&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;@$solution&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nv"&gt;$partial&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$num&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;@$numbers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$mynums&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$skipped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$mynum&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;@$numbers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$num&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nv"&gt;$mynum&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nv"&gt;$skipped&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nv"&gt;$skipped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nb"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;@$mynums&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$mynum&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$op&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sx"&gt;qw(- + * /)&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$mypart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;$partial $op $num&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$mysol&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;@$solution&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$op&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$num&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="n"&gt;permute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$mypart&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$mynums&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$mysol&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;  
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The output is not very elegant and contains a decent amount of garbage
(because it considers that we have a hidden zero at the start – ie.
0*5&amp;#8230;) and also a lot of repetition (because it doesn’t take into
account that &lt;em&gt;5&lt;/em&gt; 5 5 1 is the same as 5 &lt;em&gt;5&lt;/em&gt; 5 1 with the first two
numbers interchanged), but in the end it gives the correct&amp;nbsp;answer:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;... fake answers because it starts with 0 ...
*5+5*5-1
*5+5*5-1
/5+5*5-1
/5+5*5-1
*5+5*5-1
*5+5*5-1
/5+5*5-1
/5+5*5-1
*5+5*5-1
*5+5*5-1
/5+5*5-1
/5+5*5-1
... duplicate answers because of the order ...
-1/5+5*5
-1/5+5*5
-1/5+5*5
-1/5+5*5
-1/5+5*5
-1/5+5*5
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Also the correct interpretation of the output is to consider that each
operation has a pair of parentheses around them and not reading it
according to the usual mathematical rules. Having this in mind the
solution&amp;nbsp;becomes:&lt;/p&gt;
&lt;p&gt;((-1/5)+5)*5 = 4.8 * 5 =&amp;nbsp;24&lt;/p&gt;
&lt;p&gt;Brute-force &lt;span class="caps"&gt;FTW&lt;/span&gt;&amp;nbsp;:-)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 26 Mar 2010 11:47:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-26:2010/03/solving-mathematical-puzzles-with-brute.html</guid><category>programming</category><category>perl</category><category>mathematics</category></item><item><title>RHUB review</title><link>https://www.grey-panther.net/2010/03/rhub-review.html</link><description>&lt;p&gt;&lt;span class="caps"&gt;RHUB&lt;/span&gt; is a company which offers “&lt;a href="http://www.rhubcom.com/v4/web_conferencing/screen_recording.html"&gt;meeting
recording&lt;/a&gt;,
Web Conference, Remote Access, Webinar software Delivered in
Appliances”. It is an interesting model, especially given that there are
a lot “software only” solutions in this space (GoTo meeting for example,
just to name the biggest of them). They tout the simplicity of the
product, especially that you don’t need any software installed to attend
a meeting (~~I assume that it works using some kind of browser plugin –
Flash or Java – and technically you do need that to be installed~~)
&lt;em&gt;Update&lt;/em&gt;: the folks from &lt;span class="caps"&gt;RHUB&lt;/span&gt; commented below and they pointed me
towards their demo page. They seem to have a nice fallback mechanism,
where by the main method involves Flash, but if it isn’t available, it
falls back to Javascript + static images (although I assume that you
loose most of the features, including voice, in that version). Very&amp;nbsp;nice.&lt;/p&gt;
&lt;p&gt;Simplicity would be a welcome addition to this area, since too many
times have I seen “virtual” conferences spending tens of minutes on
setting up the meeting (and it is quite&amp;nbsp;frustrating).&lt;/p&gt;
&lt;p&gt;For pricing they use the same model as the software-only solutions,
namely a per-user license. If we compare the prices, you will conclude
that the cheapest unit is equivalent to one and half years of
GoToMeeting subscriptions, which is acceptable. I see this being a good
solution for larger virtual training events (universities for example),
however the value for smaller shops is not that clear. ~~I worry that
using a physical device means that your entire staff looses connectivity
when/if the device goes down (because of a power / &lt;span class="caps"&gt;ISP&lt;/span&gt; outage). If your
workforce is distributed around the globe (or even in one country),
“cloud” service could route around the problem for the people who still
have Internet access.~~ &lt;em&gt;Update&lt;/em&gt;: (again, from the comment below): the
company seems to have a fallback solution for such outages, where by
they offer services using their (hosted) equipment during outages, free
of&amp;nbsp;charge.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 25 Mar 2010 17:24:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-25:2010/03/rhub-review.html</guid><category>reviewme</category><category>review</category></item><item><title>String.intern() – there are better ways</title><link>https://www.grey-panther.net/2010/03/stringintern-there-are-better-ways.html</link><description>&lt;p&gt;&lt;img alt="4349787041_f31a40baf4_o" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/S6dOwBNgXlI/AAAAAAAACPI/FTPGYo1Pepk/4349787041_f31a40baf4_o%5B2%5D.jpg?imgmax=800" title="4349787041_f31a40baf4_o" /&gt;
I don’t want to write a “considered harmful” article (because &lt;a href="http://meyerweb.com/eric/comment/chech.html"&gt;they are
harmful&lt;/a&gt;), but after
experimenting with different solutions I do have a strong opinion that
there almost no reason to use String.intern() in Java. But let us
proceed&amp;nbsp;step-by-step.&lt;/p&gt;
&lt;p&gt;First of all, what does String.intern() do? Go read the
&lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/String.html#intern%28%29"&gt;Javadoc&lt;/a&gt;
for it and also take a look at &lt;a href="http://en.wikipedia.org/wiki/String_interning"&gt;String
interning&lt;/a&gt; of Wikipedia.
The essence of it is that if you have two strings &lt;code&gt;s1&lt;/code&gt; and &lt;code&gt;s2&lt;/code&gt; such
that &lt;code&gt;s1.equals(s2)&lt;/code&gt;, there will be only one copy of the string stored
if they are interned. From this definition follow the two usecases for
string&amp;nbsp;interning:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You read a lot of repetitive strings from an external source (a flat
    file or &lt;span class="caps"&gt;DB&lt;/span&gt; for example) and you need to keep them all in memory. In
    this case interning the strings has the potential to save you a lot
    of&amp;nbsp;memory.&lt;/li&gt;
&lt;li&gt;You’ve determined (by &lt;a href="http://hype-free.blogspot.com/2009/07/profile-first.html"&gt;profiling your
    application&lt;/a&gt;!)
    that &lt;code&gt;String.equals&lt;/code&gt; is a hotspot for your application and you would
    like to replace those calls with the &lt;code&gt;==&lt;/code&gt; operator.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you have different reasons for looking at String.intern(), you should
think twice about them before going down the route. If you’ve thought
about long and hard, and you still think that String.intern is the best
solution for you, but not for any reason mentioned above, please leave
me a comment! (Also, read the rest of this post, since it might give you
a better&amp;nbsp;alternative).&lt;/p&gt;
&lt;p&gt;So, having the above usecases in mind, what is the problem with calling&amp;nbsp;String.intern?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It is quite &lt;span class="caps"&gt;CPU&lt;/span&gt; intensive. Calling &lt;code&gt;new String("foo").intern()&lt;/code&gt; can
    be an order of magnitude (10x to 15x based on some of my
    measurements) slower than &lt;code&gt;new String("foo")&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You have to remember to do it everywhere. This isn’t so fatal if
    you’re just aiming for reduced memory consumption, but if you forget
    to call “intern” somewhere and later use the “==” operator for
    comparing elements, you can create some hard to track down&amp;nbsp;bugs.&lt;/li&gt;
&lt;li&gt;It can result in mysterious “OutOfMemory” exceptions. In the &lt;span class="caps"&gt;SUN&lt;/span&gt; &lt;span class="caps"&gt;JVM&lt;/span&gt;
    (which is the most widely used one) “internalized” String’s are
    stored in a special memory location called “PermGen”. The size of
    this isn’t influenced by the usual “-Xmx1024M” command line option,
    you have to remember (and to know about it in the first place!) to
    use the “-&lt;span class="caps"&gt;XX&lt;/span&gt;:MaxPermSize=512m” command&amp;nbsp;line.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These are some very serious problems. What are the alternatives? The
easiest one is not to use String.intern. Ok, lets say that you’ve
&lt;em&gt;performed measurements&lt;/em&gt; with &lt;em&gt;relevant, production data&lt;/em&gt; and came to
the conclusions that your problems need to resolved using this method.
My recommendation would be the&amp;nbsp;following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use a WeakHashMap to create a pool of Strings as describe &lt;a href="http://www.codeinstructions.com/2008/09/instance-pools-with-weakhashmap.html"&gt;in this
    blog
    post&lt;/a&gt;.
    This has the advantage that your cache won’t end up keeping the
    objects in memory after all the references to it have disappeared.
    Don’t forget to synchronize access to it if you’re planning on using
    it from multiple&amp;nbsp;threads!&lt;/li&gt;
&lt;li&gt;Always use String.equals, never “==”. If you take a peek at
    java.lang.String.equals, you will see that the first check that it
    does is “==”. By never using “==” explicitly you still will have
    most of the speed benefits, while eliminating the risk that you
    accidentally get a “rogue” String from somewhere and your code
    fails, even though the two strings are&amp;nbsp;equal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The advantages of the above solution&amp;nbsp;are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is 30% to 50% faster than String.intern (although it is still
    slower than &lt;em&gt;not&lt;/em&gt; calling String.intern. You should also watch out
    that it doesn’t become a chocking point in your application because
    of the synchronization if you are calling it from multiple&amp;nbsp;threads).&lt;/li&gt;
&lt;li&gt;It is safe (as mentioned above, forgetting to “make unique” some of
    the String’s doesn’t make your logic&amp;nbsp;fail)&lt;/li&gt;
&lt;li&gt;It doesn’t require special configuration on the &lt;span class="caps"&gt;JVM&lt;/span&gt; (like adjusting
    the PermGen&amp;nbsp;size)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I will post some example code later this week when I’ll post the slides
for a presentation I’ll be giving to the local &lt;span class="caps"&gt;JUG&lt;/span&gt;, so be sure to keep
an eye on &lt;a href="http://hype-free.blogspot.com/"&gt;my blog&lt;/a&gt; and &lt;a href="http://code.google.com/p/hype-free/source/browse/#svn/trunk"&gt;my code
repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some resources on the&amp;nbsp;topic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeinstructions.com/2009/01/busting-javalangstringintern-myths.html"&gt;Busting java.lang.String.intern()&amp;nbsp;Myths&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mindprod.com/jgloss/interned.html"&gt;interned Strings : Java
    Glossary&lt;/a&gt; (small trivia:
    substrings keep a reference to the original String, so if you’re
    keeping small parts of long String’s, you will be consuming much
    more memory than you might have&amp;nbsp;anticipated)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://kohlerm.blogspot.com/2009/01/is-javalangstringintern-really-evil.html"&gt;Is java.lang.String.intern() really&amp;nbsp;evil?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/markdrago/"&gt;Mark Drago&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 22 Mar 2010 13:04:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-22:2010/03/stringintern-there-are-better-ways.html</guid><category>programming</category><category>java</category></item><item><title>alreadyhosting.com review</title><link>https://www.grey-panther.net/2010/03/alreadyhostingcom-review.html</link><description>&lt;p&gt;There are many “web hosting review” sites out there and
alreadyhosting.com is one of them doing reviews for &lt;a href="http://www.alreadyhosting.com/dedicated-server-hosting.php"&gt;Dedicated Server
Hosting&lt;/a&gt;.
These sites usually get their revenue by using affiliate links in their
lists, and this particular one is no different. In general such lists
are a good starting point, but you should always be cautious when
choosing a hosting company this&amp;nbsp;way.&lt;/p&gt;
&lt;p&gt;What I would recommend when choosing a hosting company (or other
online-services company) to which you consider giving your&amp;nbsp;money:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;check if the company has accreditations from respectable review
    sources (if the company is based in the &lt;span class="caps"&gt;USA&lt;/span&gt;, look for the &lt;span class="caps"&gt;BSA&lt;/span&gt; for
    example). Always click trough to the review website and check the
    details, because some unscrupulous sites display the logos, even
    though they don’t have any actual&amp;nbsp;accreditations&lt;/li&gt;
&lt;li&gt;look up the domain name with &lt;a href="http://domaintools.com/"&gt;domaintools&lt;/a&gt;.
    See how long the domain has been registered (the longer, the
    better). See the address of the owner. If it is “privacy protected”,
    it should raise some red flags (while I admit that such services
    have value for individuals, I would be weary of doing business with
    companies unwilling to disclose their physical&amp;nbsp;location.&lt;/li&gt;
&lt;li&gt;Do a search for “company name scam”, “company name complaints” and
    other negative terms which come in mind. Do the same with their
    phone number. While you should be cautious in taking information
    found on the internet at face value, the prevalence of such articles
    should make you think&amp;nbsp;twice.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While adhering to these rules will not entirely eliminate the
possibility of you being scammed, it should reduce it considerably. I
also try to pre-filter any site I write a review about using the above&amp;nbsp;methods.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 22 Mar 2010 11:11:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-22:2010/03/alreadyhostingcom-review.html</guid><category>reviewme</category><category>review</category></item><item><title>eDirectHost review</title><link>https://www.grey-panther.net/2010/03/edirecthost-review.html</link><description>&lt;p&gt;eDirectHost is one of the many companies which offer websites for people
who don’t want to get bogged down in technical details. The particular
niche eDirectHost focuses on is &lt;a href="http://www.edirecthost.com/main/ecommerce"&gt;ecommerce web
design&lt;/a&gt;. In particular, they
offer many features specific to such sites like: coupons, support for
different payment providers, etc. Two other positive aspects are that it
is &lt;span class="caps"&gt;BBB&lt;/span&gt; accredited (which should give you some confidence in the way they
conduct business) and their pricing is competitive with other solutions
like Yahoo!&amp;nbsp;Store.&lt;/p&gt;
&lt;p&gt;You are giving up some control when going with such solutions, no
question about it, so you should carefully evaluate the tradeoff. One
recommendation of mine would be to register the domain name separately
(ie. not trough them). This way you retain some amount of control and if
you have any problems with them, you can set up a site with an other
provider and redirect your domain&amp;nbsp;there.&lt;/p&gt;
&lt;p&gt;An other concern might be that they are billing you for services which
you could get otherwise for free (ie. website analytics, email, etc),
however they seem to be reasonable in this department also (the services
which you could get for free are included in all the&amp;nbsp;packages).&lt;/p&gt;
&lt;p&gt;Finally, you might wonder if the fact that the number of templates is
limited is a disadvantage. Most of the people however, when they are
shopping online, don’t mind it and are more concentrated on getting the
right product for the right price than how the site looks. The only time
looks influences their decision is when they estimate the credibility of
the site, and professionally designed templates certainly help&amp;nbsp;there.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 22 Mar 2010 10:33:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-22:2010/03/edirecthost-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Unshortifying Cisco “Go” links</title><link>https://www.grey-panther.net/2010/03/unshortifying-cisco-go-links.html</link><description>&lt;p&gt;Inspired by a post on the PacketLife.net blog - &lt;a href="http://packetlife.net/blog/2010/mar/6/cisco-go-links-reference-wiki/"&gt;Cisco &amp;#8220;Go&amp;#8221; links
reference in the
wiki&lt;/a&gt;
– I tried to mine the short links to come up with the “definitive” list,
but after running it for a couple of days, it only managed to find 473
links, compared to the 4720 &lt;a href="http://www.google.com/search?hl=en&amp;amp;q=site%3Acisco.com+inurl%3A%2Fgo%2F"&gt;Google
estimates&lt;/a&gt;
it has (&lt;a href="http://search.yahoo.com/search?p=site%3Acisco.com+inurl%3A%2Fgo%2F"&gt;Yahoo
estimates&lt;/a&gt;
4200, but it seems to include more non-relevant results – or maybe I
don’t know to use the search operators on it correctly :-P). Anyway, I
thought that the code might be useful for somebody doing other scraping
projects, so you can &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/cisco_unshortify_links.pl"&gt;find it in my Google Code &lt;span class="caps"&gt;SVN&lt;/span&gt;
repository&lt;/a&gt;.
It illustrates a couple of&amp;nbsp;techniques:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generating all the combinations from a given alphabet in a simple
    and fast&amp;nbsp;manner&lt;/li&gt;
&lt;li&gt;Using multi-threading to increase performance and reduce the time
    wasted by waiting for network&amp;nbsp;I/O.&lt;/li&gt;
&lt;li&gt;How to fetch gzip-ed content (any well-behaved spider should offer
    the site the option to do so to conserve their bandwidth) using
    &lt;span class="caps"&gt;LWP&lt;/span&gt;::UserAgent (I found it thanks to &lt;a href="http://stackoverflow.com/questions/1285305/how-can-i-accept-gzip-compressed-content-using-lwpuseragent"&gt;this StackOverflow
    question&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check it out if you have a similar&amp;nbsp;problem!&lt;/p&gt;
&lt;p&gt;Finally, below you have the list of links. A quick look reveals two
interesting observations: there are duplicates (multiple links pointing
to the same page) and some of the links point to non-Cisco&amp;nbsp;pages.&lt;/p&gt;
&lt;p&gt;http://cisco.com/go/f =&gt; &lt;a href="http://www.cisco.com/web/mobile/fed/"&gt;Redirect page - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/mobile/fed/)&lt;br /&gt;
http://cisco.com/go/m =&gt; &lt;a href="http://www.cisco.com/web/learning/le21/le34/MWC/2009/mobi/"&gt;Cisco Systems - Cisco Speaking Sessions at
Mobile World
Congress&lt;/a&gt;
(http://www.cisco.com/web/learning/le21/le34/&lt;span class="caps"&gt;MWC&lt;/span&gt;/2009/mobi/)&lt;br /&gt;
http://cisco.com/go/n =&gt; &lt;a href="http://www.cisco.com/web/mobile/nws/"&gt;Cisco Systems -
Innovators&lt;/a&gt;
(http://www.cisco.com/web/mobile/nws/)&lt;br /&gt;
http://cisco.com/go/s =&gt; &lt;a href="http://www.cisco.com/web/mobile/s/"&gt;Cisco Systems - Test Your Cisco
Smarts&lt;/a&gt;
(http://www.cisco.com/web/mobile/s/)&lt;br /&gt;
http://cisco.com/go/ea =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9675/index.html"&gt;Cisco Unified Expert Advisor - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9675/index.html)&lt;br /&gt;
http://cisco.com/go/sa =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9677/products_ios_technology_home.html"&gt;Cisco &lt;span class="caps"&gt;IOS&lt;/span&gt; Software Activation - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9677/products_ios_technology_home.html)&lt;br /&gt;
http://cisco.com/go/qb =&gt; &lt;a href="http://www.cisco.com/web/partners/quotebuilder"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/quotebuilder)&lt;br /&gt;
http://cisco.com/go/ac =&gt; &lt;a href="http://cisco-ac.arcsolutions.com"&gt;Cisco Systems - Unified Attendant Console
solutions&lt;/a&gt;
(http://cisco-ac.arcsolutions.com)&lt;br /&gt;
http://cisco.com/go/cc =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/custcosw/Products_Sub_Category_Home.html"&gt;Customer Contact - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/custcosw/Products_Sub_Category_Home.html)&lt;br /&gt;
http://cisco.com/go/bc =&gt; &lt;a href="http://www.saeurope.com/solutions/broadcasters.htm"&gt;&lt;span class="caps"&gt;SA&lt;/span&gt; Europe -
Broadcasters/Programmers&lt;/a&gt;
(http://www.saeurope.com/solutions/broadcasters.htm)&lt;br /&gt;
http://cisco.com/go/dc =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns340/ns394/ns224/index.html"&gt;Data Center - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns340/ns394/ns224/index.html)&lt;br /&gt;
http://cisco.com/go/pc =&gt; &lt;a href="http://www.cisco.com/web/offer/emea/positiveconnections/index.html"&gt;Positive Connections - Operational
Excellence through Connected Manufacturing, 19 May 2009, 9am-12pm &lt;span class="caps"&gt;GMT&lt;/span&gt;
Webcast&lt;/a&gt;
(http://www.cisco.com/web/offer/emea/positiveconnections/index.html)&lt;br /&gt;
http://cisco.com/go/uc =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/voicesw/index.html"&gt;Voice &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Unified Communications - Main Page -
Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/voicesw/index.html)&lt;br /&gt;
http://cisco.com/go/vc =&gt; &lt;a href="http://www.cisco.com/web/learning/le21/le34/voicecon/2010/index.html"&gt;VoiceCon 2010 - Cisco Events - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le21/le34/voicecon/2010/index.html)&lt;br /&gt;
http://cisco.com/go/id =&gt; &lt;a href="http://www.cisco.com/web/ID/index.html"&gt;Cisco Systems,
Inc&lt;/a&gt;
(http://www.cisco.com/web/&lt;span class="caps"&gt;ID&lt;/span&gt;/index.html)&lt;br /&gt;
http://cisco.com/go/ce =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns577/networking_solutions_solution.html"&gt;Carrier Ethernet - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns577/networking_solutions_solution.html)&lt;br /&gt;
http://cisco.com/go/ie =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6738/index.html"&gt;Cisco Catalyst 2955 Series Switches -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6738/index.html)&lt;br /&gt;
http://cisco.com/go/3g =&gt; &lt;a href="http://www.cisco.com/en/US/prod/routers/ps380/3g_solns.html"&gt;Cisco 3G Wireless Connectivity Solutions 
[Cisco 800 Series Routers] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/prod/routers/ps380/3g_solns.html)&lt;br /&gt;
http://cisco.com/go/ph =&gt; &lt;a href="http://www.cisco.com/web/partners/tools/helponline/index.html"&gt;Partner Helpline - Partner Central - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/tools/helponline/index.html)&lt;br /&gt;
http://cisco.com/go/dm =&gt; &lt;a href="http://www.cisco.com/commarch/cvs/dm"&gt;Order Direct From Cisco - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/commarch/cvs/dm)&lt;br /&gt;
http://cisco.com/go/sm =&gt; &lt;a href="http://www.cisco.com/humannetwork"&gt;Cisco Systems - Redirect
to&lt;/a&gt;
(http://www.cisco.com/humannetwork)&lt;br /&gt;
http://cisco.com/go/hn =&gt; &lt;a href="http://www.cisco.com/web/thehumannetwork/index1.html?POSITION=link&amp;amp;COUNTRY_SITE=us&amp;amp;CAMPAIGN=HN2&amp;amp;CREATIVE=HN2+to+HN1&amp;amp;REFERRING_SITE=CISCO%2ECOM+HN2+Microsite"&gt;The Human Network - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/web/thehumannetwork/index1.html?&lt;span class="caps"&gt;POSITION&lt;/span&gt;=link&amp;&lt;span class="caps"&gt;COUNTRY&lt;/span&gt;;_SITE=us&amp;&lt;span class="caps"&gt;CAMPAIGN&lt;/span&gt;;=&lt;span class="caps"&gt;HN2&lt;/span&gt;&amp;&lt;span class="caps"&gt;CREATIVE&lt;/span&gt;;=&lt;span class="caps"&gt;HN2&lt;/span&gt;+to+&lt;span class="caps"&gt;HN1&lt;/span&gt;&amp;&lt;span class="caps"&gt;REFERRING&lt;/span&gt;;_SITE=&lt;span class="caps"&gt;CISCO&lt;/span&gt;%&lt;span class="caps"&gt;2ECOM&lt;/span&gt;+&lt;span class="caps"&gt;HN2&lt;/span&gt;+Microsite)&lt;br /&gt;
http://cisco.com/go/fn =&gt; &lt;a href="http://tools.cisco.com/ITDIT/CFN/jsp/index.jsp"&gt;Cisco Feature Navigator - Cisco
Systems&lt;/a&gt;
(http://tools.cisco.com/&lt;span class="caps"&gt;ITDIT&lt;/span&gt;/&lt;span class="caps"&gt;CFN&lt;/span&gt;/jsp/index.jsp)&lt;br /&gt;
http://cisco.com/go/sn =&gt; &lt;a href="http://tools.cisco.com/Support/CPI/index.do"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/Support/&lt;span class="caps"&gt;CPI&lt;/span&gt;/index.do)&lt;br /&gt;
http://cisco.com/go/so =&gt; &lt;a href="http://www.cisco.com/web/learning/le27/le53/learning_partner_so.html"&gt;Cisco Learning Partner Associate - Learning
Partners Program Overview - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le27/le53/learning_partner_so.html)&lt;br /&gt;
http://cisco.com/go/cp =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns206/networking_solutions_solution_category.html"&gt;Cisco Powered Program - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns206/networking_solutions_solution_category.html)&lt;br /&gt;
http://cisco.com/go/bp =&gt; &lt;a href="http://www.cisco.com/web/partners/program/other/brand-protection/index.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/program/other/brand-protection/index.html)&lt;br /&gt;
http://cisco.com/go/ds =&gt; &lt;a href="http://www.cisco.com/web/solutions/dms/digital_signage.html"&gt;Cisco Digital Signs - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/solutions/dms/digital_signage.html)&lt;br /&gt;
http://cisco.com/go/ps =&gt; &lt;a href="http://www.cisco.com/web/strategy/government_education_index.html"&gt;Government and Education - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/government_education_index.html)&lt;br /&gt;
http://cisco.com/go/ts =&gt; &lt;a href="http://www.cisco.com/en/US/products/svcs/ps3034/ps2827/serv_category_home.html"&gt;Technical Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/svcs/ps3034/ps2827/serv_category_home.html)&lt;br /&gt;
http://cisco.com/go/tv =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/x2 =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/modules/ps5455/products_data_sheet0900aecd801f92aa.html"&gt;Cisco Systems - Redirect
to&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/modules/ps5455/products_data_sheet0900aecd801f92aa.html)&lt;br /&gt;
http://cisco.com/go/24 =&gt; &lt;a href="http://videolounge.cisco.com/video/24-pres-taylor-meets-over-tp/?Referring_site=PrintTv&amp;amp;Country_Site=US&amp;amp;Campaign=HN&amp;amp;Position=URL&amp;amp;Creative=go/24&amp;amp;Where=go/24"&gt;President Taylor Meets Over TelePresence On
24 - Video Detail - The Video
Lounge&lt;/a&gt;
(http://videolounge.cisco.com/video/24-pres-taylor-meets-over-tp/?Referring_site=PrintTv&amp;Country;_Site=&lt;span class="caps"&gt;US&lt;/span&gt;&amp;Campaign;=&lt;span class="caps"&gt;HN&lt;/span&gt;&amp;Position;=&lt;span class="caps"&gt;URL&lt;/span&gt;&amp;Creative;=go/24&amp;Where;=go/24)&lt;br /&gt;
http://cisco.com/go/saa =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6602/products_ios_protocol_group_home.html"&gt;Cisco &lt;span class="caps"&gt;IOS&lt;/span&gt; &lt;span class="caps"&gt;IP&lt;/span&gt; Service Level Agreements
(SLAs) - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6602/products_ios_protocol_group_home.html)&lt;br /&gt;
http://cisco.com/go/cca =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6128/index.html"&gt;Cisco &lt;span class="caps"&gt;NAC&lt;/span&gt; Appliance (Clean Access) -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6128/index.html)&lt;br /&gt;
http://cisco.com/go/pda =&gt; &lt;a href="http://www.cisco.com/cdc_content_elements/mobile/"&gt;Cisco Systems,
Inc&lt;/a&gt;
(http://www.cisco.com/cdc_content_elements/mobile/)&lt;br /&gt;
http://cisco.com/go/sea =&gt; &lt;a href="http://www.cisco.com/en/US/strategy/transportation/seaports.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/strategy/transportation/seaports.html)&lt;br /&gt;
http://cisco.com/go/cia =&gt; &lt;a href="http://www.cisco.com/web/offer/emea/collaborationinaction"&gt;Collaboration In
Action&lt;/a&gt;
(http://www.cisco.com/web/offer/emea/collaborationinaction)&lt;br /&gt;
http://cisco.com/go/via =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns341/ns396/ns166/ns68/networking_solutions_solution.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns341/ns396/ns166/ns68/networking_solutions_solution.html)&lt;br /&gt;
http://cisco.com/go/ana =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6776/index.html"&gt;Cisco Active Network Abstraction - Products
&lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6776/index.html)&lt;br /&gt;
http://cisco.com/go/cna =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps5931/index.html"&gt;Cisco Network Assistant - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps5931/index.html)&lt;br /&gt;
http://cisco.com/go/cpa =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/modules/ps2033/ps124/index.html"&gt;Cisco Channel Port Adapter - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/modules/ps2033/ps124/index.html)&lt;br /&gt;
http://cisco.com/go/lpa =&gt; &lt;a href="http://www.cisco.com/web/learning/le27/le53/learning_partner_so.html"&gt;Cisco Learning Partner Associate - Learning
Partners Program Overview - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le27/le53/learning_partner_so.html)&lt;br /&gt;
http://cisco.com/go/spa =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6267/prod_module_series_home.html"&gt;Cisco Shared Port Adapters/&lt;span class="caps"&gt;SPA&lt;/span&gt; Interface
Processors - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6267/prod_module_series_home.html)&lt;br /&gt;
http://cisco.com/go/cqa =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/technology/quoteadvisor.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/technology/quoteadvisor.html)&lt;br /&gt;
http://cisco.com/go/asa =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6120/index.html"&gt;Cisco &lt;span class="caps"&gt;ASA&lt;/span&gt; 5500 Series Adaptive Security
Appliances - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6120/index.html)&lt;br /&gt;
http://cisco.com/go/csa =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/secursw/ps5057/index.html"&gt;Cisco Security Agent - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/secursw/ps5057/index.html)&lt;br /&gt;
http://cisco.com/go/isa =&gt; &lt;a href="http://www.cisco.com/warp/public/732/Tech/connectivity/ssg/"&gt;&lt;span class="caps"&gt;CCO&lt;/span&gt; Decommission
Page&lt;/a&gt;
(http://www.cisco.com/warp/public/732/Tech/connectivity/ssg/)&lt;br /&gt;
http://cisco.com/go/msa =&gt; &lt;a href="http://www.cisco.com/en/US/partners/pr67/pr41/pr263/partners_strategic_solution_concept_home.html"&gt;Introduction - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partners/pr67/pr41/pr263/partners_strategic_solution_concept_home.html)&lt;br /&gt;
http://cisco.com/go/vsa =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7332/index.html"&gt;Cisco &lt;span class="caps"&gt;VPN&lt;/span&gt; Services Adapter - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7332/index.html)&lt;br /&gt;
http://cisco.com/go/cta =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns466/networking_solutions_package.html"&gt;&lt;span class="caps"&gt;NAC&lt;/span&gt; - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns466/networking_solutions_package.html)&lt;br /&gt;
http://cisco.com/go/aya =&gt; &lt;a href="https://programs.regweb.com/cisco/aya/"&gt;Are You Attached Seminar Series - 1
Day&lt;/a&gt;
(https://programs.regweb.com/cisco/aya/)&lt;br /&gt;
http://cisco.com/go/cab =&gt; &lt;a href="http://forums.cisco.com/eforum/servlet/CAB?page=main&amp;amp;sn=CAB"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://forums.cisco.com/eforum/servlet/&lt;span class="caps"&gt;CAB&lt;/span&gt;?page=main&amp;sn;=&lt;span class="caps"&gt;CAB&lt;/span&gt;)&lt;br /&gt;
http://cisco.com/go/mib =&gt; &lt;a href="http://tools.cisco.com/ITDIT/MIBS/servlet/index"&gt;Cisco &lt;span class="caps"&gt;IOS&lt;/span&gt; &lt;span class="caps"&gt;MIB&lt;/span&gt;
Locator&lt;/a&gt;
(http://tools.cisco.com/&lt;span class="caps"&gt;ITDIT&lt;/span&gt;/&lt;span class="caps"&gt;MIBS&lt;/span&gt;/servlet/index)&lt;br /&gt;
http://cisco.com/go/sib =&gt; &lt;a href="http://www.cisco.com/web/EA/sib/index.html"&gt;Small is
&lt;span class="caps"&gt;BIG&lt;/span&gt;&lt;/a&gt;
(http://www.cisco.com/web/&lt;span class="caps"&gt;EA&lt;/span&gt;/sib/index.html)&lt;br /&gt;
http://cisco.com/go/brb =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns477/index.html"&gt;Branch - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns477/index.html)&lt;br /&gt;
http://cisco.com/go/irb =&gt; &lt;a href="http://newsroom.cisco.com/dlls/tln/redirects/irb_metric.html"&gt;Thought Leadership
Network&lt;/a&gt;
(http://newsroom.cisco.com/dlls/tln/redirects/irb_metric.html)&lt;br /&gt;
http://cisco.com/go/fsb =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns477/networking_solutions_packages_list.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns477/networking_solutions_packages_list.html)&lt;br /&gt;
http://cisco.com/go/hsb =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns1028/networking_solutions_solution.html"&gt;Cisco Hosted Small Business
Communications - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns1028/networking_solutions_solution.html)&lt;br /&gt;
http://cisco.com/go/twb =&gt; &lt;a href="http://www.cisco.com/web/learning/netacad/landing/TWB.html"&gt;Teachers Without
Borders&lt;/a&gt;
(http://www.cisco.com/web/learning/netacad/landing/&lt;span class="caps"&gt;TWB&lt;/span&gt;.html)&lt;br /&gt;
http://cisco.com/go/syb =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/technology/security/secure_your_branch.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/technology/security/secure_your_branch.html)&lt;br /&gt;
http://cisco.com/go/dac =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7295/index.html"&gt;Cisco Unified Department Attendant
Console - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7295/index.html)&lt;br /&gt;
http://cisco.com/go/eac =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9687/index.html"&gt;Cisco Physical Access Gateways - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9687/index.html)&lt;br /&gt;
http://cisco.com/go/nac =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns466/networking_solutions_package.html"&gt;&lt;span class="caps"&gt;NAC&lt;/span&gt; - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns466/networking_solutions_package.html)&lt;br /&gt;
http://cisco.com/go/ibc =&gt; &lt;a href="http://www.scientificatlanta.com/email/2009/0709-IBC/new/JoinCiscoatIBC2009.htm"&gt;Join Us at &lt;span class="caps"&gt;IBC&lt;/span&gt;
2009&lt;/a&gt;
(http://www.scientificatlanta.com/email/2009/0709-&lt;span class="caps"&gt;IBC&lt;/span&gt;/new/JoinCiscoatIBC2009.htm)&lt;br /&gt;
http://cisco.com/go/nbc =&gt; &lt;a href="http://videolounge.cisco.com/video/30-rockjenna-finds-a-flip/?Referring_site=PrintTV&amp;amp;Country_Site=US&amp;amp;Campaign=Product+Integrations&amp;amp;Position=Vanity&amp;amp;Creative=http://www.cisco.com/go/nbc"&gt;30 Rock/Jenna Finds A Flip - Video Detail -
The Video
Lounge&lt;/a&gt;
(http://videolounge.cisco.com/video/30-rockjenna-finds-a-flip/?Referring_site=PrintTV&amp;Country;_Site=&lt;span class="caps"&gt;US&lt;/span&gt;&amp;Campaign;=Product+Integrations&amp;Position;=Vanity&amp;Creative;=http://www.cisco.com/go/nbc)&lt;br /&gt;
http://cisco.com/go/sbc =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns759/networking_solutions_sub_sub_solution.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns759/networking_solutions_sub_sub_solution.html)&lt;br /&gt;
http://cisco.com/go/pec =&gt; &lt;a href="http://www.cisco.com/web/learning/le36/learning_partner_e-learning_connection_tool_launch.html"&gt;Partner Education Connection - Training
Resources - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le36/learning_partner_e-learning_connection_tool_launch.html)&lt;br /&gt;
http://cisco.com/go/cfc =&gt; &lt;a href="http://www.cisco.com/commarch/cvs/cfc"&gt;Order Direct From Cisco - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/commarch/cvs/cfc)&lt;br /&gt;
http://cisco.com/go/dfc =&gt;
&lt;a href="http://resources.cisco.com/app/channel-site-builder.taf?channel_id=32631&amp;amp;public_view=true&amp;amp;asset_id=5926"&gt;Log-In&lt;/a&gt;
(http://resources.cisco.com/app/channel-site-builder.taf?channel_id=32631&amp;public;_view=true&amp;asset;_id=5926)&lt;br /&gt;
http://cisco.com/go/cic =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/netmgtsw/ps996/index.html"&gt;Cisco Info Center - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services -
Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/netmgtsw/ps996/index.html)&lt;br /&gt;
http://cisco.com/go/tlc =&gt; &lt;a href="http://www.cisco.com/web/strategy/government/federal_thought_leadership.html"&gt;Federal &lt;span class="caps"&gt;IT&lt;/span&gt; Thought Leadership - Industry
Solutions - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/government/federal_thought_leadership.html)&lt;br /&gt;
http://cisco.com/go/bmc =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns957/index.html"&gt;&lt;span class="caps"&gt;DC&lt;/span&gt; Partner - &lt;span class="caps"&gt;BMC&lt;/span&gt; - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns957/index.html)&lt;br /&gt;
http://cisco.com/go/pmc =&gt; &lt;a href="http://www.cisco.com/web/partners/services/resources/pmc/index.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/services/resources/pmc/index.html)&lt;br /&gt;
http://cisco.com/go/anc =&gt; &lt;a href="http://www.cisco.com/kobayashi/support/home.htm"&gt;Inventory and Reporting - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/kobayashi/support/home.htm)&lt;br /&gt;
http://cisco.com/go/voc =&gt; &lt;a href="http://www.cisco.com/en/US/customer/ordering/o44/ordering_concept_home.html"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/customer/ordering/o44/ordering_concept_home.html)&lt;br /&gt;
http://cisco.com/go/epc =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9913/products_ios_protocol_group_home.html"&gt;Cisco &lt;span class="caps"&gt;IOS&lt;/span&gt; Embedded Packet Capture - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9913/products_ios_protocol_group_home.html)&lt;br /&gt;
http://cisco.com/go/ipc =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns340/ns394/ns165/networking_solutions_packages_list.html"&gt;Unified Communications/Voice Solutions -
Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns340/ns394/ns165/networking_solutions_packages_list.html)&lt;br /&gt;
http://cisco.com/go/hpc =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns500/networking_solutions_package.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns500/networking_solutions_package.html)&lt;br /&gt;
http://cisco.com/go/rrc =&gt; &lt;a href="http://www.cisco.com/web/strategy/financial/index.html"&gt;Financial Services - Industry Solutions -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/financial/index.html)&lt;br /&gt;
http://cisco.com/go/isc =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/netmgtsw/ps4748/index.html"&gt;Cisco &lt;span class="caps"&gt;IP&lt;/span&gt; Solution Center - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/netmgtsw/ps4748/index.html)&lt;br /&gt;
http://cisco.com/go/psc =&gt; &lt;a href="http://ciscopsc.custhelp.com/cgi-bin/ciscopsc.cfg/php/enduser/cisco.php"&gt;Partner Help Online-Partners &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Resellers -
Cisco
Systems&lt;/a&gt;
(http://ciscopsc.custhelp.com/cgi-bin/ciscopsc.cfg/php/enduser/cisco.php)&lt;br /&gt;
http://cisco.com/go/ssc =&gt; &lt;a href="http://ciscopsc.custhelp.com/cgi-bin/ciscopsc.cfg/php/enduser/cisco.php"&gt;Partner Help Online-Partners &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Resellers -
Cisco
Systems&lt;/a&gt;
(http://ciscopsc.custhelp.com/cgi-bin/ciscopsc.cfg/php/enduser/cisco.php)&lt;br /&gt;
http://cisco.com/go/cuc =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns641/networking_solutions_packages_list.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns641/networking_solutions_packages_list.html)&lt;br /&gt;
http://cisco.com/go/mwc =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/netmgtsw/ps820/index.html"&gt;Cisco Mobile Wireless Center - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/netmgtsw/ps820/index.html)&lt;br /&gt;
http://cisco.com/go/iad =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/gatecont/ps887/index.html"&gt;Cisco &lt;span class="caps"&gt;IAD2400&lt;/span&gt; Series Integrated Access
Devices - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/gatecont/ps887/index.html)&lt;br /&gt;
http://cisco.com/go/fed =&gt; &lt;a href="http://www.cisco.com/web/strategy/government/us_federal.html"&gt;e-government - &lt;span class="caps"&gt;U.S.&lt;/span&gt; Federal
Government -Industry Solutions - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/government/us_federal.html)&lt;br /&gt;
http://cisco.com/go/cmd =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7246/index.html"&gt;Cisco Monitor Director - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7246/index.html)&lt;br /&gt;
http://cisco.com/go/usd =&gt; &lt;a href="http://www.cisco.com/cdc_content_elements/flash/netsol/sp/sdc/index.html?POSITION=printvanity&amp;amp;COUNTRY_SITE=us&amp;amp;CAMPAIGN=SDC&amp;amp;CREATIVE=Vanity&amp;amp;REFERRING_SITE=Vanity+URL"&gt;Cisco Unified Service
Delivery&lt;/a&gt;
(http://www.cisco.com/cdc_content_elements/flash/netsol/sp/sdc/index.html?&lt;span class="caps"&gt;POSITION&lt;/span&gt;=printvanity&amp;&lt;span class="caps"&gt;COUNTRY&lt;/span&gt;;_SITE=us&amp;&lt;span class="caps"&gt;CAMPAIGN&lt;/span&gt;;=&lt;span class="caps"&gt;SDC&lt;/span&gt;&amp;&lt;span class="caps"&gt;CREATIVE&lt;/span&gt;;=Vanity&amp;&lt;span class="caps"&gt;REFERRING&lt;/span&gt;;_SITE=Vanity+&lt;span class="caps"&gt;URL&lt;/span&gt;)&lt;br /&gt;
http://cisco.com/go/cvd =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns741/networking_solutions_program_home.html"&gt;Cisco Validated Design Program - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns741/networking_solutions_program_home.html)&lt;br /&gt;
http://cisco.com/go/ace =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps5719/Products_Sub_Category_Home.html"&gt;Data Center Application Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps5719/Products_Sub_Category_Home.html)&lt;br /&gt;
http://cisco.com/go/dce =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns783/networking_solutions_package.html#~overview"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns783/networking_solutions_package.html#\~overview)&lt;br /&gt;
http://cisco.com/go/nce =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9702/index.html"&gt;Cisco Network Capacity Expansion - Products
&lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9702/index.html)&lt;br /&gt;
http://cisco.com/go/tce =&gt; &lt;a href="http://tools.cisco.com/dlls/tln/page/business/biz-customer-experience"&gt;News@Cisco -&gt; Executive
Biographies&lt;/a&gt;
(http://tools.cisco.com/dlls/tln/page/business/biz-customer-experience)&lt;br /&gt;
http://cisco.com/go/mde =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6755/index.html"&gt;Cisco &lt;span class="caps"&gt;MPLS&lt;/span&gt; Diagnostics Expert - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6755/index.html)&lt;br /&gt;
http://cisco.com/go/ime =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9610/index.html"&gt;Cisco &lt;span class="caps"&gt;IPS&lt;/span&gt; Manager Express - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9610/index.html)&lt;br /&gt;
http://cisco.com/go/mme =&gt; &lt;a href="http://www.cisco.com/web/partners/pr47/pr288/partners_marketing_made_easy.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/web/partners/pr47/pr288/partners_marketing_made_easy.html)&lt;br /&gt;
http://cisco.com/go/ppe =&gt; &lt;a href="http://tools.cisco.com/WWChannels/PPP/home.do?actionType=home"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/WWChannels/&lt;span class="caps"&gt;PPP&lt;/span&gt;/home.do?actionType=home)&lt;br /&gt;
http://cisco.com/go/ase =&gt;
&lt;a href="http://www.cisco.com/warp/public/437/services/ndm/aes.html"&gt;Redirect&lt;/a&gt;
(http://www.cisco.com/warp/public/437/services/ndm/aes.html)&lt;br /&gt;
http://cisco.com/go/ese =&gt; &lt;a href="http://www.cisco.com/warp/public/779/largeent/it/ese/srnd.html"&gt;Enterprise - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/warp/public/779/largeent/it/ese/srnd.html)&lt;br /&gt;
http://cisco.com/go/cse =&gt; &lt;a href="http://www.cisco.com/cdc_content_elements/flash/large_enterprise/truck.html"&gt;Cisco Solutions
Express&lt;/a&gt;
(http://www.cisco.com/cdc_content_elements/flash/large_enterprise/truck.html)&lt;br /&gt;
http://cisco.com/go/mse =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9742/index.html"&gt;Cisco 3300 Series Mobility Services
Engine - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9742/index.html)&lt;br /&gt;
http://cisco.com/go/cue =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/voicesw/ps5520/index.html"&gt;Cisco Unity Express - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/voicesw/ps5520/index.html)&lt;br /&gt;
http://cisco.com/go/waf =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9586/index.html"&gt;Cisco &lt;span class="caps"&gt;ACE&lt;/span&gt; Web Application Firewall -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9586/index.html)&lt;br /&gt;
http://cisco.com/go/ccf =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns725/index.html"&gt;Network Fabric - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns725/index.html)&lt;br /&gt;
http://cisco.com/go/pdf =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/smb/programs_and_promotions/pdf.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/smb/programs_and_promotions/pdf.html)&lt;br /&gt;
http://cisco.com/go/sef =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns746/networking_solutions_sub_solution.html"&gt;Service Exchange Framework - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns746/networking_solutions_sub_solution.html)&lt;br /&gt;
http://cisco.com/go/jmf =&gt; &lt;a href="http://www.cisco.com/cgi-bin/front.x/jmf/jmf30/jmf30/SelectCountry"&gt;We Apologize - 401
Error&lt;/a&gt;(http://www.cisco.com/cgi-bin/front.x/jmf/jmf30/jmf30/SelectCountry)&lt;br /&gt;
http://cisco.com/go/fnf =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6965/products_ios_protocol_option_home.html"&gt;Flexible NetFlow - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6965/products_ios_protocol_option_home.html)&lt;br /&gt;
http://cisco.com/go/crf =&gt; &lt;a href="https://tools.cisco.com/WWChannels/MBO/SMB/home.do"&gt;Cisco.com Login
Page&lt;/a&gt;
(https://tools.cisco.com/WWChannels/&lt;span class="caps"&gt;MBO&lt;/span&gt;/&lt;span class="caps"&gt;SMB&lt;/span&gt;/home.do)&lt;br /&gt;
http://cisco.com/go/gsf =&gt; &lt;a href="http://www.cisco.com/web/strategy/government/solutionsforum.html"&gt;2010 Government Solutions
Forum&lt;/a&gt;
(http://www.cisco.com/web/strategy/government/solutionsforum.html)&lt;br /&gt;
http://cisco.com/go/atf =&gt; &lt;a href="http://forums.cisco.com/eforum/servlet/CBDF?page=cbdf&amp;amp;forum=CBDF%20Forum&amp;amp;topic=Event%20Discussions&amp;amp;CommCmd=MB%3Fcmd%3Ddisplay_location%26location%3D.2cc298a5"&gt;Cisco Systems: Business Discussion Forum -
Login&lt;/a&gt;
(http://forums.cisco.com/eforum/servlet/&lt;span class="caps"&gt;CBDF&lt;/span&gt;?page=cbdf&amp;forum;=&lt;span class="caps"&gt;CBDF&lt;/span&gt;%20Forum&amp;topic;=Event%20Discussions&amp;CommCmd;=&lt;span class="caps"&gt;MB&lt;/span&gt;%3Fcmd%3Ddisplay_location%26location%3D.2cc298a5)&lt;br /&gt;
http://cisco.com/go/ctf =&gt; &lt;a href="http://www.cisco.com/web/strategy/government/Public_Sector_Technology_Forum.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/web/strategy/government/Public_Sector_Technology_Forum.html)&lt;br /&gt;
http://cisco.com/go/gtf =&gt; &lt;a href="http://newsroom.cisco.com/dlls/tln/events/gtf/index.html"&gt;News@Cisco -&gt; Executive
Biographies&lt;/a&gt;
(http://newsroom.cisco.com/dlls/tln/events/gtf/index.html)&lt;br /&gt;
http://cisco.com/go/tmg =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/modules/ps5455/tsd_products_support_series_home.html"&gt;Cisco Transceiver Modules - Support - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/modules/ps5455/tsd_products_support_series_home.html)&lt;br /&gt;
http://cisco.com/go/qrg =&gt; &lt;a href="http://www.cisco.com/en/US/prod/qrg/index.html"&gt;Cisco Product Quick Reference Guide - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/prod/qrg/index.html)&lt;br /&gt;
http://cisco.com/go/isg =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6588/products_ios_protocol_group_home.html"&gt;Cisco Intelligent Services Gateway - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6588/products_ios_protocol_group_home.html)&lt;br /&gt;
http://cisco.com/go/ssg =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6589/products_ios_protocol_group_home.html"&gt;Service Selection Gateway - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6589/products_ios_protocol_group_home.html)&lt;br /&gt;
http://cisco.com/go/cug =&gt; &lt;a href="https://www.myciscocommunity.com/community/technology/collaboration/usergroups"&gt;Cisco Community Central: Community: Cisco
User
Groups&lt;/a&gt;
(https://www.myciscocommunity.com/community/technology/collaboration/usergroups)&lt;br /&gt;
http://cisco.com/go/pbi =&gt; &lt;a href="http://www.cisco.com/web/about/ac48/pbi.html"&gt;Support for Nonprofits - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/about/ac48/pbi.html)&lt;br /&gt;
http://cisco.com/go/dci =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns975/index.html"&gt;Data Center Interconnect - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns975/index.html)&lt;br /&gt;
http://cisco.com/go/pci =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns625/index.html"&gt;&lt;span class="caps"&gt;PCI&lt;/span&gt; Compliance - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns625/index.html)&lt;br /&gt;
http://cisco.com/go/udi =&gt; &lt;a href="http://www.cisco.com/en/US/products/products_identification_standard.html"&gt;Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services Product Identification
Standard - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/products_identification_standard.html)&lt;br /&gt;
http://cisco.com/go/aii =&gt; &lt;a href="http://www.cisco.com/en/US/about/ac50/ac207/projects/index.html"&gt;Projects - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/about/ac50/ac207/projects/index.html)&lt;br /&gt;
http://cisco.com/go/vni =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns827/networking_solutions_sub_solution.html"&gt;Visual Networking Index - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns827/networking_solutions_sub_solution.html)&lt;br /&gt;
http://cisco.com/go/cpi =&gt; &lt;a href="http://www.cisco.com/web/partners/news/index.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/news/index.html)&lt;br /&gt;
http://cisco.com/go/ppi =&gt; &lt;a href="https://apps.cisco.com/mbrprv/saw.dll?Dashboard"&gt;Cisco.com Login
Page&lt;/a&gt;
(https://apps.cisco.com/mbrprv/saw.dll?Dashboard)&lt;br /&gt;
http://cisco.com/go/vpi =&gt; &lt;a href="http://www.cisco.com/web/partners/pr46/vpi/vpi.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr46/vpi/vpi.html)&lt;br /&gt;
http://cisco.com/go/ipj =&gt; &lt;a href="http://www.cisco.com/en/US/about/ac123/ac147/about_cisco_the_internet_protocol_journal.html"&gt;The Internet Protocol Journal - &lt;span class="caps"&gt;ISSN&lt;/span&gt;
1944-1134 - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/about/ac123/ac147/about_cisco_the_internet_protocol_journal.html)&lt;br /&gt;
http://cisco.com/go/ask =&gt; &lt;a href="http://forum.cisco.com/eforum/servlet/NetProf?page=main"&gt;Cisco Support Community: Cisco Support
Community&lt;/a&gt;
(http://forum.cisco.com/eforum/servlet/NetProf?page=main)&lt;br /&gt;
http://cisco.com/go/pal =&gt; &lt;a href="http://tools.cisco.com/WWChannels/PAL/index.jsp"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/WWChannels/&lt;span class="caps"&gt;PAL&lt;/span&gt;/index.jsp)&lt;br /&gt;
http://cisco.com/go/ccl =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/technology/ipc/cisco_collaboration.html"&gt;Cisco Collaboration - Introduction - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/technology/ipc/cisco_collaboration.html)&lt;br /&gt;
http://cisco.com/go/oil =&gt; &lt;a href="http://www.cisco.com/web/strategy/energy/external_oil.html"&gt;Oil and Gas - Industry Solutions - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/energy/external_oil.html)&lt;br /&gt;
http://cisco.com/go/etl =&gt; &lt;a href="http://newsroom.cisco.com/dlls/tln/"&gt;News@Cisco -&gt; Executive
Biographies&lt;/a&gt;
(http://newsroom.cisco.com/dlls/tln/)&lt;br /&gt;
http://cisco.com/go/nam =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps5740/Products_Sub_Category_Home.html"&gt;Network Analysis Module (&lt;span class="caps"&gt;NAM&lt;/span&gt;) Products -
Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps5740/Products_Sub_Category_Home.html)&lt;br /&gt;
http://cisco.com/go/vam =&gt;
&lt;a href="http://resources.cisco.com/app/tree.taf?asset_id=57360&amp;amp;public_view=true"&gt;Log-In&lt;/a&gt;
(http://resources.cisco.com/app/tree.taf?asset_id=57360&amp;public;_view=true)&lt;br /&gt;
http://cisco.com/go/fbm =&gt; &lt;a href="http://www.cisco.com/web/strategy/financial/index.html"&gt;Forbidden File or
Application&lt;/a&gt;(http://www.cisco.com/web/strategy/financial/index.html)&lt;br /&gt;
http://cisco.com/go/ndm =&gt; &lt;a href="http://www.cisco.com/web/learning/le31/ase/index.html"&gt;Introduction - Advanced Services
Education - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le31/ase/index.html)&lt;br /&gt;
http://cisco.com/go/pdm =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/netmgtsw/ps2032/index.html"&gt;Cisco &lt;span class="caps"&gt;PIX&lt;/span&gt; Device Manager - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/netmgtsw/ps2032/index.html)&lt;br /&gt;
http://cisco.com/go/eem =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6815/products_ios_protocol_group_home.html"&gt;Cisco &lt;span class="caps"&gt;IOS&lt;/span&gt; Embedded Event Manager (&lt;span class="caps"&gt;EEM&lt;/span&gt;) -
Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6815/products_ios_protocol_group_home.html)&lt;br /&gt;
http://cisco.com/go/eim =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7236/index.html"&gt;Cisco Unified E-Mail Interaction Manager -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7236/index.html)&lt;br /&gt;
http://cisco.com/go/pim =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6552/products_ios_technology_home.html"&gt;&lt;span class="caps"&gt;IP&lt;/span&gt; Multicast - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6552/products_ios_technology_home.html)&lt;br /&gt;
http://cisco.com/go/rim =&gt; &lt;a href="http://www.cisco.com/en/US/prod/collateral/voicesw/product_promotion0900aec806e252a.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/prod/collateral/voicesw/product_promotion0900aec806e252a.html)&lt;br /&gt;
http://cisco.com/go/wim =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7233/index.html"&gt;Cisco Unified Web Interaction Manager -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7233/index.html)&lt;br /&gt;
http://cisco.com/go/clm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7138/index.html"&gt;Cisco License Manager - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7138/index.html)&lt;br /&gt;
http://cisco.com/go/cmm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6337/index.html"&gt;Cisco Multicast Manager - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6337/index.html)&lt;br /&gt;
http://cisco.com/go/anm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6904/index.html"&gt;Cisco Application Networking Manager -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6904/index.html)&lt;br /&gt;
http://cisco.com/go/enm =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/netmgtsw/index.html"&gt;Network Management - Main Page - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/netmgtsw/index.html)&lt;br /&gt;
http://cisco.com/go/com =&gt; &lt;a href="http://www.cisco.com/commarch/cvs/com"&gt;Order Direct From Cisco - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/commarch/cvs/com)&lt;br /&gt;
http://cisco.com/go/fpm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6723/index.html"&gt;Cisco &lt;span class="caps"&gt;IOS&lt;/span&gt; Flexible Packet Matching (&lt;span class="caps"&gt;FPM&lt;/span&gt;) -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6723/index.html)&lt;br /&gt;
http://cisco.com/go/epm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9519/Products_Sub_Category_Home.html"&gt;Cisco Policy Management - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9519/Products_Sub_Category_Home.html)&lt;br /&gt;
http://cisco.com/go/bqm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6385/index.html"&gt;Cisco Bandwidth Quality Manager - Network
Planning - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco Systems - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6385/index.html)&lt;br /&gt;
http://cisco.com/go/asm =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns1049/index.html"&gt;Cisco AnyConnect Secure Mobility Solution -
Cisco Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns1049/index.html)&lt;br /&gt;
http://cisco.com/go/lsm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6552/products_ios_technology_home.html"&gt;&lt;span class="caps"&gt;IP&lt;/span&gt; Multicast - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6552/products_ios_technology_home.html)&lt;br /&gt;
http://cisco.com/go/ctm =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/opticsw/ps2204/index.html"&gt;Cisco Transport Manager - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/opticsw/ps2204/index.html)&lt;br /&gt;
http://cisco.com/go/hum =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9303/index.html"&gt;CiscoWorks Health and Utilization Monitor -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9303/index.html)&lt;br /&gt;
http://cisco.com/go/pvm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6768/index.html"&gt;Cisco Performance Visibility Manager -
Network Performance - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco Systems - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6768/index.html)&lt;br /&gt;
http://cisco.com/go/san =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns893/networking_solutions_package.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns893/networking_solutions_package.html)&lt;br /&gt;
http://cisco.com/go/wan =&gt; &lt;a href="http://www.cisco.com/en/US/prod/routers/networking_solutions_products_unified_wan_services_platforms.html"&gt;Unified &lt;span class="caps"&gt;WAN&lt;/span&gt; Services Platforms  [Routers] -
Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/prod/routers/networking_solutions_products_unified_wan_services_platforms.html)&lt;br /&gt;
http://cisco.com/go/sbn =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/technology/security/borderless_security.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/technology/security/borderless_security.html)&lt;br /&gt;
http://cisco.com/go/cdn =&gt; &lt;a href="http://developer.cisco.com"&gt;Cisco Developer Community - Home - Cisco
Developer Community&lt;/a&gt;
(http://developer.cisco.com)&lt;br /&gt;
http://cisco.com/go/sdn =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns340/ns394/ns171/networking_solutions_packages_list.html"&gt;Security Solutions for Enterprise - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns340/ns394/ns171/networking_solutions_packages_list.html)&lt;br /&gt;
http://cisco.com/go/cfn =&gt; &lt;a href="http://tools.cisco.com/ITDIT/CFN/"&gt;Cisco Feature Navigator - Cisco
Systems&lt;/a&gt;
(http://tools.cisco.com/&lt;span class="caps"&gt;ITDIT&lt;/span&gt;/&lt;span class="caps"&gt;CFN&lt;/span&gt;/)&lt;br /&gt;
http://cisco.com/go/cin =&gt; &lt;a href="http://www.cisco.com/web/partners/events/cin.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/web/partners/events/cin.html)&lt;br /&gt;
http://cisco.com/go/aon =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6692/Products_Sub_Category_Home.html"&gt;Application-Oriented Networking - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6692/Products_Sub_Category_Home.html)&lt;br /&gt;
http://cisco.com/go/cpn =&gt; &lt;a href="http://www.cisco.com/pcgi-bin/cpn/cpn_pub_bassrch.pl"&gt;Shortcut Redirect - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/pcgi-bin/cpn/cpn_pub_bassrch.pl)&lt;br /&gt;
http://cisco.com/go/vpn =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps5743/Products_Sub_Category_Home.html"&gt;Virtual Private Networks (&lt;span class="caps"&gt;VPN&lt;/span&gt;) - Main
Page - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps5743/Products_Sub_Category_Home.html)&lt;br /&gt;
http://cisco.com/go/brn =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns936/index.html"&gt;Places in the Network - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns936/index.html)&lt;br /&gt;
http://cisco.com/go/cio =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns1018/index.html"&gt;&lt;span class="caps"&gt;CIO&lt;/span&gt; - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns1018/index.html)&lt;br /&gt;
http://cisco.com/go/sio =&gt; &lt;a href="http://tools.cisco.com/security/center/home.x"&gt;Security Intelligence Operations - Cisco
Systems&lt;/a&gt;
(http://tools.cisco.com/security/center/home.x)&lt;br /&gt;
http://cisco.com/go/cpo =&gt;
&lt;a href="https://tools.cisco.com/gdrp/coiga/showsurvey.do?surveyCode=445&amp;amp;keyCode=106721_1"&gt;&lt;/a&gt;(https://tools.cisco.com/gdrp/coiga/showsurvey.do?surveyCode=445&amp;keyCode;=106721_1)&lt;br /&gt;
http://cisco.com/go/map =&gt; &lt;a href="http://www.cisco-services.com/map"&gt;401 Authorization
Required&lt;/a&gt;
(http://www.cisco-services.com/map)&lt;br /&gt;
http://cisco.com/go/sap =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns970/index.html"&gt;&lt;span class="caps"&gt;DC&lt;/span&gt; Partner - &lt;span class="caps"&gt;SAP&lt;/span&gt; - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns970/index.html)&lt;br /&gt;
http://cisco.com/go/tap =&gt; &lt;a href="http://www.cisco.com/web/partners/pr11/incentive/tap/index.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr11/incentive/tap/index.html)&lt;br /&gt;
http://cisco.com/go/tbp =&gt; &lt;a href="https://programs.regweb.com/cisco/ctbp_08/"&gt;Cisco Trusted Business
Professional&lt;/a&gt;
(https://programs.regweb.com/cisco/ctbp_08/)&lt;br /&gt;
http://cisco.com/go/ccp =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9422/index.html"&gt;Cisco Configuration Professional - Products
&lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9422/index.html)&lt;br /&gt;
http://cisco.com/go/gep =&gt; &lt;a href="http://www.cisco.com/web/partners/tools/global_easypay.html"&gt;Global EasyPay (&lt;span class="caps"&gt;GEP&lt;/span&gt;) - Partner Central -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/tools/global_easypay.html)&lt;br /&gt;
http://cisco.com/go/rep =&gt; &lt;a href="http://tools.cisco.com/WWChannels/CAMLOC/jsp/cam_locator.jsp"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/WWChannels/&lt;span class="caps"&gt;CAMLOC&lt;/span&gt;/jsp/cam_locator.jsp)&lt;br /&gt;
http://cisco.com/go/nfp =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6642/index.html"&gt;Cisco &lt;span class="caps"&gt;IOS&lt;/span&gt; Network Foundation Protection
(&lt;span class="caps"&gt;NFP&lt;/span&gt;) - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6642/index.html)&lt;br /&gt;
http://cisco.com/go/agp =&gt; &lt;a href="https://tools.cisco.com/WWChannels/MBO/home.do"&gt;Cisco.com Login
Page&lt;/a&gt;
(https://tools.cisco.com/WWChannels/&lt;span class="caps"&gt;MBO&lt;/span&gt;/home.do)&lt;br /&gt;
http://cisco.com/go/cip =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/modules/ps2643/ps123/index.html"&gt;Cisco Channel Interface Processors -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/modules/ps2643/ps123/index.html)&lt;br /&gt;
http://cisco.com/go/dip =&gt; &lt;a href="http://www.cisco.com/global/EMEA/pages/dip/"&gt;We Apologize - 401
Error&lt;/a&gt;(http://www.cisco.com/global/&lt;span class="caps"&gt;EMEA&lt;/span&gt;/pages/dip/)&lt;br /&gt;
http://cisco.com/go/sip =&gt; &lt;a href="http://www.cisco.com/web/partners/pr11/incentive/sip.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr11/incentive/sip.html)&lt;br /&gt;
http://cisco.com/go/vip =&gt; &lt;a href="http://www.cisco.com/en/US/partner/partners/pr11/incentive/vip.shtml"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partner/partners/pr11/incentive/vip.shtml)&lt;br /&gt;
http://cisco.com/go/oip =&gt; &lt;a href="http://www.cisco.com/en/US/partner/partners/pr11/incentive/oip.shtml"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partner/partners/pr11/incentive/oip.shtml)&lt;br /&gt;
http://cisco.com/go/sjp =&gt; &lt;a href="http://www.cisco.com/web/partners/pr11/incentive/sip.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr11/incentive/sip.html)&lt;br /&gt;
http://cisco.com/go/dlp =&gt; &lt;a href="http://cisco.com/en/US/netsol/ns895/index.html"&gt;Data Loss Prevention - Cisco
Systems&lt;/a&gt;
(http://cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns895/index.html)&lt;br /&gt;
http://cisco.com/go/clp =&gt; &lt;a href="http://www.cisco.com/web/learning/le27/le53/learning_partner_clp.html"&gt;Cisco Learning Partner - Learning Partners
Program Overview - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le27/le53/learning_partner_clp.html)&lt;br /&gt;
http://cisco.com/go/dmp =&gt; &lt;a href="http://tools.cisco.com/emea/dmt/index.jsp"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/emea/dmt/index.jsp)&lt;br /&gt;
http://cisco.com/go/cpp =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns851/networking_solutions_solution.html"&gt;Cisco Powered Program for the Service
Provider - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns851/networking_solutions_solution.html)&lt;br /&gt;
http://cisco.com/go/dpp =&gt; &lt;a href="https://tools.cisco.com/WWChannels/MBO/home.do"&gt;Cisco.com Login
Page&lt;/a&gt;
(https://tools.cisco.com/WWChannels/&lt;span class="caps"&gt;MBO&lt;/span&gt;/home.do)&lt;br /&gt;
http://cisco.com/go/app =&gt; &lt;a href="http://www.cisco.com/en/US/partners/pr46/partners_pgm_category_page.html"&gt;Other Cisco Programs - Partner Central -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partners/pr46/partners_pgm_category_page.html)&lt;br /&gt;
http://cisco.com/go/urp =&gt; &lt;a href="http://www.cisco.com/web/about/ac50/ac207/crc/index1.html"&gt;Redirect Notification - This page has moved
to a new location! - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/about/ac50/ac207/crc/index1.html)&lt;br /&gt;
http://cisco.com/go/asp =&gt;
&lt;a href="http://resources.cisco.com/app/tree.taf?asset_id=482157&amp;amp;public_view=true"&gt;Log-In&lt;/a&gt;
(http://resources.cisco.com/app/tree.taf?asset_id=482157&amp;public;_view=true)&lt;br /&gt;
http://cisco.com/go/ksp =&gt; &lt;a href="http://www.cisco.com/web/learning/le31/ase/knowledgeservices/index.html"&gt;Knowledge Services - Advanced Services
Education - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le31/ase/knowledgeservices/index.html)&lt;br /&gt;
http://cisco.com/go/psp =&gt; &lt;a href="http://www.cisco.com/web/partners/pr11/incentive/em/em_psp.html"&gt;Public Sector Program (&lt;span class="caps"&gt;PSP&lt;/span&gt;) - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr11/incentive/em/em_psp.html)&lt;br /&gt;
http://cisco.com/go/atp =&gt; &lt;a href="http://www.cisco.com/web/partners/pr11/atp/index.html"&gt;Authorized Technology Provider (&lt;span class="caps"&gt;ATP&lt;/span&gt;)
Program - Partner Central - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr11/atp/index.html)&lt;br /&gt;
http://cisco.com/go/cvp =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/custcosw/ps1006/index.html"&gt;Cisco Unified Customer Voice Portal -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/custcosw/ps1006/index.html)&lt;br /&gt;
http://cisco.com/go/axp =&gt; &lt;a href="http://www.cisco.com/en/US/prod/routers/ps9701/axp_promo.html"&gt;Optimize Branch Footprint with Application
Integration   [Cisco Application Extension Platform] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/prod/routers/ps9701/axp_promo.html)&lt;br /&gt;
http://cisco.com/go/p4p =&gt; &lt;a href="http://www.cisco.com/web/partners/services/promos/p4p/index.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/services/promos/p4p/index.html)&lt;br /&gt;
http://cisco.com/go/sbr =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/smb/tools_and_resources/smart_business_roadmap.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/smb/tools_and_resources/smart_business_roadmap.html)&lt;br /&gt;
http://cisco.com/go/pdr =&gt; &lt;a href="https://cisco-apps.cisco.com/cisco/psn/commerce"&gt;Cisco.com Login
Page&lt;/a&gt;
(https://cisco-apps.cisco.com/cisco/psn/commerce)&lt;br /&gt;
http://cisco.com/go/oer =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6628/products_ios_protocol_option_home.html"&gt;Cisco Optimized Edge Routing - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6628/products_ios_protocol_option_home.html)&lt;br /&gt;
http://cisco.com/go/pfr =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps8787/products_ios_protocol_option_home.html"&gt;Performance Routing - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps8787/products_ios_protocol_option_home.html)&lt;br /&gt;
http://cisco.com/go/ehr =&gt; &lt;a href="http://www.cisco.com/web/strategy/healthcare/breathe_life_into_ehr.html"&gt;502 Proxy
Error&lt;/a&gt;
(http://www.cisco.com/web/strategy/healthcare/breathe_life_into_ehr.html)&lt;br /&gt;
http://cisco.com/go/air =&gt; &lt;a href="http://www.cisco.com/en/US/strategy/transportation/airports.html"&gt;Airports - Transportation - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/strategy/transportation/airports.html)&lt;br /&gt;
http://cisco.com/go/asr =&gt; &lt;a href="http://www.cisco.com/en/US/prod/routers/ps9343/asr_1000_prod_announcement.html"&gt;Introducing the Cisco &lt;span class="caps"&gt;ASR&lt;/span&gt; 1000 Router
Series  [Cisco &lt;span class="caps"&gt;ASR&lt;/span&gt; 1000 Series Aggregation Services Routers] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/prod/routers/ps9343/asr_1000_prod_announcement.html)&lt;br /&gt;
http://cisco.com/go/abs =&gt;
&lt;a href="http://www.crmtool.net/WebForm.asp?F=251&amp;amp;W=2824"&gt;&lt;/a&gt;(http://www.crmtool.net/WebForm.asp?F=251&amp;W;=2824)&lt;br /&gt;
http://cisco.com/go/cbs =&gt; &lt;a href="http://videolounge.cisco.com/video/csi-miami-webex-cracks-case/?Referring_site=PrintTv&amp;amp;Country_Site=US&amp;amp;Campaign=HN&amp;amp;Position=URL&amp;amp;Creative=go/cbs&amp;amp;Where=go/cbs"&gt;WebEx Helps Crack The Case On &lt;span class="caps"&gt;CSI&lt;/span&gt;: Miami -
Video Detail - The Video
Lounge&lt;/a&gt;
(http://videolounge.cisco.com/video/csi-miami-webex-cracks-case/?Referring_site=PrintTv&amp;Country;_Site=&lt;span class="caps"&gt;US&lt;/span&gt;&amp;Campaign;=&lt;span class="caps"&gt;HN&lt;/span&gt;&amp;Position;=&lt;span class="caps"&gt;URL&lt;/span&gt;&amp;Creative;=go/cbs&amp;Where;=go/cbs)&lt;br /&gt;
http://cisco.com/go/acs =&gt; &lt;a href="http://cisco.com/en/US/products/ps9911/index.html"&gt;Cisco Secure Access Control System - Cisco
Systems&lt;/a&gt;
(http://cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9911/index.html)&lt;br /&gt;
http://cisco.com/go/ics =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6542/index.html"&gt;Cisco Incident Control System - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6542/index.html)&lt;br /&gt;
http://cisco.com/go/scs =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns461/networking_solutions_package.html"&gt;Secure Remote Access and &lt;span class="caps"&gt;VPN&lt;/span&gt; - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns461/networking_solutions_package.html)&lt;br /&gt;
http://cisco.com/go/cds =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7191/Products_Sub_Category_Home.html"&gt;Content Delivery Systems - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7191/Products_Sub_Category_Home.html)&lt;br /&gt;
http://cisco.com/go/ids =&gt; &lt;a href="http://www.cisco.com/go/ips"&gt;Shortcut Redirect - Cisco
Systems&lt;/a&gt; (http://www.cisco.com/go/ips)&lt;br /&gt;
http://cisco.com/go/tds =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns340/ns394/ns171/ns441/networking_solutions_package.html"&gt;Threat Control - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns340/ns394/ns171/ns441/networking_solutions_package.html)&lt;br /&gt;
http://cisco.com/go/ams =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps8408/index.html"&gt;Cisco Assurance Management Solution -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps8408/index.html)&lt;br /&gt;
http://cisco.com/go/dms =&gt; &lt;a href="http://www.cisco.com/web/solutions/dms/"&gt;Digital Media Suite - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/solutions/dms/)&lt;br /&gt;
http://cisco.com/go/nms =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/netmgtsw/index.html"&gt;Network Management - Main Page - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/netmgtsw/index.html)&lt;br /&gt;
http://cisco.com/go/sms =&gt; &lt;a href="http://www.cisco.com/web/about/facts_info/sms_reg_info.html"&gt;Text Messaging at Cisco - About Cisco -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/about/facts_info/sms_reg_info.html)&lt;br /&gt;
http://cisco.com/go/ans =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/contnetw/index.html"&gt;Application Networking Services - Main
Page - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/contnetw/index.html)&lt;br /&gt;
http://cisco.com/go/dns =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6641/products_ios_protocol_option_home.html"&gt;Dynamic Host Control Protocol (&lt;span class="caps"&gt;DHCP&lt;/span&gt;)/Domain
Name System (&lt;span class="caps"&gt;DNS&lt;/span&gt;) - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6641/products_ios_protocol_option_home.html)&lt;br /&gt;
http://cisco.com/go/eos =&gt; &lt;a href="http://www.cisco.com/web/ordering/ciscocapital/refurbished/index.html"&gt;Cisco Certified Refurbished Equipment -
Cisco Capital Finance - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/ordering/ciscocapital/refurbished/index.html)&lt;br /&gt;
http://cisco.com/go/ios =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/iosswrel/products_ios_cisco_ios_software_category_home.html"&gt;Cisco &lt;span class="caps"&gt;IOS&lt;/span&gt; and &lt;span class="caps"&gt;NX&lt;/span&gt;-&lt;span class="caps"&gt;OS&lt;/span&gt; Software - Main Page -
Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/iosswrel/products_ios_cisco_ios_software_category_home.html)&lt;br /&gt;
http://cisco.com/go/qos =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6558/products_ios_technology_home.html"&gt;Quality of Service (QoS) - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6558/products_ios_technology_home.html)&lt;br /&gt;
http://cisco.com/go/ros =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6192/serv_category_home.html"&gt;Remote Management Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6192/serv_category_home.html)&lt;br /&gt;
http://cisco.com/go/wos =&gt; &lt;a href="http://www.cisco.com/web/learning/le21/le34/networkers/nw07/wos"&gt;Overview - Exhibit &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Sponsorship
Opportunities - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le21/le34/networkers/nw07/wos)&lt;br /&gt;
http://cisco.com/go/ips =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/secursw/ps2113/index.html"&gt;Cisco Intrusion Prevention System -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/secursw/ps2113/index.html)&lt;br /&gt;
http://cisco.com/go/ops =&gt; &lt;a href="http://www.cisco.com/cgi-bin/cpn/show_page.pl?file_name=symposiums.html&amp;amp;type=technical"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/cgi-bin/cpn/show_page.pl?file_name=symposiums.html&amp;type;=technical)&lt;br /&gt;
http://cisco.com/go/crs =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps5763/index.html"&gt;Cisco Carrier Routing System - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps5763/index.html)&lt;br /&gt;
http://cisco.com/go/oss =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/netmgtsw/index.html"&gt;Network Management - Main Page - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/netmgtsw/index.html)&lt;br /&gt;
http://cisco.com/go/pss =&gt; &lt;a href="http://tools.cisco.com/WWChannels/GETLOG/welcome.do"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/WWChannels/&lt;span class="caps"&gt;GETLOG&lt;/span&gt;/welcome.do)&lt;br /&gt;
http://cisco.com/go/tss =&gt; &lt;a href="http://www.cisco.com/en/US/products/svcs/ps3034/serv_category_home.html"&gt;Technical Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/svcs/ps3034/serv_category_home.html)&lt;br /&gt;
http://cisco.com/go/vss =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9336/index.html"&gt;Cisco Catalyst 6500 Virtual Switching
System 1440 - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9336/index.html)&lt;br /&gt;
http://cisco.com/go/fts =&gt; &lt;a href="http://www.cisco.com/en/US/products/svcs/ps11/ps2566/ps2567/serv_group_home.html"&gt;Cisco Focused Technical Support Services -
Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/svcs/ps11/ps2566/ps2567/serv_group_home.html)&lt;br /&gt;
http://cisco.com/go/avs =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6492/index.html"&gt;Cisco &lt;span class="caps"&gt;AVS&lt;/span&gt; 3100 Series Application Velocity
System - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6492/index.html)&lt;br /&gt;
http://cisco.com/go/uws =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns780/index.html"&gt;Unified &lt;span class="caps"&gt;WAN&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns780/index.html)&lt;br /&gt;
http://cisco.com/go/act =&gt; &lt;a href="http://www.cisco.com"&gt;Cisco Systems, Inc&lt;/a&gt;
(http://www.cisco.com)&lt;br /&gt;
http://cisco.com/go/ect =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns855/networking_solutions_package.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns855/networking_solutions_package.html)&lt;br /&gt;
http://cisco.com/go/hft =&gt; &lt;a href="http://www.cisco.com/web/strategy/financial/algo_speed.html"&gt;&lt;span class="caps"&gt;HFT&lt;/span&gt;: Algo Speed - Financial Markets -
Financial Markets - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/financial/algo_speed.html)&lt;br /&gt;
http://cisco.com/go/pit =&gt; &lt;a href="http://tools.cisco.com/Support/CPI/index.do"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/Support/&lt;span class="caps"&gt;CPI&lt;/span&gt;/index.do)&lt;br /&gt;
http://cisco.com/go/int =&gt; &lt;a href="http://www.cisco.com/web/KR/networking/smbiz/integrated_tech.html"&gt;í+µíc í.Oí_¬ë+_ë¡oì_ - ì`ì+Oê,°ì-.
ì+&amp;#8221;ë£&amp;#8221;ì.\~ - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/&lt;span class="caps"&gt;KR&lt;/span&gt;/networking/smbiz/integrated_tech.html)&lt;br /&gt;
http://cisco.com/go/ipt =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns340/ns394/ns165/ns268/networking_solutions_package.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns340/ns394/ns165/ns268/networking_solutions_package.html)&lt;br /&gt;
http://cisco.com/go/prt =&gt; &lt;a href="http://tools.cisco.com/elearning/knet/faq/jsp/faqcontroller.jsp?action=faqList&amp;amp;type=0:1&amp;amp;module=FAQ&amp;amp;appid=11625&amp;amp;rootcatid=11625&amp;amp;targetID=11625"&gt;Partner Relationship Team - Cisco
Systems&lt;/a&gt;
(http://tools.cisco.com/elearning/knet/faq/jsp/faqcontroller.jsp?action=faqList&amp;type;=0:1&amp;module;=&lt;span class="caps"&gt;FAQ&lt;/span&gt;&amp;appid;=11625&amp;rootcatid;=11625&amp;targetID;=11625)&lt;br /&gt;
http://cisco.com/go/fst =&gt; &lt;a href="http://www.cisco.com/web/strategy/financial/index.html"&gt;Financial Services - Industry Solutions -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/financial/index.html)&lt;br /&gt;
http://cisco.com/go/att =&gt; &lt;a href="https://programs.regweb.com/cisco/stayingoncourse_thankyou/"&gt;Cisco - &lt;span class="caps"&gt;AT&lt;/span&gt;&amp;T; &lt;span class="caps"&gt;UP&lt;/span&gt; - Thank
You&lt;/a&gt;
(https://programs.regweb.com/cisco/stayingoncourse_thankyou/)&lt;br /&gt;
http://cisco.com/go/ett =&gt;
&lt;a href="http://resources.cisco.com/app/tree.taf?asset_id=126014&amp;amp;public_view=true&amp;amp;LeftNavID=142323"&gt;Log-In&lt;/a&gt;
(http://resources.cisco.com/app/tree.taf?asset_id=126014&amp;public;_view=true&amp;LeftNavID;=142323)&lt;br /&gt;
http://cisco.com/go/ftt =&gt; &lt;a href="http://tools.cisco.com/WWChannels/MBO/FTT/home.html"&gt;Fast Track Trade
In&lt;/a&gt;
(http://tools.cisco.com/WWChannels/&lt;span class="caps"&gt;MBO&lt;/span&gt;/&lt;span class="caps"&gt;FTT&lt;/span&gt;/home.html)&lt;br /&gt;
http://cisco.com/go/rtt =&gt;
&lt;a href="http://resources.cisco.com/app/tree.taf?asset_id=136369&amp;amp;public_view=true&amp;amp;randomid=0.1&amp;amp;LeftNavID=136369"&gt;Log-In&lt;/a&gt;
(http://resources.cisco.com/app/tree.taf?asset_id=136369&amp;public;_view=true&amp;randomid;=0.1&amp;LeftNavID;=136369)&lt;br /&gt;
http://cisco.com/go/evt =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/technology/ipc/announcements/evt_roadshow.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/technology/ipc/announcements/evt_roadshow.html)&lt;br /&gt;
http://cisco.com/go/pvt =&gt; &lt;a href="https://programs.regweb.com/cisco/pvt_08/"&gt;Cisco Partner Virtual Team
Events&lt;/a&gt;
(https://programs.regweb.com/cisco/pvt_08/)&lt;br /&gt;
http://cisco.com/go/cnu =&gt; &lt;a href="http://www.cisco.com/web/partners/pr46/cnu/index.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr46/cnu/index.html)&lt;br /&gt;
http://cisco.com/go/gov =&gt; &lt;a href="http://www.cisco.com/web/strategy/government/us_federal.html"&gt;e-government - &lt;span class="caps"&gt;U.S.&lt;/span&gt; Federal
Government -Industry Solutions - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/government/us_federal.html)&lt;br /&gt;
http://cisco.com/go/cpv =&gt; &lt;a href="http://tools.cisco.com/Support/mytechsupport/index.jsp"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/Support/mytechsupport/index.jsp)&lt;br /&gt;
http://cisco.com/go/pgw =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/vcallcon/ps2027/index.html"&gt;Cisco &lt;span class="caps"&gt;PGW&lt;/span&gt; 2200 Softswitch - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/vcallcon/ps2027/index.html)&lt;br /&gt;
http://cisco.com/go/fax =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6178/index.html"&gt;Cisco Fax Server - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services -
Cisco Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6178/index.html)&lt;br /&gt;
http://cisco.com/go/ccx =&gt; &lt;a href="http://www.cisco.com/web/partners/pr46/pr147/partners_pgm_partners_0900aecd800a7907.html"&gt;Cisco Compatible Extensions Client
Devices - Cisco Compatible Extensions - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr46/pr147/partners_pgm_partners_0900aecd800a7907.html)&lt;br /&gt;
http://cisco.com/go/fox =&gt; &lt;a href="http://videolounge.cisco.com/video/24-pres-taylor-meets-over-tp/?Referring_site=PrintTv&amp;amp;Country_Site=US&amp;amp;Campaign=HN&amp;amp;Position=URL&amp;amp;Creative=go/fox&amp;amp;Where=go/fox"&gt;President Taylor Meets Over TelePresence On
24 - Video Detail - The Video
Lounge&lt;/a&gt;
(http://videolounge.cisco.com/video/24-pres-taylor-meets-over-tp/?Referring_site=PrintTv&amp;Country;_Site=&lt;span class="caps"&gt;US&lt;/span&gt;&amp;Campaign;=&lt;span class="caps"&gt;HN&lt;/span&gt;&amp;Position;=&lt;span class="caps"&gt;URL&lt;/span&gt;&amp;Creative;=go/fox&amp;Where;=go/fox)&lt;br /&gt;
http://cisco.com/go/biz =&gt; &lt;a href="http://www.cisco.com/cisco/web/solutions/small_business/index.html?Referring_site=PrintTv&amp;amp;Country_Site=us&amp;amp;Campaign=SAMBA&amp;amp;Position=Vanity&amp;amp;Creative=go/biz&amp;amp;Where=go/biz"&gt;Internal Server
Error&lt;/a&gt;
(http://www.cisco.com/cisco/web/solutions/small_business/index.html?Referring_site=PrintTv&amp;Country;_Site=us&amp;Campaign;=&lt;span class="caps"&gt;SAMBA&lt;/span&gt;&amp;Position;=Vanity&amp;Creative;=go/biz&amp;Where;=go/biz)&lt;br /&gt;
http://cisco.com/go/100 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6216/index.html"&gt;Cisco &lt;span class="caps"&gt;SB&lt;/span&gt; 100 Series Small-Business
Routers - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6216/index.html)&lt;br /&gt;
http://cisco.com/go/850 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6195/index.html"&gt;Cisco 851 Integrated Services Router -
Cisco Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6195/index.html)&lt;br /&gt;
http://cisco.com/go/360 =&gt; &lt;a href="https://learningnetwork.cisco.com/community/learning_center/cisco_360"&gt;&gt; Cisco 360 Learning Program - The Cisco
Learning
Network&lt;/a&gt;
(https://learningnetwork.cisco.com/community/learning_center/cisco_360)&lt;br /&gt;
http://cisco.com/go/870 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6200/index.html"&gt;Cisco 871 Integrated Services Router -
Cisco Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6200/index.html)&lt;br /&gt;
http://cisco.com/go/fs1 =&gt; &lt;a href="http://www.cisco.com/web/strategy/financial/index.html"&gt;Financial Services - Industry Solutions -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/financial/index.html)&lt;br /&gt;
http://cisco.com/go/tv1 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/vc2 =&gt; &lt;a href="http://www.cisco.com/web/learning/le21/le34/voicecon/2010/index.html"&gt;VoiceCon 2010 - Cisco Events - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le21/le34/voicecon/2010/index.html)&lt;br /&gt;
http://cisco.com/go/fs2 =&gt; &lt;a href="http://www.cisco.com/web/strategy/financial/index.html"&gt;Financial Services - Industry Solutions -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/financial/index.html)&lt;br /&gt;
http://cisco.com/go/tv2 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/fs3 =&gt; &lt;a href="http://www.cisco.com/web/strategy/financial/index.html"&gt;Financial Services - Industry Solutions -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/financial/index.html)&lt;br /&gt;
http://cisco.com/go/tv3 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/tv4 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/tv5 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/tv6 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/tv7 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/tv8 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/tv9 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/pica =&gt; &lt;a href="http://www.cisco.com/cgi-bin/front.x/pica/welcome_2_pica.pl"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/cgi-bin/front.x/pica/welcome_2_pica.pl)&lt;br /&gt;
http://cisco.com/go/cpda =&gt; &lt;a href="http://www.cisco-powered.com/cp/auth/marketing_sales_resources/cisco_powered_demand_accelerator/"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco-powered.com/cp/auth/marketing_sales_resources/cisco_powered_demand_accelerator/)&lt;br /&gt;
http://cisco.com/go/ctia =&gt; &lt;a href="http://www.cisco.com/web/learning/le21/le34/ctia/2010/index.html"&gt;&lt;span class="caps"&gt;CTIA&lt;/span&gt; Wireless 2010 - Cisco Events - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le21/le34/ctia/2010/index.html)&lt;br /&gt;
http://cisco.com/go/nila =&gt; &lt;a href="http://newsroom.cisco.com/dlls/tln/research_studies/nila/index.html"&gt;News@Cisco -&gt; Executive
Biographies&lt;/a&gt;
(http://newsroom.cisco.com/dlls/tln/research_studies/nila/index.html)&lt;br /&gt;
http://cisco.com/go/eula =&gt; &lt;a href="http://www.cisco.com/en/US/docs/general/warranty/English/EU1KEN_.html"&gt;End User License Agreement  [Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/docs/general/warranty/English/EU1KEN_.html)&lt;br /&gt;
http://cisco.com/go/icpa =&gt; &lt;a href="http://tools.cisco.com/WWChannels/IPA/welcome.do#"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/WWChannels/&lt;span class="caps"&gt;IPA&lt;/span&gt;/welcome.do#)&lt;br /&gt;
http://cisco.com/go/vspa =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9893/index.html"&gt;Cisco Catalyst 6500 Series &lt;span class="caps"&gt;VPN&lt;/span&gt; Services
Port Adapter - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9893/index.html)&lt;br /&gt;
http://cisco.com/go/cspa =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9498/index.html"&gt;Cisco Service Path Analyzer - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9498/index.html)&lt;br /&gt;
http://cisco.com/go/ncta =&gt; &lt;a href="http://www.cisco.com/web/learning/le21/le34/ncta/2010/index.html"&gt;&lt;span class="caps"&gt;NCTA&lt;/span&gt; Show 2010 - Cisco Events - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le21/le34/ncta/2010/index.html)&lt;br /&gt;
http://cisco.com/go/mfib =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6552/products_ios_technology_home.html"&gt;&lt;span class="caps"&gt;IP&lt;/span&gt; Multicast - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6552/products_ios_technology_home.html)&lt;br /&gt;
http://cisco.com/go/bnac =&gt; &lt;a href="http://www.cisco.com/web/strategy/healthcare/bioMed_nac.html"&gt;Cisco BioMed Network Admission Control -
Industry Solutions - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/healthcare/bioMed_nac.html)&lt;br /&gt;
http://cisco.com/go/bpac =&gt; &lt;a href="http://forums.cisco.com/eforum/servlet/BPAC?page=main"&gt;Cisco Systems: Business Policy Advisory
Council - Login&lt;/a&gt;
(http://forums.cisco.com/eforum/servlet/&lt;span class="caps"&gt;BPAC&lt;/span&gt;?page=main)&lt;br /&gt;
http://cisco.com/go/cabc =&gt; &lt;a href="http://www.cisco.com/en/US/prod/hw_sw_relicensing_program.html#~using"&gt;Cisco Hardware Inspection and Software
Re-Licensing Program  [Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/prod/hw_sw_relicensing_program.html#\~using)&lt;br /&gt;
http://cisco.com/go/brdc =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns340/ns394/ns224/networking_solutions_packages_list.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns340/ns394/ns224/networking_solutions_packages_list.html)&lt;br /&gt;
http://cisco.com/go/trec =&gt; &lt;a href="http://www.cisco.com/web/strategy/trec/index.html"&gt;Smart+Connected Real Estate - Industry
Solutions - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/trec/index.html)&lt;br /&gt;
http://cisco.com/go/psfc =&gt; &lt;a href="http://tools.cisco.com/salesit/psfc/index.jsp"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/salesit/psfc/index.jsp)&lt;br /&gt;
http://cisco.com/go/gbic =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/modules/ps5455/prod_module_series_home.html"&gt;Cisco Transceiver Modules - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/modules/ps5455/prod_module_series_home.html)&lt;br /&gt;
http://cisco.com/go/celc =&gt; &lt;a href="https://cisco.hosted.jivesoftware.com/index.jspa?ciscoHome=true"&gt;Cisco Learning Home - The Cisco Learning
Network&lt;/a&gt;
(https://cisco.hosted.jivesoftware.com/index.jspa?ciscoHome=true)&lt;br /&gt;
http://cisco.com/go/cumc =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7271/index.html"&gt;Cisco Unified Mobile Communicator -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7271/index.html)&lt;br /&gt;
http://cisco.com/go/cepc =&gt; &lt;a href="http://ciscoepcentral.veplatform.com"&gt;Cisco Experience Provider
Central&lt;/a&gt;
(http://ciscoepcentral.veplatform.com)&lt;br /&gt;
http://cisco.com/go/hipc =&gt; &lt;a href="http://www.cisco.com/pcgi-bin/cpn/cpn_match_result.pl?perPage=40&amp;amp;CurPosition=0&amp;amp;Direction=&amp;amp;ResultType=EC&amp;amp;search_id=873856&amp;amp;tab_name=findsp&amp;amp;SearchType=Advance&amp;amp;sortBy=DEFAULT"&gt;Cisco Powered
Program&lt;/a&gt;
(http://www.cisco.com/pcgi-bin/cpn/cpn_match_result.pl?perPage=40&amp;CurPosition;=0&amp;Direction;=&amp;ResultType;=&lt;span class="caps"&gt;EC&lt;/span&gt;&amp;search;_id=873856&amp;tab;_name=findsp&amp;SearchType;=Advance&amp;sortBy;=&lt;span class="caps"&gt;DEFAULT&lt;/span&gt;)&lt;br /&gt;
http://cisco.com/go/dcuc =&gt; &lt;a href="http://www.cisco.com/web/partners/pr11/atp/dcuc/index.html"&gt;Data Center Unified Computing - Partner
Central - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr11/atp/dcuc/index.html)&lt;br /&gt;
http://cisco.com/go/road =&gt; &lt;a href="http://www.cisco.com/en/US/strategy/transportation/roadways.html"&gt;Roadways - Transportation - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/strategy/transportation/roadways.html)&lt;br /&gt;
http://cisco.com/go/used =&gt; &lt;a href="http://www.cisco.com/en/US/prod/hw_sw_relicensing_program.html#~using"&gt;Cisco Hardware Inspection and Software
Re-Licensing Program  [Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/prod/hw_sw_relicensing_program.html#\~using)&lt;br /&gt;
http://cisco.com/go/grid =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns500/networking_solutions_package.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns500/networking_solutions_package.html)&lt;br /&gt;
http://cisco.com/go/gold =&gt; &lt;a href="http://www.cisco.com/en/US/partner/partners/pr11/pr8/pr27/partners_pgm_concept_home.shtml"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partner/partners/pr11/pr8/pr27/partners_pgm_concept_home.shtml)&lt;br /&gt;
http://cisco.com/go/ipnd =&gt; &lt;a href="http://www.cisco.com/en/US/partner/partners/pr11/incentive/defender.shtml"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partner/partners/pr11/incentive/defender.shtml)&lt;br /&gt;
http://cisco.com/go/srnd =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns742/networking_solutions_program_category_home.html"&gt;Design Zone - Main Page - Cisco - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns742/networking_solutions_program_category_home.html)&lt;br /&gt;
http://cisco.com/go/isrd =&gt; &lt;a href="http://www.cisco.com/web/about/security/security_services/ciag/research/index.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/web/about/security/security_services/ciag/research/index.html)&lt;br /&gt;
http://cisco.com/go/apae =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9799/index.html"&gt;Cisco Application Performance Assurance
Engine - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9799/index.html)&lt;br /&gt;
http://cisco.com/go/cuae =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns738/networking_solutions_package.html"&gt;Cisco Unified Application Environment -
Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns738/networking_solutions_package.html)&lt;br /&gt;
http://cisco.com/go/cmbe =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7273/index.html"&gt;Cisco Unified Communications Manager
Business Edition - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7273/index.html)&lt;br /&gt;
http://cisco.com/go/cube =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/voicesw/ps5640/index.html"&gt;Cisco Unified Border Element (&lt;span class="caps"&gt;CUBE&lt;/span&gt;) -
Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/voicesw/ps5640/index.html)&lt;br /&gt;
http://cisco.com/go/pace =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns661/index.html"&gt;Compliance - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns661/index.html)&lt;br /&gt;
http://cisco.com/go/ccde =&gt; &lt;a href="http://www.cisco.com/web/learning/le3/ccde/index.html"&gt;502 Proxy
Error&lt;/a&gt;
(http://www.cisco.com/web/learning/le3/ccde/index.html)&lt;br /&gt;
http://cisco.com/go/edge =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns592/networking_solutions_solution.html"&gt;Edge Networks - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns592/networking_solutions_solution.html)&lt;br /&gt;
http://cisco.com/go/ccie =&gt; &lt;a href="http://www.cisco.com/web/learning/le3/ccie/index.html"&gt;Cisco Certified Internetwork Expert -
&lt;span class="caps"&gt;CCIE&lt;/span&gt; - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le3/ccie/index.html)&lt;br /&gt;
http://cisco.com/go/ccme =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/voicesw/ps4625/index.html"&gt;Cisco Unified Communications Manager
Express(&lt;span class="caps"&gt;CME&lt;/span&gt;) - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/voicesw/ps4625/index.html)&lt;br /&gt;
http://cisco.com/go/hire =&gt; &lt;a href="https://cisco.hosted.jivesoftware.com/community/promo-014-hire?utm_source=tm&amp;amp;utm_medium=pm&amp;amp;utm_campaign=promo-014"&gt;&lt;span class="caps"&gt;IT&lt;/span&gt; Managers - The Cisco Learning
Network&lt;/a&gt;
(https://cisco.hosted.jivesoftware.com/community/promo-014-hire?utm_source=tm&amp;utm;_medium=pm&amp;utm;_campaign=promo-014)&lt;br /&gt;
http://cisco.com/go/core =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns573/networking_solutions_solution.html"&gt;Core Networks - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns573/networking_solutions_solution.html)&lt;br /&gt;
http://cisco.com/go/ahse =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9715/index.html"&gt;Cisco Application-Oriented Networking
Healthcare Services Extensions - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9715/index.html)&lt;br /&gt;
http://cisco.com/go/ctwe =&gt; &lt;a href="http://www.cisco.com/en/US/solutions/ns669/webex_engage.html"&gt;Cisco TelePresence WebEx Engage 
[TelePresence] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/solutions/ns669/webex_engage.html)&lt;br /&gt;
http://cisco.com/go/skye =&gt; &lt;a href="http://www.cisco.com/web/solutions/smb/heroes/index.html?Referring_site=PrintTv&amp;amp;Country_Site=us&amp;amp;Campaign=SMB+Heroes&amp;amp;Position=Vanity&amp;amp;Creative=go/skye&amp;amp;Where=go/skye"&gt;Small Business Empowered by Cisco - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/web/solutions/smb/heroes/index.html?Referring_site=PrintTv&amp;Country;_Site=us&amp;Campaign;=&lt;span class="caps"&gt;SMB&lt;/span&gt;+Heroes&amp;Position;=Vanity&amp;Creative;=go/skye&amp;Where;=go/skye)&lt;br /&gt;
http://cisco.com/go/dcof =&gt; &lt;a href="http://www.cisco.com/en/US/solutions/ns708/sol_generic_dc_of_the_future.html"&gt;The Data Center of the Future - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/solutions/ns708/sol_generic_dc_of_the_future.html)&lt;br /&gt;
http://cisco.com/go/svig =&gt; &lt;a href="http://www.cisco.com/web/about/ac48/sv_grants.html"&gt;Introduction - Silicon Valley Impact
Grants - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/about/ac48/sv_grants.html)&lt;br /&gt;
http://cisco.com/go/fclg =&gt; &lt;a href="http://www.cisco.com/pcgi-bin/sreg2/register/regdetail_private.pl?LANGUAGE=E&amp;amp;METHOD=E&amp;amp;TOPIC_CODE=9947&amp;amp;PRIORITY_CODE=176571_4"&gt;Search Seminars and Webcasts - Events,
Webcasts and Seminars - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/pcgi-bin/sreg2/register/regdetail_private.pl?&lt;span class="caps"&gt;LANGUAGE&lt;/span&gt;=E&amp;&lt;span class="caps"&gt;METHOD&lt;/span&gt;;=E&amp;&lt;span class="caps"&gt;TOPIC&lt;/span&gt;;_CODE=9947&amp;&lt;span class="caps"&gt;PRIORITY&lt;/span&gt;;_CODE=176571_4)&lt;br /&gt;
http://cisco.com/go/blog =&gt; &lt;a href="http://blogs.cisco.com/ciscotalk/solutions"&gt;Architectures and
Solutions&lt;/a&gt;
(http://blogs.cisco.com/ciscotalk/solutions)&lt;br /&gt;
http://cisco.com/go/ibsg =&gt; &lt;a href="http://www.cisco.com/web/about/ac79/index.html"&gt;Welcome to Cisco &lt;span class="caps"&gt;IBSG&lt;/span&gt; - Internet Business
Solutions Group - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/about/ac79/index.html)&lt;br /&gt;
http://cisco.com/go/gdsg =&gt; &lt;a href="http://www.cisco.com/en/US/strategy/government/defense.html"&gt;Defense - Government - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/strategy/government/defense.html)&lt;br /&gt;
http://cisco.com/go/ggsg =&gt; &lt;a href="http://www.cisco.com/web/strategy/government/defense.html"&gt;Defense - Government - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/government/defense.html)&lt;br /&gt;
http://cisco.com/go/nmtg =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/netmgtsw/index.html"&gt;Network Management - Main Page - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/netmgtsw/index.html)&lt;br /&gt;
http://cisco.com/go/tech =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6537/products_ios_sub_category_home.html"&gt;Cisco &lt;span class="caps"&gt;IOS&lt;/span&gt; Technologies - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6537/products_ios_sub_category_home.html)&lt;br /&gt;
http://cisco.com/go/dcni =&gt; &lt;a href="http://www.cisco.com/web/partners/program/specializations/datacenter/dcni/index.html"&gt;Advanced Data Center Networking
Infrastructure - Partner Central - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/program/specializations/datacenter/dcni/index.html)&lt;br /&gt;
http://cisco.com/go/bank =&gt; &lt;a href="http://www.cisco.com/now/bank"&gt;This Content Has Moved - Cisco
Systems&lt;/a&gt; (http://www.cisco.com/now/bank)&lt;br /&gt;
http://cisco.com/go/deal =&gt; &lt;a href="http://www.cisco.com/cgi-bin/front.x/AppTool/controller.cgi"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/cgi-bin/front.x/AppTool/controller.cgi)&lt;br /&gt;
http://cisco.com/go/rail =&gt; &lt;a href="http://www.cisco.com/en/US/strategy/transportation/rail.html"&gt;Public Transportation - Transportation -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/strategy/transportation/rail.html)&lt;br /&gt;
http://cisco.com/go/cell =&gt; &lt;a href="http://www.cisco.com/web/about/facts_info/sms_reg_info.html"&gt;Text Messaging at Cisco - About Cisco -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/about/facts_info/sms_reg_info.html)&lt;br /&gt;
http://cisco.com/go/sell =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/index.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/index.html)&lt;br /&gt;
http://cisco.com/go/cuwl =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9156/index.html"&gt;Cisco Unified Workspace Licensing -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9156/index.html)&lt;br /&gt;
http://cisco.com/go/apam =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9559/index.html"&gt;Cisco Application Performance Assurance
Network Module - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9559/index.html)&lt;br /&gt;
http://cisco.com/go/asdm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6121/index.html"&gt;Cisco Adaptive Security Device Manager -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6121/index.html)&lt;br /&gt;
http://cisco.com/go/cvdm =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/cscowork/ps4565/index.html"&gt;CiscoWorks CiscoView - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/cscowork/ps4565/index.html)&lt;br /&gt;
http://cisco.com/go/cwdm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6575/index.html"&gt;Cisco &lt;span class="caps"&gt;CWDM&lt;/span&gt; Transceiver Modules - Products
&lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6575/index.html)&lt;br /&gt;
http://cisco.com/go/dcnm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9369/index.html"&gt;Cisco Data Center Network Manager -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9369/index.html)&lt;br /&gt;
http://cisco.com/go/tpnm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9800/Products_Sub_Category_Home.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9800/Products_Sub_Category_Home.html)&lt;br /&gt;
http://cisco.com/go/cuom =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6535/index.html"&gt;Cisco Unified Operations Manager -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6535/index.html)&lt;br /&gt;
http://cisco.com/go/cepm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9519/Products_Sub_Category_Home.html"&gt;Cisco Policy Management - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9519/Products_Sub_Category_Home.html)&lt;br /&gt;
http://cisco.com/go/cupm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7125/index.html"&gt;Provisioning - Cisco - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7125/index.html)&lt;br /&gt;
http://cisco.com/go/wism =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6526/index.html"&gt;Cisco Catalyst 6500 Series/7600 Series
Wireless Services Module (WiSM) - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6526/index.html)&lt;br /&gt;
http://cisco.com/go/cusm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6536/index.html"&gt;Cisco Unified Service Monitor - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6536/index.html)&lt;br /&gt;
http://cisco.com/go/fwsm =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/modules/ps2706/ps4452/index.html"&gt;Cisco Catalyst 6500 Series Firewall
Services Module - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/modules/ps2706/ps4452/index.html)&lt;br /&gt;
http://cisco.com/go/mwtm =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6472/"&gt;Cisco Mobile Wireless Transport Manager -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6472/)&lt;br /&gt;
http://cisco.com/go/aibn =&gt; &lt;a href="http://www.cisco.com/en/US/partners/pr67/pr29/aibn/solution_home.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partners/pr67/pr29/aibn/solution_home.html)&lt;br /&gt;
http://cisco.com/go/edcn =&gt; &lt;a href="http://forums.cisco.com/eforum/servlet/NetProf;jsessionid=k6x5lkj7q1.SJ2B?page=netprof&amp;amp;CommCmd=MB%3Fcmd%3Ddisplay_messages%26mode%3Dnew%26location%3D.ee71a00"&gt;Cisco Support Community: Cisco Support
Community&lt;/a&gt;
(http://forums.cisco.com/eforum/servlet/NetProf;jsessionid=k6x5lkj7q1.&lt;span class="caps"&gt;SJ2B&lt;/span&gt;?page=netprof&amp;CommCmd;=&lt;span class="caps"&gt;MB&lt;/span&gt;%3Fcmd%3Ddisplay_messages%26mode%3Dnew%26location%3D.ee71a00)&lt;br /&gt;
http://cisco.com/go/ibpn =&gt; &lt;a href="http://www.cisco.com"&gt;Cisco Systems, Inc&lt;/a&gt;
(http://www.cisco.com)&lt;br /&gt;
http://cisco.com/go/ispn =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/industry/index.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/industry/index.html)&lt;br /&gt;
http://cisco.com/go/evpn =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns340/ns394/ns171/networking_solutions_packages_list.html"&gt;Security Solutions for Enterprise - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns340/ns394/ns171/networking_solutions_packages_list.html)&lt;br /&gt;
http://cisco.com/go/mvpn =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6651/products_ios_protocol_option_home.html"&gt;Multicast &lt;span class="caps"&gt;VPN&lt;/span&gt; - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6651/products_ios_protocol_option_home.html)&lt;br /&gt;
http://cisco.com/go/dcsn =&gt; &lt;a href="http://www.cisco.com/web/partners/program/specializations/datacenter/dcsn/index.html"&gt;Advanced Data Center Storage Networking -
Partner Central - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/program/specializations/datacenter/dcsn/index.html)&lt;br /&gt;
http://cisco.com/go/ggsn =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/wirelssw/ps873/index.html"&gt;Cisco Gateway &lt;span class="caps"&gt;GPRS&lt;/span&gt; Support Node - Products
&lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/wirelssw/ps873/index.html)&lt;br /&gt;
http://cisco.com/go/goco =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/technology/collaboration/gocollaborate.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/technology/collaboration/gocollaborate.html)&lt;br /&gt;
http://cisco.com/go/logo =&gt; &lt;a href="http://www.cisco.com/en/US/about/ac50/ac47/about_cisco_brand_center.html"&gt;Cisco Brand Center - Doing Business With
Cisco - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/about/ac50/ac47/about_cisco_brand_center.html)&lt;br /&gt;
http://cisco.com/go/demo =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/technology/ipc/integrated-solutions/dmr.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/technology/ipc/integrated-solutions/dmr.html)&lt;br /&gt;
http://cisco.com/go/cspo =&gt; &lt;a href="http://www.cisco.com/web/about/security/cspo/index.html"&gt;Security Programs - Security Center -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/about/security/cspo/index.html)&lt;br /&gt;
http://cisco.com/go/pvso =&gt; &lt;a href="http://www.cisco.com/partner/services/pvso/"&gt;We Apologize - 401
Error&lt;/a&gt;(http://www.cisco.com/partner/services/pvso/)&lt;br /&gt;
http://cisco.com/go/dcap =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns758/networking_solutions_sub_program_home.html"&gt;Data Center Assurance Program - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns758/networking_solutions_sub_program_home.html)&lt;br /&gt;
http://cisco.com/go/asap =&gt; &lt;a href="http://www.cisco.com/web/partners/pr192/sp_asap.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/web/partners/pr192/sp_asap.html)&lt;br /&gt;
http://cisco.com/go/csbp =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns671/networking_solutions_package.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns671/networking_solutions_package.html)&lt;br /&gt;
http://cisco.com/go/dhcp =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6641/products_ios_protocol_option_home.html"&gt;Dynamic Host Control Protocol
(&lt;span class="caps"&gt;DHCP&lt;/span&gt;)/Domain Name System (&lt;span class="caps"&gt;DNS&lt;/span&gt;) - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6641/products_ios_protocol_option_home.html)&lt;br /&gt;
http://cisco.com/go/mscp =&gt; &lt;a href="http://www.cisco.com/web/partners/pr11/mscp/index.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr11/mscp/index.html)&lt;br /&gt;
http://cisco.com/go/oscp =&gt; &lt;a href="http://www.cisco.com/web/partners/pr11/outsourcing/index.html"&gt;Outsourcing Channel Program - Partner
Central - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr11/outsourcing/index.html)&lt;br /&gt;
http://cisco.com/go/mldp =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6552/products_ios_technology_home.html"&gt;&lt;span class="caps"&gt;IP&lt;/span&gt; Multicast - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6552/products_ios_technology_home.html)&lt;br /&gt;
http://cisco.com/go/ctdp =&gt; &lt;a href="http://www.cisco.com/en/US/partners/pr46/tdp/index.shtml"&gt;Introduction - Cisco Technology Developer
Program - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partners/pr46/tdp/index.shtml)&lt;br /&gt;
http://cisco.com/go/bbip =&gt; &lt;a href="http://www.cisco.com/warp/public/732/bbip/"&gt;&lt;span class="caps"&gt;CCO&lt;/span&gt; Decommission
Page&lt;/a&gt;
(http://www.cisco.com/warp/public/732/bbip/)&lt;br /&gt;
http://cisco.com/go/clip =&gt; &lt;a href="http://www.cisco.com/web/ordering/ciscocapital/o45/ordering_finance_solution_program0900aecd800ddd5f.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/ordering/ciscocapital/o45/ordering_finance_solution_program0900aecd800ddd5f.html)&lt;br /&gt;
http://cisco.com/go/grip =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6550/products_ios_technology_home.html"&gt;High Availability - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6550/products_ios_technology_home.html)&lt;br /&gt;
http://cisco.com/go/ctmp =&gt; &lt;a href="http://www.cisco.com/web/partners/pr11/incentive/tmp/index.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr11/incentive/tmp/index.html)&lt;br /&gt;
http://cisco.com/go/coop =&gt; &lt;a href="http://www.coams.com/ciscocoop"&gt;Cisco Coop Fund
Builder&lt;/a&gt;
(http://www.coams.com/ciscocoop)&lt;br /&gt;
http://cisco.com/go/mtop =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns675/networking_solutions_solution_category.html"&gt;Radio Access Networks - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns675/networking_solutions_solution_category.html)&lt;br /&gt;
http://cisco.com/go/clsp =&gt; &lt;a href="http://www.cisco.com/web/learning/le27/le53/learning_partner_clsp.html"&gt;Cisco Learning Solutions Partner -
Learning Partners Program Overview - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le27/le53/learning_partner_clsp.html)&lt;br /&gt;
http://cisco.com/go/cusp =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps10140/index.html"&gt;Cisco Unified &lt;span class="caps"&gt;SIP&lt;/span&gt; Proxy - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps10140/index.html)&lt;br /&gt;
http://cisco.com/go/cptp =&gt; &lt;a href="https://secure.partnertalentportal.com/emerging/admin9021/login.asp"&gt;Cisco Partner Talent
Network&lt;/a&gt;
(https://secure.partnertalentportal.com/emerging/admin9021/login.asp)&lt;br /&gt;
http://cisco.com/go/ccvp =&gt; &lt;a href="http://www.cisco.com/en/US/learning/le3/le2/le37/le65/learning_certification_type_home.html"&gt;&lt;span class="caps"&gt;CCVP&lt;/span&gt; - Career Certifications &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Paths -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/learning/le3/le2/le37/le65/learning_certification_type_home.html)&lt;br /&gt;
http://cisco.com/go/rsvp =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6832/index.html"&gt;Cisco &lt;span class="caps"&gt;RSVP&lt;/span&gt; Agent - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services -
Cisco Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6832/index.html)&lt;br /&gt;
http://cisco.com/go/nbar =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6616/products_ios_protocol_group_home.html"&gt;Network Based Application Recognition
(&lt;span class="caps"&gt;NBAR&lt;/span&gt;) - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6616/products_ios_protocol_group_home.html)&lt;br /&gt;
http://cisco.com/go/eccr =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/technology/ipc/announcements/uc7roadshow.html"&gt;Experience Cisco Collaboration Roadshow -
Cisco Unified Communications &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; WebEx - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/technology/ipc/announcements/uc7roadshow.html)&lt;br /&gt;
http://cisco.com/go/dcdr =&gt; &lt;a href="http://www.cisco.com/web/partners/pr11/incentive/euro/dcdr.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr11/incentive/euro/dcdr.html)&lt;br /&gt;
http://cisco.com/go/iaas =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns995/networking_solutions_solution_category.html"&gt;Infrastructure as a Service - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns995/networking_solutions_solution_category.html)&lt;br /&gt;
http://cisco.com/go/waas =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps5680/Products_Sub_Category_Home.html"&gt;&lt;span class="caps"&gt;WAN&lt;/span&gt; Optimization - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps5680/Products_Sub_Category_Home.html)&lt;br /&gt;
http://cisco.com/go/dcas =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps5719/Products_Sub_Category_Home.html"&gt;Data Center Application Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps5719/Products_Sub_Category_Home.html)&lt;br /&gt;
http://cisco.com/go/cabs =&gt; &lt;a href="http://forums.cisco.com/eforum/servlet/CAB?page=main&amp;amp;sn=CAB"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://forums.cisco.com/eforum/servlet/&lt;span class="caps"&gt;CAB&lt;/span&gt;?page=main&amp;sn;=&lt;span class="caps"&gt;CAB&lt;/span&gt;)&lt;br /&gt;
http://cisco.com/go/mibs =&gt; &lt;a href="http://tools.cisco.com/ITDIT/MIBS/servlet/index"&gt;Cisco &lt;span class="caps"&gt;IOS&lt;/span&gt; &lt;span class="caps"&gt;MIB&lt;/span&gt;
Locator&lt;/a&gt;
(http://tools.cisco.com/&lt;span class="caps"&gt;ITDIT&lt;/span&gt;/&lt;span class="caps"&gt;MIBS&lt;/span&gt;/servlet/index)&lt;br /&gt;
http://cisco.com/go/isbs =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns816/networking_solutions_program_home.html"&gt;Design Zone for Branch - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns816/networking_solutions_program_home.html)&lt;br /&gt;
http://cisco.com/go/sbcs =&gt; &lt;a href="http://www.cisco.com/cisco/web/solutions/small_business/products/voice_conferencing/smart_business_communications_system/index.html?Referring_site=PrintTv&amp;amp;Country_Site=us&amp;amp;Campaign=SAMBA&amp;amp;Position=Vanity&amp;amp;Creative=go/sbcs&amp;amp;Where=go/sbcs"&gt;Cisco Smart Business Communications
System - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/cisco/web/solutions/small_business/products/voice_conferencing/smart_business_communications_system/index.html?Referring_site=PrintTv&amp;Country;_Site=us&amp;Campaign;=&lt;span class="caps"&gt;SAMBA&lt;/span&gt;&amp;Position;=Vanity&amp;Creative;=go/sbcs&amp;Where;=go/sbcs)&lt;br /&gt;
http://cisco.com/go/hucs =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns757/networking_solutions_solution.html"&gt;Cisco Hosted Unified Communications
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns757/networking_solutions_solution.html)&lt;br /&gt;
http://cisco.com/go/wids =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9817/index.html"&gt;Cisco Adaptive Wireless &lt;span class="caps"&gt;IPS&lt;/span&gt; Software -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9817/index.html)&lt;br /&gt;
http://cisco.com/go/bugs =&gt; &lt;a href="http://tools.cisco.com/Support/BugToolKit/action.do?hdnAction=searchBugs"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/Support/BugToolKit/action.do?hdnAction=searchBugs)&lt;br /&gt;
http://cisco.com/go/iris =&gt; &lt;a href="http://www.cisco.com/web/strategy/government/space-routing.html"&gt;Cisco Internet Routing in Space (&lt;span class="caps"&gt;IRIS&lt;/span&gt;) -
Industry Solutions - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/strategy/government/space-routing.html)&lt;br /&gt;
http://cisco.com/go/mpls =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6557/products_ios_technology_home.html"&gt;Multiprotocol Label Switching (&lt;span class="caps"&gt;MPLS&lt;/span&gt;) -
Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6557/products_ios_technology_home.html)&lt;br /&gt;
http://cisco.com/go/vams =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9518/index.html"&gt;Cisco Video Assurance Management
Solution - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9518/index.html)&lt;br /&gt;
http://cisco.com/go/cpms =&gt; &lt;a href="http://www.cisco.com/web/learning/le21/le34/cpnmarketing/2007/"&gt;Welcome - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le21/le34/cpnmarketing/2007/)&lt;br /&gt;
http://cisco.com/go/lpms =&gt; &lt;a href="http://tools.cisco.com/E-Learning-IT/LPCM/jsp/LpcmWelcome.jsp"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/E-Learning-&lt;span class="caps"&gt;IT&lt;/span&gt;/&lt;span class="caps"&gt;LPCM&lt;/span&gt;/jsp/LpcmWelcome.jsp)&lt;br /&gt;
http://cisco.com/go/ibns =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6638/products_ios_protocol_group_home.html"&gt;Identity Based Networking Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6638/products_ios_protocol_group_home.html)&lt;br /&gt;
http://cisco.com/go/nxos =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9372/index.html"&gt;Cisco &lt;span class="caps"&gt;NX&lt;/span&gt;-&lt;span class="caps"&gt;OS&lt;/span&gt; Software - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9372/index.html)&lt;br /&gt;
http://cisco.com/go/nips =&gt; &lt;a href="http://newsroom.cisco.com/dlls/tln/research_studies/nips/index.html"&gt;News@Cisco -&gt; Executive
Biographies&lt;/a&gt;
(http://newsroom.cisco.com/dlls/tln/research_studies/nips/index.html)&lt;br /&gt;
http://cisco.com/go/wips =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9817/index.html"&gt;Cisco Adaptive Wireless &lt;span class="caps"&gt;IPS&lt;/span&gt; Software -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9817/index.html)&lt;br /&gt;
http://cisco.com/go/apps =&gt; &lt;a href="http://forums.cisco.com/eforum/servlet/IPCApps?page=main"&gt;Cisco Systems: Unified Communications
Applications
Central&lt;/a&gt;
(http://forums.cisco.com/eforum/servlet/IPCApps?page=main)&lt;br /&gt;
http://cisco.com/go/mars =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6241/index.html"&gt;Cisco Security Monitoring, Analysis, and
Response System (&lt;span class="caps"&gt;MARS&lt;/span&gt;) - Cisco Systems - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6241/index.html)&lt;br /&gt;
http://cisco.com/go/nbss =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns614/networking_solutions_sub_solution.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns614/networking_solutions_sub_solution.html)&lt;br /&gt;
http://cisco.com/go/ucss =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps9158/index.html"&gt;Cisco Unified Communications Software
Subscription (&lt;span class="caps"&gt;UCSS&lt;/span&gt;) - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps9158/index.html)&lt;br /&gt;
http://cisco.com/go/gdss =&gt; &lt;a href="http://www.cisco.com/en/US/strategy/government/defense.html"&gt;502 Proxy
Error&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/strategy/government/defense.html)&lt;br /&gt;
http://cisco.com/go/ciss =&gt; &lt;a href="http://tools.cisco.com/ITDIT/ISTMAIN/jsp/index.jsp"&gt;Cisco Feature Navigator - Cisco
Systems&lt;/a&gt;
(http://tools.cisco.com/&lt;span class="caps"&gt;ITDIT&lt;/span&gt;/&lt;span class="caps"&gt;ISTMAIN&lt;/span&gt;/jsp/index.jsp)&lt;br /&gt;
http://cisco.com/go/cnss =&gt; &lt;a href="http://www.cisco.com/web/learning/le3/whats_new/infosec.html"&gt;07/01/03 - Recent Program Information -
Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le3/whats_new/infosec.html)&lt;br /&gt;
http://cisco.com/go/skus =&gt; &lt;a href="http://www.cisco.com/web/partners/pr11/incentive/eligible_skus.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr11/incentive/eligible_skus.html)&lt;br /&gt;
http://cisco.com/go/news =&gt; &lt;a href="http://newsroom.cisco.com/dlls/index.html"&gt;News@Cisco -&gt;
News@Cisco&lt;/a&gt;
(http://newsroom.cisco.com/dlls/index.html)&lt;br /&gt;
http://cisco.com/go/csat =&gt; &lt;a href="http://www.cisco.com/web/partners/pr11/pr20/partners_customer_satisfaction_concept_home.html"&gt;Customer Satisfaction - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/pr11/pr20/partners_customer_satisfaction_concept_home.html)&lt;br /&gt;
http://cisco.com/go/cebt =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns952/index.html"&gt;Collaboration Enabled Business
Transformation - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns952/index.html)&lt;br /&gt;
http://cisco.com/go/msft =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns963/index.html"&gt;&lt;span class="caps"&gt;DC&lt;/span&gt; Partner - Microsoft - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns963/index.html)&lt;br /&gt;
http://cisco.com/go/lcmt =&gt; &lt;a href="http://tools.cisco.com/GET/lrncrd/jsp/index.jsp"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://tools.cisco.com/&lt;span class="caps"&gt;GET&lt;/span&gt;/lrncrd/jsp/index.jsp)&lt;br /&gt;
http://cisco.com/go/cart =&gt;
&lt;a href="http://resources.cisco.com/app/tree.taf?asset_id=175513&amp;amp;public_view=true"&gt;Log-In&lt;/a&gt;
(http://resources.cisco.com/app/tree.taf?asset_id=175513&amp;public;_view=true)&lt;br /&gt;
http://cisco.com/go/srst =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/voicesw/ps2169/index.html"&gt;Cisco Unified Survivable Remote Site
Telephony - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/voicesw/ps2169/index.html)&lt;br /&gt;
http://cisco.com/go/issu =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7149/products_ios_protocol_group_home.html"&gt;In-Service Software Upgrade (&lt;span class="caps"&gt;ISSU&lt;/span&gt;) - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7149/products_ios_protocol_group_home.html)&lt;br /&gt;
http://cisco.com/go/srsv =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps10769/index.html"&gt;Cisco Survivable Remote Site Voicemail -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps10769/index.html)&lt;br /&gt;
http://cisco.com/go/iptv =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns610/networking_solutions_solution_category.html"&gt;&lt;span class="caps"&gt;IPTV&lt;/span&gt; Solutions - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns610/networking_solutions_solution_category.html)&lt;br /&gt;
http://cisco.com/go/rfgw =&gt; &lt;a href="https://www.cisco.com/en/US/products/ps8360/index.html"&gt;Cisco &lt;span class="caps"&gt;RF&lt;/span&gt; Gateway Series - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(https://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps8360/index.html)&lt;br /&gt;
http://cisco.com/go/grow =&gt; &lt;a href="http://www.cisco.com/web/partners/grow.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/web/partners/grow.html)&lt;br /&gt;
http://cisco.com/go/cbsw =&gt; &lt;a href="http://www.cisco.com/web/partners/sell/smb/university/training.html"&gt;Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/partners/sell/smb/university/training.html)&lt;br /&gt;
http://cisco.com/go/uccx =&gt; &lt;a href="http://www.cisco.com/en/US/products/sw/custcosw/ps1846/index.html"&gt;Cisco Unified Contact Center Express -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/sw/custcosw/ps1846/index.html)&lt;br /&gt;
http://cisco.com/go/amex =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns339/networking_solutions_small_medium_sized_business_home.html"&gt;The Page You Have Requested Is Not
Available&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns339/networking_solutions_small_medium_sized_business_home.html)&lt;br /&gt;
http://cisco.com/go/gray =&gt; &lt;a href="http://www.cisco.com/en/US/prod/hw_sw_relicensing_program.html#~using"&gt;Cisco Hardware Inspection and Software
Re-Licensing Program  [Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/prod/hw_sw_relicensing_program.html#\~using)&lt;br /&gt;
http://cisco.com/go/grey =&gt; &lt;a href="http://www.cisco.com/en/US/prod/hw_sw_relicensing_program.html#~using"&gt;Cisco Hardware Inspection and Software
Re-Licensing Program  [Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/prod/hw_sw_relicensing_program.html#\~using)&lt;br /&gt;
http://cisco.com/go/easy =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps10777/products_ios_protocol_group_home.html"&gt;Cisco Embedded Automation Systems - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps10777/products_ios_protocol_group_home.html)&lt;br /&gt;
http://cisco.com/go/4200 =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/vpndevc/ps4077/index.html"&gt;Cisco &lt;span class="caps"&gt;IPS&lt;/span&gt; 4200 Series Sensors - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/vpndevc/ps4077/index.html)&lt;br /&gt;
http://cisco.com/go/4500 =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/switches/ps4324/index.html"&gt;Cisco Catalyst 4500 Series Switches -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/switches/ps4324/index.html)&lt;br /&gt;
http://cisco.com/go/6500 =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/switches/ps708/index.html"&gt;Cisco Catalyst 6500 Series Switches -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/switches/ps708/index.html)&lt;br /&gt;
http://cisco.com/go/3700 =&gt; &lt;a href="http://www.cisco.com/warp/public/cc/pd/rt/ps282/"&gt;Cisco -Cisco 3700 Series
Routers&lt;/a&gt;
(http://www.cisco.com/warp/public/cc/pd/rt/ps282/)&lt;br /&gt;
http://cisco.com/go/3800 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps5855/index.html"&gt;Cisco 3800 Series Integrated Services
Routers - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps5855/index.html)&lt;br /&gt;
http://cisco.com/go/1800 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps5853/index.html"&gt;Cisco 1800 Series Integrated Services
Routers - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps5853/index.html)&lt;br /&gt;
http://cisco.com/go/2800 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps5854/index.html"&gt;Cisco 2800 Series Integrated Services
Routers - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps5854/index.html)&lt;br /&gt;
http://cisco.com/go/4900 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6021/index.html"&gt;Cisco Catalyst 4900 Series Switches -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6021/index.html)&lt;br /&gt;
http://cisco.com/go/vc10 =&gt; &lt;a href="http://www.cisco.com/web/learning/le21/le34/voicecon/2010/index.html"&gt;VoiceCon 2010 - Cisco Events - Cisco
Systems&lt;/a&gt;(http://www.cisco.com/web/learning/le21/le34/voicecon/2010/index.html)&lt;br /&gt;
http://cisco.com/go/tv10 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/1520 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps8368/index.html"&gt;Cisco Aironet 1520 Series - Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;
Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps8368/index.html)&lt;br /&gt;
http://cisco.com/go/3750 =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/switches/ps5023/index.html"&gt;Cisco Catalyst 3750 Series Switches -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/switches/ps5023/index.html)&lt;br /&gt;
http://cisco.com/go/2950 =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/switches/ps628/index.html"&gt;Cisco Catalyst 2950 Series Switches -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/switches/ps628/index.html)&lt;br /&gt;
http://cisco.com/go/3560 =&gt; &lt;a href="http://www.cisco.com/en/US/products/hw/switches/ps5528/index.html"&gt;Cisco Catalyst 3560 Series Switches -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/hw/switches/ps5528/index.html)&lt;br /&gt;
http://cisco.com/go/2960 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6406/index.html"&gt;Cisco Catalyst 2960 Series Switches -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6406/index.html)&lt;br /&gt;
http://cisco.com/go/cpi1 =&gt; &lt;a href="http://www.cisco.com/en/US/partner/partners/pr47/newsletter/us.shtml"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partner/partners/pr47/newsletter/us.shtml)&lt;br /&gt;
http://cisco.com/go/cio1 =&gt; &lt;a href="http://www.cisco.com/en/US/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?POSITION=PrintVanity&amp;amp;COUNTRY_SITE=us&amp;amp;CAMPAIGN=EMME--CIO+Awarenett&amp;amp;CREATIVE=go/cio1"&gt;Preparing Business for the Upturn with &lt;span class="caps"&gt;IT&lt;/span&gt; 
[Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?&lt;span class="caps"&gt;POSITION&lt;/span&gt;=PrintVanity&amp;&lt;span class="caps"&gt;COUNTRY&lt;/span&gt;;_SITE=us&amp;&lt;span class="caps"&gt;CAMPAIGN&lt;/span&gt;;=&lt;span class="caps"&gt;EMME&lt;/span&gt;&amp;#8212;&lt;span class="caps"&gt;CIO&lt;/span&gt;+Awarenett&amp;&lt;span class="caps"&gt;CREATIVE&lt;/span&gt;;=go/cio1)&lt;br /&gt;
http://cisco.com/go/tv11 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/7921 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7071/index.html"&gt;Cisco Unified Wireless &lt;span class="caps"&gt;IP&lt;/span&gt; Phone 7921G -
Cisco Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7071/index.html)&lt;br /&gt;
http://cisco.com/go/7931 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7062/index.html"&gt;Cisco Unified &lt;span class="caps"&gt;IP&lt;/span&gt; Phone 7931G - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7062/index.html)&lt;br /&gt;
http://cisco.com/go/1861 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps8321/index.html"&gt;Cisco 1861 Integrated Services Router -
Cisco Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps8321/index.html)&lt;br /&gt;
http://cisco.com/go/cpi2 =&gt; &lt;a href="http://www.cisco.com/en/US/partner/partners/pr47/newsletter/us.shtml"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partner/partners/pr47/newsletter/us.shtml)&lt;br /&gt;
http://cisco.com/go/cio2 =&gt; &lt;a href="http://www.cisco.com/en/US/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?POSITION=PrintVanity&amp;amp;COUNTRY_SITE=us&amp;amp;CAMPAIGN=EMME%2D%2DCIO+Awarenett&amp;amp;CREATIVE=go/cio2"&gt;Preparing Business for the Upturn with &lt;span class="caps"&gt;IT&lt;/span&gt; 
[Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?&lt;span class="caps"&gt;POSITION&lt;/span&gt;=PrintVanity&amp;&lt;span class="caps"&gt;COUNTRY&lt;/span&gt;;_SITE=us&amp;&lt;span class="caps"&gt;CAMPAIGN&lt;/span&gt;;=&lt;span class="caps"&gt;EMME&lt;/span&gt;%2D%&lt;span class="caps"&gt;2DCIO&lt;/span&gt;+Awarenett&amp;&lt;span class="caps"&gt;CREATIVE&lt;/span&gt;;=go/cio2)&lt;br /&gt;
http://cisco.com/go/tv12 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/cpi3 =&gt; &lt;a href="http://www.cisco.com/en/US/partner/partners/pr47/newsletter/us.shtml"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partner/partners/pr47/newsletter/us.shtml)&lt;br /&gt;
http://cisco.com/go/cio3 =&gt; &lt;a href="http://www.cisco.com/en/US/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?POSITION=PrintVanity&amp;amp;COUNTRY_SITE=us&amp;amp;CAMPAIGN=EMME%2D%2DCIO+Awarenett&amp;amp;CREATIVE=go/cio3"&gt;Preparing Business for the Upturn with &lt;span class="caps"&gt;IT&lt;/span&gt; 
[Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?&lt;span class="caps"&gt;POSITION&lt;/span&gt;=PrintVanity&amp;&lt;span class="caps"&gt;COUNTRY&lt;/span&gt;;_SITE=us&amp;&lt;span class="caps"&gt;CAMPAIGN&lt;/span&gt;;=&lt;span class="caps"&gt;EMME&lt;/span&gt;%2D%&lt;span class="caps"&gt;2DCIO&lt;/span&gt;+Awarenett&amp;&lt;span class="caps"&gt;CREATIVE&lt;/span&gt;;=go/cio3)&lt;br /&gt;
http://cisco.com/go/tv13 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/cpi4 =&gt; &lt;a href="http://www.cisco.com/en/US/partner/partners/pr47/newsletter/us.shtml"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partner/partners/pr47/newsletter/us.shtml)&lt;br /&gt;
http://cisco.com/go/cio4 =&gt; &lt;a href="http://www.cisco.com/en/US/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?POSITION=PrintVanity&amp;amp;COUNTRY_SITE=us&amp;amp;CAMPAIGN=EMME%2D%2DCIO+Awarenett&amp;amp;CREATIVE=go/cio4"&gt;Preparing Business for the Upturn with &lt;span class="caps"&gt;IT&lt;/span&gt; 
[Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?&lt;span class="caps"&gt;POSITION&lt;/span&gt;=PrintVanity&amp;&lt;span class="caps"&gt;COUNTRY&lt;/span&gt;;_SITE=us&amp;&lt;span class="caps"&gt;CAMPAIGN&lt;/span&gt;;=&lt;span class="caps"&gt;EMME&lt;/span&gt;%2D%&lt;span class="caps"&gt;2DCIO&lt;/span&gt;+Awarenett&amp;&lt;span class="caps"&gt;CREATIVE&lt;/span&gt;;=go/cio4)&lt;br /&gt;
http://cisco.com/go/tv14 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/9124 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps7079/index.html"&gt;Cisco &lt;span class="caps"&gt;MDS&lt;/span&gt; 9124 Multilayer Fabric Switch -
Cisco Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps7079/index.html)&lt;br /&gt;
http://cisco.com/go/cpi5 =&gt; &lt;a href="http://www.cisco.com/en/US/partner/partners/pr47/newsletter/us.shtml"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partner/partners/pr47/newsletter/us.shtml)&lt;br /&gt;
http://cisco.com/go/cio5 =&gt; &lt;a href="http://www.cisco.com/en/US/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?POSITION=PrintVanity&amp;amp;COUNTRY_SITE=us&amp;amp;CAMPAIGN=EMME%2D%2DCIO+Awarenett&amp;amp;CREATIVE=go/cio5"&gt;Preparing Business for the Upturn with &lt;span class="caps"&gt;IT&lt;/span&gt; 
[Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?&lt;span class="caps"&gt;POSITION&lt;/span&gt;=PrintVanity&amp;&lt;span class="caps"&gt;COUNTRY&lt;/span&gt;;_SITE=us&amp;&lt;span class="caps"&gt;CAMPAIGN&lt;/span&gt;;=&lt;span class="caps"&gt;EMME&lt;/span&gt;%2D%&lt;span class="caps"&gt;2DCIO&lt;/span&gt;+Awarenett&amp;&lt;span class="caps"&gt;CREATIVE&lt;/span&gt;;=go/cio5)&lt;br /&gt;
http://cisco.com/go/nw05 =&gt; &lt;a href="http://www.cisco.com/offer/nwol04/128101_1"&gt;Cisco Systems - Redirect to
Networkers&lt;/a&gt;
(http://www.cisco.com/offer/nwol04/128101_1)&lt;br /&gt;
http://cisco.com/go/tv15 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/2955 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps6738/index.html"&gt;Cisco Catalyst 2955 Series Switches -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps6738/index.html)&lt;br /&gt;
http://cisco.com/go/2975 =&gt; &lt;a href="http://www.cisco.com/en/US/products/ps10081/index.html"&gt;Cisco Catalyst 2975 Series Switches -
Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/products/ps10081/index.html)&lt;br /&gt;
http://cisco.com/go/cpi6 =&gt; &lt;a href="http://www.cisco.com/en/US/partner/partners/pr47/newsletter/us.shtml"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partner/partners/pr47/newsletter/us.shtml)&lt;br /&gt;
http://cisco.com/go/cio6 =&gt; &lt;a href="http://www.cisco.com/en/US/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?POSITION=PrintVanity&amp;amp;COUNTRY_SITE=us&amp;amp;CAMPAIGN=EMME%2D%2DCIO+Awarenett&amp;amp;CREATIVE=go/cio6"&gt;Preparing Business for the Upturn with &lt;span class="caps"&gt;IT&lt;/span&gt; 
[Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?&lt;span class="caps"&gt;POSITION&lt;/span&gt;=PrintVanity&amp;&lt;span class="caps"&gt;COUNTRY&lt;/span&gt;;_SITE=us&amp;&lt;span class="caps"&gt;CAMPAIGN&lt;/span&gt;;=&lt;span class="caps"&gt;EMME&lt;/span&gt;%2D%&lt;span class="caps"&gt;2DCIO&lt;/span&gt;+Awarenett&amp;&lt;span class="caps"&gt;CREATIVE&lt;/span&gt;;=go/cio6)&lt;br /&gt;
http://cisco.com/go/cgv6 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns1017/networking_solutions_solution_category.html"&gt;Cisco Carrier-Grade IPv6 Solution - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns1017/networking_solutions_solution_category.html)&lt;br /&gt;
http://cisco.com/go/nw06 =&gt; &lt;a href="http://www.cisco.com/offer/nwcdcpktads/133543_4"&gt;Cisco Systems - Redirect to
Networkers&lt;/a&gt;
(http://www.cisco.com/offer/nwcdcpktads/133543_4)&lt;br /&gt;
http://cisco.com/go/tv16 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/cpi7 =&gt; &lt;a href="http://www.cisco.com/en/US/partner/partners/pr47/newsletter/us.shtml"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partner/partners/pr47/newsletter/us.shtml)&lt;br /&gt;
http://cisco.com/go/cio7 =&gt; &lt;a href="http://www.cisco.com/en/US/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?POSITION=PrintVanity&amp;amp;COUNTRY_SITE=us&amp;amp;CAMPAIGN=EMME%2D%2DCIO+Awarenett&amp;amp;CREATIVE=go/cio7"&gt;Preparing Business for the Upturn with &lt;span class="caps"&gt;IT&lt;/span&gt; 
[Products &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Services] - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/solutions/ns340/ns856/ns870/prep_business_for_upturn_generic.html?&lt;span class="caps"&gt;POSITION&lt;/span&gt;=PrintVanity&amp;&lt;span class="caps"&gt;COUNTRY&lt;/span&gt;;_SITE=us&amp;&lt;span class="caps"&gt;CAMPAIGN&lt;/span&gt;;=&lt;span class="caps"&gt;EMME&lt;/span&gt;%2D%&lt;span class="caps"&gt;2DCIO&lt;/span&gt;+Awarenett&amp;&lt;span class="caps"&gt;CREATIVE&lt;/span&gt;;=go/cio7)&lt;br /&gt;
http://cisco.com/go/tv17 =&gt; &lt;a href="http://www.cisco.com/en/US/netsol/ns669/networking_solutions_solution_segment_home.html"&gt;Telepresence - Overview - Cisco
Systems&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/netsol/ns669/networking_solutions_solution_segment_home.html)&lt;br /&gt;
http://cisco.com/go/cpi8 =&gt; &lt;a href="http://www.cisco.com/en/US/partner/partners/pr47/newsletter/us.shtml"&gt;Cisco.com Login
Page&lt;/a&gt;
(http://www.cisco.com/en/&lt;span class="caps"&gt;US&lt;/span&gt;/partner/partners/pr47/newsletter/us.shtml)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 19 Mar 2010 17:23:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-19:2010/03/unshortifying-cisco-go-links.html</guid><category>http</category><category>perl</category><category>html</category><category>cisco</category><category>web</category></item><item><title>Parsing pcap files with Perl</title><link>https://www.grey-panther.net/2010/03/parsing-pcap-files-with-perl.html</link><description>&lt;p&gt;&lt;img alt="4175923040_b41d970b17_b" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/S6N_aa3qYlI/AAAAAAAACPA/eFZ137Rrdmc/4175923040_b41d970b17_b%5B8%5D.jpg?imgmax=800" title="4175923040_b41d970b17_b" /&gt;
Recently I was reading the blogpost on the BrekingPoint labs log about
&lt;a href="http://www.breakingpointsystems.com/community/blog/pcap-file-wireshark"&gt;parsing pcap files with
Perl&lt;/a&gt;
and I immediately said to myself: it is impossible that there isn’t a
module on &lt;span class="caps"&gt;CPAN&lt;/span&gt;, because &lt;a href="http://hype-free.blogspot.com/2010/03/in-praise-of-regexpassemble.html"&gt;Perl is
great&lt;/a&gt;.
Turns out I was right, there is
&lt;a href="http://search.cpan.org/~bdgregg/Net-TcpDumpLog-0.11/TcpDumpLog.pm"&gt;Net::TcpDumpLog&lt;/a&gt;
which can be combined with the
&lt;a href="http://search.cpan.org/~yanick/NetPacket-1.1.1/lib/NetPacket.pm"&gt;NetPacket&lt;/a&gt;
family of modules to parse the higher level protocols. Because example
code is rather sparse on the &lt;span class="caps"&gt;POD&lt;/span&gt; pages of the respective modules, here
is a small example to illustrate their&amp;nbsp;use:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Net::&lt;/span&gt;&lt;span class="n"&gt;TcpDumpLog&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;NetPacket::&lt;/span&gt;&lt;span class="n"&gt;Ethernet&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;NetPacket::&lt;/span&gt;&lt;span class="n"&gt;IP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;NetPacket::&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Net::&lt;/span&gt;&lt;span class="n"&gt;TcpDumpLog&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;foo.pcap&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$index&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;indexes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$length_orig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$length_incl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$drops&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$secs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$msecs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$index&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$index&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$eth_obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;NetPacket::&lt;/span&gt;&lt;span class="n"&gt;Ethernet&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    
  &lt;span class="k"&gt;next&lt;/span&gt; &lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="nv"&gt;$eth_obj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nn"&gt;NetPacket::Ethernet::&lt;/span&gt;&lt;span class="n"&gt;ETH_TYPE_IP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$ip_obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;NetPacket::&lt;/span&gt;&lt;span class="n"&gt;IP&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$eth_obj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;next&lt;/span&gt; &lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="nv"&gt;$ip_obj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;proto&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nn"&gt;NetPacket::IP::&lt;/span&gt;&lt;span class="n"&gt;IP_PROTO_TCP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$tcp_obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;NetPacket::&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ip_obj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$sec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$min&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$hour&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$mday&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$mon&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$wday&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$yday&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$isdst&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;localtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$secs&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;$msecs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nb"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%02d-%02d %02d:%02d:%02d.%d&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="nv"&gt;$mon&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$mday&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$hour&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$min&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$sec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$msecs&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
    &lt;span class="s"&gt;&amp;quot; &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$eth_obj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;src_mac&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; -&amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="nv"&gt;$eth_obj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;dest_mac&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    
  &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;\t&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$ip_obj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;src_ip&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$tcp_obj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;src_port&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; 
    &lt;span class="s"&gt;&amp;quot; -&amp;gt; &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="nv"&gt;$ip_obj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;dest_ip&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;:&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$tcp_obj&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;dest_port&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The code does the following: it opens the pcap file named “foo.pcap”,
iterates over all the packets (it assumes that they all are Ethernet
packets) and looks for &lt;span class="caps"&gt;TCP&lt;/span&gt; packets. Finally it prints out some
information about these packets (capture time, source/destination mac,
source/destination ip:port). You can customize it to fit your&amp;nbsp;needs.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Small, somewhat offtopic rant&lt;/em&gt;: one should always think &lt;em&gt;at least&lt;/em&gt;
twice before publishing code which does such elementary things. Find a
library and use it. If it doesn’t work, try patching it so that it works
and send back the code to the original author. Only if this fails should
you start from&amp;nbsp;scratch.&lt;/p&gt;
&lt;p&gt;Reusing existing code has many advantages: from your point of view, you
can be sure that you can get code which worked for a couple of people.
This is especially true for Perl modules which have a strong culture of
testing. Also, even these “simple” problems like parsing a &lt;span class="caps"&gt;TCP&lt;/span&gt; packet
have many corner cases which you will almost certainly miss at the first
go, and as a result, half of your time will be spent hunting them down
and only half of your time will be dedicated to solving the actual
problem (this is if you are lucky – if you are unlucky, your code will
skip over the special cases and it may make your entire analysis&amp;nbsp;irrelevant).&lt;/p&gt;
&lt;p&gt;Looking at it from the other side we have: more concentration of the way
to do “X” means that the code will be more tested, leading it to be used
more, meaning that it will be better tested and thus creating a positive
feedback loop. Also, if you believe in the open-source ethos (and
supposedly you do, since you published your code in the first place),
you should consider maximizing the return while minimizing the effort&amp;nbsp;needed.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/greyloch/"&gt;greyloch&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: updated NetPacket link - thank you&amp;nbsp;Anonymous.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 19 Mar 2010 15:43:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-19:2010/03/parsing-pcap-files-with-perl.html</guid><category>rant</category><category>programming</category><category>perl</category><category>networking</category></item><item><title>Spammy Mike</title><link>https://www.grey-panther.net/2010/03/spammy-mike.html</link><description>&lt;p&gt;&lt;img alt="3475284847_377416d47c_b" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/S6N3PMT6XqI/AAAAAAAACO4/ZaHJ7Y491HE/3475284847_377416d47c_b%5B2%5D.jpg?imgmax=800" title="3475284847_377416d47c_b" /&gt;
While most of the time I simply skip / delete any malicious content
encountered, from time to time I do some quick investigation on items
which peak my interest. For example the following comment was posted on
&lt;a href="http://anti-virus-rants.blogspot.com/2010/01/whats-in-malware-name.html?showComment=1268851165907#c6369496536621245796"&gt;a friends
blog&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You make a good point, and it is one I often make about encryption.
There are just too many standards out there for any smooth
communication to occur. I think there are some companies who are
getting it right with their approach to
&lt;a href="http://www.sophos.com/products/malware-protection/"&gt;malware&lt;/a&gt;, but
many &lt;a href="http://www.kaspersky.com"&gt;malware&lt;/a&gt; just can&amp;#8217;t seem to get their
fundamentals&amp;nbsp;down.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I didn’t remove the links, since they point to complete benign sites
(sophos.com and kaspersky.com). &lt;a href="http://www.blogger.com/profile/02458034558660798345"&gt;Mike’s
profile&lt;/a&gt; is
private, but a quick search shows
&lt;a href="http://ricedaddies.blogspot.com/2009/11/our-newest-edition.html#comment-6822895557266977511"&gt;many&lt;/a&gt;
&lt;a href="http://web20travel.blogspot.com/2006/05/avvenu-access-files-and-share-photos.html?showComment=1258019766980#c5244422916009263438"&gt;other&lt;/a&gt;
&lt;a href="http://mazeville.blogspot.com/2009/12/waiting-for-honest-christmas-letter.html#comment-8516384136887415269"&gt;spammy&lt;/a&gt;
&lt;a href="http://eddiejohn66.blogspot.com/2009/12/santas-galore.html?showComment=1260980219210#c8627538199453512111"&gt;comments&lt;/a&gt;.
Unfortunately there doesn’t seem to be a way to report individual
Blogger users as spammers, just actual&amp;nbsp;blogs.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;BTW&lt;/span&gt;. the same comment spam seems to have hit &lt;a href="http://technicalinfodotnet.blogspot.com/2010/03/sophos-stop-spamming-me-and-end-your.html"&gt;at least one other
security
blog&lt;/a&gt;.
From the screenshot it seems that the spammer also uses the Blogger name
&lt;a href="http://www.blogger.com/profile/13719854850902221999"&gt;MikeFrizzi&lt;/a&gt;, which
seems to be linked to a real person, but then again, it is quite easy to
create realistically looking “shadow identities” for people by scraping
other&amp;nbsp;websites.&lt;/p&gt;
&lt;p&gt;This is as much as a quick search revealed and I would like to leave you
with the following&amp;nbsp;thoughts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do comment moderation, at least retroactively if not proactively
    (small plug: I do moderate comments, but for the ones I approve the
    username links are without the nofollow tag – as per the &lt;a href="http://randaclay.com/blog/i-follow/"&gt;u comment,
    i follow&lt;/a&gt;&amp;nbsp;“ethos”)&lt;/li&gt;
&lt;li&gt;There is very little certainty on the Internet. Just because someone
    claims to be somebody (like the MikeFrizzi profile), it doesn’t mean
    he actually is that&amp;nbsp;person.&lt;/li&gt;
&lt;li&gt;Also, the link between spam and the actual company being promoted is
    hard to prove. I don’t think that Sophos or Kaspersky were spamming
    here directly, but I do think it’s possible that some remotely
    connected company (ie. something along the lines of “a company hired
    by the outsourced marketing department”) did in fact employ such
    dubious (and useless, since in Blogger all the links in comments are
    “nofollow’ed”)&amp;nbsp;techniques.&lt;/li&gt;
&lt;li&gt;Or, it may be, that some blackhats want to give the impression that
    these companies are spamming to erode their&amp;nbsp;credibility&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: &lt;a href="http://technicalinfodotnet.blogspot.com/2010/03/comment-spam-and-seo-campaign-apology.html"&gt;Sophos
confirmed&lt;/a&gt;
that it was a run-amok &amp;#8220;marketing&amp;#8221; company hired by them who posted the&amp;nbsp;spam.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/madmarv/"&gt;madmarv00&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 19 Mar 2010 15:08:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-19:2010/03/spammy-mike.html</guid><category>security</category><category>spam</category><category>blog</category><category>comments</category></item><item><title>Fixing a dead Asus WL-500g</title><link>https://www.grey-panther.net/2010/03/fixing-dead-asus-wl-500g.html</link><description>&lt;p&gt;A short story with a happy ending: my Asus &lt;span class="caps"&gt;WL&lt;/span&gt;-500g locked up and it
wasn’t starting, even after I hard-reset it (removed the power and
plugged it back in). All the LEDs were constantly on (normally, when you
plug in the power, they should light up for a second or so and the turn
off). After some searching I found &lt;a href="http://www.fixya.com/support/t2474220-assus_wl_500gp_router_hangs"&gt;a page on
FixYa&lt;/a&gt;
which pointed me to the following forum thread: &lt;a href="http://wl500g.info/showthread.php?t=11077"&gt;Dead or brick ? Lan and
&lt;span class="caps"&gt;WAN&lt;/span&gt; 1-4 leds on steady&lt;/a&gt;.
There were a couple of stories here with identical symptoms, so I
decided to give the solution a&amp;nbsp;try.&lt;/p&gt;
&lt;p&gt;The tricky part was to find a source which could deliver 2.5A at 5V
(most of the ones I found peaked at 1.5A). Finally I found &lt;a href="http://www.vitacom.ro/Products/29765/P_SUP_SMP5V2A5/5V-2_5A-SWITCH-ADAPTER-.html"&gt;this
one&lt;/a&gt;
locally and it worked like a charm! (It seems the trick is to search for
“switch power source”). Also, for extra safety, look carefully at the
adapter when you get it to make sure that it conforms to the
specification (5V &lt;span class="caps"&gt;DC&lt;/span&gt; / 2.5A) and if possible, use a multimeter to ensure
that the polarization is correct (in my case it was + on the inside, –
on the&amp;nbsp;outside).&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. I didn’t get to disassemble my old source yet, but I will post
photos whenever I do&amp;nbsp;so.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 17 Mar 2010 10:16:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-17:2010/03/fixing-dead-asus-wl-500g.html</guid><category>hardware</category><category>asus</category><category>router</category><category>troubleshooting</category></item><item><title>Computing the last digit of b^e efficiently</title><link>https://www.grey-panther.net/2010/03/computing-last-digit-of-be-efficiently.html</link><description>&lt;p&gt;Geek &lt;span class="caps"&gt;PSA&lt;/span&gt;: Yesterday was &lt;span class="caps"&gt;PI&lt;/span&gt; day (3.14, get it?). Lets celebrate with this
spiked math&amp;nbsp;comic:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://spikedmath.com/197.html"&gt;&lt;img alt="" src="http://spikedmath.net/comics/197-memorizing-pi.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Last week I saw the following problem which peaked my&amp;nbsp;interest:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Compute the last (decimal) digit of 2 raised to the power e where e
might be very&amp;nbsp;large.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We assume that we are talking about positive, integer exponents here.
The key observation here is that the last digit form a&amp;nbsp;cycle:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;...2 * 2 = ...4
...4 * 2 = ...8
...8 * 2 = ...6
...6 * 2 = ...2
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;So you can compute the last digit by calculating e &lt;span class="caps"&gt;MOD&lt;/span&gt; 4, which gives us
the position in the cycle. Next, I wondered if all the digits have this
cycling going on, so I searched around a little bit and found &lt;a href="http://cmsmcq.com/mib/images/expgraphs.html"&gt;this
page&lt;/a&gt; which gives the cycle
for all ten digits. Now you can compute the last digit of the formula
b\^e with the following&amp;nbsp;algorithm:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Take the last digit of&amp;nbsp;b&lt;/li&gt;
&lt;li&gt;compute e &lt;span class="caps"&gt;MOD&lt;/span&gt; (length of cycle for last digit of&amp;nbsp;b)&lt;/li&gt;
&lt;li&gt;return the given element of the&amp;nbsp;cycle&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is very nice, since we can operate on arbitrary sized b, but we
still need to be able to perform the modulo operation on e, which might
be inconvenient if e is large. Fortunately we can make the following&amp;nbsp;observation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The length of the cycle is either 1, 2 or&amp;nbsp;4&lt;/li&gt;
&lt;li&gt;For x in [1,2,4] you have &amp;#8230;ab &lt;span class="caps"&gt;MOD&lt;/span&gt; x = ab &lt;span class="caps"&gt;MOD&lt;/span&gt; x (ie you can take
    only the last two digits and compute the modulo) since 100 is a
    multiple of both 2 and 4 (meaning that a number in the form of &amp;#8230;00
    will always be divisible by both 2 and 4, hence it contributes
    nothing to the modulo&amp;nbsp;operation)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So here is the final algorithm which works quickly even for very large
values of b and&amp;nbsp;e&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Take the last digit of&amp;nbsp;b&lt;/li&gt;
&lt;li&gt;compute e &lt;span class="caps"&gt;MOD&lt;/span&gt; length_of_cycle by using the last two digits of&amp;nbsp;e&lt;/li&gt;
&lt;li&gt;return the given element of the&amp;nbsp;cycle&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Give it a try below if you have javascript&amp;nbsp;enabled:&lt;/p&gt;
&lt;p&gt;Math is fun&amp;nbsp;:-).&lt;/p&gt;
&lt;form&gt;
&lt;label for="large_num_base"&gt;b=&lt;/label&gt;&lt;input id="large_num_base" onkeyup="&amp;lt;br /&amp;gt;
    var base = document.getElementById('large_num_base').value;&amp;lt;br /&amp;gt;
    var exp  = document.getElementById('large_num_exp').value;&amp;lt;br /&amp;gt;
    var f = function(b, e) {&amp;lt;br /&amp;gt;
        if (!/^\d+$/.test(b)) return 'Err';&amp;lt;br /&amp;gt;
        if (!/^\d+$/.test(e)) return 'Err';&amp;lt;br /&amp;gt;
        if (0 == e) return 1;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;b = b.substr(b.length-1); e = e.substr(e.length-2) - 1;&amp;lt;br /&amp;gt;
        var cycle = [ [0], [1], [2,4,8,6], [3,9,7,1], [4,6], [5], [6], [7,9,3,1], [8,4,2,6], [9] ];&amp;lt;br /&amp;gt;
        cycle = cycle[b];&amp;lt;br /&amp;gt;
        return cycle[e % cycle.length];&amp;lt;br /&amp;gt;
    };&amp;lt;br /&amp;gt;
    document.getElementById('last_digit').value = f(base, exp);&amp;lt;br /&amp;gt;
" style="text-align: right;"&gt;&lt;/input&gt;

&lt;label for="large_num_exp"&gt;e=&lt;/label&gt;&lt;input id="large_num_exp" onkeyup="document.getElementById('large_num_base').onkeyup()" style="text-align: right;"&gt;&lt;/input&gt;  

&lt;input id="last_digit" readonly="readonly" size="4" style="text-align: right;"&gt;&lt;/input&gt;

&lt;/form&gt;

&lt;p&gt;Finally, I would like to leave you with the following question: is it
possible to efficiently compute an arbitrary digit of b\^e? My intuition
is that there are cycles in all of them, however they might be quite&amp;nbsp;long&amp;#8230;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 15 Mar 2010 13:20:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-15:2010/03/computing-last-digit-of-be-efficiently.html</guid><category>programming</category><category>mathematics</category></item><item><title>In praise of Regexp::Assemble</title><link>https://www.grey-panther.net/2010/03/in-praise-of-regexpassemble.html</link><description>&lt;p&gt;&amp;#8230;and of the Perl modules in general. I had the following&amp;nbsp;problem:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given a list of 16 character alphanumeric IDs, find all the lines from
a large-ish (\~&lt;span class="caps"&gt;6GB&lt;/span&gt;) logfile which contain at least one of the&amp;nbsp;IDs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The naive approach was to construct a big regular expression like
&lt;code&gt;\W(\QID1\E|\QID2\E|\QID3\E...)\W&lt;/code&gt; and match it against every line (I
needed to capture the actual &lt;span class="caps"&gt;ID&lt;/span&gt; to know in which bucket to place the
line). Needless to say, as it is the case with most naive approaches, it
was slooooow (basically, it was hogging the &lt;span class="caps"&gt;CPU&lt;/span&gt;, not the disk). So, by
searching around a little bit I found
&lt;a href="http://search.cpan.org/~dankogai/Regexp-Optimizer-0.15/lib/Regexp/Optimizer.pm"&gt;Regexp::Optimizer&lt;/a&gt;
and
&lt;a href="http://search.cpan.org/dist/Regexp-Assemble/Assemble.pm"&gt;Regexp::Assemble&lt;/a&gt;.
Of the two the later seemed the more mature one, so – after quickly
installing it with &lt;span class="caps"&gt;CPAN&lt;/span&gt; – I’ve put it into my code and made it run at
the “speed of the disk”. W00t! Perl + &lt;span class="caps"&gt;CPAN&lt;/span&gt; + clever modules&amp;nbsp;rock!&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. A little benchmark data (take it with a grain of salt, since you
should be &lt;a href="http://blog.urth.org/2010/03/benchmarking-versus-profiling.html"&gt;profiling not
benchmarking&lt;/a&gt;
most of the&amp;nbsp;time):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unoptimized regex size: 873 427&amp;nbsp;characters&lt;/li&gt;
&lt;li&gt;Optimized regex: 69 536&amp;nbsp;characters&lt;/li&gt;
&lt;li&gt;Unoptimized regex matchtime over 380 &lt;span class="caps"&gt;MB&lt;/span&gt; of data: \~1.9 hours (which
    would mean a throughput of \~&lt;span class="caps"&gt;58KB&lt;/span&gt; / sec – well below disk&amp;nbsp;speed)&lt;/li&gt;
&lt;li&gt;Optimized regex matching over the same 380 &lt;span class="caps"&gt;MB&lt;/span&gt; of data: 2 sec
    (throughput: 190 &lt;span class="caps"&gt;MB&lt;/span&gt;/sec&amp;nbsp;!!!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;How cool is&amp;nbsp;this?&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 15 Mar 2010 10:42:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-15:2010/03/in-praise-of-regexpassemble.html</guid><category>regex</category><category>programming</category><category>perl</category></item><item><title>Funny pictures post :-)</title><link>https://www.grey-panther.net/2010/03/funny-pictures-post.html</link><description>&lt;p&gt;About &lt;span class="caps"&gt;DRM&lt;/span&gt; (this is floating around the interwebs, I’m not entirely sure
about its&amp;nbsp;origin):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://picasaweb.google.com/lh/photo/4ozOcysD_meyohii0ydwBQ?authkey=Gv1sRgCI-E9_j-pp-8oAE&amp;amp;feat=embedwebsite"&gt;&lt;img alt="" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/S50E5k2r9kI/AAAAAAAACOw/tcKjArBP4bE/s800/GxzeV.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The second one is from &lt;a href="http://www.bradcolbow.com/archive.php/"&gt;a
webcomic&lt;/a&gt; (added to my reader
:-)) which I discovered via &lt;a href="http://www.schneier.com/blog/archives/2010/03/why_drm_doesnt.html"&gt;Bruce Schneier’s
blog&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://picasaweb.google.com/lh/photo/w_FBlbErC-MwzqRW8Ly2Jg?authkey=Gv1sRgCI-E9_j-pp-8oAE&amp;amp;feat=embedwebsite"&gt;&lt;img alt="" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/S50E6Khp4nI/AAAAAAAACO0/9396BtTyECE/s800/the_brads_drm.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And finally, for all the programmers out there (found it via &lt;a href="http://reprog.wordpress.com/2010/03/09/where-dijkstra-went-wrong-the-value-of-basic-as-a-first-programming-language/"&gt;The
Reinvigorated
Programmer&lt;/a&gt;’s&amp;nbsp;blog):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://picasaweb.google.com/lh/photo/1tTzyHafTq5x4pXXl-H8JA?authkey=Gv1sRgCI-E9_j-pp-8oAE&amp;amp;feat=embedwebsite"&gt;&lt;img alt="" src="http://lh5.ggpht.com/_hrvCBhtWhJ4/S50E5UrOpuI/AAAAAAAACOs/zfASPtTU4Yk/s400/doing-it-wrong.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 15 Mar 2010 10:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-15:2010/03/funny-pictures-post.html</guid><category>funny</category><category>pictures</category><category>web comic</category><category>images</category></item><item><title>RegEx which matches strings not containing a substring</title><link>https://www.grey-panther.net/2010/03/regex-which-matches-strings-not.html</link><description>&lt;p&gt;&lt;img alt="2091640491_33206332cb_b" src="http://lh5.ggpht.com/_hrvCBhtWhJ4/S5eLoyAy4YI/AAAAAAAACOM/OaJ_SL080Gg/2091640491_33206332cb_b%5B2%5D.jpg?imgmax=800" title="2091640491_33206332cb_b" /&gt;
This is an interesting problem which can appear in certain cases
(although not very often). A little searching around led me to many
posts stating that there is no easy solution and &lt;a href="http://bloggernitin.blogspot.com/2007/12/regex-for-doesnt-contain.html"&gt;the following easy
solution&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;^((?!my string).)*$&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It works as follows: the matching string must contain zero or more
characters which are &lt;em&gt;not preceded&lt;/em&gt; (?! is the negative look behind
operator) by the given&amp;nbsp;string.&lt;/p&gt;
&lt;p&gt;It is quite straight-forward, uses operators which are widely supported
by regualar expression engines and works even if “my string” is at the
end of the string we are trying to match – for reasons which are not
entirely clear to&amp;nbsp;me.&lt;/p&gt;
&lt;p&gt;Obviously it is a hack and you shouldn’t use it if you can use a clearer
way to indicate your intention, but it is a nifty tool to have in your
toolbox for that one moment when you need&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/crowt59/"&gt;crowt59&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 10 Mar 2010 14:08:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-10:2010/03/regex-which-matches-strings-not.html</guid><category>regex</category></item><item><title>Java import statement gotcha</title><link>https://www.grey-panther.net/2010/03/java-import-statement-gotcha.html</link><description>&lt;p&gt;&lt;img alt="190774444_2687512fb9_o" src="http://lh5.ggpht.com/_hrvCBhtWhJ4/S5eHUrNP70I/AAAAAAAACOE/aeCTbllzGiE/190774444_2687512fb9_o%5B2%5D.jpg?imgmax=800" title="190774444_2687512fb9_o" /&gt;
There is a lot of debate on the intertubes if one should or shouldn’t
use wildcard imports. I’m mostly indifferent to the discussion (mainly
because all the package references are resolved compile time – so there
is no performance overhead – and because today&amp;#8217;s &lt;span class="caps"&gt;IDE&lt;/span&gt;’s contain a lot of
smarts to help you figure out which is the actual class being
referenced), but here is something interesting I discovered&amp;nbsp;recently:&lt;/p&gt;
&lt;p&gt;Lets say that we have two classes with the same name in different&amp;nbsp;packages:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;package foo;

public class Foo {
    public static void print() {
        System.out.println(&amp;quot;Foo&amp;quot;);
    }
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;package bar;

public class Foo {
    public static void print() {
        System.out.println(&amp;quot;Bar&amp;quot;);
    }
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now create a test class in the bar&amp;nbsp;package:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;foo.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Test&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;static&lt;/span&gt; &lt;span class="n"&gt;void&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Foo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Question: what will this class print out? The answer is – surprisingly
for me - “Bar”. It seems that the Java compiler (tested with 1.6u18, but
this is probably the same with other versions – although I’m not sure
about alternative implementations like &lt;span class="caps"&gt;GCJ&lt;/span&gt;) uses the following order to
determine the canonical class&amp;nbsp;name:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Classes which are explicitly&amp;nbsp;imported&lt;/li&gt;
&lt;li&gt;Classes which are in the current&amp;nbsp;package&lt;/li&gt;
&lt;li&gt;Classes imported with&amp;nbsp;wildcards&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Just something to know&amp;nbsp;about.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/salimfadhley/"&gt;salimfadhley&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. Amusing sidenote: when you &lt;a href="http://www.flickr.com/search/?q=import&amp;amp;l=commderiv&amp;amp;ss=2&amp;amp;ct=6&amp;amp;mt=all&amp;amp;w=all&amp;amp;adv=1"&gt;search for import on
Flickr&lt;/a&gt;,
a lot of “babe” photos come up, even with safe search on. Is “import” a
codeword for something?&amp;nbsp;:-)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 10 Mar 2010 13:49:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-03-10:2010/03/java-import-statement-gotcha.html</guid><category>programming</category><category>java</category></item><item><title>FindersUK review</title><link>https://www.grey-panther.net/2010/02/findersuk-review.html</link><description>&lt;p&gt;Finding relatives was always a topic which interested me marginally, so
I was interested in checking out the Finders &lt;span class="caps"&gt;UK&lt;/span&gt; website (which &lt;span class="caps"&gt;BTW&lt;/span&gt;, can
also be read in other ways because URLs don’t have the concept of
capitalization implicitly – lets just leave at that). They offer
different services like &lt;a href="http://www.findersuk.com"&gt;tracing heirs&lt;/a&gt;.
Unfortunately (for me) their services are limited to the &lt;span class="caps"&gt;UK&lt;/span&gt; (then again,
it makes the company much more compelling, since supposedly a company
can offer the best services by specializing in one core&amp;nbsp;competency).&lt;/p&gt;
&lt;p&gt;They don’t have a public price offer, but this is understandable since
the amount of work involved can vary wildly between cases. All in all
this looks like a good company if you need such services in the &lt;span class="caps"&gt;UK&lt;/span&gt; (the
links on their webpage to different industry associations are all
legitimate, even though some of them a little out of date). They also
support two non-profit organizations: the Marie Curie Cancer care and
Missing People, which is very generous of&amp;nbsp;them.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 25 Feb 2010 14:40:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-02-25:2010/02/findersuk-review.html</guid><category>reviewme</category><category>review</category></item><item><title>BrickHouse Alert review</title><link>https://www.grey-panther.net/2010/02/brickhouse-alert-review.html</link><description>&lt;p&gt;After looking at the site of this &lt;a href="http://www.brickhousealert.com"&gt;Medical
Alert&lt;/a&gt; company I’m left with troubling
questions in my mind. Having an ill grand-parent makes me acutely
appreciate the need for &lt;a href="http://www.brickhousealert.com"&gt;Medical Alert&lt;/a&gt;
services, but this company leaves many open questions, especially
considering the fact that this is a company which requires a monthly
subscription. Their site is just a front for Yahoo Stores (which isn’t
bad in itself, since it makes business sense to outsource the non-core
competencies of your activity – like running a website) and the
registration data for the site is protected by “Whois Guard” (again,
something which makes sense in a lot of situations, but is just an other
stab in the trustworthiness of the company). They also don’t seem to
provide any physical address or concrete information about the personal
used in their call&amp;nbsp;centers.&lt;/p&gt;
&lt;p&gt;All in all, I wouldn’t do business with this company unless somebody I
know and trust recommends them. While the issues raised might very well
be just an oversight on the part of the company, it suggests a lack of
understanding of consumer psychology which is alarming given the
sensitive nature of the issue (health&amp;nbsp;care).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 25 Feb 2010 11:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-02-25:2010/02/brickhouse-alert-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Globe Runner review</title><link>https://www.grey-panther.net/2010/02/globe-runner-review.html</link><description>&lt;p&gt;The second review for today is also for a &lt;a href="http://globerunnerseo.com/"&gt;&lt;span class="caps"&gt;SEO&lt;/span&gt;
Consultant&lt;/a&gt;: Globe Runner &lt;span class="caps"&gt;SEO&lt;/span&gt;. From all that
I can gather, they are a legitimate company (&lt;a href="http://fortworth.bbb.org/codbrep.html?id=201030270"&gt;here is their &lt;span class="caps"&gt;BBB&lt;/span&gt;
page&lt;/a&gt; - so hard to
tell these days :-( ), and they also run &lt;a href="http://www.babysafetravel.com/"&gt;BabySafe
Travel&lt;/a&gt;. They also don’t seem to come up
in the first 10 pages (!) on Google when I’ve searched for &lt;span class="caps"&gt;SEO&lt;/span&gt;. Then
again, this might be a good thing, since these days many of the top
spots for any search are dominated by scammers (though not the top one&amp;nbsp;usually).&lt;/p&gt;
&lt;p&gt;They also have an informative blog with original content. In the end it
everyone must make the decision about needing &lt;span class="caps"&gt;SEO&lt;/span&gt; help by herself /
himself. The technology is not very complicated behind most of the
actions and a good website should already have most of the elements, but
if you not a “webhead”, you will benefit from the advice of an expert.
One thing I missed on their site is the clear display of prices for
their services, but then again this can be interpreted in a positive
manner as: “we won’t go into an one-sided competition on price, because
we should be judged on more than one figure” (my words, not theirs&amp;nbsp;:-)).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 16 Feb 2010 16:49:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-02-16:2010/02/globe-runner-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Softline Local Review</title><link>https://www.grey-panther.net/2010/02/softline-local-review.html</link><description>&lt;p&gt;Many say that &lt;a href="http://www.epowerpackage.com/"&gt;local online marketing&lt;/a&gt; is
the “next frontier”. While I have some doubts with regarding this
phenomenon (my money is on the ever expanding global economy – even
though I’ve got “slapped” a couple of times by companies refusing to
deliver to Romania), I’ve looked at &lt;a href="http://www.epowerpackage.com/about/"&gt;softline
local&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;They seem like a company to consider if you wish to include such tool in
your arsenal. Their main target is the &lt;span class="caps"&gt;USA&lt;/span&gt; (understandably so, since
they are located in &lt;span class="caps"&gt;LA&lt;/span&gt;), so this probably &lt;em&gt;isn’t&lt;/em&gt; for you if you are
outside of the &lt;span class="caps"&gt;USA&lt;/span&gt; or your services are not location&amp;nbsp;dependent.&lt;/p&gt;
&lt;p&gt;In case you do decide to go with them, I would recommend to check out in
detail their pricing and maybe inquire about the details of each element
in their price chart. While all of them seem like a good idea (I
especially liked the inclusion in &lt;span class="caps"&gt;GPS&lt;/span&gt; systems), I would question the
repeated value of some of them (maybe some of these services require an
annual fee – but many of them – like the inclusion in search indexes –
definitely don’t). In conclusion, my final advice is: the services look
promising, but proceed with caution, maybe do a short-term evaluation of
their&amp;nbsp;services.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 16 Feb 2010 16:32:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-02-16:2010/02/softline-local-review.html</guid><category>reviewme</category><category>review</category></item><item><title>You go PHD Comics!</title><link>https://www.grey-panther.net/2010/01/you-go-phd-comics.html</link><description>&lt;p&gt;&lt;a href="http://www.phdcomics.com/"&gt;&lt;span class="caps"&gt;PHD&lt;/span&gt; Comics&lt;/a&gt; is always great and hilarious
(and worth to subscribe to if you are even vaguely related to the
academic world - like trough a friend of a friend :-)) but there are
those occasions when it is &lt;strong&gt;epic&lt;/strong&gt;, like &lt;a href="http://www.phdcomics.com/comics.php?f=1271"&gt;this
one&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
![](http://www.phdcomics.com/comics/archive/phd012010s.gif)

&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;The media can almost never be trusted to get things right and we should
get into the habit of questioning everything they deliver. Think for
yourself people, get a grip on basic math and logic and learn how to dig
up&amp;nbsp;information!&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. I&amp;#8217;m not &amp;#8220;new media&amp;#8221;, I&amp;#8217;m just &lt;a href="http://www.despair.com/ir.html"&gt;a
raindrop&lt;/a&gt;&amp;nbsp;:-p.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 26 Jan 2010 18:39:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-26:2010/01/you-go-phd-comics.html</guid><category>rant</category><category>web comic</category><category>media</category></item><item><title>Carving out files with Perl</title><link>https://www.grey-panther.net/2010/01/carving-out-files-with-perl.html</link><description>&lt;p&gt;I&amp;#8217;ve had to use this trick a couple of times the last few years, so I
decided that I might as well document&amp;nbsp;it:&lt;/p&gt;
&lt;p&gt;If you have an image of a storage media (like an &lt;span class="caps"&gt;SD&lt;/span&gt; card or &lt;span class="caps"&gt;CD&lt;/span&gt;/&lt;span class="caps"&gt;DVD&lt;/span&gt;)
which you can not mount (either because the filesystem is hosed - that&amp;#8217;s
a technical term for damaged beyond repair :-) - or because it uses some
proprietary extension - *cough* &lt;span class="caps"&gt;MS&lt;/span&gt; *cough) &lt;em&gt;and&lt;/em&gt; you know the
approximate size of each file (maybe they are JPEGs or AVIs), you could
adapt &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/carve.pl"&gt;this script of
mine&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What it&amp;nbsp;does:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It reads &lt;code&gt;$search_buffer&lt;/code&gt; bytes from &lt;code&gt;$input&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;It looks for &lt;code&gt;$header&lt;/code&gt; (as it is written it looks for &lt;span class="caps"&gt;RIFF&lt;/span&gt;, which
    means &lt;span class="caps"&gt;AVI&lt;/span&gt; or &lt;span class="caps"&gt;WAV&lt;/span&gt; usually - for &lt;span class="caps"&gt;JPEG&lt;/span&gt; you would use&amp;nbsp;&amp;#8220;\xFF\xD8&amp;#8221;)&lt;/li&gt;
&lt;li&gt;If it finds it, it dumps &lt;code&gt;$extracted_size&lt;/code&gt; bytes from the given
    position (this should be set to be larger than the biggest file you&amp;nbsp;expect)&lt;/li&gt;
&lt;li&gt;It not, it seeks forward &lt;code&gt;$search_buffer - length($header)&lt;/code&gt; (to
    handle the cases when the header is split by the border of the&amp;nbsp;buffer)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The script is not perfect (for one it tries to load the entire file into
memory before writing it out; it also doesn&amp;#8217;t do any validation of the
fileformat, thus possibly creating some garbage output), but it worked
well for me in the past, so I thought I share&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. If you need some more serious file recovery, you might want to look
at &lt;a href="http://www.cgsecurity.org/wiki/PhotoRec"&gt;PhotoRec&lt;/a&gt; and
&lt;a href="http://www.cgsecurity.org/wiki/TestDisk"&gt;TestDisk&lt;/a&gt;. They are both free
(as in freedom - &lt;span class="caps"&gt;GPL&lt;/span&gt; license) and seem to be great programs (I never
actually managed to get them to recover more than my little cobbled
together script, but I might have some very particular&amp;nbsp;usecases).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 26 Jan 2010 16:11:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-26:2010/01/carving-out-files-with-perl.html</guid><category>programming</category><category>perl</category><category>carving</category><category>file recovery</category></item><item><title>Should I use RoboForm?</title><link>https://www.grey-panther.net/2010/01/should-i-use-roboform.html</link><description>&lt;p&gt;A little background about this post: while I was vaguely aware of
RoboForm, I never took a closer look at it until I saw the following
post by Derek: &lt;a href="http://hijack-this.co.uk/2009/11/beware-of-fake-shopping-sites/"&gt;Beware of fake shopping
sites&lt;/a&gt;.
What it basically says is that a password manager (such as Roboform)
will help you avoid phising sites, because it will observe the different
&lt;span class="caps"&gt;URL&lt;/span&gt; and will not pre-fill your contact details, thus providing you with
an additional warning sign that something is phishy&amp;nbsp;:-)&lt;/p&gt;
&lt;p&gt;I have a great deal of respect for Derek so I did some quick checking
around the product. Here are my&amp;nbsp;findings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;My first question was: how does the company behind Roboform make
    money? Because if they don&amp;#8217;t have a clear way of making money and
    they are giving away the product for free, you might start to
    wonder - aren&amp;#8217;t they giving away my information to make money? I was
    relieved to find that they have a pro version which costs money.
    This doesn&amp;#8217;t necessarily mean that they &lt;em&gt;aren&amp;#8217;t&lt;/em&gt; giving away your
    information, but there is one less reasons for them to do&amp;nbsp;so.&lt;/li&gt;
&lt;li&gt;The animated banner ad reminded me of some &amp;#8220;smiley toolbar&amp;#8221;
    advertisements which lead to adware, but taste is relative :-). An
    other marketing method of them which I personally found distasteful
    (although it is certainly legal) is the &amp;#8220;&lt;a href="http://www.roboform.com/password-scanner.html"&gt;Free Password
    Scan&lt;/a&gt;&amp;#8220;. This is a
    small tool which, when executed, shows the saved passwords from &lt;span class="caps"&gt;IE&lt;/span&gt;
    and Firefox. The purpose of this - I assume - is to show how
    &amp;#8220;insecure&amp;#8221; those browsers are (&lt;span class="caps"&gt;BTW&lt;/span&gt;, if you need such a tool, I would
    point you towards &lt;a href="http://www.nirsoft.net/password_recovery_tools.html"&gt;the NirSoft
    utilities&lt;/a&gt;). I
    dislike &lt;span class="caps"&gt;FUD&lt;/span&gt; and negative campaigning (sadly it works quite&amp;nbsp;well).&lt;/li&gt;
&lt;li&gt;A quick test in a &lt;span class="caps"&gt;VM&lt;/span&gt; showed it working as advertised. I have one
    remark though: while it doesn&amp;#8217;t store the master password in memory
    (as the setup boldly points out), it &lt;em&gt;stores the individual account
    passwords in clear-text when it is unlocked&lt;/em&gt;. You can check this out
    using something like &lt;a href="http://processhacker.sourceforge.net/"&gt;Process
    Hacker&lt;/a&gt; or &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"&gt;Process
    Explorer&lt;/a&gt;.
    You should point them to the actual browser process, since it is
    there where the passwords are stored, rather than the main RoboForm&amp;nbsp;process.&lt;/li&gt;
&lt;li&gt;One thing which Roboform &lt;em&gt;doesn&amp;#8217;t&lt;/em&gt; do is to differentiate between
    the &lt;span class="caps"&gt;HTTP&lt;/span&gt; and &lt;span class="caps"&gt;HTTP&lt;/span&gt;&lt;strong&gt;S&lt;/strong&gt; version of the sites. It happily fills the
    secure version of the page with credentials saved on the insecure
    version and vice-versa, potentially exposing the user to and
    &lt;a href="http://www.thoughtcrime.org/software/sslstrip/"&gt;sslstrip&lt;/a&gt; type of
    an attack, which becomes more and more important because of the wide
    use of wireless&amp;nbsp;technology.&lt;/li&gt;
&lt;li&gt;Finally, I would like to comment on something Derek wrote in his
    post (so this &lt;em&gt;is not&lt;/em&gt; an official statement from Roboform as far as
    I know): &amp;#8220;&lt;span class="caps"&gt;ROBOFORM&lt;/span&gt; &amp;#8230; keeps all passwords in a secure encrypted
    database that only you (not a keylogger or malware) can access and
    use it&amp;#8221;. This is and isn&amp;#8217;t true. It is true that keyloggers won&amp;#8217;t
    see your individual passwords, but it will see your master password
    (!!!). Also, while Roboform will protect you against malware which
    specifically targets the password store of browsers (and there are
    quite a few of those out there), it &lt;em&gt;will not&lt;/em&gt; protect you against
    the ones which inject themselves in the browser and simply capture
    the contents of any &lt;span class="caps"&gt;HTML&lt;/span&gt; forms which have an &lt;span class="caps"&gt;INPUT&lt;/span&gt; element of type
    &lt;span class="caps"&gt;PASSWORD&lt;/span&gt; in them - of course neither will &lt;span class="caps"&gt;SSL&lt;/span&gt;/&lt;span class="caps"&gt;TLS&lt;/span&gt;. And there are
    quite a few out there which do&amp;nbsp;this.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In conclusion: I wouldn&amp;#8217;t trust my sensitive passwords to a closed
source program and I would always go with an open-source alternative.
Roboform isn&amp;#8217;t vastly superior in any particular way and the marketing
around it leaves a sour taste in my&amp;nbsp;mouth.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;BTW&lt;/span&gt;, the links on Derek&amp;#8217;s site are affiliate links - which is all nice
and good, I too have affiliate links in my blog postings occasionally -
but I would have liked a clear disclosure about this&amp;nbsp;fact.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 25 Jan 2010 13:58:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-25:2010/01/should-i-use-roboform.html</guid></item><item><title>Who feeds me? (with information)</title><link>https://www.grey-panther.net/2010/01/who-feeds-me-with-information.html</link><description>&lt;p&gt;I received a private request to share the feeds which I read, an I
though to do it publicly, since there might be other people interested
in it (yeah, right :-p). Also, the least I can do is to post a link back
to the authors website. So grab my &lt;a href="http://hype-free.googlecode.com/svn/trunk/greader/google-reader-subscriptions.xml"&gt;&lt;span class="caps"&gt;OPML&lt;/span&gt;
file&lt;/a&gt;
or see the complete list below. Disclaimer: the presence of a given site
in the list below shouldn&amp;#8217;t be seen as an endorsement. I read a couple
of feeds to &amp;#8220;hear the other party&amp;#8221;. Also there are a couple of dead
feeds in were not cleaned up. So in no particular ordere here are the&amp;nbsp;feeds:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.avast.com/eng/rss2-news.xml"&gt;blog.avast.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://000webhost-scam.blogspot.com/feeds/posts/default"&gt;000webhost hosting&amp;nbsp;scam&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://catherinedevlin.blogspot.com/feeds/posts/default"&gt;Catherine:&amp;nbsp;pyOraGeek&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cktricky.blogspot.com/feeds/posts/default"&gt;cktricky and Web Application&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sourceforge.net/community/blog/"&gt;Comments on: yLife: Open database for Yu-Gi-Oh duels proprietary&amp;nbsp;alternatives&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://handlers.sans.org/wsalusky/rants/index.php?/feeds/index.rss2"&gt;Deep&amp;nbsp;Rants&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cs.uri.edu/~dfc/blog/rss.xml"&gt;Digital Forensics&amp;nbsp;Journal&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://code-foundation.de/?feed=atom"&gt;Domber&amp;#8217;s&amp;nbsp;Basecamp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.donationcoder.com/podcast/DonationCoderRadioShowPodcast_64.xml"&gt;DonationCoder.com Radio Show&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/ECE264/0101/ECE264_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;ECE264&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/ECON251/0101/ECON251_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;ECON251&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.edave.org/?feed=rss2"&gt;eDave.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cod.edu/multimedia/podcast/CODcast/English%201154/rss.xml"&gt;English&amp;nbsp;1154&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.vertigosoftware.com/ericc/atom.aspx"&gt;Eric&amp;nbsp;Cherng&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webcast.berkeley.edu/courses/rss/archive.php?seriesid=1906978345"&gt;&lt;span class="caps"&gt;ESPM&lt;/span&gt; &lt;span class="caps"&gt;160AC&lt;/span&gt;: American Environmental and Cultural&amp;nbsp;History&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://evilcodecave.blogspot.com/feeds/posts/default"&gt;Evilcodecave&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.screencast.com/users/Featured/rss"&gt;Featured&amp;#8217;s Screencast.com&amp;nbsp;feed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.101webdesignshow.com/xml/feedmp3.xml"&gt;feed/http://www.101webdesignshow.com/xml/feedmp3.xml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://firefoxpower.blogspot.com/feeds/posts/default"&gt;Firefox&amp;nbsp;Power&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://flytecast.com/rss"&gt;flytecast: web strategies for small&amp;nbsp;business&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/fresh_voices"&gt;Fresh Voices - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://freshtopia.net/vlog/?feed=rss2"&gt;Freshtopia.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://forums.friendsintech.com/index.php?action=.xml;type=rss2;limit=100"&gt;Friends in&amp;nbsp;Tech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.friendsofthefringe.com/FOF/thefeed.xml"&gt;Friends Of The&amp;nbsp;Fringe&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/FS651/0101/FS651_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;FS651&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/FumingIncenseStencher"&gt;Fuming Incense&amp;nbsp;Stencher&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekpit.blogspot.com/feeds/posts/default"&gt;Geek&amp;nbsp;Pit&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://revision3.com/geekdrome/feed/high.mp3.xml"&gt;Geekdrome &lt;span class="caps"&gt;MP3&lt;/span&gt;&amp;nbsp;audio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webcast.berkeley.edu/courses/rss/archive.php?seriesid=1906978337"&gt;Geo 10: World Regions, Peoples, and&amp;nbsp;States&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/zdnet/Ou"&gt;George&amp;nbsp;Ou&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.globalnerdy.com/blog/index.xml"&gt;Global&amp;nbsp;Nerdy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://googleappengine.blogspot.com/feeds/posts/default"&gt;Google App Engine&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rtables.blogspot.com/feeds/posts/default"&gt;Hak5 Rainbow&amp;nbsp;Tables&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.helpdesktalk.com/feed/atom/"&gt;Help Desk&amp;nbsp;Talk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webcast.berkeley.edu/courses/rss/archive.php?seriesid=1906978348"&gt;History 5: European Civilization from the Renaissance to the&amp;nbsp;Present&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/humanized/weblog"&gt;Humanized&amp;nbsp;Weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webcast.berkeley.edu/courses/rss/archive.php?seriesid=1906978364"&gt;&lt;span class="caps"&gt;IDS&lt;/span&gt; 110: Introduction to&amp;nbsp;Computers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dailysecuritybriefing.com/plugins/podcast/podcast.php"&gt;igxglobal Daily Security&amp;nbsp;Briefing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://revision3.com/indigital/feed/small.mp4.xml"&gt;InDigital&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.atozed.com/indy/news/rss.xml"&gt;Indy&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://iapodcast.blogspot.com/feeds/posts/default"&gt;Information Architecture (&lt;span class="caps"&gt;IA&lt;/span&gt;) Podcast Show&amp;nbsp;Notes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://isjobs.blogspot.com/feeds/posts/default"&gt;InfoSec&amp;nbsp;Jobs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webcast.berkeley.edu/courses/rss/archive.php?seriesid=1906978370"&gt;InfoSys 296A-2 / Law276.8: Open Source Development and Distribution of
Digital Information:&amp;nbsp;&amp;#8230;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/infotalk"&gt;InfoTalk - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/intel"&gt;Intel - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://or1cedar.intel.com/ISN_ContentRSS/RssFeed.aspx?CID=ISNPodcasts"&gt;Intel Software Network &lt;span class="caps"&gt;RSS&lt;/span&gt; feed for&amp;nbsp;Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://i2net.blogspot.com/atom.xml"&gt;Internet2 Network&amp;nbsp;Upgrade&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/IPPH362/0101/IPPH362_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;IPPH362&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.gigavox.com/gigavox/channel/itconversations"&gt;&lt;span class="caps"&gt;IT&lt;/span&gt;&amp;nbsp;Conversations&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/IT345/0101/IT345_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;IT345&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.itidiots.com/index.php?option=com_rd_rss&amp;amp;id=2&amp;amp;Itemid=62"&gt;ITIdiots Show&amp;nbsp;Feed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://podcast.ivirtua.co.uk/?feed=rss2"&gt;iVirtua&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.vmuser.com/joomla/index.php?option=com_rss&amp;amp;feed=RSS2.0&amp;amp;no_html=1"&gt;Joomla! powered&amp;nbsp;Site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/juniper_sound_off"&gt;Juniper Networks - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/juniper_networks_j_news"&gt;Juniper Networks J-News - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jandlsadoption.blogspot.com/feeds/posts/default"&gt;Justin &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Lindsey&amp;#8217;s Adoption&amp;nbsp;Story&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://elearning.kevindevin.com/index.php/feed/"&gt;Kevin&amp;#8217;s eLearning&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.koral.com/?feed=rss2"&gt;Koral&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/LessThan3"&gt;Less Than&amp;nbsp;3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/LifeHackPodcast/"&gt;lifehack.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.limited-exposure.org/feed/"&gt;Limited-Exposure :: Networks, Security and Technology | News, Reviews,
and&amp;nbsp;Opinions&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.linuxonthedesktop.org/?feed=atom"&gt;Linux on the&amp;nbsp;desktop&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/LocalAreaSecurityPodcast"&gt;Local Area&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://weblogs.media.mit.edu/SIMPLICITY/index.rdf"&gt;Maeda&amp;#8217;s &lt;span class="caps"&gt;SIMPLICITY&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://people.planetpostgresql.org/mha/index.php?/feeds/index.rss2"&gt;Magnus Hagander&amp;#8217;s PostgreSQL&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.mainfunction.com/patp/blog/rss.aspx"&gt;MainFunction::Editor&amp;#8217;s&amp;nbsp;Corner&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/marketing_voices"&gt;Marketing Voices - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/MATH154/0101/MATH154_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;MATH154&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.vertigosoftware.com/matth/atom.aspx"&gt;Matt&amp;nbsp;Hempey&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/MCMP304/0101/MCMP304_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;MCMP304&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/MCMP311/0101/MCMP311_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;MCMP311&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msorin.1111mb.com/?feed=rss2"&gt;Me &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; The&amp;nbsp;World&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/mikechr/atom.xml"&gt;Mike Christensen: Web Dev&amp;nbsp;Guy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/rss/rss.aspx?Sub=Cutting%20Edge"&gt;&lt;span class="caps"&gt;MSDN&lt;/span&gt; Magazine - Cutting&amp;nbsp;Edge&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/emea/msdnshowtime/rss.aspx"&gt;msdn&amp;#8217;s&amp;nbsp;Showtime&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mubix.blogspot.com/feeds/posts/default"&gt;Mubix&amp;#8217;s&amp;nbsp;Links&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/muzikDEN-h264"&gt;muzikDEN&amp;nbsp;h.264&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pbs.org/cringely/nerdtv/rss/nerdtv-mp3.xml"&gt;NerdTV - &lt;span class="caps"&gt;MP3&lt;/span&gt; Podcast |
&lt;span class="caps"&gt;PBS&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/netgear"&gt;&lt;span class="caps"&gt;NETGEAR&lt;/span&gt; - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ncsi.us/rss/security.xml"&gt;Network Consulting&amp;nbsp;Services&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/network_general_sniffer_cast"&gt;Network General Sniffer Cast - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://node101.org/?feed=atom"&gt;&lt;span class="caps"&gt;NODE101&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nontourage.com/home/?flavor=atom"&gt;Nontourage&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://norbtekinfo.blogspot.com/atom.xml"&gt;norbtek.info&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://notp.net/podcasts.xml"&gt;NotParanoia&amp;nbsp;Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/OLS274/0101/OLS274_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;OLS274&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/OLS274G/0101/OLS274G_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;OLS274G&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Ownedcast"&gt;Ownedcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.internet-nexus.com/rss.xml"&gt;Paul Thurrott&amp;#8217;s Internet&amp;nbsp;Nexus&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://podcast.york.cuny.edu/lectures/phil103/phil103-2006-fall.xml"&gt;&lt;span class="caps"&gt;PHIL103&lt;/span&gt; Introduction to&amp;nbsp;Philosophy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/PHPR476/0101/PHPR476_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;PHPR476&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://planet-websecurity.org/feed/"&gt;&lt;span class="caps"&gt;PLANET&lt;/span&gt; &lt;span class="caps"&gt;WEBSECURITY&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/podsummit"&gt;PodSummit - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/podtech_news"&gt;PodTech News - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/POL101/0101/POL101_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;POL101&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/polycom"&gt;Polycom - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webcast.berkeley.edu/courses/rss/archive.php?seriesid=1906978372"&gt;PolySci 179: Undergraduate Colloquium on Political&amp;nbsp;Science&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/powerusertv"&gt;PowerUser.&lt;span class="caps"&gt;TV&lt;/span&gt; (Power User&amp;nbsp;Podcast)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pwdmag.co.uk/?feed=rss2"&gt;Practical Web&amp;nbsp;Design&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://podcast.oid.ucla.edu/courses/2006-2007/2006fall/psych116/podcast.xml"&gt;Psychology&amp;nbsp;116&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://news.nopcode.org/miau/pvc.cgi?prj=radare&amp;amp;rss=yes"&gt;radare&amp;nbsp;pvc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://weblog.raganwald.com/atom.xml"&gt;Raganwald&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/geffner/atom.xml"&gt;REblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.schmelzer.cc/feeds/index.rss2"&gt;Robert Schmelzer is Thinking about
&lt;span class="caps"&gt;IT&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sabagsecurity.com/podcast"&gt;SABAGsecurity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.vertigosoftware.com/scott/atom.aspx"&gt;Scott&amp;nbsp;Stanfield&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/seagate_backup_awareness_month"&gt;Seagate Backup Awareness Month - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/SearchEngineOptimizationTipsInfo-MrSeo"&gt;Search Engine Optimization(&lt;span class="caps"&gt;SEO&lt;/span&gt;) Mr &lt;span class="caps"&gt;SEO&lt;/span&gt;&amp;#8217;s&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/SecureItWithEricGreen"&gt;Secure &lt;span class="caps"&gt;IT&lt;/span&gt;&amp;nbsp;Live&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://schmidt.bs-server.com/index.php/feed/atom/"&gt;SecureBlog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.subratam.org/?feed=atom"&gt;Security and Secure &lt;span class="caps"&gt;IT&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securityrenaissance.com/feed/"&gt;Security&amp;nbsp;Renaissance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/blogspot/ZhKn"&gt;Security Wire&amp;nbsp;Weekly&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://security-protocols.com/feed/atom/"&gt;Security-Protocols&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.spamhater.zoomshare.com/rss.xml"&gt;Sick of spam? Get mad and get even:&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/SOC100/0101/SOC100_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;SOC100&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/SOC100T/0101/SOC100T_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;SOC100T&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://128.210.157.22:1013/Boilercast/2006/Fall/SOC312/0101/SOC312_2006_Fall_0101.xml"&gt;&lt;span class="caps"&gt;SOC312&lt;/span&gt;&amp;nbsp;BoilerCast!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jimshowalter.blogspot.com/feeds/posts/default"&gt;Software, Technology, and&amp;nbsp;Science&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://chongq.blogspot.com/atom.xml"&gt;Spam&amp;nbsp;chongqing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://podcast.york.cuny.edu/lectures/spch101/spch101-2006-fall.xml"&gt;&lt;span class="caps"&gt;SPCH101&lt;/span&gt; Oral Communication in Contemporary&amp;nbsp;Society&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sploitcast.libsyn.com/rss"&gt;SploitCast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webcast.berkeley.edu/courses/rss/archive.php?seriesid=1906978362"&gt;Stat 2: Introduction to&amp;nbsp;Statistics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/techtalk/atom.xml"&gt;Steven Sinofsky&amp;#8217;s Microsoft&amp;nbsp;TechTalk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.strangerthings.tv/?feed=rss2"&gt;Stranger Things - iPod&amp;nbsp;(640×480)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://podcast.swtc.edu/lecture/podcast.php?cat=806-177-01AP"&gt;&lt;span class="caps"&gt;SWTC&lt;/span&gt; CourseCasts: 806-177-01&amp;nbsp;A&amp;P;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podtech.net/feeds/symantec"&gt;Symantec - powered by&amp;nbsp;PodTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.symantec.com/content/en/us/about/rss/sr/sr.xml"&gt;Symantec Security Response&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://boxcatjunction.blogspot.com/feeds/posts/default"&gt;Tales From Boxcat&amp;nbsp;Junction&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tastyresearch.wordpress.com/feed/"&gt;Tasty&amp;nbsp;Research&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://technobabylon.typepad.com/tb/atom.xml"&gt;Technobabylon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.accidentalcreative.com/feed/atom/"&gt;the Accidental&amp;nbsp;Creative&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pheedo.com/f/bleedingedge"&gt;The Bleeding&amp;nbsp;Edge&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/coldfusionpodcast"&gt;The ColdFusion&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cmdln.wordpress.com/feed/"&gt;The Command&amp;nbsp;Line&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/cubicleescape"&gt;The Cubicle Escape&amp;nbsp;Pod&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cubicleescape.com/tcepblog.php"&gt;The Cubicle Escape Pod&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://thedigitalstandard.blogspot.com/feeds/posts/default"&gt;The Digital&amp;nbsp;Standard&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dilbertblog.typepad.com/the_dilbert_blog/atom.xml"&gt;The Dilbert&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mbiz.trendmicro.com/pr/tm/en-us/mbiz/mbiz-rss.xml"&gt;The Front Line Trendcast for Medium Business: Medium&amp;nbsp;Business&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://thc.segfault.net/rss.xml.php"&gt;The Hacker&amp;#8217;s Choice -&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lawsofsimplicity.com/feed/"&gt;The Laws of&amp;nbsp;Simplicity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mediumbagel.org/nucleus/feed/atom/"&gt;The Medium&amp;nbsp;Bagel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://parallelsvirtualization.blogspot.com/atom.xml"&gt;The Official Parallels Virtualization&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rss.gigavox.com/channel/podcastacademy.xml"&gt;The Podcast&amp;nbsp;Academy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.theregister.co.uk/software/open_season/headlines.rss"&gt;The Register - Software: Open&amp;nbsp;Season&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lurhq.com/securityhookup/vodcast.xml"&gt;The Security Hookup&amp;nbsp;Vodcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/theshowzefrank"&gt;the show with&amp;nbsp;zefrank&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://soxjockey.blogspot.com/feeds/posts/default"&gt;The &lt;span class="caps"&gt;SOX&lt;/span&gt;&amp;nbsp;Jockey&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feed.tucowsblog.com/tucowsblog"&gt;The Tucows&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.thetwitfeeder.com/feeds/posts/default"&gt;the TwitFeeder&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thelinuxdiaries.com/atom.xml"&gt;TheLinuxDiaries&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.emailbattles.com/feed/"&gt;trimMail&amp;#8217;s Email&amp;nbsp;Battles&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://unpluggedpodcast.blogspot.com/atom.xml"&gt;Unplugged&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.virtualwar.com/rss.xml"&gt;Virtual War&amp;nbsp;Unlimited&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/EnginesOfCreationPodcast"&gt;Web Design &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Development Podcast by Engines of&amp;nbsp;Creation.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webstandardsgroup.org/audio/meetings.xml"&gt;Web Standards Group&amp;nbsp;PodCasts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webcast.berkeley.edu/events/rss/events.php?category=All"&gt;webcast.berkeley: &lt;span class="caps"&gt;UC&lt;/span&gt; Berkeley Events |&amp;nbsp;All&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.webstock.org.nz/webstockfeed.xml"&gt;Webstock -&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://planetpostgresql.org/rss20.xml"&gt;::Planet&amp;nbsp;PostgreSQL::&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.charcoalphile.com/feed/"&gt;Bad &lt;span class="caps"&gt;CTK&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://okbob.blogspot.com/feeds/posts/default"&gt;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://krow.livejournal.com/data/rss"&gt;Brian &amp;#8220;Krow&amp;#8221; Aker&amp;#8217;s Idle&amp;nbsp;Thoughts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.commandprompt.com/rss/blogs/joshua_drake"&gt;&lt;span class="caps"&gt;CMD&lt;/span&gt;: Joshua Drake&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://database-geek.com/feed/"&gt;Database Geek&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://databaseperformance.blogspot.com/feeds/posts/default"&gt;Databases and&amp;nbsp;Performance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://denishjpatel.blogspot.com/feeds/posts/default"&gt;Denish&amp;nbsp;Patel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://people.planetpostgresql.org/devrim/index.php?/feeds/index.rss2"&gt;Devrim&amp;#8217;s PostgreSQL&amp;nbsp;Diary&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.paragon-cs.com/wordpress/feed/"&gt;Diamond&amp;nbsp;Notes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dimitrik.free.fr/blog/rss.xml"&gt;DimitriK&amp;#8217;s (dim)&amp;nbsp;Weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dammit.lt/feed/"&gt;domas mituzas: vaporware,&amp;nbsp;inc.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://enterprisedbnews.blogspot.com/feeds/posts/default"&gt;EnterpriseDB&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://everythingisdata.wordpress.com/feed/"&gt;Everything is&amp;nbsp;Data&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://frakkle.com/rss.xml"&gt;Frakkle&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://postgresql.fastware.com/blog/feed"&gt;Fujitsu Supported PostgreSQL&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://people.planetpostgresql.org/greg/index.php?/feeds/index.rss2"&gt;Greg&amp;#8217;s Postgres&amp;nbsp;stuff&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://prodlife.wordpress.com/feed/"&gt;I&amp;#8217;m just a simple &lt;span class="caps"&gt;DBA&lt;/span&gt; on a complex production&amp;nbsp;system&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.justatheory.com/index.atom"&gt;Just a&amp;nbsp;Theory&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.hagander.net/feeds/index.rss2"&gt;Magnus Hagander&amp;#8217;s PostgreSQL&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://monty-says.blogspot.com/feeds/posts/default"&gt;Monty&amp;nbsp;says&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mysqlperformanceblog.com/feed/"&gt;MySQL Performance&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://natishalom.typepad.com/nati_shaloms_blog/atom.xml"&gt;Nati Shalom&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://openquery.com/blog/feed"&gt;Open Query&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.oraclenerd.com/atom.xml"&gt;&lt;span class="caps"&gt;ORACLENERD&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.cleverelephant.ca/feeds/posts/default"&gt;Paul&amp;nbsp;Ramsey&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/CvczYHyo/twitter.com/PGSQL_Announce"&gt;PGSQL_Announce -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://postgresqldbnews.blogspot.com/feeds/posts/default"&gt;Postgres Database&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rpbouman.blogspot.com/atom.xml"&gt;Roland Bouman&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.databasecolumn.com/atom.xml"&gt;The Database&amp;nbsp;Column&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.xaprb.com/blog/feed/"&gt;Xaprb&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xzilla.net/feeds/index.rss2"&gt;zillablog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/aaron_margosis/rss.xml"&gt;Aaron Margosis&amp;#8217;&amp;nbsp;WebLog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/absoblogginlutely"&gt;Absoblogginlutely!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://adammcraventech.wordpress.com/feed/"&gt;Adam M Craven&amp;#8217;s Technical&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://advice.cio.com/taxonomy/term/3045/0/feed"&gt;Advice and Opinion - Executives&amp;nbsp;Online&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.anchor.com.au/blog/feed/"&gt;Anchor Web Hosting&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.andyitguy.com/blog/?feed=rss2"&gt;Andy&amp;nbsp;ITGuy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogs.apache.org/infra/feed/entries/atom"&gt;Apache Infrastructure&amp;nbsp;Team&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.backblaze.com/feed/"&gt;Backblaze&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ccielab.ro/feed/"&gt;&lt;span class="caps"&gt;CCIE&lt;/span&gt;&amp;nbsp;Lab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://deb-tech.spaces.live.com/feed.rss"&gt;Deb-Tech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dyn.com/dynamicdiscourse.rss"&gt;DynDNS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/aI9bpJVe/twitter.com/dyninc"&gt;dyninc -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://eatingsecurity.blogspot.com/feeds/posts/default"&gt;Eating&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.edbott.com/weblog/?feed=rss2"&gt;Ed Bott&amp;#8217;s Windows&amp;nbsp;Expertise&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://everythingsysadmin.com/atom.xml"&gt;Everything&amp;nbsp;Sysadmin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.friendsintech.com/index.php/feed/"&gt;Friends in&amp;nbsp;Tech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.formortals.com/Home/tabid/36/rssid/1/Default.aspx"&gt;George Ou&amp;#8217;s technology&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://grandstreamdreams.blogspot.com/feeds/posts/default"&gt;Grand Stream&amp;nbsp;Dreams&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.tjmcintyre.com/atom.xml"&gt;&lt;span class="caps"&gt;IT&lt;/span&gt; Law in&amp;nbsp;Ireland&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.formortals.com/Home/tabid/36/rssid/5/Default.aspx"&gt;Justin James&amp;#8217; Critical&amp;nbsp;Thinking&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.unix-girl.com/blog/atom.xml"&gt;kasia in a&amp;nbsp;nutshell&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.lifepattern.org/feed/"&gt;Life&amp;nbsp;Pattern&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mygreenpaste.blogspot.com/feeds/posts/default"&gt;My Green Paste,&amp;nbsp;Inc.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nerdlogger.com/feeds/posts/default"&gt;&lt;span class="caps"&gt;N.E.R.D.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://obijuan.wordpress.com/feed/"&gt;obijuan:&amp;nbsp;[techno]plebe&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://packetlife.net/feeds/blog/"&gt;PacketLife.net&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://davehope.co.uk/feed/"&gt;Personal website of Dave&amp;nbsp;Hope&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://travisepperson.blogspot.com/feeds/posts/default"&gt;Random things in
&lt;span class="caps"&gt;IT&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://retro-computing.blogspot.com/feeds/posts/default"&gt;Retro&amp;nbsp;Computing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://righteousit.wordpress.com/feed/"&gt;Righteous &lt;span class="caps"&gt;IT&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.infosecblog.org/atom.xml"&gt;Roger&amp;#8217;s Information Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://luchalibresecurity.blogspot.com/feeds/posts/default"&gt;Security Blogging under a&amp;nbsp;mask&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.computerworld.com/blog/59/feed"&gt;Sharky&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.standalone-sysadmin.com/blog/feed/"&gt;Standalone&amp;nbsp;Sysadmin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.georgestarcher.com/?feed=atom"&gt;Starinfosec&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sysadvent.blogspot.com/feeds/posts/default"&gt;sysadvent&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://decipherinfosys.wordpress.com/feed/"&gt;Systems Engineering and
&lt;span class="caps"&gt;RDBMS&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.netnerds.net/feed/atom/"&gt;There is a small blog&amp;nbsp;here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://theitsp.blogspot.com/feeds/posts/default"&gt;Thinking about &lt;span class="caps"&gt;IT&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.vpslink.com/feed/"&gt;VPSLink&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.withinwindows.com/wp-rss2.php"&gt;Within&amp;nbsp;Windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://yaig.blogspot.com/feeds/posts/default"&gt;Yet Another &lt;span class="caps"&gt;IT&lt;/span&gt;&amp;nbsp;Guy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hirek.prim.hu/rss/"&gt;Hirek.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rss.slashdot.org/Slashdot/slashdot"&gt;Slashdot&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetrocks.com/dotnetrocks_MP3Direct.xml"&gt;.&lt;span class="caps"&gt;NET&lt;/span&gt;&amp;nbsp;Rocks!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://acoupleofadmins.com/feed/"&gt;A Couple Of Admins&amp;nbsp;Podcasting&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://adventuresinsecurity.com/Podcasts/AISSeries/AdventuresinSecurity.xml"&gt;Adventures in&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://infosecplace.com/blog/feed/"&gt;An Information Security&amp;nbsp;Place&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://podcasts.mcafee.com/audioparasitics/rss.xml"&gt;AudioParasitics - The Official Podcast of McAfee Avert&amp;nbsp;Labs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.binrev.com/radio/podcast/"&gt;Binary Revolution&amp;nbsp;Radio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.blackhat.com/podcast/bh-usa-07-audio.rss"&gt;Black Hat Briefings, &lt;span class="caps"&gt;USA&lt;/span&gt; 2007 [Audio] Presentations from the security&amp;nbsp;conference.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/BlueBox"&gt;Blue Box: The VoIP Security&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.140-seconds.com/blog2/feed/"&gt;Brad Pollard&amp;#8217;s 140&amp;nbsp;Seconds&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.remes-it.be/brucon.xml"&gt;brucon&amp;nbsp;podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Bsdtalk"&gt;bsdtalk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cnet.com/i/pod/cnet_buzz.xml"&gt;Buzz Out Loud from &lt;span class="caps"&gt;CNET&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://career.managertools.com/rss/rss.xml"&gt;Career&amp;nbsp;Tools&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.castablasta.com/?feed=rss2"&gt;CastaBlasta&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/CastingFromTheServerRoom"&gt;Casting from the Server&amp;nbsp;Room&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cloudsecurity.libsyn.com/rss"&gt;Cloud Security&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://news.com.com/2325-12640_3-0.xml"&gt;&lt;span class="caps"&gt;CNET&lt;/span&gt; News.com: Security&amp;nbsp;Bites&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://coldfusionweekly.libsyn.com/rss"&gt;ColdFusion&amp;nbsp;Weekly&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.comodovision.com/feed/"&gt;ComodoVision&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cyberspeak.libsyn.com/rss"&gt;CyberSpeak&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://isc1.sans.org/dailypodcast.xml"&gt;Daily Internet Storm Center Threat&amp;nbsp;Update&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://danbricklin.com/podcast.xml"&gt;Dan Bricklin&amp;#8217;s Log&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://2007.dconstruct.org/podcast/index.xml"&gt;dConstruct&amp;nbsp;2007&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://twit.tv/node/7174/feed"&gt;Dr. Kiki&amp;#8217;s Science&amp;nbsp;Hour&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.eset.com/joomla/index.php?option=com_rss&amp;amp;feed=RSS2.0&amp;amp;no_html=1&amp;amp;cat=266"&gt;&lt;span class="caps"&gt;ESET&lt;/span&gt;&amp;nbsp;Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.eurotrashsecurity.eu/episodes/eurotrash.xml"&gt;Eurotrash Security&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://exoticliability.libsyn.com/rss"&gt;Exotic&amp;nbsp;Liability&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://leoville.tv/podcasts/floss.xml"&gt;&lt;span class="caps"&gt;FLOSS&lt;/span&gt;&amp;nbsp;Weekly&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://whitfields.org/4cast/?feed=rss2"&gt;Forensic&amp;nbsp;4cast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://70.85.201.50/~fourbit/podcast.xml"&gt;FourBitsWorth&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://podcast.freenode.net/feed"&gt;free-as-in-node&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pbs.org/wgbh/pages/frontline/rss/programs.xml"&gt;&lt;span class="caps"&gt;FRONTLINE&lt;/span&gt; - Reports |
&lt;span class="caps"&gt;PBS&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hanselminutes.com/hanselminutes_MP3Direct.xml"&gt;Hanselminutes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kevindevin.com/?feed=rss2"&gt;In the&amp;nbsp;Trenches&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://isc.sans.org/podcast.xml"&gt;Internet Storm Center Threat&amp;nbsp;Update&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://podcasting.jhu.edu/makefeeds.php?courseid=79290"&gt;Johns Hopkins University Podcast - Exploring Liberal&amp;nbsp;Arts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jupiterbroadcasting.com/?feed=rss2"&gt;Jupiter&amp;nbsp;Broadcasting&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.justicetalking.org/Blog_Cast.asp"&gt;Justice&amp;nbsp;Talking&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lugradio.org/episodes.rss"&gt;LugRadio (high-quality&amp;nbsp;mp3)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.manager-tools.com/podcasts/feed/rss2"&gt;Manager&amp;nbsp;Tools&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marketplace.publicradio.org/tools/rss/coll_rss.php?coll_id=20216"&gt;Marketplace - Marketplace&amp;nbsp;Whiteboard&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.millahseconds.com/Millahseconds_MP3Direct.xml"&gt;Millahseconds&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mondays.pwop.com/Mondays_MP3Direct.xml"&gt;Mondays&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/MartinMckeaysNetworkSecurityBlog"&gt;Network Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.networkworld.com/weblogs/twistedpair/index.xml"&gt;Network World&amp;#8217;s Twisted&amp;nbsp;Pair&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://linux-foundation.org/weblogs/openvoices/feed/"&gt;Open Voices: The Linux Foundation&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/oursql"&gt;OurSQL: The MySQL Database Podcast for the Community, by the&amp;nbsp;Community&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.owasp.org/download/jmanico/podcast.xml"&gt;&lt;span class="caps"&gt;OWASP&lt;/span&gt; Security&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.pandora.com/podcast/index.xml"&gt;Pandora Podcast&amp;nbsp;Series&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pauldotcom.com/atom.xml"&gt;PaulDotCom&amp;#8217;s Web&amp;nbsp;Site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.perlcast.com/rss/current.xml"&gt;Perlcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://podcast.phparch.com/podcast/rss/index.xml"&gt;php|architect&amp;#8217;s Pro &lt;span class="caps"&gt;PHP&lt;/span&gt;&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.podventurezone.com/PodventureZone/index/rss.xml"&gt;PodVentureZone&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/PolymorphicPodcast"&gt;Polymorphic&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pondjumpers.com/feed/"&gt;Pond&amp;nbsp;Jumpers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.watchguard.com/rss/watchguardrfs.xml"&gt;Radio Free&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://risky.biz/rss.xml"&gt;Risky&amp;nbsp;Business&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/rubyonrailspodcast"&gt;Ruby on Rails&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.runyourownserver.org/runyourownserver"&gt;Run Your Own&amp;nbsp;Server&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/RunasRadio"&gt;RunAs&amp;nbsp;Radio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securityjustice.com/feed"&gt;Security&amp;nbsp;Justice&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://leoville.tv/podcasts/sn.xml"&gt;Security&amp;nbsp;Now!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.se-radio.net/rss"&gt;Software Engineering&amp;nbsp;Radio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.sophos.com/en/rss2_0-sophos-podcasts.xml"&gt;Sophos&amp;nbsp;Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/sourcetrunk"&gt;SourceTrunk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sqldownunder.com/SQLDownUnderMP3Feed.xml"&gt;&lt;span class="caps"&gt;SQL&lt;/span&gt; Down&amp;nbsp;Under&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.stackoverflow.com/index.php/feed/"&gt;stackoverflow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.stackoverflow.com/"&gt;stackoverflow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Talkcrunch"&gt;TalkCrunch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.algotradingpodcast.com/wp-rss2.php"&gt;The Algorithmic Trading&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/AlgoTradingPodcast"&gt;The Algorithmic Trading&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.joelhaasnoot.nl/html/feed/"&gt;The &lt;span class="caps"&gt;HTML&lt;/span&gt;&amp;nbsp;Show&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.theitsp.com/feed/"&gt;The &lt;span class="caps"&gt;IT&lt;/span&gt; Security&amp;nbsp;Pubcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/javaposse"&gt;The Java&amp;nbsp;Posse&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.linuxactionshow.com/?feed=rss2"&gt;The Linux Action Show!&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cigital.com/realitycheck/feed/"&gt;The Reality Check Security&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.rearguardsecurity.com/rss.xml"&gt;The Rear&amp;nbsp;Guard&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.securityroundtable.com/?feed=rss2"&gt;The Security&amp;nbsp;Roundtable&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cigital.com/silverbullet/feed/"&gt;The Silver Bullet Security&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.softwarefreedom.org/feeds/podcast-mp3/"&gt;The Software Freedom Law&amp;nbsp;Show&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sfspodcast.libsyn.com/rss"&gt;The Southern Fried Security&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/ThirstyDeveloperPodcast"&gt;The Thirsty Developer -&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/web20Show"&gt;The Web 2.0&amp;nbsp;Show&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wp-community.org/feed/"&gt;The WordPress&amp;nbsp;Community&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://thelip.net/?feed=rss2"&gt;thelip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://twit.tv/node/6902/feed"&gt;This Week in&amp;nbsp;Google&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://twit.tv/node/4605/feed"&gt;this &lt;span class="caps"&gt;WEEK&lt;/span&gt; in &lt;span class="caps"&gt;LAW&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://thisweekinmedia.libsyn.com/rss"&gt;this &lt;span class="caps"&gt;WEEK&lt;/span&gt; in &lt;span class="caps"&gt;MEDIA&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://thisweekinstartups.com/audio.xml"&gt;This Week in Startups - Audio&amp;nbsp;Only&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://leoville.tv/podcasts/twit.xml"&gt;this &lt;span class="caps"&gt;WEEK&lt;/span&gt; in &lt;span class="caps"&gt;TECH&lt;/span&gt; - &lt;span class="caps"&gt;MP3&lt;/span&gt;&amp;nbsp;Edition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cmm.thepodcastnetwork.com/feed/"&gt;&lt;span class="caps"&gt;TPN&lt;/span&gt; :: The Cranky Middle Manager&amp;nbsp;Show&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.twatech.org/wp-feed.php"&gt;&lt;span class="caps"&gt;TWAT&lt;/span&gt;&amp;nbsp;Radio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/UbuntuUkPodcastMp3-low?format=xml"&gt;Ubuntu &lt;span class="caps"&gt;UK&lt;/span&gt; Podcast »&amp;nbsp;mp3-low&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://gdata.youtube.com/feeds/base/users/pennsays/uploads?alt=rss&amp;amp;v=2&amp;amp;orderby=published&amp;amp;client=ytapi-youtube-profile"&gt;Uploads by&amp;nbsp;pennsays&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://uxpod.libsyn.com/rss"&gt;UXpod - User Experience&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/ValidSyntax"&gt;Valid&amp;nbsp;Syntax&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www2.warwick.ac.uk/sitebuilder2/api/rss/podcast.rss?page=/newsandevents/audio/"&gt;Warwick&amp;nbsp;Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://weatherbrains.com/weatherbrains/?feed=rss2"&gt;WeatherBrains&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webaxe.blogspot.com/atom.xml"&gt;Web Axe - Accessibility&amp;nbsp;Tips&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Boagworldcom-ForThoseManagingWebsites"&gt;Web Design Advice&amp;nbsp;(boagworld.com)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.webdevradio.com/podcast.php"&gt;WebDevRadio Podcast home - web development&amp;nbsp;discussion&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.psucast.com/techpodzone/audio/rss.xml"&gt;Welcome to the&amp;nbsp;TechPodZone!!!!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.swr3.de/rdf-feed/podcast/wwdtl.xml.php"&gt;Wie war dein Tag, Liebling? Mit Anke Engelke und &lt;span class="caps"&gt;SWR3&lt;/span&gt;-Moderator
Kristian&amp;nbsp;Thees&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wikipediaweekly.com/feed/"&gt;Wikipedia&amp;nbsp;Weekly&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.windirstat.info/feed/"&gt;WinDirStat&amp;nbsp;weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://leoville.tv/podcasts/ww.xml"&gt;Windows Weekly with Paul&amp;nbsp;Thurrott&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/phpabstract"&gt;Zend Developer Zone |&amp;nbsp;php_abstract&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://0x2121.com/rss.xml"&gt;0x2121.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://abstrusegoose.com/feed"&gt;Abstruse&amp;nbsp;Goose&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/bugbash"&gt;Bug&amp;nbsp;Bash&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://codecomics.com/servlet/Feeds?type=comics&amp;amp;lang=en"&gt;Code Comics&amp;nbsp;(Comics)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cad-comic.com/rss/rss.xml"&gt;Ctrl+Alt+Del&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.demotivatorblog.com/feed/"&gt;Demotivator&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/tapestrydilbert"&gt;Dilbert&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/DilbertDailyStrip"&gt;Dilbert Daily&amp;nbsp;Strip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.penguinpetes.com/Doomed_to_Obscurity/rss.xml"&gt;Doomed to&amp;nbsp;Obscurity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Explosm"&gt;Explosm.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Pidjin"&gt;Fredo and Pidjin. The Evil&amp;nbsp;Comic.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kevinandkell.com/rss.xml"&gt;Kevin and&amp;nbsp;Kell&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/LookingForGroup?format=xml"&gt;Looking For&amp;nbsp;Group&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.piratejesus.com/nerdcore/rss/rss.xml"&gt;Nerdcore: The Core&amp;nbsp;Wars&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/ok-cancel"&gt;&lt;span class="caps"&gt;OK&lt;/span&gt;/Cancel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://osnews.com/files/comics.xml"&gt;OSNews&amp;nbsp;Comics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.phdcomics.com/gradfeed.php"&gt;&lt;span class="caps"&gt;PHD&lt;/span&gt;&amp;nbsp;Comics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.reverendfun.com/features/rss/?language=en"&gt;Reverend&amp;nbsp;Fun&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.gocomics.com/thefifthwave/rss.pxml"&gt;The 5th Wave -&amp;nbsp;goComics.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ubersoft.net/rss/rss.xml"&gt;Ubersoft.net: Technology Is Not Your&amp;nbsp;Friend&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pipes.yahoo.com/pipes/pipe.run?_id=PKHiHYjs3RG3EEjS_g6H4A&amp;amp;_render=rss"&gt;Userfriendly With&amp;nbsp;images&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/wondermark"&gt;Wondermark&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blag.xkcd.com/feed/"&gt;xkcd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xkcd.com/rss.xml"&gt;xkcd.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://yaisc.com/feed/"&gt;&lt;span class="caps"&gt;YAISC&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://avikivity.blogspot.com/feeds/posts/default"&gt;Avi Kivity&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.chriswolf.com/?feed=rss2"&gt;ChrisWolf.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://virtuallyfun.blogspot.com/feeds/posts/default"&gt;Fun with&amp;nbsp;virtualization&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/rakeshm/rss.xml"&gt;rakeshm&amp;#8217;s &lt;span class="caps"&gt;VM&lt;/span&gt; Management&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/roblarson/rss.xml"&gt;Robert&amp;nbsp;Larson&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://thevirtualdc.com/?feed=rss2"&gt;The Virtual Data&amp;nbsp;Center&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/virtual_pc_guy/rss.xml"&gt;Virtual &lt;span class="caps"&gt;PC&lt;/span&gt; Guy&amp;#8217;s&amp;nbsp;WebLog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://virtualscoop.org/?q=rss.xml"&gt;Virtual Scoop - latest scoop on virtual machine&amp;nbsp;technology&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.vmware.com/security/rss.xml"&gt;VMware Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/windows_vpc/rss.xml"&gt;Windows Virtual &lt;span class="caps"&gt;PC&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/virtualization/rss.xml"&gt;Windows Virtualization Team&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.run-virtual.com/wp-atom.php"&gt;www.run-virtual.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://decafbad.com/blog/feed/"&gt;0xDECAFBAD&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ajaxcookbook.org/feed/"&gt;Ajax&amp;nbsp;Cookbook&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.apachefriends.org/rss.php?lang=en"&gt;Apache Friends&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kryogenix.org/days/feed/"&gt;as days pass&amp;nbsp;by&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://shiflett.org/feeds/blog"&gt;Chris&amp;nbsp;Shiflett&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.chromium.org/feeds/posts/default"&gt;Chromium&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Carnage4Life"&gt;Dare Obasanjo aka&amp;nbsp;Carnage4Life&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://davisfreeberg.com/feed/"&gt;Davis Freeberg&amp;#8217;s Digital&amp;nbsp;Connection&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.deconcept.com/feed/rss2/"&gt;deconcept&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.delicious.com/blog/feed"&gt;delicious&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://domscripting.com/blog/rss"&gt;&lt;span class="caps"&gt;DOM&lt;/span&gt; Scripting&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.quirksmode.org/elsewhere/atom.xml"&gt;Elsewhere on the&amp;nbsp;&amp;#8216;Net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.extrapepperoni.com/feed/atom/"&gt;Extra&amp;nbsp;Pepperoni&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.getfirebug.com/blog/feed/"&gt;Firebug - Web Development&amp;nbsp;Evolved&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.gingertech.net/feed/"&gt;ginger&amp;#8217;s&amp;nbsp;thoughts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://analytics.blogspot.com/atom.xml"&gt;Google Analytics&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://googlecustomsearch.blogspot.com/atom.xml"&gt;Google Custom&amp;nbsp;Search&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://googleenterprise.blogspot.com/feeds/posts/default"&gt;Google Enterprise&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/GoogleOperatingSystem"&gt;Google Operating&amp;nbsp;System&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://websiteoptimizer.blogspot.com/feeds/posts/default"&gt;Google Website Optimizer&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hackaddict.blogspot.com/feeds/posts/default"&gt;hackaddict.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hacks.mozilla.org/feed/"&gt;hacks.mozilla.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://html5doctor.com/feed/"&gt;html5doctor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://getahead.ltd.uk/blog/joe/atom.xml"&gt;Joe Walker&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://thesnarky.com/feed/"&gt;Kalimat&amp;nbsp;al-Mutafalsif&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mattcutts.com/blog/feed/atom/"&gt;Matt Cutts: Gadgets, Google, and
&lt;span class="caps"&gt;SEO&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mnot.net/blog/index.rdf"&gt;mnot’s Web&amp;nbsp;log&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.molly.com/feed/"&gt;molly.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nicheblogsgoogleadsense.blogspot.com/feeds/posts/default"&gt;Niche blogs with Google&amp;nbsp;AdSense&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://log.does-not-exist.org/atom.xml"&gt;No Such&amp;nbsp;Weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://googleblog.blogspot.com/atom.xml"&gt;Official Google&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://googlereader.blogspot.com/atom.xml"&gt;Official Google Reader&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://googlewebmastercentral.blogspot.com/atom.xml"&gt;Official Google Webmaster Central&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.opencomponentry.com/?feed=rss2"&gt;opencomponentry&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wanderingbarque.com/nonintersecting/feed/"&gt;Pete Lacey&amp;#8217;s&amp;nbsp;Weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/petel/rss.xml"&gt;PeteL&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.powerset.com/atom.xml"&gt;Powerset Blog -&amp;nbsp;Home&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://push.cx/feed/"&gt;Push&amp;nbsp;cx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.quirksmode.org/blog/atom.xml"&gt;QuirksBlog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://scriptnode.com/feed/"&gt;scriptNode&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/snookca"&gt;Snook.ca&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.fireblog.com/feed/"&gt;The Official FireHost Blog - Secure Web&amp;nbsp;Hosting&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://my.opera.com/rootstore/xml/rss/blog/"&gt;The Opera&amp;nbsp;Rootstore&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://gdata.youtube.com/feeds/base/users/websiteoptimizer/uploads?alt=rss&amp;amp;v=2&amp;amp;client=ytapi-youtube-profile"&gt;Videos uploaded by&amp;nbsp;websiteoptimizer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/vitaminmasterfeed"&gt;Vitamin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dustindiaz.com/feed/"&gt;Web Standards with&amp;nbsp;Imagination&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.markbaker.ca/blog/feed/atom/"&gt;Web Things, by Mark&amp;nbsp;Baker&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.seoidiot.com/seoblog/feed/"&gt;www.seoidiot.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://biht.blogspot.com/feeds/posts/default"&gt;- biht&amp;nbsp;-&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://numerophobe.com/feed/"&gt;-: A Random View of an Insecure World&amp;nbsp;:&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://trailofbits.com/feed/"&gt;&amp;#8230;And you will know me by the trail of&amp;nbsp;bits&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.trailofbits.com/feed/"&gt;&amp;#8230;And You Will Know me by the Trail of&amp;nbsp;Bits&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.computerdefense.org/?feed=atom"&gt;.:Computer&amp;nbsp;Defense:.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://zeroknock.blogspot.com/feeds/posts/default"&gt;0Kn0ck&amp;#8217;s Blog - dt&amp;nbsp;sns!_*&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.0x000000.com/rss.php"&gt;0x000000&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://1raindrop.typepad.com/1_raindrop/atom.xml"&gt;1&amp;nbsp;Raindrop&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://4xsecurityteam.blogspot.com/feeds/posts/default"&gt;4 X Security&amp;nbsp;Team&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://extra.fortifysoftware.com/blog/atom.xml"&gt;:: extra&amp;nbsp;::&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://arazsamadi.blogspot.com/feeds/posts/default"&gt;A for-now blog of Araz&amp;nbsp;Samadi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.spamtrackers.eu/feed/rss2"&gt;A Spamtracker&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.abuse.ch/?feed=rss2"&gt;abuse.ch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://addxorrol.blogspot.com/feeds/posts/default"&gt;&lt;span class="caps"&gt;ADD&lt;/span&gt; / &lt;span class="caps"&gt;XOR&lt;/span&gt; / &lt;span class="caps"&gt;ROL&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.adobe.com/psirt/atom.xml"&gt;Adobe Product Security Incident Response Team
(&lt;span class="caps"&gt;PSIRT&lt;/span&gt;)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dnsbl.com/feeds/posts/default"&gt;Al Iverson&amp;#8217;s &lt;span class="caps"&gt;DNSBL&lt;/span&gt;&amp;nbsp;Resource&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alex-ionescu.com/?feed=atom"&gt;Alex Ionescu&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kuza55.blogspot.com/feeds/posts/default"&gt;Alex&amp;#8217;s&amp;nbsp;Corner&amp;#8230;..&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/AmbersailBlog"&gt;Ambersail Infosec&amp;nbsp;Roundup&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.computerworld.com/blog/167/feed"&gt;Amir Lev&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.martinsecurity.net/feed/"&gt;Andrew&amp;nbsp;Martin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.antirootkit.com/blog/feed/"&gt;Anti Rootkit&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://beta.blogger.com/feeds/19553129/posts/full"&gt;Anton Chuvakin Personal&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.paloaltonetworks.com/researchcenter/feed/"&gt;Application &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Threat Research&amp;nbsp;Center&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.aa419.org/?feed=rss2"&gt;Artists Against&amp;nbsp;419&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://asmatiks.wordpress.com/feed/"&gt;asmatiks&amp;#8217;&amp;nbsp;zone&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.attackresearch.com/?q=rss.xml"&gt;Attack&amp;nbsp;Research&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://honeynet.org.au/?q=rss.xml"&gt;Australian Honeynet Project - Australian Honeynet&amp;nbsp;Project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pipes.yahoo.com/pipes/pipe.run?_id=6Jyw0Q233BG_e9xc1vC6Jw&amp;amp;_render=rss"&gt;av-rage-english&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://avi-rubin.blogspot.com/feeds/posts/default"&gt;Avi Rubin&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/AvivRaffOnnet"&gt;Aviv Raff On .&lt;span class="caps"&gt;NET&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.awgh.org/?feed=rss2"&gt;AwghBlog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/aI9bpJVe/twitter.com/ax0n"&gt;ax0n -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://azmoaore.reversedcode.com/feed/"&gt;azmo|aore&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.benedelman.org/rss.xml"&gt;BenEdelman.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bindshell.net/rss"&gt;BindShell.Net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://billpstudios.blogspot.com/atom.xml"&gt;Bits from&amp;nbsp;Bill&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bjou.homeunix.net/blog/feed/"&gt;BjOG - Bjou&amp;#8217;s Blog, that&amp;nbsp;is!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bl4cksecurity.blogspot.com/feeds/posts/default"&gt;[Black&amp;nbsp;Security]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blackbag.nl/?feed=rss2"&gt;blackbag&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://foregroundsecurity.com/index.php?option=com_content&amp;amp;view=category&amp;amp;layout=blog&amp;amp;id=42&amp;amp;Itemid=93&amp;amp;format=feed&amp;amp;type=rss"&gt;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://esec.fr.sogeti.com/blog/rss.php"&gt;Blog &lt;span class="caps"&gt;ESEC&lt;/span&gt;&amp;nbsp;Lab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dyork.livejournal.com/data/atom"&gt;Blog.DanYork.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.zynamics.com/feed/"&gt;blog.zynamics.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogsecurity.net/feed/"&gt;BlogSecurity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/bluehat/rss.xml"&gt;BlueHat Security&amp;nbsp;Briefings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://botnetz.com/?feed=rss2"&gt;botnetz.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bschatz.blogspot.com/atom.xml"&gt;Bradley Schatz&amp;#8217;&amp;nbsp;Weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://breakingcode.wordpress.com/feed/"&gt;Breaking&amp;nbsp;Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.breakingpointsystems.com/community/blog/RSS"&gt;BreakingPoint Labs&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://c-skills.blogspot.com/feeds/posts/default"&gt;C&amp;nbsp;skills&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cisrt.org/enblog/feed.php"&gt;&lt;span class="caps"&gt;C.I.S.R.T.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jeru.ringzero.net/?feed=rss2"&gt;call dwerd ptr&amp;nbsp;[6c756973]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://shavlik.typepad.com/mark_shavliks_blog/atom.xml"&gt;Captain&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.darkoperator.com/blog/atom.xml"&gt;Carlos Perez&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://carnal0wnage.attackresearch.com/rss.xml"&gt;carnal0wnage.attackresearch.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cerias.purdue.edu/feeds/main"&gt;&lt;span class="caps"&gt;CERIAS&lt;/span&gt; Combined&amp;nbsp;Feed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://certifiedbug.com/blog/?feed=rss2"&gt;Certifiedbug.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.niiconsulting.com/checkmate/feed/atom/"&gt;Checkmate&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://chinayouren.com/eng/feed/"&gt;&lt;span class="caps"&gt;CHINAYOUREN&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cquirke.blogspot.com/feeds/posts/default"&gt;Chris Quirke&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://homepages.mcs.vuw.ac.nz/~cseifert/blog/rss.xml"&gt;Christian Seifert&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://christ1an.blogspot.com/feeds/posts/default"&gt;christian&amp;#8217;s&amp;nbsp;weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cpradier.blogspot.com/feeds/posts/default"&gt;Christophe Pradier on&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.cisco.com/security/atom.xml"&gt;Cisco Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.clerkendweller.com/rss.php?mode=full"&gt;Clerkendweller : Web Security, Usability and&amp;nbsp;Design&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cloudsecurityalliance.org/blog/?feed=rss2"&gt;Cloud Security Alliance&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://coding-insecurity.blogspot.com/feeds/posts/default"&gt;Coding&amp;nbsp;Insecurity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://batr.net/columnistguild/xml"&gt;Columnist Guild&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.commtouch.com/cafe/feed/"&gt;Commtouch&amp;nbsp;Café&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ccrt.wordpress.com/feed/"&gt;Community Crisis Response&amp;nbsp;Teams&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://security.org.my/index.php?/feeds/index.rss2"&gt;Computer and Network Security, Mamak&amp;nbsp;Style&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.forensickb.com/feeds/posts/default"&gt;Computer Forensics, Malware Analysis &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Digital&amp;nbsp;Investigations&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://soroush.secproject.com/blog/feed/"&gt;Computer Security Is My&amp;nbsp;Interest!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://contagiodump.blogspot.com/feeds/posts/default"&gt;contagio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.cr0.org/feeds/posts/default"&gt;cr0&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://crashatatime.blogspot.com/feeds/posts/default"&gt;Crash-At-A-Time&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cruft.blogspot.com/feeds/posts/default"&gt;cruft&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://garwarner.blogspot.com/feeds/posts/default"&gt;CyberCrime &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Doing&amp;nbsp;Time&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.seriousblogging.com/rss.php?u=daemon"&gt;Daemon on&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://spam.tinyweb.net/news/spam.xml"&gt;Damn&amp;nbsp;Spam!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ddanchev.blogspot.com/feeds/posts/default"&gt;Dancho Danchev - Mind Streams of Information Security&amp;nbsp;Knowledge&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.dasient.com/feeds/posts/default"&gt;Dasient&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://datasetsfortheresearchcommunity.blogspot.com/feeds/posts/default"&gt;Datasets for the Research&amp;nbsp;Community&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hhi.corecom.com/feed.xml"&gt;Dave Piscitello&amp;#8217;s Personal Web&amp;nbsp;Log&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/aI9bpJVe/twitter.com/dave_rel1k"&gt;dave_rel1k -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dcssec.blogspot.com/feeds/posts/default"&gt;&lt;span class="caps"&gt;DCS&lt;/span&gt;&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.decurity.com/index.php/atom"&gt;Decurity&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://defintel.blogspot.com/feeds/posts/default"&gt;Defence&amp;nbsp;Intelligence&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.defensio.com/feed/"&gt;Defensio, the&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devels-playground.blogspot.com/feeds/posts/default"&gt;Devels&amp;nbsp;playground&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.rootshell.be/feed/"&gt;/dev/random&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://diablohorn.wordpress.com/feed/"&gt;DiabloHorn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://didierstevens.wordpress.com/feed/"&gt;Didier&amp;nbsp;Stevens&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.somethingwith.be/anhilven/atom.xml"&gt;Digital Forensics and&amp;nbsp;more&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://preachsecurity.blogspot.com/feeds/posts/default"&gt;Digital Soapbox - Information Security, Risk &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Data Protection&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.disog.org/rss.xml"&gt;&lt;span class="caps"&gt;DISOG&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alienvault.com/blog/dk?flav=rss"&gt;&lt;span class="caps"&gt;DK&lt;/span&gt;&amp;nbsp;&amp;#8216;Log&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.donkeyonawaffle.org/?flav=rss20"&gt;Donkey On A&amp;nbsp;Waffle&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dontstuffbeansupyournose.com/?feed=rss2"&gt;Don&amp;#8217;t Stuff Beans Up Your&amp;nbsp;Nose!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.doxpara.com/?feed=rss2"&gt;DoxPara&amp;nbsp;Research&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.narus.com/blog/feed/"&gt;Dr. Antonio&amp;nbsp;Nucci&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.kynox.org/?feed=rss2"&gt;Dribble&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/dvlabsblog"&gt;DVLabs:&amp;nbsp;Blogs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dynamoo.com/blog/atom.xml"&gt;Dynamoo&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.educatedguesswork.org/atom.xml"&gt;Educated&amp;nbsp;Guesswork&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://research.eeye.com/rss/zeroday.rss"&gt;eEye Digital Security - Zero-Day&amp;nbsp;Tracker&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://eeyeresearch.typepad.com/blog/atom.xml"&gt;eEye&amp;nbsp;Research&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://news.electricalchemy.net/feeds/posts/default"&gt;Electric&amp;nbsp;Alchemy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://em386.blogspot.com/feeds/posts/default"&gt;EM_386&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/epistemeca"&gt;Episteme: Belief. Knowledge.&amp;nbsp;Wisdom&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://erratasec.blogspot.com/feeds/posts/default"&gt;Errata&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://quangntenemy.blogspot.com/feeds/posts/default"&gt;Everlasting&amp;nbsp;Wanderer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ef.kaffenews.com/?feed=rss2"&gt;Evil Fingers - The&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://evilfingers.blogspot.com/feeds/posts/default"&gt;EvilFingers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/ExploitPreventionLabs"&gt;Exploit Prevention&amp;nbsp;Labs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://extendedsubset.com/?feed=rss2"&gt;Extended&amp;nbsp;Subset&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sensepost.com/blog/index.rss"&gt;extern blog&amp;nbsp;SensePost;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://extraexploit.blogspot.com/feeds/posts/default"&gt;extraexploit&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://extremesecurity.blogspot.com/feeds/posts/default"&gt;Extreme Security &amp;#8212; Do It Securely or Not at all&amp;nbsp;!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://defacebooked.blogspot.com/feeds/posts/default"&gt;Facebook Application&amp;nbsp;Smashing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://r00tin.blogspot.com/feeds/posts/default"&gt;Farfromr00tin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://fasthorizon.blogspot.com/feeds/posts/default"&gt;Fast&amp;nbsp;Horizon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://financialcryptography.com/index.rdf"&gt;Financial&amp;nbsp;Cryptography&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.finjan.com/MCRCblog_RSS_feed.aspx"&gt;Finjan &lt;span class="caps"&gt;MCRC&lt;/span&gt; Blog:&amp;nbsp;Posts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.fitsec.com/en/blog/?feed=rss2"&gt;Fitsec - Information Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://fixwinfixer.wordpress.com/feed/"&gt;Fix&amp;nbsp;Winfixer!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.foragesecurity.com/feeds/posts/default"&gt;Forage Security&amp;nbsp;Inc.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://seccure.blogspot.com/atom.xml"&gt;forensic . seccure .&amp;nbsp;net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.avolio.com/feeds/posts/default"&gt;fred avolio&amp;#8217;s&amp;nbsp;musings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.avolio.com/weblog/index.rss"&gt;Fred Avolio&amp;#8217;s&amp;nbsp;Musings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://fudsec.com/rss.xml"&gt;fudsec.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://fulldecent.blogspot.com/feeds/posts/default"&gt;Full Decent&amp;nbsp;Life&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.g-sec.lu/feeds/posts/default"&gt;G-&lt;span class="caps"&gt;SEC&lt;/span&gt; -&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ghettowebmaster.com/feed/"&gt;GhettoWebmaster.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://x86vmm.blogspot.com/atom.xml"&gt;Gimme Hardware/Software&amp;nbsp;Interface.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://glasblog.1durch0.de/?feed=rss2&amp;amp;langswitch_lang=de"&gt;GlasBlog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/gnucitizen"&gt;&lt;span class="caps"&gt;GNUCITIZEN&lt;/span&gt; Media&amp;nbsp;Portfolio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://googleonlinesecurity.blogspot.com/feeds/posts/default"&gt;Google Online Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://infosec20.blogspot.com/feeds/posts/default"&gt;Greg Martin&amp;#8217;s blog - InfoSecurity&amp;nbsp;2.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://duartes.org/gustavo/blog/feed"&gt;Gustavo&amp;nbsp;Duarte&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://gynvael.coldwind.pl/rss_en.php"&gt;gynvael.coldwind//vx.log&amp;nbsp;(en)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hacdc.org/rss.xml"&gt;HacDC&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hackademix.net/feed/"&gt;hackademix.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/hackers/rss.xml"&gt;hackers @&amp;nbsp;microsoft&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hackersblog.org/feed/"&gt;HackersBlog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://iamhalsten.thecoderblogs.com/feed/"&gt;halsten&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.happypacket.net/feeds/posts/default"&gt;Happy Packet&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/aI9bpJVe/twitter.com/haxorthematrix"&gt;haxorthematrix -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hexblog.com/atom.xml"&gt;Hex&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hexale.blogspot.com/feeds/posts/default"&gt;&lt;span class="caps"&gt;HEXALE&lt;/span&gt; (security. reverse engineering.&amp;nbsp;stuff.)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.0x0e.org/rss"&gt;HexEsec&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.h-i-r.net/feeds/posts/default"&gt;HiR Information&amp;nbsp;Report&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hiredhacker.com/feed/"&gt;hiredhacker.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://holisticinfosec.blogspot.com/feeds/posts/default"&gt;HolisticInfoSec.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://honeyblog.org/feeds/index.rss2"&gt;honeyblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hostexploit.com/index.php?format=feed&amp;amp;type=rss"&gt;Hostexploit&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/hostsnews/rss.aspx"&gt;Hosts&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hphosts.blogspot.com/feeds/posts/default"&gt;hpHosts&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ikillspammers.blogspot.com/feeds/posts/default"&gt;I Kill&amp;nbsp;Spammers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.iss.net/rss.php"&gt;&lt;span class="caps"&gt;IBM&lt;/span&gt; Internet Security Systems Frequency X&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.watchfire.com/wfblog/atom.xml"&gt;&lt;span class="caps"&gt;IBM&lt;/span&gt; Rational Application Security&amp;nbsp;Insider&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://labs.idefense.com/rss/software.rss.php"&gt;iDefense Labs Software&amp;nbsp;Releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.idleloop.org/?feed=rss2"&gt;idleloop&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.23.nu/ilja/feed/"&gt;Iljas&amp;nbsp;Blag&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://incredibill.blogspot.com/atom.xml"&gt;IncrediBILL&amp;#8217;s Random&amp;nbsp;Rants&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://indefinitestudies.org/feed/"&gt;Indefinite&amp;nbsp;Studies&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://infinitesecond.blogspot.com/feeds/posts/default"&gt;Infinite&amp;nbsp;second&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://infocentric.typepad.com/blog/atom.xml"&gt;Information Centric&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://infosectoday.blogspot.com/atom.xml"&gt;Information Security is not an&amp;nbsp;Oxymoron&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.infowar-monitor.net/?feed=rss2"&gt;Information Warfare&amp;nbsp;Monitor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Wwwinfosecpodcastcom"&gt;InfoSecPodcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.forensicinnovations.com/blog/?feed=rss2"&gt;Innovations&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.inreverse.net/?feed=rss2"&gt;inREVERSE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ragestorm.net/blogs/?feed=rss2"&gt;Insanely&amp;nbsp;Low-Level&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedproxy.google.com/insanesecurityinfo"&gt;insanesecurity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.insecuremag.com/insecure.rss"&gt;(&lt;span class="caps"&gt;IN&lt;/span&gt;)&lt;span class="caps"&gt;SECURE&lt;/span&gt; Magazine Notifications
&lt;span class="caps"&gt;RSS&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://intotheboxes.wordpress.com/feed/"&gt;Into The&amp;nbsp;Boxes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.invisibledenizen.org/feeds/posts/default"&gt;Invisible&amp;nbsp;Denizen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://theinvisiblethings.blogspot.com/atom.xml"&gt;invisiblethings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/iplosion-security"&gt;iplosion&amp;nbsp;security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedproxy.google.com/IrongeeksSecuritySite"&gt;Irongeek&amp;#8217;s Security&amp;nbsp;Site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.isc2.org/isc2_blog/atom.xml"&gt;(&lt;span class="caps"&gt;ISC&lt;/span&gt;)2&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://j00ru.vexillium.org/?feed=rss2&amp;amp;lang=en"&gt;j00ru//vx tech&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://4lt4l.blogspot.com/feeds/posts/default"&gt;Jack In The&amp;nbsp;Box&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alienvault.com/blog/jaime?flav=rss"&gt;Jaime Blasco&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/security/rss.xml"&gt;Jeff Jones Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/JeremiahGrossman"&gt;Jeremiah&amp;nbsp;Grossman&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://gleeda.blogspot.com/feeds/posts/default"&gt;&lt;span class="caps"&gt;JL&lt;/span&gt;&amp;#8217;s&amp;nbsp;stuff&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dervitx.wordpress.com/feed/"&gt;jnavarro.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.joewein.net/blog/?feed=rss2"&gt;Joe Wein&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.startcom.org/?feed=rss2"&gt;Join The&amp;nbsp;Revolution!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jon.oberheide.org/blog/feed"&gt;jon.oberheide.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.spl0it.org/feeds/posts/default"&gt;Joshua &amp;#8220;Jabra&amp;#8221;&amp;nbsp;Abraham&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jsunpack.blogspot.com/feeds/posts/default"&gt;jsunpack&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://s-genius.blogspot.com/feeds/posts/default"&gt;just security&amp;nbsp;!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/kees?format=xml"&gt;Kees&amp;nbsp;Leune&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://annysoft.wordpress.com/feed/"&gt;K&amp;#8217;LL3r&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://korupt.co.uk/?feed=rss2"&gt;KOrUPt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nezumi-lab.org/blog/?feed=rss2"&gt;&lt;span class="caps"&gt;KPNC&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.krebsonsecurity.com/?feed=rss2"&gt;Krebs on&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://laramies.blogspot.com/feeds/posts/default"&gt;Laramies&amp;nbsp;Corner&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/larryosterman/rss.xml"&gt;Larry Osterman&amp;#8217;s&amp;nbsp;WebLog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securitylabs.websense.com/content/alertsRSS.xml"&gt;Latest Alerts From Websense Security&amp;nbsp;Labs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://whid.xiom.com/whid/rss"&gt;Latest web hacking&amp;nbsp;incidents&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://g-laurent.blogspot.com/feeds/posts/default"&gt;Laurent Gaffié&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lightbluetouchpaper.org/feed/"&gt;Light Blue&amp;nbsp;Touchpaper&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/LiveAmmo"&gt;LiveAmmo Computer Security&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lookout.net/feed/"&gt;Lookout&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lostmon.blogspot.com/feeds/posts/default"&gt;Lostmon&amp;nbsp;Blogger&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lurhq.com/research.rss"&gt;&lt;span class="caps"&gt;LURHQ&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lvdeijk.wordpress.com/feed/"&gt;Lvdeijk&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.mandiant.com/feed"&gt;M-unition&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://majii.wordpress.com/feed/"&gt;majii&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lonniegardner.blogspot.com/feeds/posts/default"&gt;Malware Analysis InDepth
(&lt;span class="caps"&gt;MAI&lt;/span&gt;)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://malwaredatabase.net/blog/index.php/feed/"&gt;Malware&amp;nbsp;Database&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.malforge.com/rss.xml"&gt;Malware&amp;nbsp;Forge&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://malware-web-threats.blogspot.com/feeds/posts/default"&gt;Malware Web&amp;nbsp;Threats&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://malware-research.co.uk/index.php?type=rss;action=.xml;PHPSESSID=d34b5fb060c6a07e7998f1093e983c11"&gt;Malware-Research&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://malwareresearchgroup.com/?feed=rss2"&gt;MalwareResearchGroup&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marcoramilli.blogspot.com/feeds/posts/default"&gt;Marco Ramilli&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ranum.com/rss20.xml"&gt;Marcus Ranum, computer security, photography, and other&amp;nbsp;weirdness&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/markrussinovich/atom.xml"&gt;Mark&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://matchent.com/wpress/?feed=rss2"&gt;matchent.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.matousec.com/matousec/blog-rss.php"&gt;Matousec -&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.matousec.com/info/news-rss.php"&gt;Matousec -&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.crypto.com/blog/rss20.xml"&gt;Matt Blaze&amp;#8217;s Exhaustive&amp;nbsp;Search&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.msuiche.net/feed/"&gt;Matthieu Suiche&amp;#8217;s blog&amp;nbsp;!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xato.com/feed"&gt;MBs Windows&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mcgrewsecurity.com/?feed=rss2"&gt;McGrew Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mcwresearch.com/feed/"&gt;mcwresearch.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://metasploit.blogspot.com/atom.xml"&gt;Metasploit&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.michaelonsecurity.com/crss"&gt;Michael on Security -&amp;nbsp;Comments&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://miekiemoes.blogspot.com/feeds/posts/default"&gt;miekiemoes&amp;#8217;&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mightyseek.com/feed/"&gt;Mighty&amp;nbsp;Seek&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securityincite.com/Rothman-feed"&gt;Mike Rothman&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.mindedsecurity.com/feeds/posts/default"&gt;Minded Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.misec.net/feed/"&gt;Mischel Internet Security -&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mnin.blogspot.com/feeds/posts/default"&gt;&lt;span class="caps"&gt;MNIN&lt;/span&gt; Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.mozilla.com/security/feed/"&gt;Mozilla Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/ecostrat/rss.xml"&gt;&lt;span class="caps"&gt;MSRC&lt;/span&gt; Ecosystem Strategy&amp;nbsp;Team&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://labs.mudynamics.com/feed/"&gt;Mu Dynamics Research&amp;nbsp;Labs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/MubixsLinks"&gt;Mubix&amp;nbsp;Links&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://gadievron.blogspot.com/feeds/posts/default"&gt;Musings of an Over-Grown&amp;nbsp;Dwarf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ravichar.blogharbor.com/blog/index.xml"&gt;Musings on Information&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.teamfurry.com/wordpress/feed/"&gt;&lt;span class="caps"&gt;MW&lt;/span&gt;-Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mwcollect.org/rss"&gt;mwcollect.org&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mwcollect.org/rss"&gt;mwcollect.org&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.mxlab.be/feed/"&gt;mxlab - all about anti virus and anti&amp;nbsp;spam&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://myf00.net/?feed=rss2"&gt;myf00&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nartv.org/feed/"&gt;Nart&amp;nbsp;Villeneuve&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/neilcar/rss.xml"&gt;Neil Carpenter&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.vijatov.com/feed/"&gt;Nenad Vijatov • 0x4e&amp;nbsp;0x56&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://labs.neohapsis.com/feed/"&gt;Neohapsis&amp;nbsp;Labs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.neohaxor.org/feed/"&gt;Neohaxor.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://news.netcraft.com/index.rdf"&gt;Netcraft&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://forensicscontest.com/feed"&gt;Network Forensics Puzzle&amp;nbsp;Contest&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.provos.org/index.php?/feeds/index.rss2"&gt;Niels&amp;nbsp;Provos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dhanjani.com/atom.xml"&gt;Nitesh&amp;nbsp;Dhanjani&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nnl-labs.com/cblog/index.php?/feeds/index.rss2"&gt;&lt;span class="caps"&gt;NNL&lt;/span&gt;-labs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://node5.blogspot.com/feeds/posts/default"&gt;Node&amp;nbsp;5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jonpoon.blogspot.com/atom.xml"&gt;Notes &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;Thoughts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.noticebored.com/blog/atom.xml"&gt;NoticeBored&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Np-incomplete"&gt;&lt;span class="caps"&gt;NP&lt;/span&gt;-Incomplete&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ntcore.blogspot.com/feeds/posts/default"&gt;NTCore&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nynaeve.net/?feed=rss2"&gt;Nynaeve&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.dkbza.org/feeds/posts/default"&gt;nzight&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://techbuddha.wordpress.com/feed/"&gt;Observations of digitally enlightened&amp;nbsp;mind&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://inseclab.netsons.org/feed/"&gt;ocean&amp;#8217;s&amp;nbsp;InsecLab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.fortify.com/blog/fortify/feed/"&gt;Off by&amp;nbsp;On&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.offensivecomputing.net/?q=node/feed"&gt;Offensive Computing - Community Malicious code research and&amp;nbsp;analysis&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.offensive-security.com/blog/feed/"&gt;Offensive Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://oldmcdonald.wordpress.com/feed/"&gt;Old McDonald&amp;#8217;s&amp;nbsp;Farm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.omnivora.de/?feed=rss2"&gt;Omnivora&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.openinfosecfoundation.org/index.php?format=feed&amp;amp;type=rss"&gt;Open Information Security&amp;nbsp;Foundation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.opendns.com/OpendnsBlog"&gt;OpenDNS&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.openrce.org/rss/feeds/articles"&gt;OpenRCE:&amp;nbsp;Articles&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.openrce.org/rss/feeds/site_updates"&gt;OpenRCE: Site&amp;nbsp;Updates&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://datalossdb.org/incident_highlights.rss"&gt;&lt;span class="caps"&gt;OSF&lt;/span&gt; Data Loss Database&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.oxff.net/atom.xml"&gt;oxff&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://p42.us/?feed=rss2"&gt;p42&amp;nbsp;labs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alienvault.com/blog/one?flav=rss"&gt;Pablo&amp;nbsp;Rincon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dave.mysticmorph.net/feed/"&gt;Paranoid Linux Ninja&amp;nbsp;Geek&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pastebinfail.com/feeds/posts/default"&gt;pastebin.fail&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://padraic2112.wordpress.com/feed/"&gt;Pat&amp;#8217;s Daily&amp;nbsp;Grind&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pauldotcommunity.blogspot.com/feeds/posts/default"&gt;PaulDotCom Community&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pentoo.blogspot.com/feeds/posts/default"&gt;Pentoo&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Peskymalwareinfo"&gt;PeskyMalware.info&amp;nbsp;Feed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://philosecurity.org/feed"&gt;philosecurity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hamsterswheel.com/techblog/?feed=rss2"&gt;Phn1x -&amp;nbsp;Hamsterswheel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.php-security.org/feeds/index.rss2"&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt; Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://php-ids.org/feed/"&gt;&lt;span class="caps"&gt;PHPIDS&lt;/span&gt; » Web Application Security&amp;nbsp;2.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.phx2600.org/feed/"&gt;&lt;span class="caps"&gt;PHX2600&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.piotrbania.com/feeds/posts/default"&gt;Piotr Bania Chronicles ::&amp;nbsp;http://blog.piotrbania.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://planaheist.com/feed/"&gt;PlanAHeist.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://planete.inrialpes.fr/~perito/?feed=rss2"&gt;Planete&amp;nbsp;Project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/451security"&gt;Plausible&amp;nbsp;Deniability&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.poromenos.org/node/feed"&gt;Poromenos&amp;#8217;&amp;nbsp;Stuff&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://reversemode.com/index2.php?option=com_rss&amp;amp;no_html=1"&gt;Powered by Mambo&amp;nbsp;4.5.2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://privacylog.blogspot.com/feeds/posts/default"&gt;Privacy, Security and &lt;span class="caps"&gt;UI&lt;/span&gt;&amp;nbsp;Review&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://secreview.blogspot.com/feeds/posts/default"&gt;Professional &lt;span class="caps"&gt;IT&lt;/span&gt; Security Providers -&amp;nbsp;Exposed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.the-interweb.com/serendipity/index.php?/feeds/index.rss2"&gt;Programming&amp;nbsp;stuff&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://moyix.blogspot.com/feeds/posts/default"&gt;Push the Red&amp;nbsp;Button&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://radajo.blogspot.com/rss.xml"&gt;RaDaJo (RAul, DAvid and JOrge) Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/RafalLos"&gt;Rafal&amp;nbsp;Los&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://c22blog.wordpress.com/feed/"&gt;Ramblings of the änal security&amp;nbsp;guy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.cypherjb.com/feeds/posts/default"&gt;Ramblings++&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://viozzo.wordpress.com/feed/"&gt;Random stream of&amp;nbsp;chars&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedproxy.google.com/RandomThoughtsFromJoelsWorld?format=xml"&gt;Random Thoughts from&amp;nbsp;Joel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rcecafe.net/?feed=rss2"&gt;&lt;span class="caps"&gt;RCE&lt;/span&gt;&amp;nbsp;Cafe&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/anmolm/rss.xml"&gt;Reading a Hacker&amp;#8217;s&amp;nbsp;Mind&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://malwareanalysis.com/CommunityServer/blogs/geffner/rss.aspx"&gt;REblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://websec.wordpress.com/feed/"&gt;Reiners&amp;#8217;&amp;nbsp;Weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.renesys.com/blog/atom.xml"&gt;Renesys&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://reportsecurityflaws.wordpress.com/feed/"&gt;Report Security&amp;nbsp;Flaws&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://reusablesec.blogspot.com/feeds/posts/default"&gt;Reusable&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://reversengineering.wordpress.com/feed/"&gt;Reverse Engineering b10g |
&lt;span class="caps"&gt;REM&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.reddit.com/r/ReverseEngineering/.rss"&gt;ReverseEngineering: what&amp;#8217;s new&amp;nbsp;online&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://revengstuff.wordpress.com/feed/"&gt;Reversing&amp;nbsp;folies&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://reversingitout.blogspot.com/feeds/posts/default"&gt;Reversing It&amp;nbsp;Out!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ribadeohacklab.com.ar/taxonomy/term/6/0/feed"&gt;Ribadeo Hack Lab -&amp;nbsp;Articles&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rwmj.wordpress.com/feed/"&gt;Richard &lt;span class="caps"&gt;WM&lt;/span&gt;&amp;nbsp;Jones&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ridethelightning.senseient.com/atom.xml"&gt;Ride The&amp;nbsp;Lightning&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ring3circus.com/feed/"&gt;Ring3&amp;nbsp;Circus&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://riosec.com/node/feed"&gt;RioSec - Security&amp;nbsp;WebLog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.rlr-uk.com/feeds/posts/default"&gt;&lt;span class="caps"&gt;RLR&lt;/span&gt;-&lt;span class="caps"&gt;UK&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/robert_hensing/atom.xml"&gt;Robert Hensing&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/rhalbheer/rss.xml"&gt;Roger&amp;#8217;s Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rogueantispyware.blogspot.com/feeds/posts/default"&gt;Rogue&amp;nbsp;Antispyware&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.room362.com/feed"&gt;Room362.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rdist.root.org/feed/"&gt;root labs&amp;nbsp;rdist&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rootedyour.com/rss.xml"&gt;Rooted Your {0x2E}&amp;nbsp;Com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ryanlrussell.blogspot.com/feeds/posts/default"&gt;ryanlrussell&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://siri-urz.blogspot.com/feeds/posts/default"&gt;S!Ri.&lt;span class="caps"&gt;URZ&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://s3cwatch.wordpress.com/feed/"&gt;s3c-watch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://iscxml.sans.org/rssfeed.xml"&gt;&lt;span class="caps"&gt;SANS&lt;/span&gt; Internet Storm Center, InfoCON:&amp;nbsp;green&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.alienvault.com/blog/santiago?flav=rss"&gt;Santi&amp;nbsp;&amp;#8216;Log&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.scansafe.com/journal/atom.xml"&gt;ScanSafe &lt;span class="caps"&gt;STAT&lt;/span&gt;&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://schmoil.blogspot.com/feeds/posts/default"&gt;Schmoilitos&amp;nbsp;Way&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/schneier/fulltext"&gt;Schneier on&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kochanski.org/blog/?feed=rss2"&gt;Science and&amp;nbsp;Language&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://seanhn.wordpress.com/feed/"&gt;Sean&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.zoller.lu/feeds/posts/default"&gt;Secdev - Thierry&amp;nbsp;Zoller&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.securescience.net/blog/atom.xml"&gt;SecSci Social&amp;nbsp;Scene&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sectechno.wordpress.com/feed/"&gt;SecTech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sectechno.com/feed/"&gt;SecTechno&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hackerfactor.com/blog/index.php?/feeds/index.rss2"&gt;Secure Computing:&amp;nbsp;Sec-C&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securehomenetwork.blogspot.com/feeds/posts/default"&gt;Secure Home&amp;nbsp;Networks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securethoughts.com/feed/"&gt;SecureThoughts.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/secureworks/blog?format=xml"&gt;SecureWorks Research&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securid.wordpress.com/feed/"&gt;Securi-D&amp;#8217;s&amp;nbsp;Weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.securiteam.com/index.php/feed/"&gt;SecuriTeam&amp;nbsp;Blogs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://scarybeastsecurity.blogspot.com/feeds/posts/default"&gt;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.sun.com/security/feed/entries/rss"&gt;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hijack-this.co.uk/?feed=rss2"&gt;Security and&amp;nbsp;Privacy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/SecurityBalance"&gt;Security&amp;nbsp;Balance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.securitycadets.com/feed/"&gt;Security&amp;nbsp;Cadets&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://voices.washingtonpost.com/securityfix/atom.xml"&gt;Security&amp;nbsp;Fix&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://secforall.info/feed/"&gt;Security For&amp;nbsp;All&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/s4cd/rss.xml"&gt;Security for Canadian&amp;nbsp;Developers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securitygarden.blogspot.com/atom.xml"&gt;Security&amp;nbsp;Garden&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://siblog.mcafee.com/?feed=atom"&gt;Security Insights&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/crispincowan/rss.xml"&gt;Security Is Simple: Only Use Perfect&amp;nbsp;Software&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securitymike.blogspot.com/feeds/posts/default"&gt;Security Mike&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.securityninja.co.uk/feed"&gt;Security&amp;nbsp;Ninja&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securityonion.blogspot.com/feeds/posts/default"&gt;Security&amp;nbsp;Onion&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nsslabs.blogspot.com/feeds/posts/default"&gt;Security Product&amp;nbsp;Testing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://phreedom.org/blog/atom.xml"&gt;Security Research by Alexander&amp;nbsp;Sotirov&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securityretentive.blogspot.com/feeds/posts/default"&gt;Security&amp;nbsp;Retentive&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cutawaysecurity.com/blog/feed/atom/"&gt;Security&amp;nbsp;Ripcord&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cutawaysecurity.com/blog/feed"&gt;Security&amp;nbsp;Ripcord&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securitysauce.blogspot.com/feeds/posts/default"&gt;Security&amp;nbsp;Sauce&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.matthewneely.com/blog/atom.xml"&gt;Security Second&amp;nbsp;Thoughts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/securitytipstalk/atom.xml"&gt;Security Tips &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;Talk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://asert.arbornetworks.com/feed/"&gt;Security to the Core | Arbor Networks Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/swi/rss.xml"&gt;Security Vulnerability Research &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;Defense&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.security-hacks.com/feed/"&gt;Security-Hacks.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://security-sh3ll.blogspot.com/feeds/posts/default"&gt;Security-Shell&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://security4all.blogspot.com/feeds/posts/default"&gt;Security4all&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.securityzone.org/?feed=rss2"&gt;SecurityZone.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/securityzone"&gt;SecurityZone.org - Information Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securology.blogspot.com/feeds/posts/default"&gt;Securology&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securosis.com/feeds/blog"&gt;Securosis&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securosis.com/feed/atom/"&gt;securosis.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://daveshackleford.com/?feed=rss2"&gt;ShackF00&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://shadowsecure.blogspot.com/feeds/posts/default"&gt;Shadow&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://silviocesare.wordpress.com/feed/"&gt;Silviocesare&amp;#8217;s&amp;nbsp;Weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sirdarckcat.blogspot.com/feeds/posts/default"&gt;sirdarckcat&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://skeptikal.org/atom.xml"&gt;skeptikal.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://paranoia.dubfire.net/feeds/posts/default"&gt;slight&amp;nbsp;paranoia&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dharley.wordpress.com/feed/"&gt;Small Blue-Green&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www1.cs.columbia.edu/~smb/blog/control/blog.xml"&gt;SMBlog &amp;#8212; Steve Bellovin&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://snosoft.blogspot.com/feeds/posts/default"&gt;SNOsoft Research&amp;nbsp;Team&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sf-freedom.blogspot.com/feeds/posts/default"&gt;Software Vulnerability Exploitation&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://robertmoir.com/blogs/someone_else/rss.aspx"&gt;Someone&amp;nbsp;Else&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://souriz.wordpress.com/feed/"&gt;souriz&amp;#8217;s&amp;nbsp;weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.spacequad.com/backend/spacequad.rss"&gt;Spacequad AntiSpam&amp;nbsp;Services&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.spaminmyinbox.com/feeds/posts/default"&gt;Spam in my&amp;nbsp;inbox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://spamhuntress.com/feed/"&gt;Spamhuntress&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://spamitmustfall.blogspot.com/feeds/posts/default"&gt;SpamIt Must&amp;nbsp;Fall&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.rsa.com/blog/rssfeed.aspx"&gt;Speaking of Security, the &lt;span class="caps"&gt;RSA&lt;/span&gt; Blog and&amp;nbsp;Podcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://spl0it.org/blog/rss.php"&gt;spl0it.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/spylogic"&gt;spylogic.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/spywaresucks/rss.aspx"&gt;Spyware&amp;nbsp;Sucks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://netrn.net/spywareblog/feed/rss2/"&gt;Spyware&amp;nbsp;Warrior&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.stacksofshame.com/feed/"&gt;Stacks of Shame - an epitaph of bad&amp;nbsp;coding&amp;#8230;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekfox26.blogspot.com/feeds/posts/default"&gt;Stefan&amp;#8217;s Computer&amp;nbsp;Center&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://stephenrmoore.blogspot.com/feeds/posts/default"&gt;stephen r.&amp;nbsp;moore&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.stopbadware.org/xml/rss"&gt;StopBadware&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://s148954166.onlinehome.us/feed/"&gt;strings&amp;nbsp;/dev/brain&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/kfalde/rss.xml"&gt;Stuff n&amp;nbsp;Things&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sudosecure.net/feed"&gt;sudosecure.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.suspekt.org/feed/"&gt;Suspekt&amp;#8230;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://swatrant.blogspot.com/feeds/posts/default"&gt;Swatkat&amp;#8217;s&amp;nbsp;rants&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://synjunkie.blogspot.com/feeds/posts/default"&gt;SynJunkie&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.securitymonks.com/feed/"&gt;System Advancements at the&amp;nbsp;Monastery&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/si_team/atom.xml"&gt;System Integrity Team&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hackathology.blogspot.com/feeds/posts/default"&gt;Taking Network Security to the&amp;nbsp;Streets&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/alunj/rss.aspx"&gt;Tales from the&amp;nbsp;Crypto&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://darkoperator.blogspot.com/feeds/posts/default"&gt;Techie working in a corporate&amp;nbsp;world&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://technicalinfodotnet.blogspot.com/feeds/posts/default"&gt;Technicalinfo.net&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://telicthoughts.blogspot.com/feeds/posts/default"&gt;Telic&amp;nbsp;Thoughts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.terminal23.net/atom.xml"&gt;terminal23&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/tzink/rss.xml"&gt;Terry Zink&amp;#8217;s Anti-spam&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://antivirusguy.wordpress.com/feed/"&gt;The Antivirus Guy&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.noh.ro/blog/atom.xml"&gt;The Art Of&amp;nbsp;Noh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thedarkvisitor.com/feed/"&gt;The Dark&amp;nbsp;Visitor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.damballa.com/?feed=rss2"&gt;The Day Before&amp;nbsp;Zero&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ethicalhacker.net/index2.php?option=com_rss&amp;amp;feed=RSS2.0&amp;amp;no_html=1"&gt;The Ethical Hacker Network &lt;span class="caps"&gt;RSS&lt;/span&gt; News&amp;nbsp;Feed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nsylvain.blogspot.com/feeds/posts/default"&gt;The Final&amp;nbsp;Stream&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.ict-forward.eu/forward/feed/"&gt;The &lt;span class="caps"&gt;FORWARD&lt;/span&gt; project&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.guerilla-ciso.com/feed"&gt;The Guerilla &lt;span class="caps"&gt;CISO&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://honeystickproject.com/blog/feed/"&gt;The Honey Stick&amp;nbsp;Project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/TheSpiLaboratory"&gt;The &lt;span class="caps"&gt;HP&lt;/span&gt; Security Laboratory&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://security.thejoshmeister.com/feeds/posts/default"&gt;the JoshMeister on&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/TheMerchantAccountBlog"&gt;The Merchant Account&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.php-security.org/rss.xml"&gt;the Month of &lt;span class="caps"&gt;PHP&lt;/span&gt;&amp;nbsp;Bugs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.fp6-noah.org/noah/feed/"&gt;The NoAH&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rpaulwilson.blogspot.com/feeds/posts/default"&gt;The Real&amp;nbsp;Hustler&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.phenoelit.net/lablog/index.rss20"&gt;The &lt;span class="caps"&gt;SABRE&lt;/span&gt;&amp;nbsp;Lablog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/sdl/rss.xml"&gt;The Security Development&amp;nbsp;Lifecycle&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://secshoggoth.blogspot.com/feeds/posts/default"&gt;The Security&amp;nbsp;Shoggoth&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://securityskeptic.typepad.com/the-security-skeptic/atom.xml"&gt;The Security&amp;nbsp;Skeptic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.spamhaus.org/newsRss.lasso"&gt;The Spamhaus Project News&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thespanner.co.uk/feed/"&gt;The&amp;nbsp;Spanner&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.spywareguide.com/atom.xml"&gt;The SpywareGuide Greynets&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.zdnet.com/threatchaos/wp-rss2.php"&gt;Threat&amp;nbsp;Chaos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ithreats.wordpress.com/feed/"&gt;Threat&amp;nbsp;Researcher&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.threatexpert.com/feeds/posts/default"&gt;ThreatExpert&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/CZJjATpH/twitter.com/ThreatLevel"&gt;ThreatLevel -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://timetobleed.com/feed/"&gt;time to bleed by Joe&amp;nbsp;Damato&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.secsocial.com/blog/?feed=rss2"&gt;(title&amp;nbsp;unknown)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.torproject.org/blog/feed"&gt;Tor: The&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tk-blog.blogspot.com/feeds/posts/default"&gt;trapkit&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.sebastien.raveau.name/feeds/posts/default"&gt;Tricks of the&amp;nbsp;Trade&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marcin.thelinuxdiaries.com/?feed=atom"&gt;tssci&amp;nbsp;security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.tssci-security.com/feed/"&gt;tssci&amp;nbsp;security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Twitpwn"&gt;TwitPwn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tspivey.wordpress.com/feed/"&gt;Tyler Spivey&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.uncommonsensesecurity.com/feeds/posts/default"&gt;Uncommon Sense&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/matt_pietrek/rss.xml"&gt;Under The Hood - Matt&amp;nbsp;Pietrek&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.unmaskparasites.com/feed/"&gt;Unmask Parasites.&amp;nbsp;Blog.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://uploadmalware.blogspot.com/feeds/posts/default"&gt;UploadMalware.com&amp;#8217;s Malware&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://gdata.youtube.com/feeds/base/users/teamcymru/uploads?alt=rss&amp;amp;v=2&amp;amp;orderby=published&amp;amp;client=ytapi-youtube-profile"&gt;Uploads by&amp;nbsp;teamcymru&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.ncircle.com/blogs/vert/atom.xml"&gt;&lt;span class="caps"&gt;VERT&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vicheck.blogspot.com/feeds/posts/default"&gt;ViCheck Malware&amp;nbsp;Trends&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kulando.de/rss.php?blogId=5567&amp;amp;profile=atom"&gt;Virus&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Vitalsecurity-org"&gt;Vitalsecurity.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Vitalsecurity"&gt;Vitalsecurity.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://volatilesystems.blogspot.com/feeds/posts/default"&gt;Volatile&amp;nbsp;Systems&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vrt-sourcefire.blogspot.com/feeds/posts/default"&gt;&lt;span class="caps"&gt;VRT&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.vulnerableminds.com/feeds/posts/default"&gt;Vulnerable&amp;nbsp;Minds&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/vulnerableminds/blog"&gt;Vulnerable&amp;nbsp;Minds&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://argolithmic.blogspot.com/feeds/posts/default"&gt;&lt;span class="caps"&gt;WA&lt;/span&gt; &lt;span class="caps"&gt;GWAN&lt;/span&gt; &lt;span class="caps"&gt;HAX&lt;/span&gt; &lt;span class="caps"&gt;STAR&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.wslabi.com/feeds/posts/default"&gt;WabiSabiLabi&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.anti-malware.info/weblog/atom.xml"&gt;WAVCi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wj32.wordpress.com/feed/"&gt;wblog3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.modsecurity.org/blog/atom.xml"&gt;Web Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.purewire.com/CMS/UI/Modules/BizBlogger/rss.aspx?tabid=105378&amp;amp;moduleid=119725&amp;amp;maxcount=25"&gt;Web Security Blog by&amp;nbsp;Purewire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://websecurity.ro/blog/feed/"&gt;Websecurity.ro&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.websense.com/securitylabs/WebsenseSecurityLabsBlog.rss"&gt;Websense Security Labs&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://daeken-eulogy.livejournal.com/data/rss"&gt;Welcome to the dregs of my&amp;nbsp;mind&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geek00l.blogspot.com/feeds/posts/default"&gt;When {Puffy} Meets&amp;nbsp;\^RedDevil\^&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.whitehatsec.com/home/resources/blog/files/WhiteHatBlog.xml"&gt;WhiteHat Security &lt;span class="caps"&gt;RSS&lt;/span&gt; Blog&amp;nbsp;Feed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.willhackforsushi.com/?feed=rss2"&gt;Will Hack For &lt;span class="caps"&gt;SUSHI&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://beta.blogger.com/feeds/9518042/posts/full"&gt;Windows Incident&amp;nbsp;Response&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://windowsonecare.spaces.live.com/feed.rss"&gt;Windows Live OneCare Team&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.wintercore.com/?feed=rss2"&gt;Wintercore&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.reddit.com/r/winternals/.rss"&gt;winternals: Windows &lt;span class="caps"&gt;OS&lt;/span&gt; internals and&amp;nbsp;programming&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.wormblog.com/atom.xml"&gt;worm&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.wirelessve.org/entries/rss2"&gt;&lt;span class="caps"&gt;WVE&lt;/span&gt; Recent&amp;nbsp;Entries&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.rootkit.com/xml.php"&gt;www.rootkit.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xorl.wordpress.com/feed/"&gt;xorl %eax,&amp;nbsp;%eax&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/hZsRXmvD/twitter.com/xorlgr"&gt;xorlgr -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://data.xssed.org/news.rss"&gt;XSSed&amp;nbsp;syndication&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://yaisb.blogspot.com/feeds/posts/default"&gt;Yet Another Infosec&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://zaphodb777.blogspot.com/feeds/posts/default"&gt;Zaphod&amp;#8217;s Web&amp;nbsp;Wanderings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.veracode.com/blog/?feed=atom"&gt;Zero in a&amp;nbsp;bit&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.zone-h.org/index2.php?option=com_rss&amp;amp;no_html=1"&gt;Zone-H&amp;nbsp;syndication&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://research.zscaler.com/feeds/posts/default"&gt;Zscaler&amp;nbsp;Research&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://linuxhelp.blogspot.com/atom.xml"&gt;All about&amp;nbsp;Linux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://fullcirclemagazine.org/feed/"&gt;Full Circle&amp;nbsp;Magazine&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wolphination.com/linux/feed/atom/"&gt;J_K9 @&amp;nbsp;Linux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lightlinux.blogspot.com/feeds/posts/default"&gt;Lightweight&amp;nbsp;Linux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://linuxgazette.net/lg.rss"&gt;Linux&amp;nbsp;Gazette&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.linux.com/feature/?theme=rss"&gt;Linux.com ::&amp;nbsp;Features&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mostly-linux.blogspot.com/atom.xml"&gt;Mostly&amp;nbsp;Linux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/medigeek"&gt;My life&amp;#8217;s&amp;nbsp;journey&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/IJ8ANGRX/twitter.com/shotofjaq"&gt;shotofjaq -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thelinuxsociety.org.uk/frontpage/feed"&gt;The Linux Society - The&amp;nbsp;AberTayLUG&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ralph.n3rds.net/index.php?/feeds/index.rss2"&gt;Ubuntu Linux Blog by&amp;nbsp;Ralph&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/yalb"&gt;Yet Another Linux&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/antimalware/atom.xml"&gt;Anti-Malware Engineering&amp;nbsp;Team&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/Anti-virusRants"&gt;anti-virus&amp;nbsp;rants&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://web.bit9.com/DesktopModules/Ingeni-BizBlogger/rss.aspx?tabid=15398&amp;amp;moduleid=19826&amp;amp;maxcount=25&amp;amp;t=e828921e-c669-4f15-82b8-05b39a6e6992"&gt;Application Control and Device Control for Windows&amp;nbsp;Desktops&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.assarbad.net/feed/atom/"&gt;Assa&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.authentium.com/virusblog/?feed=rss2"&gt;Authentium Virus&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.av-comparatives.org/weblog/?feed=rss2"&gt;&lt;span class="caps"&gt;AV&lt;/span&gt;-Comparatives&amp;nbsp;weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.avast.com/feed/"&gt;avast!&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://techblog.avira.com/feed/en/"&gt;Avira -&amp;nbsp;TechBlog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.hispasec.com/virustotal/rss20.xml"&gt;Blog&amp;nbsp;VirusTotal&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.ca.com/CS_CASecurityAdvisorResearchBlog"&gt;&lt;span class="caps"&gt;CA&lt;/span&gt; Security Advisor Research&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.sophos.com/en/rss2_0-sophos-chet-wisniewski.xml"&gt;Chester Wisniewski&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.clamwin.com/index2.php?option=com_rss&amp;amp;feed=RSS0.91&amp;amp;no_html=1"&gt;Clamwin &lt;span class="caps"&gt;RSS&lt;/span&gt;&amp;nbsp;Feed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://countermeasures.trendmicro.eu/?feed=rss2"&gt;Countermeasures&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.esagelab.com/rss.php"&gt;eSage Lab company&amp;nbsp;news&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.f-secure.com/weblog/weblog.rdf"&gt;F-Secure Antivirus Research&amp;nbsp;Weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.f-secure.com/linux-weblog/feed/"&gt;F-Secure Linux&amp;nbsp;weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.fireeye.com/research/atom.xml"&gt;FireEye Malware Intelligence&amp;nbsp;Lab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/clientsecurity/rss.xml"&gt;Forefront Client Security Team&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.fortinet.com/feed/"&gt;Fortinet FortiGuard&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.sophos.com/en/rss2_0-sophos-graham-cluley.xml"&gt;Graham Cluley&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.iantivirus.com/feeds/posts/default"&gt;iAntiVirus&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.viruslist.com/en/rss/weblog"&gt;Kasperky Lab&amp;nbsp;Weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.paretologic.com/malwarediaries/index.php/feed/"&gt;Malware&amp;nbsp;Diaries&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://malwarebytes.besttechie.net/feed/"&gt;Malwarebytes&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.marshal.com/rss/trace.asp"&gt;Marshal &lt;span class="caps"&gt;TRACE&lt;/span&gt;&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/McafeeAvertLabsBlog"&gt;McAfee Avert Labs&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.siteadvisor.com/atom.xml"&gt;McAfee SiteAdvisor&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/mmpc/rss.xml"&gt;Microsoft® Malware Protection&amp;nbsp;Center&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://momusings.com/momusings/atom.xml"&gt;MoMusings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nanoscanblog.pandasecurity.com/rss.aspx"&gt;NanoScan&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rahulmohandas.wordpress.com/feed/"&gt;News from the&amp;nbsp;Lab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rahulmohandas.blogspot.com/atom.xml"&gt;News from the&amp;nbsp;Lab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.norton.com/t5/rss/boardpage/board-id/npb1;jsessionid=59AAD25EB43518F072E3A044D00741C7"&gt;Norton Protection&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jonpoon.blogspot.com/feeds/posts/default"&gt;Notes &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;Thoughts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/PandaResearch"&gt;Panda Research&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.sophos.com/en/rss2_0-sophos-paul-ducklin.xml"&gt;Paul Ducklin&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.paretologic.com/pgsurfer/index.php/feed/"&gt;PGSurfer Block&amp;nbsp;Watch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/PrevxResearchBlog"&gt;Prevx&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://thompson.blog.avg.com/atom.xml"&gt;Roger&amp;nbsp;Thompson&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogger.xs4all.nl/klab/rss.aspx"&gt;Schouw&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.symantec.com/enterprise/security_response/weblog/feeds/index.xml"&gt;Security Response&amp;nbsp;Weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.sophos.com/en/rss2_0-sophos-sophoslabs-blog.xml"&gt;SophosLabs&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/SunbeltBlog"&gt;SunbeltBLOG&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.symantec.com/connect/item-feeds/blog/691/feed"&gt;Symantec Connect - Security - Blog&amp;nbsp;Entries&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://avien.net/blog/?feed=rss2"&gt;The &lt;span class="caps"&gt;AVIEN&lt;/span&gt;&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://eset.com/threat-center/blog/?feed=rss2"&gt;ThreatBlog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.threatfire.com/feeds/posts/default"&gt;ThreatFire Research&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://servicecenter.antivirus.com/tm/core/en/rssinfo.php"&gt;&lt;span class="caps"&gt;TREND&lt;/span&gt; &lt;span class="caps"&gt;MICRO&lt;/span&gt; Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.trendmicro.com/Anti-MalwareBlog/"&gt;TrendLabs | Malware Blog - by Trend&amp;nbsp;Micro&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://viruslab.blog.avg.com/atom.xml"&gt;Virus&amp;nbsp;Lab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amtso.org/index.php?format=feed&amp;amp;type=rss"&gt;Welcome to &lt;span class="caps"&gt;AMTSO&lt;/span&gt; - The Anti Malware Testing Standards&amp;nbsp;Organization&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://zarestel.blogspot.com/feeds/posts/default"&gt;Zª╔εs±é└&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ascii.textfiles.com/feed/atom"&gt;&lt;span class="caps"&gt;ASCII&lt;/span&gt; by Jason&amp;nbsp;Scott&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bin-false.org/feed/"&gt;bin-false.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.reddit.com/feeds/posts/default"&gt;blog.reddit &amp;#8212; what&amp;#8217;s new on&amp;nbsp;reddit&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://frankston.com/Public/rss.xml"&gt;Bob Frankston&amp;#8217;s&amp;nbsp;Writings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://freakonomics.blogs.nytimes.com/feed/"&gt;Freakonomics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.google.com/intl/en_us/logos/logos.xml"&gt;Google&amp;nbsp;Logos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.grooveshark.com/community/feed/"&gt;Grooveshark&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/jxqpwzEk/twitter.com/grooveshark"&gt;grooveshark -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ihearditonnpr.blogspot.com/feeds/posts/default"&gt;I Heard It On
&lt;span class="caps"&gt;NPR&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xenon.arcticus.com/rss.xml"&gt;Isotopia - Variations, on a theme&lt;br /&gt;
&lt;small&gt; &lt;em&gt;Home of Xenon&amp;#8217;s
Stuff&lt;/em&gt;&lt;/small&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.scientificblogging.com/hammock_physicist/feed"&gt;Johannes Koelman&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lunduke.com/?feed=rss2"&gt;Lunduke.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://notalwaysright.com/feed"&gt;Not Always Right | Funny &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Stupid Customer&amp;nbsp;Quotes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rosswriting.blogspot.com/feeds/posts/default"&gt;Rosswriting&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pathosdaily.blogspot.com/feeds/posts/default"&gt;The Pathos&amp;nbsp;Daily&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/QuantifiedSelf"&gt;The Quantified&amp;nbsp;Self&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.unnecessaryquotes.com/feeds/posts/default"&gt;The “Blog” of “Unnecessary” Quotation&amp;nbsp;Marks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.makeyougohmm.com/feed/atom/"&gt;Things That &amp;#8230; Make You Go&amp;nbsp;Hmm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://unenumerated.blogspot.com/atom.xml"&gt;Unenumerated&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://watchthefishers.com/?feed=rss2"&gt;Watch The&amp;nbsp;Fishers!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://writequit.org/blog/?feed=rss2"&gt;writequit&amp;nbsp;(:wq)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ymailblog.com/blog/feed/"&gt;Yahoo! Mail&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sciencecomedian.com/blog/feed/"&gt;Zero&amp;nbsp;Gravity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/splitbrain"&gt;Andreas Gohr: Weblog&amp;nbsp;[splitbrain.org]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.chimeric.de/feed.php"&gt;ch!mer!c.de&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/chimeric_wiki"&gt;&lt;span class="caps"&gt;CH&lt;/span&gt;!&lt;span class="caps"&gt;MER&lt;/span&gt;!C.de&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.chimeric.de/_feed/blog"&gt;ch!mer!c.de&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rss.groups.yahoo.com/group/DokuWiki/rss"&gt;DokuWiki at Yahoo!&amp;nbsp;Groups&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rapid-i.com/component/option,com_myblog/Itemid,172/task,rss/lang,en/"&gt;Blog&amp;nbsp;Entries&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dataminingresearch.blogspot.com/feeds/posts/default"&gt;FeedBulletin for:&amp;nbsp;sandrosaitta&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lifeanalytics.blogspot.com/feeds/posts/default"&gt;Life&amp;nbsp;Analytics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.neuralmarkettrends.com/feed/"&gt;Neural Market&amp;nbsp;Trends&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://perladvent.pm.org/2007/RSS.xml"&gt;2007 Perl Advent&amp;nbsp;Calendar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://perladvent.pm.org/2008/RSS.xml"&gt;2008 Perl Advent&amp;nbsp;Calendar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://perladvent.pm.org/2009/RSS.xml"&gt;2009 Perl Advent&amp;nbsp;Calendar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pugs.blogs.com/audrey/atom.xml"&gt;Audrey&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dev411.com/blog/xml/atom/feed.xml"&gt;Dev411&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.modernperlbooks.com/mt/atom.xml"&gt;Modern Perl Books, a Modern Perl&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.perlworkshop.no/npw2009/atom/en.xml"&gt;Nordic Perl Workshop&amp;nbsp;2009&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.timbunce.org/feed/"&gt;Not&amp;nbsp;this&amp;#8230;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.parrotblog.org/feeds/posts/default"&gt;Parrot&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://perl6advent.wordpress.com/feed/"&gt;Perl 6 Advent&amp;nbsp;Calendar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/PerlBuzz"&gt;Perl&amp;nbsp;Buzz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://perlhacks.org/atom.xml"&gt;Perl&amp;nbsp;Hacks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/PerlTips"&gt;Perl&amp;nbsp;Tips&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://perlgeek.de/blog-en/index.rss"&gt;Perlgeek.de&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/cTnzv3eR/twitter.com/perloneliner"&gt;perloneliner -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://planet.perl.org/rss20.xml"&gt;Planet&amp;nbsp;Perl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://plasmasturm.org/feeds/plasmasturm/"&gt;plasmasturm.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/PerlBuzzProjectHum"&gt;Project&amp;nbsp;Hum&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://advent.rjbs.manxome.org/atom.xml"&gt;&lt;span class="caps"&gt;RJBS&lt;/span&gt; Advent&amp;nbsp;Calendar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.roth.net/blog/index.php/feed/"&gt;Roth Consulting&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://use.perl.org/~Shlomi+Fish/journal/rss"&gt;Shlomi Fish&amp;#8217;s&amp;nbsp;Journal&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pipes.yahoo.com/pipes/pipe.run?TwitterName=CPANr&amp;amp;_id=GGb48UMK3hGBOJOpAVYZ7A&amp;amp;_render=rss"&gt;Twitter&amp;nbsp;Content&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://perladvent.pm.org/RSS.xml"&gt;&lt;span class="caps"&gt;YAPAC&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://parsedcontent.blogspot.com/feeds/posts/default"&gt;{ Parsed Content&amp;nbsp;};&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pipes.yahoo.com/pipes/pipe.run?OriginalFeed=http%3A%2F%2Fwww.reviewme.com%2Fxml.php%3Ftype%3Dcampaign%26key%3D0eac8fdcb70347edbc9b&amp;amp;_id=6455093b34bf0c1f09772450899f97a2&amp;amp;_render=rss"&gt;Add
&lt;span class="caps"&gt;GUID&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.google.com/reader/public/atom/user/11067853532291698348/state/com.google/alerts/9258650661019165740"&gt;Google Alerts -&amp;nbsp;cd-man&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.google.com/reader/public/atom/user/11067853532291698348/state/com.google/alerts/13997169662569787873"&gt;Google Alerts -&amp;nbsp;hype-free&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hype-free.blogspot.com/atom.xml"&gt;hype-free&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.se-radio.net/crss"&gt;Software Engineering Radio -&amp;nbsp;Comments&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://stam.blogs.com/8bits/atom.xml"&gt;8&amp;nbsp;bits&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://behind-the-enemy-lines.blogspot.com/feeds/posts/default"&gt;A Computer Scientist in a Business&amp;nbsp;School&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/doronh/rss.xml"&gt;A Hole In My&amp;nbsp;Head&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://abock.org/feed"&gt;Aaron&amp;nbsp;Bockover&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://achmadz.blogspot.com/feeds/posts/default"&gt;Achmad Z&amp;#8217;s&amp;nbsp;Archives&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://acme.vox.com/library/posts/atom.xml"&gt;acme&amp;#8217;s&amp;nbsp;bits&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.reddit.com/r/AppEngine/.rss"&gt;App&amp;nbsp;Engine&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.atarininja.org/?flav=rss20"&gt;Atarininja&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/AtlassianDeveloperBlog"&gt;Atlassian Developer&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://melikyan.blogspot.com/feeds/posts/default"&gt;Attic&amp;nbsp;#42&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/GEX4iKm1/twitter.com/bagder"&gt;bagder -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://beautifulcode.oreillynet.com/index.atom"&gt;Beautiful&amp;nbsp;Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.bitbucket.org/feed/"&gt;Bitbucket&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blackmagiccode.blogspot.com/feeds/posts/default"&gt;Black Magic&amp;nbsp;Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.mozilla.com/metrics/feed/"&gt;Blog of&amp;nbsp;Metrics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://multimedia.cx/eggs/feed/"&gt;Breaking Eggs And Making&amp;nbsp;Omelettes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cjacks/rss.xml"&gt;Chris Jackson&amp;#8217;s Semantic&amp;nbsp;Consonance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.cipherprime.com/?feed=rss2"&gt;Cipher Prime&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.azulsystems.com/cliff/index.rdf"&gt;Cliff Click Jr.’s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.codinghorror.com/blog/index.xml"&gt;Coding&amp;nbsp;Horror&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/codingthewheel"&gt;Coding the&amp;nbsp;Wheel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds2.feedburner.com/cosmocode-blog"&gt;CosmoCode&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/craigrow/rss.xml"&gt;craigrow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://danbricklin.com/log_rss.xml"&gt;Dan Bricklin&amp;#8217;s&amp;nbsp;Log&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://danweinreb.org/blog/feed"&gt;Dan Weinreb&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://daniel.haxx.se/blog/feed/"&gt;daniel.haxx.se&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.dantup.me.uk/DanTup"&gt;Danny&amp;nbsp;Tuppeny&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/Debuginfo/rss.aspx"&gt;DebugInfo.com - Oleg&amp;nbsp;Starodumov&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://diveintomark.org/feed/"&gt;dive into&amp;nbsp;mark&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.doboism.com/blog/feed/"&gt;Doboism&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/encytemedia"&gt;Encytemedia -&amp;nbsp;Home&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://thegap.blogs.tlnewsreader.com/?feed=rss2"&gt;Eric Fortier&amp;#8217;s Bridging The&amp;nbsp;Gap&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ophir.wordpress.com/feed/"&gt;Evil&amp;nbsp;Fish&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/EvilAsInDr"&gt;Evil, as in&amp;nbsp;Dr.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://experimentalturk.wordpress.com/feed/"&gt;Experimental&amp;nbsp;Turk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://felipe.wordpress.com/feed/"&gt;felipe&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.geekzone.co.nz/gzfoobar"&gt;foobar: foobar on computers, software and the rest of the&amp;nbsp;world&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://aligunduz.org/blog/feed/"&gt;&lt;span class="caps"&gt;GLOG&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.catonmat.net/feed/"&gt;good coders code, great&amp;nbsp;reuse&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://google-code-updates.blogspot.com/feeds/posts/default"&gt;Google Code -&amp;nbsp;Updates&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://google-opensource.blogspot.com/feeds/posts/default"&gt;Google Open Source&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/HacketyOrg"&gt;hackety&amp;nbsp;org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hackmii.com/feed/"&gt;HackMii&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hardwarebug.org/feed/"&gt;Hardwarebug&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hexadeciman.blogspot.com/feeds/posts/default"&gt;Hexadeciman - 16-bit Programming&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.humboldt.co.uk/feeds/posts/default"&gt;Humboldt&amp;nbsp;Solutions&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/eric_brechner/rss.xml"&gt;&lt;span class="caps"&gt;I. M.&lt;/span&gt; Wright’s “Hard&amp;nbsp;Code”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/tess/rss.xml"&gt;If broken it is, fix it you&amp;nbsp;should&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/ItsAllGuid"&gt;it&amp;#8217;s all&amp;nbsp;guid&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/jCrazeBlog"&gt;jCraze&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.delphi-jedi.net/feed/"&gt;&lt;span class="caps"&gt;JEDI&lt;/span&gt; Windows &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www2.jeffcroft.com/feeds/blog/"&gt;JeffCroft.com&amp;nbsp;Journal&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/jensenh/atom.xml"&gt;Jensen Harris: An Office User Interface&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jeremy.zawodny.com/blog/rss2.xml"&gt;Jeremy Zawodny&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://johannburkard.de/blog/?flavor=rss2"&gt;Johann&amp;nbsp;Burkard&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kernelmustard.com/feed/"&gt;Kernel&amp;nbsp;Mustard&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.krugle.com/?feed=atom"&gt;Krugle&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/lcris/atom.xml"&gt;Laurentiu Cristofor&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.aldana-online.de/feed/"&gt;Manuel&amp;nbsp;Aldana&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://maradns.blogspot.com/feeds/posts/default"&gt;MaraDNS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/PerlBuzzMechanix"&gt;Mechanix&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/office2010/rss.xml"&gt;Microsoft Office 2010&amp;nbsp;Engineering&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mishou.org/feed/"&gt;mishou.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mixxxblog.blogspot.com/feeds/posts/default"&gt;Mixxx Development&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/MonstersGotMynet"&gt;Monsters Got My .&lt;span class="caps"&gt;NET&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.moserware.com/feeds/posts/default"&gt;Moserware&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/murrays/atom.xml"&gt;Murray Sargent: Math in&amp;nbsp;Office&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nadiana.com/rss.xml"&gt;Nadia Alramli&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nebula.nasa.gov/feeds/blog/"&gt;&lt;span class="caps"&gt;NASA&lt;/span&gt; &lt;span class="caps"&gt;NEBULA&lt;/span&gt;&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ndis.blogspot.com/feeds/posts/default"&gt;&lt;span class="caps"&gt;NDIS&lt;/span&gt;&amp;nbsp;Musings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.nektra.com/main/feed/atom/"&gt;Nektra Advanced Computing&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://neopythonic.blogspot.com/feeds/posts/default"&gt;Neopythonic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.net-dns.org/blog/rss/atom/1"&gt;Net::&lt;span class="caps"&gt;DNS&lt;/span&gt; maintenance&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.sun.com/nbprofiler/feed/entries/rss"&gt;NetBeans&amp;nbsp;Profiler&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.sun.com/nike/feed/entries/atom"&gt;Nikolay&amp;nbsp;Igotti&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nothingforungood.com/feed/"&gt;Nothing For&amp;nbsp;Ungood&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/ntdebugging/rss.xml"&gt;Ntdebugging&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/beust/OtakuXml"&gt;Otaku, Cedric&amp;#8217;s&amp;nbsp;weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.getpaint.net/feed/"&gt;Paint.&lt;span class="caps"&gt;NET&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://davehope.co.uk/feed/"&gt;Personal website of Dave&amp;nbsp;Hope&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/phpadvent"&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt;&amp;nbsp;Advent&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://planet.pidgin.im/rss20.xml"&gt;Pidgin&amp;nbsp;News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ungwe.org/blog/feed.atom"&gt;Qef&amp;#8217;s&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.megginson.com/blogs/quoderat/feed/atom/"&gt;Quoderat&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://malwareanalysis.com/CommunityServer/blogs/geffner/atom.aspx"&gt;REblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.redbot.org/rss.xml"&gt;&lt;span class="caps"&gt;RED&lt;/span&gt; news and&amp;nbsp;information&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.remkoweijnen.nl/blog/feed/"&gt;RemkoWeijnen.nl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://goran.krampe.se/blog/index.rss"&gt;Roads Less&amp;nbsp;Taken&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/ScottHanselman"&gt;Scott Hanselman&amp;#8217;s Computer&amp;nbsp;Zen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://slayeroffice.com/rss/"&gt;slayeroffice.com - web experiments gone horribly&amp;nbsp;awry&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sidhe.org/~dan/blog/index.rdf"&gt;Squawks of the&amp;nbsp;Parrot&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.stackoverflow.com/"&gt;stackoverflow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.steike.com/feed"&gt;steike.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://steve-yegge.blogspot.com/feeds/posts/default"&gt;Stevey&amp;#8217;s Blog&amp;nbsp;Rants&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://suckbusters2.blogspot.com/feeds/posts/default"&gt;Suckbusters! from David&amp;nbsp;Platt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tocm.blogspot.com/atom.xml"&gt;Tales of a Code&amp;nbsp;Monkey&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.tenshu.net/feed/"&gt;tenshu.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/ts/atom.xml"&gt;Terminal Services Team&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/audiofool/rss.xml"&gt;The Audio&amp;nbsp;Fool&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/micahel/rss.xml"&gt;The Braidy&amp;nbsp;Tester&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.c10n.info/feed/"&gt;The Data Compression News&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/github"&gt;The GitHub&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://python-history.blogspot.com/feeds/posts/default"&gt;The History of&amp;nbsp;Python&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/oldnewthing/rss.xml"&gt;The Old New&amp;nbsp;Thing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.borland.com/abauer/rss.aspx"&gt;The Oracle at&amp;nbsp;Delphi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/powerpoint/rss.xml"&gt;The PowerPoint Team&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.sun.com/mr/feed/entries/atom"&gt;There’s not a moment to&amp;nbsp;lose!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://micktech.wordpress.com/feed/"&gt;Thormick&amp;#8217;s Tech&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tstarling.com/blog/feed/"&gt;Tim Starling&amp;#8217;s&amp;nbsp;blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.toolness.com/wp/?feed=rss2"&gt;Toolness&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://virtualdub.org/blog/rss.xml"&gt;VirtualBlog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://voneinem-windbg.blogspot.com/feeds/posts/default"&gt;Windbg by Volker von&amp;nbsp;Einem&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.windirstat.info/feed/"&gt;WinDirStat&amp;nbsp;weblog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.celceo.com/blogs/windows-insight/atom.xml"&gt;Windows Insight&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/WinDrvr/rss.aspx"&gt;WinDrvr&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://security.tfm.ro/feed/"&gt;About Romanian Web&amp;nbsp;Security&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://adi.roiban.ro/?feed=rss2"&gt;Adi&amp;nbsp;Roiban&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://alexj.info/?feed=rss2"&gt;AlexJ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://igor.tla.ro/node/feed"&gt;asdf vs&amp;nbsp;hjkl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://corporate.blogs.balabit.com/feeds/posts/default"&gt;BalaBit Corporate&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://security.blogs.balabit.com/feeds/posts/default"&gt;BalaBit &lt;span class="caps"&gt;IT&lt;/span&gt; Security&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cotiso.com/feed/"&gt;Bani pe net - by&amp;nbsp;Cotiso&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://big.lazyadmin.ro/feed/"&gt;Big Lazy&amp;nbsp;Sysadmin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ingineru.ro/feed/"&gt;Blog&amp;nbsp;ingineresc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pliscu.blogspot.com/feeds/posts/default"&gt;Blog uitat de&amp;nbsp;lume&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://plecat-cu-cercul.blogspot.com/feeds/posts/default"&gt;Ca să nu&amp;nbsp;uit&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cafeacuzahar.wordpress.com/feed/"&gt;Cafea cu&amp;nbsp;Zahar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ionelcondor.wordpress.com/2008/05/14/startup-jug-cluj-napoca/feed/"&gt;Comentarii pentru: Startup &lt;span class="caps"&gt;JUG&lt;/span&gt; Cluj&amp;nbsp;Napoca&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.convertor.ro/blog/feed/"&gt;Convertor.ro&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://diacritica.wordpress.com/feed/"&gt;diacritica&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://edysilory.wordpress.com/feed/"&gt;edy si&amp;nbsp;lory&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.softwareliber.ro/feed/"&gt;Grupul pentru software&amp;nbsp;liber&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jugcluj.wordpress.com/feed/"&gt;&lt;span class="caps"&gt;JAVA&lt;/span&gt; User Group Cluj-Napoca,&amp;nbsp;Romania&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.andreicrivat.ro/feed/"&gt;Jurnal de&amp;nbsp;noapte&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://laandu.blogspot.com/feeds/posts/default"&gt;La&amp;nbsp;Andu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://salomie.ro/tudor/feed/"&gt;Life is life [Tudor Salomie&amp;#8217;s&amp;nbsp;Blog]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.logec.ro/feed/"&gt;Logica&amp;nbsp;economica&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vtopan.wordpress.com/feed/"&gt;My&amp;nbsp;playground&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://robyy1.wordpress.com/feed/"&gt;Plastic-Smil3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://puiutu.blogspot.com/feeds/posts/default"&gt;puiutu de sub&amp;nbsp;pod&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds2.feedburner.com/refreshro"&gt;re:Fresh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.skunkworks.ro/?feed=rss2"&gt;Skunkworks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://strangetheories.wordpress.com/feed/"&gt;Strange&amp;nbsp;Theories&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://studentclub.ro/MainFeed.aspx"&gt;StudentClub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://symbianized.net/feed/"&gt;Symbianized.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://groups.google.com/group/transylvania-jug/feed/rss_v2_0_msgs.xml"&gt;Transylvania &lt;span class="caps"&gt;JUG&lt;/span&gt; Google&amp;nbsp;Group&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://picasaweb.google.com/data/feed/base/user/transylvania.java.user.group?alt=rss&amp;amp;kind=album&amp;amp;hl=en_US&amp;amp;access=public"&gt;transylvania.java.user.group&amp;#8217;s Photo&amp;nbsp;Gallery&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.tudy.ro/feed/"&gt;tudy .ro - Tudor&amp;nbsp;Damian&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/TwindowsInternals"&gt;Twindows&amp;nbsp;Internals&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://twitter.com/statuses/user_timeline/15095203.rss"&gt;Twitter /&amp;nbsp;vtopan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ubergeek.ro/feed/"&gt;UberGeek&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ionutpopa.blogspot.com/feeds/posts/default"&gt;Webdevelopment with&amp;nbsp;Style&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://itboard.ro/blogs/zolis_tool/rss.aspx"&gt;Weblogul lui&amp;nbsp;Zoli&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/rYPsb5qZ/twitter.com/twitter"&gt;twitter -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/TwitterBlog"&gt;Twitter&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.econbrowser.com/atom.xml"&gt;Econbrowser&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/hybridtalk"&gt;Exchanges&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://googlefinanceblog.blogspot.com/feeds/posts/default"&gt;Finance&amp;nbsp;Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/MyMint"&gt;MintLife Blog | Personal Finance News &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;Advice&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://globaleconomicanalysis.blogspot.com/feeds/posts/default"&gt;Mish&amp;#8217;s Global Economic Trend&amp;nbsp;Analysis&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nakedcapitalism.com/feeds/posts/default"&gt;naked&amp;nbsp;capitalism&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thetwitfeeder.com/feed/aI9bpJVe/twitter.com/neuralmarket"&gt;neuralmarket -&amp;nbsp;TwitFeeder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rortybomb.wordpress.com/feed/"&gt;Rortybomb&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://market-ticker.denninger.net/feeds/index.rss2"&gt;The Market&amp;nbsp;Ticker&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://timharford.com/feed/"&gt;Tim&amp;nbsp;Harford&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.zerohedge.com/fullrss.xml"&gt;zero hedge - on a long enough timeline, the survival rate for everyone
drops to&amp;nbsp;zero&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 25 Jan 2010 11:54:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-25:2010/01/who-feeds-me-with-information.html</guid><category>rss</category><category>blog</category><category>google reader</category><category>personal</category></item><item><title>Splitting hairs^H^H^H^H^H strings with Java</title><link>https://www.grey-panther.net/2010/01/splitting-hairshhhhh-strings-with-java.html</link><description>&lt;div style="float: right; padding: 3px;"&gt;

[![Split
Personality](http://farm3.static.flickr.com/2097/2225546021_4864c2bc72.jpg)](http://www.flickr.com/photos/nickwheeleroz/2225546021/ &amp;#8220;Split Personality by nickwheeleroz, on Flickr&amp;#8221;)

&lt;/div&gt;

&lt;p&gt;Offtopic: where does \^H come from? (since I too found it only
recently) - from &lt;a href="http://en.wikipedia.org/wiki/Backspace"&gt;the source of all
wisdom&lt;/a&gt; - Wikipedia&amp;nbsp;:-p&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Pressing the backspace key on a computer terminal would generate the
&lt;span class="caps"&gt;ASCII&lt;/span&gt; code 08, &lt;span class="caps"&gt;BS&lt;/span&gt; or Backspace, which would delete the preceding
character. That control code could also be accessed by pressing
Control-H, as H is the eighth letter of the Latin alphabet. Terminals
which did not have the backspace code mapped to the function of moving
the cursor backwards and deleting the preceding character would
display the symbols \^H (caret, H — see Caret notation) when the
backspace key was pressed. This sequence is still used humorously for
epanorthosis by computer literates, denoting the deletion of a
pretended blunder, much like&amp;nbsp;overstriking.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now back to our topic: how to split a String in Java into parts? Here
are a couple of&amp;nbsp;options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use a
    &lt;a href="http://java.sun.com/javase/7/docs/api/java/util/StringTokenizer.html"&gt;StringTokenizer&lt;/a&gt; -
    one thing which surprises Java novices is that the second parameter
    in the constructor &lt;em&gt;is a list of separators not one big separator&lt;/em&gt;.
    So if you specify &lt;code&gt;", "&lt;/code&gt;, this will split at &lt;em&gt;either commas or
    spaces, not at commas followed by spaces&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Use
    &lt;a href="http://java.sun.com/javase/7/docs/api/java/lang/String.html#split%28java.lang.String%29"&gt;String.split&lt;/a&gt; -
    this can also surprise novices since - even though it accepts a
    String parameter - the String will be compiled into regular
    expression (Pattern). While there are several warning signs (like
    the documentation - because everyone reads those :-p - or the
    parameter name), it is easy to ignore and one can get surprising
    results (like splitting the String &lt;code&gt;"aaa.bbb.ccc"&lt;/code&gt; using the pattern
    &lt;code&gt;"."&lt;/code&gt; and getting an empty&amp;nbsp;String).&lt;/li&gt;
&lt;li&gt;Precompiling a Pattern and using the
    &lt;a href="http://download.java.net/jdk7/docs/api/java/util/regex/Pattern.html#split%28java.lang.CharSequence%29"&gt;split&lt;/a&gt;
    method on it. This has the advantage of expressing intent more
    clearly than the previous method and also being more efficient if
    one needs to split multiple strings using the same Pattern. However
    this still can be overkill if you just want to split using a single
    character (or even a list of&amp;nbsp;characters).&lt;/li&gt;
&lt;li&gt;Using the
    &lt;a href="http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#split%28java.lang.String,%20char%29"&gt;StringUtils.split&lt;/a&gt;
    method from the Apache Commons library (which &lt;em&gt;can&lt;/em&gt; be used in
    commercial projects!) or even &lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/jsplit/JSplitTest.java"&gt;roll your
    own&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When considering these alternatives you should consider expressiveness
first and performance second (also, don&amp;#8217;t optimize until a profiler
tells you to!). Luckily StringUtils is a clear choice from both points
of view, unless you need something more complex than one character
separators. Here are some performance&amp;nbsp;numbers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/hype-free/source/browse/trunk/jsplit/JSplitTest.java"&gt;Custom
    implementation&lt;/a&gt;
    (Apache Commons should be in the same ballpark) -&amp;nbsp;1&lt;/li&gt;
&lt;li&gt;StringTokenizer -&amp;nbsp;2.1&lt;/li&gt;
&lt;li&gt;String.split -&amp;nbsp;3.46&lt;/li&gt;
&lt;li&gt;Pattern.split -&amp;nbsp;2.87&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These numbers shouldn&amp;#8217;t be taken as an absolute and they can depend on
many things (for example if a profiler is or isn&amp;#8217;t attached, the version
of the &lt;span class="caps"&gt;JVM&lt;/span&gt;, etc), but they should point you in the right&amp;nbsp;direction.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: a very important note: while these solutions are mostly
drop-in replaceable, be aware that there are some differences between
them around the corner cases (ie. how they handle null&amp;#8217;s, what if the
string ends in a delimiter, what if two delimiters follow each other,
etc). If and when you decide to swap one for the other, be sure to
unittest your piece of code with the types of data you expect it to&amp;nbsp;handle.&lt;/p&gt;
&lt;p&gt;So there you have it, more than you ever wanted to know about splitting
Strings :-) Hopefully this helps&amp;nbsp;somebody.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 24 Jan 2010 21:55:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-24:2010/01/splitting-hairshhhhh-strings-with-java.html</guid><category>programming</category><category>java</category></item><item><title>The future of web hosting</title><link>https://www.grey-panther.net/2010/01/future-of-web-hosting.html</link><description>&lt;p&gt;I find myself thinking more and more about (a possible) future of the
web.&lt;br /&gt;
While the current system for &lt;a href="http://www.alreadyhosting.com"&gt;web
hosting&lt;/a&gt; works pretty well (and I am the
first&lt;br /&gt;
to say that we shouldn&amp;#8217;t make the perfect an enemy of the good), it
would be&lt;br /&gt;
really nice to exploit more of the potential in the web. What we could
do&lt;br /&gt;
(and we already have the&amp;nbsp;technology!):&lt;/p&gt;
&lt;p&gt;Make as many aspects of it fully distributed as possible: this would
mean&lt;br /&gt;
both content lookup (discovery) and hosting: today the average &lt;span class="caps"&gt;PC&lt;/span&gt; uses
very&lt;br /&gt;
little of its resources (whether we are talking about storage,
bandwidth or &lt;span class="caps"&gt;CPU&lt;/span&gt;).&lt;br /&gt;
We could push out content to the &amp;#8220;edges&amp;#8221; which would result in a better
utilization&lt;br /&gt;
of the local network infrastructure (hence &lt;span class="caps"&gt;ISP&lt;/span&gt; would gain from it) and
faster&lt;br /&gt;
content delivery without compromising secrecy if we so desire using &lt;span class="caps"&gt;PKI&lt;/span&gt;
(hence&lt;br /&gt;
content producers should like&amp;nbsp;it).&lt;/p&gt;
&lt;p&gt;As a &amp;#8220;sideeffect&amp;#8221; we could get an information system which has integrity
built in&lt;br /&gt;
by default (ie. X said Y at moment T - certified by cryptographic
protocols) and&lt;br /&gt;
is highly resistant to censorship (because information is distributed
and encrypted&lt;br /&gt;
by default both in transit and at rest). What a nice place it would&amp;nbsp;be!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 24 Jan 2010 20:04:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-24:2010/01/future-of-web-hosting.html</guid><category>reviewme</category><category>review</category></item><item><title>Best web hosting?</title><link>https://www.grey-panther.net/2010/01/best-web-hosting.html</link><description>&lt;p&gt;There is a lot of talk out there about which is the &amp;#8220;&lt;a href="http://www.alreadyhosting.com"&gt;Best Web
Hosting&lt;/a&gt;&amp;#8221; company.&lt;br /&gt;
With such a highly contentious subject (since being the &amp;#8220;best&amp;#8221; means
more&lt;br /&gt;
customers - and implicitly more money), there are a lot of
&amp;#8220;authoritative sources&amp;#8221;&lt;br /&gt;
out there. One authoritative (without quotes!) source would be
&lt;a href="http://news.netcraft.com/"&gt;Netcraft&lt;/a&gt;, but&lt;br /&gt;
then again, their statistics are somewhat limited in this space - it is
nice&lt;br /&gt;
to know who were the fastest or who had the smallest downtime, but this
doesn&amp;#8217;t&lt;br /&gt;
tell me anything about pricing, customer support and other services
(for example&lt;br /&gt;
DDoS resistance/mitigation can be quite important these&amp;nbsp;days!).&lt;/p&gt;
&lt;p&gt;So, how to choose? I have just two words - very carefully. Have a clear
goal in&lt;br /&gt;
mind (ie. &amp;#8220;I want a &lt;span class="caps"&gt;CMS&lt;/span&gt;&amp;#8221; or &amp;#8220;I want a blog&amp;#8221;) and try not to
overestimate your&lt;br /&gt;
needs (especially if it is a personal project). The most important
thing is to&lt;br /&gt;
own a domain (yeah, I known, look who&amp;#8217;s talking) - which you can
redirect later&lt;br /&gt;
on if you decide to move providers. I&amp;#8217;m a great fan of niche/dedicate
hosting&lt;br /&gt;
(like &lt;a href="http://draft.blogger.com/home"&gt;Blogger&lt;/a&gt;,
&lt;a href="http://wordpress.org/"&gt;Wordpress&lt;/a&gt;, or why not -
&lt;a href="http://www.squarespace.com/"&gt;Squarespace&lt;/a&gt;). Given their specialization&lt;br /&gt;
they can deliver their core competency very efficiently and securely
and very&lt;br /&gt;
often free of for a low cost. The second best thing would be a
(managed) &lt;span class="caps"&gt;VPS&lt;/span&gt;&lt;br /&gt;
and only in the last instance would I consider shared&amp;nbsp;hosting.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 22 Jan 2010 22:23:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-22:2010/01/best-web-hosting.html</guid><category>reviewme</category><category>review</category></item><item><title>Donating to the Haiti earthquake relief effort</title><link>https://www.grey-panther.net/2010/01/donating-to-haiti-earthquake-relief.html</link><description>&lt;p&gt;&lt;img alt="476633605_4e074c08d4_b" src="http://lh5.ggpht.com/_hrvCBhtWhJ4/S1RcVPbsufI/AAAAAAAACHM/TCkG4vitsBQ/476633605_4e074c08d4_b%5B2%5D.jpg?imgmax=800" title="476633605_4e074c08d4_b" /&gt;
Cross-posted from &lt;a href="http://blog.thetwitfeeder.com/2010/01/donating-to-haiti-earthquake-relief.html"&gt;the TwitFeeder
blog&lt;/a&gt;.
You might also want to check out the &lt;a href="/2010/01/options-for-giving.html"&gt;Options for
giving&lt;/a&gt; post, which enumerates more
organizations you should consider donating to (not related to the Haiti&amp;nbsp;earthquake).&lt;/p&gt;
&lt;p&gt;As most of you probably already know, the &lt;a href="http://en.wikipedia.org/wiki/Haiti"&gt;Republic of
Haiti&lt;/a&gt; has been hit by a
catastrophic earthquake. Please donate to the organizations which are
trying to help. The &lt;a href="http://tech.slashdot.org/story/10/01/15/185231/Digital-Fundraising-Booms-For-Haiti-Relief"&gt;online donation has been proven a great
success&lt;/a&gt; -
so good to see the bright side of globalization (speaking of online - it
is an interesting example of how &lt;a href="http://blog.mozilla.com/metrics/2010/01/14/internet-usage-in-haiti/"&gt;offline events can be observed
online&lt;/a&gt; -
an other example being the &lt;a href="http://www.google.org/flutrends/"&gt;Google
flu-trends&lt;/a&gt;). Below you will find a
compilation of reputable information sources, which is important, since
there are always a lot of scams around important events like&amp;nbsp;this.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Important!&lt;/em&gt; Most of the information is rather specific to the &lt;span class="caps"&gt;USA&lt;/span&gt; and
most of them presuppose credit-cards. If you live outside of
North-America and have PayPal account, I would recommend donating to the
&lt;a href="http://www.savethechildren.org/get-involved/fundraising-challenges/alt-ways-to-give-earthquake-wpg-haiti-0110.html"&gt;Haiti Earthquake Children in Emergency
Fund&lt;/a&gt;.
You can get a list of ways you can donate via PayPal/eBay on &lt;a href="https://www.thepaypalblog.com/2010/01/how-you-can-help-with-haiti-earthquake-relief-efforts-via-paypal-ebay/"&gt;their
blog&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://isc.sans.org/diary.html?storyid=7996"&gt;Doing the Right Thing&lt;/a&gt;
    from the &lt;span class="caps"&gt;SANS&lt;/span&gt; diary - it gives a couple of very good advices. It
    also specifically lists the following organizations:&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.care.org/"&gt;&lt;span class="caps"&gt;CARE&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.icrc.org/"&gt;The International Red&amp;nbsp;Cross&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://doctorswithoutborders.org/"&gt;Doctors Without&amp;nbsp;Borders&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;If you have a Google Checkout account, you can &lt;a href="http://googleblog.blogspot.com/2010/01/posted-by-soandso-soandso-team.html"&gt;donate to &lt;span class="caps"&gt;CARE&lt;/span&gt; or
    &lt;span class="caps"&gt;UNICEF&lt;/span&gt;&lt;/a&gt;
    using it. The &lt;a href="http://www.google.com/relief/haitiearthquake/"&gt;Google crisis response
    webpage&lt;/a&gt; also lists a
    lot of trustworthy organizations which accept your donation and &lt;span class="caps"&gt;SMS&lt;/span&gt;
    numbers (valid in the &lt;span class="caps"&gt;USA&lt;/span&gt; only!) which can be used for donation.
    They also offer free calls to Haiti trough Google&amp;nbsp;Voice&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Here are &lt;a href="http://www.cerias.purdue.edu/site/news/view/scammers_target_givers_after_haiti_earthquake/"&gt;a couple of great tips from the &lt;span class="caps"&gt;CERIAS&lt;/span&gt;
    blog&lt;/a&gt;
    (written by professor Spafford) to help you avoid being&amp;nbsp;scammed:  &lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Do not enter any information at a Web page that pops up
    unexpectedly when you visit some other&amp;nbsp;site.&lt;/li&gt;
&lt;li&gt;Never click on a Web site address (&lt;span class="caps"&gt;URL&lt;/span&gt;) in e-mail sent to you;
    it may look official, but most will be pointers to fraud or
    attack&amp;nbsp;sites.&lt;/li&gt;
&lt;li&gt;Don’t assume that every Web address returned by a search
    engine, such as Google or Bing, is a legitimate&amp;nbsp;organization.&lt;/li&gt;
&lt;li&gt;Do not respond to e-mail requesting donations or making a
    special offer (such as asking you to hold their assets while
    Haiti&amp;nbsp;rebuilds).&lt;/li&gt;
&lt;li&gt;Do not reveal any personal or financial information during a
    phone call you did not dial&amp;nbsp;yourself.&lt;/li&gt;
&lt;li&gt;If a friend forwards a &lt;span class="caps"&gt;URL&lt;/span&gt;, phone number or e-mail, don’t
    trust it until you check its validity. Your friend may have
    been scammed&amp;nbsp;first.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A similar article on the Microsoft website: &lt;a href="http://www.microsoft.com/protect/fraud/finances/donating.aspx"&gt;How to avoid online
    donation&amp;nbsp;scams&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you are from Canada, here are a couple of resources (via
    &lt;a href="http://www.securitybalance.com/2010/01/haiti/"&gt;Security Balance&lt;/a&gt;):  &lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;RED CROSS: www.redcross.ca
WORLD VISION CANADA: www.worldvision.ca
UNICEF: www.unicef.ca
SALVATION ARMY: www.salvationarmy.ca
MÉDECINS SANS FRONTIÈRES: www.msf.ca
&lt;/pre&gt;&lt;/div&gt;


&lt;/blockquote&gt;
&lt;p&gt;&lt;p&gt;
-   Many community websites also include a suggestion to donate (for
example
&lt;a href="http://blog.reddit.com/2010/01/helping-haiti-because-we-ought-to-do.html"&gt;reddit.com&lt;/a&gt;
or &lt;a href="http://oneforty.com/"&gt;oneforty&lt;/a&gt;) and you can be reasonably sure
about their recommendation &lt;em&gt;if you&amp;#8217;ve been using the site for some
time&lt;/em&gt; (then again, it never hurts to&amp;nbsp;double-check).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/rbrwr/"&gt;rbrwr&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 18 Jan 2010 15:04:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-18:2010/01/donating-to-haiti-earthquake-relief.html</guid><category>disaster</category><category>philantrophy</category><category>donation</category><category>charity</category></item><item><title>An useful Ubuntu (online) resource</title><link>https://www.grey-panther.net/2010/01/useful-ubuntu-online-resource.html</link><description>&lt;div style="float: right;"&gt;

![](https://wiki.ubuntu.com/UbuntuMagazine?action=AttachFile&amp;do=get&amp;target=fclogo.png)

&lt;/div&gt;

&lt;p&gt;If you use Ubuntu, the &lt;a href="http://fullcirclemagazine.org/"&gt;full circle
magazine&lt;/a&gt; is a great resource, go check
it out. For example from &lt;a href="http://fullcirclemagazine.org/2010/01/01/a-new-year-a-new-decade-and-a-new-issue-32/"&gt;the latest
issue&lt;/a&gt;
I&amp;#8217;ve learned that I should install
&lt;a href="http://packages.ubuntu.com/karmic/vim-nox"&gt;vim-nox&lt;/a&gt; on my servers if I
want to upgrade my 1980&amp;#8217;s experience to 1990&amp;#8217;s&amp;nbsp;:-).&lt;/p&gt;
&lt;p&gt;I there is one (small) issue, it is the fact that the &lt;span class="caps"&gt;PDF&lt;/span&gt; is very &lt;span class="caps"&gt;CPU&lt;/span&gt;
intensive (I&amp;#8217;m not really sure about the cause), but it is very good
looking and professionally done. Go look at it if you use Ubuntu. And
consider donating or writing an article or two&amp;nbsp;:-)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 11 Jan 2010 22:28:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-11:2010/01/useful-ubuntu-online-resource.html</guid><category>ubuntu</category><category>linux</category></item><item><title>Forensic analysis of JPEG images</title><link>https://www.grey-panther.net/2010/01/forensic-analysis-of-jpeg-images.html</link><description>&lt;p&gt;&lt;img alt="384044012_e88180a76c_o" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/S0tM0IrXR1I/AAAAAAAACGU/i4PAk5AqZD8/384044012_e88180a76c_o%5B2%5D.jpg?imgmax=800" title="384044012_e88180a76c_o" /&gt;
Recently I became aware of the &lt;a href="http://www.hackerfactor.com/blog/"&gt;Hackerfactor
blog&lt;/a&gt;, especially &lt;a href="http://www.hackerfactor.com/blog/index.php?/archives/322-Body-By-Victoria.html"&gt;the
posts&lt;/a&gt;
&lt;a href="http://www.hackerfactor.com/blog/index.php?/archives/346-Body-of-Answers.html"&gt;related
to&lt;/a&gt;
&lt;a href="http://www.hackerfactor.com/blog/index.php?/archives/297-Blurring-The-Truth.html"&gt;discovering&lt;/a&gt;
&lt;a href="http://www.hackerfactor.com/blog/index.php?/archives/112-Error-Level-Analyzer.html"&gt;image
manipulation&lt;/a&gt;.
It is interesting to read what one can deduce from an image, even when
one doesn’t use such “obvious” information sources like image metadata
(I say “obvious” because it seems that it isn’t obvious at all for most
people – but at least it can sanitized automatically). So here are the
links to the tools he&amp;nbsp;recommends:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.tinyappz.com/wiki/Error_Level_Analyser"&gt;Error Level&amp;nbsp;Analyser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.socosoftware.com/ELC.htm"&gt;&lt;span class="caps"&gt;ELC&lt;/span&gt; - Error Level&amp;nbsp;Compare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://infohost.nmt.edu/~schlake/ela/"&gt;&lt;span class="caps"&gt;ELA&lt;/span&gt; From&amp;nbsp;Scratch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You might also find &lt;a href="http://www.hackerfactor.com/papers/bh-usa-07-krawetz-wp.pdf"&gt;this
paper&lt;/a&gt;&amp;nbsp;interesting.&lt;/p&gt;
&lt;p&gt;All in all, the most interesting thing for me was the fact &lt;em&gt;professional
image manipulators&lt;/em&gt; (ok, I just made that word up, meaning “people who
know keyboard shortcuts in Photoshop”) repeatedly re-save the same image
in lossy formats like &lt;span class="caps"&gt;JPEG&lt;/span&gt;, thus compounding the loss of quality. Then
again, one should never underestimate human&amp;nbsp;stupidity.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/elsie/"&gt;Elsie esq.&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 11 Jan 2010 18:07:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-11:2010/01/forensic-analysis-of-jpeg-images.html</guid><category>security</category><category>forensics</category><category>images</category></item><item><title>Security vendor’s “top-threat” list proof for their less-than-perfect performance?</title><link>https://www.grey-panther.net/2010/01/security-vendors-top-threat-list-proof.html</link><description>&lt;p&gt;&lt;img alt="539560646_2a6865e8cf_o" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/S0tJHyy4QLI/AAAAAAAACGM/D8DETDXeAwU/539560646_2a6865e8cf_o%5B2%5D.jpg?imgmax=800" title="539560646_2a6865e8cf_o" /&gt;
Here is something I’ve been thinking about lately: most (all?) security
vendors publish their “top-threats” periodically. Those lists are made
up by centralizing numbers reported by their clients. While it is safe
to assume that the majority of the enumerated threats are blocked
straight-away – before they can execute a single piece of code – there
is a certain percentage which is after-the-fact detection (ie. the
machine gets infected, a signature comes out later on at which point –
if you’re lucky – the security program will block the&amp;nbsp;malware).&lt;/p&gt;
&lt;p&gt;Now I have no idea about the relative size of this subset (or if the
companies have it, or how they can collect it for that matter), but I
find the idea that marketing material put “out there” can backfire
amusing&amp;nbsp;:-).&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/katheros/"&gt;tigger1fic&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 11 Jan 2010 17:52:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-11:2010/01/security-vendors-top-threat-list-proof.html</guid><category>av</category><category>funny</category><category>security</category><category>marketing</category><category>fun</category><category>malware</category></item><item><title>A missed opportunity</title><link>https://www.grey-panther.net/2010/01/missed-opportunity.html</link><description>&lt;p&gt;&lt;img alt="3024043706_46c08dc0f5_o" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/S0dUjEj8b1I/AAAAAAAACF8/fN0Y_doKqRE/3024043706_46c08dc0f5_o%5B2%5D.jpg?imgmax=800" title="3024043706_46c08dc0f5_o" /&gt;
The theory of capitalism (and I’m greatly oversimplifying here, I know)
says that, even is we all follow just our own self interest, a global
“good” will somehow emerge. This is what F-Secure is doing &lt;a href="http://www.f-secure.com/weblog/archives/00001850.html"&gt;in their
blogpost&lt;/a&gt; where
they write about a specific ransomware which – if you get infected
with - encrypts your data and asks you a certain amount of money to
decrypt&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;Trouble is that their only recommendation is to “&lt;span
class="rss:item"&gt;remind everyone to backup their important files
regularly” (coincidentally – sarcasm, sarcasm – they have an online
backup component in their suite). They could have at least mentioned
that &lt;a href="http://sunbeltblog.blogspot.com/2010/01/data-doctor-2010-encrypted-files-we.html"&gt;Sunbelt provides a tool which may decrypt the
files&lt;/a&gt;
(I say may, because I didn’t actually try the tool). This is even more
inexplicable given the fact that they got the samples from Sunbelt
(“Many thanks to Adam Thomas from Sunbelt for providing samples of the&amp;nbsp;dropper”).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="rss:item"&gt;Shame on you F-Secure for putting a (possible)
financial interest before the interest of your&amp;nbsp;users!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="rss:item"&gt;So I don’t know about you, but instead of
claiming that pure self-interest is the solution, I will go&amp;nbsp;with:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="rss:item"&gt;Everything in moderation - including&amp;nbsp;moderation.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span class="rss:item"&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/d3stiny_sm4sher/"&gt;d3stiny_sm4sher&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="rss:item"&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. Who wants to bet that – if these claims are
bought to F-Secure’s attention – they will claim that they didn’t know
about the removal&amp;nbsp;tool?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: I&amp;#8217;m not singling out F-Secure here, Zarestel Ferrer from &lt;span class="caps"&gt;CA&lt;/span&gt;
just made a &lt;a href="http://community.ca.com/blogs/securityadvisor/archive/2010/01/09/another-recycled-ransomware-datadoctor2010.aspx"&gt;very similar
blogpost&lt;/a&gt;:
here are the facts (he did include some more technical detail, which is
nice for us, security geeks), you should have used a security product to
keep it&amp;nbsp;out:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="caps"&gt;CA&lt;/span&gt; advises to keep your security products signature updated to prevent
this kind of&amp;nbsp;ransomware.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The plus side: he doesn&amp;#8217;t pimp his company&amp;#8217;s product necessarily. The
minus: he doesn&amp;#8217;t link to the Sunbelt decryption tool either. On the
plus side, there is a comment facility on their website which could be
used by visitors to mention the tool and thus help out people who lost
data, but on the negative side: &lt;em&gt;it doesn&amp;#8217;t work, not even with &lt;span class="caps"&gt;IE&lt;/span&gt;!&lt;/em&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 08 Jan 2010 17:51:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-08:2010/01/missed-opportunity.html</guid><category>av</category><category>rant</category><category>security</category></item><item><title>Announcing a couple of contests</title><link>https://www.grey-panther.net/2010/01/announcing-couple-of-contests.html</link><description>&lt;p&gt;Here are some contests I&amp;nbsp;found:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://underhanded.xcott.com/?p=18"&gt;The Fifth Underhanded C
    Contest&lt;/a&gt; – the scope is to write
    benign looking code which would pass trough a code-review (and/or
    there is plausible deniability for the coder), but which does some
    evil things. Found it &lt;a href="http://slashdot.org/story/09/12/30/1446221/5th-Underhanded-C-Contest-Now-Open"&gt;via
    slashdot&lt;/a&gt;.
    Some of the &lt;a href="http://underhanded.xcott.com/?p=12"&gt;previous solutions&lt;/a&gt;
    are truly&amp;nbsp;ingenious.&lt;/li&gt;
&lt;li&gt;From the Forensics Contest comes &lt;a href="http://forensicscontest.com/2009/12/28/anns-appletv"&gt;Ann’s
    AppleTV&lt;/a&gt;, where
    you can win &amp;#8230; Ann’s AppleTV of&amp;nbsp;course!&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.forensickb.com/2010/01/forensic-practical-exercise-3.html"&gt;Forensic Practical Exercise
    #3&lt;/a&gt;
    – no prizes, just fun (and it isn’t all that simple either!). If you
    don’t own encase, you can transform the provided image into a &lt;span class="caps"&gt;DD&lt;/span&gt;
    style raw image using &lt;a href="http://www.sleuthkit.org/sleuthkit/download.php"&gt;the Sleuth
    Kit&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;img_cat.exe -v -i ewf Forensic_Practical_3.E01 &amp;gt; dd.raw
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;p&gt;
Just consider that the resulting image will be around 4G (because
the thumb drive it imaged was&amp;nbsp;4G).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Good luck to&amp;nbsp;everyone!&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. The current &lt;a href="/2009/12/new-challenges.html"&gt;Ethical Hacker Challenge&lt;/a&gt;
is still open until the 11th of&amp;nbsp;January.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 07 Jan 2010 19:22:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-07:2010/01/announcing-couple-of-contests.html</guid><category>challenge</category><category>contest</category></item><item><title>Options for giving</title><link>https://www.grey-panther.net/2010/01/options-for-giving.html</link><description>&lt;p&gt;&lt;img alt="2904899482_bebd9fcc74_o" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/S0YWEFQIrMI/AAAAAAAACF0/e5AWL05LFPs/2904899482_bebd9fcc74_o%5B2%5D.jpg?imgmax=800" title="2904899482_bebd9fcc74_o" /&gt;
I won’t go as far as to say that the calendar system is arbitrary and
there is no reason to follow it :-p, but I have to say that giving
donations shouldn’t be limited to Christmas. So if are/get in a giving
mood, here are some geeky organizations you could donate&amp;nbsp;to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There is &lt;a href="http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&amp;amp;item=190362159759#ht_500wt_1182"&gt;an auction going on on
    eBay&lt;/a&gt;
    for a very rare userfriendly.org T-shirt. All the proceedings &lt;a href="http://ars.userfriendly.org/news/?id=1262528117"&gt;will
    be donated to cancer
    research&lt;/a&gt; (there is
    1 day and 8 hours remaining as of this&amp;nbsp;moment)&lt;/li&gt;
&lt;li&gt;Buy &lt;a href="http://codeoffsets.com/Buy.aspx"&gt;Bad Code Offsets&lt;/a&gt;. 100% of the
    money will be donated to open source&amp;nbsp;projects&lt;/li&gt;
&lt;li&gt;Most of the “free” services on the Internet accept donations: go
    donate to your favorite open-source project /&amp;nbsp;podcast.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When we share, we all get richer. (ok, this is not mathematically exact,
but it sure sounds nice, doesn’t&amp;nbsp;it?)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: here are a couple more projects/organizations you should
consider donating&amp;nbsp;to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href="http://www.eff.org/"&gt;&lt;span class="caps"&gt;EFF&lt;/span&gt;&lt;/a&gt; - Electronic Frontier Foundation:
    &amp;#8220;the leading civil liberties group defending your rights in the
    digital&amp;nbsp;world.&amp;#8221;&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://www.softwarefreedom.org/"&gt;&lt;span class="caps"&gt;SFLC&lt;/span&gt;&lt;/a&gt; - The Software Freedom
    Law Center: &amp;#8220;We provide legal representation and other law-related
    services to protect and advance Free, Libre and Open Source Software
    (&lt;span class="caps"&gt;FLOSS&lt;/span&gt;)&amp;#8221;. Also, you should check out &lt;a href="http://www.softwarefreedom.org/podcast/"&gt;their
    podcast&lt;/a&gt; which is always
    full with interesting&amp;nbsp;information.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.wikileaks.org/"&gt;Wikileaks&lt;/a&gt;: &amp;#8220;The Sunshine Press
    (WikiLeaks) is an non-profit organization funded by human rights
    campaigners, investigative journalists, technologists and the
    general public. Through your support we have exposed significant
    injustice around the world—successfully fighting off over 100 legal
    attacks in the&amp;nbsp;process.&amp;#8221;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.openstreetmap.org/"&gt;OpenStreetMap&lt;/a&gt;: &amp;#8220;The Free Wiki World
    Map&amp;#8221; &lt;span class="caps"&gt;AKA&lt;/span&gt; the community created and owned map of the entire&amp;nbsp;world.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/casol/"&gt;Mickael Casol&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 07 Jan 2010 19:12:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-07:2010/01/options-for-giving.html</guid><category>geek</category><category>giving</category><category>donation</category></item><item><title>Making Prodigy’s “Smack My Bitch Up” in Ableton by Jim Pavloff</title><link>https://www.grey-panther.net/2010/01/making-prodigy-my-bitch-up-in-ableton.html</link><description>&lt;p&gt;I just remembered what a Prodigy fan I was. The &lt;a href="http://ingineru.ro/2010/01/07/muzica-nu-cred/"&gt;old
man&lt;/a&gt; :-p doesn&amp;#8217;t like it,
but that&amp;#8217;s ok. I don&amp;#8217;t like Tokyo Hotel either&amp;nbsp;:-)&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
[youtube=http://www.youtube.com/watch?v=eU5Dn-WaElI]

&lt;/center&gt;
And here is even more Prodigy music, curtesy of Grooveshark:

&lt;p&gt;
&lt;center&gt;
http://listen.grooveshark.com/widget.swf

&lt;/center&gt;
&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 07 Jan 2010 18:59:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-07:2010/01/making-prodigy-my-bitch-up-in-ableton.html</guid><category>music</category><category>fun</category><category>video</category></item><item><title>TwitFeeder is not for Twitter only</title><link>https://www.grey-panther.net/2010/01/twitfeeder-is-not-for-twitter-only.html</link><description>&lt;p&gt;The TwitFeeder has support for non-Twitter sources - crossposted from
&lt;a href="http://blog.thetwitfeeder.com/2010/01/twitfeeder-is-not-for-twitter-only.html"&gt;the TwitFeeder
blog&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The TwitFeeder uses the Twitter &lt;span class="caps"&gt;API&lt;/span&gt; to get the different bits and
pieces of information needed to generate the enhanced &lt;span class="caps"&gt;RSS&lt;/span&gt; feed.
However Twitter isn’t the only one exposing the &lt;span class="caps"&gt;API&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Laconi.ca (now &lt;a href="http://status.net/"&gt;Status.Net&lt;/a&gt;) is an “Open
    source microblogging service” and it exposes an &lt;span class="caps"&gt;API&lt;/span&gt; which is
    almost 100% compatible with the Twitter &lt;span class="caps"&gt;API&lt;/span&gt; and you can see it in
    action on Laconi.ca sites like &lt;a href="http://identi.ca/"&gt;Identi.ca&lt;/a&gt; or
    &lt;a href="http://army.twit.tv/"&gt;The TWiT Army&lt;/a&gt; (the Status.Net wiki also
    contains a &lt;a href="http://status.net/wiki/ListOfServers"&gt;large list of
    installs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wordpress.org &lt;a href="http://en.blog.wordpress.com/2009/12/12/twitter-api/"&gt;recently added support for a subset of the Twitter
    &lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What does this mean for users? All the Twitter specific tools just
became more usable, leading to more integration and less time-wasting
(which is the main idea behind this site). You can use the TwitFeeder
to subscribe to any site which exposes the Twitter &lt;span class="caps"&gt;API&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Subscribe to one of Identi.ca’s founder:
    &lt;a href="http://www.thetwitfeeder.com/html/identi.ca/evan"&gt;identi.ca/evan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Subscribe to Leo Laporte on the Twit Army:
    &lt;a href="http://www.thetwitfeeder.com/html/army.twit.tv/leolaporte"&gt;army.twit.tv/leolaporte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Subscribe to a Wordpress blog (most of the blogs already have an
    &lt;span class="caps"&gt;RSS&lt;/span&gt; feed, but just for the fun of it):
    &lt;a href="http://www.thetwitfeeder.com/html/wordpress.com/decipherinfosys"&gt;wordpress.com/decipherinfosys&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;More &lt;span class="caps"&gt;API&lt;/span&gt; support = Less siloed information = More&amp;nbsp;fun&lt;/p&gt;
&lt;p&gt;Programmers sidenote: there is no “official” compatibility test for
the &lt;span class="caps"&gt;API&lt;/span&gt;, so you can never be sure that you are perfectly compatible –
there will be always some gray areas (for example the exact link to a
status message – which varies between different implementations). All
you can do is to have rigorous unit tests. And code reuse either using
&lt;a href="http://code.google.com/p/twitfeeder/"&gt;our sources&lt;/a&gt; or
&lt;a href="http://code.google.com/p/python-twitter"&gt;pything-twitter&lt;/a&gt; to which
we’ve &lt;a href="http://code.google.com/p/python-twitter/issues/detail?id=114"&gt;contributed support for multiple
sources&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 06 Jan 2010 11:37:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-06:2010/01/twitfeeder-is-not-for-twitter-only.html</guid><category>twitter</category><category>twitfeeder</category></item><item><title>Google Web Hosting alternatives</title><link>https://www.grey-panther.net/2010/01/google-web-hosting-alternatives.html</link><description>&lt;p&gt;Google is one of the “big three” integrated web hubs on the internet
offering many services in one place, most of them free. Of course
everything has it price (nothing is truly free) and these offerings
being free means that they don’t guarantee a very end-user friendly &lt;span class="caps"&gt;SLA&lt;/span&gt;.
For example they recently retired Google Pages and now offer Google
Sites. While the services are similar (and Google tried to automatically
migrate as much of the content as possible), there are some corner cases
which were served by the former but not by the later (for example it is
my understanding that you can’t create custom &lt;span class="caps"&gt;HTML&lt;/span&gt; / &lt;span class="caps"&gt;CSS&lt;/span&gt; / &lt;span class="caps"&gt;JS&lt;/span&gt; – or
upload arbitrary files for that matter - on Google&amp;nbsp;Sites).&lt;/p&gt;
&lt;p&gt;The following blog post offers alternatives to the &lt;a href="http://www.alreadyhosting.com/blog/2009/06/google-web-hosting-great-alternatives/"&gt;google web
hosting&lt;/a&gt;
(which would be going with a hosting company – either shared, &lt;span class="caps"&gt;VPS&lt;/span&gt; or
dedicated; buying your own domain name and installing your &lt;span class="caps"&gt;CMS&lt;/span&gt; – or
having someone install it for you). Why I still lean towards the Google&amp;nbsp;offering:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;their &lt;span class="caps"&gt;SLA&lt;/span&gt; is still better than most of the industry’s (and certainly
    better than you can achieve by running your own&amp;nbsp;server!)&lt;/li&gt;
&lt;li&gt;the limited feature set means that they can optimize the heck out of
    it by adding redundancy and load balancing, even across data centers
    – if your server/datacenter fails, you &lt;em&gt;will&lt;/em&gt; have downtime. In
    contrast hardware failure for Google is a daily thing and the
    services are built to work around&amp;nbsp;it&lt;/li&gt;
&lt;li&gt;they gave lots of advance warnings that the change was going to&amp;nbsp;happen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 06 Jan 2010 10:25:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-06:2010/01/google-web-hosting-alternatives.html</guid><category>reviewme</category><category>review</category></item><item><title>A “Bob” story</title><link>https://www.grey-panther.net/2010/01/story.html</link><description>&lt;p&gt;&lt;em&gt;If you are not familiar with the “Bob story” concept: I first heard
about it on the &lt;a href="http://pauldotcom.com/"&gt;Pauldotcom&lt;/a&gt; podcast, where
Twitchy used to tell stories about how “Bob” went wardriving, created a
fake &lt;span class="caps"&gt;AP&lt;/span&gt; and did other grayhat things. They may have taken the idea from
somewhere, but this is where I’ve heard it&amp;nbsp;first.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Before Christmas Bob decided to treat himself with a Wii Fit (yes, the
only thing which came of it was a machine telling him that he is fat –
don’t ask :-p). Looking around several places he finally decided to go
with a supermarket, since it was the cheapest choice (by about 30 &lt;span class="caps"&gt;EUR&lt;/span&gt;).
He picked it up and rushed trough checkout. After paying he realized
that the &lt;a href="http://www.dragon-guard.com/boxguardalarm.html"&gt;anti-theft&lt;/a&gt;
system wasn’t removed, but since it didn’t beep when exiting the store
he figured that it should be&amp;nbsp;ok.&lt;/p&gt;
&lt;p&gt;So he rushes home and cuts one of the wires (sidenote: with very
low-tech equipment it took less than two minutes to do that. Using
something professional, yet still discreet enough to fit in a pocket, it
would take less than 30 seconds). And behold: it started to beep. The
beep was somewhat loud, but not so loud as to be heard outside of an
apartment, especially when put in some kind of acoustic insulation. Most
probably it would attract attention in a supermarket though. And thus
the alarm system met ~~its maker~~ a hammer and was promptly silenced.
Just for the fun of it, Bob decided to take it completely apart to see
how it&amp;nbsp;worked:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://picasaweb.google.com/dify.ltd/BloggerPictures?authkey=Gv1sRgCI-E9_j-pp-8oAE#5420244342674306530"&gt;&lt;img alt="" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/SziTgxDsNeI/AAAAAAAACFQ/YCAuFD0iOVQ/s400/soundkit.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ideas / lessons /&amp;nbsp;thoughts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The construction is not that robust and would quickly give way if a
    determined / knowledgeable attacker was picking away at it (physical
    force is&amp;nbsp;optional)&lt;/li&gt;
&lt;li&gt;It is powered by four small batteries. In fact, it is very easy to
    deactivate by using Philips a screwdriver and removing the
    batteries. In what Bob can only assume to be standard operating
    procedure, the battery access was oriented towards the box and
    became accessible only after the unit was removed from the&amp;nbsp;box&lt;/li&gt;
&lt;li&gt;It would be interesting to try the following experiment, cut the
    insulation in two places on one of the wires. Link together the two
    cuts with a good conductor (like a copper wire). Now cut it in the
    middle. If the system isn’t watching for fluctuations in the
    resistance, just for contact / no contact it should work (which is
    probably the case, since the alarm didn’t trigger until Bob fully
    cut trough the cable, even though he partially cut it&amp;nbsp;before)&lt;/li&gt;
&lt;li&gt;There are actually two pair of wires crossed rather than one long
    wire. The “normal” deactivation mechanism is probably a magnet which
    allows the case to be turned counter-clockwise (this is normally
    blocked by the combination of metallic plate (upper side of the
    picture) and the white ring (which was “teeth” oriented in one
    direction). Crafting a small deactivation device seems also rather&amp;nbsp;easy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My conclusion is that (similar to infosec) “you don’t have to outrun the
bear, only your friend” – meaning that you only have to raise the bar a
little to eliminate most of the problems. Then again, one should go into
such endeavors with “eyes open” and knowing the limitation of the
technology (which very few vendors will tell you). And, as always, it
will annoy your&amp;nbsp;customers!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 04 Jan 2010 18:06:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-04:2010/01/story.html</guid><category>physical security</category><category>security</category></item><item><title>Launching The Twit Feeder</title><link>https://www.grey-panther.net/2010/01/launching-twit-feeder.html</link><description>&lt;p&gt;As the readers of the blog know, &lt;a href="/2009/03/update-to-deshortify-pipe.html"&gt;I&amp;#8217;ve been slicing and dicing the
Twitter &lt;span class="caps"&gt;RSS&lt;/span&gt; feed for some
time&lt;/a&gt;. Finally I launched a
free service which wraps all the improvements in one, easy to use and
best of all, free (!) service: &lt;a href="http://www.thetwitfeeder.com/"&gt;The Twit
Feeder&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cross-Posted from &lt;a href="http://blog.thetwitfeeder.com/2010/01/launching-twit-feeder.html"&gt;The Twit Feeder
blog&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Efficiency is key for anyone consuming large amount of information.
One of the keys to efficiency is to centralize your information
consumption as much as possible. This is the reason why I chose to
subscribe to the &lt;span class="caps"&gt;RSS&lt;/span&gt; feeds of the Twitter accounts I liked, instead of
using the built-in follow mechanism: because I already use Google
Reader and it is much less cumbersome to add an other feed into it,
than to add an other site to my daily&amp;nbsp;routine.&lt;/p&gt;
&lt;p&gt;The Twitter &lt;span class="caps"&gt;RSS&lt;/span&gt; is a little lacking in features (understandably so,
since it isn&amp;#8217;t their main focus), so I&amp;#8217;ve created a service which
&amp;#8220;enriches&amp;#8221; the plain &lt;span class="caps"&gt;RSS&lt;/span&gt;&amp;nbsp;feed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;@links and #hashtags are made clickable
    (&lt;a href="http://www.thetwitfeeder.com/html/twitter.com/bagder"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;short URLs are expanded
    (&lt;a href="http://www.thetwitfeeder.com/html/twitter.com/bagder"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;the avatar of the author is shown
    (&lt;a href="http://www.thetwitfeeder.com/html/twitter.com/bagder"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;smileys are transformed into their pictorial&amp;nbsp;representation&lt;/li&gt;
&lt;li&gt;it is possible to subscribe for hashtag feeds, not just individual
    users
    (&lt;a href="http://www.thetwitfeeder.com/html/twitter.com/%23twitter"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;geo-tagged status updates contain a link to the map showing the
    location
    (&lt;a href="http://www.thetwitfeeder.com/html/identi.ca/evan"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So there you have it. Use it, enjoy it, &lt;a href="http://www.thetwitfeeder.com/supportus"&gt;support
it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. What should the next feature added be? I can think of&amp;nbsp;two:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/twitfeeder/issues/detail?id=1"&gt;Create a
    badge&lt;/a&gt;
    (which can be embedded on third-party websites) showing the
    follower count and the subscriber count trough Twit&amp;nbsp;Feeder&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/twitfeeder/issues/detail?id=2"&gt;Make it possible to embed a &lt;span class="caps"&gt;HTML&lt;/span&gt; version of the feed on third
    party
    websites&lt;/a&gt;
    (like&amp;nbsp;blogs)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do you like these features? Vote for them by starring them. Have other
ideas? Add it to &lt;a href="http://code.google.com/p/twitfeeder/issues/list"&gt;our issue
tracker&lt;/a&gt;. Also,
bribes are welcome and they speed up the implementation of a feature
considerably&amp;nbsp;;-)&lt;/p&gt;
&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 03 Jan 2010 20:38:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-03:2010/01/launching-twit-feeder.html</guid></item><item><title>Choosing a Java profiler</title><link>https://www.grey-panther.net/2010/01/choosing-java-profiler.html</link><description>&lt;p&gt;Recently I&amp;#8217;ve been looking around for a Java profiler (since the two
things you need for a successful performance tuning session are good
data and clear targets). I&amp;#8217;ll share the notes about my findings in the
hope that they might be useful for someone. Quick disclaimer: don&amp;#8217;t
believe everything you read on the Internet! These are my own findings /
experiences / opinions and they might not match yours. Also, they are
specific to this point in time. It is quite possible that later versions
of the given product fixes some / all of the problems I&amp;#8217;ve experienced.
An other distinct possibility is that I&amp;#8217;ve overlooked something. If this
is the case, please leave a comment and I&amp;#8217;ll update the post &lt;span class="caps"&gt;ASAP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Options I&amp;#8217;ve eliminated&amp;nbsp;completely:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://developer.amd.com/cpu/codeanalyst/codeanalystwindows/codesleuth/Pages/default.aspx"&gt;&lt;span class="caps"&gt;AMD&lt;/span&gt;
    CodeSleuth&lt;/a&gt; -
    even though it is free as in freedom (open source), it has some
    serious shortcomings: it needs Windows (!) + Java 1.6 (might be a
    problem if you&amp;#8217;re working with legacy apps) + Eclipse. Also, when
    I&amp;#8217;ve tried to test it in a &lt;span class="caps"&gt;VM&lt;/span&gt; (VirtualBox running Windows &lt;span class="caps"&gt;XP&lt;/span&gt; on an
    Intel machine with &lt;span class="caps"&gt;VT&lt;/span&gt;-x enabled), it promptly bluescreend the
    machine (even though the documentation clearly says that you &lt;em&gt;do
    not&lt;/em&gt; need an &lt;span class="caps"&gt;AMD&lt;/span&gt; processor to use&amp;nbsp;it)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jrat.sourceforge.net/"&gt;JRat&lt;/a&gt;%20) - &lt;span class="caps"&gt;FLOSS&lt;/span&gt;, but it doesn&amp;#8217;t
    seem to be developed actively and has a limited set of features (but
    it worked, never skipping a beat, when I&amp;#8217;ve tried&amp;nbsp;it)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.eclipse.org/tptp/%20"&gt;Eclipse &lt;span class="caps"&gt;TPTP&lt;/span&gt;&lt;/a&gt; (Test &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Performance
    Tools Platform) - Eclipse specific. I&amp;#8217;ve tried to install two
    different versions under Windows and - even though the installation
    seemed successful both times - it didn&amp;#8217;t function as expected (in
    fact, whenever I tried to launch an application in profile mode,
    Eclipse just&amp;nbsp;hung)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.quest.com/jprobe/"&gt;JProbe&lt;/a&gt; - Commercial, and it has a
    confusing licensing structure (I get easily confused - :-p)There are
    three components (Memory / Performance / Coverage Analysis) and each
    needs to be licensed&amp;nbsp;separately&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I narrowed down my choices to three&amp;nbsp;possibilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.yourkit.com/"&gt;YourKit from YourKit &lt;span class="caps"&gt;LLC&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ej-technologies.com/products/jprofiler/overview.html"&gt;JProfiler from&amp;nbsp;ej-technologies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://profiler.netbeans.org/"&gt;the NetBeans profiler&lt;/a&gt; (~~based on
    &lt;a href="https://visualvm.dev.java.net/"&gt;VisualVM&lt;/a&gt;~~ - I have been informed
    that in fact the reverse is true: VisualVM reuses the profiling code
    from&amp;nbsp;NetBeans)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Things they have in&amp;nbsp;common:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-&lt;span class="caps"&gt;OS&lt;/span&gt; support (Windows / Linux / Mac /&amp;nbsp;Solaris)&lt;/li&gt;
&lt;li&gt;Multi-&lt;span class="caps"&gt;IDE&lt;/span&gt; support (IntelliJ, Eclipse, Netbeans) - with the exception
    of the NetBeans profiler, obviously&amp;nbsp;:-)&lt;/li&gt;
&lt;li&gt;Support for multiple / older versions of Java (again, important if
    you are working on a legacy project): 1.4 / 1.5 / 1.6 0 with the
    exception of the NetBeans profiler, ~~which is based on VisualVM~~
    shares the profiling code with Visual &lt;span class="caps"&gt;VM&lt;/span&gt;, and - although I couldn&amp;#8217;t
    find any explicit mention about this in the NetBeans documentation,
    the VisualVM site has &lt;a href="https://visualvm.dev.java.net/features.html#feature_matrix"&gt;a
    table&lt;/a&gt;
    which shows that profiling is not available for older versions of
    the &lt;span class="caps"&gt;JVM&lt;/span&gt;. &lt;em&gt;Update&lt;/em&gt;: I have been informed (see the comment below) that
    these are not in fact limitations of the NetBeans &lt;span class="caps"&gt;IDE&lt;/span&gt;, only of&amp;nbsp;VisualVM&lt;/li&gt;
&lt;li&gt;Support for remote profiling (again, with the - possible - exception
    of NetBeans - the same situation as&amp;nbsp;above)&lt;/li&gt;
&lt;li&gt;Memory / &lt;span class="caps"&gt;CPU&lt;/span&gt;&amp;nbsp;profiling&lt;/li&gt;
&lt;li&gt;Thread state monitoring (runnable / running / blocked /&amp;nbsp;waiting)&lt;/li&gt;
&lt;li&gt;Dynamic instrumentation (no recompilation&amp;nbsp;needed)&lt;/li&gt;
&lt;li&gt;Saving and comparing of&amp;nbsp;snapshots&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="caps"&gt;CPU&lt;/span&gt; profiling overhead (measured by micro-benchmark which calculated &lt;span class="caps"&gt;PI&lt;/span&gt;
with increasing&amp;nbsp;precision):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;YourKit: \~5x&amp;nbsp;slowdown&lt;/li&gt;
&lt;li&gt;JProfiler: \~10x slowdown (remark: JProfiler has a nice feature
    which suggests methods to exclude after the first run - ie. methods
    from the base libraries which are very frequently called - to reduce
    the profiling&amp;nbsp;overhead)&lt;/li&gt;
&lt;li&gt;NetBeans / VisualVM:&amp;nbsp;\~4x&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Remarks: these were &amp;#8220;full profiling&amp;#8221; results. Some profilers (JProfiler
for example) support an alternative method: taking a look at the current
stack for each threat at each N ms. This alternative method has a much
smaller overhead and most of the time gives the same relative result
(ie. the ranking of the most costly methods) even if the absolute times
are not as&amp;nbsp;accurate.&lt;/p&gt;
&lt;p&gt;YourKit&amp;nbsp;details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.yourkit.com/purchase/index.jsp#licensing_policy"&gt;http://www.yourkit.com/purchase/index.jsp#licensing_policy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;It has the best integration with Eclipse from the&amp;nbsp;three.&lt;/li&gt;
&lt;li&gt;In the default setup it only shows the result after the application
    has (properly) ended. If the application terminates unexpectedly
    (for example you kill it), the results won&amp;#8217;t be&amp;nbsp;shown&lt;/li&gt;
&lt;li&gt;It has no wizards for running user-specified Java programs (ie. from
    outside of the&amp;nbsp;IDEs)&lt;/li&gt;
&lt;li&gt;I&amp;#8217;ve been informed that both of the previous shortcomings can be
    avoided by using the &amp;#8220;remote&amp;#8221; profiling feature (ie. by starting
    your program manually with the given agent). While this very well be
    true, it also sounds extremely&amp;nbsp;cumbersome.&lt;/li&gt;
&lt;li&gt;A possible advantage is that they also have a .&lt;span class="caps"&gt;NET&lt;/span&gt; profiler in
    addition to the Java profiler, so if your programmers regularly work
    in &amp;#8220;both worlds&amp;#8221;, or if you have distinct teams which do, you might
    be able to get a deal from them (I didn&amp;#8217;t see anything on their site
    indicating that there was such an offer, but I imagine that it can
    be&amp;nbsp;negotiated)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;JProfiler&amp;nbsp;details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ej-technologies.com/buy/jprofiler/floating/volumeDiscounts?itemId=517127"&gt;http://www.ej-technologies.com/buy/jprofiler/floating/volumeDiscounts?itemId=517127&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Has a simple wizard for starting&amp;nbsp;applications&lt;/li&gt;
&lt;li&gt;It was the only one from the three which could show the stacktrace
    for the threat &lt;em&gt;holding&lt;/em&gt; the lock, not just for the one waiting for
    it (very important, since it removes a lot of the&amp;nbsp;guesswork!)&lt;/li&gt;
&lt;li&gt;It was the only one (out of the three) which threated locks from the
    java.util.concurrent.locks package the same as &amp;#8220;synchronized&amp;#8221; blocks
    (both in the thread view - where it correctly displayed &amp;#8220;blocked&amp;#8221;
    instead of &amp;#8220;waiting&amp;#8221; - and in the &amp;#8220;monitor&amp;#8221; view). The other
    profilers knew only about&amp;nbsp;&amp;#8220;synchronized&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NetBeans&amp;nbsp;details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="caps"&gt;FLOSS&lt;/span&gt; (Free, Libre, Open source&amp;nbsp;software)&lt;/li&gt;
&lt;li&gt;It has a decent profiler ~~with all the essential functionalities
    based on VisualVM~~ - see the comment&amp;nbsp;below&lt;/li&gt;
&lt;li&gt;~~Unfortunately this means that it has the same limitations as the
    VisualVM technology: only local profiling on the 1.6 &lt;span class="caps"&gt;JVM&lt;/span&gt; is
    supported (this might or might not be a big deal for&amp;nbsp;you)~~&lt;/li&gt;
&lt;li&gt;I have been informed that NetBeans fully suppots older version of
    Java and also remote profiling&amp;nbsp;scenarios.&lt;/li&gt;
&lt;li&gt;One can use VisualVM directly, with the major advantage of being
    able to profile &lt;em&gt;any&lt;/em&gt; local Java application in an ad-hoc manner
    (ie. the given application doesn&amp;#8217;t even have to be started with a
    specific java agent, it is injected dynamically). There are of
    course some limitations (as with any technology): &lt;span class="caps"&gt;AFAIK&lt;/span&gt;, there are
    some limitations to the &amp;#8220;visibility&amp;#8221; of local Java applications
    (something along the lines of &amp;#8220;has to be started under the same
    account&amp;#8221;). Also, I found situations where VisualVM was unable to
    successfully instrument an application (and I&amp;#8217;m not really sure
    about the reasons). In such cases support for &amp;#8220;pre-instrumentation&amp;#8221;
    would be&amp;nbsp;nice.&lt;/li&gt;
&lt;li&gt;Also, &lt;a href="http://blogs.sun.com/nbprofiler/entry/visualvm_1_2_released"&gt;VisualVM 1.2 introduced the option to use a sampling
    profiler&lt;/a&gt;
    for even lower&amp;nbsp;overhead.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Personal&amp;nbsp;conclusions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JProfiler is the best money can buy (it seems that &lt;a href="http://skillsmatter.com/podcast/cloud-grid/making-every-millisecond-count-jvm-performance-tuning-in-the-real-world"&gt;I&amp;#8217;m not alone
    with this
    opinion&lt;/a&gt;),
    but it is very expensive (especially the &amp;#8220;floating&amp;#8221; licenses - they
    are really useful because they allow the product to be installed on
    an arbitrary number of machines, but only N of them can be used at
    the same&amp;nbsp;time)&lt;/li&gt;
&lt;li&gt;YourKit is mediocre (from the point of view of the capabilities),
    but it is considerably less expensive (especially the floating&amp;nbsp;licenses)&lt;/li&gt;
&lt;li&gt;NetBeans is nice, if you already use NetBeans or you can convince
    people to use NetBeans. In fact it is comparable with YourKit with
    regards to the feature set ~~with the two restrictions of local
    profiling on 1.6~~ and it is free! Alternatively, you can use
    VisualVM if you are at the start of your profiling journey (for
    example: you don&amp;#8217;t yet have the automated &lt;span class="caps"&gt;QA&lt;/span&gt; environment for
    performance regression&amp;nbsp;testing).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span class="caps"&gt;HTH&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. And remember: the two most important things for performance
optimization are: good data (collected by a profiler in an environment
which is as close to the production one as possible - there are a lot of
great profilers out there for many programming languages, for example
&lt;a href="http://blog.timbunce.org/2009/12/24/nytprof-v3-worth-the-wait/"&gt;Devel::NYTProof&lt;/a&gt;
for Perl) and clear goals (along the lines of &amp;#8220;lower the latency by 10%&amp;#8221;
or &amp;#8220;increase the throughput by&amp;nbsp;20%&amp;#8221;).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sun, 03 Jan 2010 11:17:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-03:2010/01/choosing-java-profiler.html</guid><category>programming</category><category>profiler</category><category>java</category></item><item><title>As if you need extra reasons for paranoia</title><link>https://www.grey-panther.net/2010/01/as-if-you-need-extra-reasons-for.html</link><description>&lt;p&gt;As they say: just because you&amp;#8217;re paranoid, it doesn&amp;#8217;t mean that you&amp;#8217;re
not being watched! Here are a couple of links which freaked me out&amp;nbsp;recently:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://infotrope.net/blog/2009/11/09/warily-and-with-much-trepidation/"&gt;Warily, and with much
    trepidation&lt;/a&gt; -
    a blogpost about how one deleted his facebook settings because of
    privacy concerns. I do have a facebook page, but I only use to
    prevent &amp;#8220;identity spoofing&amp;#8221; and have almost zero interest in
    actually using it. Also, on a related note, I&amp;#8217;ve read recently that
    someone was asked a security question by his bank which would
    indicate that they (whoever &amp;#8220;they&amp;#8221; might be - the bank, a third
    party contracted to do it, an information broker, etc) are
    data-mining facebook (the question was something along the lines of
    &amp;#8220;your sister-in-law&amp;#8217;s maiden name&amp;#8221; - which &lt;span class="caps"&gt;BTW&lt;/span&gt; I couldn&amp;#8217;t&amp;nbsp;answer!)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.catonmat.net/blog/generating-feedburner-graphs/"&gt;How to Generate Nice Graphs for
    Feedburner&lt;/a&gt; -
    nice article about generating graphs (quite nice looking graphs I
    might add!) with Perl, until you realize that your feedburner
    statistics is freely available for everyone, just by fetching one
    &lt;span class="caps"&gt;URL&lt;/span&gt; which has no protection whatsoever! Not that I consider
    feedburner stats &amp;#8220;extremely sensitive&amp;#8221;, but it makes you wonder what
    other data do &amp;#8220;helpful&amp;#8221; service providers make available about your
    activities without your&amp;nbsp;knowledge?&lt;/li&gt;
&lt;li&gt;How to take down a blogspot blog (like mine for example!)? Just &lt;a href="http://globaleconomicanalysis.blogspot.com/2009/12/spoof-attack-takes-down-blog.html"&gt;get
    Google to suspend the associated gmail
    account&lt;/a&gt;!
    Now, from the writeup it is not entirely clear what happened.
    Scenario A: someone broke into Mish&amp;#8217;s account (by bruteforcing the
    password / guessing the password reset question / installing a
    keylogger on his machine / etc) and used it to send spam. Scenario
    B: someone sent spam spoofing the &amp;#8220;from&amp;#8221; address (quite easy to do,
    but most spam filters should detect it). If it was scenario A, we
    can at least console ourselves with the fact that there is something
    we can do (like practicing &amp;#8220;safe-hex&amp;#8221;). If it was scenario B, it
    means that any two-bit script kiddie can take down any blog&amp;#8230; And
    not every one of us knows Googlers like Mish who can help him sort
    the situation out&amp;nbsp;quickly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now, if you&amp;#8217;re still reading and not hiding under a rock scared, here
are some links to cheer you&amp;nbsp;up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.nakedcapitalism.com/2009/12/best-antidotes-of-2009-part-1.html"&gt;Best Antidotes of 2009 (Part&amp;nbsp;1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nakedcapitalism.com/2010/01/best-antidotes-of-2009-part-2.html"&gt;Best Antidotes of 2009 (Part&amp;nbsp;2)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=iC65ufGUvKM"&gt;Metallica Enter Sandman performed on &lt;span class="caps"&gt;KAZOO&lt;/span&gt; by Mister Tim&amp;nbsp;(multitrack)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=LhkkHM0N34Y"&gt;Yess Black&amp;nbsp;Betty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=xtMz2fG5FDU"&gt;Hacker&amp;#8217;s&amp;nbsp;Holiday&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Have fun and remember: &amp;#8220;The real test of courage is in our daily&amp;nbsp;lives.&amp;#8221;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 02 Jan 2010 22:23:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-02:2010/01/as-if-you-need-extra-reasons-for.html</guid></item><item><title>Don’t Yield to pressure?</title><link>https://www.grey-panther.net/2010/01/don-yield-to-pressure.html</link><description>&lt;p&gt;or: does Thread.yield have its place in todays Java&amp;nbsp;programs?&lt;/p&gt;
&lt;p&gt;I was profiling a rather old legacy codebase (since the first rule of
performance optimization is &amp;#8220;profile it&amp;#8221; with the close second of &amp;#8220;have
clear goals in mind&amp;#8221; - but that&amp;#8217;s an other post) and - after optimizing
the first few hotspots,
&lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#yield%28%29"&gt;Thread.yield&lt;/a&gt;
appeared at the top of the most timely methods. I was intrigued, since I
didn&amp;#8217;t use yield since I wrote &amp;#8220;cooperative multitasking&amp;#8221; programs for
Windows 3.1 in &lt;span class="caps"&gt;VB&lt;/span&gt; 3 (and I&amp;#8217;m not &lt;a href="http://docs.python.org/reference/simple_stmts.html#yield"&gt;a big Python
programmer&lt;/a&gt;
either). So I scoured the &amp;#8216;net for Information on why/when you should
use Thread.yield, but came up with relative few pieces of&amp;nbsp;information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I found indications that some old Linux kernels behaved poorly on
    single processor machines if Thread.yield wasn&amp;#8217;t used (as in: one
    thread consuming all the &lt;span class="caps"&gt;CPU&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;There were discussion about using Thread.sleep(0) vs. Thread.yield
    (apparently there is a difference regarding the treatment of
    remaining time-quantum by the&amp;nbsp;scheduler)&lt;/li&gt;
&lt;li&gt;&amp;#8230; this was pretty much it&amp;nbsp;&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So I&amp;#8217;ve decided to do some micro-benchmarks. They consisted of a
producer and a consumer thread, connected by an unbounded queue (a
LinkedBlockingQueue to be more exact) and I measure the number of items
produced / consumer in 10 seconds. The first set of measurements were
performed on a dual-core machine, while the second set in a &lt;span class="caps"&gt;VM&lt;/span&gt; to
simulate a single-&lt;span class="caps"&gt;CPU&lt;/span&gt; system (it&amp;#8217;s kind of ironic that one has to
perform simulation to evaluate single-core systems). This isn&amp;#8217;t meant to
be a performance, evaluation, thus all the numbers are normalized to the
produced/direct&amp;nbsp;number.&lt;/p&gt;
&lt;style&gt;
#java_yield_results_table { width: 100%; }&lt;br&gt;&lt;/br&gt;
#java_yield_results_table th { text-align: left; }&lt;br&gt;&lt;/br&gt;
#java_yield_results_table td { text-align: right; }&lt;br&gt;&lt;/br&gt;
&lt;/style&gt;

&lt;table id="java_yield_results_table" border="1" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;/th&gt;
&lt;th colspan="2"&gt;
2 CPUs

&lt;/th&gt;
&lt;th colspan="2"&gt;
1 &lt;span class="caps"&gt;CPU&lt;/span&gt;

&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
Direct

&lt;/th&gt;
&lt;td&gt;
1

&lt;/td&gt;
&lt;td&gt;
1

&lt;/td&gt;
&lt;td&gt;
1

&lt;/td&gt;
&lt;td&gt;
0.06

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
Thread.yield()

&lt;/th&gt;
&lt;td&gt;
0.12

&lt;/td&gt;
&lt;td&gt;
0.12

&lt;/td&gt;
&lt;td&gt;
0.04

&lt;/td&gt;
&lt;td&gt;
0.04

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
Thread.sleep(0)

&lt;/th&gt;
&lt;td&gt;
0.1

&lt;/td&gt;
&lt;td&gt;
0.1

&lt;/td&gt;
&lt;td&gt;
0.04

&lt;/td&gt;
&lt;td&gt;
0.04

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
Priority - 1

&lt;/th&gt;
&lt;td&gt;
0.81

&lt;/td&gt;
&lt;td&gt;
0.81

&lt;/td&gt;
&lt;td&gt;
1

&lt;/td&gt;
&lt;td&gt;
0.05

&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;(My)&amp;nbsp;conclusions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;These days there is no need for &amp;#8220;helping&amp;#8221; the &lt;span class="caps"&gt;OS&lt;/span&gt; scheduler out. Both
    of the proposed methods (yield and sleep) reduced the throughput of
    the system&amp;nbsp;considerably.&lt;/li&gt;
&lt;li&gt;Speaking of throughput: make a decision about the (performance)
    numbers your system should achieve. This includes both throughput
    and delay. Concrete (and realistic!) numbers. &amp;#8220;As good as possible&amp;#8221;
    is not a number! Neither is &amp;#8220;better than the current&amp;#8221;. Then profile
    and optimize it until the numbers are achieved and no&amp;nbsp;further.&lt;/li&gt;
&lt;li&gt;In the case of a single &lt;span class="caps"&gt;CPU&lt;/span&gt; system there was a big imbalance between
    the speed of the producer and consumer which Thread.yield (or
    Thread.sleep) seemed to solve. Consider however, that this
    &amp;#8220;solution&amp;#8221; comes at the price of (almost) two orders of magnitude
    reduction in the throughput. A much better solution would be (in
    case you are in the rare situation of single &lt;span class="caps"&gt;CPU&lt;/span&gt; - maybe you&amp;#8217;re on a
    &lt;span class="caps"&gt;VPS&lt;/span&gt;, or you have multiple CPUs, but the number of threads far
    outweigh the number of CPUs) to use a bounder queue. This way the
    producer gets slowed down (by blocking repeatedly) if it produces
    faster than the consumer can consume. Then again, you need consider
    if this is acceptable for your application. Maybe the &amp;#8220;overflow&amp;#8221;
    situation is rare and it is more important to handle each element
    (and there are enough resources for it in the long run) than
    response speed. You have to know your application and its
    priorities. There is no way around&amp;nbsp;it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally I would like to leave you with the following short (\~30 min)
presentation about performance optimization on the &lt;span class="caps"&gt;JVM&lt;/span&gt;: &lt;a href="http://skillsmatter.com/podcast/cloud-grid/making-every-millisecond-count-jvm-performance-tuning-in-the-real-world"&gt;Making every
millisecond count! &lt;span class="caps"&gt;JVM&lt;/span&gt; performance tuning in the
real-world&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 02 Jan 2010 20:21:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2010-01-02:2010/01/don-yield-to-pressure.html</guid><category>programming</category><category>multithreading</category><category>profiler</category><category>java</category></item><item><title>How to save/restore iptables rules on Ubuntu?</title><link>https://www.grey-panther.net/2009/12/how-to-saverestore-iptables-rules-on.html</link><description>&lt;p&gt;This might be an obvious thing to old Linux-heads out there, but it sure
caught me off-guard, so there might be some use in spelling it&amp;nbsp;out:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;iptables-save&lt;/code&gt; and &lt;code&gt;iptables-restore&lt;/code&gt; do not actually save/load the
iptables rules to/from an external file. You are responsible for
redirecting the output of &lt;code&gt;iptables-save&lt;/code&gt; to a file and modifying the
interface-up scripts such that it is loaded before the given interface
comes&amp;nbsp;up.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://help.ubuntu.com/community/IptablesHowTo#Saving%20iptables"&gt;Ubuntu documentation tells you
how&lt;/a&gt;
(although, it also was the source of my confusion) - the following
commands should be executed as root, so don&amp;#8217;t forget to &lt;code&gt;sudo su&lt;/code&gt; first:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Save your rules in a file: &lt;code&gt;iptables-save &amp;gt;/etc/iptables.rules&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Edit your interfaces file (substitute your own favorite editor
    here): &lt;code&gt;nano /etc/network/interfaces&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add a pre-up command to restore the saved rule. The fully configured
    file should look similar to this (the bold line is the one added):&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;auto eth0
iface eth0 inet dhcp
  pre-up iptables-restore &amp;lt; /etc/iptables.rules
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span class="caps"&gt;HTH&lt;/span&gt;. And remember - security is a process / mindset, not a state. Always
test the configuration changes you&amp;#8217;ve done, don&amp;#8217;t just assume that
everything went ok because you didn&amp;#8217;t receive error&amp;nbsp;messages.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 28 Dec 2009 13:01:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-12-28:2009/12/how-to-saverestore-iptables-rules-on.html</guid><category>firewalls</category><category>ubuntu</category><category>linux</category><category>tcp/ip</category><category>tip</category></item><item><title>How eco-friendly is a BMW?</title><link>https://www.grey-panther.net/2009/12/how-eco-friendly-is-bmw.html</link><description>&lt;div style="float: right; margin: 5px;"&gt;

[![I &lt;span class="caps"&gt;WANT&lt;/span&gt; A &lt;span class="caps"&gt;BMW&lt;/span&gt;
&lt;span class="caps"&gt;ISETTA&lt;/span&gt;!](http://farm1.static.flickr.com/77/218926578_b24658ed93.jpg)](http://www.flickr.com/photos/maazbot/218926578/ &amp;#8220;I &lt;span class="caps"&gt;WANT&lt;/span&gt; A &lt;span class="caps"&gt;BMW&lt;/span&gt; &lt;span class="caps"&gt;ISETTA&lt;/span&gt;! by maazbot, on Flickr&amp;#8221;)

&lt;/div&gt;

&lt;p&gt;The short answer is: I don&amp;#8217;t know&amp;nbsp;:-)&lt;/p&gt;
&lt;p&gt;While I was watching National Geographic, I caught a glimpse of the &lt;span class="caps"&gt;BMW&lt;/span&gt;
&amp;#8220;Efficient Dynamic&amp;#8221; advertisement campaign. The claims made by this
campaign were quite extraordinary and - being the cynic that I am - I
thought: hang on, this sounds too good to be true. The claims as I
recall&amp;nbsp;were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="caps"&gt;BMW&lt;/span&gt; reduced fuel consumption by&amp;nbsp;16%&lt;/li&gt;
&lt;li&gt;This reduction is more than twice the reduction achieved by the next
    premium segment&amp;nbsp;competitor&lt;/li&gt;
&lt;li&gt;This reduction is more than twice the average reduction obtained by
    the&amp;nbsp;industry&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Being an aspiring skeptic I decided to look into these claims, but being
the lazy ass that I am, quickly gave up after making a mental list of
what would be involved (finding out what they mean by &amp;#8220;premium segment&amp;#8221;
and who their competitor were, finding a reliable source of data, etc).
So, instead, I turned to math to see if all these claims can be true at
once. So, in math-talk we have the following&amp;nbsp;data:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="caps"&gt;BMW&lt;/span&gt; =&amp;nbsp;16&lt;/li&gt;
&lt;li&gt;Lets suppose that we have three competitors A, B and C with A being
    the closes to &lt;span class="caps"&gt;BMW&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;A, B and C are in the interval [0,&amp;nbsp;100]&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;BMW&lt;/span&gt; &gt;=&amp;nbsp;2*A&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;BMW&lt;/span&gt; &gt;= 2 * &lt;span class="caps"&gt;AVG&lt;/span&gt;(&lt;span class="caps"&gt;BMW&lt;/span&gt;, A, B,&amp;nbsp;C)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then I turned to the &lt;a href="http://wiki.services.openoffice.org/wiki/Documentation/OOo3_User_Guides/Calc_Guide/Solver"&gt;OpenOffice
Solver&lt;/a&gt;
which promptly came up with an answer: A=8, B=0, C=0. Starting from this
I came up with a more plausible-looking solution: A=7, B=5,&amp;nbsp;C=5.&lt;/p&gt;
&lt;p&gt;What does this mean? That - mathematically speaking - the claims made
might be true. As always - trust, but verify. These simple mathematical
tools are available to everyone and can be used to unmask the more
extreme false claims (of course, just because a claim is mathematically
possible, it doesn&amp;#8217;t make it necessarily true). Go search for
information. You should find it - since it wants to be&amp;nbsp;free!&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/maazbot/"&gt;maazbot&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 26 Dec 2009 22:06:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-12-26:2009/12/how-eco-friendly-is-bmw.html</guid></item><item><title>Recouping your data from a hung program</title><link>https://www.grey-panther.net/2009/12/recouping-your-data-from-hung-program.html</link><description>&lt;p&gt;Scenario: you are typing away in your blog editor on Ubuntu doing a
(somewhat) Flash-heavy post. You make the mistake of hitting &amp;#8220;Preview&amp;#8221;
and the blogging software hangs. How can you get your post&amp;nbsp;out?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Find the &lt;span class="caps"&gt;PID&lt;/span&gt; of your blogging&amp;nbsp;software&lt;/li&gt;
&lt;li&gt;Coredump it (&lt;code&gt;gcore [PID]&lt;/code&gt; - this will create a file called
    &lt;code&gt;core.[PID]&lt;/code&gt; in the current directory) - sidenote: interestingly,
    coredumping doesn&amp;#8217;t actually kill the application - this makes me
    wonder about thread safety&amp;#8230; What guarantees does gcore make about
    the consistency of the dumped state? Probably none&amp;#8230; This isn&amp;#8217;t
    important in this case, since the program is hung for&amp;nbsp;good.&lt;/li&gt;
&lt;li&gt;Use a hex editor (&lt;a href="http://live.gnome.org/Ghex"&gt;GHex&lt;/a&gt; for example)
    and search for a part of the blogpost. You will probably find it
    multiple times, but you can easily identify one occurrence which has
    a complete&amp;nbsp;copy.&lt;/li&gt;
&lt;li&gt;Copy the blogpost from the&amp;nbsp;hexeditor&lt;/li&gt;
&lt;li&gt;Profit!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hope this saves somebody from retyping their&amp;nbsp;text!&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. This can be applied to other programs too where the storage format
is &amp;#8220;human readable&amp;#8221; (like text editors - as opposed to spreadsheet
editors). An other trick you might try is to search for the string as
Unicode (since more international-aware programs might store it as
that). While GHex doesn&amp;#8217;t support this directly, you can manually insert
the 00 bytes between the Latin characters. An other option would be to
run strings on the coredump file with different &lt;code&gt;--encoding&lt;/code&gt; options.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 26 Dec 2009 21:15:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-12-26:2009/12/recouping-your-data-from-hung-program.html</guid></item><item><title>Congratulation to AV-Comparatives!</title><link>https://www.grey-panther.net/2009/12/congratulation-to-av-comparatives.html</link><description>&lt;p&gt;&lt;span class="caps"&gt;AV&lt;/span&gt;-Comparatives is an independent, well-known and well respected testing
organization in the &lt;span class="caps"&gt;AV&lt;/span&gt;/Anti-Malware field. They recently published two
reports and one&amp;nbsp;meta-report:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.av-comparatives.org/comparativesreviews/dynamic-tests"&gt;Whole Product Dynamic&amp;nbsp;Test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.av-comparatives.org/comparativesreviews/performance-tests"&gt;Performance&amp;nbsp;Test&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.av-comparatives.org/comparativesreviews/main-tests/summary-reports"&gt;Summary&amp;nbsp;Reports&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Go read them if you have questions like &amp;#8220;which product is the best for
me?&amp;#8221;. Thank you Andreas for providing a great and impartial&amp;nbsp;service.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. One surprising thing for me was the high detection rates in the
dynamic test - upward of 90%. This indicates that either I&amp;#8217;m too much of
a cynic or that their crawler system still has room to improve - I would
expect &lt;span class="caps"&gt;AV&lt;/span&gt; products to be around 60-70% effective against new&amp;nbsp;threats.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 25 Dec 2009 20:06:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-12-25:2009/12/congratulation-to-av-comparatives.html</guid><category>av</category><category>security</category></item><item><title>Don’t listen alone!</title><link>https://www.grey-panther.net/2009/12/don-listen-alone.html</link><description>&lt;p&gt;Do you like Linux? Do you listen to podcasts? If you&amp;#8217;ve answered yes to
both of those questions, you should know what &lt;span class="caps"&gt;LUG&lt;/span&gt; Radio is (if not, do
&lt;a href="http://www.lugradio.org/"&gt;a quick checking&lt;/a&gt; - I promise you that it
will be worth&amp;nbsp;it!).&lt;/p&gt;
&lt;p&gt;The bad news? They stopped it in 2008. The good news? A documentary
titled &amp;#8220;Don&amp;#8217;t listen alone!&amp;#8221; - a great title if I may say so - about it
just came out! So watch it below (sorry for splitting it up into 10
minute segments, but YouTube limits you to&amp;nbsp;this):&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
http://www.youtube.com/p/&lt;span class="caps"&gt;F4B2E3619B9D2E49&lt;/span&gt;&amp;hl=en\_US&amp;fs=1

&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;Or go over to Jono&amp;#8217;s site &lt;a href="http://www.jonobacon.org/2009/11/04/dont-listen-alone-the-lugradio-documentary-now-available-online/"&gt;and watch it from
blip.tv&lt;/a&gt;
(my problem with blip.tv is that their delivery method seems to be much
less bandwidth friendly - I&amp;#8217;ve got constant &amp;#8220;buffering&amp;#8221; even on
connections where YouTube &lt;span class="caps"&gt;HQ&lt;/span&gt; clips play fine) or &lt;a href="http://www.archive.org/details/Dont_Listen_Alone"&gt;download it from
archive.org&lt;/a&gt;. You can
also read up on how the documentary was created (on Linux!)
&lt;a href="http://tonywhitmore.co.uk/blog/2009/11/04/dont-listen-alone/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, if you still miss their voices (as I do), head over to
&lt;a href="http://shotofjaq.org/"&gt;ShotOfJaq&lt;/a&gt; or to &lt;a href="http://www.twit.tv/FLOSS"&gt;&lt;span class="caps"&gt;FLOSS&lt;/span&gt;
weekly&lt;/a&gt; and you will be pleasantly&amp;nbsp;surprised!&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. Offtopic rant: I&amp;#8217;m all for open formats and such, but when - after
days of searching! - I can&amp;#8217;t find a tool which supports the &lt;span class="caps"&gt;OGV&lt;/span&gt;
container (or the Theora codec for that matter) properly, I&amp;#8217;m tempted to
give up on them! On the &lt;span class="caps"&gt;AVI&lt;/span&gt;/&lt;span class="caps"&gt;XVID&lt;/span&gt;/h264 side there is
&lt;a href="http://hype-free.blogspot.com/2009/02/free-open-source-cross-platform.html"&gt;Avidemux&lt;/a&gt;
for example&amp;#8230; Finally I had to re-encode the whole video into &lt;span class="caps"&gt;AVI&lt;/span&gt;/&lt;span class="caps"&gt;XVID&lt;/span&gt;
just be able to chomp it into 10 minute&amp;nbsp;segments.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 25 Dec 2009 19:47:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-12-25:2009/12/don-listen-alone.html</guid><category>floss</category><category>film</category><category>documentary</category><category>linux</category><category>podcast</category></item><item><title>Schneier videos</title><link>https://www.grey-panther.net/2009/12/schneier-videos.html</link><description>&lt;p&gt;Bruce Schneier is always fun, and together with Markus Ranum he is extra
fun (sidenote: although it is title &amp;#8220;face-off&amp;#8221;, they agree more than
they&amp;nbsp;disagree):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://searchsecurity.techtarget.com/video/0,297151,sid14_gci1376072,00.html"&gt;Schneier-Ranum face-off, part1: The future of information&amp;nbsp;security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://searchsecurity.techtarget.com/video/0,297151,sid14_gci1376098,00.html"&gt;Schneier-Ranum face-off, part 2: Social&amp;nbsp;networking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://searchsecurity.techtarget.com/video/0,297151,sid14_gci1376215,00.html"&gt;Schneier-Ranum face-off, part 3: Compliance and&amp;nbsp;security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://searchsecurity.techtarget.com/video/0,297151,sid14_gci1376222,00.html"&gt;Schneier-Ranum face-off, part 4: Cybersecurity&amp;nbsp;coordinator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://searchsecurity.techtarget.com/video/0,297151,sid14_gci1376274,00.html"&gt;Schneier-Ranum face-off part 5: Security&amp;nbsp;metrics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://searchsecurity.techtarget.com/video/0,297151,sid14_gci1376328,00.html"&gt;Schneier-Ranum face-off part 6: Audience&amp;nbsp;questions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And here are some Schneier only videos (the first video has some audio
problems in the first 3 minutes, but it gets better&amp;nbsp;afterwards):&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
http://vimeo.com/moogaloop.swf?clip\_id=8053634&amp;server=vimeo.com&amp;show\_title=1&amp;show\_byline=1&amp;show\_portrait=0&amp;color=&amp;fullscreen=1

[Open Rights Group: Bruce Schneier Security
Talk](http://vimeo.com/8053634) from [Open Rights
Group](http://vimeo.com/user1287766) on [Vimeo](http://vimeo.com).

&lt;p&gt;
&lt;/center&gt;


&lt;center&gt;
http://vimeo.com/moogaloop.swf?clip\_id=8062617&amp;server=vimeo.com&amp;show\_title=1&amp;show\_byline=1&amp;show\_portrait=0&amp;color=&amp;fullscreen=1

[Open Rights Group: Bruce Schneier Security Talk
(Q&amp;A;)](http://vimeo.com/8062617) from [Open Rights
Group](http://vimeo.com/user1287766) on [Vimeo](http://vimeo.com).

&lt;p&gt;
&lt;/center&gt;
&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 21 Dec 2009 17:36:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-12-21:2009/12/schneier-videos.html</guid><category>security</category><category>ranum</category><category>schneier</category><category>video</category></item><item><title>New challenges</title><link>https://www.grey-panther.net/2009/12/new-challenges.html</link><description>&lt;p&gt;&lt;img alt="2925822482_8c27197ba5_b" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/SyuqlwjkhhI/AAAAAAAACEc/3mu45Ht8PYo/2925822482_8c27197ba5_b%5B2%5D.jpg?imgmax=800" title="2925822482_8c27197ba5_b" /&gt;
After missing &lt;a href="http://forensicscontest.com/2009/10/10"&gt;the announcement for the second part of the Network
Forensics Puzzle&lt;/a&gt; (yes, I’m
subscribed the feed now!) I would like to regain your trust by bringing
two other contests to your&amp;nbsp;attention:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ethicalhacker.net/content/view/285/2/"&gt;Miracle on Thirty-Hack
    Street&lt;/a&gt; from&amp;nbsp;ethicalhacker.net&lt;/li&gt;
&lt;li&gt;&lt;a href="http://argolith.ms/?p=sevenfour"&gt;the sevenfour challenges&lt;/a&gt; (a
    “keygen-me” type of&amp;nbsp;challenge)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bonus&amp;nbsp;content:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.t2.fi/2009/12/17/merry-xmas-and-happy-new-year/"&gt;t2’09 challenge
    solutions&lt;/a&gt;
    (via the &lt;a href="http://www.reddit.com/r/ReverseEngineering/comments/afvn4/t209_challenge_solutions_two_pdfs_by_author_and/"&gt;Reverse Engineering
    Reddit&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.raulsiles.com/downloads/Hacking-Challenges_RaulSiles_Dec09.pdf"&gt;Hacking Challenges: Have Fun Improving Your Skills!
    [&lt;span class="caps"&gt;PDF&lt;/span&gt;]&lt;/a&gt;
    – presentation from &lt;a href="http://www.radajo.com/2009/12/hacking-challenges-have-fun-improving.html"&gt;the RaDaJo&amp;nbsp;guys&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Have&amp;nbsp;fun!&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/chrisdag/"&gt;ChrisDag&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 18 Dec 2009 18:15:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-12-18:2009/12/new-challenges.html</guid><category>ethical hacker</category><category>challenge</category></item><item><title>A game of Chinese whispers</title><link>https://www.grey-panther.net/2009/12/game-of-chinese-whispers.html</link><description>&lt;p&gt;&lt;img alt="3558167656_06bb48a9f9_o" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/SyuecGfIRhI/AAAAAAAACEU/MTAu2Yt9-2E/3558167656_06bb48a9f9_o%5B2%5D.jpg?imgmax=800" title="3558167656_06bb48a9f9_o" /&gt;
Yet an other example of real-life Chinese whispers in the security&amp;nbsp;journalism:&lt;/p&gt;
&lt;p&gt;A Hungarian online news site published an article titled “&lt;a href="http://hirek.prim.hu/cikk/75929/"&gt;Hackers tried
to steal user data from Amazon&lt;/a&gt;” (here
is &lt;a href="http://translate.google.com/translate?js=y&amp;amp;prev=_t&amp;amp;hl=en&amp;amp;ie=UTF-8&amp;amp;layout=1&amp;amp;eotf=1&amp;amp;u=http%3A%2F%2Fhirek.prim.hu%2Fcikk%2F75929%2F&amp;amp;sl=hu&amp;amp;tl=en"&gt;a somewhat usable automatic
translation&lt;/a&gt;
for the non-Hungarian speakers). I assume that the information went like&amp;nbsp;this:&lt;/p&gt;
&lt;p&gt;What happened –&gt; What the security company has written up about it –&gt;
What the “journalist” understood –&gt; What s/he actually&amp;nbsp;wrote.&lt;/p&gt;
&lt;p&gt;What actually happened is that an Amazon &lt;span class="caps"&gt;EC2&lt;/span&gt; &lt;em&gt;rented to a third party&lt;/em&gt;
&lt;a href="http://blogs.ict-forward.eu/forward/zeus-botnets-cc-through-amazon-ec2/"&gt;was being used as a C&amp;C; server for a
botnet&lt;/a&gt;.
No Amazon user data compromise here, move along (also, &lt;a href="http://blog.scansafe.com/journal/2009/12/17/amazon-cloud-has-rained-malware-before.html"&gt;this isn’t a new
phenomenon at
all&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;To top it off, the article talks about the security issues involved in
cloud computing. Surely they are paid by buzzwords / paragraph&amp;nbsp;:-p.&lt;/p&gt;
&lt;p&gt;As if you needed further proof that a large percentage of the news out
there is false, even when there is no intent to “spin” it. Newer
attribute to malice what can be explained by stupidity I&amp;nbsp;suppose&amp;#8230;&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/59999295@N00/"&gt;bignoseduglyguy&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 18 Dec 2009 17:23:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-12-18:2009/12/game-of-chinese-whispers.html</guid><category>rant</category><category>security</category><category>hype</category></item><item><title>Twitter hacked</title><link>https://www.grey-panther.net/2009/12/twitter-hacked.html</link><description>&lt;div style="float: right;"&gt;

&lt;script type="text/javascript"&gt;&lt;br /&gt;
    slashdot_url="http://hype-free.blogspot.com/2009/12/twitter-hacked.html";&lt;br /&gt;
&lt;/script&gt;
&lt;script src="http://slashdot.org/slashdot-it.js" type="text/javascript"&gt;&lt;/script&gt;

&lt;/div&gt;

&lt;div style="float: right; clear: right; margin-top: 1em;"&gt;

&lt;a class="DiggThisButton"&gt;
![DiggThis](http://digg.com/img/diggThis.png)&lt;/a&gt;
&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;

&lt;/div&gt;

&lt;p&gt;It had to happen, didn’t it? I’ve fired up
&lt;a href="http://www.pidgin.im/"&gt;Pidgin&lt;/a&gt; with the
&lt;a href="http://code.google.com/p/microblog-purple/"&gt;microblog-purple&lt;/a&gt; plugin,
only to get an “invalid certificate” error for twitter. I’ve quickly
became nervous, since a quick digging indicated that I was getting the
wrong &lt;span class="caps"&gt;IP&lt;/span&gt; address for the domain&amp;nbsp;twitter.com.&lt;/p&gt;
&lt;p&gt;My first thought was: “I’ve been compromised”. After quickly verifying
my hosts file and my &lt;span class="caps"&gt;DNS&lt;/span&gt; entry, all seemed fine on the surface. My
second thought was: “my &lt;span class="caps"&gt;DNS&lt;/span&gt; server was compromised”, so I’ve done the
same lookup using OpenDNS and the new Google &lt;span class="caps"&gt;DNS&lt;/span&gt;, both coming up with
different (but wrong) answers. Finally I’ve checked out a couple of
other &lt;span class="caps"&gt;HTTPS&lt;/span&gt; sites and they seemed fine. So I took a deep breath and
(putting my faith in &lt;a href="http://noscript.net/"&gt;NoScript&lt;/a&gt; and
&lt;a href="http://www.requestpolicy.com/"&gt;RequestPolicy&lt;/a&gt;) visited twitter.com to
find the following&amp;nbsp;page:&lt;/p&gt;
&lt;p&gt;&lt;img alt="twitter_hack" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/SyssNIUA3aI/AAAAAAAACEE/XW1kUzm_yg4/twitter_hack%5B6%5D.png?imgmax=800" title="twitter_hack" /&gt;&lt;/p&gt;
&lt;p&gt;Quick&amp;nbsp;analysis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This seems to be a “good old”&amp;nbsp;defacement&lt;/li&gt;
&lt;li&gt;A very likely scenario is that they somehow compromised the &lt;span class="caps"&gt;DNS&lt;/span&gt;
    registrar account (phising, dumb password reset, etc) and changed it
    to point to an other &lt;span class="caps"&gt;IP&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;Currently I’m seeing a couple of different IPs out there for the
    twitter.com domain:&lt;ul&gt;
&lt;li&gt;My &lt;span class="caps"&gt;DNS&lt;/span&gt; server (and OpenDNS) returns
    &lt;a href="http://domaintools.com/66.147.242.88"&gt;66.147.242.88&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Google &lt;span class="caps"&gt;DNS&lt;/span&gt; returns
    &lt;a href="http://whois.domaintools.com/74.217.128.160"&gt;74.217.128.160&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The correct address seems to be
    &lt;a href="http://whois.domaintools.com/twitter.com"&gt;168.143.171.84&lt;/a&gt;, so if
    you put the following line in your host file, thing should start
    working again (you might need to do an &lt;code&gt;ipconfig /flushdns&lt;/code&gt; if
    you&amp;#8217;re on&amp;nbsp;Windows):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;168.143.171.84 twitter.com
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The above is a hackish solution, and I would recommend using it only
    in life-and-death situations :-p. It is the best to let Twitter
    handle the incident and make sure that everything is cleaned&amp;nbsp;up.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;It is unclear when exactly the defacement happened, but it must have
    been in the last 10 hours or so. It might have been specifically
    targeted so that it is late in the day in the &lt;span class="caps"&gt;USA&lt;/span&gt; so that the
    reaction is&amp;nbsp;delayed.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;~~According to &lt;a href="http://translate.google.com/#"&gt;Google Translate&lt;/a&gt;
    (&lt;a href="http://babelfish.yahoo.com/"&gt;Babelfish&lt;/a&gt; doesn’t know Arabic
    unfortunately) the text below the picture&amp;nbsp;says:~~&lt;/p&gt;
&lt;p&gt;Ok, so I&amp;#8217;m a big ignorant idiot. The official language of Iran is
&lt;a href="http://en.wikipedia.org/wiki/Persian_language"&gt;Persian&lt;/a&gt; (also known
as Farsi or Parsi), not Arabic. Thank you to Anonymous for pointing
it out. According to &lt;a href="http://www.mirror.co.uk/news/top-stories/2009/12/18/twitter-hacked-by-iranian-protesters-115875-21907173/"&gt;this
article&lt;/a&gt;
the text in the picture&amp;nbsp;says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This site has been hacked by the Iranian Cyber Army (on the&amp;nbsp;flag)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The &lt;span class="caps"&gt;USA&lt;/span&gt; thinks they control and manage internet access, but they
don&amp;#8217;t. We control and manage the internet with our power, so do
not try to incite the Iranian people (under the&amp;nbsp;picture)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Some people also seem to have screenshots with English texts on&amp;nbsp;them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The rogue server doesn’t seem to respond to any Twitter &lt;span class="caps"&gt;API&lt;/span&gt;
    requests, so it doesn’t seem to be that they were going after
    usernames and passwords (which they very well might have done,
    considering the number of users who click trough &lt;span class="caps"&gt;SSL&lt;/span&gt; certificate
    warnings), but just to be on the safe side, &lt;em&gt;change your password&lt;/em&gt;
    and &lt;em&gt;don’t use the same password on all the sites&lt;/em&gt;!&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: As of now all seems to be back to normal and all the &lt;span class="caps"&gt;DNS&lt;/span&gt;
servers return the correct &lt;span class="caps"&gt;IP&lt;/span&gt; address. I’m waiting for an explanation in
Twitter (mostly because I’m interested in how it happened&amp;nbsp;:-)).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: &lt;a href="http://blog.twitter.com/2009/12/dns-disruption.html"&gt;Twitter acknowledges the
hack&lt;/a&gt; on their blog
and say that they will provide more information as it becomes available
(however they erroneously affirm that the &lt;span class="caps"&gt;API&lt;/span&gt; were working correctly –
they weren’t, since they used the same &lt;span class="caps"&gt;DNS&lt;/span&gt; record to contact Twitter –
in fact this is how I’ve became aware of the&amp;nbsp;hack).&lt;/p&gt;
&lt;p&gt;Bonus: what sources can you use to investigate such&amp;nbsp;incidents?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First of all, be suspicious of &lt;span class="caps"&gt;SSL&lt;/span&gt; certificate errors! I know that
    they (sadly) are quite common these days, but be&amp;nbsp;vigilant!&lt;/li&gt;
&lt;li&gt;Check that the problem is not at your end. Check that you have the
    correct &lt;span class="caps"&gt;DNS&lt;/span&gt; server (there are a couple of malware families out there
    which set a custom &lt;span class="caps"&gt;DNS&lt;/span&gt; server for the machine to control the users
    browsing destinations). Check that the given hostname is not present
    in your hosts file (again, there are a couple of malware families
    using this method to misdirect&amp;nbsp;users)&lt;/li&gt;
&lt;li&gt;Check what the &lt;span class="caps"&gt;IP&lt;/span&gt; address should be, by using
    &lt;a href="http://whois.domaintools.com/twitter.com"&gt;domaintools&lt;/a&gt; for example
    (and looking at the server stats&amp;nbsp;page)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Try looking up the &lt;span class="caps"&gt;DNS&lt;/span&gt; name using several &lt;span class="caps"&gt;DNS&lt;/span&gt; servers (this might
    not work if your network filters &lt;span class="caps"&gt;DNS&lt;/span&gt;&amp;nbsp;queries):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# nslookup
&amp;gt; set type=ANY
&amp;gt; twitter.com
...
&amp;gt; server 8.8.8.8
&amp;gt; twitter.com
...
&amp;gt; server 208.67.222.222
&amp;gt; twitter.com
...
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;An other option is to use the &lt;a href="http://vurl.mysteryfcm.co.uk/?url=1160923"&gt;vURL
    service&lt;/a&gt; to fetch the
    suspicious webpage from different location and compare the results
    with what you are&amp;nbsp;seeing.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using these methods you can quickly ascertain with pretty good accuracy
where the fault lies and take appropriate action. Have a safe holiday&amp;nbsp;everybody!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read about the subject on &lt;a href="http://countermeasures.trendmicro.eu/twitter-not-hacked-by-iranian-cyber-army/"&gt;the TrendMicro Countermeasures
    Blog&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Some more links to information and the source of the defaced webpage
    at &lt;a href="http://news.ycombinator.com/item?id=1002640"&gt;Hacker News&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;SANS&lt;/span&gt; &lt;a href="https://isc.sans.org/diary.html?storyid=7774"&gt;posted about in
    issue&lt;/a&gt; in the&amp;nbsp;diary.&lt;/li&gt;
&lt;li&gt;I&amp;#8217;ve update the translations, thanks to&amp;nbsp;Anonymous&lt;/li&gt;
&lt;li&gt;Twitter &lt;a href="http://blog.twitter.com/2009/12/update-on-last-nights-dns-disruption.html"&gt;posted an
    update&lt;/a&gt;
    about the issue. It doesn&amp;#8217;t many more details, it does however give
    a timeframe for the problem: between 21:46 and 23:00 &lt;span class="caps"&gt;PST&lt;/span&gt; . There are
    some rumors out there that somehow (phising?) the correct password
    to the &lt;span class="caps"&gt;DNS&lt;/span&gt; management interface was obtained and it was used to
    modify the records. Twitter still has the original blogpost up
    saying that &lt;span class="caps"&gt;API&lt;/span&gt;&amp;#8217;s were not affected, but &lt;em&gt;this is not true&lt;/em&gt;! If
    you&amp;#8217;ve used a third party Twitter client and you&amp;#8217;ve clicked trough
    the certificate warning (or maybe it doesn&amp;#8217;t use &lt;span class="caps"&gt;TLS&lt;/span&gt; at all), your
    password might have been compromised. Currently there is no evidence
    that the rogue server was logging passwords, but until the time some
    forensics is done on it, there is no sure way to tell if this was
    the case (since it is trivial to configure a webserver such that it
    responds with a 404 error, while still logging the details of the&amp;nbsp;request).&lt;/li&gt;
&lt;li&gt;Arbor Networks &lt;a href="http://asert.arbornetworks.com/2009/12/your-dns-is-an-asset-twitter-dns-woes/"&gt;posted a related
    article&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Sucuri has also &lt;a href="http://blog.sucuri.net/2009/12/twitter-defacement.html"&gt;posted about the
    issue&lt;/a&gt;. They
    have a nice little network monitoring / alerting system. You can
    also use them as &lt;a href="http://sucuri.net/index.php?page=scan&amp;amp;scan=www.twitter.com"&gt;a third-party information
    source&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;ISS&lt;/span&gt; X-Force (part of &lt;span class="caps"&gt;IBM&lt;/span&gt;) has also &lt;a href="http://blogs.iss.net/archive/dnsresolution.html"&gt;a nice writeup about the
    incident&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Brian Krebs has &lt;a href="http://voices.washingtonpost.com/securityfix/2009/12/twittercom_hijacked_by_iranian.html?wprss=securityfix"&gt;an informative
    writeup&lt;/a&gt;
    on the SecurityFix blog about the issue which quotes Dyn&amp;#8217;s (the host
    for the Twitter &lt;span class="caps"&gt;DNS&lt;/span&gt;) &lt;span class="caps"&gt;CTO&lt;/span&gt; as saying: &amp;#8220;Someone logged in who purported
    to be a legitimate user of their [&lt;span class="caps"&gt;DNS&lt;/span&gt;] platform account and started
    making changes&amp;#8221;, further strengthening the probability that a
    Twitter employee&amp;#8217;s email account was broken into via some&amp;nbsp;mechanism.&lt;/li&gt;
&lt;li&gt;There is also a lot of confusion out there, as it always is the case
    with (security) news. I&amp;#8217;ve heard someone saying that &amp;#8220;why did the
    &lt;span class="caps"&gt;DNS&lt;/span&gt; host allow the redirection of Twitter to a host in Iran?&amp;#8221; - just
    to clarify: even though the hack was claimed by the &amp;#8220;Iranian Cyber
    Army&amp;#8221; (which might not mean anything! it could be your nerdy
    neighbor), the server it was redirected to was in the &lt;span class="caps"&gt;US&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="3036343674_54b4674f93_b" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/SytP_Yh5udI/AAAAAAAACEM/HwP5a7SjhWw/3036343674_54b4674f93_b%5B7%5D.jpg?imgmax=800" title="3036343674_54b4674f93_b" /&gt;&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/25636851@N03/"&gt;pugetsoundphotowalks&amp;#8217;
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 18 Dec 2009 13:16:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-12-18:2009/12/twitter-hacked.html</guid><category>security</category><category>hack</category><category>deface</category><category>twitter</category><category>web</category></item><item><title>Discount Codes UK review</title><link>https://www.grey-panther.net/2009/12/discount-codes-uk-review.html</link><description>&lt;p&gt;These days most online shops offer the ability to use discount codes at
checkout and get a price reduction anywhere from 5% to 50%. These codes
are announced in various media (like podcast or blogs), but even if you
don’t follow the particular program, it is rather easy to find them with
a search&amp;nbsp;engine.&lt;/p&gt;
&lt;p&gt;Given these premises, sites like &lt;a href="http://www.unbeatable.co.uk/news/discount-codes/"&gt;Discoount
Codes&lt;/a&gt; &lt;span class="caps"&gt;UK&lt;/span&gt; are welcome.
I didn’t use their services personally, but it is well organized with
direct links from the discount code to the store where you can use it
and good reputation on sites which track such things
(&lt;a href="http://www.mywot.com/en/scorecard/www.unbeatable.co.uk"&gt;MyWOT&lt;/a&gt;,
&lt;a href="http://safeweb.norton.com/report/show?url=www.unbeatable.co.uk&amp;amp;x=0&amp;amp;y=0"&gt;Norton
SafeWeb&lt;/a&gt;
and &lt;a href="http://www.siteadvisor.com/sites/unbeatable.co.uk"&gt;SiteAdvisor&lt;/a&gt;).
For added safety I would recommend entering the addresses of the shops
manually, rather than using the provided links. So there you have it:
discount codes at your finger tips with the possibility to get a couple
of percents off. And even if some don’t work, you have nothing to loose
by trying to use them. Again a word of caution, especially around
holiday shopping: be cautious and either use big-brand shops (like
Amazon) or thoroughly check out the given shop (using a search engine
and searching for phrases like “[shopname] complaints”, “[shopname]
problems”, “[shopname] fraud”, etc). Better safe than&amp;nbsp;sorry!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from&lt;/em&gt;
&lt;a href="http://www.reviewme.com/"&gt;&lt;em&gt;ReviewMe&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 17 Dec 2009 13:41:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-12-17:2009/12/discount-codes-uk-review.html</guid><category>reviewme</category><category>review</category></item><item><title>I’m the spam killa’</title><link>https://www.grey-panther.net/2009/11/im-spam-killa.html</link><description>&lt;p&gt;&lt;img alt="SONY
DSC" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/Swu95pxAjxI/AAAAAAAACC8/Ru09p5JcgdA/2473407468_e4549a83bd_o%5B2%5D.jpg?imgmax=800" title="SONY DSC" /&gt;
I’m happy to announce that I’m one of two “spam killers” on the
&lt;a href="http://www.se-radio.net/"&gt;Software Engineering radio website&lt;/a&gt;. Spam was
starting to run rampant on their site, so they asked for help and I
responded. It is so simple to donate your time to a worthy cause. You to
can do it, it takes just a couple of minutes per&amp;nbsp;day!&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;: If you are interested in software development / design, this is
definitely a podcast you should give a&amp;nbsp;listen.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/sd-6/"&gt;Manuel_Marin&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 24 Nov 2009 13:05:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-24:2009/11/im-spam-killa.html</guid><category>spam</category><category>community</category><category>podcast</category></item><item><title>Screenshot forensics</title><link>https://www.grey-panther.net/2009/11/screenshot-forensics.html</link><description>&lt;p&gt;&lt;img alt="2390570910_09a697ffee_o" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/Swu6EThb0wI/AAAAAAAACC4/2uFGOxI_L0I/2390570910_09a697ffee_o%5B2%5D.jpg?imgmax=800" title="2390570910_09a697ffee_o" /&gt;
One of the interesting thing I like to do when reading (security) blog
posts, is to try to deduce details about the machine setup used. You can
find some very interesting tidbits of information, like &lt;a href="http://hype-free.blogspot.com/2008/01/sunbelt-is-using-symantec-in-house.html"&gt;Sunbelt using
Symantec &lt;span class="caps"&gt;AV&lt;/span&gt; on some of their
machines&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A couple of current&amp;nbsp;examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://community.ca.com/blogs/securityadvisor/archive/2009/11/22/spam-spam-beware-of-latest-spam-attacks.aspx"&gt;a &lt;span class="caps"&gt;CA&lt;/span&gt; researcher uses Office 2007 and Google&amp;nbsp;Chrome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;a &lt;a href="http://www.sophos.com/blogs/sophoslabs/?p=7548"&gt;Sophos researcher seems to prefer
    Ubuntu&lt;/a&gt;, or at least
    a Gnome based&amp;nbsp;desktop&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to avoid exposing such details, try the&amp;nbsp;following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Crop the screenshot as much as possible. This has other advantages as
well (smaller image size which leads to quicker display for&amp;nbsp;example)

&lt;/li&gt;
&lt;li&gt;
Remember that identification can be done in any number of&amp;nbsp;ways:

&lt;/li&gt;
-   Using prominent &lt;span class="caps"&gt;OS&lt;/span&gt; features (like the Mac &lt;span class="caps"&gt;OS&lt;/span&gt; X dock or the Windows
    start menu)
-   Using window “chrome” (title bar, frames, buttons on them, their
    color, etc)
-   Colors and fonts
-   Metadata in the image (if it was edited with [Paint
    .&lt;span class="caps"&gt;NET&lt;/span&gt;](http://www.getpaint.net/) for example, it is very probable
    that it happened on a Windows machine)
-   Never use “blur” or similar effects to hide information, since they
    can be reversed (given that they are completely deterministic)

&lt;/ul&gt;

&lt;p&gt;If you are really paranoid, you might want to consider taking the
screenshot on an entirely different &lt;span class="caps"&gt;OS&lt;/span&gt;
(&lt;a href="http://www.haiku-os.org/"&gt;Haiku&lt;/a&gt; for example&amp;nbsp;:-).&lt;/p&gt;
&lt;p&gt;Got fun “screenshot archeology” findings? Share them in the&amp;nbsp;comments!&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/8363028@N08/"&gt;DeusXFlorida&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 24 Nov 2009 12:48:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-24:2009/11/screenshot-forensics.html</guid><category>security</category><category>privacy</category><category>fun</category></item><item><title>Plugging a good friend of mine (not in a sexual way! :-P)</title><link>https://www.grey-panther.net/2009/11/plugging-good-friend-of-mine-not-in.html</link><description>&lt;p&gt;A talented photographer with a lot of beautiful images. Check them out
below or on his &lt;a href="http://www.flickr.com/photos/operabilus/"&gt;flickr
stream&lt;/a&gt;. Go &lt;span class="caps"&gt;OPE&lt;/span&gt;!&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
http://www.flickr.com/apps/slideshow/show.swf?v=71649

&lt;/center&gt;
&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 23 Nov 2009 17:45:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-23:2009/11/plugging-good-friend-of-mine-not-in.html</guid><category>friends</category><category>photography</category><category>art</category><category>photo</category></item><item><title>Today’s fudbuster</title><link>https://www.grey-panther.net/2009/11/todays-fudbuster.html</link><description>&lt;p&gt;&lt;img alt="4039543987_2ea3fb6e8b_b" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/SwqpLZeEVUI/AAAAAAAACCw/qS2sB2IDnN8/4039543987_2ea3fb6e8b_b%5B2%5D.jpg?imgmax=800" title="4039543987_2ea3fb6e8b_b" /&gt;
We begin today’s &lt;span class="caps"&gt;FUD&lt;/span&gt;-buster with – applause please – cyberterorism via
an “article”: &lt;a href="http://www.infosecurity-magazine.com/view/5217/cyberterrorism-a-look-into-the-future/"&gt;Cyberterrorism: A look into the
future&lt;/a&gt;.
The article talks about Estonia (which is the poster-child for “cyber”
incidents these days) and says the following thing (amongst others
equally high-quality content) – emphasis&amp;nbsp;added:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“The three-week cyberattack on Estonia threatened to black out the
country&amp;#8217;s digital infrastructure, &lt;em&gt;infiltrating the websites of the
nation’s banks and political&amp;nbsp;institutions”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The article cites as source (hey, at least they cite sources) an equally
&lt;a href="http://www.telegraph.co.uk/comment/personal-view/3640255/Cyber-terrorism-is-real---ask-Estonia.html"&gt;“well researched” piece from the
Telegraph.co.uk&lt;/a&gt;
which says almost the same thing. Now I seem to remember that the
Estonia incident was just a large scale DDoS attack, so I’ve looked
around for more reliable sources, like this article on Dark Reading
&lt;a href="http://www.darkreading.com/blog/archives/2009/03/authoritatively.html?cid=ref-true"&gt;Authoritatively, Who Was Behind The Estonian
Attacks?&lt;/a&gt;
by &lt;a href="http://www.lifeboat.com/ex/bios.gadi.evron"&gt;Gadi Evron&lt;/a&gt; (or see
&lt;a href="http://docs.google.com/gview?a=v&amp;amp;q=cache:byUMj6Djlb8J:www.ciaonet.org/journals/gjia/v9i1/0000699.pdf+gadi+evron+estonia+cert&amp;amp;hl=en&amp;amp;pid=bl&amp;amp;srcid=ADGEESh8wErGTDd40wtemXK4abbPY9bDAvS3H8CjDInhuu6a1FmG7mbL00j8MksD5sE6tEaNDaUHKEnTbWaVHNFxGW7xZMvBmdNJAvkQrQXxumlS_6pwleWZkauM566sE2C_0vEQwQ2R&amp;amp;sig=AFQjCNFc48jxFw9j87PpP5lSFb91RF2KIA"&gt;this other
article&lt;/a&gt;).
This confirms what I was remembering: it was a large scale DDoS attack
with some minor defacements, but in no way were they “infiltrating the&amp;nbsp;websites”.&lt;/p&gt;
&lt;p&gt;The second (unrelated, other than the fact that it is an overstatement)
quote comes from &lt;a href="http://www.viruslist.com/en/weblog?weblogid=208187902"&gt;the Kaspersky
blog&lt;/a&gt;, where we
can read&amp;nbsp;that:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“a vast amount of pirate software nowadays contains trojans, both for
the &lt;span class="caps"&gt;PC&lt;/span&gt; and&amp;nbsp;Mac”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This depends very much on your interpretation of “vast amount” (as me
how I know :-P). Of the actual pirated software shared in limited
networks like college campuses, very little is infected. What are
extremely likely to be malicious are the crack / keygen websites. Either
they contain exploits directly or they bundle malware with the
downloads. An other sneaky way, seen on &lt;span class="caps"&gt;P2P&lt;/span&gt; networks like Gnutella or
eDonkey, is to run bots which respond to any search with an executable
that contains the keywords in the name and is – of course – malicious.
So, depending on your interpretation of “vast amount”, this doesn’t hold&amp;nbsp;up.&lt;/p&gt;
&lt;p&gt;The conclusion, as always: do your own&amp;nbsp;research!&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/11600215@N02/"&gt;cooljinny&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 23 Nov 2009 17:24:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-23:2009/11/todays-fudbuster.html</guid><category>rant</category><category>security</category><category>FUD</category></item><item><title>ActivTrack review</title><link>https://www.grey-panther.net/2009/11/activtrack-review.html</link><description>&lt;p&gt;&lt;a href="http://www.activtrak.com/"&gt;ActivTrak&lt;/a&gt; is an activity tracking and
employee monitoring software. It currently supports the 32 bit versions
of Windows 2000, &lt;span class="caps"&gt;XP&lt;/span&gt; and Vista with support for 64 “coming soon” (no word
on support for Windows 7 as of yet). The features are the basic ones one
would expect from such a&amp;nbsp;product:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;direct deployment from the management console (however this can
    become tedious for a large number of&amp;nbsp;computers)&lt;/li&gt;
&lt;li&gt;tracking active programs / windows and URLs (in case of&amp;nbsp;browsers)&lt;/li&gt;
&lt;li&gt;taking periodic&amp;nbsp;screenshots&lt;/li&gt;
&lt;li&gt;basic reporting about the&amp;nbsp;data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One nice thing is the fact that it employs a “reverse connection” (ie.
the server opens up a port and the clients connect to it). This has the
benefit of requiring less configuration on the clients and making them
more secure (also, the server configuration part is done during install
automatically). While trying out, you can run both the viewer and the
agent on the same machine (it will report it as “no running”, but the
data will still be available). You can watch multiple workstations at
once by tiling the screenshot windows and setting them to&amp;nbsp;auto-refresh.&lt;/p&gt;
&lt;p&gt;Two shortcomings of the program are the fact that (from what I
understand) the server needs to be running continuously for data
collection (then again, it might be just a misunderstanding on my part,
but this was the impression I got). The second shortcoming (maybe its
not a shortcoming, but definitely something to be aware of) is the fact
that you have very limited interaction with the surveyed computers: no
controlling the mouse / keyboard / file-transfer. You can send messages
and chat with the user. This means that the product can’t be used
directly in a “support” type&amp;nbsp;environment.&lt;/p&gt;
&lt;p&gt;A final word of caution: consult with a lawyer before deploying such a
solution (it might be illegal depending on the circumstances!). Also,
consider the impact on the morale. If you have staff which needs this
level of constant supervision, you might be better looking for new&amp;nbsp;employees.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from&lt;/em&gt;
&lt;a href="http://www.reviewme.com/"&gt;&lt;em&gt;ReviewMe&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 23 Nov 2009 16:06:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-23:2009/11/activtrack-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Small Business VoIP review</title><link>https://www.grey-panther.net/2009/11/small-business-voip-review.html</link><description>&lt;p&gt;I have posted
&lt;a href="http://hype-free.blogspot.com/2009/10/voipstreet-affiliate-program-review.html"&gt;reviews&lt;/a&gt;
trough ReviewMe for VoIP products before, but here is an other other
one: Vocalocity is a provider specialized on &lt;a href="http://www.vocalocity.com/small-business-voip/"&gt;small business
voip&lt;/a&gt;. They’ve been in
business since 2005 and &lt;a href="http://www.voipreview.org/review/vocalocity"&gt;all the
reviews&lt;/a&gt; about them &lt;a href="http://www.whichvoip.com/voip/business-voip-reviews/vocalocity-voip-review.htm"&gt;which
I could
find&lt;/a&gt;
were glowing (one might suspect foul play given all the good reviews,
but digging deeper some of them mention problems and specify that the
support was very good and helped them trough the hiccups). Of course if
you had a negative experience with them, please share it in the&amp;nbsp;comments.&lt;/p&gt;
&lt;p&gt;An other positive aspect is that their pricing plan is prominently
featured on their webpage, so you should have no problem finding it.
They also pride themselves with not being resellers (“owning their own
technology”) and have a nice office&amp;nbsp;building:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
&lt;iframe height="240" marginheight="0" src="http://maps.google.com/maps/sv?cbp=12,65.36,,0,5.07&amp;amp;cbll=33.792222,-84.386175&amp;amp;panoid=&amp;amp;v=1&amp;amp;hl=en&amp;amp;gl=" frameborder="0" width="425" marginwidth="0" scrolling="no"&gt;
&lt;/iframe&gt;

&lt;small&gt;[View Larger
Map](http://maps.google.com/maps?hl=en&amp;ei=7pgWStaEGM_Jtgfy-&lt;span class="caps"&gt;PH0DA&lt;/span&gt;&amp;q=1375+Peachtree+St+&lt;span class="caps"&gt;NE&lt;/span&gt;,+Suite+175,+Atlanta,+&lt;span class="caps"&gt;GA&lt;/span&gt;+30309&amp;ie=&lt;span class="caps"&gt;UTF8&lt;/span&gt;&amp;hq=&amp;hnear=1375+Peachtree+St+&lt;span class="caps"&gt;NE&lt;/span&gt;,+Atlanta,+Fulton,+Georgia+30309&amp;ll=33.792416,-84.386126&amp;spn=0.012732,0.027874&amp;t=h&amp;z=16&amp;layer=c&amp;cbll=33.792222,-84.386175&amp;panoid=gCQM_44IEoddVHj5r1iFzA&amp;cbp=12,65.36,,0,5.07&amp;source=embed)&lt;/small&gt;

&lt;/center&gt;
What else is there to say about them? If you are looking for a way to
reduce the complexity of your phone network, take a look at them (of
course, you have to consider other aspects of your business – like what
level of guarantee you need that others won’t access the voicemail – the
assurance you *can* provide in-house is always greater, at a higher cost
of course).

*Full disclosure: this is a paid review from*
[*ReviewMe*](http://www.reviewme.com/)*. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).*</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 23 Nov 2009 15:11:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-23:2009/11/small-business-voip-review.html</guid><category>reviewme</category><category>review</category></item><item><title>To my dear wife</title><link>https://www.grey-panther.net/2009/11/to-my-dear-wife.html</link><description>&lt;p&gt;
&lt;center&gt;
http://listen.grooveshark.com/songWidget.swf

&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;If you are viewing this from the &lt;span class="caps"&gt;RSS&lt;/span&gt; feed: please visit the blog to see
the embed. Many &lt;span class="caps"&gt;RSS&lt;/span&gt; readers filter out embed&amp;nbsp;codes.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 21 Nov 2009 09:54:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-21:2009/11/to-my-dear-wife.html</guid><category>music</category></item><item><title>Calls to action</title><link>https://www.grey-panther.net/2009/11/calls-to-action.html</link><description>&lt;p&gt;With the motto “better late than never” here are some calls to&amp;nbsp;action:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vote for your favorite podcast on the &lt;a href="http://www.podcastawards.com/"&gt;Podcast
    Awards&lt;/a&gt; website. Votes are open until
    November the 30th and you can vote once per day (after you vote, you
    can an email with a link, which you must click on to validate your
    vote – this is to reduce the number of “fake” votes). If you are
    unsure for which podcast to vote, here are some suggestions: in the
    “Best Video Podcast” category I would recommend &lt;a href="http://www.cnet.com/buzz-out-loud-podcast/?tag=bc"&gt;Buzz out
    loud&lt;/a&gt; – it is a
    very good (informative and fun) daily tech-news podcast. In the
    “Business” category I would recommend &lt;a href="http://manager-tools.com/podcasts/career-tools"&gt;Career
    Tools&lt;/a&gt;- it (together
    with its sister podcast &lt;a href="http://manager-tools.com/"&gt;Manager Tools&lt;/a&gt;)
    is a great resource. In the Technology category I would recommend
    &lt;a href="http://twit.tv/FLOSS"&gt;&lt;span class="caps"&gt;FLOSS&lt;/span&gt; Weekly&lt;/a&gt; – it is a superb podcast for
    all people interested in free / libre / open-source software. And it
    would be a great gift for them for the 100th episode which is
    quickly approaching. And besides – &lt;span class="caps"&gt;TWIT&lt;/span&gt; already won a couple of
    times :-). So go ahead my ~~minions~~ readers, fly like the wind and&amp;nbsp;vote!&lt;/li&gt;
&lt;li&gt;And here is &lt;a href="http://szabgab.com/blog/2009/11/1258270637.html"&gt;a second poll related to Perl
    &lt;span class="caps"&gt;IDE&lt;/span&gt;’s&lt;/a&gt;: &lt;a href="http://perlide.org/poll200911/"&gt;What other
    technologies, languages, templating systems are you using besides&amp;nbsp;Perl?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After you have done your deed :-D, you can relax with two fun flash
games: &lt;a href="http://www.fastgames.com/littlewheel.html"&gt;Little Wheel&lt;/a&gt;, a fun
old-school point-and-click adventure game with very nice artwork
(including an interesting soundtrack). Or play
&lt;a href="http://www.fastgames.com/billiardblitz3-nineball.html"&gt;nine-balls&lt;/a&gt;. Let
the lightning be with&amp;nbsp;you!&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
[![Little Wheel](http://www.fastgames.com/images/littlewheel.jpg)  
Little Wheel](http://www.fastgames.com/littlewheel.html)

&lt;/center&gt;
&lt;center&gt;
[![Billiard Blitz 3 - Nine
Ball](http://www.fastgames.com/images/billiardblitz3-nineball.jpg)  
Billiard Blitz 3 - Nine
Ball](http://www.fastgames.com/billiardblitz3-nineball.html)

&lt;/center&gt;
&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 17 Nov 2009 18:41:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-17:2009/11/calls-to-action.html</guid><category>ide</category><category>perl</category><category>podcast</category></item><item><title>Surprising numbers</title><link>https://www.grey-panther.net/2009/11/surprising-numbers.html</link><description>&lt;p&gt;&lt;img alt="2801309954_3af91bf56b_o" src="http://lh5.ggpht.com/_hrvCBhtWhJ4/SwLJy7iPZgI/AAAAAAAACCM/AWEHSS94Wr8/2801309954_3af91bf56b_o%5B2%5D.jpg?imgmax=800" title="2801309954_3af91bf56b_o" /&gt;
I was reading the latest FudSec piece (&lt;a href="http://fudsec.com/generating-a-false-sense-of-insecurity"&gt;Generating a False Sense of
Insecurity&lt;/a&gt;)
where I found the following statement (emphasis&amp;nbsp;added):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Facebook now has 300 million users. Let’s assume that each user has at
least one piece of user-generated content on their Facebook page
cause, well, it’s a very user-content driven site. That means that of
the 300 million home pages on Facebook that 95% (285 million) has
either a malicious link or other insecure content. Conversely that
means that 5% (15 million) are clean, uninfected, safe&amp;nbsp;pages.&lt;/p&gt;
&lt;p&gt;The average Facebook user has 120 friends or 281 friends, depending on
which news article you might be reading. Let’s just assume for
mathematical purposes that the number is somewhere in the middle, at
about 200 friends per user. Let’s pretend, too, that you visit every
friend’s page in a single day. Because it’s your day off, of course,
you wouldn’t actually do that at&amp;nbsp;work.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The mathematical likelihood that one of your 200 friends is one of
the 95% that is infected is&amp;nbsp;infinitesimal.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This statement seemed a little off. After all, we are selecting 200
pages out of 300 million where 275 million are infected. The chance to
get to an infected / malicious page can’t be that low, right? Wrong! The
problem as stated is known in mathematics (probability theory to be more
precise) as the “drawing without replacement” and apparently the
scientific name is &lt;a href="http://en.wikipedia.org/wiki/Hypergeometric_distribution"&gt;hypergeometric
distribution&lt;/a&gt;.
Long story short, Wikipedia pointed me to &lt;a href="http://pcarvalho.com/things/hypegeocalc/publish.htm"&gt;a
calculator&lt;/a&gt; which
says that – given the parameters quoted above – you have a
99.9999608980365% chance that all of your friends will be clean /
non-malicious! Talk about&amp;nbsp;counter-intuitive!&lt;/p&gt;
&lt;p&gt;Conclusion? First of all, trust but verify. If you hear something which
sounds “off”, try to verify the information from multiple sources. Then
again, our brains don’t seem to be wired to evaluate probabilities
“heuristically”, so one should always sit down and work out the exact
math (there are a lot of free tools on the Internet which can help you)
before making important&amp;nbsp;decisions.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/eraphernalia_vintage/"&gt;EraPhernalia Vintage&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 17 Nov 2009 18:05:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-17:2009/11/surprising-numbers.html</guid><category>security</category><category>FUD</category><category>probabilities</category></item><item><title>Web Hosting Site Review Review :-p</title><link>https://www.grey-panther.net/2009/11/web-hosting-site-review-review-p.html</link><description>&lt;p&gt;WebHostingChoice pretends to be a hosting review site (it contains
categories like “&lt;a href="http://www.webhostingchoice.com/directory/uk/"&gt;best uk web
hosting&lt;/a&gt;”), however it
only seems to be a placeholder for a couple of affiliate links to a
limited number of hosts. Their &lt;a href="http://www.mywot.com/en/scorecard/www.webhostingchoice.com"&gt;&lt;span class="caps"&gt;WOT&lt;/span&gt; (web of trusts)
rating&lt;/a&gt;
isn’t so great either. While &lt;span class="caps"&gt;WOT&lt;/span&gt; has its limits (mainly because of its
“crowdsourced” nature), when it has several negative ratings, it can be
a good indicator that there are problems with the given&amp;nbsp;site.&lt;/p&gt;
&lt;p&gt;So how to find a good webhost? First of all, you should realize that
(usually) you get what you pay for (ie. “free” webhosts are rarely
free). I would recommend going with a “big brand” company like
&lt;a href="https://www.godaddy.com/"&gt;GoDaddy&lt;/a&gt; or
&lt;a href="http://www.rackspace.com/index.php"&gt;Rackspace&lt;/a&gt;. You can fairly easily
find coupon codes for them (just listen to some technical podcasts)
which can get you a considerable percentage (like 20%) off. An other
company which seems very good is &lt;a href="http://www.firehost.com/"&gt;firehost&lt;/a&gt;.
While they are a little pricy (especially compared to the other two
companies), they consider security an explicit priority, which is very
important these days &lt;span class="caps"&gt;IMHO&lt;/span&gt; – if they are willing to &lt;a href="http://news.cnet.com/8301-27080_3-10299126-245.html"&gt;take on people with
large targets on their back like Kevin
Mitnick&lt;/a&gt;, they
should be able to protect your business&amp;nbsp;too.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from&lt;/em&gt;
&lt;a href="http://www.reviewme.com/"&gt;&lt;em&gt;ReviewMe&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 17 Nov 2009 12:03:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-17:2009/11/web-hosting-site-review-review-p.html</guid><category>reviewme</category><category>review</category></item><item><title>The leaked Microsoft COFEE product</title><link>https://www.grey-panther.net/2009/11/leaked-microsoft-cofee-product.html</link><description>&lt;p&gt;&lt;img alt="176571915_de1226bb5d_b" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/SvgGe3EUOPI/AAAAAAAACCE/TI_dnPcCqMA/176571915_de1226bb5d_b%5B2%5D.jpg?imgmax=800" title="176571915_de1226bb5d_b" /&gt;
So, the Microsoft &lt;span class="caps"&gt;COFEE&lt;/span&gt; (Computer Online Forensic Evidence Extractor)
tool was leaked. I took a quick look at it, and – as expected – there is
nothing “magical”, “secret” or “backdoorish” about it (even though I
&lt;em&gt;love&lt;/em&gt; the picture which comes with &lt;a href="http://gizmodo.com/5399377/microsoft-cofee-some-of-the-most-illegal-software-you-can-pirate"&gt;the Gizmodo
article&lt;/a&gt;,
the text itself is complete and utter &lt;span class="caps"&gt;BS&lt;/span&gt; – &lt;span class="caps"&gt;COFEE&lt;/span&gt; isn’t a tool “that
helps law enforcement grab data from password protected or encrypted
sources” as the article&amp;nbsp;claims).&lt;/p&gt;
&lt;p&gt;So what &lt;em&gt;is&lt;/em&gt; Microsoft &lt;span class="caps"&gt;COFEE&lt;/span&gt;?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it is a collection of information gathering tools which are either
    built into Windows (ie. net, arp, ipconfig) or can be freely
    downloaded from the Microsoft website (ie.&amp;nbsp;pslist)&lt;/li&gt;
&lt;li&gt;it contains a simple case-management software which helps users
    prepare a &lt;span class="caps"&gt;USB&lt;/span&gt; stick that need to be inserted in the target computer
    and manage the collected&amp;nbsp;information&lt;/li&gt;
&lt;li&gt;the software on the &lt;span class="caps"&gt;USB&lt;/span&gt; stick is executed either using the autorun
    mechanism or by manually launching it. &lt;em&gt;There is no built-in
    functionality to bypass passwords or other protection&amp;nbsp;mechanisms&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;It also contains a detailed analysis of the registry / filesystem
    fingerprint of each tool (this is important if the other party
    argues that running the tool caused modifications on the system
    which are pertinent to the&amp;nbsp;case)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Conclusion: there is no magical pixie dust here, move along! (in fact,
it is quite similar with the &lt;a href="http://metasploit.com/svn/framework3/trunk/scripts/meterpreter/winenum.rb"&gt;winenum Metasploit
script&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;/Update&lt;/em&gt;: regarding the &amp;#8220;defense&amp;#8221; against these tools: first of all,
they all seem to be user-mode tools. This means that they probably have
limited capability of detecting kernel-mode rootkits. Also - from what
I&amp;#8217;ve seen - they are all public tools, so there is a good chance that
there exists malware out there there which &amp;#8220;defends&amp;#8221; itself against
these software. Again, no&amp;nbsp;magic.&lt;/p&gt;
&lt;p&gt;Now before you conclude that this is utterly useless - if I were a &lt;span class="caps"&gt;IT&lt;/span&gt;
forensicator :-p, I would prefer having this data compared to no data at
all. It will give you some basic idea of the system (or the network for
that matter if ran on every &lt;span class="caps"&gt;PC&lt;/span&gt;) which may enable you to come back with a
very precise target in&amp;nbsp;mind.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/raddaqii/"&gt;raddaqii&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 09 Nov 2009 14:09:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-09:2009/11/leaked-microsoft-cofee-product.html</guid><category>forensics</category><category>microsoft</category></item><item><title>What VirusTotal is not</title><link>https://www.grey-panther.net/2009/11/what-virustotal-is-not.html</link><description>&lt;p&gt;&lt;img alt="2139429_dedfc5706f_b" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/Svf-VEd4lrI/AAAAAAAACB8/A2MEjuzcJ64/2139429_dedfc5706f_b%5B2%5D.jpg?imgmax=800" title="2139429_dedfc5706f_b" /&gt;
Since its inception &lt;a href="http://www.virustotal.com/"&gt;VirusTotal&lt;/a&gt; has been
used by people to compare different &lt;span class="caps"&gt;AV&lt;/span&gt; products (just in case you don’t
know: VirusTotal is great free service which scans the uploaded file
with 40 &lt;span class="caps"&gt;AV&lt;/span&gt; engines currently and reports back the results). The &lt;span class="caps"&gt;AV&lt;/span&gt;
industry has objected to this practice because of a couple of reasons,
some more valid than others &lt;span class="caps"&gt;IMHO&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Today however I want to talk about the practice of saying “(only) X% of
&lt;span class="caps"&gt;AV&lt;/span&gt; detect this” and then giving a VirusTotal link. Two recent examples:
&lt;a href="http://blog.mxlab.eu/2009/11/07/facebook-updated-account-agreement-email-contains-sasfis-trojan/"&gt;here&lt;/a&gt;
and &lt;a href="http://securitylabs.websense.com/content/Alerts/3501.aspx"&gt;here&lt;/a&gt;
(to be clear: I don’t have anything against the particular blogs /
companies / authors – there are many more examples of this practice,
these are just two recent ones which came to my&amp;nbsp;attention).&lt;/p&gt;
&lt;p&gt;Why is this percentage meaningless and serves only to perpetuate &lt;span class="caps"&gt;FUD&lt;/span&gt;?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As I first argument I could mention all the discussion about &lt;span class="caps"&gt;AV&lt;/span&gt;
    engine configuration (this is frequently raised in discussion
    regarding the detection discussion, so I won’t dissect it further).
    A very thoroughly discussed argument is also that &lt;span class="caps"&gt;VT&lt;/span&gt; results
    represent a “point in time” rather than “now” (ie. detections since
    the scanning might have&amp;nbsp;changed).&lt;/li&gt;
&lt;li&gt;The second argument would be: VirusTotal goes for quantity not
    necessarily quality. Ie. the fact that a given engine is included in
    the list of engines used by VirusTotal isn’t a statement about the
    engine resource use, detection rate or false positive rate. Again,
    this doesn’t mean that the engines used are of low quality, it just
    means that VirusTotal isn’t in the &lt;span class="caps"&gt;AV&lt;/span&gt; engine testing business. It
    doesn’t say anything about the market share of the product&amp;nbsp;either.&lt;/li&gt;
&lt;li&gt;This means that the affirmation “X% of the engines detect a given
    file on &lt;span class="caps"&gt;VT&lt;/span&gt;” isn’t equivalent with the affirmation “X% of the users
    using &lt;span class="caps"&gt;AV&lt;/span&gt; are protected” or “&lt;span class="caps"&gt;AV&lt;/span&gt; software is X% effective”. However
    these are the thoughts which appear (by association) in a readers
    mind when seeing the initial&amp;nbsp;affirmation.&lt;/li&gt;
&lt;li&gt;Furthermore, some engines appear in multiple products (for example
    &lt;a href="http://www.bitdefender.com/site/view/strategic-relationships.html"&gt;GData integrates
    BitDefender&lt;/a&gt;
    – amongst others) while other engines appear “split” (for example
    the McAfee desktop product contains both the “classical” and “cloud”
    engine, however on &lt;span class="caps"&gt;VT&lt;/span&gt; they appear as two separate entries “McAfee”
    and “McAfee+Artemis” respectively). If these relations are not
    considered (and I’m almost sure that they aren’t – given that these
    relations are not always publicly documented and they can change
    over time), the results come out&amp;nbsp;skewed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Conclusion: please &lt;em&gt;never, ever&lt;/em&gt; take the &lt;span class="caps"&gt;VT&lt;/span&gt; result page and copy-paste
the percentage from it! &lt;em&gt;Do&lt;/em&gt; provide permalinks to the result pages and
you can even make some sensible general statements (like “most of the
major &lt;span class="caps"&gt;AV&lt;/span&gt; vendors detect this threat” or “this threat is not well
detected by the smaller, Asian &lt;span class="caps"&gt;AV&lt;/span&gt; companies, but given its reliance on
the English language for social engineering, it might not be such a big
threat”). However, giving percentage wreaks of &lt;span class="caps"&gt;FUD&lt;/span&gt; and smells of
negative propaganda (do we really want to be at each-others throat,
analyzing which vendor doesn’t detect what? – there would be no winners
in such a discussion). Lets concentrate on giving sensible security
advice to users&amp;nbsp;instead.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/peterkaminski/"&gt;Peter Kaminski&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 09 Nov 2009 13:34:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-09:2009/11/what-virustotal-is-not.html</guid><category>av</category><category>rant</category></item><item><title>Grooveshark VIP member</title><link>https://www.grey-panther.net/2009/11/grooveshark-vip-member.html</link><description>&lt;p&gt;&lt;img alt="grooveshark_ui" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/Su7rM-blczI/AAAAAAAACB0/Y-qigKxS4S0/grooveshark_ui%5B7%5D.png?imgmax=800" title="grooveshark_ui" /&gt;&lt;/p&gt;
&lt;p&gt;I’ve &lt;a href="http://hype-free.blogspot.com/2009/10/grooveshark.html"&gt;written about
Grooveshark&lt;/a&gt; in
the past, however I want to mention them again for a couple of&amp;nbsp;reasons:&lt;/p&gt;
&lt;p&gt;First of all, they introduced a new user interface, which works great.
More than that, you can now seek in the songs! This means that
Grooveshark directly addresses three out of the five methods of music
use which I’ve enumerated in &lt;a href="http://hype-free.blogspot.com/2009/10/grooveshark.html"&gt;my original
post&lt;/a&gt;. There are
some small quirks (I don’t really like the popup-type controls, where
you first have to hover over it for the useful part to appear), but
those are just a matter of personal taste. They’ve also made it
available as a desktop application via Adobe Air (currently available
only for &lt;span class="caps"&gt;VIP&lt;/span&gt;&amp;nbsp;subscribers).&lt;/p&gt;
&lt;p&gt;Which brings me nicely to my second point: I’ve subscribed to their &lt;span class="caps"&gt;VIP&lt;/span&gt;
services. I thought that I’ve been using them for a month now and I’m
satisfied, so I should give something back aka. “Vote with my money”.
So, as of today, I’m a Grooveshark subscriber. A couple of things I
didn’t like about the subscription process: there is an additional tax
of 15% to the advertised 3 &lt;span class="caps"&gt;USD&lt;/span&gt; monthly price. Also, the subscription
payment is set as recurring by default. You can deactivate it later, but
even so, it made me feel a little uneasy. Still, I decided to give them
some of my money. Hopefully I won’t regret&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;As of now, I can only recommend Grooveshark to everybody! If something
happens, I will update this&amp;nbsp;blogpost.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. I’ve also removed the last.fm widget from my blog. Currently
Grooveshark seems to be a much better deal than last.fm for
approximately the same amount of&amp;nbsp;money.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Disclaimer: I don’t receive anything from Grooveshark, I’m just a happy&amp;nbsp;subscriber.&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 02 Nov 2009 16:22:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-11-02:2009/11/grooveshark-vip-member.html</guid><category>music</category></item><item><title>How to generate a stackdump with GDB</title><link>https://www.grey-panther.net/2009/10/how-to-generate-stackdump-with-gdb.html</link><description>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_hrvCBhtWhJ4/SusGRj3WkMI/AAAAAAAACBQ/1x-Ca2yjupg/s1600-h/4054760074_609af75332_o2.gif"&gt;&lt;img alt="4054760074_609af75332_o" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/SusGSK3A40I/AAAAAAAACBU/DYg-8FCkbxw/4054760074_609af75332_o_thumb.gif?imgmax=800" title="4054760074_609af75332_o" /&gt;&lt;/a&gt;
I’m not a big &lt;span class="caps"&gt;GDB&lt;/span&gt; guy, but &lt;a href="http://forums13.itrc.hp.com/service/forums/questionanswer.do?admit=109447627+1256915915603+28353475&amp;amp;threadId=1005951"&gt;Google always
helps&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create a textfile with the following&amp;nbsp;content:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;set height 0
thread apply all bt
detach
quit
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the following&amp;nbsp;command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="x"&gt;gdb &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;EXE&lt;/span&gt;&lt;span class="x"&gt; -pid &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;PID&lt;/span&gt;&lt;span class="x"&gt; -command &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;TEXTFILE&lt;/span&gt;&lt;span class="x"&gt; &amp;gt; &lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;OUTPUTFILE&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;\$&lt;span class="caps"&gt;EXE&lt;/span&gt; is the path to the&amp;nbsp;executable&lt;/li&gt;
&lt;li&gt;\$&lt;span class="caps"&gt;PID&lt;/span&gt; is the &lt;span class="caps"&gt;PID&lt;/span&gt; it is running&amp;nbsp;under&lt;/li&gt;
&lt;li&gt;\$&lt;span class="caps"&gt;TEXTFILE&lt;/span&gt; is the file where your&amp;#8217;ve saved the previous&amp;nbsp;commands&lt;/li&gt;
&lt;li&gt;\$&lt;span class="caps"&gt;OUTPUTFILE&lt;/span&gt; is the file where you would like your stackdump to
    be&amp;nbsp;saved.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The cool little crawling logo was taken from
&lt;a href="http://www.h-i-r.net/2009/10/hack-o-lantern.html"&gt;HiR&lt;/a&gt;, head over there
for an&amp;nbsp;explanation.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 30 Oct 2009 17:29:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-30:2009/10/how-to-generate-stackdump-with-gdb.html</guid><category>debug</category><category>linux</category><category>stacktrace</category><category>gdb</category></item><item><title>The importance of false positives</title><link>https://www.grey-panther.net/2009/10/importance-of-false-positives.html</link><description>&lt;p&gt;&lt;img alt="2748438226_c0ed3e06f6_o" src="http://lh5.ggpht.com/_hrvCBhtWhJ4/Sur0Ic4lteI/AAAAAAAACBI/Edd5q7VWGiA/2748438226_c0ed3e06f6_o%5B2%5D.jpg?imgmax=800" title="2748438226_c0ed3e06f6_o" /&gt;
An interesting paper was bought to my attention recently by &lt;a href="http://foregroundsecurity.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=114:the-second-false-positive&amp;amp;catid=42&amp;amp;Itemid=195"&gt;this blog
post&lt;/a&gt;:
&lt;a href="http://www.raid-symposium.org/raid99/PAPERS/Axelsson.pdf"&gt;The Base Rate Fallacy and its implications for the difficulty of
Intrusion
Detection&lt;/a&gt;.
The central question of this paper is: if we have a flow of N packets
per day and our network &lt;span class="caps"&gt;IDS&lt;/span&gt; has a false-positive rate of X, what is the
probability that we are experiencing a real attack, given that the &lt;span class="caps"&gt;IDS&lt;/span&gt;
says that we are? The paper uses Bayes’ theorem (of which you can find
&lt;a href="http://oscarbonilla.com/2009/05/visualizing-bayes-theorem/"&gt;a nice explanation
here&lt;/a&gt;) to
put some numbers in and to get horrifying results (&lt;em&gt;many&lt;/em&gt; false alerts),
and to conclude that such a rate of FPs seriously undermines the
credibility of the&amp;nbsp;system.&lt;/p&gt;
&lt;p&gt;The issue of false positives is also a concern in the anti-malware
industry. And while I
&lt;a href="http://hype-free.blogspot.com/search/label/rant"&gt;rant&lt;/a&gt; quite a bit
about the &lt;span class="caps"&gt;AV&lt;/span&gt; industry, you have to give this one to them: the number of
false positives is &lt;em&gt;really&lt;/em&gt; low. For example, in the
&lt;a href="http://www.av-comparatives.org/"&gt;&lt;span class="caps"&gt;AV&lt;/span&gt;-Comparatives&lt;/a&gt; test 20 false
positives is considered many~~, even though the collection is over 1 500
000 samples (so the acceptable &lt;span class="caps"&gt;FP&lt;/span&gt; rate is below 0.0015%!)~~. &lt;em&gt;Update&lt;/em&gt;:
David Harley was kind enough to correct me, because I was comparing
apples (the number of &lt;em&gt;malware&lt;/em&gt; samples) to oranges (the number of
&lt;em&gt;clean&lt;/em&gt; files falsely detected). So here is an updated calculation: the
Bit9 Global File Registry has more than 6 billion files indexed (they
index clean files). Consider whatever percent from that which is used by
&lt;span class="caps"&gt;AV&lt;/span&gt;-Comparatives for &lt;span class="caps"&gt;FP&lt;/span&gt; testing (as David correctly pointed out, the
cleanset size of &lt;span class="caps"&gt;AV&lt;/span&gt;-Comparatives is not public information – although I
would be surprised if it was less than 1 &lt;span class="caps"&gt;TB&lt;/span&gt;). Some back-of-the-napkin
calculations: lets say that &lt;span class="caps"&gt;AV&lt;/span&gt;-Comparatives has only one tenth of one
percent of the 6 billion files, which would result in 600 000 files.
Even so, 20 files out of 600 000 is just&amp;nbsp;0.003%.&lt;/p&gt;
&lt;p&gt;Now there were (and will be) a couple of big f***-ups by different
companies (like detecting files from Windows), but still, consumers have
a very good reason to trust them. Compare this with more “chatty”
solutions like &lt;a href="http://hype-free.blogspot.com/2006/09/software-vs-hardware-firewalls.html"&gt;software
firewalls&lt;/a&gt;
or – why not – the &lt;span class="caps"&gt;UAC&lt;/span&gt;. Any good &lt;em&gt;security&lt;/em&gt; solution needs to have at
least this level of FPs and much better detection. &lt;span class="caps"&gt;AV&lt;/span&gt; companies with low
&lt;span class="caps"&gt;FP&lt;/span&gt; rates – we salute&amp;nbsp;you!&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
http://www.youtube-nocookie.com/v/xMUgmU_Hsjc&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00#t=1ms50&lt;/p&gt;
&lt;p&gt;&lt;/center&gt;
&lt;/p&gt;
&lt;span class="caps"&gt;PS&lt;/span&gt;. There might be an argument to be made that different false-positives
should be weighted differently (for example depending on the popularity
of the file) to emphasize the big problems (when out-of-control
heuristics start detecting Windows components for example). That is a
valid argument which can be analyzed, but the fact remains that &lt;span class="caps"&gt;FP&lt;/span&gt; rates
of &lt;span class="caps"&gt;AV&lt;/span&gt; solutions, is very&amp;nbsp;low!&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/wadem/"&gt;wadem&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 30 Oct 2009 16:11:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-30:2009/10/importance-of-false-positives.html</guid><category>av</category><category>security</category><category>praise</category></item><item><title>Fun videos</title><link>https://www.grey-panther.net/2009/10/fun-videos.html</link><description>&lt;p&gt;Got the links from a&amp;nbsp;friend:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
http://www.youtube-nocookie.com/v/7H0K1k54t6A&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00&lt;/p&gt;
&lt;p&gt;&lt;/center&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
http://www.youtube-nocookie.com/v/GepKz9qsQQ4&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00&lt;/p&gt;
&lt;p&gt;&lt;/center&gt;
&lt;/p&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 29 Oct 2009 15:08:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-29:2009/10/fun-videos.html</guid><category>music</category><category>technology</category><category>fun</category><category>video</category></item><item><title>Why network neutrality is a big deal</title><link>https://www.grey-panther.net/2009/10/why-network-neutrality-is-big-deal.html</link><description>&lt;p&gt;Reposted from &lt;a href="http://packetlife.net/blog/2009/oct/28/why-network-neutrality-big-deal/"&gt;the packetlife
blog&lt;/a&gt;.
We already pay for the bandwidth. The content providers already pay for
the bandwidth. Anyone claiming anything different is either very
misinformed or is straight out&amp;nbsp;lying!&lt;/p&gt;
&lt;p&gt;&lt;img alt="without_net_neutrality" src="http://lh5.ggpht.com/_hrvCBhtWhJ4/SulKF-PgiAI/AAAAAAAACBA/F7-q06ghLoM/without_net_neutrality%5B5%5D.png?imgmax=800" title="without_net_neutrality" /&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 29 Oct 2009 09:54:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-29:2009/10/why-network-neutrality-is-big-deal.html</guid><category>net neutrality</category><category>rant</category><category>activism</category><category>internet</category><category>networking</category></item><item><title>Bohemian Bankruptcy</title><link>https://www.grey-panther.net/2009/10/bohemian-bankruptcy.html</link><description>&lt;p&gt;
&lt;center&gt;
http://www.youtube-nocookie.com/v/w5EFEQ9aY6o&amp;hl=en&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00

&lt;/center&gt;
Via [Naked&amp;nbsp;Capitalism](http://www.nakedcapitalism.com/2009/10/bohemian-bankruptcy.html)</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 28 Oct 2009 17:43:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-28:2009/10/bohemian-bankruptcy.html</guid><category>funny</category><category>music</category><category>fun</category><category>video</category></item><item><title>RequestPolicy Firefox Plugin – the ultimate NoScript</title><link>https://www.grey-panther.net/2009/10/requestpolicy-firefox-plugin-ultimate.html</link><description>&lt;p&gt;&lt;img alt="3236129283_d61fb9c429_b" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/SuhbIAORvuI/AAAAAAAACA0/eKd6dhJTVMM/3236129283_d61fb9c429_b%5B10%5D.jpg?imgmax=800" title="3236129283_d61fb9c429_b" /&gt;
I recently found out about the following Firefox plugin/addon:
&lt;a href="http://www.requestpolicy.com/"&gt;RequestPolicy&lt;/a&gt; (via &lt;a href="http://skeptikal.org/2009/10/browser-security-tools-requestpolicy.html"&gt;this
blogpost&lt;/a&gt;)
– see also &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/9727/"&gt;the Firefox addon
page&lt;/a&gt;. Its
function is to whitelist &lt;em&gt;all&lt;/em&gt; kinds of cross-domain requests, including
scripts, style-sheets, images, objects (Flash, Java, Silverlight), etc.
Anything in a webpage hosted on the domain A can reference other content
from domain A, but if it references content from other domains, it must
be present in the RequestPolicy whitelist. There are three types on
entries which can be added to the&amp;nbsp;whitelist:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;source (ie. pages on domain S can reference&amp;nbsp;anything)&lt;/li&gt;
&lt;li&gt;destination (ie. anything can reference domain&amp;nbsp;D)&lt;/li&gt;
&lt;li&gt;source-to-destination (ie. pages on domain S can reference resources
    on domain&amp;nbsp;D)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are still &lt;a href="https://www.requestpolicy.com/dev/ticket/50"&gt;some
glitches&lt;/a&gt; to work out, but
all in all it is a good tool for the security conscious. So is it worth
it? It depends. If you are not a power-user who has some knowledge &lt;span class="caps"&gt;HTML&lt;/span&gt;
(ie. how &lt;span class="caps"&gt;CSS&lt;/span&gt;, &lt;span class="caps"&gt;HTML&lt;/span&gt;, &lt;span class="caps"&gt;JS&lt;/span&gt; and plugin objects fit together to form the
page), I would recommend against it (because you will have the
experience of webpages “not working for no good reason”). It takes some
initial training (just like NoScript), but after that it is pretty
invisible (even though not as invisible as NoScript, because it blocks
images /&amp;nbsp;style-sheets).&lt;/p&gt;
&lt;p&gt;&lt;img alt="RequestPolicy" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/SuhbIjA14OI/AAAAAAAACA4/kKlBjIl9ZCE/RequestPolicy%5B7%5D.png?imgmax=800" title="RequestPolicy" /&gt;&lt;/p&gt;
&lt;p&gt;Does it make you more secure? Yes, but just in the “&lt;a href="http://www.aarons-jokes.com/joke-8002.shtml"&gt;you don’t have to
outrun the bear&lt;/a&gt;”: once the
attacker has enough control to insert a linked resource (script, iframe,
etc) in a page, s/he almost certainly has enough control to insert the
attack script directly in the page, rather than linking to it. The
current practice of linking to a centralized place is mostly because the
attackers want to have centralized control (for example to add new
exploits) and statistics. Would such a whitelisting solution to become
widely used, they could switch with very little effort to the “insert
everything into the page” model. Still, such a solution shouldn’t be
underestimated, since it gives an almost perfect protection under the
current&amp;nbsp;conditions.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: If leaving digital trails is something you like to avoid, take
into consideration that the fact that a given site is present in the
whitelist of addons such as NoScript or RequestPolicy can be considered
proof that you&amp;#8217;ve visited the given site (unless it is on the default
list of the respective addon). Just something to consider from a privacy
standpoint. Life is a series of compromises and everyone has to decide
for herself how to make&amp;nbsp;them.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/lukehoagland/"&gt;Luke Hoagland&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 28 Oct 2009 16:54:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-28:2009/10/requestpolicy-firefox-plugin-ultimate.html</guid><category>Firefox</category><category>review</category></item><item><title>help build the mozilla developer network</title><link>https://www.grey-panther.net/2009/10/help-build-mozilla-developer-network.html</link><description>&lt;p&gt;After asking you &lt;a href="http://hype-free.blogspot.com/2009/10/if-you-use-perl.html"&gt;if you use
Perl&lt;/a&gt;, now
I’m asking you to help build the &lt;a href="http://hacks.mozilla.org/2009/10/mozilla-developer-network/"&gt;Mozilla Developer
Network&lt;/a&gt;
(&lt;span class="caps"&gt;MDC&lt;/span&gt;). They are running &lt;a href="http://pro22.sgizmo.com/survey.php?SURVEY=JHS55VFMB9690AI0QL6UQ6IS65WVMK-190379-49226259&amp;amp;pswsgt=1256662160&amp;amp;sg_r=http%3A%2F%2Fhacks.mozilla.org%2F2009%2F10%2Fmozilla-developer-network%2F&amp;amp;sg_g=f508212776c9f2d82998cc2838ae7ef9&amp;amp;_csg=346l68Yu1AI5o&amp;amp;notice=DO-NOT-DISTRIBUTE-THIS-LINK"&gt;a
survey&lt;/a&gt;
to get to know their audience better. Please take it if you use the &lt;span class="caps"&gt;MDC&lt;/span&gt;
and have a couple of minutes of free&amp;nbsp;time.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. You can read some preliminary results from the Perl &lt;span class="caps"&gt;IDE&lt;/span&gt; poll
&lt;a href="http://szabgab.com/blog/2009/10/1256593212.html"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 28 Oct 2009 16:24:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-28:2009/10/help-build-mozilla-developer-network.html</guid><category>survey</category></item><item><title>Taking apart the Dell Inspiron 9400</title><link>https://www.grey-panther.net/2009/10/taking-apart-dell-inspiron-9400.html</link><description>&lt;p&gt;&lt;em&gt;A word of caution: taking apart your laptop will void your warranty. Do
this operation at your own risk. If you are not comfortable doing this
operation, I would recommend against it. Disassembling a laptop is
harder than taking apart a desktop computer (mostly because of the
confined space), so you shouldn’t do it if you didn’t “look into”
atleast couple of desktops&amp;nbsp;already!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;You can see a high resolution of the images below by clicking on&amp;nbsp;them.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Step 0: what tools you need – a long Philips (“cross”) screwdirever,
preferably one with magnetic tip (but you can manage without&amp;nbsp;it).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/15458353@N00/4046232042/sizes/l/"&gt;&lt;img alt="Inspiron_9400_step0" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/SuVn8cJkA-I/AAAAAAAAB_o/Hgcb-oIhDSU/Inspiron_9400_step0%5B1%5D.jpg?imgmax=800" title="Inspiron_9400_step0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Step 1: disconnect the antenna from the wireless card. This is
important, since it is connected to the &lt;span class="caps"&gt;LCD&lt;/span&gt; panel, which we need to
remove. Do this by pulling carefully upwards on the connectors (&lt;em&gt;not&lt;/em&gt;
the wire). Don’t worry about knowing which wire goes where when
reassembling, since it is clearly marked (with small white / black&amp;nbsp;arrows).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/15458353@N00/4045487317/sizes/l/"&gt;&lt;img alt="Inspiron_9400_step1" src="http://lh5.ggpht.com/_hrvCBhtWhJ4/SuVn9Kx7lmI/AAAAAAAAB_s/rBe5cutrIKA/Inspiron_9400_step1%5B1%5D.jpg?imgmax=800" title="Inspiron_9400_step1" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
Step 2: tilt the screen all the way backwards (so that it is parallel
with the bottom part) and remove the upper part of the cover. There is a
small opening where the marking is on the image, you can start there.
Carefully remove the whole cover. It has a couple of plastic “ears”
which you have to be careful not to&amp;nbsp;break.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/15458353@N00/4046232684/sizes/l/"&gt;&lt;img alt="Inspiron_9400_step2" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/SuVn-pX_eDI/AAAAAAAAB_0/QJFd8CmeTg0/Inspiron_9400_step2%5B1%5D.jpg?imgmax=800" title="Inspiron_9400_step2" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Step 3: remove the battery, hard drive, optical drive and bluetooth
adapter. You eject the battery by sliding the middle lever. Remove the
hard-disk by removing the two screws marked at the right. You can also
remove the bluetooth adapter, which is near the harddisk. Sidenote:
except the screws from the harddrive, you can distinguish the screws
from the lower part and the upper part by their length. The rule is:
lower part – long screws, upper part – short screws. To remove the
optical drive, first remove the screw marked by a lock, and then push on
he metal part with the screwdriver. This should pop it out just enough
that you can pull on&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/15458353@N00/4046232576/sizes/l/"&gt;&lt;img alt="Inspiron_9400_step3" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/SuVn_6PCQMI/AAAAAAAAB_8/HvVH-E8aQBQ/Inspiron_9400_step3%5B1%5D.jpg?imgmax=800" title="Inspiron_9400_step3" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Step 4: remove the screws holding the screen and the two screws holding
the&amp;nbsp;keyboard.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/15458353@N00/4046232432/"&gt;&lt;img alt="Inspiron_9400_step4" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/SuVoAwoO7ZI/AAAAAAAACAI/4Si984NXvPc/Inspiron_9400_step4%5B1%5D.jpg?imgmax=800" title="Inspiron_9400_step4" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Step 5: disconnect the &lt;span class="caps"&gt;CMOS&lt;/span&gt; battery (this will result in you loosing
your &lt;span class="caps"&gt;BIOS&lt;/span&gt; settings, which you will have to reset at the first boot after
assembly). Also, disconnect the keyboard. This is a tricky connector:
you have to flip the upper part open to remove the cable. Also, when
putting it back, you first have to make sure that you’ve properly
aligned the cable with the connector, and then push down on it. If it
doesn’t go easy, don’t force it, rather take it out and try again,
making sure that the alignment is correct&amp;nbsp;(straight).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/15458353@N00/4045486741/"&gt;&lt;img alt="Inspiron_9400_step5" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/SuVoCH2EdhI/AAAAAAAACAM/3GTRVPrKLsw/Inspiron_9400_step5%5B1%5D.jpg?imgmax=800" title="Inspiron_9400_step5" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Step 6: disconnect the &lt;span class="caps"&gt;LCD&lt;/span&gt; panel and remove it. Unscrew the upper part,
in the locations marked with “P”. Disconnect the two cables linking it
to the mainboard (the ones towards the middle). Flip the base over and
remove the bottom screws also. At this point you can separate the upper
and lower part of the&amp;nbsp;base.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/15458353@N00/4046231888/sizes/l/"&gt;&lt;img alt="Inspiron_9400_step6" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/SuVoDVKA-3I/AAAAAAAACAY/Mme_ukgUmSI/Inspiron_9400_step6%5B1%5D.jpg?imgmax=800" title="Inspiron_9400_step6" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Step 7: You can remove the &lt;span class="caps"&gt;PCMCIA&lt;/span&gt;&amp;nbsp;adapter.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Inspiron_9400_step7" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/SuVoEqJapYI/AAAAAAAACAc/I-x1m0Z6UaQ/Inspiron_9400_step7%5B2%5D.jpg?imgmax=800" title="Inspiron_9400_step7" /&gt;&lt;/p&gt;
&lt;p&gt;Step 8: The laptop is almost completely unassembled at this point. You
can continue removing parts if you need to, however take care when
working around the coolers: tightening them too much can result in the
&lt;span class="caps"&gt;CPU&lt;/span&gt;/&lt;span class="caps"&gt;GPU&lt;/span&gt; cracking. Make them too loose however, and your cooling will&amp;nbsp;suffer.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/15458353@N00/4045486059/sizes/l/"&gt;&lt;img alt="Inspiron_9400_step8" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/SuVoFiyYt7I/AAAAAAAACAk/jAD3Yi3rptM/Inspiron_9400_step8%5B1%5D.jpg?imgmax=800" title="Inspiron_9400_step8" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Happy&amp;nbsp;hacking!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 26 Oct 2009 11:12:00 +0200</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-26:2009/10/taking-apart-dell-inspiron-9400.html</guid><category>hardware</category><category>dell</category><category>disassembly</category></item><item><title>Watch out for those reviews…</title><link>https://www.grey-panther.net/2009/10/watch-out-for-those-reviews.html</link><description>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_hrvCBhtWhJ4/SuHBqjLcu6I/AAAAAAAAB-U/JNUVRjbdRVc/s1600-h/154117109_1aee1dcb5b_o%5B2%5D.jpg"&gt;&lt;img alt="154117109_1aee1dcb5b_o" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/SuHBrCchWWI/AAAAAAAAB-Y/2ghzxNE-q1A/154117109_1aee1dcb5b_o_thumb.jpg?imgmax=800" title="154117109_1aee1dcb5b_o" /&gt;&lt;/a&gt;
Recently I was buying a notebook &lt;span class="caps"&gt;HDD&lt;/span&gt;, and after considering a Samsung
SpinPoint model, I’ve looked around the net to see if there were any
known issues with the model. So I stumbled upon &lt;a href="http://datacent.com/datarecovery/hdd/samsung/SpinPoint+S"&gt;this
page&lt;/a&gt; and my
blood ran cold.&amp;nbsp;Quote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;One of the most common problems Samsung SpinPoint hard drives
experience is burnt cuircuit board(&lt;span class="caps"&gt;PCB&lt;/span&gt;).&lt;/p&gt;
&lt;p&gt;&amp;#8230;&lt;/p&gt;
&lt;p&gt;Samsung hard drives could also suffer from firmware&amp;nbsp;problems.&lt;/p&gt;
&lt;p&gt;&amp;#8230;&lt;/p&gt;
&lt;p&gt;Another quite common symptom Samsung drives experience is
clicking/knocking&amp;nbsp;sound.&lt;/p&gt;
&lt;p&gt;&amp;#8230;&lt;/p&gt;
&lt;p&gt;There is one more problem that is typical for all hard drives and
Samsung drives particularly: bad&amp;nbsp;sectors.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Is this drive really of such poor quality? Does it really have all these
problems? But then I started looking around on their site at they seem
to have the same or very similar text for
&lt;a href="http://datacent.com/datarecovery/hdd/western_digital/WD1000BEVS"&gt;every&lt;/a&gt;
&lt;a href="http://datacent.com/datarecovery/hdd/seagate/Barracuda+7200.7"&gt;type&lt;/a&gt;
&lt;a href="http://datacent.com/datarecovery/hdd/fujitsu/MPB3043AT"&gt;of&lt;/a&gt;
&lt;a href="http://datacent.com/datarecovery/hdd/maxtor/DiamondMax+2880"&gt;&lt;span class="caps"&gt;HDD&lt;/span&gt;&lt;/a&gt;
&lt;a href="http://datacent.com/datarecovery/hdd/seagate/ST3300631AS"&gt;out&lt;/a&gt;
&lt;a href="http://datacent.com/datarecovery/hdd/quantum/Fireball+TM"&gt;there&lt;/a&gt;. The
conclusion: they (Data Cent) are just trying to spam Google and I’m
inclined to believe that most of their advice isn’t founded on facts,
but rather on a randomized text generator. I for one encourage people
&lt;em&gt;not&lt;/em&gt; to take their business to such a&amp;nbsp;company.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. All the links to them are nofollow, so I’m not giving them any
Google&amp;nbsp;love.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/barnoid/"&gt;barnoid&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 23 Oct 2009 17:46:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-23:2009/10/watch-out-for-those-reviews.html</guid><category>deception</category><category>review</category><category>spam</category></item><item><title>And now for some upbeat news</title><link>https://www.grey-panther.net/2009/10/and-now-for-some-upbeat-news.html</link><description>&lt;p&gt;While I certainly like to
&lt;a href="http://hype-free.blogspot.com/search/label/rant"&gt;rant&lt;/a&gt;, one shouldn’t
forget about the more sunny side of life (unless you want to go
berserk). So here are some random positive&amp;nbsp;things:&lt;/p&gt;
&lt;p&gt;Some songs which I&amp;nbsp;like:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
http://www.youtube.com/p/&lt;span class="caps"&gt;D984AB44FF987DDA&lt;/span&gt;&amp;hl=en&amp;fs=1

&lt;/center&gt;
A funny image from [a friend](http://vtopan.wordpress.com):

[![1940](http://lh3.ggpht.com/_hrvCBhtWhJ4/SuFhdS8Uo7I/&lt;span class="caps"&gt;AAAAAAAAB&lt;/span&gt;-M/7C_-IVmU1Q8/1940_thumb%5B3%5D.jpg?imgmax=800 &amp;#8220;1940&amp;#8221;)](http://lh5.ggpht.com/_hrvCBhtWhJ4/SuFhcyGYsmI/&lt;span class="caps"&gt;AAAAAAAAB&lt;/span&gt;-I/mLj5AzpNFRg/s1600-h/1940%5B5%5D.jpg)

A couple of great freeware programs for the Windows platform:

-   [CDBurnerXP](http://cdburnerxp.se/) – does everything Nero does, for
    free!
-   [&lt;span class="caps"&gt;DVD&lt;/span&gt; Flick](http://www.dvdflick.net/) – while from the technical
    standpoint it is “just a wrapper” over FFMpeg and similar tools, it
    does a great job – you can create your &lt;span class="caps"&gt;DVD&lt;/span&gt; in a couple of steps
-   [foobar2000](http://www.foobar2000.org/) – a great little &lt;span class="caps"&gt;MP3&lt;/span&gt;
    player, especially for those of us who liked the old Winamp, before
    it tried to do everything. At it can also do batch transcoding!
-   [IrfanView](http://www.irfanview.com/) – *the* free image viewer /
    converter!
-   [7-zip](http://www.7-zip.org/) – open source WinRar. Supports a lot
    of formats
-   [Far Manager Open
    Source](http://www.farmanager.com/download.php?l=en) – a great
    native win32 file manager with a retro look
-   [&lt;span class="caps"&gt;BB&lt;/span&gt; FlashBack
    Express](http://www.bbsoftware.co.uk/bbflashbackexpress/home.aspx) –
    a free screen capture software which works great
-   [VideoLan](http://www.videolan.org/) (or
    [&lt;span class="caps"&gt;VLC&lt;/span&gt;](http://www.videolan.org/) as it is better know) – the *simple*
    solution to play all your media, without having to install tones of
    codecs. If it would have a little better playlist management, I
    would use it as my primary media-player

A great quote: “the difference between communism and capitalism is that
in first men exploit other men, and in the second it is the other way
around”. Found it via [this New York Times
blog](http://freakonomics.blogs.nytimes.com/), written by the authors of
[Freakonomics](http://hype-free.blogspot.com/2009/08/freakonomics-review.html)
(and now the sequel
[](&lt;a%20href="http://www.amazon.com/gp/product/0060889578?ie=UTF8&amp;tag=hypefree-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0060889578"&gt;)[&amp;#8220;\&gt;&amp;#8217;\&gt;Superfreakonomics](&amp;#8220;http://www.amazon.com/gp/product/0060889578?ie=&lt;span class="caps"&gt;UTF8&lt;/span&gt;&amp;tag=hypefree-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0060889578&amp;#8221;)).
It is a great blog, worth the read. Where elsewhere do you find [a
rigorous analysis of the logic in newspaper
comics](http://freakonomics.blogs.nytimes.com/2009/10/07/freakonomics-quiz-doonesbury-logic/)?

So there you have it, have a great day! An maybe listen to some [french
striptease
songs](http://vtopan.wordpress.com/2009/04/06/top-ten-striptease-songs/)
:-) (just a little &lt;span class="caps"&gt;SEO&lt;/span&gt; for a friend&amp;nbsp;;-))</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 23 Oct 2009 10:55:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-23:2009/10/and-now-for-some-upbeat-news.html</guid><category>positivity</category><category>upbeat</category><category>smile</category></item><item><title>The difference between additive and subtractive color schemes</title><link>https://www.grey-panther.net/2009/10/difference-between-additive-and.html</link><description>&lt;p&gt;I’ve known for the longest time that there are two ways of creating /
describing colors: additive
(&lt;a href="http://en.wikipedia.org/wiki/RGB_color_model"&gt;&lt;span class="caps"&gt;RGB&lt;/span&gt;&lt;/a&gt;) and subtractive
(&lt;a href="http://en.wikipedia.org/wiki/CMYK_color_model"&gt;&lt;span class="caps"&gt;CMYK&lt;/span&gt;&lt;/a&gt;). However I never
really understood the equivalence between them, until recently, when I
picked up a book which presented the general concepts of typography.
This is very cool, so I’ll try to document it here (because I didn’t
find it elsewhere on the ‘net – although it almost certainly&amp;nbsp;exists).&lt;/p&gt;
&lt;p&gt;Lets begin with the additive&amp;nbsp;part:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_hrvCBhtWhJ4/SuB2wjHOnyI/AAAAAAAAB9w/Ob0Oh6B2o7k/s1600-h/light-rgb%5B4%5D.png"&gt;&lt;img alt="light-rgb" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/SuB2xHcGOEI/AAAAAAAAB90/yQCzOq04lMM/light-rgb_thumb%5B2%5D.png?imgmax=800" title="light-rgb" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is done by focusing one to three of the base colors (&lt;strong&gt;R&lt;/strong&gt;ed,
&lt;strong&gt;G&lt;/strong&gt;reen and &lt;strong&gt;B&lt;/strong&gt;lue) in the same point to create a given color.
(Technically it isn’t “the same point”, just three points in such close
proximity that you can’t tell the difference). The base colors can be
generated in different ways: an electron beam hitting differently
colored phosphor particles (&lt;span class="caps"&gt;CRT&lt;/span&gt;), colored LEDs or filtering out colors
from a white light with colored polarization filters (LCDs). Already we
can see a similarity between the “additive” and “subtractive” models:
even when using the additive model, we sometimes create the light using
subtraction (in the case of&amp;nbsp;LCDs).&lt;/p&gt;
&lt;p&gt;Now for the subtractive&amp;nbsp;part:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_hrvCBhtWhJ4/SuB2xXSdGyI/AAAAAAAAB94/Tp4Gpl-M6g4/s1600-h/light-cmyk%5B5%5D.png"&gt;&lt;img alt="light-cmyk" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/SuB2xlQtYdI/AAAAAAAAB98/wSE9ejHIdXY/light-cmyk_thumb%5B3%5D.png?imgmax=800" title="light-cmyk" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here we have a light source emitting white (ie. containing all three of
the &lt;span class="caps"&gt;RGB&lt;/span&gt; components) beams of light. These beams hit a surface and some
of the components get absorbed (“subtracted” from the beam), while
others get reflected. The ones reflected form the resulting color. From
this point of view the subtractive model is analogous to the way LCDs
create colors. The three colors used in the subtractive model (&lt;strong&gt;C&lt;/strong&gt;yan,
&lt;strong&gt;M&lt;/strong&gt;agenta and &lt;strong&gt;Y&lt;/strong&gt;ellow) are chosen because they absorb the different
components (ie R/G/B) of the white&amp;nbsp;light.&lt;/p&gt;
&lt;p&gt;There are other technical details (for example: the presence/absence of
each component is not a binary 0/1 number, rather a continuously varying
one, resulting in an infinite number or colors. or an other: the
absorption in the case of the &lt;span class="caps"&gt;CMYK&lt;/span&gt; model is not perfect nor uniform
between the different components. also, absorbing all the light – ie.
creating black – is theoretically possible by combining &lt;span class="caps"&gt;CMY&lt;/span&gt;, but it
would result in a – relatively speaking - very thick layer of paint,
which is why black paint is also used in the printing process), but the
essence of it is: additive and subtractive models are very&amp;nbsp;similar.&lt;/p&gt;
&lt;p&gt;Hope this helps somebody&amp;nbsp;:-)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 22 Oct 2009 18:14:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-22:2009/10/difference-between-additive-and.html</guid><category>misc</category><category>color theory</category><category>typography</category><category>color</category></item><item><title>If you use Perl…</title><link>https://www.grey-panther.net/2009/10/if-you-use-perl.html</link><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_hrvCBhtWhJ4/SuBeoytXHrI/AAAAAAAAB9k/xxAF8VtLtHo/s1600-h/807311296_c136909bc7_o2.jpg"&gt;&lt;img alt="807311296_c136909bc7_o" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/SuBepGlrDEI/AAAAAAAAB9o/L5ekBMijY9I/807311296_c136909bc7_o_thumb.jpg?imgmax=800" title="807311296_c136909bc7_o" /&gt;&lt;/a&gt;Please
take a minute an answer the poll “&lt;a href="http://answers.polldaddy.com/poll/2150554/"&gt;Which editor(s) or &lt;span class="caps"&gt;IDE&lt;/span&gt;(s) are you
using for Perl
development?&lt;/a&gt;“ (via
&lt;a href="http://perlbuzz.com/2009/10/what-editoride-do-you-use-for-perl-development.html"&gt;perlbuzz&lt;/a&gt;
and &lt;a href="http://szabgab.com/blog/2009/10/1256148994.html"&gt;szabgab&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/knightrider/"&gt;Knightrider&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 22 Oct 2009 16:31:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-22:2009/10/if-you-use-perl.html</guid><category>ide</category><category>perl</category><category>poll</category></item><item><title>A couple of new challenges</title><link>https://www.grey-panther.net/2009/10/couple-of-new-challenges.html</link><description>&lt;p&gt;Here are a couple of challenges I found on the&amp;nbsp;interwebs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ethicalhacker.net/content/view/279/2/"&gt;SSHliders&lt;/a&gt; – from
    ethicalhacker.net. This one is centered around *nix shell scripting
    and more advanced topics like&amp;nbsp;pipes.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.frontiernet.net/~fys/hugi/hcompo.htm"&gt;Hugi Size Coding Compo
    #29&lt;/a&gt; (from
    &lt;a href="http://www.hugi.scene.org/main.php"&gt;Hugi&lt;/a&gt;) – not much time left
    there, the deadline is the 28th of October. No flashy prizes either,
    just the bragging rights that you’ve created something useful in
    less than 124 bytes (the current&amp;nbsp;leader)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, the solution to the &lt;a href="http://hype-free.blogspot.com/2009/09/ethical-hacker-challenge-prison-break.html"&gt;Prison Break &lt;span class="caps"&gt;EH&lt;/span&gt;
challenge&lt;/a&gt;
has been posted (on
&lt;a href="http://www.ethicalhacker.net/content/view/278/2/"&gt;&lt;span class="caps"&gt;EH&lt;/span&gt;.net&lt;/a&gt; with
&lt;a href="http://radajo.blogspot.com/2009/10/prison-break-breaking-entering-decoding.html"&gt;additional videos on the radajo
blog&lt;/a&gt;).
There is a lot of cool networking info in there, worth the&amp;nbsp;read!&lt;/p&gt;
&lt;p&gt;Have&amp;nbsp;fun!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 22 Oct 2009 15:05:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-22:2009/10/couple-of-new-challenges.html</guid><category>challenge</category></item><item><title>Using TarInputStream from Java</title><link>https://www.grey-panther.net/2009/10/using-tarinputstream-from-java.html</link><description>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_hrvCBhtWhJ4/St85BWq7yJI/AAAAAAAAB9Y/ZNz-TVsKCxs/s1600-h/994941366_af693049f1_o%5B2%5D.png"&gt;&lt;img alt="994941366_af693049f1_o" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/St85BzIfuwI/AAAAAAAAB9c/K96xgYTo9uc/994941366_af693049f1_o_thumb.png?imgmax=800" title="994941366_af693049f1_o" /&gt;&lt;/a&gt;
Recently I had to parse trough a bunch of logs, scattered in
subdirectories and different types of archives (tar, bz and gz). My
first thought was of course Perl (since it is &lt;em&gt;the&lt;/em&gt; language for parsing
quasi-freeform text), however I didn’t have “streaming” implementation
for the archive modules, which in my case was very important, since the
archives were &lt;em&gt;big&lt;/em&gt; and reading them completely into memory was not
acceptable. So I fund the
&lt;a href="http://api.dpml.net/ant/1.7.0/org/apache/tools/tar/TarInputStream.html"&gt;TarInputStream&lt;/a&gt;
/
&lt;a href="http://api.dpml.net/ant/1.7.0/org/apache/tools/bzip2/CBZip2InputStream.html"&gt;CBZip2InputStream&lt;/a&gt;
from Apache Ant and
&lt;a href="http://java.sun.com/javase/6/docs/api/java/util/zip/GZIPInputStream.html"&gt;GZIPInputStream&lt;/a&gt;,
which is readily available in the &lt;span class="caps"&gt;JRE&lt;/span&gt;. While the last two are quite
straight-forward to use, I’ve had to beat my head against the wall for
quite some time before I managed to use TarInputStream. To save other
people the hassle, here is a short writeup on what I’ve&amp;nbsp;learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;After creating the TarInputStream, you start out by calling
    &lt;a href="http://api.dpml.net/ant/1.7.0/org/apache/tools/tar/TarInputStream.html#getNextEntry()"&gt;getNextEntry&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;You do this until it returns null (similar to how you would read a
    textfile line-by-line with&amp;nbsp;BufferedReader)&lt;/li&gt;
&lt;li&gt;tar doesn’t actually compress anything, it just concatenates the
    data in a sequence of&lt;br /&gt;
   &lt;header&gt;
    &lt;data&gt; series. After calling getNextEntry the TarInputStream is
    positioned right at the start of the data for the given entry (if it
    is a file, which you should also check) &lt;/data&gt;
    &lt;/header&gt;&lt;/li&gt;
&lt;li&gt;To read the data associated with the TarEntry you just obtained, you
    have two possibilities:&lt;ul&gt;
&lt;li&gt;You can use the the
    &lt;a href="http://api.dpml.net/ant/1.7.0/org/apache/tools/tar/TarInputStream.html#copyEntryContents(java.io.OutputStream)"&gt;copyEntryContents&lt;/a&gt;
    method &lt;em&gt;on the stream&lt;/em&gt; to put the data in an other stream (in
    memory, in an other file, etc). Just make sure that you have
    enough memory / disk space to do&amp;nbsp;so&lt;/li&gt;
&lt;li&gt;You can read the contents directly from the stream. For example
    you can layer a GZIPInputStream (or CBZip2InputStream) over the
    TarInputStream if you have a gz / bz2 in a tar (usually it’s the
    reverse, this was the case for my little parser for&amp;nbsp;example)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One thing to watch out for if you choose the second method, is the fact
that TarInputStream is very sensible to positioning. So if the stream
you layer on top of it has a off-by-one error (ie. it reads a couple of
bytes more than the actual size of the data), you can quickly get a
mysterious IOException which says something along the lines of “reading
from output&amp;nbsp;buffer”.&lt;/p&gt;
&lt;p&gt;My solution to the problem was to layer a custom FilterStream on top of
TarInputStream before handing it over to an other stream which does two&amp;nbsp;things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;it makes sure that the stream on top of it can read only N bytes,
    where N is the size of the entry&amp;nbsp;and&lt;/li&gt;
&lt;li&gt;when close is called on it, it doesn’t propagate it to the
    TarInputStream (so that it doesn’t get closed and further entries
    can be&amp;nbsp;processed)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Below you can see this filter&amp;nbsp;stream:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;public class SizeLimiterInputStream extends FilterInputStream {
  final long maxSize;
  final InputStream base;
  long alreadyRead;

  public SizeLimitInputStream(InputStream in, long maxSize) {
    super(in);
    this.maxSize = maxSize;
    alreadyRead = 0;
    base = in;
  }

  @Override
  public synchronized int available() throws IOException {      
    long a = base.available();
    if (alreadyRead + a &amp;gt; maxSize)
      a = maxSize - alreadyRead;
    return (int)a;          
  }

  @Override
  public void close() {
    // do nothing
  }

  @Override
  public boolean markSupported() {
    return false;
  }

  @Override
  public void mark(int readlimit) {
    // do nothing
  }

  @Override
  public void reset() throws IOException {
    // do nothing 
  }

  @Override
  public synchronized int read() throws IOException {
    if (alreadyRead &amp;gt;= maxSize)
      throw new EOFException();
    int r = base.read();
    alreadyRead += 1;
    return r;
  }

  @Override
  public synchronized int read(byte[] b) throws IOException {
    return read(b, 0, b.length);
  }

  @Override
  public synchronized int read(byte[] b, int off, int len) throws IOException {
    if (alreadyRead &amp;gt;= maxSize)
      return -1;
    if (alreadyRead + len &amp;gt; maxSize)
      len = (int)(maxSize - alreadyRead);
    int r = base.read(b, off, len);
    alreadyRead += r;
    return r;
  }

  @Override
  public synchronized long skip(long n) throws IOException {
    if (n &amp;lt; 0)
      return 0;
    if (alreadyRead &amp;gt;= maxSize)
      return 0;
    if (alreadyRead + n &amp;gt; maxSize)
      n = maxSize - alreadyRead;
    long r = base.skip(n);
    alreadyRead += r;
    return r;
  }

}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;So your code would like something along the lines&amp;nbsp;of:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;TarInputStream tis = new TarInputStream(fileInputStream);
TarEntry tarEntry;
while ((tarEntry = tis.getNextEntry()) != null) {
  if (tarEntry.isDirectory()) continue;

  InputStream tmpIn = new SizeLimitInputStream(tis, tarEntry.getSize());                
  // process tmpIn - create other streams on top of it for example ...
}
tis.close();
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Hope this&amp;nbsp;helps.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/hinkelstone/"&gt;quapan&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 21 Oct 2009 19:38:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-21:2009/10/using-tarinputstream-from-java.html</guid><category>programming</category><category>archive</category><category>java</category></item><item><title>Avalonix Wireless Camera review</title><link>https://www.grey-panther.net/2009/10/avalonix-wireless-camera-review.html</link><description>&lt;p&gt;A &lt;a href="http://www.security-cameras-cctv.com"&gt;wireless security camera&lt;/a&gt; is
quite an interesting piece of technical equipment, which – the
conventional wisdom holds – can deter people from breaking the rules
(whatever those might be) or help after the fact demonstrate “who done
it”. Their real value is however questionable. For one, they can become
a prime target for attackers (“the first to fall”). Second of all,
regardless of what is shown in &lt;span class="caps"&gt;TV&lt;/span&gt; shows, the resolution is quite poor,
so it is improbable that you would get something out of it which could
be used to identify a person with any certainty. Finally, there is a big
problem with unauthorized people getting access to the pictures
(voyeurism), &lt;em&gt;especially&lt;/em&gt; with wireless security cameras, and
&lt;em&gt;especially&lt;/em&gt; with Internet connected wireless security&amp;nbsp;cameras.&lt;/p&gt;
&lt;p&gt;If you have carefully considered all the possible drawbacks and still
want to install a &lt;a href="http://www.security-cameras-cctv.com"&gt;wireless security
camera&lt;/a&gt; (or more), you might want
to take a look at the Avalonix 5.8GHz Wireless cameras. They advertise a
reception distance between 3000ft (around one Km) and 7 miles (around 11
Km) with a proper antenna. They have a separate night vision mode and
420 lines of resolution. Again, consider if this is enough for your
purpose. 420 lines is lower than the resolution of a standard-definition
&lt;span class="caps"&gt;TV&lt;/span&gt; (which is 480). Two other concerns are the fact that the only
provider for Avalonix cameras (security-cameras-cctv.com) seems to be
offline currently (even though the server responds to pings, the webpage
doesn’t load – tried from two geographically distant networks - and the
Google cache shows a lot of MySQL errors) and the only mention I could
find contains a complaint. The technical specification also fails to
clarify if this is an outdoor or indoor&amp;nbsp;camera.&lt;/p&gt;
&lt;p&gt;On the bright side of this &lt;a href="http://www.security-cameras-cctv.com"&gt;wireless security
camera&lt;/a&gt;, the domain seems to be
rather old (stable) and its owner doesn’t hide behind a proxy
registration service (off topic: I too agree with the opinion that only
private individuals should by allowed to use the domain-by-proxy type
services, and that businesses should be needed to provide real
&lt;em&gt;verifiable&lt;/em&gt; contact&amp;nbsp;information).&lt;/p&gt;
&lt;p&gt;Currently my advice would be to go for a different type of camera, one
which is more widely available and for which more reviews exists. Again,
consider that such equipment might be a prime target for vandals, so you
might be better off installing it in a covert location, and eventually
providing some cheap fake camera lookalikes. Also, consider using a high
resolution camera. One good test is to take a digital camera and shoot a
couple of photos from the angle where you are considering to mount the
camera (include some people in the photos near the perimeter of the view
field). Then take the photo (which is probably of a high resolution 5+
megapixel) and shrink it down to whatever the camera specification says.
See if you can still see enough details of the people in the picture
(and consider that scaling down preserves more information that just
plain-out taking the picture at the smaller resolution – so if you are
unable to distinguish faces, you won’t be able to with the&amp;nbsp;camera).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 13 Oct 2009 18:07:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-13:2009/10/avalonix-wireless-camera-review.html</guid><category>reviewme</category><category>review</category></item><item><title>Grooveshark</title><link>https://www.grey-panther.net/2009/10/grooveshark.html</link><description>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_hrvCBhtWhJ4/Ss9O19BBT0I/AAAAAAAAB9E/Ew6Dqs82Za4/s1600-h/2454524589_b86461507f_b%5B2%5D.jpg"&gt;&lt;img alt="2454524589_b86461507f_b" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/Ss9O2KdI41I/AAAAAAAAB9I/o_xoEq2ENF8/2454524589_b86461507f_b_thumb.jpg?imgmax=800" title="2454524589_b86461507f_b" /&gt;&lt;/a&gt;&lt;em&gt;Disclaimer:
I received no compensation for this review. All the opinions are my&amp;nbsp;own.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There are a couple of actions you can do with music you have on your&amp;nbsp;computer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can listen to an arbitrary song from your&amp;nbsp;library&lt;/li&gt;
&lt;li&gt;You can jump in the song you are listening&amp;nbsp;to&lt;/li&gt;
&lt;li&gt;You can share it with a&amp;nbsp;friend&lt;/li&gt;
&lt;li&gt;You can convert it and listen using an alternative format (ie. on
    your &lt;span class="caps"&gt;MP3&lt;/span&gt; player, on your phone, in your car,&amp;nbsp;etc)&lt;/li&gt;
&lt;li&gt;You can edit it using &lt;a href="http://audacity.sourceforge.net/"&gt;a sound&amp;nbsp;editor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thus, any service which aims to replace your music library should
provide as many of these options as possible. Recently I found out about
&lt;a href="http://listen.grooveshark.com/"&gt;Grooveshark&lt;/a&gt; which provides all but the
last two of these actions &lt;em&gt;for free&lt;/em&gt;! Additionally they have a very
slick interface and &lt;em&gt;you don’t even have to sign up to use the service&lt;/em&gt;!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_hrvCBhtWhJ4/Ss9O2vOVtuI/AAAAAAAAB9M/Lt9KYmJQ0Os/s1600-h/grooveshark%5B4%5D.png"&gt;&lt;img alt="grooveshark" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/Ss9O3D0IeVI/AAAAAAAAB9Q/Cy0-Z0K93M4/grooveshark_thumb%5B2%5D.png?imgmax=800" title="grooveshark" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Additionally they provide an “auto-play” feature which adds “similar”
songs to your playlist and seems to work acceptably (is is no Pandora
though). An other thing I appreciate is the clear revenue model: it is
ad supported or you can become a premium member for as little as 3\$ /
month and see no ads. I don’t know if the numbers are right, but they
seem much more plausible than the one of
&lt;a href="http://hype-free.blogspot.com/2009/07/jango-review.html"&gt;Jango&lt;/a&gt;. I
don’t want to dish them, but their lack of business model (no premium
accounts!?) always concerned me and recently they seem to experiment
with a lot of things (like taking away the possibility of directly
playing a song and rather linking to Rhapsody) which is both annoying
and concerning. My only concern is the fact that I found this site via
the now defunct Seeqpod, which used (intentionally or unintentionally)
publicly available &lt;span class="caps"&gt;MP3&lt;/span&gt; files to power their service. While Grooveshark
seems to use their own servers, rather than arbitrary hosts on the
Internet, the file name quality suggests that these files were
arbitrarily downloaded from different sources (public folders? &lt;span class="caps"&gt;P2P&lt;/span&gt;? –
who knows), a practice which might get them in hot water with the &lt;span class="caps"&gt;RIAA&lt;/span&gt;,
especially given that they seem to be based in the &lt;span class="caps"&gt;USA&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;In conclusion: Grooveshark is great for now. Hopefully it will last in
its current (or better) form for a long time. Below you can see an
example of the embedded&amp;nbsp;player:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
http://listen.grooveshark.com/songWidget.swf&lt;/p&gt;
&lt;p&gt;&lt;/center&gt;
&lt;/p&gt;
&lt;em&gt;Update&lt;/em&gt;: check out &lt;a href="http://hype-free.blogspot.com/2009/11/grooveshark-vip-member.html"&gt;the new Grooveshark
interface&lt;/a&gt;!
It is very nice. Also, I&amp;#8217;m a &lt;span class="caps"&gt;VIP&lt;/span&gt; subscriber to Grooveshark&amp;nbsp;now!&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/gonzalovalenzuela/"&gt;gonzalovalenzuela&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 09 Oct 2009 17:55:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-09:2009/10/grooveshark.html</guid><category>music</category><category>review</category><category>freeware</category></item><item><title>Sony Ericsson Satio</title><link>https://www.grey-panther.net/2009/10/sony-ericsson-satio.html</link><description>&lt;p&gt;I admit: I didn’t jump on the “hip new phone with all kinds of bells and
whistles” bandwagon yet. I’m very content with my small, sturdy Nokia.
However one has to admit that there is a certain kind of wow effect when
one looks at phones like the &lt;a href="http://www.omio.com/phones/sony-ericsson/satio"&gt;Sony Ericsson
Satio&lt;/a&gt;. Even though I
had some bad experience with Sony Ericsson phones in the past (in my
opinion they are the “looks shiny but don’t expect it to last more than
a year” category), this phone looks&amp;nbsp;nice.&lt;/p&gt;
&lt;p&gt;It has &lt;a href="http://www.omio.com/phones/sony-ericsson/satio/features"&gt;all the
features&lt;/a&gt; one
would expect from such a phone (quad-band, Wi-Fi, Bluetooth, &lt;span class="caps"&gt;GPS&lt;/span&gt;, &lt;span class="caps"&gt;USB&lt;/span&gt;,
etc). Of course it has a full &lt;span class="caps"&gt;QWERTY&lt;/span&gt; keyboard with touch-screen and uses
a standard stereo jack (this is big advantage and seems to be a standard
feature for Sony Ericsson products). However the price seems to be a
little too steep. I still can’t see real return-on-investment in buying
a phone from this category. You could argue that it brings the
functionality of a netbook, a digital camera, a media player and phone
in one, but I still feel that it doesn’t do at least an average job of
all of them (I imagine that it is a little too small for a netbook
replacement and it doesn’t have optical zoom on the photography side –
of course no consumer phone does – which makes the quality of the photos
too low, even for an amateur like&amp;nbsp;myself).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 09 Oct 2009 17:07:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-09:2009/10/sony-ericsson-satio.html</guid><category>reviewme</category><category>review</category></item><item><title>LandAirSea Systems - GPS Tracking</title><link>https://www.grey-panther.net/2009/10/landairsea-systems-gps-tracking.html</link><description>&lt;p&gt;&lt;a href="http://www.landairsea.com"&gt;&lt;img alt="landairsealogo" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/Ss8wHmp6uzI/AAAAAAAAB88/c8qleQzPfwk/landairsealogo%5B4%5D.jpg?imgmax=800" title="landairsealogo" /&gt;
&lt;span class="caps"&gt;GPS&lt;/span&gt; Tracking&lt;/a&gt; is a contentious issue, even
more when it is forced on the subject. There are however situations
where we can be legally obligated to subject ourselves to such tracking
(for example when we are using the car of the employer or if our legal
guardian wishes so). The LandAirSea company specializes in such tracking
systems. They provide a variety of models, some with real-time tracking
capabilities, others requiring the physical re-acquisition of the
equipment for later analysis. For example we have the &lt;a href="http://www.landairsea.com/gps-tracking-systems/gps-tracking-key.html"&gt;tracking
key&lt;/a&gt;
(available also &lt;a href="http://www.amazon.com/gp/product/B000H9E9UG?ie=UTF8&amp;amp;tag=hypefree-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000H9E9UG"&gt;on
Amazon&lt;/a&gt;
– disclosure: the link contains my affiliate &lt;span class="caps"&gt;ID&lt;/span&gt;), a very small
form-factor solution with mostly positive&amp;nbsp;reviews.&lt;/p&gt;
&lt;p&gt;The company has been around since 1994, so, as the old cliché says, they
must be doing something right. One positive aspect I observed is that
tracking seems to be free for many models, there are no additional
recurring costs besides the purchasing of the &lt;span class="caps"&gt;GPS&lt;/span&gt;. On the downside (if
this is a concern for you), the real-time tracking seems to be limited
to the mainland of &lt;span class="caps"&gt;USA&lt;/span&gt;. In conclusion: good company, nice offer and it
is worth considering if you are shopping around for such equipments. One
thing to keep in mind is that &lt;span class="caps"&gt;GPS&lt;/span&gt; units can be quite slow to acquire the
signal in my experience (up to a couple of minutes if it isn’t moving,
and even more if the unit is in&amp;nbsp;motion).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 09 Oct 2009 15:44:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-09:2009/10/landairsea-systems-gps-tracking.html</guid><category>reviewme</category><category>review</category></item><item><title>Fixing CVS annotate</title><link>https://www.grey-panther.net/2009/10/fixing-cvs-annotate.html</link><description>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_hrvCBhtWhJ4/SsyjaNkjZgI/AAAAAAAAB80/3I4afc30z2g/s1600-h/3415325123_d6e1435b48_b2.jpg"&gt;&lt;img alt="3415325123_d6e1435b48_b" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/SsyjaeBg20I/AAAAAAAAB84/PKECSBB_7LA/3415325123_d6e1435b48_b_thumb.jpg?imgmax=800" title="3415325123_d6e1435b48_b" /&gt;&lt;/a&gt;
Yes, some of us work on projects started almost a decade ago and as such
we use &lt;span class="caps"&gt;CVS&lt;/span&gt; (yes, &lt;span class="caps"&gt;CVS&lt;/span&gt; has many limitations and yes, git is better – for a
nice introduction see &lt;a href="http://video.google.com/videoplay?docid=-3999952944619245780#"&gt;Randal Schwarz’s video about
git&lt;/a&gt;),
but migrating is not directly justifiable (it would involve: training &lt;span class="caps"&gt;IT&lt;/span&gt;
staff to be able to maintain the repo, rewriting automation code which
relies on &lt;span class="caps"&gt;CVS&lt;/span&gt; and training programmers – even though some of these could
be postponed given that git contains a &lt;span class="caps"&gt;CVS&lt;/span&gt; bridge). Anyway, the problem
which I faced was the following: &lt;code&gt;cvs annotate&lt;/code&gt; only displays the first
8 characters of the username, which can be ambiguous if multiple people
have similar usernames (which can easily happen if there is a convention
like name.surname). Here is my solution to the problem: fetch the log
for the file get the user associated whit each version (in the log &lt;span class="caps"&gt;CVS&lt;/span&gt;
includes the full usernames). Then fetch the annotated version of the
file and use the version to disambiguate the user. Here is some Perl&amp;nbsp;code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="nf"&gt;processAnnotations&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$fileName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cmdLine&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$pid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;%revisions&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nv"&gt;$cmdLine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;cvs -z9 log -N &amp;#39;$fileName&amp;#39;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;$pid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;$cmdLine |&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$rev&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$rev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/^revision ([0-9\.]+)$/&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$revisions&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$rev&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/^date:.*?author: (.*?);/&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nb"&gt;close&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nb"&gt;waitpid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$pid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nv"&gt;$cmdLine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;cvs -z9 annotate &amp;#39;$fileName&amp;#39;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;$pid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;$cmdLine |&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;@annFileLines&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/^(\d[0-9\.]+)(\s+)\(\S+ (.*)/s&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;exists&lt;/span&gt; &lt;span class="nv"&gt;$revisions&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nv"&gt;$_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;$1$2(&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$revisions&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;&amp;quot; $3&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nb"&gt;push&lt;/span&gt; &lt;span class="nv"&gt;@annFileLines&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$_&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;  
  &lt;span class="nb"&gt;close&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
  &lt;span class="nb"&gt;waitpid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$pid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;@annFileLines&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/p&gt;
&lt;span class="caps"&gt;PS&lt;/span&gt;. I verified in the &lt;span class="caps"&gt;CVS&lt;/span&gt; source that the output width for the author
field is&amp;nbsp;hardcoded:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;           sprintf (buf, &amp;quot;%-12s (%-8.8s &amp;quot;,
                 prvers-&amp;gt;version,
                 prvers-&amp;gt;author);
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/valerianasolaris/"&gt;Valeriana Solaris&amp;#8217;
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 07 Oct 2009 17:19:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-07:2009/10/fixing-cvs-annotate.html</guid><category>programming</category><category>perl</category><category>version control</category><category>cvs</category></item><item><title>CBT Planet - PR Newswire</title><link>https://www.grey-panther.net/2009/10/cbt-planet-pr-newswire.html</link><description>&lt;p&gt;&lt;a href="http://news.prnewswire.com/DisplayReleaseContent.aspx?ACCT=ind_focus.story&amp;amp;STORY=/www/story/09-08-2009/0005089259&amp;amp;EDATE="&gt;cbt
planet&lt;/a&gt;
recently announced their &lt;span class="caps"&gt;MCITP&lt;/span&gt; bootcamps for 2010. &lt;span class="caps"&gt;MCITP&lt;/span&gt; stands for
Microsoft Certified &lt;span class="caps"&gt;IT&lt;/span&gt; Professional, and in good Microsoft tradition, it
doesn’t stand for one certification, but rather a group of
certifications. So we have (list taken from &lt;a href="http://www.microsoft.com/learning/en/us/certification/mcitp.aspx#tab2"&gt;the Microsoft
site&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Enterprise Desktop Administrator&amp;nbsp;7&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Consumer Support&amp;nbsp;Technician&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Enterprise Support&amp;nbsp;Technician&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Enterprise&amp;nbsp;Administrator&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Server&amp;nbsp;Administrator&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Database Administrator&amp;nbsp;2008&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Database Developer&amp;nbsp;2008&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Business Intelligence Developer&amp;nbsp;2008&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Database&amp;nbsp;Administrator&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Database&amp;nbsp;Developer&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Business Intelligence&amp;nbsp;Developer&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Enterprise Project Management with Microsoft Office Project
    Server&amp;nbsp;2007&lt;/li&gt;
&lt;li&gt;&lt;span class="caps"&gt;MCITP&lt;/span&gt;: Enterprise Messaging&amp;nbsp;Administrator&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Again, as with other Microsoft exams, each certification is composed out
of two to three exams. There is absolutely no overlap between the exams
necessary for the different types of certifications, which is somewhat
surprising to me (I’ve briefly looked at the &lt;span class="caps"&gt;MS&lt;/span&gt; certs for developers and
I seem to remember that there is more overlap there – but it is possible
that this is representative for certification structure for the &lt;span class="caps"&gt;IT&lt;/span&gt; part
of &lt;span class="caps"&gt;MS&lt;/span&gt;).&lt;/p&gt;
&lt;p&gt;From what I’ve seen on their site, &lt;span class="caps"&gt;CBT&lt;/span&gt; Planet focuses mainly on
providing online, self-paced study possibilities, but it seems that they
are trying to enter into the bootcamp market. As a general rule, I don’t
see the value in bootcamps. The two exceptions would be: if you know
that it is absolutely necessary for the job you are applying for or if
your employer is paying for it (in which case it can be considered an
almost – but – not – quite – vacation). From my experience (based on
participations in a couple of certification programs – no bootcamps
though), anyone somewhat familiar with the subject can pass the final
exams. If you go to the bootcamp: good luck with the&amp;nbsp;exam!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 07 Oct 2009 16:08:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-07:2009/10/cbt-planet-pr-newswire.html</guid><category>reviewme</category><category>review</category></item><item><title>cbt planet</title><link>https://www.grey-panther.net/2009/10/cbt-planet.html</link><description>&lt;p&gt;The issue of certifications is a contentious one in the field of &lt;span class="caps"&gt;IT&lt;/span&gt;. On
one hand there are the people who try to hire without having necessarily
the expertise to judge the candidate (ie. &lt;span class="caps"&gt;HR&lt;/span&gt;). On the other hand there
are the people who complain about the low quality of “certified”&amp;nbsp;people.&lt;/p&gt;
&lt;p&gt;The best attitude I know about towards certification is the following
(unfortunately I can’t recall where I originally read it): recognize
that there are multiple type of job roles. If you are looking for
someone axed exactly on one technology (ie. managing Solaris servers), a
certification can be a useful indicator. However if you are looking for
someone whose responsibilities are not so clear-cut (ie. Java developer,
but also should know some Linux, Bash scripting and Perl if possible),
you are much better of searching for people with certain personality
traits than with these exact certifications. Again, something I’ve read
and I agree wholeheartedly with: “recruiters don’t invent candidates –
they find existing ones, if the&amp;nbsp;exists”.&lt;/p&gt;
&lt;p&gt;An other aspect of certificates is cost – both monetary and time.
Because of this, it is usually a nice reward companies can give their&amp;nbsp;developers.&lt;/p&gt;
&lt;p&gt;Having said that, let me write a little about the &lt;span class="caps"&gt;MCITP&lt;/span&gt; (Microsoft
Certified &lt;span class="caps"&gt;IT&lt;/span&gt; Professional) bootcamps announced by &lt;a href="http://www.ereleases.com/pr/cbt-planet-announces-feature-microsoft-mcitp-boot-camps-2010-25297"&gt;cbt
planet&lt;/a&gt;.
From what I’ve seen, &lt;span class="caps"&gt;CBT&lt;/span&gt; Planet focuses on providing on-line (ie. video)
training for certifications. This is an easy and time-effective way to
gather the information you need to pass the exam. The bootcamp is simply
a condensed version of&amp;nbsp;that.&lt;/p&gt;
&lt;p&gt;The structure of the Microsoft certifications is as confusing as ever:
as with many others, there is no “one” &lt;span class="caps"&gt;MCITP&lt;/span&gt;, rather there are &lt;a href="http://www.microsoft.com/learning/en/us/certification/mcitp.aspx#tab2"&gt;many
flavors&lt;/a&gt;.
So, should you get it? It is a matter of personal preference. My
personal opinion would be: if it is offered by the company, definitely.
An other definitive yes is the case you know for sure that it is a
requirement for a future job. Otherwise – not so&amp;nbsp;much.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 07 Oct 2009 15:04:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-07:2009/10/cbt-planet.html</guid><category>reviewme</category><category>review</category></item><item><title>One more thing…</title><link>https://www.grey-panther.net/2009/10/one-more-thing.html</link><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_hrvCBhtWhJ4/SsxvETdNtFI/AAAAAAAAB8s/cWsnV2b0PLk/s1600-h/214291449_b0d7e78356_b%5B2%5D.jpg"&gt;&lt;img alt="214291449_b0d7e78356_b" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/SsxvE1I-64I/AAAAAAAAB8w/dkg9DBXIdYU/214291449_b0d7e78356_b_thumb.jpg?imgmax=800" title="214291449_b0d7e78356_b" /&gt;&lt;/a&gt;
So, if I started ranting on Microsoft, here is one more thing: you
should &lt;em&gt;never ever&lt;/em&gt; use Microsoft servers if you want to scale. The
reasons is simple: currently the best scaling method is horizontal (ie.
buy loads of cheap hardware and distribute the load between them). Using
Microsoft server software would mean that for each server you would need
to buy at least one license (or more, like in the case of &lt;span class="caps"&gt;MS&lt;/span&gt; Windows +
&lt;span class="caps"&gt;MS&lt;/span&gt; &lt;span class="caps"&gt;SQL&lt;/span&gt; Server). This can easily cost you almost as much (if not more)
than the hardware&amp;nbsp;itself.&lt;/p&gt;
&lt;p&gt;As far as I’m aware, only Microsoft and hosting providers (which recoup
the cost from their clients) are running &lt;span class="caps"&gt;MS&lt;/span&gt; servers in large numbers.
This is sustained by a quick check of the top \~5000 sites (as defined
by &lt;a href="http://www.alexa.com/topsites"&gt;Alexa&lt;/a&gt;) – less than 16% of them run
&lt;span class="caps"&gt;IIS&lt;/span&gt;. To paraphrase&amp;nbsp;Eminem:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Be smart, don’t be a retard! You take advice from someone who run
their front-end webserver tier on &lt;span class="caps"&gt;VM&lt;/span&gt;’s, even though &lt;em&gt;it makes no sense
from a technology standpoint to do so&lt;/em&gt;?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. Yeah, there is the BizPark program from &lt;span class="caps"&gt;MS&lt;/span&gt; for startups – but we yet
have to see the first large-scale success emerge from it (&lt;span class="caps"&gt;BTW&lt;/span&gt;, one of my
favorite site – StackOverflow – runs Windows Server trough the BizPark
program – and even they now use a Linux &lt;span class="caps"&gt;VM&lt;/span&gt;!).&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/markjsebastian/"&gt;mark sebastian&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 07 Oct 2009 13:36:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-07:2009/10/one-more-thing.html</guid><category>rant</category><category>server</category><category>microsoft</category><category>web</category></item><item><title>My opinion about Microsoft, software piracy and everything</title><link>https://www.grey-panther.net/2009/10/my-opinion-about-microsoft-software.html</link><description>&lt;p&gt;This post is a response to &lt;a href="http://studentclub.ro/tudorg/archive/2009/09/30/despre-pirateria-software.aspx"&gt;a blogpost on tudor g’s blog about software
piracy issues in
Romania&lt;/a&gt;,
and as such it might not be of interest to you, dear international
reader. If this is the case, feel free to skip this&amp;nbsp;post.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xkcd.com/386/"&gt;&lt;img alt="" src="http://imgs.xkcd.com/comics/duty_calls.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Disclaimer: arguments are very emotional things. As much as we would
like to think that they consists of logical statements and counter
statements with the “best” arguments winning, in real life the
acceptance or rejection of a given argument very much depends on the
frame of reference of individual persons. With this in mind, I believe
that &lt;a href="http://studentclub.ro/tudorg/"&gt;Tudor&lt;/a&gt; and me have very different
frames of reference (him being a Microsoft employee and me being an
open-source enthusiast) and as such I’m quite sure that nothing written
by me here will change his mind (and conversely, nothing written by him
will change my mind). Still, I think that this is a useful exercise to
get things off my chest and to document arguments for more open-minded
people&amp;nbsp;:-)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;His first argument is that installing and using pirated software is
    harder that legitimate software because mechanisms like &lt;span class="caps"&gt;WGA&lt;/span&gt; - I
    don’t think that this argument holds water, since most people (the
    “average user”) can’t install an &lt;span class="caps"&gt;OS&lt;/span&gt;, regardless if it is pirated or
    legitimate. Just ask yourself the following question: how many of
    the non-technical people you know installed themselves the &lt;span class="caps"&gt;OS&lt;/span&gt; on
    their computer? I would bet you that the number is very, very close
    to&amp;nbsp;0.&lt;/p&gt;
&lt;p&gt;If the &lt;span class="caps"&gt;OS&lt;/span&gt; is installed by the “neighbor kid from the 2nd floor”,
then this argument doesn’t hold. Even more, many geeks pride
themselves with being able to perform complicated tasks, like
disabling the &lt;span class="caps"&gt;WGA&lt;/span&gt;, and as such, for them the existence of protection
element is a positive thing (a challenge to be&amp;nbsp;solved).&lt;/p&gt;
&lt;p&gt;Finally, the inverse of the argument (that legitimate &lt;span class="caps"&gt;MS&lt;/span&gt; software is
easier to use than pirated one) isn’t true either in my experience.
I had numerous occasions where (completely legitimate, bought with
the computer &lt;span class="caps"&gt;OEM&lt;/span&gt;) Windows failed to validate, a (again, completely
legit, boxed version) Win 2k3 &lt;span class="caps"&gt;SBS&lt;/span&gt; suddenly refused to work because
it needed to be a &lt;span class="caps"&gt;DC&lt;/span&gt; (and it told me after 3 months!), the Windows 7
beta deactivated itself periodically, &lt;span class="caps"&gt;VM&lt;/span&gt;’s deactivated themselves
after moving from one machine to the other for purely technical
reasons (even though the one-machine / one-owner / one-copy rule was
always observed),&amp;nbsp;etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The second argument is that there is no peer-pressure to pirate in
    Romania (that not “everybody is doing it”) – I would suggest him to
    visit &lt;em&gt;any&lt;/em&gt; campus in Romania and check out the (pirated) software
    which can be found on the network. And not only that, but music,
    movies, books, etc. Or to go to repair shops and ask for &lt;span class="caps"&gt;MS&lt;/span&gt; Windows
    / &lt;span class="caps"&gt;MS&lt;/span&gt; Office being preinstalled on the computer – the answer will
    almost always be positive. Even more, the next generation feels
    entitled to these freebies (and it isn’t something specific to
    Romania either, thanks to the abundance of the &lt;a href="http://en.wikipedia.org/wiki/Freemium"&gt;freemium business
    model&lt;/a&gt; on the&amp;nbsp;Internet).&lt;/p&gt;
&lt;p&gt;In the long term (&lt;span class="caps"&gt;IMHO&lt;/span&gt;) less and less people will be willing to pay
for things which they perceive as basic needs. The only options for
old-style software companies (like Microsoft) are to include more
and more technical measures to try to prevent this (even though the
current measures already make &lt;span class="caps"&gt;MS&lt;/span&gt; Windows annoying to use) or to
raise the level of punishment associated with piracy (which
shouldn’t be possible in democratic countries because of public&amp;nbsp;backlash)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Piracy doesn’t help the software companies by making their product
    more well known – if this would to be true, why do you think that
    there are associations in people’s mind like Microsoft – Windows,
    Office – Microsoft, image editing – Photoshop, &lt;span class="caps"&gt;CD&lt;/span&gt; burning – Nero and
    so on? Most people use whatever is already installed on the computer
    to accomplish their jobs. This is why OEMs get big bucks from
    software companies to preinstall their&amp;nbsp;product.&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t buy the “starving programmer” argument either. The cost of
copying software is minuscule. Which means that over 80% (this is of
course a number pulled out of my rear, but I’m quite sure that the
real number is somewhere in the ballpark) of each sale is pure
profit. Which means that (a) a &lt;a href="http://en.wikipedia.org/wiki/Freemium"&gt;freemium type
model&lt;/a&gt; can easily be
sustained and (b) that even a few sales mean that the company makes
a nice profit, and excessive focus on this part (ie. “we are loosing
X billion of &lt;span class="caps"&gt;USD&lt;/span&gt; to piracy” – which &lt;span class="caps"&gt;BTW&lt;/span&gt; is not true for at least two
reasons – first because the method to determine the number of
pirated copies is questionable and second, because it assumes that
every person who “pirates” would buy the product if s/he didn’t have
access to the pirated version) is pure greed – which, let us
remember, is one of the seven deadly&amp;nbsp;sins.&lt;/p&gt;
&lt;p&gt;Also, as a programmer, you don’t have to write commodity software.
Let me tell you, there is very good money to be made from writing
custom software for a small number of&amp;nbsp;clients.&lt;/p&gt;
&lt;p&gt;A final point I would like to make with regards the relation of
piracy to innovation: remember that all three “big” powers (&lt;span class="caps"&gt;USA&lt;/span&gt;,
Russia and China) started out (and some are still) by rejecting
patents to bootstrap their industry. Something worth thinking&amp;nbsp;about&amp;#8230;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;That people buy because somehow they are convinced that it is “the
    right thing”, not because of fear – I’m not seeing it. At least at
    the individual level I don’t know &lt;em&gt;anybody&lt;/em&gt; who bought a single
    Microsoft product (including myself, I’m living off my &lt;span class="caps"&gt;MSDN&lt;/span&gt; &lt;span class="caps"&gt;AA&lt;/span&gt;
    licenses). At a company level the motivation (arguably) is mostly
    fear. They buy licenses for the same reason they pay taxes. Also (as
    I’ve already said at point 2), the willingness of people will only
    go down, not&amp;nbsp;up.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Software is not overpriced, especially when considering the income
    level of Romanians – this is &lt;span class="caps"&gt;IMHO&lt;/span&gt; the best example for the “pink
    sunglasses” Tudor is wearing and how his frame of reference distorts
    his perception. The average (net) income per month in Romania for
    2008 was somewhere around 400 &lt;span class="caps"&gt;USD&lt;/span&gt; (this would mean 4800 &lt;span class="caps"&gt;USD&lt;/span&gt; per year
    for those of you who use this frame of reference). Given this
    figure, is it reasonable to expect that people give more than half
    of their monthly income (or even all it, if we consider that a
    computer would need &lt;span class="caps"&gt;MS&lt;/span&gt; Windows + &lt;span class="caps"&gt;MS&lt;/span&gt; Office + &lt;span class="caps"&gt;AV&lt;/span&gt;) for software? May I
    venture a guess that (a) Tudor has at least five time the average
    net income and (b) he has free access to all of Microsoft’s
    software, and as such, he might not see the real situation? My
    challenge to Tudor would be: how much of the software he has right
    now on his personal machine did he pay&amp;nbsp;for?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;My conclusion is that software piracy is here to stay. Especially in
more poor countries like ours. To give Microsoft what is due: they do
really excellent software (not that they don’t do mistakes, like Vista –
which is abysmal – I’m speaking from a first hand experience, having
played with it on two “Vista certified” laptops and in VMs). Even so,
their expectation is unrealistic at a minimum and even unethical. Also,
as a developer, if you develop using a technology (&lt;span class="caps"&gt;OS&lt;/span&gt;, libraries,
components, etc) for which you don’t have the source code, you will hit
“undebuggable” issues sooner or&amp;nbsp;later.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. Vista is the new &lt;span class="caps"&gt;ME&lt;/span&gt; – just&amp;nbsp;worse:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xkcd.com/323/"&gt;&lt;img alt="" src="http://imgs.xkcd.com/comics/ballmer_peak.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: fixed some typos and errors in expression – thank you to my
dear&amp;nbsp;readers.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 05 Oct 2009 16:08:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-05:2009/10/my-opinion-about-microsoft-software.html</guid><category>open source</category><category>rant</category><category>software</category><category>microsoft</category><category>piracy</category><category>license</category></item><item><title>Space Invaders Rulz!</title><link>https://www.grey-panther.net/2009/10/space-invaders-rulz.html</link><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_hrvCBhtWhJ4/SsnSzJkRM8I/AAAAAAAAB8k/Wk1RS0pF650/s1600-h/space_invaders_tshirt%5B5%5D.jpg"&gt;&lt;img alt="space_invaders_tshirt" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/SsnSzsUPOnI/AAAAAAAAB8o/-QyA3oaK2aM/space_invaders_tshirt_thumb%5B3%5D.jpg?imgmax=800" title="space_invaders_tshirt" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Found this in the mall. While the quality is somewhat poor and I’m not
quite sure that the proper license fees were paid for the images
(“raiders invasion” ???), it is still&amp;nbsp;fun.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 05 Oct 2009 14:04:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-05:2009/10/space-invaders-rulz.html</guid><category>fun</category><category>photo</category></item><item><title>Two new challenges</title><link>https://www.grey-panther.net/2009/10/two-new-challenges.html</link><description>&lt;p&gt;Well, new for me at&amp;nbsp;least&amp;#8230;&lt;/p&gt;
&lt;p&gt;The first one is &lt;a href="http://0x41414141.com/"&gt;0x41414141.com&lt;/a&gt;. Just go to
the site and you can start directly. As far as I know, this is not&amp;nbsp;time-bound.&lt;/p&gt;
&lt;p&gt;The second one is &lt;a href="http://www.spargecoduasta.com/"&gt;spargecoduasta.com&lt;/a&gt;
(“break this code”). It is put up by BitDefender and I don’t know if it
has a time limit. The levels I’ve seen seem to focus on C/C++. It is
available in both Romanian and&amp;nbsp;English.&lt;/p&gt;
&lt;p&gt;Finally, a little off-topic, but still a challenge: &lt;a href="http://pewresearch.org/sciencequiz/"&gt;The Science
Knowledge Quiz&lt;/a&gt; – with the tagline
“Are you more science-savvy than the average American?”. Via &lt;a href="http://padraic2112.wordpress.com/2009/09/22/only-10/"&gt;Pat’s
Daily Grind&lt;/a&gt; (I’ve
got 11 out of the&amp;nbsp;12).&lt;/p&gt;
&lt;p&gt;Have&amp;nbsp;fun!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 02 Oct 2009 16:47:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-02:2009/10/two-new-challenges.html</guid><category>challenge</category><category>reverse engeneering</category><category>programming</category><category>c</category></item><item><title>VoIPstreet Affiliate Program review</title><link>https://www.grey-panther.net/2009/10/voipstreet-affiliate-program-review.html</link><description>&lt;p&gt;Branded affiliate programs are a great way to offer services to your
clients which are not your core competency (for example you are
web-design company but you would also like to offer hosting to your
clients so that they have a one-stop-solution experience). This is what
&lt;a href="http://www.voipstreet.com/affiliateprogram.html"&gt;VoIPstreet Affiliate
Program&lt;/a&gt; does for VoIP:
you can resell a service to your customers which is fully branded with
your logo. The service provides &lt;a href="http://www.voipstreet.com/virtualPBX.html"&gt;unlimited calls in the
&lt;span class="caps"&gt;USA&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://www.voipstreet.com/virtualPBX_features.html"&gt;all the features
you would expect from a
&lt;span class="caps"&gt;PBX&lt;/span&gt;&lt;/a&gt; (like
caller-id, transfers, on-hold music, etc). Other information you might
be interested in are the
&lt;a href="http://www.voipstreet.com/virtualPBX_pricing.html"&gt;prices&lt;/a&gt; and the
&lt;a href="http://www.voipstreet.com/virtualPBX_phones.html"&gt;available phone
models&lt;/a&gt;. One thing
which I &lt;em&gt;couldn’t&lt;/em&gt; find are the financial details of the affiliate&amp;nbsp;relation.&lt;/p&gt;
&lt;p&gt;Are there any good? From searching around the interwebs I found some
&lt;a href="http://www.trixbox.org/forums/trixbox-forums/sip-and-iax-trunks-and-providers/voipstreet-problems"&gt;old (2007)
complaints&lt;/a&gt;,
but it seems that it was a problem with their data-center and I couldn’t
find newer complaints (which is a good sign). They also take part in
industry events like &lt;a href="http://www.tmcnet.com/voip/conference/"&gt;&lt;span class="caps"&gt;IT&lt;/span&gt; Expo&lt;/a&gt;,
whish means that they are definitely not a fly-by-night operation (one
has to be careful, since the VoIP space has a lot of fraudsters who use
cracked PBXs to offer cheap&amp;nbsp;services).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: this is a paid review from
&lt;a href="http://www.reviewme.com/"&gt;ReviewMe&lt;/a&gt;. Under the terms of the
understanding I was not obligated to skew my viewpoint in any way (ie.
only post positive&amp;nbsp;facts).&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 02 Oct 2009 16:35:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-02:2009/10/voipstreet-affiliate-program-review.html</guid><category>reviewme</category><category>review</category></item><item><title>SMOG button removed!</title><link>https://www.grey-panther.net/2009/10/smog-button-removed.html</link><description>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_hrvCBhtWhJ4/SsS8cS8O7UI/AAAAAAAAB8Y/b3-6JVS83PY/s1600-h/3643979463_1d89c1a7bd_b%5B3%5D.jpg"&gt;&lt;img alt="3643979463_1d89c1a7bd_b" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/SsS8cw_D0OI/AAAAAAAAB8c/tU3e-Zco8Zg/3643979463_1d89c1a7bd_b_thumb%5B1%5D.jpg?imgmax=800" title="3643979463_1d89c1a7bd_b" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Almost a year ago &lt;a href="http://hype-free.blogspot.com/2008/12/everything-old-is-new-again-smog.html"&gt;I added a &lt;span class="caps"&gt;SMOG&lt;/span&gt; button to each
blogpost&lt;/a&gt;,
which (in a more or less serious manner) evaluated the “reading level”
needed to understand the blogpost. However, today the site used for this
service came up with a warning from Google saying that it might be
malicious. I’ve looked into it, and indeed, it contains an &lt;span class="caps"&gt;IFRAME&lt;/span&gt;
pointing towards a malicious&amp;nbsp;site.&lt;/p&gt;
&lt;p&gt;So I’ve taken down the script until this issue is resolved to protect
people. Hopefully this issue will quickly be&amp;nbsp;resolved.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/rinux/"&gt;riNux&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 01 Oct 2009 17:28:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-10-01:2009/10/smog-button-removed.html</guid><category>av</category><category>malware</category><category>web</category></item><item><title>ERR – Exponentially Expanding Rants</title><link>https://www.grey-panther.net/2009/09/err-exponentially-expanding-rants.html</link><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_hrvCBhtWhJ4/SsIe__z5L-I/AAAAAAAAB70/Th87MzmWlG0/s1600-h/3062858480_ccb35c0c84_o%5B2%5D.jpg"&gt;&lt;img alt="3062858480_ccb35c0c84_o" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/SsIfAZ6Qj3I/AAAAAAAAB74/YB2qCMbcBXM/3062858480_ccb35c0c84_o_thumb.jpg?imgmax=800" title="3062858480_ccb35c0c84_o" /&gt;&lt;/a&gt;
I’m expanding! Not only am I ranting on my own soap box (blog), now you
can read my rants on other blogs as well: fudsec just published my
&lt;a href="http://fudsec.com/knowing-walls-from-speed-bumps"&gt;Knowing Walls from Speed
Bumps&lt;/a&gt; rant. Thank
you! If you are fed up with &lt;span class="caps"&gt;FUD&lt;/span&gt; in the security industry, check out the
site and went away! Who knows, maybe we can even change a thing or two
(yeah,&amp;nbsp;righ!).&lt;/p&gt;
&lt;p&gt;Thanks again to the &lt;a href="http://fudsec.com/"&gt;fudsec&lt;/a&gt; guys for publishing my&amp;nbsp;“article”.&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/maleny_steve/"&gt;Serendigity&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 29 Sep 2009 17:51:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-09-29:2009/09/err-exponentially-expanding-rants.html</guid><category>rant</category></item><item><title>The Myths of Innovation</title><link>https://www.grey-panther.net/2009/09/myths-of-innovation.html</link><description>&lt;p&gt;Some time ago I &lt;a href="http://hype-free.blogspot.com/2009/08/myth-of-cognitive-quantum-jumps.html"&gt;ranted about cognitive quantum
leaps&lt;/a&gt;.
Below is a presentation given at Google by Scott Berkun about the same
topic. While the talk itself is two years old, the examples are still
very relevant, and he presents it very eloquently.&amp;nbsp;Enjoy!&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
http://www.youtube-nocookie.com/v/m6gaj6huCp0&amp;hl=en&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00

&lt;/center&gt;
&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 29 Sep 2009 17:36:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-09-29:2009/09/myths-of-innovation.html</guid><category>rant</category><category>video</category></item><item><title>Carcassonne – a great boardgame</title><link>https://www.grey-panther.net/2009/09/carcassonne-great-boardgame.html</link><description>&lt;p&gt;My personal favorites are (board)games which create complexity from
simple rules, for example chess, go or FPSs in the virtual world. A
boardgame which comes close to this ideal is
&lt;a href="http://en.wikipedia.org/wiki/Carcassonne_%28board_game%29"&gt;Carcassonne&lt;/a&gt;.
The rules can be explained in less than two minutes and it is great fun!
See below the recording of a nine hour&amp;nbsp;game:&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
http://www.youtube-nocookie.com/v/UsvNgtBWZeI&amp;hl=en&amp;fs=1&amp;color1=0x234900&amp;color2=0x4e9e00

&lt;/center&gt;
Don’t be afraid though, that one was played using tiles from 3 sets. A
normal game lasts around 30 minutes. You can [buy the game on
Amazon](http://www.amazon.com/gp/product/&lt;span class="caps"&gt;B00005UNAX&lt;/span&gt;?ie=&lt;span class="caps"&gt;UTF8&lt;/span&gt;&amp;tag=hypefree-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=&lt;span class="caps"&gt;B00005UNAX&lt;/span&gt;)
(disclosure: the link contains my affiliate &lt;span class="caps"&gt;ID&lt;/span&gt;) or, if you are in
Romania, you should check out
[cutia.ro](http://cutia.ro/Hans-im-Gluck/Regulamente/Carcassonne.html).

Have fun!

&lt;span class="caps"&gt;PS&lt;/span&gt;. There seemed to have been [a site where you could play it
online](http://games.asobrain.com/), but it seems to be offline. There
is [some
speculation](http://answers.yahoo.com/question/index?qid=20090920121644AAQYJmM)
that this is due to copyright violation on the part of the site and/or
due to the site being&amp;nbsp;hacked.</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 29 Sep 2009 16:19:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-09-29:2009/09/carcassonne-great-boardgame.html</guid><category>boardgame</category><category>game</category><category>review</category></item><item><title>Network Forensics Contest submission</title><link>https://www.grey-panther.net/2009/09/network-forensics-contest-submission.html</link><description>&lt;p&gt;Some time ago &lt;a href="http://hype-free.blogspot.com/2009/08/couple-of-challenges.html"&gt;I mentioned the Network Forensics
Puzzle&lt;/a&gt;.
The contest is now over and since I didn’t win, I’ll publish my
submission below – it was after all correct, but not quite what the
judges were looking for (congratulation &lt;a href="http://forensicscontest.com/"&gt;to the
winner&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;After validating that the &lt;span class="caps"&gt;MD5&lt;/span&gt; sum for the downloaded file matches the
one specified on the website, I first opened it up in NetworkMiner
(&lt;a href="http://networkminer.sourceforge.net/"&gt;http://networkminer.sourceforge.net/&lt;/a&gt;). I find the overview it gives
much easier to understand than the statistics provided by Wireshark.
Using it I identified the data stream between Ann&amp;#8217;s computer and the
unidentified&amp;nbsp;laptop.&lt;/p&gt;
&lt;p&gt;1. What is the name of Ann’s &lt;span class="caps"&gt;IM&lt;/span&gt; buddy?&lt;br /&gt;
Sec558user1 - this is tricky because the &lt;span class="caps"&gt;IM&lt;/span&gt; (which seems to be &lt;span class="caps"&gt;AOL&lt;/span&gt; - but
many other &lt;span class="caps"&gt;IM&lt;/span&gt;&amp;#8217;s behave in a similar fashion) routes chat traffic trough
central servers (64.12.24.50 in this case - which belongs to &lt;span class="caps"&gt;AOL&lt;/span&gt;, making
it even more probable that &lt;span class="caps"&gt;AIM&lt;/span&gt; was used) to make &lt;span class="caps"&gt;NAT&lt;/span&gt; traversal a
non-issue, while file transfers are done trough direct connection to
conserve&amp;nbsp;bandwidth.&lt;/p&gt;
&lt;p&gt;2. What was the first comment in the captured &lt;span class="caps"&gt;IM&lt;/span&gt; conversation?&lt;br /&gt;
Here&amp;#8217;s the secret recipe&amp;#8230; I just downloaded it from the file server.
Just copy to a thumb drive and you&amp;#8217;re good to go &gt;:-)&lt;br /&gt;
(actually, &gt; is escaped as &lt;span class="caps"&gt;HTML&lt;/span&gt; - ie &gt;)&lt;/p&gt;
&lt;p&gt;3. What is the name of the file Ann transferred?&lt;br /&gt;&amp;nbsp;recipe.docx&lt;/p&gt;
&lt;p&gt;4. What is the magic number of the file you want to extract (first four
bytes)?&lt;br /&gt;
50 4B 03 04 - Which corresponds to &lt;span class="caps"&gt;PK&lt;/span&gt;&amp;#8230;, signaling that we are
potentially dealing with a &lt;span class="caps"&gt;ZIP&lt;/span&gt; archive here. This is further reinforced
by the filename (.docx, which is the new &amp;#8220;open&amp;#8221; document format from
Microsoft - basically, it consists out of a zipped &lt;span class="caps"&gt;XML&lt;/span&gt; - similarly to
the OpenOffice.org&amp;nbsp;format)&lt;/p&gt;
&lt;p&gt;5. What was the MD5sum of the file?&lt;br /&gt;&amp;nbsp;8350582774e1d4dbe1d61d64c89e0ea1&lt;/p&gt;
&lt;p&gt;This is again tricky, because &lt;span class="caps"&gt;ZIP&lt;/span&gt; (like many other formats) admit
arbitrary data after the logical end of the file. So, using a hex
editor, we first carve the the part starting at &lt;span class="caps"&gt;PK&lt;/span&gt; in the
192.168.1.158 -&gt; 192.168.1.159 (be careful not to include the traffic
in the reverse direction). Then we need to convince ourselves that the
end of the file has been correctly identified at the byte level. To do
this we could study the &lt;span class="caps"&gt;ZIP&lt;/span&gt; specification
(&lt;a href="http://www.pkware.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=64&amp;amp;Itemid=107"&gt;http://www.pkware.com/index.php?option=com_content&amp;task;=view&amp;id;=64&amp;Itemid;=107&lt;/a&gt;)
or use a more empirical level: using a hex editor (HxD for example -
&lt;a href="http://mh-nexus.de/en/hxd/"&gt;http://mh-nexus.de/en/hxd/&lt;/a&gt;) eliminate the last byte of the file and
&amp;#8220;test&amp;#8221; the integrity of the file (using the Test option from 7-zip for
example - &lt;a href="http://www.7-zip.org/"&gt;http://www.7-zip.org/&lt;/a&gt; - but one could use almost any
de-archiving program, since almost all of them offer a &amp;#8220;Test&amp;#8221; option).
The test will fail. Now add back the last byte (which is 0x00) and
perform the test again. It will succeeded. This means with a big
probability that we correctly identified the actual (logical) end of the&amp;nbsp;file.&lt;/p&gt;
&lt;p&gt;6. What is the secret recipe?&lt;br /&gt;
The most recent version of OpenOffice.org (3.1.x) can open the docx
format, so the following can be retrieved on any platform, regardless of
whether &lt;span class="caps"&gt;MS&lt;/span&gt; Office 2007 is installed (an alternative solution would be to
use the free &lt;span class="caps"&gt;MS&lt;/span&gt; Word 2007 viewer or the import filters available for
older versions of &lt;span class="caps"&gt;MS&lt;/span&gt;&amp;nbsp;Office).&lt;/p&gt;
&lt;p&gt;The contents (sans the formatting):&lt;br /&gt;
Recipe for Disaster:&lt;br /&gt;
1 serving&lt;br /&gt;
Ingredients:&lt;br /&gt;
4 cups sugar&lt;br /&gt;
2 cups water&lt;br /&gt;
In a medium saucepan, bring the water to a boil. Add sugar. Stir gently
over low heat until sugar is fully dissolved. Remove  the  saucepan from
heat.  Allow to cool completely. Pour into gas tank. Repeat as&amp;nbsp;necessary.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 29 Sep 2009 13:26:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-09-29:2009/09/network-forensics-contest-submission.html</guid><category>challenge</category><category>networking</category><category>solution</category></item><item><title>Back with a vengeance</title><link>https://www.grey-panther.net/2009/09/back-with-vengeance.html</link><description>&lt;p&gt;I’ve had limited connectivity / time in the last couple of weeks, but
I’m back&amp;nbsp;baby!&lt;/p&gt;
&lt;p&gt;The lesson of the day: you shouldn’t let your &lt;span class="caps"&gt;AV&lt;/span&gt; vendor provide general
security. The lesson comes to us via &lt;a href="http://www.sophos.com/blogs/gc/g/2009/09/24/guest-blog-sophos-free-encryption/"&gt;Graham Cluley’s Sophos
blog&lt;/a&gt;,
which informs us that &lt;a href="http://www.sophos.com/products/free-tools/sophos-free-encryption.html"&gt;Sophos released a free encryption
tool&lt;/a&gt;.
So, what’s wrong with&amp;nbsp;it?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It uses symmetric crypto! Let me repeat that for you: it uses
    symmetric cryptography and recommends that you communicate the
    encryption password to the counterparty via an other communication
    channel. So much for ease of use and the asynchronous nature of&amp;nbsp;email!&lt;/li&gt;
&lt;li&gt;The feature sheet starts out by declaring that &lt;span class="caps"&gt;PKI&lt;/span&gt; has failed us,
    and then it touts a proprietary centralized solution for managing&amp;nbsp;passwords.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In conclusion: this is a software which shouldn’t have been made. It is
simplistic, cumbersome to use and provides no added benefit over using
something like &lt;a href="http://www.7-zip.org/"&gt;7-zip&lt;/a&gt; with encryption (which
also uses &lt;span class="caps"&gt;AES&lt;/span&gt;, also does compression – most probably better compression
– and it to can create &lt;span class="caps"&gt;SFX&lt;/span&gt; password protected&amp;nbsp;archives).&lt;/p&gt;
&lt;p&gt;Go and install Thunderbird with
&lt;a href="http://enigmail.mozdev.org/home/index.php"&gt;Enigmail&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For added fun: the brochure says “Protects against “brute force” attacks
by increasing response times each time the user enters the wrong
password”, and they then proceed to give you a &lt;span class="caps"&gt;CLI&lt;/span&gt; and &lt;span class="caps"&gt;COM&lt;/span&gt; interface to
the program which can be used directly to bruteforce the archives and
without these timeouts.&amp;nbsp;Nice!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Tue, 29 Sep 2009 12:22:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-09-29:2009/09/back-with-vengeance.html</guid><category>security</category><category>encryption</category></item><item><title>Ethical Hacker challenge “Prison Break” solution</title><link>https://www.grey-panther.net/2009/09/ethical-hacker-challenge-prison-break.html</link><description>&lt;p&gt;As I usually do, I’ll publish my entry for the &lt;a href="http://hype-free.blogspot.com/2009/07/new-ethical-hacker-challenge.html"&gt;Ethical Hacker
challenge&lt;/a&gt;
after the deadline&amp;nbsp;passed:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Challenge Question 1&lt;/em&gt;: What is the most probable reason Michael could
not get network connectivity from the desk Ethernet jack?  What actions
should the team take to determine exactly what is going on, collect full
traffic captures, and gain full access to the&amp;nbsp;network?&lt;/p&gt;
&lt;p&gt;Most probably the switch to which the given port is connected has &lt;span class="caps"&gt;MAC&lt;/span&gt;
address filtering turned on. To circumvent this, they must clone the &lt;span class="caps"&gt;MAC&lt;/span&gt;
address of the &lt;span class="caps"&gt;VOIP&lt;/span&gt;&amp;nbsp;phone.&lt;/p&gt;
&lt;p&gt;The easiest way to do this is to start capturing the traffic on the
network interface of the laptop and then plug the &lt;span class="caps"&gt;VOIP&lt;/span&gt; phone into it.
The initial packets (most probably &lt;span class="caps"&gt;DHCP&lt;/span&gt; requests) will reveal the phone
&lt;span class="caps"&gt;MAC&lt;/span&gt; address. Sidenote: most ethernet ports these days are auto-sensing
(ie. no crossover cable is required). But just to make sure, one should
use a crossover cable or an intermediate switch (not hub!) is one is
available. After the &lt;span class="caps"&gt;MAC&lt;/span&gt; address has been determined, the host &lt;span class="caps"&gt;OS&lt;/span&gt; should
be instructed to use the given &lt;span class="caps"&gt;MAC&lt;/span&gt; address for the laptop network card.
You can find instructions for Linux here:
&lt;a href="http://linuxhelp.blogspot.com/2005/09/how-to-change-mac-address-of-your.html"&gt;http://linuxhelp.blogspot.com/2005/09/how-to-change-mac-address-of-your.html&lt;/a&gt;
and for Windows here:
&lt;a href="http://www.irongeek.com/i.php?page=security/changemac"&gt;http://www.irongeek.com/i.php?page=security/changemac&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sidenote: given that the packet captures show two distinct networks
(192.168.1.0/24 and 172.29.0.0/16), it is clear that the administrators
have tried to separate the computer networks from the &lt;span class="caps"&gt;VOIP&lt;/span&gt; one. However,
relying only on different (sub-)nets is extremely weak and at least &lt;span class="caps"&gt;VLAN&lt;/span&gt;
level separation should have been implemented (then again, maybe the
available switches don&amp;#8217;t have &lt;span class="caps"&gt;VLAN&lt;/span&gt; features). 172.29.0.0/16 most
probably is the &lt;span class="caps"&gt;VOIP&lt;/span&gt; network, since we see &lt;span class="caps"&gt;SIP&lt;/span&gt; packets on it and
192.168.1.0/24 the computer&amp;nbsp;network.&lt;/p&gt;
&lt;p&gt;If only &lt;span class="caps"&gt;MAC&lt;/span&gt; filtering is implemented, after changing the &lt;span class="caps"&gt;MAC&lt;/span&gt; address, it
is possible to join any of the two available networks, meaning that they
can interact with the &amp;#8220;computer&amp;#8221; network, even if the given port was
originally assigned to a &lt;span class="caps"&gt;VOIP&lt;/span&gt;&amp;nbsp;phone.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Challenge Question 2&lt;/em&gt;: What tool should Lincoln download, if any, to be
able to capture traffic on the desktop&amp;nbsp;computer?&lt;/p&gt;
&lt;p&gt;Sectools.org contains a nice list of available packet sniffers (
&lt;a href="http://sectools.org/sniffers.html"&gt;http://sectools.org/sniffers.html&lt;/a&gt; ). Given the constraints, my tool of
choice would be WinDump, the Windows port of tcpdump (
&lt;a href="http://www.winpcap.org/windump/install/"&gt;http://www.winpcap.org/windump/install/&lt;/a&gt;&amp;nbsp;)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Challenge Question 3&lt;/em&gt;: Starting with the reverse connection from the
desktop computer, describe a step-by-step approach that could be applied
prior to 09:00 the next day in order to capture the network traffic on
the remote network and get a capture file for further in-depth analysis.
Make sure your approach follows Michael&amp;#8217;s advice to avoid&amp;nbsp;detection.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;download WinDump (
    &lt;a href="http://www.winpcap.org/windump/install/bin/windump_3_9_5/WinDump.exe"&gt;http://www.winpcap.org/windump/install/bin/windump_3_9_5/WinDump.exe&lt;/a&gt;
    ) and WinPcap to the&amp;nbsp;laptop&lt;/li&gt;
&lt;li&gt;use the instructions provided at the following link to construct a
    portable version of WinPcap:
    &lt;a href="http://paperlined.org/apps/wireshark/winpcap_silent_install.html"&gt;http://paperlined.org/apps/wireshark/winpcap_silent_install.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;you can package up all the files (WinDump and the WinPcap DLLs +
    driver) into a single file using the &lt;span class="caps"&gt;SFX&lt;/span&gt; functionality from 7zip. To
    make sure that you don&amp;#8217;t get under the 0.5 meg limit, use Zip with
    the Store&amp;nbsp;algorithm&lt;/li&gt;
&lt;li&gt;upload the resulting file to the general&amp;#8217;s desktop (this part of the
    challenge is a little forced &lt;span class="caps"&gt;IMHO&lt;/span&gt;, since the &lt;span class="caps"&gt;IDS&lt;/span&gt; should have
    detected the reverse connection if it is sensible to long-lived, low
    traffic&amp;nbsp;connections&amp;#8230;)&lt;/li&gt;
&lt;li&gt;launch the &lt;span class="caps"&gt;SFX&lt;/span&gt;, wait until all the files are extracted and copy
    npf.sys into&amp;nbsp;c:\Windows\System32\drivers&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;before 9:00 &lt;span class="caps"&gt;AM&lt;/span&gt; (at 8:55 for example) launch WinDump (this will
    capture at most 5 &lt;span class="caps"&gt;MB&lt;/span&gt; of&amp;nbsp;data):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;WinDump -i 1 -w capture.pcap -C 5
&lt;/pre&gt;&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;after WinDump has stopped, retrieve the capture file and clean up
    (delete the driver, the &lt;span class="caps"&gt;SFX&lt;/span&gt; file,&amp;nbsp;etc)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Challenge Question 4&lt;/em&gt;: Help the team complete this aspect of their
mission by analyzing the packet capture file collected on the desktop
computer and provide detailed information about the environment. Your
response should at least include the type of network traffic collected,
details about the General’s laptop computer, details about the Scylla
Codes server plus any other server available, and provide the names and
contents of the files stored on the server the input passphrase is based&amp;nbsp;on.&lt;/p&gt;
&lt;p&gt;The collected traffic consists of 6 requests made to the Scylla server
(10.10.20.94) using &lt;span class="caps"&gt;HTTPS&lt;/span&gt;. To decode them, first convert the provided
key file into &lt;span class="caps"&gt;PEM&lt;/span&gt; format with&amp;nbsp;OpenSSL:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
    openssl rsa -in server.key -out&amp;nbsp;server_key.pem &lt;/p&gt;
&lt;p&gt;Then use the resulting &lt;span class="caps"&gt;PEM&lt;/span&gt; file as described here for example to let
Wireshark decode the traffic:
&lt;a href="http://www.novell.com/coolsolutions/appnote/19321.html"&gt;http://www.novell.com/coolsolutions/appnote/19321.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now you can use the &amp;#8220;Follow &lt;span class="caps"&gt;SSL&lt;/span&gt; stream&amp;#8221; functionality from Wireshark to
analyze each request. From the headers it seems that the general&amp;#8217;s
laptop is running Windows Vista Media Center (tablet? edition), while
the Scylla server is running&amp;nbsp;Linux/Apache:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
    User-Agent: Mozilla/4.0 (compatible; &lt;span class="caps"&gt;MSIE&lt;/span&gt; 7.0; Windows &lt;span class="caps"&gt;NT&lt;/span&gt; 6.0; &lt;span class="caps"&gt;SLCC1&lt;/span&gt;; .&lt;span class="caps"&gt;NET&lt;/span&gt; &lt;span class="caps"&gt;CLR&lt;/span&gt; 2.0.50727; Media Center &lt;span class="caps"&gt;PC&lt;/span&gt; 5.0; .&lt;span class="caps"&gt;NET&lt;/span&gt; &lt;span class="caps"&gt;CLR&lt;/span&gt; 3.0.04506) 
    Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8g &lt;span class="caps"&gt;DAV&lt;/span&gt;/2 &lt;span class="caps"&gt;PHP&lt;/span&gt;/5.2.9 &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;em&gt;Challenge Question 5&lt;/em&gt;: What are the validation code and input
passphrase used by the General to generate the Scylla validation code
for this&amp;nbsp;week?&lt;/p&gt;
&lt;p&gt;The validation code is&amp;nbsp;&amp;#8220;6189db841f01413a05a53b7135137a17&amp;#8221;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span class="caps"&gt;BONUS&lt;/span&gt; &lt;span class="caps"&gt;QUESTION&lt;/span&gt;&lt;/em&gt;: Briefly describe your recommendations about how The
Company could have detected and defended against the tactics you
described in your answer to Question&amp;nbsp;3.&lt;/p&gt;
&lt;p&gt;The attack could have been prevented by using a whitelisting product
which doesn&amp;#8217;t let unknown executables be started. Other mitigating
measures would&amp;nbsp;be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;using Group Policy to disable&amp;nbsp;autorun&lt;/li&gt;
&lt;li&gt;using Group Policy to controls what kind of &lt;span class="caps"&gt;USB&lt;/span&gt; devices can be used:
    &lt;a href="http://www.windowsecurity.com/articles/Control-USB-Devices-Group-Policy.html"&gt;http://www.windowsecurity.com/articles/Control-&lt;span class="caps"&gt;USB&lt;/span&gt;-Devices-Group-Policy.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;using a switched&amp;nbsp;network&lt;/li&gt;
&lt;li&gt;using an outbound proxy and make sure that only valid &lt;span class="caps"&gt;HTTP&lt;/span&gt;/&lt;span class="caps"&gt;HTTPS&lt;/span&gt;
    traffic can leave the&amp;nbsp;network&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One could work around many of these restrictions (for example: finding a
vulnerability in an installed software, running meterpreter in-process,
killing the whitelisting software, masking the outbound connection as a
&lt;span class="caps"&gt;HTTP&lt;/span&gt; one, using &lt;span class="caps"&gt;ARP&lt;/span&gt; spoofing to get around the switched network, etc),
but it raises the bar&amp;nbsp;considerably.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Wed, 02 Sep 2009 15:44:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-09-02:2009/09/ethical-hacker-challenge-prison-break.html</guid><category>challenge</category><category>solution</category></item><item><title>Geek pr0n – time lapse video of building racks</title><link>https://www.grey-panther.net/2009/08/geek-pr0n-time-lapse-video-of-building.html</link><description>&lt;p&gt;
&lt;center&gt;
[youtube=http://www.youtube.com/watch?v=aOnNpBkRam0]

&lt;/center&gt;
Via&amp;nbsp;[run-virtual.com](http://www.run-virtual.com/?p=346).</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 31 Aug 2009 18:13:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-08-31:2009/08/geek-pr0n-time-lapse-video-of-building.html</guid><category>hardware</category><category>fun</category><category>video</category><category>virtualization</category></item><item><title>T2‘09 Challenge</title><link>https://www.grey-panther.net/2009/08/t2-challenge.html</link><description>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_hrvCBhtWhJ4/SpvlkgeIkQI/AAAAAAAABM4/Wvt5b3IY_SE/s1600-h/image%5B3%5D.png"&gt;&lt;img alt="image" src="http://lh4.ggpht.com/_hrvCBhtWhJ4/SpvllEecFmI/AAAAAAAABM8/NYgzNPhpNGc/image_thumb%5B3%5D.png?imgmax=800" title="image" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sorry for being a little late: the &lt;a href="http://www.t2.fi/challenge/"&gt;T2’09
challenge&lt;/a&gt; just started. Via &lt;a href="http://www.f-secure.com/weblog/archives/00001758.html"&gt;the F-Secure
weblog&lt;/a&gt;. Don’t be
fooled by the fact that page already contains two entries (“Mr. Speed”
and “Mr. Style”) in the top. From what I understand, these are to signal
that two winners will be selected, one for speed and one for&amp;nbsp;style.&lt;/p&gt;
&lt;p&gt;The page also contains entries from past years for you to play&amp;nbsp;with.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 31 Aug 2009 18:00:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-08-31:2009/08/t2-challenge.html</guid><category>challenge</category><category>networking</category></item><item><title>Careful with that axe^H^H^H static, Eugene!</title><link>https://www.grey-panther.net/2009/08/careful-with-that-axehhh-static-eugene.html</link><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_hrvCBhtWhJ4/Spvf3ORzTWI/AAAAAAAABMs/-VfXTWIlD_A/s1600-h/557403262_2d8d8a3576_b%5B2%5D.jpg"&gt;&lt;img alt="557403262_2d8d8a3576_b" src="http://lh6.ggpht.com/_hrvCBhtWhJ4/Spvf3tYUf6I/AAAAAAAABM0/GaKabjQsYJU/557403262_2d8d8a3576_b_thumb.jpg?imgmax=800" title="557403262_2d8d8a3576_b" /&gt;&lt;/a&gt;
An other instance from the “bugs which will bite you”&amp;nbsp;series:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;public class TestStatic {
    static class Foo {
        static Foo instance = new Foo();
        static String name = Foo.class.getName();

        public Foo() {
            System.err.println(&amp;quot;Hello, my name is &amp;quot; + name);
        }
    }

    public static void main(String[] args) {
        System.err.println(&amp;quot;Your name is what?\n&amp;quot;
            + &amp;quot;Your name is who?\n&amp;quot;);

        new Foo();
    }

}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Can you spot the bug? Hint, here is the&amp;nbsp;output:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
    Your name is what?
    Your name is&amp;nbsp;who?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="x"&gt;Hello, my name is null&lt;/span&gt;
&lt;span class="x"&gt;Hello, my name is TestStatic&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;Foo&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;/p&gt;
A final hint: here is what FindBugs reports on the third line:
&lt;a href="http://findbugs.sourceforge.net/bugDescriptions.html#SI_INSTANCE_BEFORE_FINALS_ASSIGNED"&gt;SI_INSTANCE_BEFORE_FINALS_ASSIGNED&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Yet an other reason to reduce your FindBugs count to zero before
releasing&amp;nbsp;software!&lt;/p&gt;
&lt;p&gt;Picture taken from &lt;a href="http://www.flickr.com/photos/76099968@N00/"&gt;helena.40proof&amp;#8217;s
photostream&lt;/a&gt; with&amp;nbsp;permission.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Mon, 31 Aug 2009 17:36:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-08-31:2009/08/careful-with-that-axehhh-static-eugene.html</guid><category>programming</category><category>java</category></item><item><title>Freakonomics review</title><link>https://www.grey-panther.net/2009/08/freakonomics-review.html</link><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;

[![](http://2.bp.blogspot.com/_hrvCBhtWhJ4/Spk7R7VvqjI/AAAAAAAABMk/A7kIaVald-w/s320/&lt;span class="caps"&gt;51YA2F7&lt;/span&gt;-dPL._SL160_.jpg)](http://www.amazon.com/gp/product/0060731338?ie=&lt;span class="caps"&gt;UTF8&lt;/span&gt;&amp;tag=hypefree-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0060731338)

&lt;/div&gt;

&lt;p&gt;I know, I know, I&amp;#8217;m quite late to the game
(&lt;a href="http://www.amazon.com/gp/product/0060731338?ie=UTF8&amp;amp;tag=hypefree-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0060731338"&gt;Freakonomics&lt;/a&gt;
was first published in 2005), but I still feel that this book deserves a&amp;nbsp;review.&lt;/p&gt;
&lt;p&gt;What I like about it the most, is the fact that it tries to teach
critical thinking, a thing which is lacking these days. The book
provides vivid and easy to read descriptions of investigative stories,
similar to detective/murder-mystery books, about how seemingly distant
events relate to one-another. Each chapter stands on its own and can be
read-trough in a short amount of time. Where necessary, the book
provides high-level description of the statistical terms (like
regression-analysis), without giving the impression of &amp;#8220;talking&amp;nbsp;down&amp;#8221;.&lt;/p&gt;
&lt;p&gt;My favorite quote from the book is actually not from the book authors,
but non-the-less I find it very fitting (and I&amp;#8217;m sure that the authors
agree with me, since they included it in the book&amp;nbsp;:-)):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="dquo"&gt;&amp;#8220;&lt;/span&gt;We Associate truth with convenience,&amp;#8221; he wrote, &amp;#8220;with what closely
accords with self-interest and personal well-being or promises best to
avoid awkward effort or unwelcome dislocation of life. We also find
highly acceptable what contributes the most to self-esteem.&amp;#8221; Economic
and social behaviors, Galbraith continued, &amp;#8220;are complex, and to
comprehend their character is mentally tiring. Therefore we adhere, as
though to a raft, to those ideas which represent our&amp;nbsp;understanding.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I consider this book one worth reading. The only negative was that I got
the &amp;#8220;extended&amp;#8221; version (which is &lt;em&gt;not&lt;/em&gt; the one I link to) and I found
that the &amp;#8220;extension&amp;#8221; was just some rehashing of the content from the
book and from &lt;a href="http://freakonomics.blogs.nytimes.com/"&gt;their blog&lt;/a&gt;. So
get the real&amp;nbsp;thing.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;PS&lt;/span&gt;. &lt;a href="http://en.wikipedia.org/wiki/Freakonomics#Planned_sequel"&gt;Wikipedia
says&lt;/a&gt; (so it
must be true :-p) that a sequel is coming. I&amp;#8217;m looking forward to it!
Even if it will be half of the quality of the original (as sequels
usually are), it should still be a great&amp;nbsp;read!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full disclosure: the links include my Amazon Affiliate &lt;span class="caps"&gt;ID&lt;/span&gt;.&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Sat, 29 Aug 2009 18:02:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-08-29:2009/08/freakonomics-review.html</guid><category>review</category><category>economics</category><category>book</category></item><item><title>Spot the error</title><link>https://www.grey-panther.net/2009/08/spot-error.html</link><description>&lt;p&gt;C++ compilers are notorious for giving error messages which point you in
the wrong direction. However even simpler languages can have issues. Can
you spot the &lt;em&gt;real&lt;/em&gt; problem with the java code&amp;nbsp;below?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_hrvCBhtWhJ4/SpfWz4XltxI/AAAAAAAABMc/-UE_tnjvujA/s1600-h/abstract_java_error%5B4%5D.png"&gt;&lt;img alt="abstract_java_error" src="http://lh3.ggpht.com/_hrvCBhtWhJ4/SpfW0MVjE9I/AAAAAAAABMg/SWrBWfP6Qcs/abstract_java_error_thumb%5B2%5D.png?imgmax=800" title="abstract_java_error" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There is a comma missing between the parameters! Nice, ey? (To be fair,
on the sidebar Eclipse shows two errors, one of which correctly
identifies the problem, but I still scratched by head for a few&amp;nbsp;moments).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Fri, 28 Aug 2009 16:08:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-08-28:2009/08/spot-error.html</guid><category>funny</category><category>programming</category><category>java</category></item><item><title>Perl is everywhere!</title><link>https://www.grey-panther.net/2009/08/perl-is-everywhere.html</link><description>&lt;div style="float: right"&gt;

[youtube=http://www.youtube.com/watch?v=04YipMChphk]

&lt;/div&gt;

&lt;p&gt;Something which is not appreciated enough &lt;span class="caps"&gt;IMHO&lt;/span&gt; is just how much of the
interwebs runs on Perl: for example &lt;a href="http://www.frozen-bubble.org/"&gt;Frozen
Bubble&lt;/a&gt; is &lt;a href="http://szabgab.com/blog/2009/08/1250326938.html"&gt;written in
Perl&lt;/a&gt;. Also, from some
error messages I’ve got the impression &lt;a href="http://pipes.yahoo.com/"&gt;Yahoo
Pipes&lt;/a&gt; uses (is written in?)&amp;nbsp;Perl.&lt;/p&gt;
&lt;p&gt;And just before you accuse me of being a Perl fanboy (which I am &lt;span class="caps"&gt;BTW&lt;/span&gt;
:-p), here is a fascinating document: &lt;a href="http://www.perl.com/language/misc/fmproto.html"&gt;Far More Than Everything You&amp;#8217;ve
Ever Wanted to Know
about&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 27 Aug 2009 18:04:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-08-27:2009/08/perl-is-everywhere.html</guid><category>programming languages</category><category>programming</category><category>perl</category></item><item><title>Youtube gadget generator</title><link>https://www.grey-panther.net/2009/08/Youtube-gadget-generator.html</link><description>&lt;p&gt;Some time ago I posted about how &lt;a href="http://hype-free.blogspot.com/2009/06/youtube-channel-embedding-being-all.html"&gt;the Google Gadget code for Youtube
seems to be borked
up&lt;/a&gt;.
Now it seems that they completely removed the option from the YouTube
pages, for whatever reason, but the old code still seems functional. So
below you can find a small Javascript which generates the equivalent
code for a given Youtube user (if you are reading this in an &lt;span class="caps"&gt;RSS&lt;/span&gt; reader,
you need to click trough to the post page, since chances are that the
reader stripped out the &lt;span class="caps"&gt;JS&lt;/span&gt; for security&amp;nbsp;reasons).&lt;/p&gt;
&lt;p&gt;Of course this is an unofficial and unsupported solution, so it might
break at any time and without&amp;nbsp;warning!&lt;/p&gt;
&lt;p&gt;
&lt;script&gt;
\&lt;br /\&gt; function showmethemoneyyoutube() {\&lt;br /\&gt; var prefix =
"\&lt;scr" + "ipt\&gt;\\n/\* \&lt;![CDATA[ \*/\\n(function(){var css='\&lt;br /\&gt;
\&lt;style\&gt;table.gadget{background-position:0%;background:transparent
none;border-collapse:collapse;border:0;clear:none;float:none;font-family:arial,sans-serif;font-style:normal;font-variant:normal;height:auto;letter-spacing:normal;line-height:normal;margin:0;padding:0;text-indent:0;text-transform:none;top:auto;vertical-align:middle;white-space:normal;width:auto;word-spacing:normal;}table.gadget
span.title a:hover,table.gadget span.title a:visited,table.gadget
span.title a:active,table.gadget
span.title{font-size:12px;color:\#0000cc}table.gadget span.powered
a:hover,table.gadget span.powered a:visited,table.gadget span.powered
a:active,table.gadget
span.powered{font-size:10px;color:\#0000cc}\&lt;/style\&gt; \&lt;p\&gt;&lt;span class="quo"&gt;'&lt;/span&gt;;var
js='';var html='\\x3ctable class\\x3d\\x22gadget\\x22 cellspacing\\x3d0
cellpadding\\x3d0
width\\x3d320\\x3e\\x3ctr\\x3e\\x3c/tr\\x3e\\x3ctr\\x3e\\x3ctd
colspan\\x3d2\\x3e\\x3cdiv style\\x3d\\x22background:white;padding:3px;
border:1px solid \#999999;\\x22\\x3e\\x3ciframe
src\\x3d\\x22http://www.gmodules.com/ig/ifr?container\\x3dyoutube\\x26mid\\x3d1\\x26v\\x3d1d667595b6f563bb6e77ac593b4a245\\x26lang\\x3dall\\x26country\\x3dALL\\x26view\\x3dhome\\x26up\_channel\\x3d";\&lt;br
/\&gt; var suffix =
"\\x26url\\x3dhttp%3A%2F%2Fwww.google.com%2Fig%2Fmodules%2Fyoutube.xml\\x26source\\x3d\_\_LOCATION\_\_\\x26parent\\x3d\_\_LOCATION\_\_\\x26libs\\x3dcore%3Acore.io\\x22
width\\x3d320 height\\x3d390 style\\x3d\\x22display:block;\\x22
frameborder\\x3d0
scrolling\\x3d\\x22no\\x22\\x3e\\x3c/iframe\\x3e\\x3c/div\\x3e\\x3c/td\\x3e\\x3c/tr\\x3e\\x3ctr\\x3e\\x3ctd
style\\x3d\\x22text-align:left;vertical-align:middle;height:28px;\\x22\\x3e\\x3ca
href\\x3d\\x22http://fusion.google.com/ig/add?synd\\x3dopen\\x26source\\x3dggyp\\x26moduleurl\\x3dhttp://www.google.com/ig/modules/youtube.xml\\x22
target\\x3d\\x22\_top\\x22\\x3e\\x3cimg style\\x3d\\x22border:0;\\x22
src\\x3d\\x22http://www.gmodules.com/ig/images/plus\_google.gif\\x22\\x3e\\x3c/a\\x3e\\x3c/td\\x3e\\x3ctd
style\\x3d\\x22text-align:right;vertical-align:middle;height:28px;\\x22\\x3e\\x3cspan
class\\x3d\\x22powered\\x22\\x3e\\x3ca
href\\x3d\\x22http://www.google.com/webmasters/gadgets.html\\x22
target\\x3d\\x22\_top\\x22\\x3eGadgets\\x3c/a\\x3e powered by
Google\\x3c/span\\x3e\\x3c/td\\x3e\\x3c/tr\\x3e\\x3c/table\\x3e';html=html.replace(/\_\_LOCATION\_\_/g,
encodeURIComponent(location.href));document.write(css+js+html);})();\\n/\* \*/\\n\&lt;/p\&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Attila-Mihaly Balazs</dc:creator><pubDate>Thu, 27 Aug 2009 17:43:00 +0300</pubDate><guid isPermaLink="false">tag:www.grey-panther.net,2009-08-27:2009/08/Youtube-gadget-generator.html</guid></item></channel></rss>