<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Notes Log</title>
	<atom:link href="http://noteslog.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://noteslog.com</link>
	<description></description>
	<lastBuildDate>Fri, 03 Feb 2012 15:11:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Google Chrome Extensions/Apps for Hacker News</title>
		<link>http://noteslog.com/post/google-chrome-extensionsapps-for-hacker-news/</link>
		<comments>http://noteslog.com/post/google-chrome-extensionsapps-for-hacker-news/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 07:31:44 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
				<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=1469</guid>
		<description><![CDATA[I collected all data between 2012-02-02 and 2012-02-03. I tested all the 50 extensions/apps with news.ycombinator.com; I did not test all the other HN domains (news.ycombinator.org, news.ycombinator.net, hackerne.ws). The order in which the extensions/apps appear below is not significant, except for the ones I tagged very useful, which come first. (broken &#60; obsolete &#60; 0 &#60; [...]]]></description>
			<content:encoded><![CDATA[<p>I collected all data between 2012-02-02 and 2012-02-03.</p>
<p>I tested all the 50 extensions/apps with news.ycombinator.com; I did not test all the other HN domains (news.ycombinator.org, news.ycombinator.net, hackerne.ws).</p>
<p>The order in which the extensions/apps appear below is not significant, except for the ones I tagged very useful, which come first. (broken &lt; obsolete &lt; 0 &lt; funny &lt; interesting &lt; useful &lt; very useful)</p>
<ol>
<li><strong>HN Amplifier 1.6</strong> &#8211; Use this HN amplifier to see news with most points and comments at a glance, while preserving list order.<br />
Pop: 3 &#8211; Pro: It does it. Highly compatible. &#8211; Con: The icon could be better. &#8212; <strong>Very useful. </strong>(disclosure: I made it)<br />
&#8211;</li>
<li><strong>HN Unread Comments 1.1</strong> &#8211; Shows unread comments on Hacker News (http://news.ycombinator.com/).<br />
Pop: 59 &#8212; Pro: It does it. &#8211; Con: There could be a count on the home page. The color of the highlighting border could be an option. &#8212; <strong>Very useful.<br />
&#8211; </strong></li>
<li><strong>Hacker News Sidebar 1.0.7</strong> &#8211; Hacker News integration for Chrome.<br />
Pop: 421 &#8212; Pro: It works. &#8211; Con: The sidebar doesn&#8217;t show up if a web page is on HN but it has still no comments. A page action could be a better handle for the sidebar. &#8211; <strong>Very useful.</strong><br />
&#8211;</li>
<li><strong>What HN says 0.2</strong> &#8211; Shows the current page score. Click on icon to see discussion in Hacker News.<br />
Pop: 2 &#8212; Pro: It does it. &#8212; Con: Nothing. &#8211; <strong>Very useful. </strong>(similar to Hacker News Sidebar)<br />
&#8211;</li>
<li><strong>HN New Comments 0.314</strong> &#8211; Highlight new and edited comments.<br />
Pop: 12 &#8212; Pro: It does it. &#8212; Con: Options page lacks a title. &#8212; <strong>Very useful.</strong> (similar to HN Unread Comments 1.1)<br />
&#8211;</li>
<li><strong>HNCommentTracker 0.2</strong> &#8211; Hacker News Comment Tracker.<br />
Pop: 18 &#8212; Pro: It does it. &#8212; Con: Inconsistent: &#8220;new&#8221; and &#8220;unread&#8221; used interchangeably. &#8212; <strong>Very useful.</strong> (similar to HN Unread Comments 1.1)<br />
&#8211;</li>
<li><strong>Hacker News&#8217;d! 1.0</strong> &#8211; Lets you know if the page you&#8217;re looking at has been discussed on Hacker News (and lets you jump straight to that disucssion).<br />
Pop: 210 &#8212; Pro: It does it. &#8212; Con: Nothing. &#8212; <strong>Very useful.</strong> (similar to Hacker News Sidebar 1.0.7)<br />
&#8211;</li>
<li><strong>Hacker News UX 1.2.2.1</strong> &#8211; Hacker News improve user experience experiment.<br />
Pop: 371 &#8212; Pro: &#8220;About&#8221; feature very useful. &#8212; Con: There&#8217;s no option for enabling only what you need. <span style="color: #ff6600;">It&#8217;s <strong>only home compatible</strong> with HN Amplifier.</span> &#8212; <strong>Very useful.</strong><br />
&#8211;</li>
<li><strong>Hacker News &#8211; Show Read Comments 1.0</strong> &#8211; This is an extension to show you which comments you&#8217;ve already read.<br />
Pop: 7 &#8212; Pro: It does it. &#8212; Con: Nothing. &#8212; <strong>Very useful. </strong>(similar to HN Unread Comments 1.1)<br />
&#8211;</li>
<li><strong>Hacker Friends 1.0</strong> &#8211; Highlight when your friends post to Hacker News.<br />
Pop: 113 &#8212; Pro: It does it. &#8212; Con: Nothing. &#8212; <strong>Very useful.</strong><br />
&#8211;</li>
<li><strong>Shareaholic for Google Chrome™ 5.1.0</strong> &#8211; The easiest way to share interesting webpages using Facebook, Twitter, Email, Gmail, Buzz, Reader, Bookmarks, and more&#8230;<br />
Pop: 64663 &#8212; Pro: All in one. &#8212; Con: A bit lengthy setup with so many choices. &#8212; <strong>Very useful.</strong><br />
&#8211;</li>
<li><strong>HN HideIt 0.5.4</strong> &#8211; A collection of little utilities to make Hacker News browsing more comfortable.<br />
Pop: 30 &#8211; Pro: Nothing. &#8211; Con: Each reload causes a reset. Options are misleading, eg: &#8220;links&#8221; means &#8220;posts&#8221;, &#8221;hidden&#8221; means &#8220;grayed out&#8221;, &#8230; Some options are obsolete. Search box repositioning makes pages look broken.<br />
&#8211;</li>
<li><del><strong>HN Reveal 0.21</strong></del> &#8211; Reveals vote scores of comments posted on Hacker News.<br />
Pop: 14 &#8212; Pro: No options. &#8212; Con: It looks broken, it always shows &#8220;1 point by&#8221;.<br />
&#8211;</li>
<li><strong>Readable HN 1.0.3</strong> &#8211; HackerNews with a touch of beauty (Readability bookmarklet like styling).<br />
Pop: 102 &#8212; Pro: No options &#8212; Con: It makes everything much bigger. (Why not just zoom?)<br />
&#8211;</li>
<li><strong>HN Search Suggestions 1.0</strong> &#8211; Provides search-suggestions for Hacker News submissions and/or comments. (Type &#8216;hn&#8217; in the omnibox and press tab).<br />
Pop: 7 &#8212; Pro: No options. &#8212; Con: Misleading instructions, eg: on my Mac, I had to use [h][n][space] instead of ['][h][n]['][tab] &#8212; <strong>Useful.</strong><br />
&#8211;</li>
<li><del><strong>HN Vote button 1.0.2</strong></del> &#8211; Vote-up webpages directly from your browser&#8217;s toolbar!<br />
Pop: 2 &#8212; Pro: No options. &#8212; Con: Misleading icon. It looks broken.<br />
&#8211;</li>
<li><del><strong>Show full domain on HN 1.2</strong></del> &#8211; Show the full domain name on Hacker News next to titles.<br />
Pop: 7 &#8212; Pro: No options. &#8212; Con: It looks broken or obsolete.<br />
&#8211;</li>
<li><del><strong>Flattehn 0.9.1</strong></del> &#8211; Levels the voting field of HN by hiding usernames and points until you&#8217;ve voted.<br />
Pop: 8 &#8212; Pro: No options. &#8212; Con: It looks broken AND obsolete.<br />
&#8211;</li>
<li><strong>Hacker News Collapsible Comments 1.1</strong> &#8211; Adds reddit-like [+] and [-] links to collapse and expand comment threads.<br />
Pop: 258 &#8212; Pro: No options. &#8212; Con: Each reload causes a reset. I wish the default was all collapsed but showing the first line, gmail-like &#8212; <strong>Useful.</strong><br />
&#8211;</li>
<li><strong>Go Build Stuff 1.0</strong> &#8211; Helps you concentrate on building stuff.<br />
Pop: 107 &#8212; Pro: No options &#8212; Con: Nothing. &#8212; <strong>Funny.</strong><br />
&#8211;</li>
<li><del><strong>Coley&#8217;s Hacker News 1.1</strong></del> &#8211; Refreshes Hacker News every minute. All out-going links open in a background tab.<br />
Pop: 8 &#8212; Pro: No options. &#8212; Con: It looks broken.<br />
&#8211;</li>
<li><strong>Noprocrast Enhanced 0.1</strong> &#8211; This refreshes all idle (i.e. no keydown or click events) HN pages every five minutes.<br />
Pop: 1 &#8212; Pro: No options. &#8212; Con: What for?<br />
&#8211;</li>
<li><del><strong>Mustard Gas (HN3) for Hacker News 1.1</strong></del> &#8211; Mustard Gas.<br />
Pop: 4 &#8212; Pro: No options. &#8212; Con: It looks broken.<br />
&#8211;</li>
<li><strong>Hacker News Modified 3.0.8</strong> &#8211; Updated version of http://goo.gl/C7Kpp.<br />
Pop: 2 &#8212; Pro: It can save to Instapaper. &#8212; Con: Main icon is broken. &#8212; <strong>Interesting.</strong><br />
&#8211;</li>
<li><strong>HackemUp 1.1</strong> &#8211; Keep track of what&#8217;s changed on Hacker News front page since the last time you looked.<br />
Pop: 106 &#8212; Pro: No options. &#8212; Con: <span style="color: #ff6600;">It&#8217;s <strong>not compatible</strong> with HN Amplifier.</span> It could just show delta of new comments. No help about icons. &#8212; <strong>Interesting.</strong> (similar to HN Unread Comments 1.1)<br />
&#8211;</li>
<li><strong>Georgify 1.1</strong> &#8211; Alternate CSS for Hacker News with a focus on typography and readability.<br />
Pop: 1530 &#8212; Pro: No options. &#8212; Con: <span style="color: #ff6600;">It&#8217;s <strong>not compatible</strong> with HN Amplifier.<span style="color: #000000;"> Misleading documentation: It changes the DOM, not just the CSS &#8212; <strong>Interesting.</strong> (similar to Readable HN 1.0.3)</span></span><br />
&#8211;</li>
<li><strong>Hacker News 2.51</strong> &#8211; Displays recent stories from Hacker News.<br />
Pop: 688 &#8212; Pro:  Nothing. &#8212; Con: Nothing. &#8212; <strong>Interesting. </strong>(similar to Hacker News Modified 3.0.8)<br />
&#8211;</li>
<li><strong>Hacker News OnePage 0.8.2</strong> &#8211; Provides users with the ability to browse Hacker News articles and comments without leaving the page.<br />
Pop: 343 &#8212; Pro: No options. &#8212; Con: It doesn&#8217;t remember my choices about what posts to show collapsed/expanded. It could show the Comments below the Article and not the other way around. &#8212; <strong>Interesting.</strong><br />
&#8211;</li>
<li><strong>Hacker News Hotkeys 0.1</strong> &#8211; Gmail style hotkeys for Hacker News. Want Vim or Emacs style? Pay me or bother me :)<br />
Pop: 102 &#8212; Pro: No options. &#8212; Con: It&#8217;s using a browse action instead of a page action. Misleading documentation: h does not show help (the icon does). &#8212; <strong>Interesting.</strong><br />
&#8211;</li>
<li><strong>Hacker News Stack 0.3</strong> &#8211; Focus on the really fresh and unread news in YCombinator &#8211; Hacker News. Relocate read items into the bottom of the website.<br />
Pop: 42 &#8212; Pro: No options. &#8212; Con: It works only if you leftclick on a post. The icon does nothing.<br />
&#8211;</li>
<li><strong>Hacker News Reader 0.2</strong> &#8211; Quickly browse Hacker News articles and comments.<br />
Pop: 1316 &#8212; Pro: Nothing. &#8212; Con: It&#8217;s an app (not an extension). &#8212; (similar to Hacker News OnePage 0.8.2)<br />
&#8211;</li>
<li><strong>Hacker News Collapse 1.1</strong> &#8211; Collapses comments on Hacker News.<br />
Pop: 106 &#8212; Pro: No options. &#8212; Con: Each reload causes a reset. I wish the default was all collapsed but showing the first line, gmail-like &#8211; <strong>Useful.</strong> (similar to Hacker News Collapsible Comments 1.1)<br />
&#8211;</li>
<li><strong>Hackers News Reader 4</strong> &#8211; Simplistic Reader for Hacker News.<br />
Pop: 690 &#8212; Pro: No options. &#8212; Con: It&#8217;s an app (not an extension). &#8211; (similar to Hacker News OnePage 0.8.2)<br />
&#8211;</li>
<li><strong>Hacker News + 1.5</strong> &#8211; Stylish Hacker News.<br />
Pop: 303 &#8212; Pro: No options. Home page really nice. &#8212; Con: Nothing. &#8212; <strong>Interesting.</strong> (similar to Readable HN 1.0.3)<br />
&#8211;</li>
<li><strong>Readable HackerNews 2.3.4</strong> &#8211; Stylish Hacker News.<br />
Pop: 412 &#8212; Pro: No options. Nice. &#8211; Con: Nothing. &#8211; <strong>Interesting.</strong> (similar to Readable HN 1.0.3)<br />
&#8211;</li>
<li><strong>Reddit-Style Comments for Hacker News1.3</strong> &#8211; Adds a simple toggle to hide/show comments in discussion threads on Hacker News.<br />
Pop: 41 &#8212; Pro: No options. It shows #descendants. &#8211; Con: Each reload causes a reset. I wish the default was all collapsed but showing the first line, gmail-like &#8211; <strong>Useful. </strong>(similar to Hacker News Collapsible Comments 1.1)<br />
&#8211;</li>
<li><strong>Hacker News Sorter 1.6.1</strong> &#8211; Sort posts by points, enables search and linkify&#8217;s Hacker News.<br />
Pop: 26 &#8212; Pro: No options. &#8212; Con: Nothing. &#8212; <strong>Interesting. </strong>(similar to HN Amplifier)<br />
&#8211;</li>
<li><strong>Hacker News Extended 00.1</strong> &#8211; Framework for extending Hacker News.<br />
Pop: 4 &#8212; Pro: No options. &#8212; Con: No documentation. &#8211; (jko navigation)<br />
&#8211;</li>
<li><strong>Submit to Hacker News 1.0</strong> &#8211; Hacker news submit button for Chrome. Inspired by Phil Kast&#8217;s bookmarklet.<br />
Pop: 27 &#8212; Pro: No options. &#8212; Con: What for?<br />
&#8211;</li>
<li><strong>Tweet From Hacker News 1.0</strong> &#8211; Tweet articles directly from Hacker News.<br />
Pop: 60 &#8212; Pro: No options. &#8212; Con: Nothing. &#8212; <strong>Interesting.</strong><br />
&#8211;</li>
<li><strong>Hacker News platinum 8</strong> &#8211; Hacker News extension that provides keyboard navigation based on reddit-platinum.<br />
Pop: 10 &#8212; Pro: No options. &#8212; Con: It could save scrolling time eliminating animation. &#8212; <strong>Useful.</strong> (jko navigation)<br />
&#8211;</li>
<li><strong>NavigComments @ Hacker News 0.1.1</strong> &#8211; Navigate through comments @ Hacker News. Any comment can be marked as read or highlighted, read ones can be hidden.<br />
Pop: 3 &#8212; Pro: No options. Marked comments are not lost on reload. &#8212; Con: It&#8217;s not possible to highlight on a Mac. &#8212; <strong>Interesting.</strong><br />
&#8211;</li>
<li><strong>Hacker News Hider 1.0.3</strong> &#8211; This minifies/hides stories that you have clicked on at the YCombinator site: Hacker News.<br />
Pop: 7 &#8212; Pro: No options. Grayed out comments are not lost on reload. &#8211; Con: It works only if you leftclick on a post. &#8211; (similar to HN HideIt 0.5.4)<br />
&#8211;</li>
<li><strong>Hacker News &#8211; Show Full Domain 1.0</strong> &#8211; This is an extension to show the full domain (including subdomains) next to a link, rather than just the root.<br />
Pop: 128 &#8212; Pro: No options. &#8212; Con: Nothing. &#8212; <strong>Useful.</strong> (similar to Show full domain on HN 1.2)<br />
&#8211;</li>
<li><strong>Hacker Sync 1.3</strong> &#8211; Integrates Delicious bookmarking with upvoting at Hacker News.<br />
Pop: 28 &#8212; Pro: No options. &#8212; Con: Nothing. &#8212; <strong>Useful.</strong><br />
&#8211;</li>
<li><strong>Chrombinator 1.1</strong> &#8211; .<br />
Pop: 15 &#8212; Pro: No options. &#8212; Con: Nothing. &#8212; <strong>Useful.</strong><br />
&#8211;</li>
<li><strong>Wompt Chat 0.1.7</strong> &#8211; Wompt brings chat to all your favorite sites.<br />
Pop: 44 &#8212; Pro: No options &#8212; Con: Nothing. &#8212; <strong>Interesting.</strong><br />
&#8211;</li>
<li><strong>Popularity 1.4.1</strong> &#8211; Shows how many times the current web page has been shared on Twitter, LinkedIn, Facebook, Hacker News and Google Buzz.<br />
Pop: 102 &#8212; Pro: No options. &#8212; Con: Nothing. &#8212; <strong>Interesting.</strong><br />
&#8211;</li>
<li><strong>Make Something People Want 1.2</strong> &#8211; Redirects your list of distracting sites to makesomethingpeoplewant.org.<br />
Pop: 2 &#8212; Pro: Nothing. &#8212; Con: Nothing. &#8212; <strong>Funny.</strong> (similar to Go Build Stuff 1.0)<br />
&#8211;</li>
<li><strong>HNdicator 0.1</strong> &#8211; HackerNews Character Limit Indicator.<br />
Pop: 2 &#8212; Pro: No options. &#8212; Con: The smallest feature. &#8212; <strong>Interesting.</strong></li>
</ol>
<h4></h4>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/google-chrome-extensionsapps-for-hacker-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Triskaidecagon</title>
		<link>http://noteslog.com/post/triskaidecagon/</link>
		<comments>http://noteslog.com/post/triskaidecagon/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 12:37:56 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
				<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=1468</guid>
		<description><![CDATA[Wikipedia says A regular triskaidecagon is not constructible with compass and straightedge. However, it is constructible using a Neusis construction. Grapefruit trees know how to use neusis. &#160; As well as the unknown medieval architect that made the Cathedral of Larino. &#160; And the Czech Republic coin makers. &#160; Apparently, nobody else knows. &#160; Nice: 1 2 &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Triskaidecagon" target="_blank">Wikipedia says</a></p>
<blockquote><p>A regular triskaidecagon is not <a title="Constructible polygon" href="http://en.wikipedia.org/wiki/Constructible_polygon">constructible</a> with <a title="Compass and straightedge" href="http://en.wikipedia.org/wiki/Compass_and_straightedge">compass and straightedge</a>. However, it is constructible using a <a title="Neusis construction" href="http://en.wikipedia.org/wiki/Neusis_construction">Neusis construction</a>.</p></blockquote>
<p>Grapefruit trees know how to use neusis.</p>
<p><a href="http://www.cuded.com/2012/01/fruit-and-flowers-paintings-by-dennis-wojtkiewicz/" target="_blank"><img class="alignnone size-full wp-image-1470" title="Dennis-Wojtkiewicz-fruit" src="http://noteslog.com/blog/wp-content/uploads/2012/02/05a-Dennis-Wojtkiewicz-fruit.jpg" alt="Triskaidecagon in an orange slice" width="600" height="598" /></a></p>
<p>&nbsp;</p>
<p>As well as the unknown medieval architect that made the <a href="http://www.comune.larino.cb.it/turismo/monumenti.php" target="_blank">Cathedral of Larino</a>.</p>
<p><a href="http://www.nicolademarchi.it/vedifoto.asp?categoria=021010&amp;cosa=10" target="_blank"><img class="alignnone size-full wp-image-1471" title="Duomo-Larino-dentro" src="http://noteslog.com/blog/wp-content/uploads/2012/02/Duomo-Larino-dentro.jpg" alt="Triskaidecagon in a rose window" width="640" height="480" /></a></p>
<p>&nbsp;</p>
<p>And the Czech Republic coin makers.</p>
<p><a href="http://www.tady.cz/cnslouny/e-ga/g-m-cr-o-e.htm"><img class="alignnone size-full wp-image-1473" title="20-coronas" src="http://noteslog.com/blog/wp-content/uploads/2012/02/20-coronas.jpg" alt="" width="677" height="335" /></a></p>
<p>&nbsp;</p>
<p>Apparently, nobody else knows.</p>
<p>&nbsp;</p>
<p>Nice: <a href="http://en.wikipedia.org/wiki/User:Bender2k14/Regular_Polygon_Constructions" target="_blank">1</a> <a href="http://phdfishman.blogspot.com/2011/12/tridecagon-construction-at-error-76e-11.html" target="_blank">2</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/triskaidecagon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keep Trying</title>
		<link>http://noteslog.com/post/keep-trying/</link>
		<comments>http://noteslog.com/post/keep-trying/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 06:36:51 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
				<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=1466</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://noteslog.com/blog/wp-content/uploads/2012/01/Screen-shot-2012-01-19-at-07.32.21.png"><img src="http://noteslog.com/blog/wp-content/uploads/2012/01/Screen-shot-2012-01-19-at-07.32.21.png" alt="" title="Screen shot 2012-01-19 at 07.32.21" width="390" height="208" class="alignnone size-full wp-image-1467" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/keep-trying/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Downvoting Mischief</title>
		<link>http://noteslog.com/post/downvoting-mischief/</link>
		<comments>http://noteslog.com/post/downvoting-mischief/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 18:25:51 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
				<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=1460</guid>
		<description><![CDATA[Sergey Brin gives $500,000 to help Wikipedia I was reading comments to this piece of news on Hacker News, to see if I could spot an objection I was considering. I had to search for a % sign to sieve through all the comments. Close to the end of the page, I found a comment by [...]]]></description>
			<content:encoded><![CDATA[<h4>Sergey Brin gives $500,000 to help Wikipedia</h4>
<p>I was reading <a href="http://news.ycombinator.com/item?id=3252656" target="_blank">comments</a> to this piece of news on Hacker News, to see if I could spot an objection I was considering. I had to search for a % sign to sieve through all the comments.</p>
<p>Close to the end of the page, I found <a href="http://news.ycombinator.com/item?id=3252776" target="_blank">a comment by ajross</a>, that was basically my objection. The only strange thing was it was almost transparent, nearly impossible to read. In fact, on Hacker News comments can be downvoted, causing them to fade out.</p>
<p>Downvoting is a feature created for fighting spam (and troll) contributions to user generated content sites. Sadly, it&#8217;s mostly used as a censorship means in all sites allowing it.</p>
<p>I think downvoting couldn&#8217;t be expected to work differently than that because it is quite easy (and often right) to interpret upvoting as agreement, and by contrast, downvoting is seen as disagreement.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/downvoting-mischief/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Late Static Binding Example</title>
		<link>http://noteslog.com/post/late-static-binding-example/</link>
		<comments>http://noteslog.com/post/late-static-binding-example/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 20:47:11 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=1459</guid>
		<description><![CDATA[Example class A { static public $data = 'A'; static public function set() { //self::$data = '--'; //normal binding static::$data = '--'; //late binding } } class B extends A { static public $data = 'B'; } class C extends A { static public $data = 'C'; } echo A::$data, B::$data, C::$data; C::set(); echo A::$data, [...]]]></description>
			<content:encoded><![CDATA[<h4>Example</h4>
<p><pre><code class="php">class A
{
    static public $data = 'A';
    
    static public function set()
    {
        //self::$data = '--'; //normal binding
        static::$data = '--'; //late binding
    }
}

class B extends A
{
    static public $data = 'B';
}

class C extends A
{
    static public $data = 'C';
}


echo A::$data, B::$data, C::$data;
C::set();
echo A::$data, B::$data, C::$data;</code></pre></p>
<p>normal binding<br />
<pre>ABC--BC</pre></p>
<p>late binding<br />
<pre>ABCAB--</pre></p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/late-static-binding-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wondering about LEFT JOIN evaluation in MySQL</title>
		<link>http://noteslog.com/post/wondering-about-left-join-evaluation-in-mysql/</link>
		<comments>http://noteslog.com/post/wondering-about-left-join-evaluation-in-mysql/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 21:12:11 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
				<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=1453</guid>
		<description><![CDATA[From LEFT JOIN and RIGHT JOIN Optimization The join optimizer calculates the order in which tables should be joined. &#160; MySQL implements an A LEFT JOIN B join_condition as follows: Table B is set to depend on table A and all tables on which A depends. Table A is set to depend on all tables (except B) that are used in the LEFT JOIN condition. The LEFT JOIN condition is used to decide how [...]]]></description>
			<content:encoded><![CDATA[<p>From <a href="http://dev.mysql.com/doc/refman/5.1/en/left-join-optimization.html" target="_blank">LEFT JOIN and RIGHT JOIN Optimization</a></p>
<blockquote><p>The join optimizer calculates the order in which tables should be joined.</p></blockquote>
<p>&nbsp;</p>
<blockquote><p>MySQL implements an <code><em><code>A</code></em> LEFT JOIN <em><code>B</code></em> join_condition</code> as follows:</p>
<ul>
<li>Table <em><code>B</code></em> is set to depend on table <em><code>A</code></em> and all tables on which <em><code>A</code></em> depends.</li>
<li>Table <em><code>A</code></em> is set to depend on all tables (except <em><code>B</code></em>) that are used in the <code>LEFT JOIN</code> condition.</li>
<li>The <code>LEFT JOIN</code> condition is used to decide how to retrieve rows from table <em><code>B</code></em>. (In other words, any condition in the <code>WHERE</code> clause is not used.)</li>
<li>All standard join optimizations are performed, with the exception that a table is always read after all tables on which it depends. If there is a circular dependence, MySQL issues an error.</li>
<li>All standard <code>WHERE</code> optimizations are performed.</li>
<li>If there is a row in <em><code>A</code></em> that matches the <code>WHERE</code> clause, but there is no row in <em><code>B</code></em> that matches the <code>ON</code> condition, an extra <em><code>B</code></em> row is generated with all columns set to <code>NULL</code>.</li>
</ul>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/wondering-about-left-join-evaluation-in-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cryptico</title>
		<link>http://noteslog.com/post/cryptico/</link>
		<comments>http://noteslog.com/post/cryptico/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 21:43:39 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
				<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=1456</guid>
		<description><![CDATA[How to COMPUTE a key A public key can be obtained elsewhere, so no need to worry about encryption or signature verification. A private key could be obtained elsewhere too, but such a feature is not available in my implementation. Put a passphrase into the My Passphrase field. Press the Compute button. Get the computed [...]]]></description>
			<content:encoded><![CDATA[<h5>How to COMPUTE a key</h5>
<ul>
<li>A public key can be obtained elsewhere, so no need to worry about encryption or signature verification.</li>
<li>A private key could be obtained elsewhere too, but such a feature is not available in my implementation.</li>
</ul>
<ol>
<li>Put a passphrase into the My Passphrase field.</li>
<li>Press the Compute button.</li>
<li>Get the computed key from the My Key field.</li>
</ol>
<h5>How to ENCRYPT a message</h5>
<ol>
<li>Put the public key of the receiver into the Their Public Key field.</li>
<li>Put your decrypted message into the Input Message field.</li>
<li>If you want to add your signature to the encrypted message, put your key into the My Key field, otherwise leave it blank.</li>
<li>Press the Encrypt button.</li>
<li>Get the encrypted message from the Output Message field.</li>
</ol>
<h5>How to DECRYPT a message</h5>
<div>
<ol>
<li>If the encrypted message carries a signature you want to match, put the public key of the sender into the Their Public Key field.</li>
<li>Put your encrypted message into the Input Message field.</li>
<li>Put your key into the My Key field.</li>
<li>Press the Decrypt button.</li>
<li>Get the decrypted message from the Output Message field.</li>
</ol>
</div>
<hr />
<p><strong>Their Public Key</strong><br />
<textarea id="theirPublicKey" style="width:90%; height:50px; margin:10px; border:1px solid silver; font-family: monospace;"></textarea></p>
<p><strong>My Key or Passphrase</strong> <input type="button" value="Compute" onclick="generateMyKey();"><br />
<textarea id="myKey" style="width:90%; height:90px; margin:10px; border:1px solid silver; font-family: monospace;"></textarea></p>
<p>My Public Key (computed)<br />
<textarea id="myPublicKey" style="width:90%; height:50px; margin:10px; border:1px solid silver; font-family: monospace;"></textarea></p>
<p><strong>Input Message</strong><br />
<textarea id="input" style="width:90%; height:150px; margin:10px; border:1px solid silver; font-family: monospace;"></textarea></p>
<p><script type="text/javascript">
function serializeKey(key) {
  var data = JSON.stringify(key);
  return data;
}

function unserializeKey(data) {
  var parsed = JSON.parse(data);
  var bigs = {};
  for (var name in parsed) {
    if (parsed.hasOwnProperty(name)) {
      bigs[name] = jQuery.extend(new BigInteger(null), parsed[name]);
    }
  }
  var key = jQuery.extend(new RSAKey(), bigs);
  return key;
}

function extractPublicKey(key, wrap) {
  if (typeof wrap == 'undefined') {
    wrap = true;
  }
  var result = cryptico.publicKeyString(key);
  if (wrap) {
    result = cryptico.wrap60(result); 
  }
  return result;
}

function generateMyKey() {
  jQuery('#myPublicKey').val('');
  var data = jQuery.trim(jQuery('#myKey').val());
  if (data == '') {
    jQuery('#myKey').removeData('RSAKey');
    return;
  }
  var key;
  try {
    key = unserializeKey(data);
  }
  catch (e) {
    key = cryptico.generateRSAKey(data, 1024);
    data = serializeKey(key);
    jQuery('#myKey').val(data);
  }
  jQuery('#myKey').data('RSAKey', key);
  var publicKey = extractPublicKey(key); 
  jQuery('#myPublicKey').val(publicKey);
}

function encrypt() {
  var theirPublicKey = jQuery.trim(jQuery('#theirPublicKey').val());
  if ('' == theirPublicKey) {
    return;
  }
  var input = jQuery.trim(jQuery('#input').val());
  if ('' == input) {
    return;
  }
  var output = 'Encryption ERROR.';
  var signature = 'NOT signed.';
  var signatureKey = '';
  var signedByThem = '';
  generateMyKey();
  var key = jQuery('#myKey').data('RSAKey');
  var encrypted = cryptico.encrypt(input, theirPublicKey, key);
  if ('success' == encrypted.status) {
	  output = encrypted.cipher;
	  if (key) {
		  signature = 'Signed by me.'
	  }
  }
  jQuery('#output').val(output);
  jQuery('#signature').text(signature);
  jQuery('#signatureKey').val(signatureKey).css('disabled', true);
  jQuery('#signedByThem').text(signedByThem).css('disabled', true);
}

function decrypt() {
  var input = jQuery.trim(jQuery('#input').val());
  if ('' == input) {
    return;
  }
  generateMyKey();
  var key = jQuery('#myKey').data('RSAKey');
  if (! key) {
    return;
  }
  var output = 'Decryption ERROR.';
  var signature = 'NOT signed.';
  var signatureKey = '';
  var signedByThem = '';
  var decrypted = cryptico.decrypt(input, key);
  if ('success' == decrypted.status) {
	  output = decrypted.plaintext;
	  if ('unsigned' != decrypted.signature) {
		signature = 'Signature ' + decrypted.signature + '.'
	    signatureKey = decrypted.publicKeyString;
	    var theirPublicKey = jQuery.trim(jQuery('#theirPublicKey').val());
	    if (theirPublicKey) {
	      theirPublicKey = theirPublicKey.replace(/\r?\n/g, '');
	      var publicKey = signatureKey.replace(/\r?\n/g, '');
	      var signedByThem = theirPublicKey != publicKey ? 'NOT signed by them.' : 'Signed by them.';
	    }
	  }
  }
  jQuery('#output').val(output);
  jQuery('#signature').text(signature);
  jQuery('#signatureKey').val(signatureKey).css('disabled', false);
  jQuery('#signedByThem').text(signedByThem).css('disabled', false);
}
</script> <input type="button" value="Encrypt" onclick="encrypt();"> <input type="button" value="Decrypt" onclick="decrypt();"> </p>
<p><strong>Output Message</strong> <span id="signature" style="background: beige;"></span> <span id="signedByThem" style="background: beige;"></span><br />
<textarea id="output" style="width:90%; height:150px; margin:10px; border:1px solid silver; font-family: monospace;"></textarea></p>
<p>Their Public Key (computed)<br />
<textarea id="signatureKey" style="width:90%; height:50px; margin:10px; border:1px solid silver; font-family: monospace;"></textarea></p>
<p><script src="http://cryptico.googlecode.com/svn/trunk/cryptico.js" type="text/javascript"></script> <script type="text/javascript">
var JSON;if(!JSON){JSON={}}(function(){"use strict";function f(n){return n<10?'0'+n:n}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(a){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z':null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(a){return this.valueOf()}}var e=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(b){escapable.lastIndex=0;return escapable.test(b)?'"'+b.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+b+'"'}function str(a,b){var i,k,v,length,mind=gap,partial,value=b[a];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(a)}if(typeof rep==='function'){value=rep.call(b,a,value)}switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null'}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null'}v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v}if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){if(typeof rep[i]==='string'){k=rep[i];v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v)}}}}else{for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v)}}}}v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(a,b,c){var i;gap='';indent='';if(typeof c==='number'){for(i=0;i<c;i+=1){indent+=' '}}else if(typeof c==='string'){indent=c}rep=b;if(b&&typeof b!=='function'&&(typeof b!=='object'||typeof b.length!=='number')){throw new Error('JSON.stringify');}return str('',{'':a})}}if(typeof JSON.parse!=='function'){JSON.parse=function(c,d){var j;function walk(a,b){var k,v,value=a[b];if(value&&typeof value==='object'){for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return d.call(a,b,value)}c=String(c);e.lastIndex=0;if(e.test(c)){c=c.replace(e,function(a){return'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(c.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+c+')');return typeof d==='function'?walk({'':j},''):j}throw new SyntaxError('JSON.parse');}}}());
</script></p>
<p>Using <a href="http://cryptico.wwwtyro.net/" target="_blank">cryptico.js</a>.</p>
<p>Please, do not use this page for encrypting sensitive data.</p>
<p>You are advised to look <a href="http://en.wikipedia.org/wiki/Pretty_Good_Privacy" target="_blank">elsewhere</a> for serious encryption tools.</p>
<h5></h5>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/cryptico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Embeddable</title>
		<link>http://noteslog.com/post/embeddable/</link>
		<comments>http://noteslog.com/post/embeddable/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 12:04:10 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
				<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=1455</guid>
		<description><![CDATA[Input:   Output: &#160;]]></description>
			<content:encoded><![CDATA[<p>Input: <textarea id="input" style="width:90%; height:150px; margin:10px; border:1px solid silver; font-family: monospace;"></textarea></p>
<p><script type="text/javascript">
function escape( value ) {
  return value
    .replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/\"/g, '&quot;')
    .replace(/\'/g, '&#39;');
}
function postable() {
  var input = jQuery('#input').val();
  var output = escape(input);
  jQuery('#output').val(output);
}
function bookmarkletable() {
  var input = jQuery('#input').val();
  var output = 'javascript:' + encodeURIComponent(input.replace(/^javascript:/, ''));
  jQuery( '#output' ).val(output);
}
jQuery( function() {
  jQuery( 'textarea' ).val('');
} );
</script> <input type="button" value="Postable" onclick="postable();"> <input type="button" value="Bookmarkletable" onclick="bookmarkletable();"></p>
<p>Output: <textarea id="output" style="width:90%; height:150px; margin:10px; border:1px solid silver; font-family: monospace;"></textarea></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/embeddable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yet another bookmarklet for injecting jQuery</title>
		<link>http://noteslog.com/post/yet-another-bookmarklet-for-injecting-jquery/</link>
		<comments>http://noteslog.com/post/yet-another-bookmarklet-for-injecting-jquery/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 17:11:41 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
				<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=1452</guid>
		<description><![CDATA[Drag and drop this link to your bookmarks. javascript:(function () { var wasUndefined = typeof jQuery == 'undefined'; if (wasUndefined) { var s = document.createElement('script'); s.setAttribute('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'); document.getElementsByTagName('head')[0].appendChild(s); } var time = 0; var id = setInterval(function () { function show_msg(text) { var $ = jQuery; $('&#60;div style=&#34;display:none; position: absolute; padding: 5px; background: beige; font-size: 1.0em; [...]]]></description>
			<content:encoded><![CDATA[<p>Drag and drop this <a title="Inject jQuery" href="javascript:(function(){var%20c=typeof%20jQuery=='undefined';if(c){var%20s=document.createElement('script');s.setAttribute('src','http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js');document.getElementsByTagName('head')[0].appendChild(s)}var%20d=0;var%20e=setInterval(function(){function%20show_msg(a){var%20$=jQuery;$('%3Cdiv%20style=%22display:none;position:absolute;padding:5px;background:beige;font-size:1.0em;z-index:1000000%22%3E%3C/div%3E').appendTo('body').css({top:$(document).scrollTop()+10,left:$(document).scrollLeft()+10}).html(a).fadeToggle('fast','linear',function(){$(this).fadeToggle(3000,'linear',function(){$(this).remove()})})}var%20b=typeof%20jQuery=='undefined';if(!b){clearInterval(e);if(c){jQuery.noConflict();show_msg('jQuery%20'+jQuery.fn.jquery+'%20has%20been%20injected.')}else{show_msg('jQuery%20'+jQuery.fn.jquery+'%20was%20already%20available.')}return}++d;if(d==10){clearInterval(e);show_msg('Sorry,%20unable%20to%20inject%20jQuery%20now.')}},500)})();">link</a> to your bookmarks.</p>
<p><pre><code class="javascript">javascript:(function () {
	var wasUndefined = typeof jQuery == 'undefined';
    if (wasUndefined) {
        var s = document.createElement('script'); 
        s.setAttribute('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'); 
        document.getElementsByTagName('head')[0].appendChild(s); 
    } 
    
    var time = 0; 
    var id = setInterval(function () {
    	function show_msg(text) {
    		var $ = jQuery;
    		$('&lt;div style=&quot;display:none; position: absolute; padding: 5px; background: beige; font-size: 1.0em; z-index: 1000000&quot;&gt;&lt;/div&gt;')
    		.appendTo('body')
    		.css({ top: $(document).scrollTop() + 10, left: $(document).scrollLeft() + 10 })
    		.html(text)
    		.fadeToggle('fast', 'linear', function() {
    			$(this).fadeToggle(3000, 'linear', function() { 
    				$(this).remove(); 
    			}); 
    		});
        }
    	
        var isUndefined = typeof jQuery == 'undefined';
        if (! isUndefined) { 
            clearInterval(id); 
            if (wasUndefined) {
              jQuery.noConflict();
              show_msg('jQuery ' + jQuery.fn.jquery + ' has been injected.'); 
            }
            else {
              show_msg('jQuery ' + jQuery.fn.jquery + ' was already available.'); 
            }
            return;
        } 
        ++time;
        if (time == 10) { 
            clearInterval(id); 
            show_msg('Sorry, unable to inject jQuery now.'); 
        } 
    }, 500);
})();</code></pre></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/yet-another-bookmarklet-for-injecting-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Updated the Hacker News Horse Race Bookmarklet</title>
		<link>http://noteslog.com/post/updated-the-hacker-news-horse-race-bookmarklet/</link>
		<comments>http://noteslog.com/post/updated-the-hacker-news-horse-race-bookmarklet/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 15:16:22 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
				<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=1451</guid>
		<description><![CDATA[I&#8217;ve just updated the Hacker News Horse Race Bookmarklet post, with new code and new images. &#160;]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just updated the <a href="http://noteslog.com/post/addictive-hacker-news-horse-race-bookmarklet/">Hacker News Horse Race Bookmarklet</a> post, with new code and new images.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/updated-the-hacker-news-horse-race-bookmarklet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

