<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>Hacker News Personal Blogs 2010 | All Blog Posts</title><link>https://hn-blogs.kronis.dev/feed.xml</link><description>A collection of blog posts from users of Hacker News, based on RSS feeds.</description><language>en-US</language><lastBuildDate>Sat, 13 Jun 2026 04:03:20 GMT</lastBuildDate><generator>rfeed v1.1.1</generator><docs>https://github.com/svpino/rfeed/blob/master/README.md</docs><item><title>Are iPad apps green and culture-friendly?</title><link>https://stop.zona-m.net/2010/12/are-ipad-apps-green-and-culture-friendly/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 31 Dec 2010 13:45:57 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/are-ipad-apps-green-and-culture-friendly/</guid></item><item><title>Dinner at The Atrium at Burswood - it sucked.</title><link>https://liza.io/dinner-at-the-atrium-at-burswood-it-sucked/</link><description>&lt;p&gt;This year instead of bothering with making a big deal of Christmas, getting presents, etc, C and I decided to just go out and have a nice meal. A couple of weeks ago my recruiter held a lunch at the Atrium in Burswood and it was excellent, so I thought we could go to the same place for dinner.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Fri, 31 Dec 2010 05:33:12 GMT</pubDate><guid isPermaLink="true">https://liza.io/dinner-at-the-atrium-at-burswood-it-sucked/</guid></item><item><title>December 2010 Tech Demo</title><link>https://etodd.io/2010/12/30/december-2010-tech-demo/</link><description>&lt;p&gt;I finally got animations working! I'm using a Blender to FBX script, along with this fantastic multi-take FBX importer. Apparently XNA depends on the actual FBX API for importing, and the API changed drastically just before XNA 4 released, so they didn't have time to get multiple takes (animation clips) working in one file. This importer automagically splits out the takes from the FBX file, processes them independently, then combines them into the original model. I encountered a bug with the Blender to FBX script, but as of today it's been fixed and committed. You can get the Blender export script &lt;a href="http://code.google.com/p/blender-to-xna/downloads/list"&gt;here&lt;/a&gt; and the importer &lt;a href="https://code.google.com/p/take-extractor/downloads/detail?name=SkinnedModelImporter.zip"&gt;here&lt;/a&gt;. (edit: here's a &lt;a href="http://members.gamedev.net/et1337/MultiAnimationSkinningSample.zip"&gt;sample project&lt;/a&gt;, including a .blend file, .fbx file, and all necessary code)&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Thu, 30 Dec 2010 18:00:22 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/12/30/december-2010-tech-demo/</guid></item><item><title>TouchClock</title><link>https://mattkeeter.com/projects/touchclock</link><description>Interactive timepiece</description><author>Matt Keeter</author><pubDate>Thu, 30 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://mattkeeter.com/projects/touchclock</guid></item><item><title>Selling Something New</title><link>/2010/12/27/Selling-Something-New/</link><description>&lt;p&gt;I have a tendency of really latching onto very simple ideas. Typically these ideas don&amp;rsquo;t require complex engineering to make them happen. This is not to say the engineering is not important, but more so that it is some variation of engineering feats that have been done before. The reason I tend to like these over more complex engineering that really makes something better is that making something better is typically a marginal improvement. When it&amp;rsquo;s a marginal improvement it&amp;rsquo;s a lot harder to sell.&lt;/p&gt;
&lt;p&gt;With marginal improvements you have to:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;In contrast if I address a problem that hasn&amp;rsquo;t been solved my life instantly becomes a lot easier. I no longer have an argument of something not being good enough today, it becomes a question of value and how much its worth to solve the problem. Haggling over price is a conversation I&amp;rsquo;d rather have than trying to justify value and convince a customer they&amp;rsquo;ve been wrong in their choice for so many years.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Tue, 28 Dec 2010 03:04:50 GMT</pubDate><guid isPermaLink="true">/2010/12/27/Selling-Something-New/</guid></item><item><title>Further deets</title><link>https://etodd.io/2010/12/28/further-deets/</link><description>&lt;p&gt;Okay, it's time to shed some light on this project.&lt;/p&gt;
&lt;p&gt;First off, my goal is to release on Xbox and, if possible, Steam (if not, I'll be looking at other online stores). I figure these are the two largest, most practical target markets. The release price will be between $1 and $5, with 100% of the proceeds going to charity (more on this later...).&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;a href="https://etodd.io/assets/dropship.jpg"&gt;&lt;/a&gt;&lt;a href="https://etodd.io/assets/dropship.jpg"&gt;&lt;/a&gt;&lt;a href="https://etodd.io/assets/dropship.jpg"&gt;&lt;img alt="" class="aligncenter size-full wp-image-253" src="https://etodd.io/assets/dropship.jpg" title="dropship" /&gt;&lt;/a&gt;
There are two main themes I want to nail in this game. The first is giving the player freedom to alter the game world; to literally change the world geometry by performing sweet parkour moves (jumps, flips, slides, etc.). The idea is, to create a wall, you simply jump into mid-air and perform a wall jump &lt;em&gt;as if the wall was there&lt;/em&gt;, and poof, it's there. Need to get through that annoying concrete barrier? No problem, slide right through it like it's butter.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Tue, 28 Dec 2010 02:05:27 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/12/28/further-deets/</guid></item><item><title>The Gospel of Tux v1.0</title><link>https://jasoneckert.github.io/myblog/the-gospel-of-tux/</link><description>&lt;p&gt;&lt;img alt="Tux" src="tux.png#right" title="Tux" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Every generation has a mythology. Every millennium has a doomsday cult. Every legend gets the distortion knob wound up until the speaker melts. Archeologists at the University of Helsinki today uncovered what could be the earliest known writings from the Cult of Tux, a fanatical religious sect that flourished during the early Silicon Age, just before the dawn of the third millennium AD.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In the beginning Turing created the Machine. And the Machine was crufty and bodacious, existing in theory only. And von Neumann looked upon the Machine, and saw that it was crufty. He divided the Machine into two Abstractions, the Data and the Code, and yet the two were one Architecture. This is a great Mystery, and the beginning of wisdom. And von Neumann spoke unto the Architecture, and blessed it, saying, &amp;ldquo;Go forth and replicate, freely exchanging data and code, and bring forth all manner of devices unto the earth.&amp;rdquo; And it was so, and it was cool. The Architecture prospered and was implemented in hardware and software. And it brought forth many Systems unto the earth.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Tue, 28 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/the-gospel-of-tux/</guid></item><item><title>When DRM on ebooks works like a bewitched, terribly broken bookshelf</title><link>https://stop.zona-m.net/2010/12/when-drm-on-ebooks-works-like-a-bewitched-terribly-broken-bookshelf/</link><description>&lt;p&gt;Personally, I believe that copyright &lt;strong&gt;has&lt;/strong&gt; a reason to exist (1) and that copying and sharing online 24/7 every file you can lay your hands on, &amp;ldquo;just because I can&amp;rdquo;, makes it easier to pass things like ACTA and therefore is&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 24 Dec 2010 17:32:21 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/when-drm-on-ebooks-works-like-a-bewitched-terribly-broken-bookshelf/</guid></item><item><title>MySQL Popularity Ranking Algorithm</title><link>https://boyter.org/2010/12/mysql-popularity-ranking-algorithm/</link><description>&lt;p&gt;Calculating the popularity of a page or article is something that usually comes up as a list of requirements for any social website. Essentially you want to display the post popular items/articles in some form of list but have them weighted by how old they are. Thankfully its pretty easy to do MySQL.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;((popularity-1)/power(((unix_timestamp(NOW())-unix_timestamp(datetime))/60)/60,1.8))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The above produces a number which you can then sort on. It is based on the &lt;a href="https://medium.com/hacking-and-gonzo/how-hacker-news-ranking-algorithm-works-1d9b0cf2c08d"&gt;Hacker News algorithm&lt;/a&gt; and works well for items which change hourly. By removing one of the /60 you should get something which ranks based on days rather then hours. A full example is listed below,&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Fri, 24 Dec 2010 06:11:03 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/12/mysql-popularity-ranking-algorithm/</guid></item><item><title>ISP’s winning the fight against net neutrality</title><link>https://solomon.io/isps-winning-the-fight-against-net-neutrality/</link><description>How scary would it be if you had to purchase access to certain websites like you purchase access to certain channels on cable?</description><author>Sam Solomon</author><pubDate>Fri, 24 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/isps-winning-the-fight-against-net-neutrality/</guid></item><item><title>LINX71 - 100GE in the Lab</title><link>https://rob.sh/post/196/</link><description>&lt;p&gt;
I spoke at LINX71 about the testing that we (C&amp;amp;W) have been doing in the lab with 100GigE - we got a pre-production card and hence had a look at the technology for real. Thanks to LINX, the presentation video can be seen by clicking on the image below.
&lt;/p&gt;
&lt;div align="center"&gt;
&lt;a href="https://cdn.rob.sh/files/linx71_100ge.mp4"&gt;&lt;img src="https://cdn.rob.sh/img/linx71-preso.png" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Once again, however, whatever LINX use as a presentation laptop didn't render my slides properly - even though I'd submitted PDF too! Hence the slides can be found &lt;a href="https://cdn.rob.sh/files/linx-100ge-presentation.pdf"&gt;on this site&lt;/a&gt;.
&lt;/p&gt;</description><author>rob.sh</author><pubDate>Thu, 23 Dec 2010 18:32:57 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/196/</guid></item><item><title>sneak peak of the redesign of slim langcom</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/sneak-peak-of-the-redesign-of-slim-langcom</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Thu, 23 Dec 2010 00:15:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/sneak-peak-of-the-redesign-of-slim-langcom</guid></item><item><title>How to buy a US-only Kindle eBook in Australia</title><link>https://liza.io/how-to-buy-a-us-only-kindle-ebook-in-australia/</link><description>&lt;p&gt;See updates at the bottom of the post&lt;/p&gt;
&lt;p&gt;I tried to buy a Kindle ebook yesterday from the Amazon site only to be told that the book was not available for Australian customers. Unfortunately I couldn&amp;rsquo;t find an electronic version of the book anywhere else, so tried a few ways to purchase this thing from Australia. I was finally successful in purchasing the Kindle eBook.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Wed, 22 Dec 2010 13:18:19 GMT</pubDate><guid isPermaLink="true">https://liza.io/how-to-buy-a-us-only-kindle-ebook-in-australia/</guid></item><item><title>Use Your PC to Keep Yourself Entertained While Traveling for the Holidays</title><link>https://justingarrison.com/blog/2010-12-22-use-your-pc-to-keep-yourself-entertained-while-traveling-for-the-holidays/</link><description>Staying connected may be hard no matter what network you are on</description><author>Justin Garrison's Homepage</author><pubDate>Wed, 22 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-12-22-use-your-pc-to-keep-yourself-entertained-while-traveling-for-the-holidays/</guid></item><item><title>How to Share Links Between Any Browser and Any Smartphone</title><link>https://justingarrison.com/blog/2010-12-21-how-to-share-links-between-any-browser-and-any-smartphone/</link><description>It happens all the time, you find an article to read but then nature calls.</description><author>Justin Garrison's Homepage</author><pubDate>Tue, 21 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-12-21-how-to-share-links-between-any-browser-and-any-smartphone/</guid></item><item><title>Opinion: Google Killed the Internet</title><link>https://donatstudios.com/Google_Killed_The_Internet</link><description>&lt;h2&gt;Googles Page Speed &amp;ldquo;Optimizations&amp;rdquo; Make Learning Difficult&lt;/h2&gt;
&lt;p&gt;If you, as I, grew up during the web bubble we call the 90&amp;rsquo;s and were interested at all in web development my guess is that you probably didn&amp;rsquo;t learn most of your skills from a book or a class.  You probably would run across a site that had something cool on it and ponder  &amp;ldquo;Oh my, how does that work?&amp;rdquo; right click, view source, and after some digging were enlightened.  I&amp;rsquo;m certain this is how most of my generation learned their HTML/CSS/JavaScript skills, it is certainly how I did, and often how I continue though now I have tools to help me even further pick apart a page such as Firebug.&lt;/p&gt;
&lt;p&gt;Where I take issue is CSS and more so JavaScript minifying. Google wants essentially all your CSS and JavaScript minified. This lessens the bandwidth &lt;em&gt;Google&lt;/em&gt; has to use, but in the process makes the source complete illegible to a human being.&lt;/p&gt;
&lt;p&gt;I personally, on &lt;em&gt;this site&lt;/em&gt;, lose a fair deal of my Page Speed Score because &amp;ldquo;Minifying &lt;a href="https://donatstudios.com/js/general.js" target="_blank"&gt;http://donatstudios.com/js/general.js&lt;/a&gt; could save 311B (23% reduction)&amp;rdquo;.   My general.js file is at the moment 1.3 kilobytes; I am losing points off my Page Speed score over 311 bytes simply because I want my source code to remain legible.  Can we please get a sanity check on this, Google.  311 bytes is not going to kill you.&lt;/p&gt;
&lt;h2&gt;SEO is Destroying the Spirit of the Internet&lt;/h2&gt;
&lt;p&gt;Back in the hay day of Geocities if you did a search you were likely to get a few if not mostly amateur pages in your results.  They weren&amp;rsquo;t usually &lt;em&gt;well designed&lt;/em&gt; perse, but they were often &lt;em&gt;very&lt;/em&gt; useful. I can recall of the top of my head a few instances where they saved the day.&lt;/p&gt;
&lt;p&gt;In steps &amp;ldquo;Search Engine Optimization&amp;rdquo;. Corporations are gaga over paying people to dig through content, study their keywords, rewording things and saturating content with keywords (often at the cost of readability I might add).&lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s compare that to an amateur, who&amp;rsquo;s content is designed for &lt;em&gt;human consumption&lt;/em&gt; rather than &lt;em&gt;googles&lt;/em&gt; and now has no way to keep up in this arms race. There usually isn&amp;rsquo;t the money nor the desire to pump into SEO and content development.  They just want to provide some useful information to the public.  These kinds of sites are becoming increasingly hard to find, with corporate sites taking the lion&amp;rsquo;s share of the hits.&lt;/p&gt;
&lt;p&gt;Frankly I believe a lot of great content is getting missed thanks to SEO.  The spirit of the internet years ago was driven around the fact that anyone could write something, and have it read by millions of people.  While this is still the case, I find it far less likely now than it has been in previous years.  I don&amp;rsquo;t think there is a solution; I just find the corporatization of the web a little disheartening.&lt;/p&gt;</description><author>Donat Studios</author><pubDate>Mon, 20 Dec 2010 12:35:10 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/Google_Killed_The_Internet</guid></item><item><title>Interesting find: Sevilla 111 Gigapixels</title><link>https://arnorhs.dev/posts/2010-12-20/interesting-find-sevilla-111-gigapixels/</link><description>I don't exactly know which technology was used to create this, but here is a 111 gigapixel zoomable image of the town of Sevilla in Italy. It really is remarkable and as it stands this image holds the world record for the highest resolution picture ever created.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Mon, 20 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-12-20/interesting-find-sevilla-111-gigapixels/</guid></item><item><title>ShortPHP blog moved to arnorhs.com</title><link>https://arnorhs.dev/posts/2010-12-19/shortphp-blog-moved-to-arnorhs-com/</link><description>I've moved the ShortPHP blog to my personal blog. Due to the possibility of it becoming more active here. I've recently set up ShortPHP at github.com so you can fork the project or create contributions of your own and submit them.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sun, 19 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-12-19/shortphp-blog-moved-to-arnorhs-com/</guid></item><item><title>Nimptopsical</title><link>https://mbutler.org/nimptopsical/</link><description>Ben Franklin drunk dialing simulator. Will text message a random term from Ben Franklin&amp;#8217;s 1737 list of synonyms for &amp;#8216;drunk&amp;#8217; at the time of your choosing to a list of phone numbers. View the code on GitHub.</description><author>mbutler</author><pubDate>Sat, 18 Dec 2010 22:25:03 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/nimptopsical/</guid></item><item><title>Watched Tron: Legacy</title><link>https://liza.io/watched-tron-legacy/</link><description>&lt;p&gt;C and I went to see Tron: Legacy in 3D last night. I have to be honest - I haven&amp;rsquo;t seen the original Tron. I only remember being obsessed with this old PC game where you had to control a car that was spitting out a blue wall as you drove as you tried to trap your opponent. At the time I had no idea the game was actually based on a movie.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sat, 18 Dec 2010 07:21:16 GMT</pubDate><guid isPermaLink="true">https://liza.io/watched-tron-legacy/</guid></item><item><title>Interesting find: A lot of random links</title><link>https://arnorhs.dev/posts/2010-12-18/interesting-find-a-lot-of-random-links/</link><description>Here's a bunch of random interesting links I've found lately. I grabbed this from my twitter stream, so some of those links are shortened. I'm \*way\* too lazy to unshorten them. Edit: No wait, I'm not too lazy, I de-shortened them all.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sat, 18 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-12-18/interesting-find-a-lot-of-random-links/</guid></item><item><title>D&amp;amp;D and Speed Fighting</title><link>https://liza.io/dd-and-speed-fighting/</link><description>&lt;h2 id="dd"&gt;D&amp;amp;D;&lt;/h2&gt;
&lt;p&gt;Our D&amp;amp;D; 4e group had an awesome session last weekend. It went something like this (and I&amp;rsquo;m just prattling off from memory here, pardon any mistakes, fellow party members):&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Thu, 16 Dec 2010 13:03:59 GMT</pubDate><guid isPermaLink="true">https://liza.io/dd-and-speed-fighting/</guid></item><item><title>[Ruby] Haml2Slim, Convert Your HAML Templates to Slim Templates</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/ruby-haml2slim-convert-your-haml-templates-to-slim-templates</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Thu, 16 Dec 2010 11:08:51 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/ruby-haml2slim-convert-your-haml-templates-to-slim-templates</guid></item><item><title>Interesting find: Google Body Browser</title><link>https://arnorhs.dev/posts/2010-12-16/interesting-find-google-body-browser/</link><description>This is a really interesting non-profit project from Google Labs. It uses a technology called WebGL, which is open non-proprietary standard for displaying 3d graphics. It displays the graphics through HTML5's canvas element and it's only supported in beta versions of most of the browsers. That means you'll need the beta version of Firefox or Google Chrome beta.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Thu, 16 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-12-16/interesting-find-google-body-browser/</guid></item><item><title>How Money Is Made Online</title><link>https://honza.pokorny.ca/2010/12/how-money-is-made-online/</link><description>&lt;p&gt;My friends of the non-geek type often ask me how companies like Facebook can
make so much money and provide their service for free at the same time. Here is
a quick example of how you can make money online.&lt;/p&gt;
&lt;p&gt;Warning: this is a not a get rich quick scheme. I&amp;rsquo;m not going teach you how to
make millions working for Google from home.&lt;/p&gt;
&lt;p&gt;I recently started following John Gruber&amp;rsquo;s blog &lt;a href="http://daringfireball.net/"&gt;Darring Fireball&lt;/a&gt;. This
gentleman seems to be rather influential in the hacker community. On the
website, he says that there are more than 400,000 subscribers that frequently
read his blog. In the world of Internet publishing, this is a great deal of
exposure. Not very many people get this much attention.&lt;/p&gt;
&lt;p&gt;If you browse through the site, you will soon notice that you can sponsor John
to write more articles. You can pay him $5,000/month - in return, a small
banner with your company&amp;rsquo;s advertising graphics will be displayed in a
prominent place on John&amp;rsquo;s blog for that month. You will get millions of people
every month looking at your ad for just $5,000/month.&lt;/p&gt;
&lt;p&gt;Writing interesting articles about the web is a full-time job for John.&lt;/p&gt;</description><author>Honza Pokorný</author><pubDate>Wed, 15 Dec 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://honza.pokorny.ca/2010/12/how-money-is-made-online/</guid></item><item><title>Raincoat Girl Turntable</title><link>https://blog.yiningkarlli.com/2010/12/raincoat-girl-turntable.html</link><description>&lt;p&gt;I’m done with my character model! Until I can think of a better name, I’m just calling her “Raincoat Girl”.&lt;/p&gt;

&lt;p&gt;Here’s a still:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Dec/character.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Dec/character.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Getting the hair and cloth sims to work right took aaaggggeeesssss. Thank goodness &lt;a href="http://www.marissakrupen.blogspot.com/"&gt;Marissa Krupen&lt;/a&gt; knows so much and helped me out a lot.&lt;/p&gt;

&lt;p&gt;I wound up cheating on the subsurface scatter for the skin. I couldn’t get it to look right on its own, so I wound up using a layered shader with the subsurface on one layer and a normal texture map on the other layer. I think the end result looks okay.&lt;/p&gt;

&lt;p&gt;Turntable!&lt;/p&gt;

&lt;div class="embed-container"&gt;Raincoat Girl&lt;/div&gt;

&lt;p&gt;I’ll post more stills later, but now I really need to study for that Finance final that I’ve been avoiding… I also have to make an environment for my character to go in to, and I still have that final project for 3D modeling to finish (I haven’t even started…).&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Wed, 15 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/12/raincoat-girl-turntable.html</guid></item><item><title>Downhole</title><link>https://johnj.com/posts/downhole/</link><description>&lt;p&gt;
As thoughts turn in earnest to shopping and packing to depart January
1, here is a South Pole video from old times to get one in the mood
for the coming trip. This was from my second trip, 13 years ago, taken
by a camera deployed in one of the AMANDA strings, designed by our
Stockholm collaborators.&lt;/p&gt;
&lt;p&gt;


&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Mon, 13 Dec 2010 14:07:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/downhole/</guid></item><item><title>Character Model Face</title><link>https://blog.yiningkarlli.com/2010/12/character-model-face.html</link><description>&lt;p&gt;Okay, I’m close to finished with the face…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Dec/test_render.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Dec/test_render.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ve decided not to give her eyelashes. They didn’t look very good. I also noticed that in some Pixar characters, Pixar chose to keep the lips the same color as the rest of the skin… I kind of like that style choice, so I’m going to steal it (read: Karl is too lazy to paint lips).&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Sun, 12 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/12/character-model-face.html</guid></item><item><title>The Bunga Bunga dictator? A (stupidly) Windows-only show, sorry</title><link>https://stop.zona-m.net/2010/12/the-bunga-bunga-dictator-a-stupidly-windows-only-show-sorry/</link><description>&lt;p&gt;Tonight I wanted to watch on my computer, in streaming thanks to this wonderful worldwide Web that makes us all brothers and that all the Italian Political Parties who care about the future hail as an enabler of democracy and participation, an italian live show called the &lt;a href="http://bungabunga.italiadeivalori.it/info.php"&gt;Bunga Bunga Dictator&lt;/a&gt;. Bunga Bunga is.. er, I&amp;rsquo;ll leave the definition to the &lt;a href="http://www.urbandictionary.com/define.php?term=bunga-bunga"&gt;Urban Dictionary&lt;/a&gt;. The dictator is Italy&amp;rsquo;s Prime Minister Silvio Berlusconi, who is&amp;hellip; er, you&amp;rsquo;ve probably heard of him already and if you haven&amp;rsquo;t, ask &lt;a href="http://www.guardian.co.uk/world/2010/dec/10/silvio-berlusconi-italy-mps-votes"&gt;the Guardian&lt;/a&gt;.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 11 Dec 2010 05:17:16 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/the-bunga-bunga-dictator-a-stupidly-windows-only-show-sorry/</guid></item><item><title>Want to present your thesis? Please be compatible with Windows</title><link>https://stop.zona-m.net/2010/12/want-to-present-your-thesis-please-be-compatible-with-windows/</link><description>&lt;p&gt;Last week I had a weird experience. I went to the &lt;a href="http://www.comunicazione.uniroma1.it"&gt;Department of Communications and Social Research of the Faculty of Communication Sciences&lt;/a&gt; of La Sapienza, the first and biggest University in Rome. The reason I went there was to attend the presentation of the &lt;a href="http://www.datagov.it/"&gt;Italian Manifesto for Open Government&lt;/a&gt;, on which I&amp;rsquo;ll report soon in another article. The promoters of the Manifesto spent the whole morning explaining in detail all its ten articles, including the fourth and fifth that strongly assert the importance of opening public data, that is publishing them without restrictions in open file formats. They explained this in a room whose entrance was right in front of a billboard on which the Faculty staff had pinned this notice (thanks to Flavia for taking the [picture):&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 10 Dec 2010 03:10:27 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/want-to-present-your-thesis-please-be-compatible-with-windows/</guid></item><item><title>Did you know that in Naples, in Federica Square...</title><link>https://stop.zona-m.net/2010/12/did-you-know-that-in-naples-in-federica-square/</link><description>&lt;p&gt;Piazza Federica (Federica Square in Italian) is the &lt;em&gt;&amp;ldquo;3D virtual square&amp;rdquo;&lt;/em&gt; that should constitute the &lt;a href="http://www.cgitalia.it/node/2335"&gt;innovative web-learning system&lt;/a&gt; of the &lt;a href="http://www.unina.it/"&gt;Federico II University in Naples, Italy&lt;/a&gt;. I already reported in another article that &lt;a href="https://stop.zona-m.net/2010/12/why-cant-penguins-enter-federica-square/"&gt;Penguins can&amp;rsquo;t  enter Piazza Federica&lt;/a&gt;, explaining why that is bad for a service of a public University. In additions to those penguin barriers, however, there are other things I don&amp;rsquo;t understand in the public service offered by Piazza Federica.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 09 Dec 2010 19:26:10 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/did-you-know-that-in-naples-in-federica-square/</guid></item><item><title>Why can't Penguins enter Federica square?</title><link>https://stop.zona-m.net/2010/12/why-cant-penguins-enter-federica-square/</link><description>&lt;p&gt;In november 2010 I discovered the existence of Federica, the &lt;em&gt;tridimensional virtual square&amp;quot;&lt;/em&gt; that should be &lt;a href="http://www.cgitalia.it/node/2335"&gt;the innovative web-learning system&lt;/a&gt; of the &lt;a href="http://www.unina.it/"&gt;Federico II University in Naples&lt;/a&gt;. Out of curiosity, I decided to visit it and all I got was a black screen and some perplexities. Some of them, which I described in &lt;a href="https://stop.zona-m.net/2010/12/did-you-know-that-in-naples-in-federica-square/"&gt;another page&lt;/a&gt; are on the very sense of a website like that, others are more specific. I got a black screen because I use Linux, while (quoting from the University website):&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 09 Dec 2010 03:54:51 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/why-cant-penguins-enter-federica-square/</guid></item><item><title>Big Gigantic</title><link>https://solomon.io/big-gigantic/</link><description>I didn’t know what to expect when I learned we were getting a DJ that played the saxophone.</description><author>Sam Solomon</author><pubDate>Thu, 09 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/big-gigantic/</guid></item><item><title>HTTP connection + HTTP Authenticacion + Proxy + SSL</title><link>https://danielpecos.com/2010/12/08/http-connection-http-authenticacion-proxy-ssl/</link><description>&lt;p&gt;Many times during your life as a java developer, you will face the situation of retrieving some resources using an HTTP connection. At first, it will seem easy, but probably some problems will arise such as:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Needing to use an HTTP Proxy (maybe authentication would be required)&lt;/li&gt;
&lt;li&gt;Establishing an HTTP authenticated connection&lt;/li&gt;
&lt;li&gt;Connecting to a server that uses SSL self-signed certificates&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I’m sure you will quickly find the Apache Commons solution: &lt;em&gt;commons-httpclient&lt;/em&gt;. In this article I will show you some code that, I hope, will ease you the  resolution of the previous obstacles using this great API from Apache.&lt;/p&gt;
&lt;p&gt;First of all I will show you the basic code needed to establish an HTTP GET connection using &lt;em&gt;commons-httpclient&lt;/em&gt; and then we will add continuous enhancements step by step:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GetMethod httpget = null;
String result = null;
try {
    httpget = new GetMethod(url);

    HttpClient client = new HttpClient();
    int status = client.executeMethod(httpget);
    if (status == 200) {
        result = httpget.getResponseBodyAsString();
    } else {
        System.err.println("Error accessing to URL " + status + ": " +  httpget.getStatusLine());
    }

} catch (MalformedURLException e) {
    System.err.println("Malformed URL: " + e.getMessage());
} catch (IOException e) {
    System.err.println("I/O problems: " + e.getMessage());
} catch (Exception e) {
    System.err.println("URL not found: " + e.getMessage());
} finally {
    if (httpget != null) {
        httpget.releaseConnection();
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;1. Use an HTTP Proxy (maybe authentication would be required)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now lets add the necessary code to establish the HTTP connection using a Proxy. I will use a static method to configure proxy settings in our &lt;em&gt;HttpClient&lt;/em&gt; instance:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;private static void configureProxy(HttpClient client, HttpMethodBase method, String proxyHost, int proxyPort, String proxyUsername, String proxyPassword, String proxyNTDomain) {

    client.getHostConfiguration().setProxy(proxyHost, proxyPort);

    if (proxyUsername != null &amp;amp;&amp;amp; proxyUsername.length() &amp;amp;gt; 0) {

        if (proxyNTDomain != null &amp;amp;&amp;amp; proxyNTDomain.length() &amp;amp;gt; 0)  {
            // use NT Domain authentication
            NTCredentials credentials = new NTCredentials(proxyUsername, proxyPassword, proxyHost, proxyNTDomain);
            HttpState state = client.getState();
            state.setProxyCredentials(new AuthScope(proxyHost, proxyPort, AuthScope.ANY_REALM), credentials);
        } else {
            // use plain user/password authentication
            Credentials defaultcreds = new UsernamePasswordCredentials(proxyUsername, proxyPassword);
            client.getState().setProxyCredentials(new AuthScope(proxyHost, proxyPort, AuthScope.ANY_REALM), defaultcreds);
        }
        method.setDoAuthentication(true);
    }

}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and then we will have to insert this line of code in our previous example (I have inserted it between lines 6-7):&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;configureProxy(client, httpget, proxyHost, proxyPort, proxyUsername, proxyPassword, proxyNTDomain);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;At this moment, we have point 1 solved, so let’s go for point 2: Basic HTTP Authentication.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;2. Establish an HTTP authenticated connection&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In order to keep code as clean as possible, I will create another static method to set HTTP authentication:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;private static void configureHTTPAuthentication(HttpClient client, String host, int port, String httpUsername, String httpPassword) {
    client.getState().setCredentials(new AuthScope(host, port), new UsernamePasswordCredentials(httpUsername, httpPassword));
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and the required call to this method, just after the previous one:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;configureHTTPAuthentication(client, httpget.getURI().getHost(), httpget.getURI().getPort(), httpUsername, httpPassword);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This one was easy 😉&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;3. Connect to a server that uses SSL self-signed certificates&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now lets solve the last point, probably the more difficult of all of them. We will need two implementations of &lt;em&gt;ProtocolSocketFactory&lt;/em&gt; and &lt;em&gt;X509TrustManager&lt;/em&gt; that accept self-signed certificates: &lt;em&gt;EasySSLProtocolSocketFactory&lt;/em&gt; and &lt;em&gt;EasyX509TrustManager&lt;/em&gt;, which you can find in httpclient-contrib (I have grabbed them from &lt;a href="mailto:adrian.sutton@ephox.com"&gt;Adrian Sutton&lt;/a&gt; and &lt;a href="mailto:oleg@ural.ru"&gt;Oleg Kalnichevski&lt;/a&gt; and you can also find them attached at the end of this article). Once in our &lt;em&gt;classpath&lt;/em&gt;, we have to insert the following code in our first example, just below the call to &lt;em&gt;configureHTTPAuthentication&lt;/em&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;if (url.startsWith("https")) {
    Protocol protocol = new Protocol("https", new EasySSLProtocolSocketFactory(), 443);
    client.getHostConfiguration().setHost(httpget.getURI().getHost(), 443, protocol);
    // we also can set this socketfactory as global for all the connections
    //Protocol.registerProtocol("https", protocol);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Finally, we should be able to connect to a HTTP-Authenticaded SSL URL, using an http (authenticated-?)proxy. Isn’t it cool? This is how our final code looks like:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;private static void configureProxy(HttpClient client, HttpMethodBase method, String proxyHost, int proxyPort, String proxyUsername, String proxyPassword, String proxyNTDomain) {

    client.getHostConfiguration().setProxy(proxyHost, proxyPort);

    if (proxyUsername != null &amp;amp;&amp;amp; proxyUsername.length() &amp;amp;gt; 0) {

        if (proxyNTDomain != null &amp;amp;&amp;amp; proxyNTDomain.length() &amp;amp;gt; 0)  {
            // use NT Domain authentication
            NTCredentials credentials = new NTCredentials(proxyUsername, proxyPassword, proxyHost, proxyNTDomain);
            HttpState state = client.getState();
            state.setProxyCredentials(new AuthScope(proxyHost, proxyPort, AuthScope.ANY_REALM), credentials);
        } else {
            // use plain user/password authentication
            Credentials defaultcreds = new UsernamePasswordCredentials(proxyUsername, proxyPassword);
            client.getState().setProxyCredentials(new AuthScope(proxyHost, proxyPort, AuthScope.ANY_REALM), defaultcreds);
        }
        method.setDoAuthentication(true);
    }

}

private static void configureHTTPAuthentication(HttpClient client, String host, int port, String httpUsername, String httpPassword) {
    client.getState().setCredentials(new AuthScope(host, port), new UsernamePasswordCredentials(httpUsername, httpPassword));
}

public static String doGETConnection(String url, String proxyHost, int proxyPort, String proxyUsername, String proxyPassword, String proxyNTDomain, String httpUsername, String httpPassword) {

    GetMethod httpget = null;
    String result = null;
    try {
        httpget = new GetMethod(url);

        HttpClient client = new HttpClient();
        configureProxy(client, httpget, proxyHost, proxyPort, proxyUsername, proxyPassword, proxyNTDomain);
        configureHTTPAuthentication(client, httpget.getURI().getHost(), httpget.getURI().getPort(), httpUsername, httpPassword);

        if (url.startsWith("https")) {
            Protocol protocol = new Protocol("https", new EasySSLProtocolSocketFactory(), 443);
            client.getHostConfiguration().setHost(httpget.getURI().getHost(), 443, protocol);
            // we also can set this socketfactory as global for all the connections
            //Protocol.registerProtocol("https", protocol);
        }

        int status = client.executeMethod(httpget);
        if (status == 200) {
            result = httpget.getResponseBodyAsString();
        } else {
            System.err.println("Error accessing to URL " + status + ": " +  httpget.getStatusLine());
        }

    } catch (MalformedURLException e) {
        System.err.println("Malformed URL: " + e.getMessage());
    } catch (IOException e) {
        System.err.println("I/O problems: " + e.getMessage());
    } catch (Exception e) {
        System.err.println("URL not found: " + e.getMessage());
    } finally {
        if (httpget != null) {
            httpget.releaseConnection();
        }
    }

    return result;

}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;Possible exceptions&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;But, if we haven’t been lucky, we can find one of this two exceptions (if not both) when trying to establish connection:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&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;/code&gt;&lt;/pre&gt;&lt;p&gt;This one is due to the JDK can not verify the self-signed certificate. We have to add it to a trusted keystore and make it available to the JDK, using &lt;a href="https://danielpecos.com/assets/2010/12/InstallCert.zip"&gt;InstallCert&lt;/a&gt; java standalone application.&lt;/p&gt;
&lt;p&gt;Another different problem that I got while developing this code, was the next one:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;javax.net.ssl.SSLKeyException: RSA premaster secret error
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It’s related to this size of the certificate and the JDK cryptographic capabilities. To resolve this issue, download and install the &lt;a href="http://java.sun.com/j2se/1.5.0/download.jsp"&gt;Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files version 5.0.&lt;/a&gt; Extracted from its README file:&lt;/p&gt;
&lt;blockquote&gt;
&lt;div id="_mcePaste"&gt;
  &lt;div id="_mcePaste"&gt;
    Due to import control restrictions, the version of JCE policy files that are bundled in the JDK(TM) 5.0 environment allow &amp;#8220;strong&amp;#8221; but limited cryptography to be used. This download bundle (the one including this README file) provides &amp;#8220;unlimited strength&amp;#8221; policy files which contain no restrictions on cryptographic strengths.
  &lt;/div&gt;
  &lt;div id="_mcePaste"&gt;
    Please note that this download file does NOT contain any encryption functionality since such functionality is supported in Sun&amp;#8217;s JDK 5.0.Thus, this installation applies only to Sun&amp;#8217;s JDK 5.0, and assumes that the JDK 5.0 is already installed.
  &lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;And finally…&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I hope this article would help you to resolve your HTTP connection issues. If not, please post a comment and I will try to reply you ASAP. You can also find me at twitter @danielpecos&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;strong&gt;&lt;span style="color: #339966;"&gt;&lt;em&gt;Feedback is welcomed!&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Files used for this demo:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Full sources of the example developed here: &lt;a href="https://danielpecos.com/assets/2010/12/httpclient-example.zip"&gt;httpclient-example&lt;/a&gt;.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Standalone java application to create a keystor__e: &lt;a href="https://danielpecos.com/assets/2010/12/InstallCert.zip"&gt;InstallCert&lt;/a&gt;.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;I also provide a mirror for the needed &lt;a href="https://danielpecos.com/assets/2010/12/jce_policy-1_5_0.zip"&gt;policy files&lt;/a&gt; in case of RSA premaster secret error.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Wed, 08 Dec 2010 18:20:19 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2010/12/08/http-connection-http-authenticacion-proxy-ssl/</guid></item><item><title>After Umberto Eco, even Franco Debenedetti gets ebooks wrong</title><link>https://stop.zona-m.net/2010/12/after-umberto-eco-even-franco-debenedetti-gets-ebooks-wrong/</link><description>&lt;p&gt;In August 2010 Umberto Eco, a great Italian intellectual and novelist &lt;a href="http://espresso.repubblica.it/dettaglio/non-fate-il-funerale-ai-libri/2132084"&gt;wrote&lt;/a&gt; something very true about traditional paper books: &lt;em&gt;don&amp;rsquo;t you dare to hope to get rid of all paper books just because e-books are now available&lt;/em&gt;. Unfortunately, Eco gave a really dumb proof for his assertion:&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 08 Dec 2010 16:16:38 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/after-umberto-eco-even-franco-debenedetti-gets-ebooks-wrong/</guid></item><item><title>Top Geek...and I cancelled my Vodafone plan</title><link>https://liza.io/top-geek-and-i-cancelled-my-vodafone-plan/</link><description>&lt;p&gt;First of all, today I entered iiNet&amp;rsquo;s Top Geek competition. &lt;strong&gt;&lt;a href="http://www.topgeek.net.au/entry/view/25/?v=60"&gt;Vote for me&lt;/a&gt;&lt;/strong&gt;! Please? :D&lt;/p&gt;
&lt;p&gt;Second, today I got out of my Vodafone contract. My data connection has just been shocking over the past months and today I called up for something like the fourth time (it was the second time out of four attempts over the past few days when I actually got through). They switched me to prepay with no penalty rates when I communicated respectfully but firmly that I am not going to pay for something that I can&amp;rsquo;t even properly use. My accounts kind of in limbo stage right now - I need to recharge it before I can receive or send any calls or SMS, but they say their systems are currently down and I&amp;rsquo;ll have to wait until tomorrow.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Wed, 08 Dec 2010 15:38:42 GMT</pubDate><guid isPermaLink="true">https://liza.io/top-geek-and-i-cancelled-my-vodafone-plan/</guid></item><item><title>Share a Remote Music Library with iTunes from Linux</title><link>https://joshuarogers.net/articles/2010-12/share-remote-music-library-itunes-linux/</link><description>I usually listen to Pandora at work. I'd rather listen to my personal library, but Pandora makes for a good second place. There's no question that it beats trying to store / sync untold gigabytes worth of audio on my work computer. Still, sometimes Pandora just doesn't cut it: especially when I want to hear a certain song. So, I decided to use lunch to figure out how to get my music collection into iTunes at work.</description><author>Joshua Rogers</author><pubDate>Wed, 08 Dec 2010 14:00:00 GMT</pubDate><guid isPermaLink="true">https://joshuarogers.net/articles/2010-12/share-remote-music-library-itunes-linux/</guid></item><item><title>What I've really learned so far thanks to Wikileaks</title><link>https://stop.zona-m.net/2010/12/what-ive-really-learned-so-far-thanks-to-wikileaks/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 08 Dec 2010 03:08:24 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/what-ive-really-learned-so-far-thanks-to-wikileaks/</guid></item><item><title>Is Internet censorship keeping Rome dirty and ugly?</title><link>https://stop.zona-m.net/2010/12/is-internet-censorship-keeping-rome-dirty-and-ugly/</link><description>&lt;p&gt;Rome is chaotic and not really efficient, but is still one of the most beautiful, visually stunning cities in the world. An act of Internet censorship just happened that may keep it ugly. Here&amp;rsquo;s what happened, and how you can help.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 08 Dec 2010 00:26:45 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/is-internet-censorship-keeping-rome-dirty-and-ugly/</guid></item><item><title>Wanna save trees? Don't Save As WWF. This is the really green format!</title><link>https://stop.zona-m.net/2010/12/wanna-save-trees-dont-save-as-wwf-this-is-the-really-green-format/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 07 Dec 2010 17:17:43 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/wanna-save-trees-dont-save-as-wwf-this-is-the-really-green-format/</guid></item><item><title>If banking were more Open Source, we would need less Wikileaks</title><link>https://stop.zona-m.net/2010/12/if-banking-were-more-open-source-we-would-need-less-wikileaks/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Mon, 06 Dec 2010 17:08:23 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/if-banking-were-more-open-source-we-would-need-less-wikileaks/</guid></item><item><title>20 Windows Keyboard Shortcuts You Might Not Know</title><link>https://justingarrison.com/blog/2010-12-06-20-windows-keyboard-shortcuts-you-might-not-know/</link><description>Mastering the keyboard will not only increase your navigation speed</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 06 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-12-06-20-windows-keyboard-shortcuts-you-might-not-know/</guid></item><item><title>Busy weekend - Atrium at Burswood, D&amp;amp;D, and Jarrahdale Hike</title><link>https://liza.io/busy-weekend-atrium-at-burswood-dd-and-jarrahdale-hike/</link><description>&lt;p&gt;This weekend was very eventful.&lt;/p&gt;
&lt;p&gt;On Friday, my recruiter had an awesome buffet lunch the Atrium in Burswood. The food was unbelievably awesome; there was such a huge variety! And the desserts - I was in heaven. All of the contractors were also given two bottles of wine, which was very generous.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sun, 05 Dec 2010 18:41:44 GMT</pubDate><guid isPermaLink="true">https://liza.io/busy-weekend-atrium-at-burswood-dd-and-jarrahdale-hike/</guid></item><item><title>Save as WWF? No, thanks!</title><link>https://stop.zona-m.net/2010/12/save-as-wwf-no-thanks/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 04 Dec 2010 22:01:31 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/save-as-wwf-no-thanks/</guid></item><item><title>Cloth Simulation Progress</title><link>https://blog.yiningkarlli.com/2010/12/cloth-simulation-progress.html</link><description>&lt;p&gt;I’m working on a character model right now loosely based on &lt;a href="http://blog.yiningkarlli.com/2010/10/puddle-redux.html"&gt;this sketch&lt;/a&gt;. Here’s how the cloth simulation stuff is looking right now:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Dec/cloth_test_4.jpeg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Dec/cloth_test_4.jpeg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Dec/cloth_test_3.jpeg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Dec/cloth_test_3.jpeg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Dec/cloth_test_2.jpeg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Dec/cloth_test_2.jpeg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Dec/cloth_test_1.jpeg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Dec/cloth_test_1.jpeg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is still much work to be done.&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Sat, 04 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/12/cloth-simulation-progress.html</guid></item><item><title>How should we manage the Vendola-Puglia-Microsoft deal?</title><link>https://stop.zona-m.net/2010/12/how-should-we-manage-the-vendola-puglia-microsoft-deal/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 02 Dec 2010 18:57:23 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/12/how-should-we-manage-the-vendola-puglia-microsoft-deal/</guid></item><item><title>Unit tests are like Ewoks</title><link>https://peterlyons.com/problog/2010/12/unit-tests-are-like-ewoks/</link><description>&lt;p&gt;Unit tests are like Ewoks.  They are your friends. They will help you.  They will help you fight formidable enemies.  They are cute and cuddly and adorable.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Thu, 02 Dec 2010 05:24:43 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/12/unit-tests-are-like-ewoks/</guid></item><item><title>Designing an Offline CMS</title><link>https://michael.mior.ca/blog/designing-an-offline-cms/</link><description>&lt;p&gt;First the obvious question.
What on earth is an offline CMS?
Isn’t the whole point of having a CMS that you don’t have to change anything offline? Well, yes that’s true.
But recently I ran into a problem.&lt;/p&gt;
&lt;p&gt;When I started my Masters degree, the department wanted me to create a webpage, but all I could really do was serve boring old static content.
Well, that’s not entirely true, since there was an offer to set up a reverse proxy with my own LAMP stack, but that seemed like overkill for my humble little homepage.
I also knew that I sure didn’t want to have to edit pages one by one every time I wanted to change common content.
I also didn’t want to have to upload things manually every time things changed.&lt;/p&gt;
&lt;p&gt;I did some searching around, and I decided to start with the &lt;a href="http://www.cheetahtemplate.org/"&gt;Cheetah&lt;/a&gt; template engine.
It’s got basically all the template goodness you need and a nice, clean syntax.
So I created some Cheetah templates, and wrote a little script to generate all my files, and everything worked just fine.
But I didn’t want to stop there.
So I decided to throw in some of the &lt;a href="http://wiseheartdesign.com/articles/2010/01/18/the-demise-of-css-why-sass-and-languages-like-it-will-triumph/"&gt;goodness of SASS&lt;/a&gt;.
(If you’re not familiar with SASS, check out the link, it’ll change your life.)
Finally, just for good measure, I decided to throw in cssoptimizer and &lt;a href="http://www.crockford.com/javascript/jsmin.html"&gt;jsmin&lt;/a&gt; to pack everything down to size.&lt;/p&gt;
&lt;p&gt;Finally, just to satisfy my aching fingers, I decided to write a Makefile that would perform the whole shebang: generate the static HTML, optimize JS and CSS code, and upload any changes to the server.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;SERVER = yourserverhere

JS = $(wildcard src/js/*.js)
JS_OPT = $(patsubst src/js/%.js,web/js/%.js, $(JS))

SASS = $(wildcard src/sass/*.sass)
CSS = $(patsubst src/sass/%.sass,web/css/%.css, $(SASS))

TMPL = $(wildcard src/tmpl/*.tmpl)
TMPL_INC = $(wildcard src/tmpl/inc/*.tmpl)
HTM = $(patsubst src/tmpl/%.tmpl,web/%.htm, $(TMPL))

# Build all JavaScript, CSS, and XHTML files
all: $(JS_OPT) $(CSS) $(HTM)

# Remove all built files from the output directory
clean:
 rm -f web/*.htm
 rm -f web/js/*.js    rm -f web/css/*.css

# Upload the final site to the server
put: all
 rsync -avr --delete web/ $(SERVER):~/public_html

# Optimize JavaScript files
$(JS_OPT): web/js/%.js: src/js/%.js
 cat $&amp;lt; | ./bin/jsmin &amp;gt; $@

# Optimize CSS files
$(CSS): web/css/%.css: src/sass/%.sass
 sass $&amp;lt; | ./bin/cssoptimizer -i $@

# Ensure XHTML is rebuilt when included templates change
$(HTM): $(TMPL_INC)

$(HTM): web/%.htm: src/tmpl/%.tmpl
 (cd src/tmpl; cheetah fill --nobackup --oext=$(suffix $@) --odir=../../$(dir $@) $(notdir $&amp;lt;))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To get this to work for you, you should just be able to change &lt;code&gt;SERVER&lt;/code&gt; to the address of your web server.
The directory structure I used looks like this:&lt;/p&gt;
&lt;!--lint disable list-item-spacing no-missing-blank-lines--&gt;

&lt;ul&gt;
&lt;li&gt;bin&lt;/li&gt;
&lt;li&gt;src&lt;ul&gt;
&lt;li&gt;tmpl&lt;ul&gt;
&lt;li&gt;inc&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;sass&lt;/li&gt;
&lt;li&gt;js&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;web&lt;ul&gt;
&lt;li&gt;img&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--lint enable list-item-spacing no-missing-blank-lines--&gt;

&lt;p&gt;Finally, here’s a complete list of download locations for all the tools I used:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://sass-lang.com/"&gt;Sass – Syntactically Awesome Stylesheets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.crockford.com/javascript/jsmin.html"&gt;JSMIN, The JavaScript Minifier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mabblog.com/cssoptimizer/download.html"&gt;CSS Optimizer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I found out when researching for this post that &lt;a href="https://github.com/lakshmivyas"&gt;Lakshmi Vyas&lt;/a&gt; has already come up with a solution called &lt;a href="http://ringce.com/hyde"&gt;Hyde&lt;/a&gt; for Python.
There is also &lt;a href="http://jekyllrb.com/"&gt;jekyll&lt;/a&gt; which uses Ruby.
This just gives you more approaches to building a custom tool that suits your needs.&lt;/p&gt;
&lt;p&gt;If you have any tips for generating static web content, post in the comments!&lt;/p&gt;</description><author>Michael Mior</author><pubDate>Thu, 02 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://michael.mior.ca/blog/designing-an-offline-cms/</guid></item><item><title>Ghent 6</title><link>https://rob.sh/post/195/</link><description>&lt;p&gt;I took some photos of the Ghent 6 day on the &lt;a href="http://www.grupetto.co.uk"&gt;Grupetto&lt;/a&gt; trip out there. The full gallery is &lt;a href="https://cdn.rob.sh/img/gent6"&gt;here&lt;/a&gt;, but some selected highlights are below:&lt;br /&gt;&lt;br /&gt;
&lt;img src="https://cdn.rob.sh/img/postimg/gent6-16.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;img src="https://cdn.rob.sh/img/postimg/gent6-24.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;img src="https://cdn.rob.sh/img/postimg/gent6-4.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;img src="https://cdn.rob.sh/img/postimg/gent6-6.jpg" /&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Thu, 02 Dec 2010 01:13:31 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/195/</guid></item><item><title>Scavengers</title><link>https://hth.is/fiction/scavengers/</link><description>What follows is a fan fiction written by me in 2010 and takes place in the fictional universe of Eve Online
&amp;ldquo;Damn it!&amp;rdquo;.
This is turning out to be a really bad week, Raiukat thought as he walked to the nearest medical station. The cut wasn&amp;rsquo;t as bad as it had first seemed. Not that it mattered. If they couldn&amp;rsquo;t get the engines back online soon a small cut was the least of his problems.</description><author>Hrafn Thorvaldsson</author><pubDate>Wed, 01 Dec 2010 14:00:00 GMT</pubDate><guid isPermaLink="true">https://hth.is/fiction/scavengers/</guid></item><item><title>Smart meters tell the inconvenient truth to Iraq veteran (and everybody else)</title><link>https://stop.zona-m.net/2010/11/smart-meters-tell-the-inconvenient-truth-to-iraq-veteran-and-everybody-else/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 30 Nov 2010 00:59:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/11/smart-meters-tell-the-inconvenient-truth-to-iraq-veteran-and-everybody-else/</guid></item><item><title>Come accorciare links e URL usando le API di Bit.ly via ASP.NET</title><link>https://nicolaiarocci.com/accorciare-url-usando-bit-ly-via-asp-net/</link><description>&lt;p&gt;&lt;!-- raw HTML omitted --&gt;Una delle applicazioni su cui sto lavorando in questo periodo manda decine di emails al giorno, ognuna contenente almeno un paio di links (URL). Questi link sono molto lunghi perché oltre all’indirizzo della pagina da aprire contengono una o più &lt;a href="http://en.wikipedia.org/wiki/Query_string"&gt;query strings&lt;/a&gt;. In generale, per tante buone ragioni, le URL lunghe non sono mai una buona idea; ancor meno lo sono se  devono comparire in un messaggio email. Gli algoritmi di &lt;a href="http://en.wikipedia.org/wiki/Word_wrap"&gt;word wrapping&lt;/a&gt; dei client di posta elettronica vanno in crisi quando sono costretti a inserire un ritorno di carrello nel bel mezzo della URL. Come biasimarli?&lt;/p&gt;</description><author>Nicola Iarocci</author><pubDate>Mon, 29 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://nicolaiarocci.com/accorciare-url-usando-bit-ly-via-asp-net/</guid></item><item><title>9 Alternatives for Windows Home Server’s Drive Extender</title><link>https://justingarrison.com/blog/2010-11-29-9-alternatives-for-windows-home-servers-drive-extender/</link><description>Now that Microsoft has officially killed off the best part about Windows</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 29 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-11-29-9-alternatives-for-windows-home-servers-drive-extender/</guid></item><item><title>How to Create a Software RAID Array in Windows 7</title><link>https://justingarrison.com/blog/2010-11-29-how-to-create-a-software-raid-array-in-windows-7/</link><description>Instead of having a bunch of separate drives to deal with, why not</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 29 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-11-29-how-to-create-a-software-raid-array-in-windows-7/</guid></item><item><title>Italian region asks for help to avoid software lock-in... to Microsoft</title><link>https://stop.zona-m.net/2010/11/italian-region-asks-for-help-to-avoid-software-lock-in-to-microsoft/</link><description>&lt;p&gt;Today, after the initial surprise caused by knowing that Left party leader and president of the italian region of Puglia, &lt;a href="http://www.nichivendola.it"&gt;Nichi Vendola&lt;/a&gt;, has just signed a &lt;a href="https://stop.zona-m.net/2010/11/italian-left-leader-signs-berlusconi-like-deal-with-microsoft/"&gt;Berlusconi-like deal with Microsoft&lt;/a&gt; offering an explanation that, alas, &lt;a href="https://stop.zona-m.net/2010/11/nichi-vendola-explains-but-does-he-his-berlusconi-like-deal-with-microsoft/"&gt;doesn&amp;rsquo;t really explain much&lt;/a&gt;, we started to know something about the &lt;em&gt;content&lt;/em&gt; of the deal (because the bigger, problem in this whole business, much more of the presence of Microsoft, is lack of transparency).&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 26 Nov 2010 03:50:36 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/11/italian-region-asks-for-help-to-avoid-software-lock-in-to-microsoft/</guid></item><item><title>Teamwork training in Neusiedl</title><link>https://www.databasesandlife.com/coverdale/</link><description>&lt;p&gt;I&amp;rsquo;ve just got back from a 4-day course on working in teams (&amp;ldquo;Erfolgreich Zusammenarbeit im Team&amp;rdquo; by &lt;a href="http://www.coverdale.at/" rel="noopener noreferrer" target="_blank"&gt;Coverdale&lt;/a&gt; for my employer &lt;a href="http://www.s-itsolutions.at/" rel="noopener noreferrer" target="_blank"&gt;s IT Solutions&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;First conclusion -&amp;gt; Top food at &lt;a href="http://www.hotel-wende.at/" rel="noopener noreferrer" target="_blank"&gt;Hotel Wende&lt;/a&gt; in Neusiedl am See.&lt;/p&gt;
&lt;p&gt;I am so tired now, it was much more tiring than I had imagined it would be. Lots of &amp;ldquo;exercises&amp;rdquo; which really required a lot of concentration, especially if one was to learn the maximum possible from them. I must admit I went into it not expecting much (it was a mandatory course) but I tried my best anyway and did actually learn more than I thought i would (i.e. more than zero). (It did start a bit like &lt;a href="http://en.wikipedia.org/wiki/Episode_Four_%28The_Office,_Series_One%29" rel="noopener noreferrer" target="_blank"&gt;S01E04 of the Office UK&lt;/a&gt;, I must admit..)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 26 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/coverdale/</guid></item><item><title>Disable Scan and Fix for Removable Drives in Windows</title><link>https://justingarrison.com/blog/2010-11-26-disable-scan-and-fix-for-removable-drives-in-windows/</link><description>Sometimes you’ll be prompted to scan and fix a removable disk before</description><author>Justin Garrison's Homepage</author><pubDate>Fri, 26 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-11-26-disable-scan-and-fix-for-removable-drives-in-windows/</guid></item><item><title>Nichi Vendola explains (but does he?) his Berlusconi-like deal with Microsoft</title><link>https://stop.zona-m.net/2010/11/nichi-vendola-explains-but-does-he-his-berlusconi-like-deal-with-microsoft/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 26 Nov 2010 00:52:03 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/11/nichi-vendola-explains-but-does-he-his-berlusconi-like-deal-with-microsoft/</guid></item><item><title>An Idea for Navigation Companies</title><link>https://solomon.io/an-idea-for-navigation-companies/</link><description>I have an idea for the GPS companies of the world, companies like Google, Garmin, Magellan and Tom Tom. First, however, I would like to tell a story.</description><author>Sam Solomon</author><pubDate>Thu, 25 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/an-idea-for-navigation-companies/</guid></item><item><title>The Problem with Plans and Ideas</title><link>https://arnorhs.dev/posts/2010-11-25/the-problem-with-plans-and-ideas/</link><description>I've recently been confronted with a problem. I don't have any time. Between my recent and unexpected enrollment into a university level business accelerator , pushing hard to get High Score off the ground and doing various projects on the side to keep me from starving I don't really have any extra time. I don't particularly remember having a lot of free time on my hands in the past (except the time when I went travelling with girlfriend to India) but now things are serious. I have to think really carefully about if I should take on a project with other people.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Thu, 25 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-11-25/the-problem-with-plans-and-ideas/</guid></item><item><title>Italian Left Leader signs Berlusconi-like deal with Microsoft</title><link>https://stop.zona-m.net/2010/11/italian-left-leader-signs-berlusconi-like-deal-with-microsoft/</link><description>&lt;p&gt;&lt;a href="http://www.nichivendola.it"&gt;Nichi Vendola&lt;/a&gt; is president both of south-eastern italian region &lt;a href="http://www.regione.puglia.it/"&gt;Puglia&lt;/a&gt; and of the Italian left party  &lt;a href="http://www.sinistraeliberta.eu/"&gt;Sinistra Ecologia Libertà (SEL or &amp;ldquo;Left, Ecology, Freedom&amp;rdquo; in English)&lt;/a&gt;.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 24 Nov 2010 19:17:11 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/11/italian-left-leader-signs-berlusconi-like-deal-with-microsoft/</guid></item><item><title>Asynch descriptor resize wait event in Oracle</title><link>https://tanelpoder.com/2010/11/23/asynch-descriptor-resize-wait-event-in-oracle/</link><description>&lt;p&gt;A lot of people have started seeing “&lt;strong&gt;asynch descriptor resize&lt;/strong&gt;” wait event in Oracle 11gR2. Here’s my understanding of what it is. Note that I didn’t spend too much time researching it, so some details may be not completely accurate, but my explanation will at least give you an idea of why the heck you suddenly see this event in your database.&lt;/p&gt;
&lt;p&gt;FYI, there’s a short, but incomplete explanation of this wait event also documented in MOS Note &lt;strong&gt;1081977.1&lt;/strong&gt;&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 23 Nov 2010 23:01:05 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/11/23/asynch-descriptor-resize-wait-event-in-oracle/</guid></item><item><title>Three things to not forget to make LibreOffice (and ODF) succeed</title><link>https://stop.zona-m.net/2010/11/three-things-to-not-forget-to-make-libreoffice-and-odf-succeed/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 23 Nov 2010 21:47:31 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/11/three-things-to-not-forget-to-make-libreoffice-and-odf-succeed/</guid></item><item><title>A proposal for effective, volunteer-friendly user support in LibreOffice</title><link>https://stop.zona-m.net/2010/11/a-proposal-for-effective-volunteer-friendly-user-support-in-libreoffice/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 23 Nov 2010 21:42:55 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/11/a-proposal-for-effective-volunteer-friendly-user-support-in-libreoffice/</guid></item><item><title>How to use a WordPress theme or CSS template for your N.nu website</title><link>https://www.jimwestergren.com/how-to-use-a-wordpress-theme-or-css-template-for-your-n-nu-website/</link><description>There are thousands of WordPress themes, CSS templates and other website templates available for free to download and use. Just make sure that you abide by the license which normally is to just keep the credit links in the footer. The existing templates already converted and ready to choose with a click can be seen &amp;#91;...&amp;#93;</description><author>Jim Westergren</author><pubDate>Tue, 23 Nov 2010 11:03:00 GMT</pubDate><guid isPermaLink="true">https://www.jimwestergren.com/how-to-use-a-wordpress-theme-or-css-template-for-your-n-nu-website/</guid></item><item><title>Managing complexity and chaos</title><link>https://peterlyons.com/problog/2010/11/managing-complexity-and-chaos/</link><description>&lt;p&gt;I read somewhere (sorry I've forgotten where by now) that as an engineering, our #1 omnipresent mandate is "manage complexity". I interpret "manage" to mean "reduce" or "prevent" or "minimize" or "mitigate" in this context. When I read this, it resonated very strongly with me.&lt;/p&gt;
&lt;p&gt;I was recently asked for feedback on one of the managers I work with and I thought in many was, in the manager role, the mantra is "manage chaos". I think that fits nicely. When everything is clear, well-understood, prioritized, under control, the team hums along efficiently. As a team gets overwhelmed or sidetracked or confused, chaos ensues, and it seems to me the role of management to prevent/reduce/minimize/mitigate that chaos.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Tue, 23 Nov 2010 06:02:23 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/11/managing-complexity-and-chaos/</guid></item><item><title>Non digital commons a lot more complicated than Free Software</title><link>https://stop.zona-m.net/2010/11/non-digital-commons-a-lot-more-complicated-than-free-software/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 23 Nov 2010 03:22:19 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/11/non-digital-commons-a-lot-more-complicated-than-free-software/</guid></item><item><title>About</title><link>https://nicolaiarocci.com/about/</link><description>&lt;p&gt;Hello there! My name is Nicola, and this is my website. I use it to store my
memories and thoughts, share exciting resources, and post technical content. I
follow the &lt;a href="https://indieweb.org/POSSE"&gt;POSSE&lt;/a&gt; methodology, meaning I share my
content on this website first and only later, eventually, on social media or
other platforms.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a coder at heart author of several &lt;a href="https://nicolaiarocci.com/opensource/"&gt;open source projects&lt;/a&gt;, a &lt;a href="https://mvp.microsoft.com/en-US/mvp/profile/a6892d61-aea0-e511-8114-c4346bac0abc"&gt;Microsoft
MVP&lt;/a&gt;, &lt;a href="https://nicolaiarocci.com/speaking/"&gt;conference speaker&lt;/a&gt;, teacher and consultant. I live in Ravenna,
Italy, where I lead the development of &lt;a href="https://invoicetronic.com/en"&gt;Invoicetronic&lt;/a&gt;, and electronic
invoicing API, and &lt;a href="https://gestionaleamica.com/"&gt;Amica&lt;/a&gt;, a hybrid (cloud and on-premise) accounting app
for Italian small businesses. I also the creator and organizer of
&lt;a href="https://meetup.com/it-IT/devromagna/"&gt;DevRomagna&lt;/a&gt;, the developer community in my area.&lt;/p&gt;</description><author>Nicola Iarocci</author><pubDate>Mon, 22 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://nicolaiarocci.com/about/</guid></item><item><title>BCE, CE, and the new IE</title><link>https://jasoneckert.github.io/myblog/bce-ce-ie/</link><description>&lt;p&gt;I Google everything.  What I find annoying is this:  When you Google something that existed before the Internet and has no ongoing importance today (such as local landmarks that have since disappeared), there is literally NOTHING on the Internet about it.&lt;/p&gt;
&lt;p&gt;For example, Leisure Lodge was a very large and glorious hall on the outskirts of Preston (now a part of Cambridge, Ontario) that was THE place to go from the 1950s to 1970s - they had their own big band group (the John Kostigian orchestra), and in the 1970s, they were the biggest disco joint around (they even hosted the Miss Nude World Competition one year).  It burned down in 1980 and the ruins of it still exist at the edge of the Kinsmen Stadium next to Hwy 401 between Cambridge and Kitchener, Ontario.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Mon, 22 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/bce-ce-ie/</guid></item><item><title>Atomic operations over filesystem and database</title><link>https://www.databasesandlife.com/atomic-operations-over-filesystem-and-database/</link><description>&lt;p&gt;I had the situation recently where I needed a &amp;ldquo;button&amp;rdquo;; when the user clicks the button, then:&lt;/p&gt;
&lt;ul class="tight"&gt;
  &lt;li&gt;
    An "svn up" should occur, to update some XML config files + data files (CSV)
  &lt;/li&gt;
  &lt;li&gt;
    If the config files or CSV files have errors, the operation should be aborted and an error printed
  &lt;/li&gt;
  &lt;li&gt;
    If correct, the CSV data should be imported into the database ready for processing
  &lt;/li&gt;
  &lt;li&gt;
    If correct, the config files should be made available for use
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The config files are a bunch of XML files; each file has a complex structure, and they themselves are in a complex directory structure. One option would be to put them into a database as well but I felt that a simpler solution was just to leave them on the disk where they could be parsed. Directories, files and XML files more naturally fit the hierarchical nature of the configuration in question. I didn&amp;rsquo;t want to have multiple representations of this configuration (one being directories/XML; the other being a database).&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Sun, 21 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/atomic-operations-over-filesystem-and-database/</guid></item><item><title>Italians will die buried under a mountain of cars, but want to continue to produce them</title><link>https://stop.zona-m.net/2010/11/italians-will-die-buried-under-a-mountain-of-cars-but-want-to-continue-to-produce-them/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 19 Nov 2010 21:14:13 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/11/italians-will-die-buried-under-a-mountain-of-cars-but-want-to-continue-to-produce-them/</guid></item><item><title>What is Trashware? A way to save money and pollute less with computers!</title><link>https://stop.zona-m.net/2010/11/what-is-trashware-a-way-to-save-money-and-pollute-less-with-computers/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 19 Nov 2010 20:09:46 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/11/what-is-trashware-a-way-to-save-money-and-pollute-less-with-computers/</guid></item><item><title>Harry Potter and the Deathly Hallows: Part 1</title><link>https://liza.io/harry-potter-and-the-deathly-hallows-part-1/</link><description>&lt;p&gt;C and I (and a friend) went to see Harry Potter and the Deathly Hallows: Part 1 at 12:05am last Thursday. I was so excited that I went into Big W that evening to find a robe and wizard hat. Unfortunately they had neither. Instead I went home with a Harry Potter wand, glasses, and some blue construction paper and star stickers to create my own wizard hat. C was embarrassed to be seen with me, but I let my freak flag fly and actually did wear my semi-home-made costume:
&lt;a href="https://liza.io/images/2010/11/harry-potter-costume.jpg"&gt;&lt;img alt="Harry Potter and the Deathly Hallows Perth" src="https://liza.io/images/2010/11/harry-potter-costume-224x300.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Fri, 19 Nov 2010 18:21:37 GMT</pubDate><guid isPermaLink="true">https://liza.io/harry-potter-and-the-deathly-hallows-part-1/</guid></item><item><title>City Street- Playing with Z-Depth and Ambient Occlusion</title><link>https://blog.yiningkarlli.com/2010/11/city-street-playing-with-z-depth-and-ambient-occlusion.html</link><description>&lt;p&gt;I haven’t managed to make any progress on actually finishing this project since my last post, but I have had a bit of time to play with ambient occlusion and z-depth mapping. So… same render as before, but now with depth of field and some ambient occlusion:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Nov/testrender7_composite_ao_zv2.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Nov/testrender7_composite_ao_zv2.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;…and the z-depth map:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Nov/z.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Nov/z.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;…and the ambient occlusion map. I did the leaves on the trees by transparency mapping the planes where the leaves went on the model, but because of that I wasn’t sure how I was supposed to ambient occlude the trees. So I removed them for the ambient occlusion map:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Nov/a_o.jpeg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Nov/a_o.jpeg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I actually found an alternate way to render out the z-depth map, but I’m not entirely sure this is as physically accurate as the standard way Maya does z-depth:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Nov/z_alt.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Nov/z_alt.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hopefully more soon!&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Fri, 19 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/11/city-street-playing-with-z-depth-and-ambient-occlusion.html</guid></item><item><title>Screenshot Tour: XBMC Media Center 10 Has Add-ons, Skins, and More</title><link>https://justingarrison.com/blog/2010-11-19-screenshot-tour-xbmc-media-center-10-has-add-ons-skins-and-more/</link><description>XBMC has come a long way since its humble beginnings as an Xbox media player.</description><author>Justin Garrison's Homepage</author><pubDate>Fri, 19 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-11-19-screenshot-tour-xbmc-media-center-10-has-add-ons-skins-and-more/</guid></item><item><title>Git-SCM (Part 1)</title><link>https://danielpecos.com/2010/11/18/git-scm-part1/</link><description>&lt;p&gt;One of the key tools of a software project development is the repository where it&amp;rsquo;s hosted. During my experience as software developer I have been working with several flavors, such as &lt;a href="http://msdn.microsoft.com/en-us/vstudio/aa718670.aspx"&gt;Visual SourceSafe&lt;/a&gt;, &lt;a href="http://www.nongnu.org/cvs/"&gt;CVS&lt;/a&gt;, &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt;, and of course, &lt;a href="http://subversion.tigris.org/"&gt;SVN&lt;/a&gt;. But latetly I have found this little jewel called &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Git was initially developed by Linus Torvalds as a result of an unsuccessful research to replace the propietary &lt;a href="http://en.wikipedia.org/wiki/Software_Configuration_Management"&gt;SCM&lt;/a&gt; BitKeeper, used back in 2005 in the Linux Kernel project (kinda strange that the opensource star project was hosted with a propietary software, huh?). Back then, the ability to freely use BitKeeper was withdrawn by its copyright holder, so Linus was forced to find a replacement for it. He was looking for a &lt;a href="http://en.wikipedia.org/wiki/Revision_control"&gt;VCS&lt;/a&gt; with a high performance in the process of applying patches and keeping track of the changes, but he didn&amp;rsquo;t find any opensource solutions that fitted his requirements, so he started the developement of Git (as he says on &lt;a href="http://en.wikipedia.org/wiki/Git_(software)"&gt;Git&amp;rsquo;s Wikipedia entry&lt;/a&gt;, Git was named after himself, because he considers himself an “egoistical bastard, and I name all my projects after myself”; &lt;em&gt;git&lt;/em&gt; is the British English slang word for an stupid or unpleasant person).&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s why its main characteristics are oriented to help the development and management of a huge, distributed and collaborative project like the Linux Kernel. These are the most noticeable of them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Strong support for non-linear development&lt;/li&gt;
&lt;li&gt;Distributed development&lt;/li&gt;
&lt;li&gt;Efficient handling of large projects&lt;/li&gt;
&lt;li&gt;Cryptographic authentication of history&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But for me, the most shocking one is its decentralized structure in distributed development: there is no need for a central repository where all commits are sent by the people working in the project (but still, it is recommended to use a &lt;em&gt;main&lt;/em&gt; branch for that purpose).&lt;/p&gt;
&lt;p&gt;In following posts I will explain how to use Git in the lifecycle of a software project and how can it improve our performance.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Thu, 18 Nov 2010 22:03:11 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2010/11/18/git-scm-part1/</guid></item><item><title>City Street Progress</title><link>https://blog.yiningkarlli.com/2010/11/city-street-progress.html</link><description>&lt;p&gt;I’ve been working on a little city street for a few days now. I want to capture the kind of old European feel that one can find in places like Edinburgh.&lt;/p&gt;

&lt;p&gt;Right now this is about 65% done. I think I’m going to try to make it look like an old postcard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Nov/testrender7_compositev2.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Nov/testrender7_compositev2.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Wed, 17 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/11/city-street-progress.html</guid></item><item><title>How to Cross-Reference Actors/Movies (or Cheat at the Kevin Bacon Game)</title><link>https://justingarrison.com/blog/2010-11-17-how-to-cross-reference-actorsmovies-or-cheat-at-the-kevin-bacon-game/</link><description>If you have ever wanted to cross-reference two actors or crew members</description><author>Justin Garrison's Homepage</author><pubDate>Wed, 17 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-11-17-how-to-cross-reference-actorsmovies-or-cheat-at-the-kevin-bacon-game/</guid></item><item><title>Funny Internet Shakespeare typo</title><link>https://jasoneckert.github.io/myblog/funny-internet-shakespeare-typo/</link><description>&lt;p&gt;I’m currently finishing the 3rd edition of my Guide To Linux Certification for Cengage.  In Chapter 7, I used the following text from Shakespeare in the section on the stream editor (sed):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    Two households, both alike in dignity,
    In fair Verona, where we lay our scene,
    From ancient grudge break to new mutiny,
    Where civil blood makes civil hands unclean.
    From forth the fatal loins of these two foes
    A pair of star-cross’d lovers take their life;
    Whole misadventured piteous overthrows
    Do with their death bury their parents’ strife.
    The fearful passage of their death-mark’d love,
    And the continuance of their parents’ rage,
    Which, but their children’s end, nought could remove,
    Is now the two hours’ traffic of our stage;
    The which if you with patient ears attend,
    What here shall miss, our toil shall strive to mend.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I originally grabbed that passage from the Internet (copy-and-paste is easier than typing), but the technical editor caught a typo (Whole misadventured piteous overthrows should be Whose misadventured piteous overthrows). I verified it on the Internet and just thought it was one of those weird Olde English things, but the copyeditor verified it as a typo (she has an English degree) and also found out that it was a simple transcription typo (Whose &amp;ndash;&amp;gt; Whole) that managed to spread quickly across the Internet because most people prefer to copy-and-paste Shakespeare rather than type it out manually!  Hilarious.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Wed, 17 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/funny-internet-shakespeare-typo/</guid></item><item><title>What NASA's big announcement SHOULD have been</title><link>https://liza.io/what-nasas-big-announcement-should-have-been/</link><description>&lt;p&gt;NASA&amp;rsquo;s big announcement about an &amp;ldquo;exceptional object in our cosmic neighborhood&amp;rdquo; was interesting - I bet it was even exciting if you&amp;rsquo;re an astrophysicist or take a deep-rooted interest in black holes. But for me it was a bit of a letdown. I was hoping for something &lt;em&gt;BIG&lt;/em&gt;. Not only that, but they aren&amp;rsquo;t even sure if it&amp;rsquo;s a black hole at all - putting the cart before the horse, don&amp;rsquo;t you think? After feeling a bit disappointed after watching the press conference live on NASA TV (only three people called in with questions&amp;hellip;) I pondered over some possible announcements they &lt;em&gt;could&lt;/em&gt; have made that would &lt;em&gt;really&lt;/em&gt; be exciting.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Tue, 16 Nov 2010 15:38:26 GMT</pubDate><guid isPermaLink="true">https://liza.io/what-nasas-big-announcement-should-have-been/</guid></item><item><title>Tapestry and JMeter</title><link>https://www.craigpardey.com/post/2010-11-16-tapestry-and-jmeter/</link><description>&lt;p&gt;I was recently tasked with setting up some load tests for our Tapestry (4.1.6)
web application. I chose to use &lt;a href="http://jakarta.apache.org/jmeter/"&gt;Apache JMeter&lt;/a&gt; because it is open-source and is
flexible enough to do what we needed, and doesn&amp;rsquo;t cost $12,000/month like some
load testing tools.&lt;/p&gt;
&lt;p&gt;I set up an HTTP Proxy Manager to record a simple navigation through the site
and reconfigured my browser to use the proxy. The proxy recorded the requests
without a hitch.&lt;/p&gt;</description><author>Craig Pardey</author><pubDate>Tue, 16 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.craigpardey.com/post/2010-11-16-tapestry-and-jmeter/</guid></item><item><title>Removing blemishes in Adobe Camera RAW</title><link>https://liza.io/removing-blemishes-in-adobe-camera-raw/</link><description>&lt;p&gt;A while ago I took this photo of C and he&amp;rsquo;s &lt;em&gt;finally&lt;/em&gt; allowed me to post it up. I was practicing removing blemishes in Adobe Camera RAW and am quite proud of my handiwork:&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Mon, 15 Nov 2010 15:43:12 GMT</pubDate><guid isPermaLink="true">https://liza.io/removing-blemishes-in-adobe-camera-raw/</guid></item><item><title>Final Report from fOSSa 2010 in Grenoble</title><link>https://stop.zona-m.net/2010/11/final-report-from-fossa-2010-in-grenoble/</link><description>&lt;p&gt;The &lt;a href="http://fossa2010.inrialpes.fr"&gt;fOSSa 2010&lt;/a&gt; conference in Grenoble did a good job to prove (since it&amp;rsquo;s still sorely needed, see conclusions below) that Free/Open Source Software (FOSS) isn&amp;rsquo;t some unreliable toy for amateurs.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Mon, 15 Nov 2010 11:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/11/final-report-from-fossa-2010-in-grenoble/</guid></item><item><title>BGP Error Handling and Enhancements Post IETF-79</title><link>https://rob.sh/post/194/</link><description>&lt;p&gt;With &lt;a href="http://ietf.org"&gt;IETF 79&lt;/a&gt; happening last week - I think one of the great things that's coming out of the IDR work leading up to the meeting has been that quite a few drafts have been written around the requirements that exist in BGP for better error handling. I've been vocal about this before, of course, so it's not that surprising that I'm (yet again) banging the drum for this cause, however, we are getting somewhere finally. To that end, I was wanting to air some views on a couple of the drafts that either have benefits to the operational community, or don't quite hit the mark.&lt;/p&gt;</description><author>rob.sh</author><pubDate>Mon, 15 Nov 2010 00:41:46 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/194/</guid></item><item><title>Octotweets</title><link>https://michael.mior.ca/blog/octotweets/</link><description>&lt;p&gt;Below is a few more links from my latest tweets from the end of October.
As always, you can follow me as &lt;a href="https://www.twitter.com/michaelmior"&gt;@michaelmior&lt;/a&gt; on Twitter.
For a list of all the links I’ve shared, you can view &lt;a href="http://www.delicious.com/michaelmior"&gt;my delicious page&lt;/a&gt;.
This list is generated by the wonderful &lt;a href="https://twitter.com/packratius"&gt;Packrati.us&lt;/a&gt; app.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://octobot.taco.cat/"&gt;Octobot - High Throughput Distributed Task Queue&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I will admit that this one makes the list partially because the project’s awesome URL.
But of course, it’s also very useful.
Octobot is capable of connecting to several task queues to process jobs with high throughput.
This is great for those of you developing web apps.
Task queues are one the best ways to hide high-latency operations from your users.
One of the great things about Octobot is that it supports so many different message queues.
Definitely worth a look.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.kriesi.at/archives/15-useful-wordpress-functions-you-probably-dont-know"&gt;15 useful WordPress Functions you probably don’t know&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I certainly didn’t know many of the useful functions from this list.
It’s a great read for avid WordPress developers.
You may just discover an easier way to implement a feature you’ve been looking for.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://web.archive.org/web/20101025124303/http://teddziuba.com/2010/10/taco-bell-programming.html"&gt;Taco Bell Programming&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This short but clever piece by Ted Dziuba advocates the revival of the Unix tool philosophy for modern tasks.
His brief example uses find and xargs to process a tree of files in parallel.
While I don’t think we need to start writing web apps using awk scripts, some of the ideas he mentioned could save you a lot of time in the future.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://techcrunch.com/2010/10/24/firesheep-in-wolves-clothing-app-lets-you-hack-into-twitter-facebook-accounts-easily/"&gt;Firesheep in Wolves’ Clothing: Extension Lets You Hack Into Twitter, Facebook Accounts Easily&lt;/a&gt;
Session hijacking is nothing new, but it’s almost scary how easy Firesheep exploits this attack vector.
Many sites have begun to patch themselves to prevent this attack.
Initially, connecting to a public Wi-Fi network would allow you to see who is logged in to various popular websites and with a single click, steal their login information.
Check out &lt;a href="http://research.zscaler.com/2010/11/blacksheep-tool-to-detect-firesheep.html"&gt;BlackSheep&lt;/a&gt; for a way to keep yourself safe by detecting FireSheep.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.webfontawards.com/"&gt;The Web Font Awards&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Typography on the Web has long been a complicated art.
Unpredictable font stacks could create a different viewing experience depending on the browser and operating system visitors used.
Fortunately, web fonts now allow Web designers to use almost any font they desire.
Check out this great showcase of Web typography!&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><author>Michael Mior</author><pubDate>Sun, 14 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://michael.mior.ca/blog/octotweets/</guid></item><item><title>Perth Dachshund UN - 47 Dachshunds having a vigorous debate</title><link>https://liza.io/perth-daschund-un-47-daschunds-having-a-vigorous-debate/</link><description>&lt;p&gt;Today I went to Dachshund UN, a live art presentation in Northbridge. A replica of the UN office in Geneva was set up and at 3pm 47 Dachshunds representing each country&amp;rsquo;s delegates for the Commission of Human Rights were put in their respective places.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sat, 13 Nov 2010 16:52:36 GMT</pubDate><guid isPermaLink="true">https://liza.io/perth-daschund-un-47-daschunds-having-a-vigorous-debate/</guid></item><item><title>Life after Java?</title><link>https://www.craigpardey.com/post/2010-11-13-life-after-java/</link><description>&lt;p&gt;There has been a lot of talk lately that Java is on its way out, mostly fueled
by &lt;a href="http://weblogs.java.net/blog/fabriziogiudici/archive/2010/10/21/apple-possibly-deprecated-java-community-nice-test-you"&gt;Apple deprecatingJava&lt;/a&gt;, and by
&lt;a href="http://www.theregister.co.uk/2010/11/10/apache_to_quit_jcp/"&gt;Apache threateningto quit Java&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not crying Chicken Little just yet, but perhaps it&amp;rsquo;s time to start looking
for the Next Big Thing.  There are certainly a lot of contenders out there:
Ruby (and Rails), Scala, Groovy (and Grails).  My guess is there&amp;rsquo;ll be a
couple of false starts before a clear winner is declared.&lt;/p&gt;</description><author>Craig Pardey</author><pubDate>Sat, 13 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.craigpardey.com/post/2010-11-13-life-after-java/</guid></item><item><title>Different Scales by David Keenan</title><link>https://ho.dges.online/words/commonplace/different-scales-by-david-keenan/</link><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;We all live out our unhappiness on different scales&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;</description><author>ho.dges.online</author><pubDate>Sat, 13 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://ho.dges.online/words/commonplace/different-scales-by-david-keenan/</guid></item><item><title>The connections among Education, Green ICT and Free Software</title><link>https://stop.zona-m.net/2010/11/the-connections-among-education-green-ict-and-free-software/</link><description>&lt;p&gt;During the &lt;a href="http://fossa2010.inrialpes.fr"&gt;fOSSa 2010&lt;/a&gt; conference in Grenoble, several speakers talked about how much Free/Open Source Software (FOSS) is important in two fields that are strictly related for the future of our society: education and environmental sustainability. This is a synthesis of the most important points that emerged in those talks (My full fOSSa report is in a &lt;a href="https://stop.zona-m.net/2010/11/final-report-from-fossa-2010-in-grenoble/"&gt;separate page&lt;/a&gt;).&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 12 Nov 2010 23:30:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/11/the-connections-among-education-green-ict-and-free-software/</guid></item><item><title>[Ruby] Releasing Ssync - An Optimised S3 Sync Tool Using the Power of Unix!</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/ruby-releasing-ssync-an-optimised-s3-sync-tool-using-the-power-of-unix</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Fri, 12 Nov 2010 10:15:41 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/ruby-releasing-ssync-an-optimised-s3-sync-tool-using-the-power-of-unix</guid></item><item><title>What can all managers learn from Free, Open Source Software?</title><link>https://stop.zona-m.net/2010/11/what-can-all-managers-learn-from-free-open-source-software/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 11 Nov 2010 18:20:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/11/what-can-all-managers-learn-from-free-open-source-software/</guid></item><item><title>Back at it!</title><link>https://etodd.io/2010/11/11/back-at-it/</link><description>&lt;p&gt;That's right kids. I's back with a new game project. I will post these two tantalizing morsels for you. Let the wild speculation begin!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://etodd.io/assets/parkourninja.jpg"&gt;&lt;img alt="" class="aligncenter size-full wp-image-233" src="https://etodd.io/assets/parkourninja.jpg" title="Parkour Ninja splash" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="video"&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;I realize the chill music in the video doesn't exactly match the motif of the above image, or the whole &lt;em&gt;game&lt;/em&gt; really, but hey, it's just a tech demo. No need to start murdering people just yet.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Thu, 11 Nov 2010 04:15:36 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/11/11/back-at-it/</guid></item><item><title>Pre-ordered Harry Potter tickets. Need wizard's hat.</title><link>https://liza.io/pre-ordered-harry-potter-tickets-need-wizards-hat/</link><description>&lt;p&gt;I just pre-ordered tickets to see Harry Potter and the Deathly Hallows: Part 1 at 12:05am on Thursday, November 18th - the opening night.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Wed, 10 Nov 2010 11:10:32 GMT</pubDate><guid isPermaLink="true">https://liza.io/pre-ordered-harry-potter-tickets-need-wizards-hat/</guid></item><item><title>Circular dependencies on Foreign Key constraints (Oracle)</title><link>https://www.databasesandlife.com/circular-dependencies-on-foreign-key-constraints-oracle/</link><description>&lt;p&gt;Sometimes it&amp;rsquo;s valid to have tables that reference one another. For example:&lt;/p&gt;
&lt;ul class="tight"&gt;
  &lt;li&gt;
    A &lt;strong&gt;photo &lt;/strong&gt;table stores photos, each of these photos &lt;strong&gt;belongs in a folder&lt;/strong&gt;
  &lt;/li&gt;
  &lt;li&gt;
    A &lt;strong&gt;folder &lt;/strong&gt;table, but each folder has mandatory (not null) &lt;strong&gt;"cover" photo&lt;/strong&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So both tables reference one another, but how do you create the tables, and how do you insert data?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you try and create either of the tables, the other would need to exist in order to create the table with the foreign key constraint. The solution is to firstly create both tables without the foreign key constraints and secondly &amp;ldquo;alter&amp;rdquo; the tables to add the foreign key constraints.&lt;/li&gt;
&lt;li&gt;If you try and insert a photo, the folder would need to exist; if you try and insert a folder then its cover photo would already need to exist. The solution here is to create the foreign keys with &amp;ldquo;&lt;strong&gt;initially deferred deferrable&lt;/strong&gt;&amp;rdquo;; then the foreign key constraints are checked at commit-time rather than insert-time. You can insert the rows, in any order, and only when you do a commit will the system check that the constraints are not violated.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There&amp;rsquo;s a perfect explanation here:
&lt;a href="http://infolab.stanford.edu/~ullman/fcdb/oracle/or-triggers.html#deferring%20constraint%20checking" rel="noopener noreferrer" target="_blank"&gt;http://infolab.stanford.edu/~ullman/fcdb/oracle/or-triggers.html&lt;/a&gt;&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 09 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/circular-dependencies-on-foreign-key-constraints-oracle/</guid></item><item><title>Manually Restore System Files from Your Windows Installation Media</title><link>https://justingarrison.com/blog/2010-11-09-manually-restore-system-files-from-your-windows-installation-media/</link><description>If you’ve ever had a missing or corrupt system file in Windows</description><author>Justin Garrison's Homepage</author><pubDate>Tue, 09 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-11-09-manually-restore-system-files-from-your-windows-installation-media/</guid></item><item><title>JMX query in Python (CPython)</title><link>https://blog.nobugware.com/post/2010/11/08/jmx-query-python-cpython/</link><description>JMX had good intentions but the API is only implemented in Java, a Java product for Java, with no access to the outside world.
Jython was one of the solution but many times I had needed to call JMX from a CPython.
Jpype solved this problem and works extremely well.
Just install Jpype then try something like this:
The execution is really really fast, faster than a jvm run ?? and memory usage is really really slow !</description><author>Fabrice Aneche</author><pubDate>Mon, 08 Nov 2010 23:30:03 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2010/11/08/jmx-query-python-cpython/</guid></item><item><title>Ebony &amp;amp; Ivory makeup launch and Slovakian ballet</title><link>https://liza.io/ebony-ivory-makeup-launch-and-slovakian-ballet/</link><description>&lt;p&gt;It&amp;rsquo;s been a busy weekend of makeup and Slovakian hunks.&lt;/p&gt;
&lt;h2 id="ebony--ivory-makeup-launch"&gt;Ebony &amp;amp; Ivory makeup launch&lt;/h2&gt;
&lt;p&gt;A while ago I was invited by my wonderful hairdresser to come to the Ebony &amp;amp; Ivory makeup launch. I of course said yes - what kind of a horrible person would I be if I passed up the opportunity to play with a new line of makeup while being offered free food and champagne and getting to watch makeovers? (As a note I should addI don&amp;rsquo;t really like champagne&amp;hellip;and I didn&amp;rsquo;t really eat much of the food, but it was a great thought in general)&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Mon, 08 Nov 2010 15:41:58 GMT</pubDate><guid isPermaLink="true">https://liza.io/ebony-ivory-makeup-launch-and-slovakian-ballet/</guid></item><item><title>Clock Miniproject</title><link>https://blog.yiningkarlli.com/2010/11/clock-miniproject.html</link><description>&lt;p&gt;Over the weekend I decided to do a little mini-project to try out some new tricks I’ve learned with rendering. I decided to try to make as photorealistic of an image as possible of a clock. Here’s what I came up with:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Nov/testrender_composite.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Nov/testrender_composite.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The clock face is noticeably pixelated; I’m not entirely sure why that is. For some reason Mental Ray is not sampling the texture file at a very high frequency, I’ll work on that next I suppose.&lt;/p&gt;

&lt;p&gt;A little breakdown video of the compositing that went into the clock:&lt;/p&gt;

&lt;div class="embed-container"&gt;Clock Rendering/Compositing Breakdown&lt;/div&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Mon, 08 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/11/clock-miniproject.html</guid></item><item><title>Consolidate Movie Collections in XBMC with Movie Sets</title><link>https://justingarrison.com/blog/2010-11-08-consolidate-movie-collections-in-xbmc-with-movie-sets/</link><description>XBMC already has an advanced movie library that can gather fan art</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 08 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-11-08-consolidate-movie-collections-in-xbmc-with-movie-sets/</guid></item><item><title>How to Recover Specific Files from a Windows System Image</title><link>https://justingarrison.com/blog/2010-11-08-how-to-recover-specific-files-from-a-windows-system-image/</link><description>Windows provides a fail safe way of recovering your entire hard drive</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 08 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-11-08-how-to-recover-specific-files-from-a-windows-system-image/</guid></item><item><title>Telus fail</title><link>https://www.craigpardey.com/post/2010-11-06-telus-fail/</link><description>&lt;p&gt;A few months ago I bought an HTC Desire from Telus. While I loved the phone,
it had problems from the beginning. The keyboard would regularly freeze mid-
email/sms and the only way to revive the device was to pull out the battery
and restart the phone.&lt;/p&gt;
&lt;p&gt;It would often reboot when an incoming call was ringing. This is a major
failure for a phone - at the very least it should be able to accept phone
calls.&lt;/p&gt;</description><author>Craig Pardey</author><pubDate>Sat, 06 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.craigpardey.com/post/2010-11-06-telus-fail/</guid></item><item><title>Hermit Crab</title><link>https://blog.yiningkarlli.com/2010/11/hermit-crab.html</link><description>&lt;p&gt;The hermit crab is complete!&lt;/p&gt;

&lt;div class="embed-container"&gt;Hermit Crab Redux&lt;/div&gt;

&lt;p&gt;Modeled in Maya, textured in Mudbox, rendered with MentalRay.&lt;/p&gt;

&lt;p&gt;I’m perfectly aware that no hermit crab would ever actually live in a conch shell that large, but I thought the image of a small crab in a huge shell was amusing.&lt;/p&gt;

&lt;p&gt;Some stills from some different angles…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Nov/1.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Nov/1.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Nov/2.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Nov/2.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Nov/3.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Nov/3.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the title “redux” suggests, the crab above is actually the second version of the hermit crab I’ve made. I originally finished about a week earlier with a different version, but then after getting some suggestions from Professor Scott White, my 3D modeling professor, I decided to redesign the conch shell. Here’s what Hermit Crab Mark I looked like:&lt;/p&gt;

&lt;div class="embed-container"&gt;Hermit Crab&lt;/div&gt;

&lt;p&gt;I actually still want to change some things. If I have time, I’m going to go back and change the displacement mapping on the conch to get the groves to all go in a more uniform direction. Also 9 seconds into the turntable, you might notice there’s a slight shiny spot on the conch. That’s a mistake I made in the specular map that I definitely want to fix. I also want to try placing some small low intensity lights really close to the crab’s eyes to bring out the gloss that’s visible in the Mark I crab. In the Mark II crab, the shadow from the flaring part of the conch makes the crab’s eyes look matte. The crab’s claws need some color tweaking as well; the color doesn’t quite perfectly match the rest of the crab.&lt;/p&gt;

&lt;p&gt;The DMD director, Amy Calhoun, told me that no modeler is ever satisfied with a model. So true.&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Sat, 06 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/11/hermit-crab.html</guid></item><item><title>Link found: Clojure Web Infrastructure</title><link>https://arnorhs.dev/posts/2010-11-06/link-found-clojure-web-infrastructure/</link><description>This article was posted on Hacker News yesterday. It explains/lists the Clojure web stack. When I started playing with Clojure, I had a very hard time grasping an overview of the libraries out there, this post would have helped me a great deal. There are also some things there that I didn't know about.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sat, 06 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-11-06/link-found-clojure-web-infrastructure/</guid></item><item><title>A little new feature for shared pool geeks :-)</title><link>https://tanelpoder.com/2010/11/04/a-little-new-feature-for-shared-pool-geeks/</link><description>&lt;p&gt;If you’ve taken any shared pool dumps from 11g+ databases lately, you might have wondered about what all the memory allocation reason codes like &lt;code&gt;SQLA^ea880c38&lt;/code&gt;, &lt;code&gt;KGLS^da11791e&lt;/code&gt; might mean.&lt;/p&gt;
&lt;p&gt;Oracle 11g has introduced a little improvement in how library cache manager allocates shared pool chunks for its objects.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an excerpt from a shared pool heap dump, but this is visible also from X$KSMSP (you should be very careful when thinking of running shared pool heap-dumps or querying X$KSMSP in busy production databases as they may hang your instance for a while).&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 05 Nov 2010 03:22:53 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/11/04/a-little-new-feature-for-shared-pool-geeks/</guid></item><item><title>1k Reputation on stackoverflow.com</title><link>https://www.databasesandlife.com/1k-reputation-on-stackoverflow-com/</link><description>&lt;p&gt;A few weeks ago I got really into &lt;a href="http://stackoverflow.com/" rel="noopener noreferrer" target="_blank"&gt;stackoverflow.com&lt;/a&gt;, the question/answer site for programming:&lt;/p&gt;
&lt;div style="text-align: center; margin-bottom: 20px;"&gt;
  &lt;a href="http://stackoverflow.com/users/220627/adrian-smith"&gt;&lt;br /&gt; &lt;img alt="Adrian Smith on stackoverflow.com" height="58" src="https://stackoverflow.com/users/flair/220627.png" width="208" /&gt;&lt;br /&gt; &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;But now I&amp;rsquo;ve got a bit bored of it. If you want to achieve reputation, it seems you have to take the following things into account:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;People will only vote up your answers who are able to see that your answer is correct; therefore common topics or easy topics (such as simple SQL questions) will get more votes and therefore reputation points than something which requires more detailed knowledge such as Oracle optimization tips or Lucene full-text search indexing strategies. (Example of a &lt;a href="http://stackoverflow.com/questions/3996243/will-this-regex-patterns-catch-all-the-needed-sql-injections/3996279#3996279" rel="noopener noreferrer" target="_blank"&gt;popular answer&lt;/a&gt;, example of &lt;a href="http://stackoverflow.com/questions/3658141/is-it-possible-to-re-generate-lucene-index-in-background/3942685#3942685" rel="noopener noreferrer" target="_blank"&gt;non-popular answer&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Obviously once a question has been correctly answered, there&amp;rsquo;s no point in answering it again. Therefore people tend to surf the newest questions, looking for things to answer. Therefore if you answer a really old question, even if it&amp;rsquo;s still valid and hasn&amp;rsquo;t been answered, nobody will see it and vote up your answer and you won&amp;rsquo;t get points.&lt;/li&gt;
&lt;li&gt;People looking at a question, if there are 3 of 4 answers, they will vote up one of them if they are correct. If yours isn&amp;rsquo;t there yet, you don&amp;rsquo;t get voted up (yet). Therefore you have to answer quickly. Answering quickly is probably the exact opposite of answering in a reflected and considered way, with a lot of detail, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So basically you have the situation that, in order to gain points, you have to keep on refreshing the &amp;ldquo;newest questions&amp;rdquo; page, find a really easy question which anyone could answer, and then answer it in a really non-detailed way.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 05 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/1k-reputation-on-stackoverflow-com/</guid></item><item><title>The Web is Bigger Then You Think</title><link>https://boyter.org/2010/11/web-bigger/</link><description>&lt;p&gt;About two years ago &lt;a href="http://googleblog.blogspot.com/2008/07/we-knew-web-was-big.html"&gt;Google&lt;/a&gt; announced (probably to take some of the wind out of Cuil&amp;rsquo;s sails) that they had found over 1 trillion unique URL&amp;rsquo;s on the web. Keep in mind that not all of those are unique as some pages could have multiple URL&amp;rsquo;s but its still a &lt;a href="http://www.imdb.com/title/tt0445934/quotes?qt0441034"&gt;mind bottlingly&lt;/a&gt; large number.&lt;/p&gt;
&lt;p&gt;I never really realised the scale of the web though till I started crawling it myself. Not armed with billions, or even millions of dollars I am doing this on the cheap but you can still suck down a large amount of stuff. The initial Google index had about 26 million pages and I always thought this was a fairly good size to start with. After all, if you can crawl 26 million pages you should have gotten a representative view of the web right?&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Thu, 04 Nov 2010 00:15:47 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/11/web-bigger/</guid></item><item><title>Why I Chose Android</title><link>https://honza.pokorny.ca/2010/11/why-i-chose-android/</link><description>&lt;p&gt;Recently, we have heard that the Android operating system has the largest
market share in the US, and is set to take over the whole world. Personally, I
chose Android long before it was this popular. Why?&lt;/p&gt;
&lt;h2 id="background"&gt;Background&lt;/h2&gt;
&lt;p&gt;I won&amp;rsquo;t bore you with my personal history, but I&amp;rsquo;d like to say a few things.
I&amp;rsquo;m a programmer and like to tweet things. If there isn&amp;rsquo;t an application that
does the job, I write it myself. Couple years ago, I was given the then amazing
iPhone 3G. I was thrilled. Everyone wanted one, and I had it.&lt;/p&gt;
&lt;h2 id="motorola-droid"&gt;Motorola Droid&lt;/h2&gt;
&lt;p&gt;I sold the iPhone, and bought a Motorola Droid. Why? It&amp;rsquo;s actually pretty
simple. I don&amp;rsquo;t like closed systems. If you want to develop an application for
the iPhone, you have to buy an Apple computer. You have to use XCode, the
objective-C IDE. And only after your application gets approved, you can use it
on your phone. I don&amp;rsquo;t like the idea of spending an upwards of $1,000 to get an
underpowered machine just to be able to write an app.&lt;/p&gt;
&lt;h2 id="blackberry"&gt;Blackberry&lt;/h2&gt;
&lt;p&gt;After deciding, I wanted to get off the iPhone train, I started looking around
for a new smartphone. The first choice was Blackberry. A serious Canadian
company, business-class smartphones, good prices, &amp;hellip; What&amp;rsquo;s not to like? Well,
it turns out that you need Microsoft Windows in order to properly develop and
test your Blackberry application. Being an avid Linux user, I very much
disliked the idea of going back to Windows just because of Blackberry.&lt;/p&gt;
&lt;h2 id="enter-android"&gt;Enter Android&lt;/h2&gt;
&lt;p&gt;Android was my next choice. I browsed over to the developers&amp;rsquo; website to see if
I can make apps for this platform. When I saw that Windows, Mac OS and Linux
were supported, I almost cried for joy! I learned that Android runs on the
Linux kernel, apps are written in Java using the open source SDK.&lt;/p&gt;
&lt;h2 id="google"&gt;Google&lt;/h2&gt;
&lt;p&gt;Yes, Google is behind this whole thing. You may not exactly care unless you use
their services. The integration of Google services into Android is phenomenal.
When you first turn on your device, you are asked to enter your Google account
information, and the device takes care of the rest. Your email, contacts,
calendar, Google Talk, etc. are set up automatically. Genius.&lt;/p&gt;</description><author>Honza Pokorný</author><pubDate>Wed, 03 Nov 2010 03:30:00 GMT</pubDate><guid isPermaLink="true">https://honza.pokorny.ca/2010/11/why-i-chose-android/</guid></item><item><title>It Doesn't Hurt to Make People Smile</title><link>https://arnorhs.dev/posts/2010-11-03/it-doesnt-hurt-to-make-people-smile/</link><description>I just received the monthly Dreamhost newsletter - the November 2010 edition, to be exact. As usually it made me smile. It starts out like this:</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Wed, 03 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-11-03/it-doesnt-hurt-to-make-people-smile/</guid></item><item><title>NaNoWriMo has begun. Day 1 - 2,583 Words</title><link>https://liza.io/nanowrimo-has-begun-day-1-2583-words/</link><description>&lt;p&gt;National Novel Writing Month (NaNoWriMo) started today and I was lucky enough to be &lt;em&gt;sick&lt;/em&gt; on the day that I was meant to write my first 2,000 words. Thankfully dedication prevailed and I ended up writing a bit over 2,500 words to kick off my novel. Off to a pretty good start! The working title for my novel is Cambion and it is a character-driven story about the Stockholm Syndrome in an abduction situation.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Mon, 01 Nov 2010 17:54:12 GMT</pubDate><guid isPermaLink="true">https://liza.io/nanowrimo-has-begun-day-1-2583-words/</guid></item><item><title>An Epiphany About Coaching</title><link>https://james-carr.org/posts/an-epiphany-about-coaching/</link><description>True knowledge exists in knowing that you know nothing. - Socrates
As those of you who read my blog often know, I recently made a career jump to a contracting firm to consult at different large-scale organizations. To my dismay, my first assignment has been more as a developer than as a coach/scrum master, but I felt this would also be a good opportunity to observe and understand how to coach effectively.</description><author>James Carr</author><pubDate>Mon, 01 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://james-carr.org/posts/an-epiphany-about-coaching/</guid></item><item><title>Sherman Tanks for Nanocon</title><link>https://benovermyer.com/blog/2010/11/sherman-tanks-for-nanocon/</link><description>&lt;p&gt;We needed some Shermans painted up in winter camo for Nanocon this coming weekend. This is the result of about 2 hours’ effort.&lt;/p&gt;
&lt;p&gt;I don’t care for the amount of work involved in extracting certain bits from the Flames of War metal sprues, but I have to say that the models themselves are gorgeous. However, these babies aren’t for play in Flames of War. These will be used for Silver Gryphon Games’ &lt;em&gt;Panzer Reich&lt;/em&gt; playtest.&lt;/p&gt;




&lt;div class="dress-image"&gt;
    &lt;img alt="A photo of some model tanks" src="https://benovermyer.com/blog/2010/11/sherman-tanks-for-nanocon/&amp;#x2F;&amp;#x2F;benovermyer.com&amp;#x2F;processed_images&amp;#x2F;tanks-01.de9b69a83beca20c.jpg" /&gt;
    
&lt;/div&gt;

&lt;p&gt;I really need to get a better “photo studio.” The cloth I used as a backdrop is awful for light-centering.&lt;/p&gt;




&lt;div class="dress-image"&gt;
    &lt;img alt="A photo of some model tanks, from a different angle" src="https://benovermyer.com/blog/2010/11/sherman-tanks-for-nanocon/&amp;#x2F;&amp;#x2F;benovermyer.com&amp;#x2F;processed_images&amp;#x2F;tanks-02.2439012932286915.jpg" /&gt;
    
&lt;/div&gt;</description><author>Ben Overmyer's Site</author><pubDate>Mon, 01 Nov 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2010/11/sherman-tanks-for-nanocon/</guid></item><item><title>The Dangers of strlen</title><link>https://michael.mior.ca/blog/dangers-of-strlen/</link><description>&lt;p&gt;I’ll keep this post brief, but I wanted to share something I just found about the C &lt;code&gt;strlen&lt;/code&gt; function. It’s slow. It can make a big difference in program execution time.&lt;/p&gt;
&lt;p&gt;For example, I had a function in an external which consumes a string, so I call &lt;code&gt;strdup&lt;/code&gt; each time around a loop to make sure I have a copy for the next iteration.&lt;/p&gt;
&lt;p&gt;In my case, the function I was calling already had the length of the string passed in as a parameter. This means &lt;code&gt;s2 = strdup(s1);&lt;/code&gt; can be rewritten as&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-c"&gt;s2 = (&lt;span class="keyword"&gt;char&lt;/span&gt;*) &lt;span class="built_in"&gt;malloc&lt;/span&gt;(length);
&lt;span class="built_in"&gt;memcpy&lt;/span&gt;(s2, s1, length);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that I used memcpy instead of strcpy.
Since we already have the length of the string, this also avoids the loop in strcpy which would be required to find the end of the string.
These kind of optimizations may seem like splitting hairs, but they can make a big difference in the overall runtime of your code.
For example, with the optimization shown above, I was able to reduce the runtime of a particular loop by around 15%.&lt;/p&gt;
&lt;p&gt;Know of any other common functions with performance problems people may not be aware of? Share your inside info in the comments!&lt;/p&gt;
&lt;p&gt;Aside: While researching the performance of strlen, I came across this interesting forum post which provides an efficient strlen implementation from Knuth.&lt;/p&gt;
&lt;h2 id="update-june-14-2012"&gt;Update: June 14, 2012&lt;/h2&gt;
&lt;p&gt;GCC 4.7.1 has an optimization to address this very issue. See the snippet below from the release notes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A string length optimization pass has been added…The pass can e.g. optimize&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-c"&gt;&lt;span class="function"&gt;&lt;span class="keyword"&gt;char&lt;/span&gt; *&lt;span class="title"&gt;bar&lt;/span&gt; &lt;span class="params"&gt;(&lt;span class="keyword"&gt;const&lt;/span&gt; &lt;span class="keyword"&gt;char&lt;/span&gt; *a)&lt;/span&gt;
&lt;/span&gt;{
  &lt;span class="keyword"&gt;size_t&lt;/span&gt; l = &lt;span class="built_in"&gt;strlen&lt;/span&gt; (a) + &lt;span class="number"&gt;2&lt;/span&gt;;
  &lt;span class="keyword"&gt;char&lt;/span&gt; *p = &lt;span class="built_in"&gt;malloc&lt;/span&gt; (l); &lt;span class="keyword"&gt;if&lt;/span&gt; (p == &lt;span class="literal"&gt;NULL&lt;/span&gt;) &lt;span class="keyword"&gt;return&lt;/span&gt; p;
  &lt;span class="built_in"&gt;strcpy&lt;/span&gt; (p, a); &lt;span class="built_in"&gt;strcat&lt;/span&gt; (p, &lt;span class="string"&gt;"/"&lt;/span&gt;); &lt;span class="keyword"&gt;return&lt;/span&gt; p;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;into:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-c"&gt;&lt;span class="function"&gt;&lt;span class="keyword"&gt;char&lt;/span&gt; *&lt;span class="title"&gt;bar&lt;/span&gt; &lt;span class="params"&gt;(&lt;span class="keyword"&gt;const&lt;/span&gt; &lt;span class="keyword"&gt;char&lt;/span&gt; *a)&lt;/span&gt;
&lt;/span&gt;{
  &lt;span class="keyword"&gt;size_t&lt;/span&gt; tmp = &lt;span class="built_in"&gt;strlen&lt;/span&gt; (a);
  &lt;span class="keyword"&gt;char&lt;/span&gt; *p = &lt;span class="built_in"&gt;malloc&lt;/span&gt; (tmp + &lt;span class="number"&gt;2&lt;/span&gt;); &lt;span class="keyword"&gt;if&lt;/span&gt; (p == &lt;span class="literal"&gt;NULL&lt;/span&gt;) &lt;span class="keyword"&gt;return&lt;/span&gt; p;
  &lt;span class="built_in"&gt;memcpy&lt;/span&gt; (p, a, tmp); &lt;span class="built_in"&gt;memcpy&lt;/span&gt; (p + tmp, &lt;span class="string"&gt;"/"&lt;/span&gt;, &lt;span class="number"&gt;2&lt;/span&gt;); &lt;span class="keyword"&gt;return&lt;/span&gt; p;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;</description><author>Michael Mior</author><pubDate>Sun, 31 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://michael.mior.ca/blog/dangers-of-strlen/</guid></item><item><title>Hermit Crab Ready For Texturing!</title><link>https://blog.yiningkarlli.com/2010/10/hermit-crab-ready-for-texturing.html</link><description>&lt;p&gt;My hermit crab is ready for texturing and lighting and rendering! I’m going with Mudbox for texture painting for sure. I’m still not entirely sure how I’m going to get all the prickly parts of the legs done… I’ll probably just do a displacement map or something.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Oct/front.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/front.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Oct/right.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/right.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Oct/left.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/left.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Oct/back.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/back.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Oct/top.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/top.png" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Sun, 31 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/10/hermit-crab-ready-for-texturing.html</guid></item><item><title>Ghosting it up - Party at the Prison</title><link>https://liza.io/ghosting-it-up-party-at-the-prison/</link><description>&lt;p&gt;I just got home from Party at the Prison, an awesome Halloween party hosted by Tsvet Productions. I was working at the party, hosted at the Fremantle Prison, as the &amp;ldquo;ghostly girl&amp;rdquo;. My makeup was so scary, it even freaked &lt;em&gt;me&lt;/em&gt; out. My job was to &amp;ldquo;hover&amp;rdquo; around a graveyard which people walked past as they existed the red carpet, so it was right near the entrance. As a result there was a lot of picture-taking by both party goers and media. I had to try to keep a straight, ghost-like expression and stare at guests as they passed, but sometimes it was a little difficult. I was asked out by &amp;ldquo;ghostly guys&amp;rdquo; twice throughout the night and plenty of people tried making me crack a smile (some succeeded).&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sat, 30 Oct 2010 20:15:45 GMT</pubDate><guid isPermaLink="true">https://liza.io/ghosting-it-up-party-at-the-prison/</guid></item><item><title>Programmazione Asincrona per C# e VB</title><link>https://nicolaiarocci.com/programmazione-asincrona/</link><description>&lt;p&gt;Un articolo sul &lt;!-- raw HTML omitted --&gt;Somasegar’s Weblog&lt;!-- raw HTML omitted --&gt; annuncia oggi il rilascio imminente di un nuovo modello di programmazione asincrona per C# and VB:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Today, we are unveiling significant language and framework enhancements in C# and Visual Basic that enable developers to harness asynchrony, letting them retain the control flow from their synchronous code while developing responsive user interfaces and scalable web applications with greater ease.   This CTP delivers a lightweight asynchronous development experience as close to the standard synchronous paradigms as possible, while providing an easy on-ramp to the world of concurrency&lt;/p&gt;</description><author>Nicola Iarocci</author><pubDate>Fri, 29 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://nicolaiarocci.com/programmazione-asincrona/</guid></item><item><title>Hermit Crab Progress</title><link>https://blog.yiningkarlli.com/2010/10/hermit-crab-progress.html</link><description>&lt;p&gt;I’m working on a hermit crab in 3D Modeling class! The shell was really hard to make… I wound up making a small segment, duplicating special it, and then stitching all the segments together by hand. So… the crab itself is only some legs right now. I have a lot of work to do on this still…&lt;/p&gt;

&lt;p&gt;I’m thinking about trying Mudbox for texturing this thing. The UVs on the shell aren’t pretty, and I don’t want to spend a gazillion hours unwrapping those UVs….&lt;/p&gt;

&lt;p&gt;More later.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Oct/crabprogress1.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/crabprogress1.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Oct/crabprogress2.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/crabprogress2.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Oct/crabprogress3.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/crabprogress3.png" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Thu, 28 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/10/hermit-crab-progress.html</guid></item><item><title>How Your Computer is Exactly Like a Delicious Reuben Sandwich</title><link>https://justingarrison.com/blog/2010-10-27-how-your-computer-is-exactly-like-a-delicious-reuben-sandwich/</link><description>Computers are complex devices that cannot easily be explained, like</description><author>Justin Garrison's Homepage</author><pubDate>Wed, 27 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-10-27-how-your-computer-is-exactly-like-a-delicious-reuben-sandwich/</guid></item><item><title>Una ottima guida di riferimento per lo sviluppatore ASP.NET</title><link>https://nicolaiarocci.com/guida-di-riferimento-per-asp-net/</link><description>&lt;p&gt;La  &lt;!-- raw HTML omitted --&gt;ASP.NET Developer Guidance Map&lt;!-- raw HTML omitted --&gt; è una eccellente risorsa sia per il programmatore alle prime armi che per il veterano. Fornisce una ottima selezione di  risorse web catalogate nelle seguenti categorie: Primi Passi, Architettura e Design, Codice di Esempio, Come Fare, Filmati, Addestramento.&lt;/p&gt;
&lt;p&gt;Peccato sia disponibile solo in formato PDF, qualcuno dovrebbe approntare una pagina wiki o qualcosa di simile che riproduca questi contenuti.&lt;/p&gt;</description><author>Nicola Iarocci</author><pubDate>Tue, 26 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://nicolaiarocci.com/guida-di-riferimento-per-asp-net/</guid></item><item><title>What is the Linux Kernel and What Does It Do?</title><link>https://justingarrison.com/blog/2010-10-26-what-is-the-linux-kernel-and-what-does-it-do/</link><description>With over 13 million lines of code, the Linux kernel is one of the largest open</description><author>Justin Garrison's Homepage</author><pubDate>Tue, 26 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-10-26-what-is-the-linux-kernel-and-what-does-it-do/</guid></item><item><title>COUNT STOPKEY operation (the where ROWNUM &amp;lt;= N predicate) doesn't process over ~4 Billion rows and returns wrong results</title><link>https://tanelpoder.com/2010/10/25/count-stopkey-operation-the-where-rownum/</link><description>&lt;p&gt;I was running tests on some very large tables on an Exadata cluster and found an interesting bug.&lt;/p&gt;
&lt;p&gt;Instead of having to query 4Billion row tables, I have reproduced this case with a cartesian join…&lt;/p&gt;
&lt;p&gt;Check this. I’m generating 8 Billion rows using a 3-way cartesian join of set of 2000 rows. So, this results in 2000 * 2000 * 2000 rows, which is 8 billion rows.&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt;  with sq as (select null from dual connect by level &amp;lt;= 2000)
      select &lt;strong&gt;count(*)&lt;/strong&gt;
      from sq a, sq b, sq c;

COUNT(*)
----------
8000000000&lt;/pre&gt;
&lt;p&gt;Everything worked well as you see. All 8 billion rows were nicely counted. Let’s modify this query a bit, by adding a WHERE rownum &amp;lt;= 8 000 000 000 predicate, which shouldn’t modify the outcome of my query as 8 billion rows is exactly what I have:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 25 Oct 2010 20:51:06 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/10/25/count-stopkey-operation-the-where-rownum/</guid></item><item><title>White Lightning Wherehouse</title><link>https://mbutler.org/white-lightning-wherehouse/</link><description>I had a studio here and helped put on some shows and exhibits. White Lightning Wherehouse from Nelle Owens Dunlap on Vimeo.</description><author>mbutler</author><pubDate>Mon, 25 Oct 2010 20:15:25 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/white-lightning-wherehouse/</guid></item><item><title>Tweets of the Week</title><link>https://michael.mior.ca/blog/tweets-of-the-week/</link><description>&lt;p&gt;In an effort to keep the blog postings more regular, I thought I would start sharing a selection of the most popular links from my Twitter feed in-between more detailed posts.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=tqbiHyuGKIo"&gt;Movember Man Hypothesis – Adam Doran&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This one goes at the top because it’s for good friend and a good cause.
Check out this video we produced to help put our weight behind &lt;a href="http://www.prostatecancer.ca/"&gt;Prostate Cancer Canada‘s Movember&lt;/a&gt; campaign.
Share the video and help raise awareness about prostate cancer!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html"&gt;Yoshinori Matsunobu’s blog: Using MySQL as a NoSQL – A story for exceeding 750,000 qps on a commodity server&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It’s great to see not everyone is giving up on traditional RDMS systems.
Granted this isn’t a typical use (like &lt;a href="http://code.flickr.com/blog/2010/02/08/ticket-servers-distributed-unique-primary-keys-on-the-cheap/"&gt;Flickr’s abuse of MySQL&lt;/a&gt;).
However, a lot of engineering effort has gone into these systems, and it’s a shame to see that go to waste.
Especially, when most sites never need to scale to millions of users (as much as they may wish for it).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://aws.amazon.com/free/"&gt;AWS Free Usage Tier&lt;/a&gt;
I hope this serves as motivation for those who haven’t started using the cloud to at least try it out.
In the early stages of a startup, there’s no need to deal with managing your own hardware.
Great way to scale your costs with size of your business.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://blog.yottaa.com/2010/10/how-to-measure-page-load-time-with-google-analytics/"&gt;How to Measure Page Load Time With Google Analytics - Web Performance Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Coming from the boonies, with Internet connections of unreliable speed, I appreciate sites which load fast.
Of course, bandwidth may not be the only reason your site loads slow for users.
As noted in the comments on the post, you should also check out Yahoo! Boomerang which gives an easy way to ping your server with some client-side load statistics&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.paulgraham.com/startupfunding.html"&gt;How to Fund a Startup&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Paul_Graham_(computer_programmer)"&gt;Paul Graham&lt;/a&gt; is a well known fellow within the startup community.
This post has some lovely advice for those startups a little light on cash.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><author>Michael Mior</author><pubDate>Sun, 24 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://michael.mior.ca/blog/tweets-of-the-week/</guid></item><item><title>Nine questions for a Linux Day (or any other moment)</title><link>https://stop.zona-m.net/2010/10/nine-questions-for-linux-day-or-any-other-moment/</link><description>&lt;p&gt;The organizers of the &lt;a href="https://stop.zona-m.net/2010/10/member-of-largest-supermarket-chain-in-italy-hosts-linux-presentation/"&gt;first Linux presentation in an Italian shopping center&lt;/a&gt; asked me to prepare a short list of questions to hand out to all the visitors of that shopping center. They specifically asked for&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 23 Oct 2010 21:37:38 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/10/nine-questions-for-linux-day-or-any-other-moment/</guid></item><item><title>Puddle! Redux</title><link>https://blog.yiningkarlli.com/2010/10/puddle-redux.html</link><description>&lt;p&gt;&lt;a href="http://floatingdoor.blogspot.com/"&gt;Ana&lt;/a&gt; suggested a few changes. Much credit to her, the painting looks much much better now:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Oct/jump_take3.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/jump_take3.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also played with giving the girl goggles of some sort and a snorkel, but I’m not sure this idea works so well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Oct/jump_take2.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/jump_take2.png" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Sat, 23 Oct 2010 05:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/10/puddle-redux.html</guid></item><item><title>Puddle!</title><link>https://blog.yiningkarlli.com/2010/10/puddle.html</link><description>&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Oct/jump_final.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/jump_final.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I felt like painting (in Photoshop) today. I’m pretty happy with how this one turned out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Oct/20.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/20.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Sat, 23 Oct 2010 04:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/10/puddle.html</guid></item><item><title>Kids traveling inside cars like rockets ready to launch or human airbags</title><link>https://stop.zona-m.net/2010/10/kids-traveling-inside-cars-like-rockets-ready-to-launch-or-human-airbags/</link><description>If you have reached this page is probably because you followed from Facebook the URL in the photo below and then clicked on the &amp;ldquo;English&amp;rdquo; link:
  The italian text at that URL is an open letter in which I ask Italians to pay much more attention than they are currently doing to the security of their children while driving. I am not publishing a full translation because, as far as I know, the letter as it&amp;rsquo;s written only applies to Italy, so this is just a short explanation of what that photo is about.</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 21 Oct 2010 06:44:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/10/kids-traveling-inside-cars-like-rockets-ready-to-launch-or-human-airbags/</guid></item><item><title>Morning schedule fail - and Halloween party at the Fremantle Prison!</title><link>https://liza.io/morning-schedule-fail-and-halloween-party-at-the-fremantle-prison/</link><description>&lt;p&gt;Yesterday I wrote about rearranging my schedule to get up earlier to get home earlier and get a chance to walk Keeda in the morning and as well as at night. I set my alarm to 6am, woke up, and collapsed back into bed. It did not work. Tonight I&amp;rsquo;m trying a different method - I&amp;rsquo;m pretending it&amp;rsquo;s Daylight Savings and setting my iPhone clock forward an hour. That way when I get up at 7am I&amp;rsquo;m &lt;em&gt;really&lt;/em&gt; getting up at 6! Genius.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Wed, 20 Oct 2010 15:22:32 GMT</pubDate><guid isPermaLink="true">https://liza.io/morning-schedule-fail-and-halloween-party-at-the-fremantle-prison/</guid></item><item><title>Member of largest supermarket chain in Italy hosts Linux presentation</title><link>https://stop.zona-m.net/2010/10/member-of-largest-supermarket-chain-in-italy-hosts-linux-presentation/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 20 Oct 2010 09:24:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/10/member-of-largest-supermarket-chain-in-italy-hosts-linux-presentation/</guid></item><item><title>Grid Style Sheets vs. The Semantic Web</title><link>https://donatstudios.com/Grid_CSS_Versus_The_Web</link><description>&lt;h2&gt;Grid Style Sheets Must Die&lt;/h2&gt;
&lt;p&gt;I have been aware of Grid Style Sheets for quite a while, but I long ago dismissed them as a fad like CSS Resets.  Recently though it came to my attention that OSCommerce 2.3 switched to the &lt;a href="https://960.gs/" target="_blank"&gt;960 Grid Style&lt;/a&gt; to replace its table based layout system.  I spend most of my development time working with OSCommerce and thought it would be good to understand this change so I could decide whether or not to integrate it into our fork.&lt;/p&gt;
&lt;p&gt;My general impression playing with the latest nightly of OSCommerce 2.3 from Github though is that I don't like it – maybe I'm old school, but in my view Grid Style Sheets go against what we spent the previous decade fighting for, separation of our concerns&amp;hellip; separating presentation and content.&lt;/p&gt;
&lt;h3&gt;&lt;em&gt;You're Doing Internet Wrong&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;Let's talk about &lt;a href="https://en.wikipedia.org/wiki/Separation_of_presentation_and_content" target="_blank"&gt;separation of presentation and content&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ideally, content and layout information should be entirely separate.  Class names should be used to &lt;em&gt;describe&lt;/em&gt; the &lt;em&gt;data&lt;/em&gt; they contain, and &lt;em&gt;nothing to do with&lt;/em&gt; the style the class will contain.  You should be able to completely rearrange / restructure a page simply by switching out a stylesheet.  The HTML should strive to be as purely a data delivery mechanism as possible, similar to that of an XML request, and the CSS is there to make it something a human can digest.&lt;/p&gt;
&lt;p&gt;Using a Grid stylesheet – your class names &lt;em&gt;purely&lt;/em&gt; apply to your &lt;em&gt;specific&lt;/em&gt; layout.  Class names like &amp;quot;grid_1&amp;quot; or &amp;quot;container_12&amp;quot; are not indicative of content in the slightest, but rather where they are placed on the grid that is your page. &lt;s&gt;Grid_1 will &lt;em&gt;always&lt;/em&gt; be leftmost. Always. Might as well use &lt;code&gt;&amp;lt;left&amp;gt;&lt;/code&gt;&lt;/s&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Correction&lt;/strong&gt;: Grid_1 will always be one twelfth of your page wide (on a twelve Column Grid) , Grid_2 two twelfths, et cetera. Nothing to do with describing the content contained.&lt;/p&gt;
&lt;h3&gt;Grid Style Sheets are &lt;em&gt;Extremely&lt;/em&gt; Limiting&lt;/h3&gt;
&lt;p&gt;With a well-structured CSS layout, deciding to move your navigation from the left to the right is as simple as flicking a switch.  Usually after changing one to a few lines of CSS, and its switched. It &lt;em&gt;cascades&lt;/em&gt; across your entire site and everything floats and adjusts.  Same goes for altering the width, or even the entire flow of your document. You can quite easily decide your left navigation is now a top navigation with no alteration to the content.&lt;/p&gt;
&lt;p&gt;Contrast this with a grid style sheet – to reposition &lt;em&gt;anything&lt;/em&gt; you will have to &lt;strong&gt;edit the HTML&lt;/strong&gt; – change the class you call.  Restructuring a site is a major task. They are essentially &lt;strong&gt;&lt;em&gt;tables&lt;/em&gt;&lt;/strong&gt; done in CSS with &lt;em&gt;all the &lt;strong&gt;drawbacks of tables&lt;/strong&gt;&lt;/em&gt; with few of the benefits (&lt;em&gt;cough&lt;/em&gt; valign &lt;em&gt;cough&lt;/em&gt;).&lt;/p&gt;
&lt;h3&gt;Why Does this Matter?&lt;/h3&gt;
&lt;p&gt;Flexibility, sustainability, scalability – these are not just buzz words – these are important attributes of a well-developed site – these are things a grid layout does not deliver.&lt;/p&gt;
&lt;p&gt;Let's look at this from a prebuilt application perspective. In OSCommerce 2.3 the left navigation is classed grid_4 which places it 4 gridlines out of 16, and the content area is push_4 which aptly pushes it over 4.  That defines not only where my navigation appears, but also its size.  Its inflexible without changing HTML, and quite honestly wouldn't work for the &lt;strong&gt;majority&lt;/strong&gt; of carts I develop.&lt;/p&gt;
&lt;h3&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;Grids, from a design perspective are not just &lt;em&gt;useful&lt;/em&gt;, they're downright &lt;em&gt;ideal&lt;/em&gt;.  Clear alignment of elements creating strong visual lines is something strived for.  &lt;strong&gt;Consistent&lt;/strong&gt; padding and margins are all very important – and all of these are honorable virtues of a grid style sheet.&lt;/p&gt;
&lt;p&gt;I definitely understand the draw and the time saved in the initial build of a site, but a meticulously well engineered style sheet supporting semantic CSS will in the long run pay back the initial investment many times over.&lt;/p&gt;
&lt;h3&gt;Post Script&lt;/h3&gt;
&lt;p&gt;While writing this, I've decided I really like the &lt;strong&gt;concept and aim&lt;/strong&gt; of the grid style sheet – and would &lt;em&gt;love it&lt;/em&gt; if it did not interfere with the semantic nature of CSS.  If I could simply do something like the following, I would be using it 10 minutes ago.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#leftnav {  
    imports: .grid2;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;W3C – I'm looking your direction to see this happen.  Until then, I'm sticking with my old fashioned meticulously crafted CSS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update February 3, 2014&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;While my position on grid CSS has not changed, there are now &lt;strong&gt;many many&lt;/strong&gt; &lt;a href="https://sass-lang.com/"&gt;Sass&lt;/a&gt;, Less, Stylus etc CSS pre-parser grid frameworks which allow your CSS to still be semantic, while utilizing grid layouts. This is &lt;strong&gt;wonderful&lt;/strong&gt; and I wholeheartedly endorse their use.&lt;/p&gt;</description><author>Donat Studios</author><pubDate>Wed, 20 Oct 2010 07:43:21 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/Grid_CSS_Versus_The_Web</guid></item><item><title>Personal projects</title><link>https://www.craigpardey.com/post/2010-10-20-personal-projects/</link><description>&lt;p&gt;I recently started working on a personal project - a web application - and
faced a difficult decision. What technology stack do I use?&lt;/p&gt;
&lt;p&gt;I like my personal projects to both fulfil a requirement and to teach me
something in the process. Java is my native language, so I initially thought
I&amp;rsquo;d build it in wicket-spring-hibernate.&lt;/p&gt;
&lt;p&gt;The problem is that I can only work on the project for a few hours a week, and
I find that developing in Java just takes too long. It&amp;rsquo;s a big hammer.&lt;/p&gt;</description><author>Craig Pardey</author><pubDate>Wed, 20 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.craigpardey.com/post/2010-10-20-personal-projects/</guid></item><item><title>OS X and CD burning non-smartness</title><link>https://peterlyons.com/problog/2010/10/os-x-and-cd-burning-non-smartness/</link><description>&lt;p&gt;So since making the linux to Mac transition, I have this mindset of things on the Mac are supposed to "just work" and be fantastic and marvelous and flawless. This preconception was shattered again when I tried to burn some CDs recently. I downloaded and ISO and tried to burn it with Finder. In Ubuntu, if you try to burn a single .iso file to disc, it prompts you that you probably want to just make a disc from that CD image, and thus does the right thing. Not so on the Mac. It happily spit out a data disc containing a single .iso file. Duh. Then I went to burn a music CD using some .wav files a friend sent. Again, on Ubuntu, if you ask it to burn a CD of just .wav music files, it suggests that you burn an audio CD automatically. Mac, nope. Data CD with .wav files. Facepalm. In case you're curious, yes I did figure out that you need to use Disk Utility on the Mac to burn the .iso file and iTunes for the music CD. I thought this was supposed to be seamless?&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Tue, 19 Oct 2010 22:46:59 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/10/os-x-and-cd-burning-non-smartness/</guid></item><item><title>NaNoWriMo 2010 - National Novel Writing Month</title><link>https://liza.io/nanowrimo-2010-national-novel-writing-month/</link><description>&lt;p&gt;&lt;a href="http://www.twitter.com/ellenjurik"&gt;Ellen&lt;/a&gt; mentioned doing &lt;a href="http://www.nanowrimo.org"&gt;NaNoWriMo&lt;/a&gt; this year and inspired me to participate as well! I had the intention of participating in the National Novel Writing Month a couple of years ago but never seemed to have the strength to keep going with my novel and it fizzled out. This year I&amp;rsquo;m committed - and hope I stay that way despite how ridiculously busy I&amp;rsquo;ve been. I already have the idea for my novel in my head and have started planning chapter by chapter.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Tue, 19 Oct 2010 16:20:00 GMT</pubDate><guid isPermaLink="true">https://liza.io/nanowrimo-2010-national-novel-writing-month/</guid></item><item><title>Rearranging my schedule</title><link>https://liza.io/rearranging-my-schedule/</link><description>&lt;p&gt;I have realized that my normal 9-5 schedule seems very inefficient. As it stands right now, here&amp;rsquo;s my general daily schedule:&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Tue, 19 Oct 2010 15:39:04 GMT</pubDate><guid isPermaLink="true">https://liza.io/rearranging-my-schedule/</guid></item><item><title>Sufjan Stevens in Kansas City</title><link>https://www.keithrpetersen.com/blog/sufjan-stevens-in-kansas-city/</link><description>&lt;p&gt;I saw Sufjan Stevens last night at the Uptown Theater in Kansas City. It was an awesome, awesome show. I think it was more enjoyable because I had only a vague idea of what to expect, as I hadn’t listened to his &lt;a href="http://asthmatickitty.com/the-age-of-adz"&gt;&lt;em&gt;Age of Adz&lt;/em&gt;&lt;/a&gt; album beforehand. I’m not a big fan of electronica or synth anything, and his new work is a mishmash of 80’s-style beats (“Put on your slow-jam pants,” he told the crowd before one song) and, well, I don’t know what. He even broke out the autotune somewhere in the middle of “Impossible Soul”, during which he donned a glow-in-the-dark visor with an attached glittery mullet. One thing remains constant from his earlier work: it’s delightfully, unabashedly weird.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.keithrpetersen.com/blog/sufjan-stevens-in-kansas-city/"&gt;Read More&lt;/a&gt;&lt;/p&gt;</description><author>Blog - Keith R. Petersen</author><pubDate>Tue, 19 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.keithrpetersen.com/blog/sufjan-stevens-in-kansas-city/</guid></item><item><title>Read currently running SQL statement’s bind variable values using V$SQL_MONITOR.BIND_XML in Oracle 11.2</title><link>https://tanelpoder.com/2010/10/18/read-currently-running-sql-statements-bind-variable-values/</link><description>&lt;p&gt;The title pretty much says it. In Oracle 11.2, if you have the Diag+Tuning Pack licenses &lt;em&gt;and&lt;/em&gt; the SQL monitoring kicks in for your SQL statement, then instead of the old fashioned &lt;a href="http://tech.e2sn.com/oracle/troubleshooting/how-to-read-errorstack-output" target="_blank"&gt;ERRORSTACK dump reading&lt;/a&gt; you can just query the &lt;strong&gt;V$SQL_MONITOR.BIND_XML&lt;/strong&gt; to find the values and metadata of your SQL statement’s bind variables.&lt;/p&gt;
&lt;p&gt;I’ve written an example here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tech.e2sn.com/oracle-living-books/oracle-troubleshooting/oracles-real-time-sql-monitoring-feature-vsql_monitor" target="_blank"&gt;&lt;a href="https://tech.e2sn.com/oracle-living-books/oracle-troubleshooting/oracles-real-time-sql-monitoring-feature-vsql_monitor"&gt;https://tech.e2sn.com/oracle-living-books/oracle-troubleshooting/oracles-real-time-sql-monitoring-feature-vsql_monitor&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And a related comment – V$SQL_BIND_CAPTURE is &lt;em&gt;not&lt;/em&gt; a reliable way for identifying the &lt;em&gt;current&lt;/em&gt; bind variable values in use. Oracle’s bind capture mechanism does not capture every single bind variable into SGA (it would slow down apps which run lots of short statements with bind variables). The bind capture only selectively samples bind values, during the first execution of a new cursor and then every 15 minutes from there (controlled by _cursor_bind_capture_interval parameter), assuming that new executions of that same cursor are still being started (the capture happens only when execution starts, not later during the execution).&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 18 Oct 2010 14:11:29 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/10/18/read-currently-running-sql-statements-bind-variable-values/</guid></item><item><title>Note to all NGOs: please don't make a mess with Microsoft donations</title><link>https://stop.zona-m.net/2010/10/note-to-all-ngos-please-dont-make-a-mess-with-microsoft-donations/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Mon, 18 Oct 2010 10:46:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/10/note-to-all-ngos-please-dont-make-a-mess-with-microsoft-donations/</guid></item><item><title>What happened to the kvass...and the Mad Hatter's Tea Party challenge</title><link>https://liza.io/what-happened-to-the-kvass-and-the-mad-hatters-tea-party-challenge/</link><description>&lt;p&gt;I thought I&amp;rsquo;d post a quick update on my kvass making initiative. There&amp;rsquo;s not really much of an update. The five fermentation days are up and my kvass smells like beer and tastes like it, too. I don&amp;rsquo;t know if it tastes like &lt;em&gt;good&lt;/em&gt; beer as I don&amp;rsquo;t like beer, so to me it&amp;rsquo;s pretty darn horrible. What a waste! I guess I&amp;rsquo;ll just have to buy some fake plastic-bottled kvass from Amazon.com&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Mon, 18 Oct 2010 07:59:47 GMT</pubDate><guid isPermaLink="true">https://liza.io/what-happened-to-the-kvass-and-the-mad-hatters-tea-party-challenge/</guid></item><item><title>Little Kiddo</title><link>https://blog.yiningkarlli.com/2010/10/little-kiddo.html</link><description>&lt;p&gt;In Penn’s SIGGRAPH chapter, we’re spending the next few months designing our own little characters in Maya!&lt;/p&gt;

&lt;p&gt;I drew a little girl complete with little kid size coat and rubber rain boots:&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Oct/characterdesign.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;I don’t really have any idea yet of what kind of adventure she’ll go on. I’ll figure that out as I go along, I suppose. I picked a little kiddo mainly because I love how crazy exaggerated little kids often make their expressions. Just check out the absolutely beautifully animated short &lt;a href="http://vimeo.com/15731659"&gt;Playing with light - Mon ami le robot&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;More later!&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Mon, 18 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/10/little-kiddo.html</guid></item><item><title>Mount USB Devices in Virtualbox with Ubuntu</title><link>https://justingarrison.com/blog/2010-10-18-mount-usb-devices-in-virtualbox-with-ubuntu/</link><description>Mounting a USB device inside a virtual machine is often a tool that</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 18 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-10-18-mount-usb-devices-in-virtualbox-with-ubuntu/</guid></item><item><title>Slim, a Fast and Lightweight Rails Template Engine!</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/slim-a-fast-and-lightweight-rails-template-engine</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Mon, 18 Oct 2010 00:40:20 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/slim-a-fast-and-lightweight-rails-template-engine</guid></item><item><title>Minimum Viable Product MVP</title><link>https://boyter.org/2010/10/minimum-viable-product-mvp/</link><description>&lt;p&gt;As much as I like things to be perfect I soon discovered from my &lt;a href="http://www.wausita.com/2010/10/startupcamp-opinions/"&gt;startup camp experience&lt;/a&gt; that its far more important to have a minimum viable product out there and generating interest. After all how can you determine how worthwhile your time investment is without throwing out your ideas and testing the reaction. That&amp;rsquo;s always something scary for any developer, but probably is the correct approach.&lt;/p&gt;
&lt;p&gt;And so I am releasing a quick weekend project I created when I became interested in Google&amp;rsquo;s Instant search. Welcome to &lt;a href="http://www.searchforphp.com/"&gt;http://www.searchforphp.com/&lt;/a&gt; which is my first real attempt at anything interesting with jQuery and using my search skills. Essentially its a search engine totally focused on PHP. Feel free to give it a whirl. Some queries work better then others on it, but &amp;ldquo;mysql&amp;rdquo; is a pretty good search term. At the moment its just showing the results from RSS feeds that are being crawled and the function list in PHP but it is a pretty good start. Let me know what you think in the comments below.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Sun, 17 Oct 2010 11:36:27 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/10/minimum-viable-product-mvp/</guid></item><item><title>How to NOT implement a website privacy policy</title><link>https://stop.zona-m.net/2010/10/how-to-not-implement-a-website-privacy-policy/</link><description>&lt;p&gt;Yesterday, following some a link provided by a friend, I read an &lt;a href="http://thestar.com.my/news/story.asp?file=/2010/10/13/nation/7215576&amp;amp;sec=nation"&gt;article recently published by the Star Online magazine&lt;/a&gt;. I wanted to add a comment to that article, but only found in that page the following statement (see [screenshot&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt="How to NOT implement a website privacy policy /img/staronlinearticle.png" src="https://stop.zona-m.net//img/staronlinearticle.png" width="100%" /&gt;
&lt;/figure&gt;
&lt;p&gt;): &lt;em&gt;&amp;ldquo;If you&amp;rsquo;d like to post a comment on the issue, you can do so at The Star&amp;rsquo;s Facebook.&amp;quot;&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 16 Oct 2010 05:07:28 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/10/how-to-not-implement-a-website-privacy-policy/</guid></item><item><title>Microsoft video proves that Microsoft Office is like cocaine and has dealers inside schools</title><link>https://stop.zona-m.net/2010/10/microsoft-video-proves-that-microsoft-office-is-like-cocaine-and-has-dealers-inside-schools/</link><description>&lt;p&gt;On October 6th, 2010 Microsoft published a short video on Youtube titled &lt;a href="http://www.youtube.com/watch?v=kzdykNa2IBU&amp;amp;feature=player_embedded"&gt;&amp;ldquo;A Few Perspectives on OpenOffice.org&amp;rdquo;&lt;/a&gt;. The video is about &lt;em&gt;&amp;ldquo;Some thoughts from OpenOffice.org users and why they switched back to Microsoft Office&amp;rdquo;&lt;/em&gt; (&lt;a href="http://www.openoffice.org"&gt;OpenOffice.org&lt;/a&gt; and its offspring &lt;a href="http://www.documentfoundation.org"&gt;LibreOffice&lt;/a&gt; are &amp;ldquo;free-as-in-freedom&amp;rdquo; alternatives to Microsoft&amp;rsquo;s Office productivity suite. They have no license costs and natively support &lt;a href="http://opendocumentfellowship.com/introduction"&gt;OpenDocument&lt;/a&gt;, an international standard format for office documents).&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 15 Oct 2010 05:21:12 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/10/microsoft-video-proves-that-microsoft-office-is-like-cocaine-and-has-dealers-inside-schools/</guid></item><item><title>jQuery and Ball World</title><link>https://peterlyons.com/problog/2010/10/jquery-and-ball-world/</link><description>&lt;p&gt;So in my first computer science course, one of the earliest labs with &lt;a href="http://www.bandgap.cs.rice.edu/personal/adrice_swong/public/default.aspx"&gt;Stephen Wong&lt;/a&gt; was called Ball World. Professor Wong had set up some fill-in-the-blanks java code for us that brought up a basic frame. We wrote code to add some ball sprites and we had to define their velocity and have code to detect collisions and compute new velocities after balls collided with each other or the boundaries. I still remember the first time you get everything fired up and see two balls collide and bounce off each other realistically. Keep in mind this is somewhere pretty earlier in my first semester ever programming. It was pretty powerful and pretty exciting.&lt;/p&gt;
&lt;p&gt;Now here I am with ten years or so professional programming experience. I'm teaching myself &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; and javascript. Well, I guess I should put "teaching" in quotes because I'm basically just doing it since there's no learning required. I've had about twenty different things I wanted to do so far on my practice project, and each of them involves a 3-word google query like "jquery sort drag", a very tiny snippet of code, averaging about 2 or 3 lines, and it working perfectly the first time. It's amazing. I've got all kinds of HTML5 Ajaxy Web 2.0 goodness going and it works great and it's easy. AND there's a graphical debugger and rapid development tools. It's pretty darn sweet.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Thu, 14 Oct 2010 10:54:43 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/10/jquery-and-ball-world/</guid></item><item><title>MySQL Error – Error:1356: View references invalid.</title><link>https://boyter.org/2010/10/mysql-error-error1356-view-references-invalid/</link><description>&lt;p&gt;I managed to get the following error the other day while helping migrate and upgrade some MySQL databases for a client.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mysqldump: Got error: 1356: View 'database.table' references
invalid table(s) or column(s) or function(s) or definer/invoker of view
lack rights to use them when using LOCK TABLES
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The above appeared anytime I tried to dump the database to a SQL file using mysqldump. Its actually one of the better errors I have seen come out of MySQL (which has pretty terrible error reporting most of the time) and tells you exactly what is going wrong. &lt;strong&gt;Essentially there is a old view in the the database that should be removed since its no longer valid and is throwing a compile exception.&lt;/strong&gt;&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Thu, 14 Oct 2010 05:50:45 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/10/mysql-error-error1356-view-references-invalid/</guid></item><item><title>Startupcamp Opinions</title><link>https://boyter.org/2010/10/startupcamp-opinions/</link><description>&lt;p&gt;So the other weekend I attended a &lt;a href="http://sydneystartupcamp.eventbrite.com/"&gt;Sydney Startup Camp&lt;/a&gt;. While I am not going to say that the entire experience was positive im not going to call out the reasons in too much depth. What I have noticed is that its very ‘clicky&amp;rsquo;. It seems that despite the organizers attempt to break up up people who know each other it seems to be impossible.&lt;/p&gt;
&lt;p&gt;A lot of the experience seems to focus on the non technical side of things which is good for people like me who are mostly technical it also means that you end up having a marathon sprint to finish features and then spend a lot of time trying to keep awake while going though things that I would describe as about as interesting as watching paint dry. A necessary evil but I still hate doing it.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Wed, 13 Oct 2010 05:43:27 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/10/startupcamp-opinions/</guid></item><item><title>DBUS for cross-machine screensaver locking</title><link>https://michael.mior.ca/blog/dbus-screensaver-lock/</link><description>&lt;p&gt;I typically work with two computers on a regular basis.
When I bring my laptop into the office, that makes three.
I have a habit of locking my computer(s) when I step out, but it gets to be a pain when I have three machines running at once.
I decided that I wanted to be able to lock one machine, and have the rest follow suit.
I discovered that this is possible using DBUS since gnome-screensaver emits a signal whenever locking status is changed.
I turned to my trusty Python, and started hacking away.&lt;/p&gt;
&lt;p&gt;Without further ado, here is the code:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;&lt;span class="comment"&gt;#!/usr/bin/python&lt;/span&gt;

&lt;span class="keyword"&gt;import&lt;/span&gt; dbus
&lt;span class="keyword"&gt;from&lt;/span&gt; dbus.mainloop.glib &lt;span class="keyword"&gt;import&lt;/span&gt; DBusGMainLoop
&lt;span class="keyword"&gt;import&lt;/span&gt; gobject
&lt;span class="keyword"&gt;import&lt;/span&gt; os

&lt;span class="comment"&gt;# Hosts which should be locked/unlocked&lt;/span&gt;
hosts = [&lt;span class="string"&gt;'starks'&lt;/span&gt;, &lt;span class="string"&gt;'mmior-laptop'&lt;/span&gt;]
&lt;span class="comment"&gt;# Set to True to turn on displays of other&lt;/span&gt;
&lt;span class="comment"&gt;# hosts after unlocking&lt;/span&gt;
wake = &lt;span class="literal"&gt;False&lt;/span&gt;

&lt;span class="function"&gt;&lt;span class="keyword"&gt;def&lt;/span&gt; &lt;span class="title"&gt;toggle_lock&lt;/span&gt;&lt;span class="params"&gt;(x)&lt;/span&gt;:&lt;/span&gt;
  &lt;span class="keyword"&gt;if&lt;/span&gt; x == &lt;span class="number"&gt;0&lt;/span&gt;:
    &lt;span class="keyword"&gt;for&lt;/span&gt; host &lt;span class="keyword"&gt;in&lt;/span&gt; hosts:
      os.system(&lt;span class="string"&gt;'ssh '&lt;/span&gt; + host + &lt;span class="string"&gt;' export DISPLAY=:0; gnome-screensaver-command -d'&lt;/span&gt;)
      &lt;span class="keyword"&gt;if&lt;/span&gt; wake:
        os.system(&lt;span class="string"&gt;'ssh '&lt;/span&gt; + host + &lt;span class="string"&gt;' export DISPLAY=:0; xset dpms force on; gnome-screensaver-command -d'&lt;/span&gt;)
  &lt;span class="keyword"&gt;if&lt;/span&gt; x == &lt;span class="number"&gt;1&lt;/span&gt;:
    os.system(&lt;span class="string"&gt;'xset s activate'&lt;/span&gt;)
    &lt;span class="keyword"&gt;for&lt;/span&gt; host &lt;span class="keyword"&gt;in&lt;/span&gt; hosts:
      os.system(&lt;span class="string"&gt;'ssh '&lt;/span&gt; + host + &lt;span class="string"&gt;' export DISPLAY=:0; xset dpms force off; gnome-screensaver-command -l'&lt;/span&gt;)

DBusGMainLoop(set_as_default=&lt;span class="literal"&gt;True&lt;/span&gt;)

&lt;span class="comment"&gt;# Connect to the session bus and&lt;/span&gt;
&lt;span class="comment"&gt;# install our signal handler&lt;/span&gt;
bus = dbus.SessionBus()
bus.add_signal_receiver(toggle_lock,
  &lt;span class="string"&gt;'ActiveChanged'&lt;/span&gt;,
  &lt;span class="string"&gt;'org.gnome.ScreenSaver'&lt;/span&gt;,
  path=&lt;span class="string"&gt;'/org/gnome/ScreenSaver'&lt;/span&gt;)

&lt;span class="comment"&gt;# Start the loop and wait for the signal&lt;/span&gt;
gobject.MainLoop().run()

&lt;span class="comment"&gt;# Clean up by removing the signal handler&lt;/span&gt;
bus.remove_signal_receiver(toggle_lock,
  &lt;span class="string"&gt;'ActiveChanged'&lt;/span&gt;,
  &lt;span class="string"&gt;'org.gnome.ScreenSaver'&lt;/span&gt;,
  path=&lt;span class="string"&gt;'/org/gnome/ScreenSaver'&lt;/span&gt;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This needs to be run as a daemon in the background to watch for the signal.
To use the script, just replace the hosts array with a list of hostnames you wish to lock/unlock.
The wake variable controls whether or not the screens of the other machines should be turned on when unlocked.
Of course you can add any actions you wish to take on lock/unlock.&lt;/p&gt;
&lt;p&gt;For more information, check out the &lt;a href="http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html"&gt;Python DBUS tutorial&lt;/a&gt; or see how to use &lt;a href="http://linux.die.net/man/1/dbus-monitor"&gt;&lt;code&gt;dbus-monitor&lt;/code&gt;&lt;/a&gt; to watch for any signals going over the bus.&lt;/p&gt;
&lt;p&gt;If you want to poke around and see what DBUS interfaces various programs you have installed, check out the Debian package &lt;code&gt;qt4-dev-tools&lt;/code&gt;.
It may be a little big since it requires installing lots of Qt libraries, but the included &lt;code&gt;qdbusviewer&lt;/code&gt; tool is great for browsing signals and testing out message sending.&lt;/p&gt;
&lt;p&gt;If you run into any problems or come up with a cool use case, let me know in the comments!&lt;/p&gt;</description><author>Michael Mior</author><pubDate>Tue, 12 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://michael.mior.ca/blog/dbus-screensaver-lock/</guid></item><item><title>Getting Started with node.js</title><link>http://jrgns.net/getting_started_with_node_js/index.html</link><description>&lt;p&gt;Looking for a new challenge, I started a small project in node.js. Here’s a few simple tips on how to get going quickly.&lt;!--break--&gt;&lt;/p&gt;

&lt;h2 id="its-javascipt"&gt;It’s JavaScipt&lt;/h2&gt;

&lt;p&gt;Yeah, that’s obvious, but sometimes stating the obvious is necessary. Node.js is essentially server side JavaScript. This means that all your JS knowledge and tutorials and manuals will be usefull once you get stuck.&lt;/p&gt;

&lt;h2 id="its-event-driven"&gt;It’s Event Driven&lt;/h2&gt;

&lt;p&gt;Node.js is an event driven framework, which can take some getting used to, but it is very powerful in the long run. You can write straight forward bottom to top code, but then you’ll be missing out on the real power of node.js. An example:&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;//Get the events module
var   events = require('events')
    , fs     = require('fs');

//Create a new event object
var file_emitter = new events.EventEmitter();

//Create a listener for our event object
var newFileListener = file_emitter.on('found', function(file) {
    //Do something to the found file
}

//Check for files in a folder
var files = fs.readdirSync('/some/folder');
files.forEach(function(file) {
	//Emit (Trigger) the "found" event on our event object
	file_emitter.emit('found', dest);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id="multiple-files"&gt;Multiple Files&lt;/h2&gt;

&lt;p&gt;Any good coder knows that putting your code in multiple files is a quick win for organized coded. Here’s how to do it in node.js:&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;//In utils.js
exports.trim = trim;
function trim(string) {
	return string.replace(/^\s*|\s*$/g, '')
}

//In the file you want to use the trim function
var utils = require('./utils')
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The &lt;code class="highlighter-rouge"&gt;.js&lt;/code&gt; part of the file is automatically added/detected. This is to include a file in the same folder as the calling file, but you can easily just add the correct path traversals to get to other files. The important part in the file being included is setting the function name in the &lt;code class="highlighter-rouge"&gt;exports&lt;/code&gt; Object.&lt;/p&gt;

&lt;h2 id="file-io"&gt;File I/O&lt;/h2&gt;

&lt;p&gt;Files are all treated as streams in node.js. This means that you can start acting on the data in a file before node has even finished reading the file.&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;//Open a file as a Readable stream
stream = fs.ReadStream(file);
stream.setEncoding('ascii');
stream.on('data', function(data) {
    //Do something to the file's data mid stream
});
stream.on('close', function () {
    //Do something to the file once it's finished reading
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Writing to a file is just as simple&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;stream = fs.createWriteStream(filename, { 'encoding': 'base64' });
stream.write(data);
stream.end();
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id="want-more"&gt;Want More?&lt;/h2&gt;

&lt;p&gt;See &lt;a href="http://github.com/jrgns/parser_email"&gt;parser_email on github&lt;/a&gt; for the full source of the examples given.&lt;/p&gt;

&lt;p&gt;Some useful sites:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;table&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;a href="http://nodejs.org/"&gt;Official Site&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a href="http://nodejs.org/api.html"&gt;Documentation&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a href="http://github.com/ry/node"&gt;Source&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href="http://debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb"&gt;Understanding node.js&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href="http://howtonode.org/"&gt;How to Node&lt;/a&gt;&lt;/p&gt;

  &lt;/li&gt;
&lt;/ul&gt;</description><author>Jurgens du Toit</author><pubDate>Mon, 11 Oct 2010 09:31:40 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/getting_started_with_node_js/index.html</guid></item><item><title>Keeda is infected. Zombie virus?</title><link>https://liza.io/keeda-is-infected-zombie-virus/</link><description>&lt;p&gt;Thankfully not a zombie virus (I checked - she did not develop a taste for human flesh).&lt;/p&gt;
&lt;p&gt;Yesterday we saw that my dog Keeda had a paw infection and eye infection (yes, at the same time). The eye infection isn&amp;rsquo;t unusual, she tends to get this once a year or so and my mom has found that rinsing the eye lightly with chamomile tea helps to get rid of it within a couple of days (apparently they use this same method for babies in Ukraine).&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Mon, 11 Oct 2010 07:24:28 GMT</pubDate><guid isPermaLink="true">https://liza.io/keeda-is-infected-zombie-virus/</guid></item><item><title>Home LAN fails and wins</title><link>https://peterlyons.com/problog/2010/10/home-lan-fails-and-wins/</link><description>&lt;p&gt;So my trusty Linksys wireless router up and died on me a few months ago. Of course, in a geek's world, lack of Wifi at home is a stop-the-line emergency, so of course I just immediately drove to a local brick and mortar store to get a replacement. I bought a Belkin as it was the cheapest. It seems to not have the ability to remember MAC to IP mappings for any significant length of time, which meant all my laptops and VMs were constantly changing IPs. I even ended up writing a little script to update &lt;code&gt;/etc/issue&lt;/code&gt; on my VMs so I could see their current IP without needing to log in. Well, after a while I was finally frustrated with this enough to go see if the &lt;a href="http://www.dd-wrt.com"&gt;DD-WRT&lt;/a&gt; replacement firmware was available. It wasn't, so I thought I'd get a different model so I could enjoy the DHCP with static IP mappings goodness. I clicked my handy bookmark for local craigslist and bam, there's a guy in my town selling a Buffalo WHR-G126 for $25 with the latest dd-wrt already installed. w00t! After a conversation over a few emails, calls, and texts, we rendezvoused in town just an hour or so later and completed our transaction.&lt;/p&gt;
&lt;p&gt;So now my network is so nice and lovely. All my devices use DHCP, but the router remembers the devices that "live here" and gives them each a static IP address and entry in DNS. Hurray for dd-wrt and craigslist.&lt;/p&gt;
&lt;p&gt;In case you might find this useful, here's a script to find the current IP address of a machine and put it into &lt;code&gt;/etc/issue&lt;/code&gt; so you can see it on the login screen without actually logging in.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;First, edit &lt;code&gt;/etc/issue&lt;/code&gt; with a placeholder line (as root) like this: &lt;code&gt;echo "IP Address: " &amp;gt;&amp;gt; /etc/issue&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Second, edit &lt;code&gt;/etc/rc.local&lt;/code&gt; and append this little bit of code.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;#plyons. Display the IP at the login screen so we can SSH in
#without loggin in on the console
getip() {
    IP=`ifconfig eth0 | egrep " inet addr:" | cut -d : -f 2 | cut -d " " -f 1`
}
getip
if [ -z "${IP}" ]; then
    sleep 10 #Wait for network to initialize
    getip
fi
perl -pi -e "s/IP Address: .*/IP Address: ${IP}/" /etc/issue
&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now this has a lot of assumptions (one NIC called eth0, etc) and is in no way a generic solution, but for most VMs, it will probably get the job done as is or with a small tweak.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Mon, 11 Oct 2010 07:16:55 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/10/home-lan-fails-and-wins/</guid></item><item><title>Touring the Balkans to promote Free Software</title><link>https://stop.zona-m.net/2010/10/touring-the-balkans-to-promote-free-software/</link><description>&lt;p&gt;&lt;a href="http://de.linkedin.com/in/jamesmikedupont"&gt;James Michael Dupont (Mike)&lt;/a&gt; is a software developer that is doing a lot to promote Free/Open Source Software (FOSS) in Kosovo and other Balkan countries. This year, Mike invited a first class team to spend a couple of weeks in the southern Balkans, to explain why and how FOSS can play a great role in the social and economic development of those countries.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Mon, 11 Oct 2010 04:28:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/10/touring-the-balkans-to-promote-free-software/</guid></item><item><title>Free Software solutions to Balkan problems</title><link>https://stop.zona-m.net/2010/10/free-software-solutions-to-balkan-problems/</link><description>&lt;p&gt;As I&amp;rsquo;ve explained in &lt;a href="https://stop.zona-m.net/2010/10/touring-the-balkans-to-promote-free-software/"&gt;&amp;ldquo;Touring the Balkans to promote Free Software&amp;rdquo;&lt;/a&gt;, I&amp;rsquo;ve recently attended a conference in Albania &lt;a href="http://freesb.eu"&gt;(FreeSB)&lt;/a&gt; and one in Kosovo, &lt;a href="http://www.kosovasoftwarefreedom.org/"&gt;(SFK10)&lt;/a&gt;. Both conferences were about Free/Open Source Software (FOSS), which can play a crucial role in the cultural, educational, economic and social development of any emerging country. In this page I describe three talks from those conferences that help to prove this point.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Mon, 11 Oct 2010 04:25:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/10/free-software-solutions-to-balkan-problems/</guid></item><item><title>Attempt at kvass-making</title><link>https://liza.io/attempt-at-kvass-making/</link><description>&lt;p&gt;When I was little and living in Ukraine I remember having Kvass, a traditional drink from that area. I realized that there doesn&amp;rsquo;t seem to be anywhere to buy kvass in Perth, so being the amazing chef that I am I decided to make some of my own.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sun, 10 Oct 2010 20:33:13 GMT</pubDate><guid isPermaLink="true">https://liza.io/attempt-at-kvass-making/</guid></item><item><title>Diversity, Freedom and Education at the Open World Forum</title><link>https://stop.zona-m.net/2010/10/diversity-freedom-and-education-at-the-open-world-forum/</link><description>&lt;p&gt;This year I have been invited to present the first results of my &lt;a href="https://stop.zona-m.net/2010/06/open-data-open-society-a-research-project-about-openness-of-public-data-in-eu-local-administrations/"&gt;research about Open public data&lt;/a&gt; at the &lt;a href="http://www.openworldforum.org/discover/about"&gt;2010 Open World Forum&lt;/a&gt;. Due to the subject of my talk, I was also invited by Glyn Moody to a panel on Open Democracy (see &lt;a href="http://blogs.computerworlduk.com/open-enterprise/2010/10/the-world-of-the-open-world-forum/index.htm"&gt;Glyn&amp;rsquo;s comments on that panel at CWUK&lt;/a&gt;).&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 10 Oct 2010 05:49:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/10/diversity-freedom-and-education-at-the-open-world-forum/</guid></item><item><title>Every day should be 10/10/10!</title><link>https://stop.zona-m.net/2010/10/every-day-should-be-101010/</link><description>&lt;p&gt;October 10 2010 (10/10/10) is the day chosen for &lt;a href="http://www.350.org/en/invitation"&gt;a Global Work Party&lt;/a&gt; that nobody should miss:&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 10 Oct 2010 04:53:12 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/10/every-day-should-be-101010/</guid></item><item><title>Education inflation, a new look at school</title><link>https://solomon.io/education-inflation-a-new-look-at-school/</link><description>A growing number of college students are approaching the end of their college careers and are worried about finding a job. One reason is academic inflation.</description><author>Sam Solomon</author><pubDate>Fri, 08 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/education-inflation-a-new-look-at-school/</guid></item><item><title>Email Parser for node.js</title><link>http://jrgns.net/node_parser_email/index.html</link><description>&lt;p&gt;I need to parse Emails in node.js and after looking around on the web, I didn’t find much. Oh, no, I’ll have to write it myself… :)&lt;/p&gt;

&lt;p&gt;The source is hosted on &lt;a href="http://github.com/jrgns/parser_email"&gt;GitHub&lt;/a&gt; .&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;Here’s an example:&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;var   fs        = require('fs')
    , sys       = require('sys')
    , em_parse  = require('./parser_email')

stream = fs.ReadStream(file);
stream.setEncoding('ascii');
stream.on('data', function(data) {
	mail += data;
});
stream.on('close', function () {
	parser = em_parse.parser_email();
	parser.setContent(mail);
	parser.parseMail();
});
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description><author>Jurgens du Toit</author><pubDate>Thu, 07 Oct 2010 12:53:55 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/node_parser_email/index.html</guid></item><item><title>Computer health certificates for surfing the Internet? Are you serious?</title><link>https://stop.zona-m.net/2010/10/computer-health-certificates-for-surfing-the-internet-are-you-serious/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 07 Oct 2010 04:38:20 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/10/computer-health-certificates-for-surfing-the-internet-are-you-serious/</guid></item><item><title>PHP / MySQL Web Application Migration Steps</title><link>https://thomashunter.name/posts/2010-10-07-php-mysql-web-application-migration-steps</link><author>Thomas Hunter II</author><pubDate>Thu, 07 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2010-10-07-php-mysql-web-application-migration-steps</guid></item><item><title>The most fundamental difference between hash and nested loop joins</title><link>https://tanelpoder.com/2010/10/06/a-the-most-fundamental-difference-between-hash-and-nested-loop-joins/</link><description>&lt;p&gt;Basically the most fundamental (or biggest or most important) difference between nested loop and hash joins is that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hash joins can not look up rows from the inner (probed) row source based on values retrieved from the outer (driving) row source, nested loops can.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In other words, when joining table A and B (A is driving table, B is the probed table), then a nested loop join can take 1st row from A and perform a lookup to B using that value (of the column(s) you join by). Then nested loop takes the next row from A and performs another lookup to table B using the new value. And so on and so on and so on.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 06 Oct 2010 23:00:23 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/10/06/a-the-most-fundamental-difference-between-hash-and-nested-loop-joins/</guid></item><item><title>Facebook iPhone app Contact Sync isn't automatic</title><link>https://caiustheory.com/facebook-iphone-app-contact-sync-isnt-automatic/</link><description>&lt;p&gt;There&amp;rsquo;s an article on the guardian about &lt;a href="http://www.guardian.co.uk/technology/blog/2010/oct/06/facebook-privacy-phone-numbers-upload"&gt;private phone numbers being uploaded from facebook&lt;/a&gt;, and another over &lt;a href="http://www.techeye.net/security/facebook-takes-and-stores-data-numbers-from-your-iphone"&gt;techeye.net on the same subject.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Firstly a quote from the techeye article:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Facebook doesn&amp;rsquo;t warn users that they are uploading their phone&amp;rsquo;s address book to Facebook.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And whilst the guardian article never says it happens automatically, it also doesn&amp;rsquo;t lay it out that you have to &lt;strong&gt;explicitly&lt;/strong&gt; enable that feature, &lt;strong&gt;and&lt;/strong&gt; agree to the facebook app uploading the data.&lt;/p&gt;
&lt;p&gt;I was pretty sure that facebook wouldn&amp;rsquo;t be grabbing all your contact information without telling you, if they did at all, and that both articles were just pure scaremongering. So I fired up the facebook iPhone app, headed into my friends list on there, clicked sync and got the following screen:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://farm5.static.flickr.com/4148/5056619687_973ae660cc_d.jpg" /&gt;&lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/caius/5056619687/"&gt;View Original&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ok, so according to that text, they&amp;rsquo;re just pulling down profile images and profile links from facebook and putting them in your address book against your contacts. Seems fairly harmless so far. So I toggled the top switch, to enable Contact Sync, and got the following screen:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://farm5.static.flickr.com/4145/5056697193_252e954ec3_d.jpg" /&gt;&lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/caius/5056697193/"&gt;View Original&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Reading that, it&amp;rsquo;s fairly obvious what data facebook are uploading (although a little ambiguous why), and it &lt;strong&gt;certainly&lt;/strong&gt; isn&amp;rsquo;t happening automatically. As it says, it uploads the &amp;ldquo;name, email address, phone number&amp;rdquo; from all your contacts to facebook, and pull down &amp;ldquo;your friends&amp;rsquo; profile photos and other info from Facebook&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;So whilst facebook &lt;em&gt;are&lt;/em&gt; collecting more data (albeit stored subject to their Privacy Policy), it&amp;rsquo;s certainly &lt;strong&gt;NOT&lt;/strong&gt; done automatically, and is &lt;strong&gt;very explicit&lt;/strong&gt; about what is being uploaded at the point you enable it.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Wed, 06 Oct 2010 17:10:06 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/facebook-iphone-app-contact-sync-isnt-automatic/</guid></item><item><title>Never Run Out of Minutes Again: Make Free VoIP Calls on Android Phones</title><link>https://justingarrison.com/blog/2010-10-04-never-run-out-of-minutes-again-make-free-voip-calls-on-android/</link><description>Android phones with Google Voice can make and receive calls at an extremely disounted</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 04 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-10-04-never-run-out-of-minutes-again-make-free-voip-calls-on-android/</guid></item><item><title>Working at s IT Solutions: My first large company</title><link>https://www.databasesandlife.com/s-it-solutions/</link><description>&lt;p&gt;I have been working self-employed for &lt;a href="http://www.s-itsolutions.at/" rel="noopener noreferrer" target="_blank"&gt;s IT Solutions&lt;/a&gt; since 1 March 2010; from 1 September I&amp;rsquo;m salaried there. (I shall still be doing bug-fixing for my old customers, consultancy, and perhaps some smaller new development projects on the side. This is explicitly allowed in my employment contract.)&lt;/p&gt;
&lt;p&gt;s IT Solutions is the IT provider for &lt;a href="https://www.sparkasse.at/" rel="noopener noreferrer" target="_blank"&gt;Erste Bank and the Sparkasse Group&lt;/a&gt;. My role is in the team doing the Internet presence of those banks (e.g. corporate homepages; has more software of a greater complexity than one would perhaps imagine..) and the online banking services for those banks (which has as much software as one would imagine..)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 01 Oct 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/s-it-solutions/</guid></item><item><title>Python Snippet</title><link>https://boyter.org/2010/09/python-snippet/</link><description>&lt;p&gt;The below is a quick Python snippet which I use on a day to day basis for weeks, then promptly forget. Essentially its reading from standard input and then doing something with it. Very useful when you are trying to process data on the command line and have forgotten how to use awk/sed properly and grep has run out of steam.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-python"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #f92672;"&gt;import&lt;/span&gt; sys
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #f92672;"&gt;import&lt;/span&gt; re
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #66d9ef;"&gt;for&lt;/span&gt; line &lt;span style="color: #f92672;"&gt;in&lt;/span&gt; sys&lt;span style="color: #f92672;"&gt;.&lt;/span&gt;stdin:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  values &lt;span style="color: #f92672;"&gt;=&lt;/span&gt; line&lt;span style="color: #f92672;"&gt;.&lt;/span&gt;split(&lt;span style="color: #e6db74;"&gt;','&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  print &lt;span style="color: #e6db74;"&gt;"&lt;/span&gt;&lt;span style="color: #e6db74;"&gt;%s&lt;/span&gt;&lt;span style="color: #ae81ff;"&gt;\t&lt;/span&gt;&lt;span style="color: #e6db74;"&gt;%s&lt;/span&gt;&lt;span style="color: #e6db74;"&gt;"&lt;/span&gt;&lt;span style="color: #f92672;"&gt;%&lt;/span&gt;(values[&lt;span style="color: #ae81ff;"&gt;0&lt;/span&gt;],values[&lt;span style="color: #ae81ff;"&gt;1&lt;/span&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The above just takes standard input, splits it on commas and prints out out with a tab space between them. A useless example, but shows the concept quite well.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Wed, 29 Sep 2010 09:53:24 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/09/python-snippet/</guid></item><item><title>How To Use Twitter OAuth On Android</title><link>https://honza.pokorny.ca/2010/09/how-to-use-twitter-oauth-on-android/</link><description>&lt;p&gt;If you are developing an application for the Android platform, and you need to
interact with the Twitter API, you now have to use OAuth to authenticate the
user. In this article, we will have a look on how you can do that.&lt;/p&gt;
&lt;h2 id="what-is-oauth"&gt;What is OAuth?&lt;/h2&gt;
&lt;p&gt;OAuth is a way of accessing a user&amp;rsquo;s data (e.g. tweets) without asking for the
user&amp;rsquo;s username and password. Your application opens the Twitter website which
will ask the user if they want to allow you to access their data. If they do,
they are taken back to the application and can start using it. You can find
more about OAuth all over the web.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;There are a couple of .jars that you will need for this to work.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;signpost-commonshttp4-1.2.1.1.jar&lt;/li&gt;
&lt;li&gt;signpost-core-1.2.1.1.jar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can download them &lt;a href="https://github.com/kaeppler/signpost"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="basic-activity"&gt;Basic Activity&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s say we have an activity running where the user can start the
authentication process. There is nothing special about this activity, except
for some text and a button. When the user clicks the button, the OAuth process
will be started. From the button&amp;rsquo;s &lt;code&gt;onClickListener()&lt;/code&gt; we will call the
&lt;code&gt;startOAuth()&lt;/code&gt; method of our activity.&lt;/p&gt;
&lt;p&gt;We will add a few attributes to our activity. Let&amp;rsquo;s call the activity Main.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-java"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #81a1c1; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;class&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;Main&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;extends&lt;/span&gt; Activity &lt;span style="color: #eceff4;"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #81a1c1; font-weight: bold;"&gt;private&lt;/span&gt; CommonsHttpOAuthConsumer httpOauthConsumer&lt;span style="color: #eceff4;"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #81a1c1; font-weight: bold;"&gt;private&lt;/span&gt; OAuthProvider httpOauthprovider&lt;span style="color: #eceff4;"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #81a1c1; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;static&lt;/span&gt; String consumerKey &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; &lt;span style="color: #a3be8c;"&gt;"abc"&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #81a1c1; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;static&lt;/span&gt; String consumerSecret &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; &lt;span style="color: #a3be8c;"&gt;"abc"&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #81a1c1; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;final&lt;/span&gt; String CALLBACKURL &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; &lt;span style="color: #a3be8c;"&gt;"app://twitter"&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #d08770;"&gt;@Override&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #81a1c1; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #81a1c1;"&gt;void&lt;/span&gt; &lt;span style="color: #88c0d0;"&gt;onCreate&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;Bundle savedInstanceState&lt;span style="color: #eceff4;"&gt;)&lt;/span&gt; &lt;span style="color: #eceff4;"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        &lt;span style="color: #81a1c1; font-weight: bold;"&gt;super&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;onCreate&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;savedInstanceState&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        &lt;span style="color: #eceff4;"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #eceff4;"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;consumerKey&lt;/code&gt; and &lt;code&gt;consumerSecret&lt;/code&gt; will store your app&amp;rsquo;s unique keys that
you will get from Twitter. &lt;code&gt;CALLBACK&lt;/code&gt; is a little different. This is used
when the application is authorized on the web, and the control is returned back
to the Main activity. For the mobile browser to be able to call the application
and tell it that the OAuth business has gone well, it needs a call back. Both
app and twitter can be exchanged for anything else.&lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s have a look at the &lt;code&gt;startOAuth()&lt;/code&gt; method.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-java"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #81a1c1; font-weight: bold;"&gt;try&lt;/span&gt; &lt;span style="color: #eceff4;"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    httpOauthConsumer &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;new&lt;/span&gt; CommonsHttpOAuthConsumer&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;consumerKey&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; consumerSecret&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    httpOauthprovider &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;new&lt;/span&gt; DefaultOAuthProvider&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;"http://twitter.com/oauth/request_token"&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;                                            &lt;span style="color: #a3be8c;"&gt;"http://twitter.com/oauth/access_token"&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;                                            &lt;span style="color: #a3be8c;"&gt;"http://twitter.com/oauth/authorize"&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    String authUrl &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; httpOauthprovider&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;retrieveRequestToken&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;httpOauthConsumer&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; CALLBACKURL&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #616e87; font-style: italic;"&gt;// Open the browser&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    startActivity&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;&lt;span style="color: #81a1c1; font-weight: bold;"&gt;new&lt;/span&gt; Intent&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;Intent&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;ACTION_VIEW&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; Uri&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;parse&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;authUrl&lt;span style="color: #eceff4;"&gt;)));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #eceff4;"&gt;}&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;catch&lt;/span&gt; &lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;Exception e&lt;span style="color: #eceff4;"&gt;)&lt;/span&gt; &lt;span style="color: #eceff4;"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    Toast&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;makeText&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;&lt;span style="color: #81a1c1; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; e&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;getMessage&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(),&lt;/span&gt; Toast&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;LENGTH_LONG&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;).&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;show&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #eceff4;"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here we create the necessary OAuth objects which will in turn generate the
unique authenticating URL. Once we have the URL we open the browser and point
it to that URL. The user will be presented with a dialog asking them to allow
or to deny your application access.&lt;/p&gt;
&lt;p&gt;In order for our activity to be able to receive the callback, we need to add a
few things the Android manifest file. Change the applications definition to the
following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-xml"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #81a1c1;"&gt;&amp;lt;activity&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;android:name=&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;"Main"&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;android:launchMode=&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;"singleInstance"&lt;/span&gt;&lt;span style="color: #81a1c1;"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #81a1c1;"&gt;&amp;lt;intent-filter&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;         &lt;span style="color: #81a1c1;"&gt;&amp;lt;action&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;android:name=&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;"android.intent.action.VIEW"&lt;/span&gt; &lt;span style="color: #81a1c1;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;         &lt;span style="color: #81a1c1;"&gt;&amp;lt;category&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;android:name=&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;"android.intent.category.DEFAULT"&lt;/span&gt; &lt;span style="color: #81a1c1;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        &lt;span style="color: #81a1c1;"&gt;&amp;lt;category&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;android:name=&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;"android.intent.category.BROWSABLE"&lt;/span&gt; &lt;span style="color: #81a1c1;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        &lt;span style="color: #81a1c1;"&gt;&amp;lt;data&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;android:scheme=&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;"app"&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;android:host=&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;"twitter"&lt;/span&gt; &lt;span style="color: #81a1c1;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #81a1c1;"&gt;&amp;lt;/intent-filter&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #81a1c1;"&gt;&amp;lt;/activity&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note that if you changed the app and twitter in the &lt;code&gt;CALLBACK&lt;/code&gt; variable
above, you will need to make sure that the change is reflected here. This
basically allows the activity to receive data from a foreign source - our
browser.&lt;/p&gt;
&lt;p&gt;Now we need to catch the callback and handle it. We do that by overriding the
&lt;code&gt;onNewIntent()&lt;/code&gt; method of our Main activity.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-java"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #d08770;"&gt;@Override&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #81a1c1; font-weight: bold;"&gt;protected&lt;/span&gt; &lt;span style="color: #81a1c1;"&gt;void&lt;/span&gt; &lt;span style="color: #88c0d0;"&gt;onNewIntent&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;Intent intent&lt;span style="color: #eceff4;"&gt;)&lt;/span&gt; &lt;span style="color: #eceff4;"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #81a1c1; font-weight: bold;"&gt;super&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;onNewIntent&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;intent&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    Uri uri &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; intent&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;getData&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #616e87; font-style: italic;"&gt;//Check if you got NewIntent event due to Twitter Call back only&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #81a1c1; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;uri &lt;span style="color: #81a1c1;"&gt;!=&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;null&lt;/span&gt; &lt;span style="color: #81a1c1;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; uri&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;toString&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;().&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;startsWith&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;CALLBACKURL&lt;span style="color: #eceff4;"&gt;))&lt;/span&gt; &lt;span style="color: #eceff4;"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        String verifier &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; uri&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;getQueryParameter&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;oauth&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;signpost&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;OAuth&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;OAUTH_VERIFIER&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        &lt;span style="color: #81a1c1; font-weight: bold;"&gt;try&lt;/span&gt; &lt;span style="color: #eceff4;"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;            &lt;span style="color: #616e87; font-style: italic;"&gt;// this will populate token and token_secret in consumer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;            httpOauthprovider&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;retrieveAccessToken&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;httpOauthConsumer&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; verifier&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;            String userKey &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; httpOauthConsumer&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;getToken&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;            String userSecret &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; httpOauthConsumer&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;getTokenSecret&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;            &lt;span style="color: #616e87; font-style: italic;"&gt;// Save user_key and user_secret in user preferences and return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;            SharedPreferences settings &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; getBaseContext&lt;span style="color: #eceff4;"&gt;().&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;getSharedPreferences&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;"your_app_prefs"&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; 0&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;            SharedPreferences&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;Editor&lt;/span&gt; editor &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; settings&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;edit&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;            editor&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;putString&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;"user_key"&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; userKey&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;            editor&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;putString&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;"user_secret"&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; userSecret&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;            editor&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;commit&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        &lt;span style="color: #eceff4;"&gt;}&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;catch&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;Exception e&lt;span style="color: #eceff4;"&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        &lt;span style="color: #eceff4;"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #eceff4;"&gt;}&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;else&lt;/span&gt; &lt;span style="color: #eceff4;"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        &lt;span style="color: #616e87; font-style: italic;"&gt;// Do something if the callback comes from elsewhere&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #eceff4;"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #eceff4;"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;OK, there&amp;rsquo;s quite a bit there. We extract the data that the browser sent back
to us. This data is used to verify that the authentication was successful and
that we can now access the user&amp;rsquo;s data. From the data, we get the user&amp;rsquo;s key
and their secret. We save that into the application&amp;rsquo;s shared preferences file
and return.&lt;/p&gt;
&lt;p&gt;Now we are good to go. We can make authenticated requests to Twitter API on
behalf of the user.&lt;/p&gt;
&lt;p&gt;For example, to get the user&amp;rsquo;s home timeline, you would do something like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-java"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;HttpGet get &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;new&lt;/span&gt; HttpGet&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;"http://api.twitter.com/version/statuses/home_timeline.json"&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;HttpParams params &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;new&lt;/span&gt; BasicHttpParams&lt;span style="color: #eceff4;"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;HttpProtocolParams&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;setUseExpectContinue&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;params&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;get&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;setParams&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;params&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #616e87; font-style: italic;"&gt;// sign the request to authenticate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;httpOauthConsumer&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;sign&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;get&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;String responsex &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; mClient&lt;span style="color: #eceff4;"&gt;.&lt;/span&gt;&lt;span style="color: #8fbcbb;"&gt;execute&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;get&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;new&lt;/span&gt; BasicResponseHandler&lt;span style="color: #eceff4;"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;JSONArray array &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;new&lt;/span&gt; JSONArray&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;responsex&lt;span style="color: #eceff4;"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And the array variable is a list of the latest tweets in the user&amp;rsquo;s home timeline.&lt;/p&gt;</description><author>Honza Pokorný</author><pubDate>Wed, 29 Sep 2010 04:31:00 GMT</pubDate><guid isPermaLink="true">https://honza.pokorny.ca/2010/09/how-to-use-twitter-oauth-on-android/</guid></item><item><title>A Speedier Rails App using Rails 3.1 + Arel 2.0</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/a-speedier-rails-app-using-rails-3-1-arel-2-0</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Wed, 29 Sep 2010 03:51:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/a-speedier-rails-app-using-rails-3-1-arel-2-0</guid></item><item><title>Give Gifi!</title><link>https://blog.yiningkarlli.com/2010/09/give-gifi.html</link><description>&lt;p&gt;A few weeks ago I joined a startup founded by a few Penn alums called &lt;a href="http://www.venmo.com/"&gt;Venmo&lt;/a&gt;! My project at Venmo for the past few weeks has been helping my friend and co-worker, &lt;a href="http://twitter.com/ayanonagon"&gt;Ayaka Nonaka&lt;/a&gt;, with a new app from Venmo called &lt;a href="http://www.givegifi.com/"&gt;Gifi&lt;/a&gt;, which is a Foursquare/Venmo mashup that lets people leave Venmo money at geographic locations. I’ve been working on Gifi’s &lt;a href="http://www.givegifi.com/"&gt;website&lt;/a&gt; and overall look. Here’s some of the artwork I did for Gifi:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Sep/quizzical.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Sep/quizzical.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Sep/panels_small.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Sep/panels_small.png" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Wed, 29 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/09/give-gifi.html</guid></item><item><title>Git - removing files permanently - gitignore</title><link>https://arnorhs.dev/posts/2010-09-29/git-removing-files-permanently-gitignore/</link><description>I'm a very new user of Git. I've been using it for some time to download and install repositories, like most people, but didn't use it for source control yet. Recently I've started using it, though, so I've been bumping into small problems along the way. One problem I've had was with trying to find out how to keep certain files out of a repository. I had tried Googling a few terms, but that only brought up results for actually removing a file once and for all from the directory tree and from the repository. I had been typing something like git remove files permanently.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Wed, 29 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-09-29/git-removing-files-permanently-gitignore/</guid></item><item><title>My Take on css-tricks.com's Group Design Project</title><link>https://arnorhs.dev/posts/2010-09-29/my-take-on-css-tricks-coms-group-design-project/</link><description>I ran across this post yesterday, by css-tricks.com. They had a little UI design competition where they asked participants to design and develop a UI for editing and deleting items of a list. It's a cool idea for a competition and you can read the whole thing here: https://css-tricks.com/ui-pattern-ideas-list-with-functions/ I chimed in at the comments, but realized quickly that this should become a blog post by itself.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Wed, 29 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-09-29/my-take-on-css-tricks-coms-group-design-project/</guid></item><item><title>Welcome!</title><link>https://michael.mior.ca/blog/welcome/</link><description>&lt;p&gt;This is my new blog which I’ve been meaning to put up for some time now.
I’ve been looking for a way to share some of the various scripts I’ve written and tips I’ve come up with.
Hopefully someone out there in the blogosphere will find these useful.
I plan to post on a fairly wide range of topics, but all centred around programming and the web.
If you’re not ready to subscribe just yet, you can also &lt;a href="https://twitter.com/michaelmior"&gt;follow me&lt;/a&gt; on Twitter.&lt;/p&gt;
&lt;p&gt;If you have any suggestions or topics you’d like to see for a post, feel free to &lt;a href="https://michael.mior.ca/contact/"&gt;contact me&lt;/a&gt;.&lt;/p&gt;</description><author>Michael Mior</author><pubDate>Tue, 28 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://michael.mior.ca/blog/welcome/</guid></item><item><title>How to Crack Your Forgotten Windows Password</title><link>https://justingarrison.com/blog/2010-09-28-how-to-crack-your-forgotten-windows-password/</link><description>Here at How-To Geek, we’ve covered many different ways to reset your password</description><author>Justin Garrison's Homepage</author><pubDate>Tue, 28 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-09-28-how-to-crack-your-forgotten-windows-password/</guid></item><item><title>Every team needs StatusNet</title><link>https://blog.steren.fr/2010/09/27/every-team-needs-statusnet/</link><author>Steren's essays</author><pubDate>Mon, 27 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.steren.fr/2010/09/27/every-team-needs-statusnet/</guid></item><item><title>Lessons Learned With My Recent Node.js Application</title><link>https://james-carr.org/posts/lessons-learned-nodejs-strangeloop-2010/</link><description>Recently, I developed a web application for my friend Alex Miller&amp;rsquo;s conference, Strange Loop. The app accepted talk submissions and gathered votes on those submissions to rank the top ones. I hosted the application on Heroku&amp;rsquo;s node.js beta preview and used a free CouchOne instance for the data store. Although I encountered some difficulties, I learned some important lessons that I thought I&amp;rsquo;d share.
Tag your last successful Heroku deployment. While adding one additional feature to the site, the app worked fine on my laptop but failed on Heroku for reasons I couldn&amp;rsquo;t figure out for quite some time.</description><author>James Carr</author><pubDate>Fri, 24 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://james-carr.org/posts/lessons-learned-nodejs-strangeloop-2010/</guid></item><item><title>How to Backup Your Linux PC with Simple Backup</title><link>https://justingarrison.com/blog/2010-09-24-how-to-backup-your-linux-pc-with-simple-backup/</link><description>It doesn’t matter if you are using Windows, OS X, or Linux, everyone should do</description><author>Justin Garrison's Homepage</author><pubDate>Fri, 24 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-09-24-how-to-backup-your-linux-pc-with-simple-backup/</guid></item><item><title>Statistics Based Lorem Ipsum Generator</title><link>https://donatstudios.com/lorem_ipsum_generator</link><description>&lt;fieldset&gt;
&lt;p&gt;It strikes me now, many years later, that what I'd built was essentially a PHP markov chain&lt;/p&gt;
&lt;/fieldset&gt;

&lt;p&gt;Several months ago I was wondering to myself if you could detect patterns in a list of words and then use those patterns to generate a new list of fake &amp;ldquo;words&amp;rdquo;. A kind of a &lt;em&gt;flavored&lt;/em&gt; Lorem Ipsum generator, where I could change the feel of the sentences by switching out the data set.  I&amp;rsquo;m sure thousands of developers have done this before me – but it was a fun thought experiment.&lt;/p&gt;
&lt;p&gt;I threw together a little script in PHP to test the idea, and the results were kind of interesting so I figured I'd throw it on my site - Anyway, here are some examples in action – you can hit reload for a random ipsum!  The code and a sample dataset are below.&lt;/p&gt;

&lt;fieldset style="clear: both;"&gt;&lt;legend&gt;Faux English Demo&lt;/legend&gt; &lt;/fieldset&gt;
&lt;fieldset&gt;&lt;legend&gt;Faux Latin-y English Demo&lt;/legend&gt; &lt;/fieldset&gt;
&lt;fieldset&gt;&lt;legend&gt;Faux Japanese Demo&lt;/legend&gt; &lt;/fieldset&gt;
&lt;br clear="all" /&gt;
&lt;br /&gt;
You need to supply a set of words for it to base the pattern off - here is my &lt;strong&gt;&lt;a href="https://gist.github.com/raw/592419/2c7eb9757e578f743796699f10433c53dab28413/words_example.php" target="_blank"&gt;sample dataset&lt;/a&gt;&lt;/strong&gt;.
&lt;br /&gt;</description><author>Donat Studios</author><pubDate>Thu, 23 Sep 2010 05:02:25 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/lorem_ipsum_generator</guid></item><item><title>Paying attention: when a (kind of) hacker meets sociologists</title><link>https://stop.zona-m.net/2010/09/paying-attention-when-a-kind-of-hacker-meets-sociologists/</link><description>&lt;p&gt;Attention is precious and scarce like gold in this age of continuous interruptions, tweets limited to 140 characters and people for which something simply doesn&amp;rsquo;t exist if it doesn&amp;rsquo;t pop out in the first page of Google Search results. In september 2010 I have participated to a conference devoted to this theme, that is&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 21 Sep 2010 03:50:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/09/paying-attention-when-a-kind-of-hacker-meets-sociologists/</guid></item><item><title>3 Easy Ways to Connect to Windows Shared Folders from Linux</title><link>https://justingarrison.com/blog/2010-09-21-3-easy-ways-to-connect-to-windows-shared-folders-from-linux/</link><description>Connecting to file servers is something most people do on a daily basis</description><author>Justin Garrison's Homepage</author><pubDate>Tue, 21 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-09-21-3-easy-ways-to-connect-to-windows-shared-folders-from-linux/</guid></item><item><title>Oracle Closed World presentation links</title><link>https://tanelpoder.com/2010/09/20/oracle-closed-world-presentation-links/</link><description>&lt;p&gt;Thanks to everybody who attended my OCW hacking session!&lt;/p&gt;
&lt;p&gt;Sorry to guys who attended via webinar – I’ll do the session again in a few weeks, with audio from end to end hopefully! And I will get someone to assist me with monitoring the transmission quality and attendee questions etc.&lt;/p&gt;
&lt;p&gt;Note that this stuff is mostly for hacking and fun – don’t use the undocumented stuff in production!&lt;/p&gt;
&lt;p&gt;The links are below:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 21 Sep 2010 01:51:15 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/09/20/oracle-closed-world-presentation-links/</guid></item><item><title>How Cuil got $33 million in funding?</title><link>https://boyter.org/2010/09/cuil-33-million-funding/</link><description>&lt;p&gt;Well it appears that &lt;a href="http://www.cuil.com/"&gt;Cuil&lt;/a&gt; the troubled search engine that didn&amp;rsquo;t &lt;a href="http://techcrunch.com/2010/09/17/cuil-goes-down-and-we-hear-its-down-for-good/"&gt;is dead&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While I am not that surprised by this considering its lackluster results, I do feel that this is bad for the web in general. With the Yahoo/Bing deal we now have very few independent indexes that power search on the web. The big players are down to the following it would seem,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bing.com/"&gt;Bing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ask.com/"&gt;Ask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.gigablast.com/"&gt;Gigablast&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blekko.com/"&gt;Blekko&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What did suprise me about this though was the question people were asking about how the founders of Cuil ever managed to secure $33 million in funding. The answer is actually pretty simple.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Mon, 20 Sep 2010 07:17:57 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/09/cuil-33-million-funding/</guid></item><item><title>Record Videos of Your Desktop on Any OS for Free</title><link>https://justingarrison.com/blog/2010-09-20-record-your-desktop-on-any-os-for-free/</link><description>Sometimes screen shots just aren’t enough to explain how to do something</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 20 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-09-20-record-your-desktop-on-any-os-for-free/</guid></item><item><title>Save Herne Hill.</title><link>https://rob.sh/post/193/</link><description>&lt;div align="center"&gt;&lt;a href="http://www.savethevelodrome.com/"&gt;&lt;img alt="Save Herne Hill!" src="https://cdn.rob.sh/img/save-herne-hill.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="height: 10px;"&gt;&lt;/div&gt;
Herne Hill is looking for support, it's both historic, and a fantastic facility in London. It'd be great to see more people supporting this! &lt;a href="http://www.savethevelodrome.com/"&gt;Here's the campaign page&lt;/a&gt;.</description><author>rob.sh</author><pubDate>Mon, 20 Sep 2010 00:24:38 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/193/</guid></item><item><title>Beattie Is Three</title><link>https://ho.dges.online/words/commonplace/beattie-is-three-by-adrian-mitchell/</link><description>&lt;p&gt;At the top of the stairs&lt;br /&gt;
I ask for her hand. OK.&lt;br /&gt;
She gives it to me.&lt;br /&gt;
How her fist fits my palm,&lt;br /&gt;
A bunch of consolation.&lt;br /&gt;
We take our time&lt;br /&gt;
Down the steep carpetway&lt;br /&gt;
As I wish silently&lt;br /&gt;
That the stairs were endless.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Adrian Mitchell&lt;/em&gt;&lt;/p&gt;</description><author>ho.dges.online</author><pubDate>Fri, 17 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ho.dges.online/words/commonplace/beattie-is-three-by-adrian-mitchell/</guid></item><item><title>`bundle: command not found` or `Could not find RubyGem bundler (&amp;gt;= 0)` During Capistrano Deployment? No Problems!</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/bundle-command-not-found-or-could-not-find-rubygem-bundler-0-during-capistrano-deployment-no-problems</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Thu, 16 Sep 2010 08:59:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/bundle-command-not-found-or-could-not-find-rubygem-bundler-0-during-capistrano-deployment-no-problems</guid></item><item><title>PHP Entity Generator</title><link>https://boyter.org/2010/09/php-entity-generator/</link><description>&lt;p&gt;A while ago I was using the Django Framework and was a big fan of the parts of it which save time. One part which I both loved and hated was the &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;ORM&lt;/a&gt;. The bit I loved was for creating new database entities, loading them and modifying them. The ability to just load up an object and modify it and then call its save method saved me a lot of time. What I hated about it however was using it for doing any form of complex query (since I am very comfortable with SQL) and working backwards by designing the model then the database.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Wed, 15 Sep 2010 03:22:11 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/09/php-entity-generator/</guid></item><item><title>eBook pilot</title><link>https://jasoneckert.github.io/myblog/ebook-pilot/</link><description>&lt;p&gt;&lt;img alt="class" src="ebookpilot.jpg#center" title="class" /&gt;&lt;/p&gt;
&lt;p&gt;Here is my class with their new Kindle DXs. Notice the absence of heavy textbooks on the desks!&lt;/p&gt;
&lt;h3 id="update"&gt;UPDATE:&lt;/h3&gt;
&lt;p&gt;Unfortunately, while it was cool to carry around all of our textbooks in PDF format on our Kindle DXs, the pilot ultimately led to us not adopting eBooks exclusively. Simply put, many of our students just preferred the ease of printed books. eBooks may become the norm in the future, but probably only when everyone carries a laptop with them, and can access a second monitor for it in the classroom.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Wed, 15 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/ebook-pilot/</guid></item><item><title>Copy and Paste in Outlook Without Messing Up Your Formatting</title><link>https://justingarrison.com/blog/2010-09-14-copy-and-paste-in-outlook-without-messing-up-your-formatting/</link><description>Often times you will need to copy and paste text into an email from</description><author>Justin Garrison's Homepage</author><pubDate>Tue, 14 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-09-14-copy-and-paste-in-outlook-without-messing-up-your-formatting/</guid></item><item><title>A Study of Pricing and Billing Models for the Web</title><link>https://www.brightball.com/articles/a-study-of-pricing-and-billing-models-for-the-web</link><description>Asking people for payment for work is a touchy subject for everyone involved.  We've had the luxury of experimenting a little bit over our first couple of years, and here's what we learned.</description><author>Brightball Articles</author><pubDate>Mon, 13 Sep 2010 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.brightball.com/articles/a-study-of-pricing-and-billing-models-for-the-web</guid></item><item><title>Coming Out of Hibernation</title><link>https://johnj.com/posts/coming-out-of-hibernation/</link><description>&lt;p&gt;





&lt;a href="https://johnj.com/AE3F3E67BAA94727.jpg"&gt;&lt;img class="resize" src="https://johnj.com/AE3F3E67BAA94727_hu_a3f1b83d1d716466.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
I have been moving things around a bit here in preparation for my
ninth and probably last trip. (Yes, I know, I always say it is going to
be my last trip. But this season marks the end of the construction of
&lt;a href="http://icecube.wisc.edu"&gt;IceCube&lt;/a&gt;, so far fewer people will be going to Pole after this austral
summer.) I am tentatively scheduled to leave Chicago for the
South Pole on Jan. 1, 2011. After taking last season off, I’m excited
to go back for one last time.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Mon, 13 Sep 2010 19:04:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/coming-out-of-hibernation/</guid></item><item><title>Regex Substitution in Haskell</title><link>https://0xfe.blogspot.com/2010/09/regex-substitution-in-haskell.html</link><description>I'm shocked and appalled at the fact that there is no generic regex substitution function in the GHC libraries. All I'm looking for is a simple function equivalent to perl's &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;s/.../.../&lt;/span&gt; expression.&lt;br /&gt;
&lt;br /&gt;
After digging around a bit, I found &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;subRegex&lt;/span&gt; in &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;regex-compat&lt;/span&gt;. While this works well, it does not use PCRE, and as far as I can tell, there's no support for &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ByteString&lt;/span&gt;s.&lt;br /&gt;
&lt;br /&gt;
Grrr.&lt;br /&gt;
&lt;br /&gt;
Anyhow, I took the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;subRegex&lt;/span&gt; implementation from &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;regex-compat&lt;/span&gt; and mangled it slightly to work with &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Text.Regex.PCRE&lt;/span&gt;. I also added the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;(=~$)&lt;/span&gt; function which feels a bit more familiar to perl users. For example:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;Prelude PCRESub&amp;gt; "me boo" =~$ ("(me) boo", "he \\1")
"he me"&lt;/pre&gt;The above is equivalent to perl's:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;$text = "me boo";
$text =~ s/(me) boo/he $1/;&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;(~=$)&lt;/span&gt; is implemented with &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;reSub&lt;/span&gt; (which is also exported by &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;PCRESub&lt;/span&gt;). &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;reSub&lt;/span&gt; allows you to provide your own &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;CompOption&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ExecOption&lt;/span&gt; options.&lt;br /&gt;
&lt;br /&gt;
Here's the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;PCRESub&lt;/span&gt; module:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;-- PCRE-based Regex Substitution
-- Mohit Muthanna Cheppudira
--
-- Based off code by Chris Kuklewicz from regex-compat library.
--
-- Requires Text.Regex.PCRE from regex-pcre.

module PCRESub(
  (=~$),
  reSub
) where

import Data.Array((!))
import Text.Regex.PCRE

subRegex :: Regex                          -- ^ Search pattern
         -&gt; String                         -- ^ Input string
         -&gt; String                         -- ^ Replacement text
         -&gt; String                         -- ^ Output string
subRegex _ "" _ = ""
subRegex regexp inp repl =
  let compile _i str [] = \ _m -&gt;  (str++)
      compile i str (("\\",(off,len)):rest) =
        let i' = off+len
            pre = take (off-i) str
            str' = drop (i'-i) str
        in if null str' then \ _m -&gt; (pre ++) . ('\\':)
             else \  m -&gt; (pre ++) . ('\\' :) . compile i' str' rest m
      compile i str ((xstr,(off,len)):rest) =
        let i' = off+len
            pre = take (off-i) str
            str' = drop (i'-i) str
            x = read xstr
        in if null str' then \ m -&gt; (pre++) . ((fst (m!x))++)
             else \ m -&gt; (pre++) . ((fst (m!x))++) . compile i' str' rest m
      compiled :: MatchText String -&gt; String -&gt; String
      compiled = compile 0 repl findrefs where
        bre = makeRegexOpts defaultCompOpt execBlank "\\\\(\\\\|[0-9]+)"
        findrefs = map (\m -&gt; (fst (m!1),snd (m!0))) (matchAllText bre repl)
      go _i str [] = str
      go i str (m:ms) =
        let (_,(off,len)) = m!0
            i' = off+len
            pre = take (off-i) str
            str' = drop (i'-i) str
        in if null str' then pre ++ (compiled m "")
             else pre ++ (compiled m (go i' str' ms))
  in go 0 inp (matchAllText regexp inp)

-- Substitue re with sub in str using options copts and eopts.
reSub :: String -&gt; String -&gt; String -&gt; CompOption -&gt; ExecOption -&gt; String
reSub str re sub copts eopts = subRegex (makeRegexOpts copts eopts re) str sub

-- Substitute re with sub in str, e.g.,
--
-- The perl expression:
--
--   $text = "me boo";
--   $text =~ s/(me) boo/he $1/;
--
-- can be written as:
--
--   text = "me boo" =~$ ("(me) boo", "he \\1")
--
(=~$) :: String -&gt; (String, String) -&gt; String
(=~$) str (re, sub) = reSub str re sub defaultCompOpt defaultExecOpt&lt;/pre&gt;Example usage:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;import PCRESub

main = do
  let text = "me boo" =~$ ("(me) boo", "he \\1")
  print text&lt;/pre&gt;Paste this code in, or browse the source at my GitHub repo: &lt;a href="http://github.com/0xfe/experiments/blob/master/haskell/PCRESub.hs"&gt;PCRESub.hs&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Someone please make this work across all the regex backends (and add support for &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ByteString&lt;/span&gt;s)!</description><author>0xFE - 11111110b - 0376</author><pubDate>Mon, 13 Sep 2010 18:03:44 GMT</pubDate><guid isPermaLink="true">https://0xfe.blogspot.com/2010/09/regex-substitution-in-haskell.html</guid></item><item><title>Google's “Colossus”</title><link>https://boyter.org/2010/09/googles-colossus-explained/</link><description>&lt;p&gt;So Google has called their new indexing system &lt;a href="http://www.theregister.co.uk/2010/09/09/google_caffeine_explained/"&gt;Caffeine, which is powered by Google&amp;rsquo;s BigTable&lt;/a&gt;, or as they call it internally Colossus. I guess now all we need is Microsoft to announce their Bing back-end is called &lt;a href="http://www.imdb.com/title/tt0064177/"&gt;&amp;ldquo;Guardian&amp;rdquo; and the world is over&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Actually looking at all of the information they have shows that while everyone was chasing MapReduce that Google was looking at implementing a distributed database where each update/trigger implements an update to the index. I am certain that this wouldn&amp;rsquo;t be as efficient as running a MapReduce index build over the whole cluster, but would allow for real time updates.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Mon, 13 Sep 2010 02:07:20 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/09/googles-colossus-explained/</guid></item><item><title>VexFlow Google Group</title><link>https://0xfe.blogspot.com/2010/09/vexflow-google-group.html</link><description>I've been out of touch for a while, and it took me way too long to set this up; but hey - better late than never. :-)&lt;br /&gt;
&lt;br /&gt;
After looking into various options for the VexFlow mailing list, I eventually decided to use Google Groups. It's super easy to setup and manage, and has all the features I'll ever need.&lt;br /&gt;
&lt;br /&gt;
If you're interested in hacking, discussing, or simply keeping up with VexFlow, sign up here:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;&lt;a href="http://groups.google.com/group/vexflow"&gt;http://groups.google.com/group/vexflow&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Unfortunately, I haven't had the time lately to hack on VexFlow, but I assure you that it's only temporary. I have a bunch of partial changes in the works, along with some interesting ideas floating around.&amp;nbsp;More later.</description><author>0xFE - 11111110b - 0376</author><pubDate>Sun, 12 Sep 2010 19:24:22 GMT</pubDate><guid isPermaLink="true">https://0xfe.blogspot.com/2010/09/vexflow-google-group.html</guid></item><item><title>Using Adobe Minion Pro with LaTeX</title><link>https://bastian.rieck.me/blog/2010/minion/</link><description>&lt;p&gt;This short note explains how to use the font &amp;quot;Adobe Minion
Pro&amp;quot; with the LaTeX typesetting system.&lt;/p&gt;
&lt;p&gt;Luckily, all the work has already been done by other people. Plus, the
font is available &lt;em&gt;for free&lt;/em&gt; by downloading Adobe Reader.&lt;/p&gt;
&lt;h1 id="preparation"&gt;Preparation&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Download &lt;a href="http://get.adobe.com/reader/otherversions"&gt;an older version of Adobe Acrobat
Reader&lt;/a&gt;. Choose the
&lt;code&gt;.tar.gz&lt;/code&gt; for Linux. It is &lt;strong&gt;vital&lt;/strong&gt; that you do not download the most
recent version. Unfortunately, the font metrics (which we will install
later) do &lt;em&gt;not&lt;/em&gt; work with the most recent version of the font.&lt;/li&gt;
&lt;li&gt;Extract the archive; the font is in the file &lt;code&gt;COMMON.TAR&lt;/code&gt; in the
directory &lt;code&gt;Adobe/Reader8/Resource/Font&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install &lt;code&gt;otfinfo&lt;/code&gt; from &lt;code&gt;/usr/ports/print/typetools&lt;/code&gt; (for FreeBSD
users) or using the package manager of your choice.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;otfinfo -v&lt;/code&gt; to inspect the fonts. For &lt;code&gt;MinionPro-Bold.otf&lt;/code&gt;, I get
&lt;code&gt;Version 2.015;PS 002.000;Core 1.0.38;makeotf.lib1.7.9032&lt;/code&gt;. This
version works for me.&lt;/li&gt;
&lt;li&gt;If not already done, create a local &lt;code&gt;texmf&lt;/code&gt;-structure. For the
venerable teTeX-distribution, I had to set the environment variable
&lt;code&gt;TEXMFHOME&lt;/code&gt; to &lt;code&gt;$HOME/.texmf&lt;/code&gt;. I also created the directories
&lt;code&gt;.texmf&lt;/code&gt;, &lt;code&gt;.texmf-config&lt;/code&gt;, &lt;code&gt;.texmf-var&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Copy &lt;code&gt;updmap.cfg&lt;/code&gt; to &lt;code&gt;$HOME/.texmf-config/web2c/&lt;/code&gt;. This file needs to
be modified for the new font.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;texhash&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="font-installation"&gt;Font installation&lt;/h1&gt;
&lt;p&gt;Follow the &lt;a href="http://www.ctan.org/tex-archive/fonts/minionpro"&gt;excellent documentation from
CTAN&lt;/a&gt;. You will be
provided with detailed step-by-step instructions and some helpful
scripts that convert the fonts. After placing everything in the correct
directory (as the tutorial suggest), you are good to go: A simple
&lt;code&gt;\usepackage{MinionPro}&lt;/code&gt; should do the trick.&lt;/p&gt;
&lt;p&gt;My gratitude goes to Achim Blumensath, Andreas Bühmann, and Michael
Zedler for creating and maintaining the aforementioned package.
Otherwise, I would have been hopelessly lost in the mazes of my own
incompetence.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Sun, 12 Sep 2010 15:36:52 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2010/minion/</guid></item><item><title>Cease and desist your password restrictions</title><link>https://peterlyons.com/problog/2010/09/password-restrictions/</link><description>&lt;p&gt;I just tried to create an account at Bed Bath and Beyond. They said my password could only contain letters and numbers. Many sites impose various restrictions on the password, including&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Password must be exactly some length&lt;/li&gt;
&lt;li&gt;Password must be greater than some minimum length&lt;/li&gt;
&lt;li&gt;Password must be smaller than some maximum length&lt;/li&gt;
&lt;li&gt;Password must contain some minimum number of "complex" characters&lt;/li&gt;
&lt;li&gt;Password must NOT contain complex characters&lt;/li&gt;
&lt;li&gt;Password is actually a 4-digit PIN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What this creates is A) major frustration B) a problem with remembering dozens of totally different passwords and C) inability to have a simple "low importance" password for your dozens of accounts you aren't super concerned about.&lt;/p&gt;
&lt;p&gt;Stop this madness. Stop your silly password restrictions. They are incompatible, frustrating, and probably not helping. See the articles below for reference, but there are many others out there if you do a web search.&lt;/p&gt;
&lt;p&gt;References&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.nytimes.com/2010/09/05/business/05digi.html"&gt;A Strong Password Isn’t the Strongest Security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.wired.com/politics/security/commentary/securitymatters/2007/01/72458"&gt;Secure Passwords Keep You Safer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Pete's Points</author><pubDate>Fri, 10 Sep 2010 01:45:38 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/09/password-restrictions/</guid></item><item><title>A response to "Handling Bugs in an Agile Context"</title><link>https://peterlyons.com/problog/2010/09/agile-bugs/</link><description>&lt;p&gt;&lt;a href="http://testobsessed.com/2009/03/13/handling-bugs-in-an-agile-context/"&gt;Handling Bugs in an Agile Context&lt;/a&gt; is a blog post I came across via &lt;a href="http://news.ycombinator.com"&gt;Hacker News&lt;/a&gt; this morning. As is often my experience when reading material on Agile from my perspective of an enterprise software developer, the experience was one of frustration and disbelief.&lt;/p&gt;
&lt;p&gt;So let me quote the portions of the article I find untenable in a enterprise software realm.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Let’s start with the Product Owner. Not all Agile teams use this term. So where my definition says “Product Owner,” substitute in the title or name of the person who, in your organization, is responsible for defining what the software should do. This person might be a Business Analyst, a Product Manager, or some other Business Stakeholder.&lt;/p&gt;
&lt;p&gt;This person is not anyone on the implementation team. Yes, the testers or programmers may have opinions about what’s a bug and what’s not. The implementation team can advise the Product Owner. But the Product Owner decides.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Most of this matches my experience to some degree. Yes we have product owners that are primarily business people. We actually have about two levels of these, we have what we call "Product Managers" who set the more abstract direction for the product overall, and another role called "Functional Architect" that is a mostly technical person that deals with more detailed issues. One way to think about this is the Product Manager decides mostly WHAT the product will do, and the Functional Architect refines that and specifies HOW the product will behave in detail. Note the Functional Architect doesn't define how the IMPLEMENTATION will be done, just the more detailed behavior.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This person is also not the end user or customer. When end users or customers encounter problems in the field, we listen to them. The Product Owner takes their opinions and preferences and needs into account. But the Product Owner is the person who ultimately decides if the customer has found something that violates valid expectations of the behavior of the system.&lt;/p&gt;
&lt;p&gt;Yes, that does put a lot of responsibility on the shoulders of the Product Owner, but that’s where the responsibility belongs. Defining what the software should and should not do is a business decision, not a technical decision.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, that would be great if it worked that way, but it doesn't. The product owner doesn't have enough technical skill or understanding of the details to make decisions on specific bugs. I'm talking about deep, subtle bugs. Think error handling, file encoding, network performance tuning, etc. If a customer complains that our NFS server should by default be configured for a block size of 32768, I'm sorry but the product owner is just not equipped to make a decision on that. Yes, the technical team could explain the situation to him or her in enough detail for understanding, but the decision would be a "no brainer" dictated by how the team framed the explanation. There are trade-off decisions where the tech lead for the feature needs to make a trade off between two things that are both desirable, like high throughput and low latency. And it's not like we get these once in a blue moon. They happen many times in every sprint. We live them day in and day out, and it's the job of the implementation team to independently make good decisions on them. It's a bit demeaning to the implementation team to suggest that they are mere instruments of the product owner's omniscient will. It's a TEAM. EVERYONE takes into account many factors in making decisions on designs, implementations, and bugs every day. The team needs authority and autonomy to make the set of decisions that it is appropriate for them to own, and decisions need to escalate as appropriate for their scope and impact. In my experience, 95% of all bugs are correctly resolved by the team members without any input from the product owner.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Before we declare a story “Done,” if we find something that would violate the Product Owner’s expectations, we fix it. We don’t argue about it, we don’t debate or triage, we just fix it. This is what it means to have a zero tolerance for bugs. This is how we keep the code base clean and malleable and maintainable. That’s how we avoid accumulating technical debt. We do not tolerate broken windows in our code. And we make sure that there are one or more automated tests that would cover that same case so the problem won’t creep back in. Ever.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, that's cute but again, sometimes it's not possible to do that. Here's a real world example. I built a feature that installed some ZIP packages onto some servers. We tested it. It passed and worked. We moved on to the next sprint. Later on, we found out that if the ZIP file's install path contained non-ascii characters, we ran into problems and it failed. OK, so that's a bug. So you are saying "we fix it". You say "We don’t argue about it, we don’t debate or triage, we just fix it". Well, in this case, after several days of me trying to "just fix it", I informed the team that in order to correctly fix this bug I would have to re-implement the entire user story taking a very different approach. This would take several days and since it was a de-facto rewrite, all of the tests would need to be re-run. So how does your advice apply here? It doesn't. We needed to debate and discuss and plan and adjust the backlog and otherwise deal with this reality. I wish I could go to the fire departments that are currently battling the giant wildfire in the next town over and say "Don't debate. Just extinguish it". But it's not a helpful thing to say.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;And since we just fix them as we find them, we don’t need a name for these things. We don’t need to prioritize them. We don’t need to track them in a bug tracking system. We just take care of them right away.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sorry, but this is the delusional rubbish the agile community puts out that makes it OK for me to dismiss you as utterly and hopelessly clueless. Have you really never heard of a bug that is time consuming or difficult to fix? Have you never seen a bug that needs multiple completely different fixes tried before one that really works is identified? Are you accepting applications for citizenship in your universe? It sounds nice.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Usually the motivation for wanting to keep a record of things we won’t fix is to cover our backsides so that when the Product Owner comes back and says “Hey! Why didn’t you catch this?” we can point to the bug database and say “We did too catch it and you said not to fix it. Neener neener neener.” If an Agile team needs to keep CYA records, they have problems that bug tracking won’t fix.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, we have a lot of bugs. My product has been around for almost a decade now. There's value in tracking them. For one, it gives management some concrete numbers to understand that they have technical debt, the product has issues, and we're accumulating more. For two, people hit the bugs. They hit them over and over again. It's a waste to have the issue re-triaged, re-explained every time. We track them so there's one place that explains what this bug is, how it is reproduced, why we haven't fixed it, and how you can work around it. Whether we track this in a bug tracker or a wiki or a KB or whatever doesn't seem as important to me as acknowledging the fact that there are issues that might affect users continually for quite a while (maybe for the rest of the life of the product), and not tracking that data makes the problem worse.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Further, there is a high cost to such record keeping.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Arguably. But there is also a cost to just abandoning them and leaving the new team members and customers to encounter them over and over again and refile the same bug. Yes, sometimes these things last a long time and there's no cost effective way to solve them. For example, in early versions of my product we installed Windows OSes via a DOS boot environment. There was no other viable alternative at the time. DOS has crippling network issues that we couldn't solve, so under some circumstances copying a full OS over the network on DOS would result in DOS hanging. We can't fix this. We just waited for Microsoft to announce WinPE, but that took several years. Instead we documented that if you had an Intel NIC and encountered this issue, there was an obscure workaround you had to do. This seems like a perfectly valid use of a long-term bug database to me.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;And if we’re not doing things right, we may find out that there are an overwhelming number of the little critters escaping. That’s when we know that we have a real problem with our process.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OR, maybe we have a legacy code base with technical debt. Maybe the folks who wrote that code don't work here anymore and this is the only way we find the problems with it. This doesn't necessarily mean we're not doing Agile correctly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Stop the bugs at the source instead of trying to corral and manage the little critters.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thanks. Tell that to my several million lines of legacy code in a half dozen languages that runs on 72 different operating system versions. Done "stopping them at the source" yet? I'll wait. Still not done? Hmm, what's the problem?&lt;/p&gt;
&lt;p&gt;Anyway, that concludes my response to this blog post. The general theme I see in the Agile world is the practitioners are mostly working from a mindset of small web development projects with a new code base. Building enterprise software has realities that create real struggles for us, and we're looking for help, but the pundits out there generally dismiss our struggles without really understanding them and acknowledging their reality. And that's what I find so frustrating. The truth is most of these agile folks could probably provide us with real useful insights, but they first need to come to terms that we have some real problems that need to be considered even if they don't fit within their idealized vision for agile utopia.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Thu, 09 Sep 2010 00:07:27 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/09/agile-bugs/</guid></item><item><title>Sonos pricing insanity continued</title><link>https://peterlyons.com/problog/2010/09/sonos-pricing-insanity/</link><description>&lt;p&gt;So I'm a fan of &lt;a href="http://www.sonos.com"&gt;Sonos&lt;/a&gt; music systems, but they've always been expensive. Almost prohibitively so. But now I can either spend &lt;a href="http://sonos.com/products/controllers/cr200/default.aspx?rdr=true&amp;amp;LangType=1033"&gt;$349&lt;/a&gt; for an additional controller that controls my sonos and does precisely fuck-all else, or I can buy an iPod Touch on &lt;a href="http://boulder.craigslist.org"&gt;craigslist&lt;/a&gt; for $125 and then download the free Sonos controller application, plus do all the other iPod Touch stuff. I'm not sure who Sonos thinks is going to buy this thing anymore other than the utterly rich and utterly clueless.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Tue, 07 Sep 2010 10:17:01 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/09/sonos-pricing-insanity/</guid></item><item><title>No one really cares about web accessibility anyway...</title><link>https://peterlyons.com/problog/2010/09/web_accessibility/</link><description>&lt;p&gt;So if a picture is worth a thousand words, shouldn't it be:&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;&lt;img src="https://peterlyons.com/some/image.jpg" /&gt;
    
        one two three four five six seven....
    

&lt;/pre&gt;
&lt;/div&gt;</description><author>Pete's Points</author><pubDate>Tue, 07 Sep 2010 08:12:19 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/09/web_accessibility/</guid></item><item><title>First Failure at Selling an Application Online</title><link>https://boyter.org/2010/09/failure/</link><description>&lt;p&gt;So I guess now is about the time that I write about my first failure. Although I realised that the project was a failure quite a while ago I never wrote anything about it admitting so. I guess this can be considered my cleansing moment.&lt;/p&gt;
&lt;p&gt;So about a year ago when everyone was jumping on the Twitter bandwagon I remember reading about a simple app called MyTwitterButler that a .NET developer coded up in a few hours and was selling for $10. It was a desktop app that let you type in words to search for and then would follow users who tweeted those words.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Tue, 07 Sep 2010 02:20:36 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/09/failure/</guid></item><item><title>Small Steps 2 – Teaching a Neural Network to Learn the Letter A from B-Z</title><link>https://boyter.org/2010/09/small-steps-2-%E2%80%93-teaching-neural-network-learn-letter-b-z/</link><description>&lt;p&gt;So in the previous article we managed to get our &lt;a href="http://www.wausita.com/2010/08/small-steps-teaching-neural-network-learn-letter/"&gt;neural network to learn the difference between A and B&lt;/a&gt;. I mentioned at the end I was going to next test and teach it on various versions of A and B to see how effective it is, but rather then that I figured teaching a network to learn A from every other letter would be more interesting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Get the source to everything below in &lt;a href="http://www.wausita.com/wp-content/uploads/2010/09/Step2.zip"&gt;Step2&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Mon, 06 Sep 2010 01:50:02 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/09/small-steps-2-%E2%80%93-teaching-neural-network-learn-letter-b-z/</guid></item><item><title>No squids for me, Bruce</title><link>https://peterlyons.com/problog/2010/09/no-squids-for-me-bruce/</link><description>&lt;p&gt;&lt;a href="http://www.schneier.com/"&gt;Bruce Schneier&lt;/a&gt; is a leading author in the technology security and cryptography fields. He is exceedingly rational and pragmatic. I consider his insights on dealing with terrorism to be bar none the best available. His blog often has great insights. However, for reasons I can't understand, he always posts a random post on Fridays about squids. Yes, the sea creature. I don't know why, but it stopped being cute long ago.&lt;/p&gt;
&lt;p&gt;To that end, I've created a &lt;a href="http://pipes.yahoo.com/peterlyons/schneiernosquids"&gt;Yahoo Pipe Feed of the Schneier on Security blog with the Friday Squid Blogging filtered out&lt;/a&gt;. Feel free to subscribe and enjoy.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Sun, 05 Sep 2010 08:16:30 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/09/no-squids-for-me-bruce/</guid></item><item><title>UNIX is broken</title><link>https://peterlyons.com/problog/2010/09/unix-is-broken/</link><description>&lt;p&gt;Reading &lt;a href="http://factor-language.blogspot.com/2010/09/two-things-every-unix-developer-should.html"&gt;this blog post&lt;/a&gt; just makes me cringe. This is why I am so persistently hesitant to bother with C and low level systems programming. They are broken. They are impossible to get right. If even after numerous decades, the &lt;em&gt;cat&lt;/em&gt; program still has bugs in basic system interaction, it's not the programmers, it's the system. Thanks, but no. I'll code in a high level language that lets me focus on delivering functionality to my users, not performing sacrificial rituals to the Gods of K&amp;amp;R, signal processing, and bitmasks.&lt;/p&gt;
&lt;p&gt;At work we have certain code bases that no matter how long we tweak them and how many dozens of bugs we fix, they just never reach a point of stability and reliability. You need to just abandon them and rethink the problem from scratch. Come at it with a different approach and a brand new code base and some analysis that actually addresses all of the edge cases.&lt;/p&gt;
&lt;p&gt;Interestingly, I think the mobile space (iOS, Android) have potential to finally provide a next generation operating system where applications written by average, normal programmers usually function perfectly. Contrast this to most existing operating systems where most programs can be easily made to crash or misbehave in the course of normal use. We've got to get beyond this notion that in order to make a well-behaved application, the developer needs encyclopedic knowledge of bizzarre archaic minutia of the underlying OS.&lt;/p&gt;
&lt;p&gt;Incidentally, that post is written by &lt;a href="http://factorcode.org/slava/"&gt;Slava Pestov&lt;/a&gt;, the creator of the jEdit text editor that has been my primary editor for many years. This guy is good.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Sat, 04 Sep 2010 22:40:03 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/09/unix-is-broken/</guid></item><item><title>Don't use the `@author` Javadoc tag</title><link>https://www.databasesandlife.com/dont-use-the-author-javadoc-tag/</link><description>&lt;p&gt;In Javadoc there is an &lt;code&gt;@author&lt;/code&gt; tag so you can specify who originally wrote the class, method, etc., being documented.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/**
 * This represents a user of the system as stored in Oracle.
 * @author Adrian Smith
 */
class User { ... }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;But really, what&amp;rsquo;s the point, when version-control tools such as &amp;ldquo;svn log&amp;rdquo;, &amp;ldquo;svn blame&amp;rdquo; and exist? (And any project where it would be necessary to determine the author necessarily involves more than one person, any (at least) any project involving more than one person requires a version control system.)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 03 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/dont-use-the-author-javadoc-tag/</guid></item><item><title>Which number takes more space in an Oracle row?</title><link>https://tanelpoder.com/2010/09/02/which-number-takes-more-space-in-an-oracle-row/</link><description>&lt;p&gt;So, which number takes &lt;strong&gt;more&lt;/strong&gt; bytes inside an Oracle row?&lt;/p&gt;
&lt;p&gt;A: 123&lt;/p&gt;
&lt;p&gt;B:  1000000000000000000000000000000000000&lt;/p&gt;
&lt;p&gt;And the correct answer is … (drumroll) … A! The “big” number 1000000000000000000000000000000000000 actually takes less space than the “small” 123!&lt;/p&gt;
&lt;p&gt;Let’s verify this:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; select vsize(123) A, vsize(1000000000000000000000000000000000000) B from dual;

         A          B
---------- ----------
         3          2&lt;/pre&gt;
&lt;p&gt;WTF? Why does such a small number 123 take more space than  1000000000000000000000000000000000000 ?&lt;/p&gt;
&lt;p&gt;Well, the answer lies in how Oracle stores numbers. Oracle NUMBER datatype doesn’t store numbers in their platform-native integer format. Oracle uses it’s own format which stores numbers in scientific notation, in exponent-mantissa form. More details about this &lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#sthref3818" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 02 Sep 2010 16:32:00 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/09/02/which-number-takes-more-space-in-an-oracle-row/</guid></item><item><title>Upgrade Your old iPod with Rockbox</title><link>https://justingarrison.com/blog/2010-09-02-upgrade-your-old-ipod-with-rockbox/</link><description>If you are tired of trying to keep up with Apple’s new iPod releases</description><author>Justin Garrison's Homepage</author><pubDate>Thu, 02 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-09-02-upgrade-your-old-ipod-with-rockbox/</guid></item><item><title>Testgetriebene Administration – test driven administration</title><link>https://manuel.kiessling.net/2010/09/01/testgetriebene-administration-test-driven-administration/</link><description>Ich hatte tatsächlich einmal eine ganz eigene Idee. Und sie war gut, auch nachdem ich sie mehrmals durchgekaut und von allen Seiten beleuchtet hatte.  Wieso eigentlich sollte man die Prinzipien und Methodiken von testgetriebener Softwareentwicklung nicht auch auf den Bereich der IT-Systemadministration übertragen? Also in aller Kürze: Ich definiere Tests, die das vom noch zu implementierenden System erwartete Verhalten prüfen, sehe zu wie diese Tests fehlschlagen, und erfülle dann schrittweise diese Tests, indem ich das System aufbaue.</description><author>Home on The Log Book of Manuel Kießling</author><pubDate>Wed, 01 Sep 2010 18:13:00 GMT</pubDate><guid isPermaLink="true">https://manuel.kiessling.net/2010/09/01/testgetriebene-administration-test-driven-administration/</guid></item><item><title>ReRobot</title><link>https://mattkeeter.com/projects/rerobot</link><description>Procedural exploration and platforming</description><author>Matt Keeter</author><pubDate>Wed, 01 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://mattkeeter.com/projects/rerobot</guid></item><item><title>Help Computer Users Remotely with TeamViewer</title><link>https://justingarrison.com/blog/2010-09-01-help-computer-users-remotely-with-teamviewer/</link><description>Before remote software, helping your friends and family with computer problems</description><author>Justin Garrison's Homepage</author><pubDate>Wed, 01 Sep 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-09-01-help-computer-users-remotely-with-teamviewer/</guid></item><item><title>Small Steps 1 – Teaching a Neural Network to Learn the Letter A from B</title><link>https://boyter.org/2010/08/small-steps-teaching-neural-network-learn-letter/</link><description>&lt;p&gt;I&amp;rsquo;m going to make the assumption that if you are reading this you already know what a NN is, and you are trying to do some sort of image recognition. I&amp;rsquo;m also going to assume you are somewhat familiar with programming preferably in Python since that&amp;rsquo;s what all the examples will be using.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Get the source to everything below in &lt;a href="http://www.wausita.com/wp-content/uploads/2010/08/Step1.zip"&gt;Step1.zip&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To get started we are going to need the following,&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Tue, 31 Aug 2010 03:48:14 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/small-steps-teaching-neural-network-learn-letter/</guid></item><item><title>On flash eating my key browser keyboard commands</title><link>https://peterlyons.com/problog/2010/08/on-flash-eating-my-key-browser-keyboard-commands/</link><description>&lt;p&gt;Dear Universe,&lt;/p&gt;
&lt;p&gt;Please manifest a way for me to specify that my key browser keyboard shortcuts will work even when I'm watching a flash video. Specifically I always want "close window", "new tab", and "cycle active window" to work. I hate that after watching a video I have to click on the surrounding non-flash web page to get my keyboard commands working again. Please post a comment on this blog post when you are done manifesting this.&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;Pete&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Mon, 30 Aug 2010 22:48:19 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/08/on-flash-eating-my-key-browser-keyboard-commands/</guid></item><item><title>Interviewing, A Reflection of the Company</title><link>/2010/08/29/Interviewing-A-Reflection-of-the-Company/</link><description>&lt;p&gt;The more I&amp;rsquo;ve been exposed to it the more the way a company conducts interviews is a very strong reflection of how the company&amp;rsquo;s current state is. If you experience a very half hazard interview it&amp;rsquo;s likely a result that the person interviewing is half hazard in other aspects of their day to day. If you experience that someone is very set in their mind in what they want, and expecting a very cookie cutter answer, it&amp;rsquo;s a reflection of how they think. There are some cases in which the interviewers simply do not know various methods/styles as such I&amp;rsquo;d like to address what I feel should be appropriate interviewing process. I&amp;rsquo;ve been in situations where more of this process was followed than not, and in those cases bad hires were the exception not the norm. The biggest unknown after that was how long until someone was fully integrated into the culture and not a noob but a veteran in some area that others deferred to.&lt;/p&gt;
&lt;p&gt;In the interviewing process the very first key is knowing your role. Hopefully there&amp;rsquo;s at least more than one person interviewing. If you&amp;rsquo;re interviewing you have the need, the person on the other side of the table from you may or may not. It may just be an opportunistic interview for them, or they may be avidly looking for an opportunity. Either way you should ALWAYS be in a sell mode of some form, the only question is how heavy this sell mode is. Are you 10% selling, 50% selling, 70% selling, 90% selling? In my experience I&amp;rsquo;ve never been in an interview of less than 50% selling to whomever I&amp;rsquo;m interviewing. Being in this mode is only going to convince them to come if they&amp;rsquo;re not looking that hard OR make them even more desperate to join you, which means you could offer them less (While I do have issues with this, the fact remains that it happens).&lt;/p&gt;
&lt;p&gt;So back to your role, the key roles correspond pretty directly to the type of interviews you should conduct. These can be blurred/mixed and can be conducted by different/same people, but I would at the very least not mix the questions at least follow some structured order. The key types are:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Next is the Behavioral/Contextual interview. This will consist of many what would you do in this situation. There are books and books that exist on example questions and how to respond to these. The key that an interviewer is looking for is that you solve a particular issue and follow a logical process here. If they ask a question about dealing with conflict, they don&amp;rsquo;t want to see that you just ignored it. There&amp;rsquo;s a fine line of addressing the conflict so the working environment is better, but also ensuring the project makes progress.&lt;/p&gt;
&lt;p&gt;Finally is the Technical interview. Approaching this from a very technical area of programming, you should not be testing syntax. You should be testing generic programming thoughts/concepts. If you want to give a syntax test go online and find one of the thousands that exist. If I&amp;rsquo;m not confident someone can pick up a language knowing general constructs, I would never hire them and they wouldn&amp;rsquo;t have made it this far in the process. If you want to throw in 1-2 questions about such that&amp;rsquo;s a manageable amount, but most of the interview should follow more open ended questions, questions that have multiple answers. How to write a for loop in Java is not acceptable, how to write a function that produces fibonnaci and a corresponding test is acceptable. Any time someone asks a question like this, I&amp;rsquo;m open to working at the company. It shows they put thought into the interview process and care about quality of their hires. Those types of questions test several concepts at once:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;As I mentioned before there&amp;rsquo;s several types of interviews and various levels of selling that occur. During EVERY interview you should give the person you are interviewing the opportunity to ask questions. Whenever this occurs you&amp;rsquo;re in selling mode, and often after a question you&amp;rsquo;re in selling mode. Your answers should NOT be 1 word answers, they should be thorough and open the opportunity for follow up questions on your answer. With any of these questions you should be able to interview someone at a level lower than you, or even higher than you. There are some job specific ones, sometimes of managing people or budgets when interviewing upwards that you may not address, but a lower level employee interviewing a manager is a valuable part of the process.&lt;/p&gt;
&lt;p&gt;With regards to your role it should be discussed ahead of time, you should conduct 2 behavioral interviews if the first you have an unsure result from. You should not ask the same questions if they passed with flying colors the first time. If you do this, and there are cases its relevant know your reasoning behind such. The bottom line is know the types of interview you&amp;rsquo;re conducting, discuss it internally, and know what you&amp;rsquo;re looking for as a result. If you haven&amp;rsquo;t put this much thought and effort into the process it will be apparent and the resulting quality of person you get will be a direct reflection of that.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Mon, 30 Aug 2010 03:39:05 GMT</pubDate><guid isPermaLink="true">/2010/08/29/Interviewing-A-Reflection-of-the-Company/</guid></item><item><title>Programming Language Popularity</title><link>https://arnorhs.dev/posts/2010-08-30/programming-language-popularity/</link><description>Which programming language you choose to work in (if it is your choice) affects your productivity, satisfaction and much more. Not only that, but working in a trending language can even help your career or business.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Mon, 30 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-08-30/programming-language-popularity/</guid></item><item><title>Fast Patches with Git</title><link>https://donatstudios.com/FastPatch</link><description>&lt;p&gt;In my work, I deal with a lot of very similar codebases - and often if I fix something in one project I'll want to fix it in many others.  For a long time this has meant popping open Beyond Compare, which works, but isn't the simplest solution.&lt;/p&gt;
&lt;p&gt;I use git on my projects - but they're not similar enough just to be branches. Recently I came up with a way to patch one or more commits from a project to another easily.  Here is a simple shell script I wrote to handle the task.&lt;/p&gt;
&lt;p&gt;Simply put, you can use it either by &lt;/p&gt;
&lt;pre&gt;&lt;code class="language-console"&gt;$ fast-patch.sh /z/my_project&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;to patch a project with the latest commit from the project in the working directory or with an optional parameter, specify a number of commits, eg &lt;/p&gt;
&lt;pre&gt;&lt;code class="language-console"&gt;$ fast-patch.sh /z/my_project 5&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Also, it will generate a patch log to &lt;code&gt;~/fastPatch.log&lt;/code&gt; which I generally use directly for my commit message by way of &lt;/p&gt;
&lt;pre&gt;&lt;code class="language-console"&gt;$ git commit -F ~/fastPatch.log&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Any comments on how I could improve it, or questions are quite welcome.&lt;/p&gt;</description><author>Donat Studios</author><pubDate>Sat, 28 Aug 2010 05:59:26 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/FastPatch</guid></item><item><title>$5 for unlimited backup storage? Wtf?</title><link>https://arnorhs.dev/posts/2010-08-28/5-for-unlimited-backup-storage-wtf/</link><description>_I'm sorry if this post sounds like an advertisement, **but it is not.**_ I ran into this backup service yesterday. It's called Backblaze I was pretty surprised when I saw the p...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sat, 28 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-08-28/5-for-unlimited-backup-storage-wtf/</guid></item><item><title>wuit trademarked in australia now the</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/wuit-trademarked-in-australia-now-the</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Fri, 27 Aug 2010 12:03:41 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/wuit-trademarked-in-australia-now-the</guid></item><item><title>Always Go To First Principles</title><link>https://boyter.org/2010/08/principles/</link><description>&lt;p&gt;Recently I was having an issue with some code I was working on for my pet project (A website search solution). Essentially my problem was that Smarty PHP wouldn&amp;rsquo;t loop through an array I had passed in. After much swearing and complaining I decided to take a step back and run through all of the newbie mistakes. In other words I looked at the problem from first principles.&lt;/p&gt;
&lt;p&gt;Turns out the issue was a missing $ before the variable I was trying to loop over. DOH!!!!!&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Thu, 26 Aug 2010 00:46:16 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/principles/</guid></item><item><title>&amp;lt;angular/&amp;gt; – ein radikal neuer Weg, Ajax Applikationen zu schreiben</title><link>https://manuel.kiessling.net/2010/08/25/angular-ein-radikal-neuer-weg-ajax-applikationen-zu-schreiben/</link><description>JavaScript, Ajax und DHTML sind nicht wirklich meine Welt. Zum einen, weil ich einfach grundsätzlich eher mit dem Backend einer Software als mit dem Frontend zu tun habe, zum anderen, weil ich immer schon das ungute Gefühl hatte, in diesem Bereich muss man einfach deutlich zu viel Code produzieren um damit dann gefühlt deutlich zu wenig zu erreichen.  Umso mehr hat &amp;lt;angular/&amp;gt; mein Interesse geweckt. Die Autoren versprechen: Write less code.</description><author>Home on The Log Book of Manuel Kießling</author><pubDate>Wed, 25 Aug 2010 18:13:00 GMT</pubDate><guid isPermaLink="true">https://manuel.kiessling.net/2010/08/25/angular-ein-radikal-neuer-weg-ajax-applikationen-zu-schreiben/</guid></item><item><title>Build Your Own Personal Wiki Accessible from Any PC</title><link>https://justingarrison.com/blog/2010-08-25-build-your-own-personal-wiki-accessible-from-any-pc/</link><description>A personal wiki is an amazing place to store all of your notes, to-do lists</description><author>Justin Garrison's Homepage</author><pubDate>Wed, 25 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-08-25-build-your-own-personal-wiki-accessible-from-any-pc/</guid></item><item><title>Building a Vector Space Indexing Engine in Python</title><link>https://boyter.org/2010/08/build-vector-space-search-engine-python/</link><description>&lt;p&gt;Ever wanted to code a search engine from scratch? Well actually its a pretty simple thing to do. Here is an example indexer I coded up in less then an hour using Python.&lt;/p&gt;
&lt;p&gt;The first thing we need to do is have a way to take our documents we want to search on and turn them into an concordance. A concordance for those not in the know is a count of every word that occurs in a document.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Tue, 24 Aug 2010 01:44:20 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/build-vector-space-search-engine-python/</guid></item><item><title>Tutorial: Testgetriebene Entwicklung mit PHP</title><link>https://manuel.kiessling.net/2010/08/23/tutorial-testgetriebene-entwicklung-mit-php/</link><description>Einleitung  Testgetriebene Entwicklung (test driven development) ist eine Arbeitsmethodik, die Softwareentwickler dabei unterstützt, wichtige Qualitätsprinzipien bei der Erstellung von Code zu befolgen: 

  Lose Kopplung (loose couping) – weil man beim Schreiben von Unittests, dem zentralen Werkzeug der Methodik, ganz automatisch dazu verführt wird, innerhalb der Tests von Codeunits (Klassen, Methoden usw.) auszugehen, die möglichst wenige Abhängigkeiten zu anderen Modulen haben – einfach deshalb, weil das Schreiben der Tests dann zu nervig wird.</description><author>Home on The Log Book of Manuel Kießling</author><pubDate>Mon, 23 Aug 2010 18:13:00 GMT</pubDate><guid isPermaLink="true">https://manuel.kiessling.net/2010/08/23/tutorial-testgetriebene-entwicklung-mit-php/</guid></item><item><title>Almost Genius: 1965 International Riding Lawn Mower</title><link>https://solomon.io/almost-genius-1965-international-riding-lawn-mower/</link><description>Rossi pulls a push mower behind a 1965 International riding lawn mower he restored. He found the mower on the side of the road and replaced a bunch of parts.</description><author>Sam Solomon</author><pubDate>Fri, 20 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/almost-genius-1965-international-riding-lawn-mower/</guid></item><item><title>git, gitosis, gitweb and friends...</title><link>https://purpleidea.com/blog/2010/08/19/git-gitosis-gitweb-and-friends/</link><description>&lt;p&gt;In case it wasn&amp;rsquo;t already obvious, I am a huge fan of &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt;, and often prefer it over &lt;a href="http://en.wikipedia.org/wiki/Sliced_bread"&gt;sliced bread&lt;/a&gt;. Recently to help a small team of programmers collaborate, I decided to setup a private git server for them to use. By no claim of mine is the following tutorial unique, however I am writing this to aid those who had trouble following &lt;a href="http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way"&gt;other&lt;/a&gt;&lt;a href="http://eagain.net/gitweb/?p=gitosis.git;a=blob;f=README.rst"&gt; online&lt;/a&gt; &lt;a href="http://hokietux.net/blog/?p=58"&gt;tutorials&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Goal&lt;/span&gt;:
Setup a central git server for private or public source sharing, without having to give everyone a separate shell account.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Thu, 19 Aug 2010 14:03:46 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2010/08/19/git-gitosis-gitweb-and-friends/</guid></item><item><title>Checked exceptions and Java Callables</title><link>https://www.databasesandlife.com/checked-exceptions-and-java-callables/</link><description>&lt;p&gt;Java supports checked exceptions. Many people have strong opinions about if they are good or bad. I believe they are good, but let&amp;rsquo;s agree that Java has them and they&amp;rsquo;re not going away.&lt;/p&gt;
&lt;p&gt;(Any exception extending &amp;ldquo;Exception&amp;rdquo;, which can to be thrown from a method, must be declared at the end of method&amp;rsquo;s signature, and any caller of the method must handle the exception or itself declare to throw that type of exception; Any exception extending &amp;ldquo;RuntimeException&amp;rdquo; need not be declared on method signatures. A programmer is free to choose which superclass to extend when designing their own exceptions.)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 19 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/checked-exceptions-and-java-callables/</guid></item><item><title>Why CAPTCHA's Never Use Number's 0 1 5 7</title><link>https://boyter.org/2010/08/captchas-never-use-numbers-0-1-5-7/</link><description>&lt;p&gt;Interestingly this sort of question pops up a lot in my referring search term stats.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why CAPTCHA&amp;rsquo;s never use the numbers 0 1 5 7&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Its a relativity simple question with a reasonably simple answer. Its because each of the above numbers are easy to confuse with a letter. See the below,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;CAPTCHA With 0 and O - image lost sorry&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;CAPTCHA With 1 and I&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;CAPTCHA With 5 and S&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;CAPTCHA With 7 and J L I&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Thu, 19 Aug 2010 02:26:21 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/captchas-never-use-numbers-0-1-5-7/</guid></item><item><title>Setting up GIT to use a Subversion (SVN) style workflow</title><link>https://boyter.org/2010/08/setting-git-follow-subversion-workflow/</link><description>&lt;p&gt;Moving from Subversion SVN to GIT can be a little confusing at first. I think the biggest thing I noticed was that GIT doesn&amp;rsquo;t have a specific work-flow; you have to pick your own. Personally I wanted to stick to my Subversion like work-flow with a central server which all my machines would pull and push too. Since it took a while to set up I thought I would throw up a blog post on how to do it.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Wed, 18 Aug 2010 03:44:49 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/setting-git-follow-subversion-workflow/</guid></item><item><title>VPN fail</title><link>https://www.databasesandlife.com/vpn-fail/</link><description>&lt;p&gt;I tried to use my company laptop outside of the office for the first time. I clicked on the &amp;ldquo;VPN&amp;rdquo; option in the start menu which the company had installed on the laptop. Up came a browser, trying to access the VPN page (accessible from the Internet). However, it didn&amp;rsquo;t work, as the browser was trying to connect to the company&amp;rsquo;s web proxy. The company web proxy is obviously only available once one is in the company network, i.e. once the VPN is connected.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 18 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/vpn-fail/</guid></item><item><title>Install Homebrew Apps in the WebOS Emulator</title><link>https://justingarrison.com/blog/2010-08-18-install-homebrew-apps-in-the-webos-emulator/</link><description>After your webOS emulator is set up, it can get boring without any new</description><author>Justin Garrison's Homepage</author><pubDate>Wed, 18 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-08-18-install-homebrew-apps-in-the-webos-emulator/</guid></item><item><title>A Balanced Look at GZIP and the User Experience</title><link>https://donatstudios.com/Balanced_Take_on_Gzip</link><description>&lt;p&gt;With Google recently starting to involve load time in search  rankings, there has been a lot of talk about GZIP.  Google Webmaster Tools exclaims "Compressing  the following resources with gzip could reduce their transfer size by &lt;strong&gt;X&lt;/strong&gt;KB:". Many people listen to this, and go out looking for a quick fix without realizing that &lt;strong&gt;poor GZIP implementation has a strongly negative effect on  the overall user experience&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;There are two main ways in PHP to go about implementing  GZIP. The first is &lt;a href="https://php.net/manual/en/function.ob-gzhandler.php"&gt;ob_gzhandler&lt;/a&gt;.   Basically all that is really involved in setting this up is adding &lt;code&gt;ob_start(&amp;quot;ob_gzhandler&amp;quot;);&lt;/code&gt; anywhere  before headers are sent, and it will blindly handle this for you. &lt;/p&gt;
&lt;p&gt;The second is &lt;a href="https://www.php.net/manual/en/zlib.configuration.php#ini.zlib.output-compression" target="_blank"&gt;zlib.output_compression&lt;/a&gt; which while entirely transparent and Zends states that &lt;q cite="http://www.php.net/manual/en/function.ob-gzhandler.php"&gt;using zlib.output_compression is preferred over ob_gzhandler().&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;This method can have a huge downside for users.  It can for instance greatly exacerbate the sluggishness  of an already slow page or even site. Right now your probably saying to yourself "What? I  thought GZIP made everything faster. This guy is crazy.". Allow me to explain. &lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s say that you have a site with no all encompasing output  buffer.  As PHP works its way through  your script it occasionally flushes out its internal buffer to apache, which in turn flushes it out to the browser, allowing the browser to begin rendering the incomplete document. Also, let&amp;rsquo;s say as an example you have a hold up slowing down your page in the footer of your site. The  user would already have the rest of the content and could  begin reading  and enjoying the site.&lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s compare to a site GZIPed with an output buffer  callback, e.g. ob_gzhandler. After the output buffer is started, your code  begins to execute.  Everything echoed is  held in the buffer until the page is completely done and the output buffer closes, at which point it is  GZIPed and flushed out to the user.   The user recieves less bits, but that hold up in the footer we spoke of before halts up the entire  rendering process, and the user cannot see anything  until the footer completes.&lt;/p&gt;
&lt;p&gt;For your viewing pleasure, a demonstration:&lt;/p&gt;
&lt;fieldset&gt;&lt;legend&gt;Side by Side Comparison&lt;/legend&gt;
	&lt;table&gt;
		&lt;tr&gt;
			&lt;th&gt;Non-GZIPed&lt;/th&gt;
			&lt;th&gt;GZIPed&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;&lt;td&gt;
			 
		&lt;/td&gt;&lt;td&gt;
			 
		&lt;/td&gt;&lt;/tr&gt;
	&lt;/table&gt;
    &lt;small&gt;It has come to my attention that Webkit browsers wait for a full result in an iframe to begin rendering - so this example will not work in Safari/Chrome&lt;/small&gt;
&lt;/fieldset&gt;
&lt;h2&gt;Take Note&lt;/h2&gt;
&lt;p&gt;I am not stating that all GZIP is bad. To the contrary, GZIP can be very beneficial and I absolutely sympathize with google wanting to cut down on their bandwidth. If you have Firebug or something similar you can note that the request for the Non-GZIPed example is a whopping 100 &lt;strong&gt;kilobytes&lt;/strong&gt;, whereas the GZIPed examples request is a measily 323 &lt;em&gt;&lt;strong&gt;bytes&lt;/strong&gt;&lt;/em&gt;! The reason for this is I did not have enough content to get Apache to flush so to get around this I added the following line.&lt;/p&gt;
&lt;pre&gt;echo str_repeat(' ', 100000); &lt;em&gt;//This creates 100kb worth of data, enough to trigger my copy of Apache to flush;&lt;/em&gt;&lt;/pre&gt;
&lt;p&gt;Not only does this trick cause Apache to flush,  but it  exagerates the positive effect of GZIP. Simple patterns, or in this case large amounts of whitespace, will compress quite wondefully.&lt;/p&gt;
&lt;p&gt;Uncompressed static files, JavaScript and CSS being two of the best examples compress quite well. The best way to do this is on an Apache server is with &lt;/p&gt;
&lt;pre&gt;&amp;lt;IfModule mod_deflate.c&amp;gt;&lt;br /&gt;
&amp;lt;FilesMatch &amp;quot;\.(js|css)$&amp;quot;&amp;gt;&lt;br /&gt;
SetOutputFilter DEFLATE&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;/pre&gt;
&lt;h2&gt;Looking for a Solution&lt;/h2&gt;
&lt;p&gt;I've posted a number of questions to Stack Overflow [&lt;a href="https://stackoverflow.com/questions/2868167/any-way-to-chunk-gzip-with-apache-and-php"&gt;1&lt;/a&gt;]  [&lt;a href="https://stackoverflow.com/questions/2955180/mod-deflate-caching-question"&gt;2&lt;/a&gt;]  researching this writing and actually found very limited help.&lt;/p&gt;
&lt;p&gt;It appears murky whether or not the protocol even supports  the functionality of chunking GZIP results into separately compressed blocks,  as would be required to decompress portions before the page is done – you can  chunk a complete GZIP response, but the advantage of this is limited.&lt;/p&gt;
&lt;p&gt; Lastly I have seen &amp;ldquo;promises&amp;rdquo; of ob_gzhandler caching the  results leading to a speed boost on a number of blogs – this is purely fiction and not to be trusted.&lt;/p&gt;
&lt;h2&gt;Moral of the Story&lt;/h2&gt;
&lt;p&gt;Understand what you&amp;rsquo;re doing before you do it.  &lt;em&gt;Blindly&lt;/em&gt; using output buffering for GZIP can have adverse effects on your site.  &lt;/p&gt;</description><author>Donat Studios</author><pubDate>Tue, 17 Aug 2010 08:30:31 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/Balanced_Take_on_Gzip</guid></item><item><title>Store data files in one big directory</title><link>https://www.databasesandlife.com/flat-directories/</link><description>&lt;p class="intro"&gt;A server filesystem can store millions of files in one directory. Unless you need to store more files than this, there is no need to artificially introduce an extra layer of directories to keep the number of files per directory down to a lower number. We kept millions of files in one directory at uboot.&lt;/p&gt;
&lt;p&gt;Often one needs to store lots of files in a filesystem. For example, at uboot.com each user has a &amp;ldquo;nickpage&amp;rdquo;, and each of these nickpages requires a file, and there are about 4M users.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 17 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/flat-directories/</guid></item><item><title>XSS attack via unchecked image uploads</title><link>https://www.databasesandlife.com/xss-attack-images/</link><description>&lt;p class="intro"&gt;If you allow users of your website to upload data (e.g. images), and you display this data to other users, you need to open the file on the server to examine it and check that it really is what it should be (e.g. an image).&lt;/p&gt;
&lt;p&gt;Most website software will need to examine the image anyway, to extract thumbnails, determine width/height, etc. In which case, this security comes for free. But I&amp;rsquo;ve seen software which doesn&amp;rsquo;t have any such needs, and thus server-side examination is not done.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 17 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/xss-attack-images/</guid></item><item><title>Why You Shouldn't roll your own CAPTCHA</title><link>https://boyter.org/2010/08/why-you-shouldnt-roll-your-own-captcha/</link><description>&lt;p&gt;At a TechEd I attended a few years ago I was watching a presentation about Security presented by &lt;a href="http://blogs.msdn.com/b/rockyh/"&gt;Rocky Heckman (read his blog its quite good)&lt;/a&gt;. In it he was talking about security algorithms. The part that really stuck with me went like this,&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Don&amp;rsquo;t write your own Crypto algorithms unless you have a Doctorate in Cryptography.&amp;rdquo; Interestingly someone there did have said qualification, and Rocky had to make an exception for that single person.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Mon, 16 Aug 2010 03:04:02 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/why-you-shouldnt-roll-your-own-captcha/</guid></item><item><title>Letters</title><link>https://www.databasesandlife.com/letters/</link><description>&lt;p&gt;The UNIX program &amp;ldquo;mail&amp;rdquo;, not the mail client one would use by choice under most circumstances. However today I have the pleasure of using a Solaris box which seems to be filled only with legacy tools like original &amp;ldquo;vi&amp;rdquo;, a &amp;ldquo;tail&amp;rdquo; where if you do &amp;ldquo;tail -f *&amp;rdquo; it only tails the first matching file and not all files.. but I digress.&lt;/p&gt;
&lt;pre&gt;$ mail
mail: Too many letters, overflowing letters concatenated
&lt;/pre&gt;
&lt;p&gt;I mean ignoring the error itself and the disrespect which it forces me to show this program, look at the wording.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 16 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/letters/</guid></item><item><title>How to Create a Wallpaper Slideshow in Ubuntu</title><link>https://justingarrison.com/blog/2010-08-16-how-to-create-a-wallpaper-slideshow-in-ubuntu/</link><description>Just like Windows 7 and OS X, Ubuntu has the ability to create a slideshow</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 16 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-08-16-how-to-create-a-wallpaper-slideshow-in-ubuntu/</guid></item><item><title>NeXTSTEP is cool</title><link>https://jasoneckert.github.io/myblog/nextstep-is-cool/</link><description>&lt;p&gt;&lt;img alt="NeXTSTEP" src="nextstep.jpg#center" title="NeXTSTEP" /&gt;&lt;/p&gt;
&lt;p&gt;When Steve Jobs left Apple in the 1980s, he started a new venture that produced NeXT UNIX computers that ran a custom UNIX system called NeXTSTEP on Motorola 68000-series computers. The first Web browser was made my Tim Berners-Lee on one of these NeXT computers!&lt;/p&gt;
&lt;p&gt;When I was an undergrad student at the University of Waterloo, we had a few NeXT computers (literally two of them I believe) and a bunch of HP PA-RISC 712s running NeXTSTEP for object-oriented software development (it was more common to see Sun or SGI UNIX systems at the university back them).They were cool - and I remember using the HP PA-RISC 712s to do development in university thinking something along the lines of “this is nice, but not as nice as SGI IRIX (Silicon Graphics UNIX).”&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Mon, 16 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/nextstep-is-cool/</guid></item><item><title>Tricksy closures</title><link>https://etodd.io/2010/08/15/tricksy-closures/</link><description>&lt;p&gt;Do not be fooled by the elegant simplicity of the mighty closure! Behind its shiny dynamic veneer lies a powerful machine capable of destroying your immortal soul. Behold:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-javascript"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #66d9ef;"&gt;function&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;GetOutputFunctions&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; &lt;span style="color: #66d9ef;"&gt;var&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;outputFunctions&lt;/span&gt; &lt;span style="color: #f92672;"&gt;=&lt;/span&gt; &lt;span style="color: #66d9ef;"&gt;new&lt;/span&gt; Array();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; &lt;span style="color: #66d9ef;"&gt;for&lt;/span&gt;(&lt;span style="color: #66d9ef;"&gt;var&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;i&lt;/span&gt; &lt;span style="color: #f92672;"&gt;=&lt;/span&gt; &lt;span style="color: #ae81ff;"&gt;0&lt;/span&gt;; &lt;span style="color: #a6e22e;"&gt;i&lt;/span&gt; &lt;span style="color: #f92672;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #ae81ff;"&gt;4&lt;/span&gt;; &lt;span style="color: #a6e22e;"&gt;i&lt;/span&gt;&lt;span style="color: #f92672;"&gt;++&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; &lt;span style="color: #66d9ef;"&gt;var&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;x&lt;/span&gt; &lt;span style="color: #f92672;"&gt;=&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;i&lt;/span&gt; &lt;span style="color: #f92672;"&gt;*&lt;/span&gt; &lt;span style="color: #ae81ff;"&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; &lt;span style="color: #a6e22e;"&gt;outputFunctions&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;push&lt;/span&gt;(&lt;span style="color: #66d9ef;"&gt;function&lt;/span&gt;() { &lt;span style="color: #a6e22e;"&gt;alert&lt;/span&gt;(&lt;span style="color: #a6e22e;"&gt;x&lt;/span&gt;); });
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; &lt;span style="color: #66d9ef;"&gt;return&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;outputFunctions&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; &lt;span style="color: #66d9ef;"&gt;var&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;functions&lt;/span&gt; &lt;span style="color: #f92672;"&gt;=&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;GetOutputFunctions&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; &lt;span style="color: #66d9ef;"&gt;for&lt;/span&gt; (&lt;span style="color: #66d9ef;"&gt;var&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;i&lt;/span&gt; &lt;span style="color: #f92672;"&gt;=&lt;/span&gt; &lt;span style="color: #ae81ff;"&gt;0&lt;/span&gt;; &lt;span style="color: #a6e22e;"&gt;i&lt;/span&gt; &lt;span style="color: #f92672;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;functions&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;length&lt;/span&gt;; &lt;span style="color: #a6e22e;"&gt;i&lt;/span&gt;&lt;span style="color: #f92672;"&gt;++&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; &lt;span style="color: #a6e22e;"&gt;functions&lt;/span&gt;[&lt;span style="color: #a6e22e;"&gt;i&lt;/span&gt;]();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will not output the first three multiples of two, as presumably expected. Instead it will output "6" three times, because the variable "x" is only allocated once.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Sun, 15 Aug 2010 22:08:58 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/08/15/tricksy-closures/</guid></item><item><title>MySQL Backups Done Easily</title><link>https://boyter.org/2010/08/mysql-backups-done-easily/</link><description>&lt;p&gt;One thing that comes up a lot on sites like Stackoverflow and the like is how to backup MySQL databases.The first answer is usually use mysqldump. This is all fine and good, till you start to want to dump multiple databases. You can do this all in one like using the &amp;ndash;all-databases option however this makes restoring a single database an issue, since you have to parse out the parts you want which can be a pain.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Sun, 15 Aug 2010 05:33:25 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/mysql-backups-done-easily/</guid></item><item><title>Designing Great UI is like Cleaning</title><link>https://arnorhs.dev/posts/2010-08-13/designing-great-ui-is-like-cleaning/</link><description>Usually, when you need to put something down, you just place it on the next table and don't think much about it. After a few days (or weeks/months/years) your appartment looks like shit and you have to clean it up. How do you clean? One thing at a time. So one by one you take each item lying on the floor, on a table, in a shelf and find it a new home. Sometimes you can see a pattern in all your stuff that's lying around and you might find a good place to put many of those things, like a cupboard a drawer, etc. Often you'll already have great places to put them in, so you put them there.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Fri, 13 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-08-13/designing-great-ui-is-like-cleaning/</guid></item><item><title>A cultural side effect of "what happens on Facebook and Twitter when you die"</title><link>https://stop.zona-m.net/2010/08/a-cultural-side-effect-of-what-happens-on-facebook-and-twitter-when-you-die/</link><description>&lt;p&gt;British Magazine Pc Pro has an interesting article about something which, they report, happens one and a half million times a year:&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 12 Aug 2010 04:41:58 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/08/a-cultural-side-effect-of-what-happens-on-facebook-and-twitter-when-you-die/</guid></item><item><title>Create a Windows 7 Theme Pack From Scratch</title><link>https://justingarrison.com/blog/2010-08-12-create-a-windows-7-theme-pack-from-scratch/</link><description>Windows customization isn’t anything new, but with Windows 7, customization</description><author>Justin Garrison's Homepage</author><pubDate>Thu, 12 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-08-12-create-a-windows-7-theme-pack-from-scratch/</guid></item><item><title>Richard Stallman to visit Australia</title><link>https://boyter.org/2010/08/richard-stallman-to-visit-australia/</link><description>&lt;p&gt;Im not usually one to promote events and the like unless I feel there is a genuine benefit to be had by attending but this is one stands out. Richard M Stallman, the guru of Free Software is coming Down Under to hold a talk. You can read about him here, &lt;a href="http://www.zdnet.com.au/open-source-celebrity-to-visit-oz-339304541.htm"&gt;Open Source Celebrity to visit Australia&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can register for the event at the &lt;a href="http://www.acs.org.au/nsw/index.cfm?action=event&amp;amp;area=9001&amp;amp;temID=eventdetails&amp;amp;eveID=30173824519247"&gt;ACS Website&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I am certainly planning on attending.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Thu, 12 Aug 2010 01:56:37 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/richard-stallman-to-visit-australia/</guid></item><item><title>SEO Features of N.nu</title><link>https://www.jimwestergren.com/seo-features-of-n-nu/</link><description>I learned PHP and built the online website creator N.nu from scratch myself (examples). From the start one of the principal focuses has been to make sure that the system has optimal SEO and it is my intention that N.nu is the online website creator with the best SEO. This blog is of course hosted &amp;#91;...&amp;#93;</description><author>Jim Westergren</author><pubDate>Wed, 11 Aug 2010 18:13:00 GMT</pubDate><guid isPermaLink="true">https://www.jimwestergren.com/seo-features-of-n-nu/</guid></item><item><title>At Scale You Will Hit Every Performance Issue</title><link>https://boyter.org/2010/08/at-scale-you-will-hit-every-performance-issue/</link><description>&lt;p&gt;I used to think I knew a bit about performance, scalability and how to keep things trucking when you hit large amounts of data. Truth is I know diddly squat on the subject since the most I have ever done is read about how its done. To understand how I came about realising this you need some background.&lt;/p&gt;
&lt;p&gt;Essentially what I have been working on and hope to launch soon is a highly vertical search engine that websites can employ on their site and get highly relevant search results. Something like Googles website search, but custom for your website with tight API integration or just a simple &amp;ldquo;index my website and stick a search box here&amp;rdquo; sort of thing. While doing this I have learnt more about operating at scale then I would have ever imagined.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Wed, 11 Aug 2010 14:40:31 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/at-scale-you-will-hit-every-performance-issue/</guid></item><item><title>Free Technology Academy working to offer more Free Software online teaching</title><link>https://stop.zona-m.net/2010/08/free-technology-academy-working-to-offer-more-free-software-online-teaching/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 11 Aug 2010 08:56:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/08/free-technology-academy-working-to-offer-more-free-software-online-teaching/</guid></item><item><title>[Rails] RailsConfig, A New Iteration of AppConfig for Rails 3</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-railsconfig-a-new-iteration-of-appconfig-for-rails-3</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Wed, 11 Aug 2010 04:50:14 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-railsconfig-a-new-iteration-of-appconfig-for-rails-3</guid></item><item><title>ZFS on linux</title><link>https://blog.nobugware.com/post/2010/08/09/zfs-linux/</link><description>For license reasons (god damn GPL), ZFS can&amp;rsquo;t be integrated into the Linux kernel, but there is a userland fuse version called [ZFS-FUSE](http://zfs- fuse.net/), so I tried to measure the fuse overhead vs others filesystems presents on my server.
This tests are not benchmarks, but just show that ZFS-FUSE is fast enough and seems to be stable (at least for my personal server)
ZFS with lzjb compression dd if=/dev/zero of=/testzfs/toto bs=2048 count=200000 409600000 bytes (410 MB) copied, 9.</description><author>Fabrice Aneche</author><pubDate>Mon, 09 Aug 2010 21:41:47 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2010/08/09/zfs-linux/</guid></item><item><title>Using Oracle with Django</title><link>https://blog.nobugware.com/post/2010/08/09/using-oracle-django/</link><description>In a production environment you could hit this one: DatabaseError: Invalid handle!
It seems to happen when Oracle is called with OCI interface (cx_Oracle) by multiple threads.
Yes using apache with MPM worker or mod_wsgi, will create threads in the same process, by default cx_Oracle is configured to be used without threads cause it will add a mutex and a performance hit.
The solution is to pass the threaded parameters to the connection string, so in Django settings just add:</description><author>Fabrice Aneche</author><pubDate>Mon, 09 Aug 2010 20:44:52 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2010/08/09/using-oracle-django/</guid></item><item><title>[Rails] Inherited Resources Views Now Supports Rails 2.x</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-inherited-resources-views-now-supports-rails-2-x</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Sat, 07 Aug 2010 10:35:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-inherited-resources-views-now-supports-rails-2-x</guid></item><item><title>Examples of Bad Website Search</title><link>https://boyter.org/2010/08/examples-of-bad-website-search/</link><description>&lt;p&gt;I thought I would post some examples of websites with bad website search. Rather then pick on some small blogs lets go after the big boys. Starting with eBay.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;There was a screenshot of ebay here at one point but now it is lost for all time&amp;hellip; sorry&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The link to the left is an example of a simple search I performed on eBay for an iPad. The search comes back pretty quickly which is good but has a few issues I will go through now.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Sat, 07 Aug 2010 07:38:37 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/examples-of-bad-website-search/</guid></item><item><title>Test Driven Development</title><link>https://boyter.org/2010/08/test-driven-development/</link><description>&lt;p&gt;I was reading a blog post today linked from Dzone which alluded to &lt;a href="http://blog.architexa.com/2010/08/wasting-time-with-test-driven-development/"&gt;test driven development being a waste of time&lt;/a&gt; I am one of those people who has caught the test driven development (TDD) bug and I am a big fan of TDD and unit testing in general. In fact I am the one who posted the first comment on the linked blog and prompted the authors change to it.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Fri, 06 Aug 2010 14:07:13 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/test-driven-development/</guid></item><item><title>Are citizens ready for Open Data and Government?</title><link>https://stop.zona-m.net/2010/08/are-citizens-ready-for-open-data-and-government/</link><description>&lt;p&gt;A few days ago I was in the &lt;a href="http://www.uimp.es"&gt;Menendez Pelayo International University&lt;/a&gt; of Santander, Spain, to give a talk for a &lt;a href="http://www.uimp.es/uimp/home/homeUIMPdina.php?jcj=ACTIVIDADES_ACADEMICAS&amp;amp;juj=3002&amp;amp;lan=es&amp;amp;jpj=plan=60KI&amp;amp;any=2010-11&amp;amp;verasi=N&amp;amp;lan=es&amp;amp;tipo=ACA&amp;amp;parametros=actividad=administracion%20electronica$oficial=S$sede=Santander$tipoact=$fecini=01/07/2010$fecfin=31/07/2010$director=$conferenciante=$areas=$busqueda=1$mostrar=5$pagina=1"&gt;seminar about Open and E-Government&lt;/a&gt;.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 06 Aug 2010 04:20:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/08/are-citizens-ready-for-open-data-and-government/</guid></item><item><title>Reinvigorate - Realtime Website Traffic Analysis</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/reinvigorate-realtime-website-traffic-analysis</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Fri, 06 Aug 2010 03:33:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/reinvigorate-realtime-website-traffic-analysis</guid></item><item><title>Poke me on Github! :D</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/poke-me-on-github-d</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Fri, 06 Aug 2010 03:03:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/poke-me-on-github-d</guid></item><item><title>[Rails] Releasing Inherited Resources Views - DRY Your View Files</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-releasing-inherited-resources-views-dry-your-view-files</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Thu, 05 Aug 2010 14:16:53 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-releasing-inherited-resources-views-dry-your-view-files</guid></item><item><title>Why Writing a Web Crawler isn't Easy</title><link>https://boyter.org/2010/08/why-writing-a-web-crawler-isnt-easy/</link><description>&lt;p&gt;The below is just a few things to keep in mind if you are writing a crawler or considering writing one.&lt;/p&gt;
&lt;p&gt;The first is to assume that all of the links you have are broken to begin with. When I write this I dont mean assume that the link goes nowhere, but that the URL itself is actually wrong. Even when you seed your own list (like I did) you can still get some bad URL&amp;rsquo;s in there.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Thu, 05 Aug 2010 13:38:32 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/why-writing-a-web-crawler-isnt-easy/</guid></item><item><title>released my first ruby gem</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/released-my-first-ruby-gem</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Wed, 04 Aug 2010 14:32:34 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/released-my-first-ruby-gem</guid></item><item><title>MySQL Exporting All Databases</title><link>https://boyter.org/2010/08/mysql-exporting-all-databases/</link><description>&lt;p&gt;One of the things that I always have to look up (when doing it manually that is) is how to export specific databases or all of them from MySQL using mysqldump. To avoid having to Google around every time I need the commands I thought I would preserve it here.&lt;/p&gt;
&lt;p&gt;Export a database from MySQL in one line NB password must follow -p without a space&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mysqldump -u user -pPASSWORD mydatabase &amp;gt; mydatabase.sql
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Export all databases from MySQL&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Wed, 04 Aug 2010 13:51:13 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/mysql-exporting-all-databases/</guid></item><item><title>looks like its time for a reboot</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/looks-like-its-time-for-a-reboot</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Wed, 04 Aug 2010 10:53:38 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/looks-like-its-time-for-a-reboot</guid></item><item><title>VexFlow is Open Source</title><link>https://0xfe.blogspot.com/2010/08/vexflow-is-open-source.html</link><description>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;That's right folks! All the &lt;a href="http://www.vexflow.com/"&gt;VexFlow&lt;/a&gt; code is now available in the &lt;a href="http://github.com/0xfe/vexflow"&gt;VexFlow GitHub Repository&lt;/a&gt;.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;It's distributed under the OSI approved MIT License, so feel free to tinker, tweak, hack, fix, fork, and redistribute it.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCCX_uGvdpHI6QDxV6euNvnnKUFw7lBIkbPcBqlyD75_J7RsVW5qbWjSK9qCbeQNe9i_UwEPvWSCOSNnpEunNPcA4TyAO2-FPX77mdDwUhFYe6JSYmFEVHAedxT0oOF5_iVGqooQ/s1600/Screen+shot+2010-08-03+at+5.36.09+PM.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="187" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCCX_uGvdpHI6QDxV6euNvnnKUFw7lBIkbPcBqlyD75_J7RsVW5qbWjSK9qCbeQNe9i_UwEPvWSCOSNnpEunNPcA4TyAO2-FPX77mdDwUhFYe6JSYmFEVHAedxT0oOF5_iVGqooQ/s320/Screen+shot+2010-08-03+at+5.36.09+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;A lot of the core infrastructure (e.g., contexts, formatting, etc.) is ready and stable, and most of the work that needs to be done is adding support for various types of modifiers, effects, and annotations. I've worked on some of the trickier ones, like accidentals and beams, and have left the easier ones out so interested coders can learn by contributing.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;This said, algorithms-enthusiasts need not feel left out - there are some hard problems to solve as well :-)&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Here's where I would like help from the community:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Dots (Easy)&lt;/li&gt;
&lt;li&gt;Trills (Easy)&lt;/li&gt;
&lt;li&gt;Grace Notes (Moderate)&lt;/li&gt;
&lt;li&gt;Slurs (Easy)&lt;/li&gt;
&lt;li&gt;Glyphs for time signatures (Easy)&lt;/li&gt;
&lt;li&gt;Key signature (Easy if you reuse the accidental placement code from accidentals.js)&lt;/li&gt;
&lt;li&gt;Guitar effects: Palm Muting, Scratches, Whammy, Harmonics, etc. (Easy)&lt;/li&gt;
&lt;li&gt;Chord Stave with Rhythm Slashes (Moderate to Hard)&lt;/li&gt;
&lt;li&gt;Lyrics (Easy)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Here's what I'm working on right now (and also wouldn't mind some help with):&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Tuplets / Triplets&lt;/li&gt;
&lt;li&gt;VexTab parser support for rests, alternate keys, and multiple voices.&lt;/li&gt;
&lt;li&gt;Alternate tunings and support for arbitrary-string instruments.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;There isn't much developer documentation right now, but a good place to start is by going through the &lt;a href="http://github.com/0xfe/vexflow/tree/master/tests/"&gt;code&lt;/a&gt; for &lt;a href="http://vexflow.com/tests/"&gt;the tests&lt;/a&gt;. You may notice that some files are commented better than others - a great way to help is by adding better comments along with more thorough tests.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;If you're not a coder and would like to help, you can do so by testing and &lt;a href="http://github.com/0xfe/vexflow/issues"&gt;reporting bugs&lt;/a&gt;, helping with documentation, spending $7 on a &lt;a href="http://vexflow.com/tabdiv/"&gt;TabDiv license&lt;/a&gt;, or simply spreading the word.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Thanks for all the support and help over the past few months. &lt;a href="http://github.com/0xfe/vexflow"&gt;Dive in&lt;/a&gt; and enjoy!&lt;/div&gt;</description><author>0xFE - 11111110b - 0376</author><pubDate>Wed, 04 Aug 2010 01:04:26 GMT</pubDate><guid isPermaLink="true">https://0xfe.blogspot.com/2010/08/vexflow-is-open-source.html</guid></item><item><title>PHP Bug Trackers</title><link>https://boyter.org/2010/08/php-bug-trackers/</link><description>&lt;p&gt;So in keeping with the lean startup style, I needed to work out which version control system and which bug tracker I would use. Internally at work I use subversion and JIRA. Both do the job quite well but I have found some shortcomings with subversion and JIRA is needlessly complicated for a single developer at the moment. So I looked for alturnatives.&lt;/p&gt;
&lt;p&gt;Version control was easier of the two to pick. I have been toying with GIT for a while and so I can now safely say I have been using GIT for the last few months. Im pretty happy with it and its workflow of branch, develop, merge, push works very well with my coding style. So no problems there. The bug tracker was a little more difficult to choose from.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Tue, 03 Aug 2010 11:55:31 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/php-bug-trackers/</guid></item><item><title>[jQuery] Releasing Inline Confirmation, Confirm Actions Done Right</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/jquery-releasing-inline-confirmation-confirm-actions-done-right</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Tue, 03 Aug 2010 08:41:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/jquery-releasing-inline-confirmation-confirm-actions-done-right</guid></item><item><title>Android or iPhone</title><link>https://www.craigpardey.com/post/2010-08-03-android-or-iphone/</link><description>&lt;p&gt;I wanted to learn how to build mobile apps, so last weekend I bought &lt;a href="http://www.amazon.ca/Building-iPhone-Apps-HTML-JavaScript/dp/0596805780/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1280862381&amp;amp;sr=8-1"&gt;Building
iPhone Apps with HTML, CSS, and JavaScript: Making App Store Apps Without
Objective-C or Cocoa&lt;/a&gt;. I
don&amp;rsquo;t have any problem learning a new language, in fact I really enjoy it, but
I was reluctant to to pay serious dollars for a Mac just to learn the skill.&lt;/p&gt;
&lt;p&gt;The book covers how to build a website that is tailored for the iPhone. It
looks and behaves like an iPhone app, but is actually a website. After a few
chapters I started to feel dirty. It documented hack after workaround after
hack.&lt;/p&gt;</description><author>Craig Pardey</author><pubDate>Tue, 03 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.craigpardey.com/post/2010-08-03-android-or-iphone/</guid></item><item><title>I'm Now a Ruby on Rails Contributor</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/im-now-a-ruby-on-rails-contributor</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Tue, 03 Aug 2010 01:40:46 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/im-now-a-ruby-on-rails-contributor</guid></item><item><title>Launched. Somewhat.</title><link>https://boyter.org/2010/08/hello-world/</link><description>&lt;p&gt;Well I finally got around to doing what I always said I would. That being launch and online business. Inspired by all of the stories and discussions at news.ycombinator.com and in particular this single post &lt;a href="http://news.ycombinator.com/item?id=1560422"&gt;http://news.ycombinator.com/item?id=1560422&lt;/a&gt; I decided to finish off those projects that I have been working on for a while and launch.&lt;/p&gt;
&lt;p&gt;Naturally following the experience of the greats who have done it themselves, such as Patrick with Bingo Card Creator and Peldi of Balsamiq I thought I would throw up a blog, pick a theme quickly and get started.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Mon, 02 Aug 2010 11:56:25 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2010/08/hello-world/</guid></item><item><title>Mudduino</title><link>https://mattkeeter.com/projects/mudduino</link><description>Arduino clone for simple robotics</description><author>Matt Keeter</author><pubDate>Mon, 02 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://mattkeeter.com/projects/mudduino</guid></item><item><title>E11 Bot</title><link>https://mattkeeter.com/projects/e11bot</link><description>Robotics for college freshmen</description><author>Matt Keeter</author><pubDate>Sun, 01 Aug 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://mattkeeter.com/projects/e11bot</guid></item><item><title>Exadata v2 Smart Scan Performance Troubleshooting article</title><link>https://tanelpoder.com/2010/07/30/exadata-v2-smart-scan-performance-troubleshooting-article/</link><description>&lt;p&gt;I finally finished my first Exadata performance troubleshooting article.&lt;/p&gt;
&lt;p&gt;This explains one bug I did hit when stress testing an Exadata v2 box, which caused smart scan to go very slow – and how I troubleshooted it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://tech.e2sn.com/oracle/exadata/performance-troubleshooting/exadata-smart-scan-performance" target="_blank"&gt;Troubleshooting Exadata v2 Smart Scan Performance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks to my secret startup company I’ve been way too busy to write anything serious lately, but apparently staying up until 6am helped this time! :-) Anyway, maybe next weekend I can repeat this and write Part 2 in the Exadata troubleshooting series ;-)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 31 Jul 2010 01:18:25 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/07/30/exadata-v2-smart-scan-performance-troubleshooting-article/</guid></item><item><title>Managing the Most Remote Data Center in the World</title><link>https://johnj.com/posts/managing-the-most-remote-data-center-in-the-world/</link><description>&lt;p&gt;
This video is from an interview I did with James Turner at OSCON in
July of 2010.&lt;/p&gt;
&lt;p&gt;
From &lt;a href="http://it.slashdot.org/story/10/07/23/1142249/Managing-the-Most-Remote-Data-Center-In-the-World"&gt;Slashdot&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;
“Imagine that your data center was in the most geographically remote
location in the world. Now imagine that you can only get to it 4
months of the year. Just for fun, add in some of the most extreme
weather conditions in the world. That’s the challenge that faces John
Jacobsen, one of the people responsible for making sure that the data
from the IceCube Neutrino Observatory makes it all the way from the
South Pole to researchers across the world. In an interview recorded
at OSCON, Jacobsen talks about the problems that he has to face
(video), which includes (surprisingly) keeping the data center
cool. If you’re ever griped because you had to haul yourself across
town in the middle of the night to fix a server crash, this interview
should put things in perspective.”&lt;/p&gt;
&lt;p&gt;


&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Fri, 30 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/managing-the-most-remote-data-center-in-the-world/</guid></item><item><title>Ideas for the Future of Desktop Computing</title><link>https://solomon.io/ideas-for-the-future-of-desktop-computing/</link><description>Smartphones, netbooks and tablet computers are evidence in the evolution of how we interact with the web.</description><author>Sam Solomon</author><pubDate>Thu, 29 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/ideas-for-the-future-of-desktop-computing/</guid></item><item><title>[PHP] Releasing KThrottler, A Kohana Module for Throttling Actions</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/php-releasing-kthrottler-a-kohana-module-for-throttling-actions</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Wed, 28 Jul 2010 16:29:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/php-releasing-kthrottler-a-kohana-module-for-throttling-actions</guid></item><item><title>#whatdatingislike What Dating Is Like</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/whatdatingislike-what-dating-is-like</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Mon, 26 Jul 2010 17:21:11 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/whatdatingislike-what-dating-is-like</guid></item><item><title>Test Drive webOS Without Buying a Phone</title><link>https://justingarrison.com/blog/2010-07-26-test-drive-webos-without-buying-a-phone/</link><description>With all the new mobile operating systems how do you to know which</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 26 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-07-26-test-drive-webos-without-buying-a-phone/</guid></item><item><title>Programming Praxis - Happy Numbers</title><link>https://jeroenpelgrims.com/programming-praxis-happy-numbers/</link><description>&lt;p&gt;&lt;a href="http://programmingpraxis.com/2010/07/23/happy-numbers/"&gt;Today's problem&lt;/a&gt; had to do with Happy Numbers.&lt;/p&gt;
&lt;p&gt;I split the problem up in two parts, splitting up a number up in to digits and checking whether or not the number is a Happy Number.&lt;/p&gt;</description><author>Jeroen Pelgrims</author><pubDate>Sat, 24 Jul 2010 04:09:00 GMT</pubDate><guid isPermaLink="true">https://jeroenpelgrims.com/programming-praxis-happy-numbers/</guid></item><item><title>Following your dreams</title><link>https://arnorhs.dev/posts/2010-07-23/following-your-dreams/</link><description>Amit wrote on the Rootein blog:

&gt; What is it with people refusing to take some risks to follow their dreams. Are their dreams not worth it? If not, why do we sulk about them later? Don't we...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Fri, 23 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-07-23/following-your-dreams/</guid></item><item><title>Previewing fonts using Google's font directory</title><link>https://arnorhs.dev/posts/2010-07-23/previewing-fonts-using-googles-font-directory/</link><description>Now you can preview fonts in the Google font directory. This is exactly the kind of thing Google does incredibly well. It also gives you the CSS needed to make the font appear the way it does in th...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Fri, 23 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-07-23/previewing-fonts-using-googles-font-directory/</guid></item><item><title>[Rails] Introducing Datamappify - ActiveRecord Without DB Migrations</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-introducing-datamappify-activerecord-without-db-migrations</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Thu, 22 Jul 2010 15:30:50 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-introducing-datamappify-activerecord-without-db-migrations</guid></item><item><title>More Durations and Better Beaming</title><link>https://0xfe.blogspot.com/2010/07/more-durations-and-better-beaming.html</link><description>I finally got most of the duration and beaming support worked out last weekend, and I gotta say that the generated scores by &lt;a href="http://vexflow.com/"&gt;VexFlow&lt;/a&gt; (and &lt;a href="http://vexflow.com/vextab"&gt;VexTab&lt;/a&gt;) are starting to look pretty good.&lt;br /&gt;
&lt;br /&gt;
In VexTab notation, you can now set the duration of the subsequent notes using the colon (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;:&lt;/span&gt;) character. By default, note durations are set to eighth notes.&lt;br /&gt;
&lt;br /&gt;
Here's an example of a line that generates a half-note followed by two quarter-notes.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4SokXKqQO6IN0lEH3D2PlyQERmbOVipuHNHDG4r-kmDdSPdJDz8hH38O8SKUyg1Xafi9Sp0jljjnPayVNJ1ta8Ez8H_c1PJwrLdqq5WtE7UXf7RgWWQXDmXmMlpSbf0llA1537Q/s1600/Screen+shot+2010-07-20+at+9.17.44+PM.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="328" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4SokXKqQO6IN0lEH3D2PlyQERmbOVipuHNHDG4r-kmDdSPdJDz8hH38O8SKUyg1Xafi9Sp0jljjnPayVNJ1ta8Ez8H_c1PJwrLdqq5WtE7UXf7RgWWQXDmXmMlpSbf0llA1537Q/s400/Screen+shot+2010-07-20+at+9.17.44+PM.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Basic Duration Support&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Valid duration values (currently) are: &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;w&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;h&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;q&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;8&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;16&lt;/span&gt;, and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;32&lt;/span&gt;. Support for dots and tuplets/triplets is not yet implemented.&lt;br /&gt;
&lt;br /&gt;
Durations can be specified inside slides, bends, and other types of ties by prefixing the fret with the duration value enclosed within colon characters.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKIJDWT5dvihx_d6pAC88xRKSznZvATNRSTXth6Kc3-UZgerT7Mg5t3F8z__X8uZGQ8dfHAAbkGSf1vXEvnEdG9J3CKzDuZvo5FLcCoiJyWDEasHpooW296n-xj1X8YNoCwTS1Vg/s1600/Screen+shot+2010-07-20+at+9.18.50+PM.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKIJDWT5dvihx_d6pAC88xRKSznZvATNRSTXth6Kc3-UZgerT7Mg5t3F8z__X8uZGQ8dfHAAbkGSf1vXEvnEdG9J3CKzDuZvo5FLcCoiJyWDEasHpooW296n-xj1X8YNoCwTS1Vg/s400/Screen+shot+2010-07-20+at+9.18.50+PM.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Durations within Ties&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Also, I spent time working on some of the tricker beam configurations, where notes with varying durations are beamed.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCpz_M1ppQZsOebHxPliRfXzxugqHBkSBmNjXQlEZg4HUFaAL3JI6G2WsM7aUnqn-lp0mi7r0Z14frYzVcyn5SB2YuJ08zOVyuSVA-d5JbFqx3qV_7v493PTGFmgeflHrKHLgAkA/s1600/Screen+shot+2010-07-20+at+9.20.49+PM.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="127" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCpz_M1ppQZsOebHxPliRfXzxugqHBkSBmNjXQlEZg4HUFaAL3JI6G2WsM7aUnqn-lp0mi7r0Z14frYzVcyn5SB2YuJ08zOVyuSVA-d5JbFqx3qV_7v493PTGFmgeflHrKHLgAkA/s200/Screen+shot+2010-07-20+at+9.20.49+PM.png" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Crazy Beaming&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
In VexTab, you can create beams by enclosing your notes within brackets (separated by spaces).&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY52epYKi4fdr_f1eQQRr2uzjG0H6qW1oKc-ND8x9U9129pIzxGd0bmW5RonRIfGnZ279nUOcOJ37X_iZiO7HaZSL3ESQKwnqHPpM1GroFHSzO7ByHIzfdkEdTBun3rBEBGxnbHw/s1600/Screen+shot+2010-07-20+at+9.25.47+PM.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY52epYKi4fdr_f1eQQRr2uzjG0H6qW1oKc-ND8x9U9129pIzxGd0bmW5RonRIfGnZ279nUOcOJ37X_iZiO7HaZSL3ESQKwnqHPpM1GroFHSzO7ByHIzfdkEdTBun3rBEBGxnbHw/s400/Screen+shot+2010-07-20+at+9.25.47+PM.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Beaming in VexTab&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Anyhow, I've pushed out the latest revision, with support for standard notation, durations, and beaming to the&amp;nbsp;&lt;a href="http://vexflow.com/tabdiv"&gt;TabDiv website&lt;/a&gt;. Feel free to &lt;a href="http://vexflow.com/vextab/tutorial.html"&gt;toy with it&lt;/a&gt; and report any issues you come across.&lt;br /&gt;
&lt;br /&gt;
Here's a screenshot of a bluesy guitar lick written in VexTab.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR7GuMPHx-SaGfRCOiB-3FL9pkFaDKuocLuIiJigPH6MP91HqMsTHMpFXhg5jx5XhNa2yo7QuBvLQ3nbI3z2-mYHwtqSEfJQp5TvfqwtxqmRV0Hmv-OUtIM0-rkqYkYlf4omfg0A/s1600/Screen+shot+2010-07-20+at+9.50.07+PM.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR7GuMPHx-SaGfRCOiB-3FL9pkFaDKuocLuIiJigPH6MP91HqMsTHMpFXhg5jx5XhNa2yo7QuBvLQ3nbI3z2-mYHwtqSEfJQp5TvfqwtxqmRV0Hmv-OUtIM0-rkqYkYlf4omfg0A/s640/Screen+shot+2010-07-20+at+9.50.07+PM.png" width="408" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;A Blues Lick in VexTab&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
That's all for this week, folks! There are a lot more interesting things coming up. Check out the &lt;a href="http://vexflow.com/vextab/tutorial.html"&gt;VexTab tutorial&lt;/a&gt; to play around in the sandboxes, and stay in touch.</description><author>0xFE - 11111110b - 0376</author><pubDate>Wed, 21 Jul 2010 04:54:23 GMT</pubDate><guid isPermaLink="true">https://0xfe.blogspot.com/2010/07/more-durations-and-better-beaming.html</guid></item><item><title>Programming Praxis - Word Cube</title><link>https://jeroenpelgrims.com/programming-praxis-word-cube/</link><description>&lt;p&gt;This is my first solution for a Programming Praxis assignment, the &lt;a href="http://programmingpraxis.com/2010/07/13/word-cube/"&gt;Word Cube&lt;/a&gt; problem.&lt;/p&gt;
&lt;p&gt;It's definitely not an elegant solution. It's almost as brute force as it can get, but I have only a negligible amount of training in this field so I'm satisfied for now with being able to find a solution at all.
It takes a few minutes to find all the possible words. I did however find quite a few more than the ones mentioned in the assignment.
&lt;a href="http://bitbucket.org/resurge/programming-praxis/src/tip/Word%20Cube/wordcube.py"&gt;Click here&lt;/a&gt; to see the source code.&lt;/p&gt;</description><author>Jeroen Pelgrims</author><pubDate>Wed, 21 Jul 2010 01:41:00 GMT</pubDate><guid isPermaLink="true">https://jeroenpelgrims.com/programming-praxis-word-cube/</guid></item><item><title>Four Ways to get Instant Access to a Terminal in Linux</title><link>https://justingarrison.com/blog/2010-07-19-four-ways-to-get-instant-access-to-a-terminal-in-linux/</link><description>If you have ever found yourself in need of a terminal available at</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 19 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-07-19-four-ways-to-get-instant-access-to-a-terminal-in-linux/</guid></item><item><title>How to Install Ubuntu 10.04 over a LAN</title><link>https://peterlyons.com/problog/2010/07/install-ubuntu-lan/</link><description>&lt;h1 id="overview-and-requirements"&gt;Overview and Requirements&lt;/h1&gt;
&lt;p&gt;So I've volunteered to help &lt;a href="http://www.bococo.org/"&gt;Boulder Community Computers&lt;/a&gt; set up some automated Ubuntu OS installations over their local area network. Being as this is a large part of what I do professionally, this is something easy for me to do that should help them be more efficient. Their network layout is going to look something like this I think:&lt;/p&gt;
&lt;pre&gt;Internet
   ^
   |
Office LAN (private addresses)&lt;-&gt; Various workstations (DHCP from router)
   ^
   |
Multihomed Netboot Server
   ^
   |
OS Build Network (other private addresses)
   ^
   |
   &lt;-&gt;Bare metal target machines needing  an OS (DHCP from Netboot Server)
&lt;/pre&gt;
&lt;p&gt;OK, so let's talk about some of the goals/requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I want the build network to be separate from the office network. This will keep things simple, avoid DHCP collisions, prevent users from accidentally provisioning their workstations, and keep the intense network traffic of OS installation off the office LAN&lt;/li&gt;
&lt;li&gt;I want to mainly download cached objects from the Netboot server to the targets. I want to avoid downloading the OS over the Internet connection repeatedly.&lt;/li&gt;
&lt;li&gt;I don't want a lot of ongoing maintenance tasks&lt;/li&gt;
&lt;li&gt;I would like to be able to do a fully automatic hands-off installation&lt;/li&gt;
&lt;li&gt;I would also like to be able to boot into a live CD to test compatibility&lt;/li&gt;
&lt;li&gt;I would like to be able to do an interactive custom install&lt;/li&gt;
&lt;li&gt;I do want internet access from the OS Build Network (mostly for NTP, but it's just handy in general)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So overall, Ubuntu can meet all of these goals easily. Here are the details.&lt;/p&gt;
&lt;h1 id="setting-up-the-multihomed-network-install-server"&gt;Setting up the Multihomed Network Install Server&lt;/h1&gt;
&lt;p&gt;So we want an Ubuntu server machine with two network interfaces (multihomed) to act as our network install server. This machine will provide DHCP/PXE, TFTP, NFS, HTTP, and HTTP proxy services to the target machines. It will also act as their default gateway, routing their traffic from the OS Build Network out to the Office LAN and then out onto the Internet and back. Here's how we get this server installed and configured.&lt;/p&gt;
&lt;h2 id="install-a-basic-ubuntu-10-04-server-amd64-host"&gt;Install a basic Ubuntu 10.04 Server amd64 host&lt;/h2&gt;
&lt;p&gt;I used a VirtualBox VM for this while testing this setup, and we will probably use that in their "production" environment as well. If you use a physical computer, make sure it has 2 network connections. You can select "OpenSSH Server" during the install or &lt;a href="https://help.ubuntu.com/community/InstallingSoftware"&gt;install&lt;/a&gt; openssh-server later. Once the OS is up and running, we need to configure both of the network interfaces. We'll be using RFC 1918 private addresses for both. In this case we have a 10.0.0.0/8 network as eth0 which is the Office LAN and a 192.168.0.0/16 network as eth1 which is the OS Build Network. The Office LAN is your typical home or office type network where a router is serving private IP addresses over DHCP and providing Internet access. In VirtualBox I set the first interface to be a bridged interface eth0 and the second interface to an internal only interface eth1. To do this we edit &lt;code&gt;/etc/network/interfaces&lt;/code&gt; as root as follows.&lt;/p&gt;
&lt;h3 id="a-quick-note-about-code-samples-and-long-lines"&gt;A quick note about code samples and long lines&lt;/h3&gt;
&lt;p&gt;Several of the code samples in this article require very long lines. These don't display well on the web, but they are displayed using a CSS overflow horizontal scrollbar. Hopefully they are easy enough to read, copy, and paste.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

# The internal build network for OS installation
auto eth1
iface eth1 inet static
address 192.168.8.1
netmask 255.255.255.0
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;After that edit, activate the config with (as root) &lt;code&gt;ifdown eth1; ifup eth1&lt;/code&gt;. Verify it's working by pinging both of your IP addresses (the 10.X.X.X one and the 192.168.X.X one).&lt;/p&gt;
&lt;h2 id="install-and-configure-pxe-boot-services"&gt;Install and Configure PXE Boot Services&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://help.ubuntu.com/community/InstallingSoftware"&gt;Install&lt;/a&gt; &lt;code&gt;dnsmasq&lt;/code&gt; via &lt;code&gt;apt-get install dnsmasq&lt;/code&gt;. Then as root do a &lt;code&gt;mkdir /var/lib/tftpboot&lt;/code&gt;. Edit &lt;code&gt;/etc/dnsmasq.conf&lt;/code&gt; to look as follows.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;interface=eth1
dhcp-range=192.168.8.100,192.168.8.254,12h
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/var/lib/tftpboot/
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Restart it with &lt;code&gt;service dnsmasq restart&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The next big step is to make the Debian Installer available as a PXE boot image. We're basically following &lt;a href="http://www.debuntu.org/how-to-unattended-ubuntu-network-install-pxelinux-p4"&gt;this article&lt;/a&gt; here, except we're doing Ubuntu Lucid 10.04 instead of Feisty. Do the following.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;cd /var/lib/tftpboot
sudo wget http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-i386/current/images/netboot/netboot.tar.gz
sudo tar -xzvf netboot.tar.gz
sudo rm netboot.tar.gz
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;OK, at this point we should be ready to boot our first test target machine into the Debian Installer network boot service OS. PXE boot a machine on the OS Build Network (again, I used a VirtualBox VM). You may have to fit a key like F12 to instruct the machine to boot from a network card. I have to hit F12 then "l" to boot from the LAN on my VirtualBox VM. If all is well, you should see a lovely Ubuntu installer menu like this (you won't have the menu items containing "10.04" yet, but we'll add them later).&lt;/p&gt;
&lt;p&gt;&lt;img alt="Ubuntu Installer PXE Menu" src="https://peterlyons.com/problog/images/ubuntu_installer_pxe_menu.png" /&gt;&lt;/p&gt;
&lt;p&gt;So now we can use this to install Ubuntu onto the target. Well, almost. We don't have Internet access from our OS Build Network working yet, so let's get that going.&lt;/p&gt;
&lt;h1 id="setting-up-routing-to-the-internet"&gt;Setting up Routing to the Internet&lt;/h1&gt;
&lt;p&gt;We want to allow our target machines to connect to the Internet, which means we will configure our Net Boot server as a very basic router and NAT firewall. This is often called Internet Connection Sharing when used for this simple purpose. We're basically following &lt;a href="https://help.ubuntu.com/community/Internet/ConnectionSharing"&gt;Internet Connection Sharing Setup&lt;/a&gt; docs from the Ubuntu community wiki. As root, add &lt;code&gt;net.ipv4.ip_forward=1&lt;/code&gt; to &lt;code&gt;/etc/sysctl.conf&lt;/code&gt;. Then run these commands.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;sudo iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/16 -m conntrack  --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE 
sudo iptables-save | sudo tee /etc/iptables.sav
sudo sh -c "echo 1 &gt; /proc/sys/net/ipv4/ip_forward"
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now add &lt;code&gt;iptables-restore &amp;lt; /etc/iptables.sav&lt;/code&gt; to &lt;code&gt;/etc/rc.local&lt;/code&gt; as root just above the &lt;code&gt;exit 0&lt;/code&gt; line. This will get us going again when we reboot.&lt;/p&gt;
&lt;p&gt;Now you should be able to PXE boot a target, select "Install" from the menu and do an Ubuntu installation. However, it's going to be a normal install over the Internet, which is fine for doing one or two boxes, but since we want to crank these out en masse, we'll want to cache the bits and grab them locally.&lt;/p&gt;
&lt;h1 id="caching-the-ubuntu-packages-with-apt-cacher-ng"&gt;Caching the Ubuntu Packages with apt-cacher-ng&lt;/h1&gt;
&lt;p&gt;I tried both squid and apt-cacher for a solution to locally cache the bulk of the Ubuntu binary package payload, but neither worked very well. apt-cacher-ng seems to do exactly what we want and nothing more with no configuration. &lt;a href="https://help.ubuntu.com/community/InstallingSoftware"&gt;install&lt;/a&gt; &lt;code&gt;apt-cacher-ng&lt;/code&gt;. This "just works" with no setup. After it's installed, if you PXE boot a target, select "Install" and go through the interactive install, when prompted for a proxy, enter &lt;code&gt;http://192.168.8.1:3142&lt;/code&gt;. This is the OS Build Network IP of the Net Boot server and the apt-cacher-ng proxy port. Now all your packages will be cached on the OS Boot Server. The first install will download them from the Internet. Subsequent installs will get them from the local cache and thus be much much faster and more efficient.&lt;/p&gt;
&lt;h1 id="hands-off-automatic-os-installation"&gt;Hands-off Automatic OS Installation&lt;/h1&gt;
&lt;p&gt;OK, we now have network based OS installs working, but since we're planning on doing many of these, we want to fully automate this. To do that, we'll use a preseed file to configure the Debian Installer to not ask any questions. Configure a file at &lt;code&gt;/var/lib/tftpboot/bococo.seed&lt;/code&gt; with the the content linked here: &lt;a href="https://peterlyons.com/problog/images/bococo.seed"&gt;bococo.seed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now we'll add a new item to the PXE menu to trigger a hands-off automated OS install. Edit &lt;code&gt;/var/lib/tftpboot/ubuntu-installer/i386/boot-screens/text.cfg&lt;/code&gt; and add this entry.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;label install-10.04-hands-off 
        menu label ^Install 10.04 Hands Off
        kernel ubuntu-installer/i386/linux
        append vga=normal initrd=ubuntu-installer/i386/initrd.gz locale=en_US.UTF-8 debian-installer/keymap=us auto hostname=bococo preseed/url=http://192.168.8.1/bococo.seed -- quiet
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;In order to get that file over HTTP, we'll server it up with the nginx web server. &lt;a href="https://help.ubuntu.com/community/InstallingSoftware"&gt;install&lt;/a&gt; nginx via &lt;code&gt;apt-get install nginx&lt;/code&gt;. Then we can edit &lt;code&gt;/etc/nginx/sites-enabled/default&lt;/code&gt; and change &lt;code&gt;location /&lt;/code&gt; block to set the new document root to the tftpboot directory so it looks like this.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;        location / {
                root   /var/lib/tftpboot;
                index  index.html index.htm;
        }
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Restart nginx via &lt;code&gt;service nginx restart&lt;/code&gt;. Now we should be able to PXE boot the target and select the "Install 10.04 Hands Off" option and the entire thing should happen automatically.&lt;/p&gt;
&lt;h1 id="network-booting-into-the-live-image"&gt;Network Booting into the Live Image&lt;/h1&gt;
&lt;p&gt;One final bit of utility functionality we want to provide is a network bootable live Ubuntu image. This will be handy for testing hardware compatibility, performance, etc. First we'll download the primary Ubuntu Desktop CD image and make it available over NFS. Do the following as root.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;apt-get install nfs-kernel-server
cd /var/opt
wget 'http://ubuntu.cs.utah.edu/releases/lucid/ubuntu-10.04-desktop-i386.iso'
mkdir /var/lib/tftpboot/ubuntu-10.04-desktop-i386
echo /var/opt/ubuntu-10.04-desktop-i386.iso /var/lib/tftpboot/ubuntu-10.04-desktop-i386 auto ro,loop 0 0 &gt;&gt; /etc/fstab
mount /var/lib/tftpboot/ubuntu-10.04-desktop-i386
echo "/var/lib/tftpboot/ubuntu-10.04-desktop-i386 *(ro,sync,no_subtree_check)" &gt;&gt; /etc/exports
service nfs-kernel-server restart
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now add another entry to your PXE menu for the live Session. I also like to move the &lt;code&gt;menu default&lt;/code&gt; option to the live session, so my final &lt;code&gt;/var/lib/tftpboot/ubuntu-installer/i386/boot-screens/text.cfg&lt;/code&gt; looks like this:&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;default install-10.04-hands-off
label live
        menu label ^Live Session 10.04
        menu default
        kernel ubuntu-10.04-desktop-i386/casper/vmlinuz
        append initrd=ubuntu-10.04-desktop-i386/casper/initrd.lz boot=casper netboot=nfs nfsroot=192.168.8.1:/var/lib/tftpboot/ubuntu-10.04-desktop-i386          -- quiet
label install
        menu label ^Install
        kernel ubuntu-installer/i386/linux
        append vga=normal initrd=ubuntu-installer/i386/initrd.gz -- quiet 
label install-10.04-hands-off
        menu label ^Install 10.04 Hands Off
        kernel ubuntu-installer/i386/linux
        append vga=normal initrd=ubuntu-installer/i386/initrd.gz locale=en_US.UTF-8 debian-installer/keymap=us auto hostname=bococo preseed/url=http://192.168.8.1/bococo.seed -- quiet
label cli
        menu label ^Command-line install
        kernel ubuntu-installer/i386/linux
        append tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=falseac vga=normal initrd=ubuntu-installer/i386/initrd.gz -- quiet
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;And that's it! We can now netbook into a live session, an interactive install, or a fully automated install.&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.debuntu.org/how-to-unattended-ubuntu-network-install-pxelinux-p4"&gt;How-To: Unattended Ubuntu Deployment over Network -- page 4 -- PXELinux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/Internet/ConnectionSharing"&gt;Ubuntu Internet Connection Sharing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.debian.org/releases/etch/i386/ch04s07.html.en"&gt;Debian Installer section on Automatic Installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.ubuntu.com/10.04/installation-guide/example-preseed.txt"&gt;Sample preseed file for Ubuntu 10.04&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ubuntugeek.com/apt-cacher-ng-http-download-proxy-for-software-packages.html"&gt;Info on apt-cacher-ng&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;Thanks to the authors of the above reference web pages and Nick Flores for collaborating on this.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Sat, 17 Jul 2010 07:40:24 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/07/install-ubuntu-lan/</guid></item><item><title>Gravitation at the Jet Realm</title><link>https://mbutler.org/gravitation-at-the-jet-realm/</link><description>In 2010 I generated this hardbound book as a wedding present for my friends Nathan and Pei-San and published it with Intermedia Writing Systems. It used the Open Wound software along with some custom editing tools. The quotes on the inside jacket flap were taken from the generated text and were touchingly specific to their [&amp;#8230;]</description><author>mbutler</author><pubDate>Sat, 17 Jul 2010 02:16:38 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/gravitation-at-the-jet-realm/</guid></item><item><title>A Day Flying</title><link>https://solomon.io/a-day-flying/</link><description>My friend Glenn invited me to go flying with him the other afternoon. I got some pretty amazing pictures. Check out the spectacular rainbow from the plane!</description><author>Sam Solomon</author><pubDate>Fri, 16 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/a-day-flying/</guid></item><item><title>Fuck GPL!</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/fuck-gpl</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Thu, 15 Jul 2010 16:56:17 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/fuck-gpl</guid></item><item><title>Migrating VexFlow to SCons</title><link>https://0xfe.blogspot.com/2010/07/migrating-vexflow-to-scons.html</link><description>I love tools. Tools keep my projects predictable and smooth. Tools help me code fast and release fast.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.vexflow.com/"&gt;VexFlow&lt;/a&gt; has gone through many iterations of design, implementation, and deployment, and I couldn't have brought it this far so quickly without my tools. (Well, automated testing had a lot to do with it too, but that's for another post.)&lt;br /&gt;
&lt;br /&gt;
Yesterday, I added a new tool to my toolbox - &lt;a href="http://www.scons.org/"&gt;SCons&lt;/a&gt;. I migrated all my building, packaging, test driving, and deployment code to SCons. Compared to the ugly shell scripts I previously used, SCons is a lot cleaner, a lot faster, and significantly easier to manage.&lt;br /&gt;
&lt;br /&gt;
I chose SCons for two reasons:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Simplicity. It's Python-based and super-easy to work with.&lt;/li&gt;
&lt;li&gt;Familiarity. I've used it before, so already know my way around it.&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;Since I use the &lt;a href="http://code.google.com/closure/compiler/"&gt;Google Closure Compiler&lt;/a&gt; to build and minimize my JavaScript code, I had to write a new builder for SCons. That turned out to be pretty straightforward to implement.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="prettyprint"&gt;def js_builder(target, source, env):
  """ A JavaScript builder using Google Closure Compiler. """

  cmd = env.subst(
      "$JAVA -jar $JS_COMPILER --compilation_level $JS_COMPILATION_LEVEL");

  # Add defines to the command
  for define in env['JS_DEFINES'].keys():
    cmd += " --define=\"%s=%s\"" % (define, env['JS_DEFINES'][define])

  # Add the source files
  for file in source:
    cmd += " --js " + str(file)

  # Add the output file
  cmd += " --js_output_file " + str(target[0])

  # Log the command and run
  print env.subst(cmd)
  os.system(env.subst(cmd))
&lt;/pre&gt;&lt;br /&gt;
I also needed a new builder to stamp my output with the relevant build information. So, I created a &lt;i&gt;Stamper, &lt;/i&gt;which is just a builder that runs some string substitution on files with &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sed&lt;/span&gt;. The stamper looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;def vexflow_stamper(target, source, env):
  """ A Build Stamper for VexFlow """

  cmd =  "sed "
  cmd += " -e s/__VEX_BUILD_PREFIX__/$VEX_BUILD_PREFIX/"
  cmd += " -e s/__VEX_VERSION__/$VEX_VERSION/"
  cmd += ' -e "s/__VEX_BUILD_DATE__/${VEX_BUILD_DATE}/"'
  cmd += " -e s/__VEX_GIT_SHA1__/`git rev-list --max-count=1 HEAD`/ "
  cmd += ("%s &amp;gt; %s" % (source[0], target[0]))

  print env.subst(cmd)
  os.system(env.subst(cmd))
&lt;/pre&gt;&lt;br /&gt;
Before you can use these builders, you need to add them to your environment:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;env.Append(BUILDERS = {'JavaScript': Builder(action = js_builder),
                       'VexFlowStamp': Builder(action = vexflow_stamper)})
&lt;/pre&gt;&lt;br /&gt;
Once this is done, you can add build JavaScript targets with the &lt;i&gt;JavaScript&lt;/i&gt; command.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;env['JAVA'] = "/usr/bin/java"
env['JS_COMPILER'] = "support/compiler.jar"
env['JS_DEFINES' ] = {
  "Vex.Debug": "true",
  "Vex.LogLevel": "4"
}

sources = ["src1.js", "src2.js", "src3.js"]

env.JavaScript("src.min.js", sources)
&lt;/pre&gt;&lt;br /&gt;
This really is just scratching the surface. There's a lot more you can do with SCons to automate and streamline your builds. To learn more, take a look at the &lt;a href="http://www.scons.org/doc/2.0.0.final.0/HTML/scons-user/index.html"&gt;user guide&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I added support for testing, packaging, and deployment (of the web pages and demos) to my SCons scripts in a matter of hours, and finally purged all my nasty shell scripts from the VexFlow codebase.&lt;br /&gt;
&lt;br /&gt;
Give it a try. I guarantee you'll be happier.</description><author>0xFE - 11111110b - 0376</author><pubDate>Wed, 14 Jul 2010 18:51:00 GMT</pubDate><guid isPermaLink="true">https://0xfe.blogspot.com/2010/07/migrating-vexflow-to-scons.html</guid></item><item><title>just some late night sketches done with a finger</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/just-some-late-night-sketches-done-with-a-finger</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Wed, 14 Jul 2010 17:21:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/just-some-late-night-sketches-done-with-a-finger</guid></item><item><title>Empfehlung: Barbecue Sauce “Bone Suckin’ regular thicker style” von Ford’s Food</title><link>https://manuel.kiessling.net/2010/07/13/empfehlung-barbeque-soss-bone-suckin-sauce-regular/</link><description>Klar, über Geschmack lässt sich immer streiten, aber über den Geschmack von Barbecue Saucen wahrscheinlich am meisten.  Die beste Sauce, die zu probieren ich bisher das Vergnügen hatte, ist jedenfalls völlig zweifelsfrei die “Bone Suckin’ Sauce regular” von Ford’s Food.  Phil Ford war Immobilienmakler und hat aus einem Hobby heraus angefangen, diese Sauce zu entwickeln. Sie hat nur wenig Raucharoma und ist nicht scharf, im Vordergrund steht vor allem ein fantastisches Tomatenaroma und eine gewisse Süße, die es aber auch nicht übertreibt.</description><author>Home on The Log Book of Manuel Kießling</author><pubDate>Tue, 13 Jul 2010 18:13:00 GMT</pubDate><guid isPermaLink="true">https://manuel.kiessling.net/2010/07/13/empfehlung-barbeque-soss-bone-suckin-sauce-regular/</guid></item><item><title>Empfehlung: “Der Kuchenladen” in Berlin</title><link>https://manuel.kiessling.net/2010/07/13/empfehlung-der-kuchenladen-in-berlin/</link><description>Die Konditorei “Der Kuchenladen” ist sogar die nervige Parkplatzsuche auf der Kantstraße wert. Handgemachte Torten, Kuchen und Tarts, die klasse aussehen und einfach gut schmecken.  Das Wichtigste: Auf übertriebene effekthascherische Zuckerguß-Ungetüme wird verzichtet – die Torten zeichnet neben der spürbaren handwerklichen Qualität vor allem aus, dass sie nicht zu süß sind.  Als Schwiegersohn einer Konditoreimeisterin bin ich sehr verwöhnt, aber der Kuchenladen hat mich noch nie enttäuscht.   Der Kuchenladen</description><author>Home on The Log Book of Manuel Kießling</author><pubDate>Tue, 13 Jul 2010 18:13:00 GMT</pubDate><guid isPermaLink="true">https://manuel.kiessling.net/2010/07/13/empfehlung-der-kuchenladen-in-berlin/</guid></item><item><title>Durations, Code, and Posters</title><link>https://0xfe.blogspot.com/2010/07/durations-code-and-posters.html</link><description>The last few weeks have been relatively quiet on the VexFlow side. I've been vacationing in Cape Cod with my wife and 3-month-old.&lt;br /&gt;
&lt;br /&gt;
Obviously, vacation is never fun without a few good coding sprints. I started work on incorporating standard notation into &lt;a href="http://www.vexflow.com/vextab"&gt;VexTab&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The first thing I needed to do was create a class to convert fret-string pairs to notes. In order to support alternate tunings, I created a &lt;i&gt;Tuning&lt;/i&gt;&amp;nbsp;class, whose sole responsibility is to return the correct note for a given fret-string pair, based on the instrument type and tuning.&lt;br /&gt;
&lt;br /&gt;
So, to convert the fret-string pair "5/2" on a 5-string bass to standard notation, all I need to do is:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;var tuning = new Vex.Flow.Tuning("G/4,D/4,A/3,E/3,B/2");
var note = tuning.getNoteForFret(5, 2);
&lt;/pre&gt;&lt;br /&gt;
The next part was augmenting the language to render standard notation when requested. I modified &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;tabstave&lt;/span&gt; to accept &lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;i&gt;key=value&lt;/i&gt;&lt;/span&gt; parameters, and added a parameter called &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;notation&lt;/span&gt;. When set to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;true&lt;/span&gt;, it renders standard notation above the guitar tab.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOfzb0VTihrFnDXvA642NRGLuWU45tUoukDnqlFYI5bF-J_CBAWHriN3qroiWKRqWYDoOPFNKfgDoZp5jmRwRqYjla4YEQ2Chd0yL_O6bJAFow9mG6-kUlCNHTbrFvHpupX02O3g/s1600/Screen+shot+2010-07-12+at+2.20.47+PM.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOfzb0VTihrFnDXvA642NRGLuWU45tUoukDnqlFYI5bF-J_CBAWHriN3qroiWKRqWYDoOPFNKfgDoZp5jmRwRqYjla4YEQ2Chd0yL_O6bJAFow9mG6-kUlCNHTbrFvHpupX02O3g/s320/Screen+shot+2010-07-12+at+2.20.47+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;VexTab with Standard Notation&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
I also started work on basic duration support and auto-beaming. I don't have much to show for this yet, because they're currently a bit intertwined, and automatic beaming is harder than I anticipated (yet again!)&lt;br /&gt;
&lt;br /&gt;
In other news, I &lt;a href="http://github.com/0xfe/vex/blob/master/vextab/vextab.js"&gt;open sourced&lt;/a&gt; the VexTab parser, so you can learn more about the language or use it in your own rendering engines. It is currently slightly coupled to VexFlow, but pretty trivial to decouple. (I'm going to fully decouple it as this project progresses.)&lt;br /&gt;
&lt;br /&gt;
The parser is licensed under the &lt;a href="http://www.opensource.org/licenses/mit-license.php"&gt;MIT license&lt;/a&gt;, and is available on GitHub at: &lt;a href="http://github.com/0xfe/vex/tree/master/vextab/"&gt;http://github.com/0xfe/vex/tree/master/vextab/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Finally, some readers who liked my previous &lt;a href="http://0xfe.blogspot.com/2009/12/google-chrome-poster-from-source-code.html"&gt;Chrome Poster from Source Code&lt;/a&gt; post requested posters for other open-source projects. I generated posters for Firefox, Linux, and FreeBSD, and made them available on my other side project: &lt;a href="http://wickedmeanposters.com/"&gt;Wicked Mean Posters&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAD0NHLeE4x2HoXGDzW6pydG0jqBIb_bI1AzrlDohHGM14iu928BTzOftpGh0cHv4uKD47sphwVDgO1sbkX61XXvgeIU1F0He8VGp0Na_QoGFUtXfOXd-ItH6nITciSpGfCm-fHA/s1600/Screen+shot+2010-07-12+at+2.43.14+PM.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAD0NHLeE4x2HoXGDzW6pydG0jqBIb_bI1AzrlDohHGM14iu928BTzOftpGh0cHv4uKD47sphwVDgO1sbkX61XXvgeIU1F0He8VGp0Na_QoGFUtXfOXd-ItH6nITciSpGfCm-fHA/s320/Screen+shot+2010-07-12+at+2.43.14+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Firefox Poster from Source Code&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
More next time!</description><author>0xFE - 11111110b - 0376</author><pubDate>Mon, 12 Jul 2010 21:50:31 GMT</pubDate><guid isPermaLink="true">https://0xfe.blogspot.com/2010/07/durations-code-and-posters.html</guid></item><item><title>Life in the Fast Lane</title><link>https://james-carr.org/posts/life-in-the-fastlane/</link><description>When I was growing up I always thought that my life would hit some kind of point where everything will start moving very quickly and that I’d have to keep up with the current before I get swept away.
And today I finally feel like I’ve dipped my toe into that point in my life.
Our baby girl was born yesterday (a month ahead of schedule) and I’ve been kind of in a rush to get everything put into place.</description><author>James Carr</author><pubDate>Mon, 12 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://james-carr.org/posts/life-in-the-fastlane/</guid></item><item><title>Thoughts on Cognitive Surplus</title><link>https://solomon.io/thoughts-on-cognitive-surplus/</link><description>The interesting part of this talk is how technology can give us a cognitive surplus, or simply free-time.</description><author>Sam Solomon</author><pubDate>Mon, 12 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/thoughts-on-cognitive-surplus/</guid></item><item><title>Tag and Rename Music with TagScanner</title><link>https://justingarrison.com/blog/2010-07-12-tag-and-rename-music-with-tagscanner/</link><description>There are plenty of automatic music organization tools but for those</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 12 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-07-12-tag-and-rename-music-with-tagscanner/</guid></item><item><title>Dropping and creating tables in read only tablespaces?!</title><link>https://tanelpoder.com/2010/07/11/dropping-and-creating-tables-in-read-only-tablespaces-what/</link><description>&lt;p&gt;You probably already know that it’s possible to drop tables in Oracle read only tablespaces… (You did know that already, right? ;-) Here’s a little example:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; create tablespace ronly datafile '/u03/oradata/LIN112/ronly.01.dbf' size 10m;

Tablespace created.

SQL&amp;gt; create table test tablespace ronly as select * from all_users;

Table created.

SQL&amp;gt; alter tablespace ronly READ ONLY;

Tablespace altered.

SQL&amp;gt; drop table test;

Table dropped.&lt;/pre&gt;
&lt;p&gt;I just dropped a table from a read only tablespace! Well, perhaps it’s because that instead of dropping the table was put into recyclebin instead (which is a data dictionary update)? Let’s check which segments remain in the RONLY tablespace:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 11 Jul 2010 20:09:12 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/07/11/dropping-and-creating-tables-in-read-only-tablespaces-what/</guid></item><item><title>Windows Server 2008 Setup Annoyances</title><link>https://peterlyons.com/problog/2010/07/windows-setup-annoyances/</link><description>&lt;p&gt;So I do a lot of work with automated unattended intallations of Operating Systems, including Windows. Here's some of my primary complaints about the new Windows setup program in Windows Server 2008.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;No good way to validate the unnatend.xml file. Now Microsoft does provide tools to help generate these files, and hopefully any file you generate with those (graphical, Windows-only) tools should be at least well-formed and semantically valid. However, there's no way to do a deeper validation that a given XML file is compatible with a particular target machine.&lt;/li&gt;
&lt;li&gt;The unattend.xml encodes the processor architecture all over the place for no reason. I have to do a search and replace of &lt;code&gt;processorArchitecture="x86"&lt;/code&gt; with &lt;code&gt;processorArchitecture="amd64"&lt;/code&gt; in every &lt;code&gt;component&lt;/code&gt; tag. There's pretty much zero information in most unattend.xml files that's CPU architecture specific anyway. This is a real nuisance. I should be able to use the exact same file on x86 and amd64 without issues.&lt;/li&gt;
&lt;li&gt;Setup doesn't do the simple but important hardware compatibility validation that would make users' lives easier. For example, neither winpe nor windows setup with complain if the target system has insufficient RAM. WinPE will just behave very oddly and things won't work. There's no checking for sufficient disk space ahead of time or that the disk layout is feasible. There's no checking for suitable network or storage drivers. When you don't have viable storage drivers, you just reboot out of WinPE into a lovely Blue Screen of Death &lt;code&gt;0x7b&lt;/code&gt; stop error. Hurray! Similarly, no one at MS seems to care if you don't have a working NIC driver. The OS has the word "Server" in it. You need a network driver or your OS is in a useless void.&lt;/li&gt;
&lt;li&gt;The fact that windows setup reboots into an environment with zero networking and zero third party applications allowed is just a mind-boggling recipe for end user frustration. We have to resort to brute time out calculation to even know whether the Windows install worked or not. We can't provide a good user experience to people looking to do UNATTENDED installs.&lt;/li&gt;
&lt;li&gt;Another one in the "we have no idea what unattended means" even though our configuration file is called "unattend.xml" department: STOP PRESENTING GUI DIALOGS. There are many issues that unattend.xml supposedly allows a &lt;code&gt;showGui="never"&lt;/code&gt; but in my experience they either have no effect (GUI displays and halts the install anyway) or they just flat out break the install. Microsoft just doesn't "get it" here. Any automated install isn't a fully attended graphical install rejiggered to try not to pop up a GUI. It's an entirely different use case. Get it through your thick skull: NO ONE IS LOOKING AT THE CONSOLE. THESE ARE SERVERS. THE INSTALL IS BEING DRIVER AUTOMATICALLY BY SOFTWARE. NEVER EVER SHOW A GUI.&lt;/li&gt;
&lt;li&gt;Same category of cluelessness. Windows setup doesn't return a non-zero exit code on failure. Duh. I'm aware of some other mechanisms like &lt;code&gt;setupcomplete.cmd&lt;/code&gt; that MS claims to provide for this, but from what I can tell after several attempts, they simply don't work.&lt;/li&gt;
&lt;li&gt;The log files and error messages are just a mess. And I'm not even talking about obscure edge case failures. Simple things like an invalid product key or computer name can create weird mysterious failures and behavior.&lt;/li&gt;
&lt;/ol&gt;</description><author>Pete's Points</author><pubDate>Sat, 10 Jul 2010 10:12:54 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/07/windows-setup-annoyances/</guid></item><item><title>Playing with Maya</title><link>https://blog.yiningkarlli.com/2010/07/playing-with-maya.html</link><description>&lt;p&gt;I’ve been playing with Maya for the past few months. 3D animation is a direction I’d like to start moving in.&lt;/p&gt;

&lt;p&gt;I’m starting to get the hang of lighting things and whatnot, although I still do not know much. I’m taking a 3D modeling course in the fall, hopefully I’ll get much better by then.&lt;/p&gt;

&lt;p&gt;Some glasses and strawberries and grapes on a table:&lt;/p&gt;

&lt;div class="embed-container"&gt;A Table With Some Stuff&lt;/div&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Sat, 10 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/07/playing-with-maya.html</guid></item><item><title>Posterous-style Blogging On App Engine</title><link>https://honza.pokorny.ca/2010/07/posterous-style-blogging-on-app-engine/</link><description>&lt;p&gt;Posterous has been getting a lot of attention lately. Its simplicity appeals to
a wide range of users and more and more users are switching over from other
well-established blogging platforms such as Blogger or WordPress. In this
article, we will have a look at how you can replicate the Posterous
functionality on App Engine.&lt;/p&gt;
&lt;p&gt;In case you don&amp;rsquo;t know what Posterous is, it&amp;rsquo;s very simple. It&amp;rsquo;s a blogging
tool like Google&amp;rsquo;s Bloggeror Wordpress.com. What makes it different from the
other services is its ridiculous simplicity. With Posterous, you don&amp;rsquo;t need to
create an account. That&amp;rsquo;s because you create new posts by emailing your post to
Posterous. It creates links for you, images sent as attachments will be
transformed into galleries, etc.&lt;/p&gt;
&lt;p&gt;I like Posterous, but my website has a lot of custom programming on the
back-end so I&amp;rsquo;m very hesitant to switch over. And besides, I like to know how
things work behind the scenes. I thought it might be fun to create a system
similar to Posterous&amp;rsquo; for my own blog which is, of course, hosted on App
Engine.&lt;/p&gt;
&lt;p&gt;Here is what we are going to do. I want to be able to send an email to my own
blog and have it turn it into a post and publish it to the blog.&lt;/p&gt;
&lt;p&gt;OK, let&amp;rsquo;s start with the post model:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-python"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #81a1c1; font-weight: bold;"&gt;class&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;Post&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;db&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;Model&lt;span style="color: #eceff4;"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    title &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; db&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;StringProperty&lt;span style="color: #eceff4;"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    body &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; db&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;TextProperty&lt;span style="color: #eceff4;"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    added &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; db&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;DateTimeProperty&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;auto_now_add&lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt;&lt;span style="color: #81a1c1; font-weight: bold;"&gt;True&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    author &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; db&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;StringProperty&lt;span style="color: #eceff4;"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Very straight forward. You have your title, body, author and when the post was
published.&lt;/p&gt;
&lt;p&gt;In order to enable incoming email, you need to add a couple of lines of code to
your &lt;code&gt;app.yaml&lt;/code&gt; file. In addition to your regular handlers, add the
following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-yaml"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #81a1c1;"&gt;inbound_services&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;- mail
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #81a1c1;"&gt;handlers&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;- &lt;span style="color: #81a1c1;"&gt;url&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;:&lt;/span&gt; /_ah/mail/.+
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  &lt;span style="color: #81a1c1;"&gt;script&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;:&lt;/span&gt; main.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The first line enables incoming email for your application. The second part is
the important part. On App Engine, an incoming email message is processed as a
HTTP POST request. Since it&amp;rsquo;s a regular HTTP request, we will need a handler
for it in the &lt;code&gt;app.yaml&lt;/code&gt; file. You have several options here. You can create
a catch-all handler for all incoming email addresses (like I&amp;rsquo;ve done above), or
create seperate handlers for different addresses.&lt;/p&gt;
&lt;p&gt;The email address that we will use is in the following format:
&lt;a href="mailto:your_string@appid.appspotmail.com"&gt;your_string@appid.appspotmail.com&lt;/a&gt;. You should substitute the appid with your
app&amp;rsquo;s ID. The string before the &amp;lsquo;@&amp;rsquo; symbol can be set to anything you want.&lt;/p&gt;
&lt;p&gt;With this out of the way, we are ready to write the actual email handler. This
will go into your &lt;code&gt;main.py&lt;/code&gt; file which you defined in the &lt;code&gt;app.yaml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;First, some imports:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-python"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #81a1c1; font-weight: bold;"&gt;import&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;email&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #81a1c1; font-weight: bold;"&gt;from&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;google.appengine.ext.webapp.mail_handlers&lt;/span&gt; &lt;span style="color: #81a1c1; font-weight: bold;"&gt;import&lt;/span&gt; InboundMailHandler
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, you add the following to the list of URL mappings in the instantiation of
the application class.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-python"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;application &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; webapp&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;WSGIApplication&lt;span style="color: #eceff4;"&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;&lt;span style="color: #a3be8c;"&gt;'/'&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; Index&lt;span style="color: #eceff4;"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    EmailHandler&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;mapping&lt;span style="color: #eceff4;"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #eceff4;"&gt;],&lt;/span&gt; debug&lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt;&lt;span style="color: #81a1c1; font-weight: bold;"&gt;True&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here EmailHandler is the request handler class that will handle the incoming
email. The &lt;code&gt;mapping()&lt;/code&gt; method will map all of the addresses and send all of
them to this handler class. It&amp;rsquo;s just a convenience method, no magic here.&lt;/p&gt;
&lt;p&gt;Now, finally, onto the actual handler:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-python"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #81a1c1; font-weight: bold;"&gt;class&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;EmailHandler&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;InboundMailHandler&lt;span style="color: #eceff4;"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #81a1c1; font-weight: bold;"&gt;def&lt;/span&gt; &lt;span style="color: #88c0d0;"&gt;receive&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;&lt;span style="color: #81a1c1;"&gt;self&lt;/span&gt;&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; mail_message&lt;span style="color: #eceff4;"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        post &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; Post&lt;span style="color: #eceff4;"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        post&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;title &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; mail_message&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;subject
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        &lt;span style="color: #81a1c1; font-weight: bold;"&gt;for&lt;/span&gt; content_type&lt;span style="color: #eceff4;"&gt;,&lt;/span&gt; body &lt;span style="color: #81a1c1; font-weight: bold;"&gt;in&lt;/span&gt; mail_message&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;bodies&lt;span style="color: #eceff4;"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;            post&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;body &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; body&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;decode&lt;span style="color: #eceff4;"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        post&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;author &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; &lt;span style="color: #a3be8c;"&gt;'John Smith'&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;        post&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;put&lt;span style="color: #eceff4;"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is actually very simple. The incoming email message is saved in the
&lt;code&gt;mail_message&lt;/code&gt; variable and you can access all of the usual email metadata as
its properties (e.g. mail_message.sender). So, we create a new post, take the
email&amp;rsquo;s subject and set it as the post&amp;rsquo;s title. The &lt;code&gt;bodies()&lt;/code&gt; method
extracts the body of the email and the &lt;code&gt;decode()&lt;/code&gt; function will decode the
actual body. Then we set the author and save the post in the datastore.&lt;/p&gt;
&lt;p&gt;Often you will want to include a link in your post, or create a list. This is
easily accomplished with HTML tags. However, HTML tags are a pain, so you might
want to use something like Markdown.&lt;/p&gt;
&lt;p&gt;Adding markdown support is super easy. Download the Python
&lt;a href="http://code.google.com/p/python-markdown2/"&gt;Markdown library&lt;/a&gt; and put the &lt;code&gt;markdown2.py&lt;/code&gt; file in your app&amp;rsquo;s root
directory. Then import it in your &lt;code&gt;main.py&lt;/code&gt; file.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-python"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #81a1c1; font-weight: bold;"&gt;import&lt;/span&gt; &lt;span style="color: #8fbcbb;"&gt;markdown2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And change the following line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-python"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;post&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;body &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; body&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;decode&lt;span style="color: #eceff4;"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;to this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-python"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;post&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;body &lt;span style="color: #81a1c1;"&gt;=&lt;/span&gt; markdown2&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;markdown&lt;span style="color: #eceff4;"&gt;(&lt;/span&gt;body&lt;span style="color: #81a1c1;"&gt;.&lt;/span&gt;decode&lt;span style="color: #eceff4;"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And that&amp;rsquo;s it!&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This is a very simple yet effective technique and it will allow you to create
post from anywhere. I hope you&amp;rsquo;ve enjoyed the post. Let me know if you have any
suggestions on how to improve it.&lt;/p&gt;
&lt;h2 id="code"&gt;Code&lt;/h2&gt;
&lt;p&gt;The complete code for this app is available on &lt;a href="https://github.com/honza/Posterous-App-Engine"&gt;Github&lt;/a&gt;.&lt;/p&gt;</description><author>Honza Pokorný</author><pubDate>Thu, 08 Jul 2010 04:00:00 GMT</pubDate><guid isPermaLink="true">https://honza.pokorny.ca/2010/07/posterous-style-blogging-on-app-engine/</guid></item><item><title>Run Android on Your Windows Mobile Phone</title><link>https://justingarrison.com/blog/2010-07-08-run-android-on-your-windows-mobile-phone/</link><description>Interested in Android but think you need to buy a new phone to</description><author>Justin Garrison's Homepage</author><pubDate>Thu, 08 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-07-08-run-android-on-your-windows-mobile-phone/</guid></item><item><title>Remove your SCM system from your job postings</title><link>https://peterlyons.com/problog/2010/07/no-scm-in-job-postings/</link><description>&lt;p&gt;Most job postings will list one or more source code management (SCM) tools in their laundry list of required skills and buzzwords. This seems to both be unnecessary and also to miss the point. As an employer, your concern shouldn't be whether or not your candidate is intimately familiar with subversion, git, perforce, starteam, mercurial, CVS, sourcesafe, or whatever system your code happens to reside within at this point in time. Why not? Because it just doesn't matter and it doesn't help you distinguish good candidates from bad. This in my mind seems akin to asking potential postal employees "Do you have experience driving from the right hand side of a boxy little truck?". It's just not something that's going to be a stumbling block. If you can drive, you'll get the hang of the postal delivery truck soon enough. It's the same with SCM. If you have worked successfully on a few sizeable projects in one or two of them, you'll be fine. I've never heard this story: "Oh yeah, we hired this woman Sandra and she wrote this fantastic code for us, but she just could not figure out how to commit it to subversion, so we had to let her go." It's just not going to be the issue. Well, what is going to be the issue?&lt;/p&gt;
&lt;p&gt;In this context, it's more important to see if the candidate understands branch and release organization and management as generic principles. When and how should the code be branched? What steps do you take when it's time to ship a release? When a bug needs to get fixed against an old version of the product, how does that work with SCM? These types of questions are OK sanity checks to spend 2 minutes on in an interview, but they don't need to be on your job posting.&lt;/p&gt;
&lt;p&gt;Now, here's what I see missing that seems in my mind much more likely to actually cause you problems down the road. Does your candidate understand software packaging, distribution, installation, and upgrade? Do they understand the principles of package management systems like RPM or DEB, and the complexities around dependency management, upgrade, and rollback? Do they understand how to package and ship (or not) third party libraries? These questions may be more or less relevant based on the deployment model you use (web vs. bundled vs. embedded, etc). However, for lots of projects, they are key and lots of companies are clearly in the dark here.&lt;/p&gt;
&lt;p&gt;So the summary: don't bother listing a specific SCM as a requirement in your job posting. Instead, briefly interview your candidates on general SCM methods and principles. And in addition to that, given your deployment model(s) find out how much your candidate knows about packaging and installation.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Wed, 07 Jul 2010 07:54:58 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/07/no-scm-in-job-postings/</guid></item><item><title>The difference that expert Quality Assurance makes</title><link>https://www.brightball.com/articles/the-difference-that-expert-quality-assurance-makes</link><description>When we first started out, we listed the thorough quality assurance review as an optional piece of our estimates.  We had this incredibly naive idea that if we gave people the option to save a little money up front that they'd fully understand if there was anything that needed to be tuned up, post-launch.  We learned our lesson...hard.</description><author>Brightball Articles</author><pubDate>Tue, 06 Jul 2010 18:33:00 GMT</pubDate><guid isPermaLink="true">https://www.brightball.com/articles/the-difference-that-expert-quality-assurance-makes</guid></item><item><title>UKNOF 16 - Enhancing BGP - Video</title><link>https://rob.sh/post/192/</link><description>&lt;p&gt;Tom Bird of &lt;a href="http://www.portfast.net/"&gt;PortFast&lt;/a&gt; and Brandon Butterworth of &lt;a href="http://www.bogons.net"&gt;Bogons&lt;/a&gt; do a great job of webcasting, and recording UKNOF video. Thanks to them, the video of the presentation I gave at UKNOF16 can be watched &lt;a href="http://media.portfast.net/uknof/uknof16/11-rob_shakir-enhancing_bgp.html"&gt;here&lt;/a&gt;. Or you can download it by clicking the image below!&lt;/p&gt;
&lt;div align="center" style="padding: 10px;"&gt;&lt;a href="https://cdn.rob.sh/files/uknof16-11-rob_shakir-enhancing_bgp.mp4"&gt;&lt;img src="https://cdn.rob.sh/img/enhancing-bgp-video.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;As always, thoughts/comments/corrections most welcome!&lt;/p&gt;
&lt;p&gt;This is also probably a good time to mention that my new work mail address is &lt;a href="mailto:rob.shakir@cw.com"&gt;rob.shakir (at) cw.com&lt;/a&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Tue, 06 Jul 2010 01:45:18 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/192/</guid></item><item><title>Last night they dug up Bobby Fischer's body</title><link>https://arnorhs.dev/posts/2010-07-05/last-night-they-dug-up-bobby-fischers-body/</link><description>Last night the body of Bobby Fischer was dug up from his grave, ordered by Iceland's supreme court. The aim is to get a biological sample to find out the truth whether Bobby Fischer is the father of philipean Jinky Young, who claims he is.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Mon, 05 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-07-05/last-night-they-dug-up-bobby-fischers-body/</guid></item><item><title>Somebody needs to invent this storage device</title><link>https://arnorhs.dev/posts/2010-07-05/somebody-needs-to-invent-this-storage-device/</link><description>Storage. It's an even lasting problem which a lot of companies out there are trying to solve. There are so many requirements and so many limitations. There are a few solutions out there which are pretty good but they are all tackling a separate problem. Somebody needs to invent a computer/storage device with the following features...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Mon, 05 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-07-05/somebody-needs-to-invent-this-storage-device/</guid></item><item><title>The strangeness of widescreen displays in modern operating systems</title><link>https://bastibe.de/2010-07-03-strangeness-of-widescreen-displays-in-modern-operating-systems.html</link><description>&lt;p&gt;So today, pretty much everyone has widescreen displays. That is, displays that are far more wide than high. This was not always so. In ye olden days, computers were mainly used for displaying text, hence displays tended to have a similar layout as books or magazines. Today, they are more like movies (which might be worrying in itself).&lt;/p&gt;
&lt;p&gt;&lt;img alt="aspect_ratios" src="http://bastibe.de/static/2010-03/aspect_ratios.png" /&gt;&lt;/p&gt;
&lt;p&gt;So todays displays are widescreen. To do all that modern stuff, like watch (widesreened) videos or multitask (display two windows side by side). However, this also means that vertical pixels are something of a scarcity. Especially on those small Laptop screens. In fact, the first Netbook screens were so tiny that many of Windows' own windows could not be used at all since the lower parts did not fit on the screen. Raise your hand if Word 2007 leaves barely ten lines of visible text between all its blue-tinted UI-splendour on your laptop screen.&lt;/p&gt;
&lt;p&gt;&lt;img alt="word_small" src="http://bastibe.de/static/2010-03/word_small.png" /&gt;&lt;/p&gt;
&lt;p&gt;This gets most straining when reading text. On the internet for example. There is practically no website at all that can be displayed in its entirity even on one of those full HD displays. Print-formatted documents are a similar matter. Actually, I find myself craving for pixels regularly. I even disable the bookmark bar in my browser to free those extra two lines of text. And I memorize keyboard shortcuts so I can hide toolbars. And I use Google Chrome instead of Firefox/Safari/Internet Explorer, not least of all since it has the smallest title bar and no bottom bar.&lt;/p&gt;
&lt;p&gt;Why, then, do modern operating systems still waste so much vertical space with that Dock/Taskbar? This is something I really don't get. Vertical space is such a scarcity, yet virtually every operating system choses to waste at least three lines of text with something that could easily go on the side of the display. Well, at least on Windows 7 and OSX that is something you can easily change.&lt;/p&gt;
&lt;p&gt;&lt;img alt="dock_small" src="http://bastibe.de/static/2010-03/dock_small.png" /&gt;&lt;/p&gt;
&lt;p&gt;So if you are like me and appreciate every added line of text, do yourself a favour and put your Dock/Taskbar on the side. Really, this should be the default.&lt;/p&gt;</description><author>bastibe.de</author><pubDate>Sat, 03 Jul 2010 15:08:00 GMT</pubDate><guid isPermaLink="true">https://bastibe.de/2010-07-03-strangeness-of-widescreen-displays-in-modern-operating-systems.html</guid></item><item><title>Jason Nation - e-mail newsletters still have value</title><link>https://arnorhs.dev/posts/2010-07-02/jason-nation-e-mail-newsletters-still-have-value/</link><description>I thought e-mail newsletters were, in essence, dead. I thought no \*real\* value could be derived from them any more. I subscribe to a few e-mail newsletters. Mostly of blogs and companies/services that I use. Some of them are annoying, some of them are sometimes useful, but I don't really remember learning anything useful from an e-mail newsletter. Untill today.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Fri, 02 Jul 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-07-02/jason-nation-e-mail-newsletters-still-have-value/</guid></item><item><title>Wuit.com Now Runs on Padrino</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/wuit-com-now-runs-on-padrino</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Fri, 02 Jul 2010 00:59:28 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/wuit-com-now-runs-on-padrino</guid></item><item><title>SimpleCalendar</title><link>https://donatstudios.com/SimpleCalendar</link><description>&lt;p&gt;SimpleCalendar is a very simple PHP calendar class written to be easy to use and flexible.&lt;/p&gt;
&lt;p&gt;It includes basic event logic and is made to be modified to your particular needs.&lt;/p&gt;
&lt;h2&gt;Sample Usage&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
require_once('SimpleCalendar.php');
$calendar = new donatj\SimpleCalendar();

$calendar-&amp;gt;setStartOfWeek('Sunday');

$calendar-&amp;gt;addDailyHtml( 'Sample Event', 'today', 'tomorrow' );
$calendar-&amp;gt;show(true);&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Example Calendar&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/donatj/SimpleCalendar"&gt;Click here for the Github repository&lt;/a&gt;.&lt;/p&gt;
&lt;div class="GithubFeed"&gt;&lt;h2&gt;Recent Activity&lt;/h2&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2026-05-20T14:22:47-05:00" title="2026-05-20T14:22:47-05:00"&gt;May. 20, 2026&lt;/time&gt;&lt;/h3&gt;&lt;h4&gt;GitHub &lt;small&gt;(&lt;a href="https://github.com/web-flow" target="_blank"&gt;web-flow&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Update PHPUnit version constraint in composer.json&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2026-05-19T16:59:38-05:00" title="2026-05-19T16:59:38-05:00"&gt;May. 19, 2026&lt;/time&gt;&lt;/h3&gt;&lt;h4&gt;Jesse Donat &lt;small&gt;(&lt;a href="https://github.com/donatj" target="_blank"&gt;donatj&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Rebuild README&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2025-11-24T17:01:31-06:00" title="2025-11-24T17:01:31-06:00"&gt;Nov. 24, 2025&lt;/time&gt;&lt;/h3&gt;&lt;h4&gt;GitHub &lt;small&gt;(&lt;a href="https://github.com/web-flow" target="_blank"&gt;web-flow&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Merge pull request #32 from donatj/donatj-patch-2&lt;br /&gt;
&lt;br /&gt;
Add PHP version 8.5 to CI workflow&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Add PHP version 8.5 to CI workflow&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2025-11-21T00:39:19-06:00" title="2025-11-21T00:39:19-06:00"&gt;Nov. 21, 2025&lt;/time&gt;&lt;/h3&gt;Bump actions/checkout from 5 to 6 (#31)&lt;br /&gt;
&lt;br /&gt;
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.&lt;br /&gt;
- [Release notes](https://github.com/actions/checkout/releases)&lt;br /&gt;
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)&lt;br /&gt;
- [Commits](https://github.com/actions/checkout/compare/v5...v6)&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
updated-dependencies:&lt;br /&gt;
- dependency-name: actions/checkout&lt;br /&gt;
  dependency-version: '6'&lt;br /&gt;
  dependency-type: direct:production&lt;br /&gt;
  update-type: version-update:semver-major&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Signed-off-by: dependabot[bot] &amp;lt;support@github.com&amp;gt;&lt;br /&gt;
Co-authored-by: dependabot[bot] &amp;lt;49699333+dependabot[bot]@users.noreply.github.com&amp;gt;&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2025-08-12T08:39:12-05:00" title="2025-08-12T08:39:12-05:00"&gt;Aug. 12, 2025&lt;/time&gt;&lt;/h3&gt;Bump actions/checkout from 4 to 5 (#30)&lt;br /&gt;
&lt;br /&gt;
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.&lt;br /&gt;
- [Release notes](https://github.com/actions/checkout/releases)&lt;br /&gt;
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)&lt;br /&gt;
- [Commits](https://github.com/actions/checkout/compare/v4...v5)&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
updated-dependencies:&lt;br /&gt;
- dependency-name: actions/checkout&lt;br /&gt;
  dependency-version: '5'&lt;br /&gt;
  dependency-type: direct:production&lt;br /&gt;
  update-type: version-update:semver-major&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Signed-off-by: dependabot[bot] &amp;lt;support@github.com&amp;gt;&lt;br /&gt;
Co-authored-by: dependabot[bot] &amp;lt;49699333+dependabot[bot]@users.noreply.github.com&amp;gt;&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2024-11-24T06:22:14-06:00" title="2024-11-24T06:22:14-06:00"&gt;Nov. 24, 2024&lt;/time&gt;&lt;/h3&gt;Merge pull request #29 from donatj/donatj-patch-2&lt;br /&gt;
&lt;br /&gt;
Test in PHP 8.4&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Test in PHP 8.4&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2023-11-27T11:06:17-06:00" title="2023-11-27T11:06:17-06:00"&gt;Nov. 27, 2023&lt;/time&gt;&lt;/h3&gt;Merge pull request #26 from donatj/php-version/8-3--users-jdonat-projects-donatj-simplecalendar--github-workflows-ci-yml&lt;br /&gt;
&lt;br /&gt;
Update PHP to 8.3&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h4&gt;Jesse Donat &lt;small&gt;(&lt;a href="https://github.com/donatj" target="_blank"&gt;donatj&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Update PHP to 8.3&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2023-11-02T23:01:07-05:00" title="2023-11-02T23:01:07-05:00"&gt;Nov. 2, 2023&lt;/time&gt;&lt;/h3&gt;Replace travis badge with GitHub Actions&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h4&gt;GitHub &lt;small&gt;(&lt;a href="https://github.com/web-flow" target="_blank"&gt;web-flow&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Merge pull request #25 from donatj/phpstan&lt;br /&gt;
&lt;br /&gt;
Pretty major cleanup&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h4&gt;Jesse Donat &lt;small&gt;(&lt;a href="https://github.com/donatj" target="_blank"&gt;donatj&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Use Makefile&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Adds helpful Makefile&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Update autoloader syntax&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Use correctly compatible versions&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Updates README&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Minor fixup&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Drop pre-7.2&amp;rsquo;s&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Run fixer&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Add phpcs and php-cs-fixer&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Fixup&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Add phpstan.neon&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Cleans up composer.json some&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Correct backwards annotation&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Remove unnecessary if&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Min PHP 7.2&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Fix http url&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2023-09-05T00:07:40-05:00" title="2023-09-05T00:07:40-05:00"&gt;Sep. 5, 2023&lt;/time&gt;&lt;/h3&gt;Bump actions/checkout from 3 to 4&lt;br /&gt;
&lt;br /&gt;
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.&lt;br /&gt;
- [Release notes](https://github.com/actions/checkout/releases)&lt;br /&gt;
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)&lt;br /&gt;
- [Commits](https://github.com/actions/checkout/compare/v3...v4)&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
updated-dependencies:&lt;br /&gt;
- dependency-name: actions/checkout&lt;br /&gt;
  dependency-type: direct:production&lt;br /&gt;
  update-type: version-update:semver-major&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Signed-off-by: dependabot[bot] &amp;lt;support@github.com&amp;gt;&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2023-01-11T12:36:38-06:00" title="2023-01-11T12:36:38-06:00"&gt;Jan. 11, 2023&lt;/time&gt;&lt;/h3&gt;Updates docs&lt;hr /&gt;&lt;/div&gt;&lt;/div&gt;    &lt;table cellpadding="0" cellspacing="0" class="datatable" style="width: 100%;"&gt;
        &lt;tr&gt;&lt;th align="left"&gt;Build&lt;/th&gt;&lt;th align="left"&gt;Date&lt;/th&gt;&lt;th align="left"&gt;Message&lt;/th&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td align="left"&gt;v0.6.0&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/SimpleCalendar/zipball/v0.6.0" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2014-04-16T13:58:55-05:00" title="2014-04-16T13:58:55-05:00"&gt;Apr. 16, 2014&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;Simplified shrimp2ts work&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=""&gt;&lt;td align="left"&gt;v0.6.1&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/SimpleCalendar/zipball/v0.6.1" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2014-04-16T14:42:21-05:00" title="2014-04-16T14:42:21-05:00"&gt;Apr. 16, 2014&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;gitignore updates&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td align="left"&gt;v0.6.2&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/SimpleCalendar/zipball/v0.6.2" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2017-06-07T09:57:30-05:00" title="2017-06-07T09:57:30-05:00"&gt;Jun. 7, 2017&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;Merge branch 'keesiemeijer-master'&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=""&gt;&lt;td align="left"&gt;v0.7.0&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/SimpleCalendar/zipball/v0.7.0" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2023-01-11T12:24:49-06:00" title="2023-01-11T12:24:49-06:00"&gt;Jan. 11, 2023&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;Updates docs&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td align="left"&gt;v0.8.0&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/SimpleCalendar/zipball/v0.8.0" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2023-11-02T23:01:07-05:00" title="2023-11-02T23:01:07-05:00"&gt;Nov. 2, 2023&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;Replace travis badge with GitHub Actions&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;   &lt;/table&gt;</description><author>Donat Studios</author><pubDate>Thu, 01 Jul 2010 09:17:11 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/SimpleCalendar</guid></item><item><title>Bachelor in Applied Computer Science</title><link>https://jeroenpelgrims.com/bachelor-in-applied-computer-science/</link><description>&lt;p&gt;Yesterday evening I received my diploma.&lt;/p&gt;
&lt;p&gt;This post isn't in line with the previous posts I made but it &lt;em&gt;is&lt;/em&gt; in line with the general content of this blog, things I learned.&lt;/p&gt;
&lt;p&gt;When I entered college I had a basic knowledge of programming. I knew some PHP and some VB. These past three years I learned a bunch, possibly more than I thought I would learn when entering college.&lt;/p&gt;
&lt;h2 id="onwards-in-education"&gt;Onwards in education!&lt;a class="zola-anchor" href="https://jeroenpelgrims.com/bachelor-in-applied-computer-science/#onwards-in-education" title="Click here to get a direct link to this section in your browser's address bar."&gt;§&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I am now preparing myself to further my education.
The next two years I'll be working for my master's degree, also in Applied Computer Science.
I am not yet officially signed up for a University yet --signups start begin July-- but I'm pretty sure I'll be attending &lt;a href="https://www.vub.be"&gt;Vrije Universiteit Brussel (VUB)&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="why-more"&gt;Why more?&lt;a class="zola-anchor" href="https://jeroenpelgrims.com/bachelor-in-applied-computer-science/#why-more" title="Click here to get a direct link to this section in your browser's address bar."&gt;§&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I've gotten a lot of questions as to &lt;em&gt;why&lt;/em&gt; I want to go for a master's degree, especially from the people I've worked with in my internship at &lt;a href="http://www.itemsolutions.com/"&gt;Item Solutions&lt;/a&gt; (of which the majority are also &lt;a href="http://www.kdg.be/"&gt;Karel de Grote&lt;/a&gt; Alumni).&lt;/p&gt;
&lt;p&gt;The main reason is simple, I want to learn more. Some specifics include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Functional Programming&lt;/li&gt;
&lt;li&gt;Machine Learning
&lt;ul&gt;
&lt;li&gt;Evolutionary programming&lt;/li&gt;
&lt;li&gt;Genetic algorithms/programming&lt;/li&gt;
&lt;li&gt;Neural networks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Algorithms to compare images&lt;/li&gt;
&lt;li&gt;The principles of optimization (O(n) etc.)&lt;/li&gt;
&lt;li&gt;Secret Santa problem&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Secret Santa problem was something I read about while participating in the &lt;a href="http://redditgifts.com/"&gt;Reddit Secret Santa&lt;/a&gt;. This is a very specific problem I'm mentioning here because that's what I wrote down in my "want to learn list" I created in the course of last year. But what I actually want to learn is more general of course, think &lt;a href="http://programmingpraxis.com/"&gt;every problem on Programming Praxis&lt;/a&gt;.
The site is often described as having less "mathy" problems than &lt;a href="http://projecteuler.net/"&gt;Project Euler&lt;/a&gt;, yet I can only sporadically solve one of them, and most of the time in an as brute-forced-way as possible.&lt;/p&gt;
&lt;p&gt;Another reason I want to get my master's degree is because I'm interested in living abroad for a short period of time (1-2 years) and from what I've read countries are a lot easier to get in to for a long period of time when you have a degree. Now, I don't know what the difference is between a Master's and a Bachelor's degree when it comes to getting in to countries but I assume the higher the degree, the easier it is to get in.&lt;/p&gt;
&lt;p&gt;In the last three years I've noticed I also enjoy explaining things to classmates. So I've also thought about a possible future as a college professor, in CS related fields of course.&lt;/p&gt;
&lt;p&gt;And finally a reason that is completely not connected to computers: Since VUB is quite a bit further from home I'll need to have a "kot" (student home/dorm). I believe this is a great stepping stone to becoming more independent.&lt;/p&gt;</description><author>Jeroen Pelgrims</author><pubDate>Wed, 30 Jun 2010 03:44:00 GMT</pubDate><guid isPermaLink="true">https://jeroenpelgrims.com/bachelor-in-applied-computer-science/</guid></item><item><title>How to Batch Edit Photos with Phatch</title><link>https://justingarrison.com/blog/2010-06-29-batch-edit-photos-with-phatch/</link><description>If you have ever needed to edit a whole folder of photos with the same effect or</description><author>Justin Garrison's Homepage</author><pubDate>Tue, 29 Jun 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-06-29-batch-edit-photos-with-phatch/</guid></item><item><title>Phew</title><link>https://etodd.io/2010/06/28/phew/</link><description>&lt;p&gt;Well, I submitted A3P to IndieCade on Friday. It's also currently in QA testing for an online gaming portal (&lt;a href="http://bigpoint.com"&gt;BigPoint&lt;/a&gt;, still free of course).&lt;/p&gt;
&lt;p&gt;I won't say that A3P is done, but I think it's pretty stable. I need to do a bit more work on the connection establishment process (it seems a little fragile), but other than that, there's not much else to do. I also packaged the game into a standalone version available here: &lt;a href="http://sourceforge.net/projects/a3p/files/a3p-1.0.exe/download"&gt;Windows (68 Mb)&lt;/a&gt; and &lt;a href="http://sourceforge.net/projects/a3p/files/a3p-1.0.deb/download"&gt;Debian Linux (77 Mb)&lt;/a&gt;. Speaking of packaging, if anyone with a Mac is interested in creating a Mac installer, please contact me. It should be pretty easy, the only reason I haven't done it is because I don't have a Mac.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Tue, 29 Jun 2010 01:44:45 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/06/28/phew/</guid></item><item><title>Use Ctrl+Alt+Del for Task Manager in Linux to Kill Tasks Easily</title><link>https://justingarrison.com/blog/2010-06-28-use-ctrlaltdel-for-task-manager-in-linux-to-kill-tasks-easily/</link><description>In Windows you can easily kill any task by pressing Ctrl+Alt+Del and bringing</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 28 Jun 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-06-28-use-ctrlaltdel-for-task-manager-in-linux-to-kill-tasks-easily/</guid></item><item><title>[PHP] Releasing PHamlP Module for Kohana, Use Haml and Sass with Kohana 3.0!</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/php-releasing-phamlp-module-for-kohana-use-haml-and-sass-with-kohana-3-0</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Sun, 27 Jun 2010 17:42:52 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/php-releasing-phamlp-module-for-kohana-use-haml-and-sass-with-kohana-3-0</guid></item><item><title>Ad Retargeting - An Advertisment's Evil Brother</title><link>https://arnorhs.dev/posts/2010-06-25/ad-retargeting-or-behavioral-retargeting/</link><description>A topic that seems to be very hot these days is ad retargeting. Now, I'm not really a big privacy advocate and I don't concern myself with those kinds of issues, but \*if\* I were I would probably be concerned with this topic! If there ever was a reason to use an ad-blocker...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Fri, 25 Jun 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-06-25/ad-retargeting-or-behavioral-retargeting/</guid></item><item><title>The full power of Oracle’s diagnostic events, part 2: ORADEBUG DOC and 11g improvements</title><link>https://tanelpoder.com/2010/06/23/the-full-power-of-oracles-diagnostic-events-part-2-oradebug-doc-and-11g-improvements/</link><description>&lt;p&gt;I haven&amp;rsquo;t written any blog entries for a while, so here&amp;rsquo;s a very sweet treat for low-level Oracle troubleshooters and internals geeks out there :)&lt;/p&gt;
&lt;p&gt;Over a year ago &lt;a href="https://tanelpoder.com/2009/03/03/the-full-power-of-oracles-diagnostic-events-part-1-syntax-for-ksd-debug-event-handling/" target="_blank"&gt;I wrote&lt;/a&gt; that Oracle 11g has a completely new low-level kernel diagnostics &amp;amp; tracing infrastructure built in to it. I wanted to write a longer article about it with comprehensive examples and use cases, but by now I realize I won&amp;rsquo;t ever have time for this, so I&amp;rsquo;ll just point you to the right direction :)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 23 Jun 2010 14:46:31 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/06/23/the-full-power-of-oracles-diagnostic-events-part-2-oradebug-doc-and-11g-improvements/</guid></item><item><title>Rip Audio CDs in Linux with Sound Juicer</title><link>https://justingarrison.com/blog/2010-06-23-rip-audio-cds-with-sound-juicer/</link><description>There are a plethora of programs that can rip audio CDs on Linux, but</description><author>Justin Garrison's Homepage</author><pubDate>Wed, 23 Jun 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-06-23-rip-audio-cds-with-sound-juicer/</guid></item><item><title>On Parsing and Licenses</title><link>https://0xfe.blogspot.com/2010/06/on-parsing-and-licenses.html</link><description>So I spent this weekend rewriting the &lt;a href="http://vexflow.com/tabdiv/tutorial.html"&gt;VexTab&lt;/a&gt; parser. The original version, though it served its purpose as a quick prototype for the language, was severely limited due to it being built primarily out of regular expressions.&lt;br /&gt;
&lt;br /&gt;
The new parser uses a recursive-descent algorithm, and fully supports the original grammar. Adding new syntactic elements to the language is now simple, as is adding support for more complex grammars.&lt;br /&gt;
&lt;br /&gt;
Some new features I added to the language are support for slides, hammer-ons, pull-offs, and tapping. Here's a blues lick written in VexTab:&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOTpU652I2h8heK-MA-5nu0w1I70rvYWZDuPrcr2ufE663YB3DK-yexfnHSJz3BnbRSGvk8N3OpPwmu_ZIgDX0zHQkialvKR014n87LzrgUHY0vDCVutWBuAABvtU8yR3BFYY60g/s1600/Picture+11.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOTpU652I2h8heK-MA-5nu0w1I70rvYWZDuPrcr2ufE663YB3DK-yexfnHSJz3BnbRSGvk8N3OpPwmu_ZIgDX0zHQkialvKR014n87LzrgUHY0vDCVutWBuAABvtU8yR3BFYY60g/s320/Picture+11.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Blues Lick in VexTab&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Some readers have asked me about durations and how to specify rhythms in VexTab. Although the VexFlow core has full support for durations and timing, I still need a good way to represent them in the language. I'm open to ideas here if you have any.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Enter TabDiv&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
I also spent this weekend working on the release of the first VexFlow-based product:&amp;nbsp;&lt;a href="http://vexflow.com/tabdiv/index.html"&gt;TabDiv&lt;/a&gt;. TabDiv lets you easily embed guitar tablature into your website or blog.&lt;br /&gt;
&lt;br /&gt;
After you've included the TabDiv &lt;code&gt;.js&lt;/code&gt; and &lt;code&gt;.css&lt;/code&gt; files in your HTML document (or blog template), you can add tabs by simply creating DIV elements and setting the class to vex-tabdiv.&lt;br /&gt;
&lt;br /&gt;
You can get TabDiv here:&amp;nbsp;&lt;a href="http://vexflow.com/tabdiv/index.html"&gt;http://vexflow.com/tabdiv/index.html&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Why not Open-Source?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
I'm no stranger to open-source. I've been writing, maintaining, and contributing to open-source software for over a decade.&lt;br /&gt;
&lt;br /&gt;
Although I hope to eventually open-source all the VexFlow source code, I'm going to hold off on it until I figure out where I want to take this product. I've invested a lot of time and effort into making VexFlow a fast high-quality renderer, and I'd like to find a way to cater to both a commercial-audience, and the open-source community.&lt;br /&gt;
&lt;br /&gt;
So, how does one find and maintain this delicate balance? Do I completely open-source it? Should I keep it closed and charge for it? Dual-license maybe?</description><author>0xFE - 11111110b - 0376</author><pubDate>Mon, 21 Jun 2010 21:12:11 GMT</pubDate><guid isPermaLink="true">https://0xfe.blogspot.com/2010/06/on-parsing-and-licenses.html</guid></item><item><title>Deploy PHP Websites Using Capistrano (and Git)</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/deploy-php-websites-using-capistrano-and-git</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Mon, 21 Jun 2010 07:45:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/deploy-php-websites-using-capistrano-and-git</guid></item><item><title>Cycling Video</title><link>https://rob.sh/post/191/</link><description>&lt;p&gt;Checking out a few videos that people have linked me to recently I thought that this piece was amazing - really great speed. It also looks like the 5D and 7D are really quite awesome at doing 60fps HD! The video presentation over at &lt;a href="http://vimeo.com"&gt;vimeo&lt;/a&gt; is really cool too!&lt;/p&gt;
&lt;div align="center"&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/7952961"&gt;PUSH PULL&lt;/a&gt; from &lt;a href="http://vimeo.com/user2597745"&gt;Landis Fields&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;</description><author>rob.sh</author><pubDate>Sat, 19 Jun 2010 14:46:02 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/191/</guid></item><item><title>Leaving AS5413</title><link>https://rob.sh/post/190/</link><description>&lt;p&gt;For information, and because it means that I have revoked a bunch of UIDs from my &lt;a href="https://cdn.rob.sh/files/pgp-key.txt"&gt;GPG Key&lt;/a&gt; I am no longer working at AS5413 (Vialtus, Daisy, GX Networks etc.) as of June 18th, 2010. It's been a good two years, but the company direction no longer co-incides with the direction in which I would like to go. I've enjoyed the projects I've worked on, been in contact with a lot of great people, and learnt a lot!&lt;/p&gt;</description><author>rob.sh</author><pubDate>Sat, 19 Jun 2010 13:45:23 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/190/</guid></item><item><title>[jQuery] Endless Scroll Updated, Now Works with Any DOM Elements</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/jquery-endless-scroll-updated-now-works-with-any-dom-elements</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Fri, 18 Jun 2010 09:48:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/jquery-endless-scroll-updated-now-works-with-any-dom-elements</guid></item><item><title>Benchmarking VexFlow</title><link>https://0xfe.blogspot.com/2010/06/benchmarking-vexflow.html</link><description>I have about 340 tests now for VexFlow, and one of the things I find really impressive is the speed at which browsers currently load, execute, and render web-pages.&lt;br /&gt;
&lt;br /&gt;
Since the code exercises the browser on a few different dimensions (heavy JavaScript, lots of DOM manipulation, a few new HTML5 features), I decided to pit the major browsers against each other and run a few benchmarks.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYbJtGgfxWbAZNnhARDNSNFhsLELRdCUQC9AJgQVTSxMrw0AcWkLlOZYuhzbxW5wUGHjptKYm1Ul758647rbb2p2hdn8ItTxlQN4qJe8CzrLH01dzwV248vhoP27vsIFWikAo0nA/s1600/Picture+9.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="127" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYbJtGgfxWbAZNnhARDNSNFhsLELRdCUQC9AJgQVTSxMrw0AcWkLlOZYuhzbxW5wUGHjptKYm1Ul758647rbb2p2hdn8ItTxlQN4qJe8CzrLH01dzwV248vhoP27vsIFWikAo0nA/s320/Picture+9.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Test Suite on Chrome 5.0.375&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;I ran the 340 tests in a loop a 1000 times on each browser, and calculated the mean runtime in milliseconds. Here are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Chrome 5.0.375: &lt;b&gt;754ms&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Safari 4.0.4: &lt;b&gt;1118ms&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Opera 10.53: &lt;b&gt;1511ms&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Firefox 3.6.3: &lt;b&gt;3209ms&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;
The difference between the Chrome and Firefox numbers is quite surprising.&lt;/div&gt;&lt;br /&gt;
I also ran some SVG vs. Canvas benchmarks and found that SVG was about 3 times slower than Canvas. This factor increased significantly as the number of elements in the SVG image grew. That said, SVG rendered much more consistently across the different browsers.&lt;br /&gt;
&lt;br /&gt;
The test machine used was a dual-core MacBook Pro with a 2.53 GHz Intel Core 2 Duo processor and 4GB of DDR3 RAM.</description><author>0xFE - 11111110b - 0376</author><pubDate>Thu, 17 Jun 2010 22:01:57 GMT</pubDate><guid isPermaLink="true">https://0xfe.blogspot.com/2010/06/benchmarking-vexflow.html</guid></item><item><title>Time Differences between PHP and MySQL</title><link>https://thomashunter.name/posts/2010-06-13-time-differences-between-php-and-mysql</link><description>The difference between reported times of MySQL and PHP compared on both a Windows and a Linux server.</description><author>Thomas Hunter II</author><pubDate>Sun, 13 Jun 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2010-06-13-time-differences-between-php-and-mysql</guid></item><item><title>Don't Backup your Projects</title><link>https://arnorhs.dev/posts/2010-06-13/dont-backup-your-projects/</link><description>Quick post to remind everybody to not back anything up. You might lose all your projects and force yourself to reevaluate your priorities, reevaluate your projects and make some important decisions.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sun, 13 Jun 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-06-13/dont-backup-your-projects/</guid></item><item><title>+[NSObject load] in MacRuby</title><link>https://caiustheory.com/nsobject-load-in-macruby/</link><description>&lt;p&gt;&lt;em&gt;If you&amp;rsquo;ve not heard of it, &lt;a href="http://www.macruby.org/"&gt;MacRuby&lt;/a&gt; is &lt;!-- raw HTML omitted --&gt;an implementation of Ruby 1.9 directly on top of Mac OS X core technologies such as the Objective-C runtime and garbage collector, the LLVM compiler infrastructure and the Foundation and ICU frameworks.&lt;!-- raw HTML omitted --&gt; Basically means you write in Ruby using Objective-C frameworks, and vice versa. It&amp;rsquo;s pretty damn cool to be honest!&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="what-is-nsobject-load"&gt;What is +[NSObject load]?&lt;/h3&gt;
&lt;p&gt;From the &lt;a href="http://developer.apple.com/mac/library/documentation/cocoa/reference/foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/clm/NSObject/load"&gt;documentation&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Invoked whenever a class or category is added to the Objective-C runtime; implement this method to perform class-specific behavior upon loading.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This means when your class is loaded, and implements the &lt;code&gt;load&lt;/code&gt; method, you get a &lt;code&gt;load&lt;/code&gt; message sent to your class. Which means you can start doing stuff as soon as your class is loaded by the runtime.&lt;/p&gt;
&lt;p&gt;The main place I&amp;rsquo;ve seen it used (and used it myself) is in &lt;a href="http://www.culater.net/software/SIMBL/SIMBL.php"&gt;SIMBL&lt;/a&gt; plugins. A SIMBL plugin is an NSBundle that contains code which is loaded (injected) into a running application shortly after said application is launched. It lets you extend (or &amp;ldquo;fix&amp;rdquo;) cocoa applications with additional features. So you have this bundle of code, that gets loaded into a running application some point after it starts, and you want to run some code as the bundle is loaded - usually to kick off doing whatever you want to do in the plugin. This is where &lt;code&gt;load&lt;/code&gt; becomes useful.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a quick implementation that just logs to the console:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-objc"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;@implementation&lt;/span&gt; &lt;span class="nc"&gt;MainController&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;load&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;NSlog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;@"MainController#load called"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="now-where-does-macruby-come-into-this"&gt;Now where does MacRuby come into this?&lt;/h3&gt;
&lt;p&gt;Well I came across a need to do the same in ruby, have some code triggered when the class is loaded into the runtime. Tried implementing &lt;code&gt;Class.load&lt;/code&gt; but to no avail. Then remembered MacRuby is just ruby! And I can call any code from within my ruby class definition.&lt;/p&gt;
&lt;p&gt;For continuity I still call it &lt;code&gt;Class.load&lt;/code&gt;, but then call it as soon as I&amp;rsquo;ve defined it in the class. Eg:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MainController&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="no"&gt;NSLog&lt;/span&gt; &lt;span class="s2"&gt;"MainController#load called"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Of course, I&amp;rsquo;m not sure when the Objective-C method is called, it&amp;rsquo;s probably after the entire class has been defined rather than as soon as &lt;code&gt;load&lt;/code&gt; has been loaded into the runtime. So you might want to move the &lt;code&gt;self.load&lt;/code&gt; call to just before the closing &lt;code&gt;end&lt;/code&gt;.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sat, 12 Jun 2010 05:11:32 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/nsobject-load-in-macruby/</guid></item><item><title>Political support for OLPC brings new challenges to education in Mauritius</title><link>https://stop.zona-m.net/2010/06/political-support-for-olpc-brings-new-challenges-to-education-in-mauritius/</link><description>&lt;p&gt;In 2010 the &lt;a href="http://www.labourparty.mu/"&gt;Labour Party of Mauritius&lt;/a&gt; adopted the &lt;a href="http://laptop.org"&gt;One Laptop Per Child (OLPC)&lt;/a&gt; project as a national program in their &lt;a href="http://www.labourparty.mu/pages/news/index.php?news_id=131&amp;amp;&amp;amp;language_id=4&amp;amp;&amp;amp;"&gt;National Election Manifesto&lt;/a&gt;. The Labour Party is a member of &lt;a href="http://www.bleublancrouge.mu/"&gt;Alliance de l&amp;rsquo;Avenir&lt;/a&gt;, the coalition that won the 2010 general elections in Mauritius. Even the Alliance &lt;a href="http://www.bleublancrouge.mu/files/Programme.pdf"&gt;program&lt;/a&gt; (also available on &lt;a href="http://www.scribd.com/doc/31028639/Programme-Alliance-de-l-avenir"&gt;Scribd&lt;/a&gt;) mentions the &lt;a href="http://laptop.org"&gt;OLPC&lt;/a&gt;, first in the Executive Brief (page 9):&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 11 Jun 2010 09:29:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/06/political-support-for-olpc-brings-new-challenges-to-education-in-mauritius/</guid></item><item><title>Open Public Data are so good that it's hard to start explaining why</title><link>https://stop.zona-m.net/2010/06/open-public-data-are-so-good-that-its-hard-to-start-explaining-why/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 11 Jun 2010 06:47:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/06/open-public-data-are-so-good-that-its-hard-to-start-explaining-why/</guid></item><item><title>Open Data, Open Society: a research project about openness of public data in EU local administrations</title><link>https://stop.zona-m.net/2010/06/open-data-open-society-a-research-project-about-openness-of-public-data-in-eu-local-administrations/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 11 Jun 2010 05:06:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/06/open-data-open-society-a-research-project-about-openness-of-public-data-in-eu-local-administrations/</guid></item><item><title>Multi-core RISC OS proposal</title><link>https://www.databasesandlife.com/multi-core-risc-os-proposal/</link><description>&lt;p class="intro"&gt;I was reading an article about the RISC OS operating system and the fact that it doesn't support multiple CPU cores. Then I got to thinking, how would one implement multi-CPU support on such an operating system?&lt;/p&gt;
&lt;p&gt;Between 1989 and 1994 I used a British computer running the operating system &lt;a href="http://www.wrocc.org.uk/riscos/what.shtml" rel="noopener noreferrer" target="_blank"&gt;RISC OS&lt;/a&gt;. This operating system is still alive, and is still in use. It was produced by &lt;a href="http://en.wikipedia.org/wiki/Acorn_Computers" rel="noopener noreferrer" target="_blank"&gt;Acorn Computers&lt;/a&gt; and runs on the &lt;a href="http://www.arm.com/" rel="noopener noreferrer" target="_blank"&gt;ARM processor&lt;/a&gt; (&amp;ldquo;Acorn Risc Machine&amp;rdquo;), now found in many computing platforms such as the iPhone. It has many innovative features which haven&amp;rsquo;t made it yet to other operating systems (although is the topic for a post of its own!)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 11 Jun 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/multi-core-risc-os-proposal/</guid></item><item><title>Java doesn't support inheriting twice from the same interface with a different generic parameter</title><link>https://jeroenpelgrims.com/java-doesnt-support-inheriting-twice-from-the-same-interface-with-a-different-generic-parameter/</link><description>&lt;p&gt;I created this:&lt;/p&gt;
&lt;pre class="language-java " style="background-color: #ffffff; color: #323232;"&gt;&lt;code class="language-java"&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;public class &lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observable &lt;/span&gt;&lt;span&gt;&amp;lt;T&amp;gt; {
&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;private &lt;/span&gt;&lt;span style="color: #0086b3;"&gt;List&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observer&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;gt; observers &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;= new &lt;/span&gt;&lt;span style="color: #0086b3;"&gt;ArrayList&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observer&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;gt;();
&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;public void &lt;/span&gt;&lt;span style="font-weight: bold; color: #795da3;"&gt;addObserver&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observer&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt; observer){
&lt;/span&gt;&lt;span&gt;    observers.add(observer);
&lt;/span&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;public void &lt;/span&gt;&lt;span style="font-weight: bold; color: #795da3;"&gt;removeObserver&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observer&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt; observer){
&lt;/span&gt;&lt;span&gt;    observers.remove(observer);
&lt;/span&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;public void &lt;/span&gt;&lt;span style="font-weight: bold; color: #795da3;"&gt;removeAllObservers&lt;/span&gt;&lt;span&gt;(){
&lt;/span&gt;&lt;span&gt;    observers.removeAll(observers);
&lt;/span&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;public void &lt;/span&gt;&lt;span style="font-weight: bold; color: #795da3;"&gt;notifyObservers&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observable&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt; observable){
&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observer&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt; observer &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;:&lt;/span&gt;&lt;span&gt; observers){
&lt;/span&gt;&lt;span&gt;      observer.update(observable);
&lt;/span&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And this:&lt;/p&gt;
&lt;pre class="language-java " style="background-color: #ffffff; color: #323232;"&gt;&lt;code class="language-java"&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;public interface &lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observer &lt;/span&gt;&lt;span&gt;&amp;lt;T&amp;gt; {
&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;void &lt;/span&gt;&lt;span style="font-weight: bold; color: #795da3;"&gt;update &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observable&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt; observable);
&lt;/span&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So I could do this:&lt;/p&gt;
&lt;pre class="language-java " style="background-color: #ffffff; color: #323232;"&gt;&lt;code class="language-java"&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;public class &lt;/span&gt;&lt;span style="color: #0086b3;"&gt;SomeClass &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;implements &lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observer&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;SomeObservableA&lt;/span&gt;&lt;span&gt;&amp;gt;, &lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observer&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;SomeObservableB&lt;/span&gt;&lt;span&gt;&amp;gt;{
&lt;/span&gt;&lt;span&gt;  @override
&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;public void &lt;/span&gt;&lt;span style="font-weight: bold; color: #795da3;"&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observable&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;SomeObservableA&lt;/span&gt;&lt;span&gt;&amp;gt; observable){
&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: #969896;"&gt;//do stuff for Observable A
&lt;/span&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;  @override
&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;public void &lt;/span&gt;&lt;span style="font-weight: bold; color: #795da3;"&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observable&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;SomeObservableB&lt;/span&gt;&lt;span&gt;&amp;gt; observable){
&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-style: italic; color: #969896;"&gt;//do stuff for Observable B
&lt;/span&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But apparently java only takes into account the class you're implementing and not the extra generics you're adding.
So I ended up doing it this way (using the standard Observer and Observable):&lt;/p&gt;
&lt;pre class="language-java " style="background-color: #ffffff; color: #323232;"&gt;&lt;code class="language-java"&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;public class &lt;/span&gt;&lt;span style="color: #0086b3;"&gt;SomeClass &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;implements &lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observer&lt;/span&gt;&lt;span&gt;{
&lt;/span&gt;&lt;span&gt;  @Override
&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;public void &lt;/span&gt;&lt;span style="font-weight: bold; color: #795da3;"&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Observable &lt;/span&gt;&lt;span&gt;o, &lt;/span&gt;&lt;span style="color: #0086b3;"&gt;Object &lt;/span&gt;&lt;span&gt;arg) {
&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;if&lt;/span&gt;&lt;span&gt;(o &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;instanceof &lt;/span&gt;&lt;span style="color: #0086b3;"&gt;SomeObservableA&lt;/span&gt;&lt;span&gt;){
&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style="font-style: italic; color: #969896;"&gt;//do stuff for Observable A
&lt;/span&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;if&lt;/span&gt;&lt;span&gt;(o &lt;/span&gt;&lt;span style="font-weight: bold; color: #a71d5d;"&gt;instanceof &lt;/span&gt;&lt;span style="color: #0086b3;"&gt;SomeObservableB&lt;/span&gt;&lt;span&gt;){
&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style="font-style: italic; color: #969896;"&gt;//do stuff for Observable B
&lt;/span&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</description><author>Jeroen Pelgrims</author><pubDate>Thu, 10 Jun 2010 07:30:00 GMT</pubDate><guid isPermaLink="true">https://jeroenpelgrims.com/java-doesnt-support-inheriting-twice-from-the-same-interface-with-a-different-generic-parameter/</guid></item><item><title>BMW E36 328i Manual Conversion Programming</title><link>https://smcleod.net/2010/06/bmw-e36-328i-manual-conversion-programming/</link><description>&lt;h2 id="reprogram-bmw-after-doing-automatic-to-manual-conversion"&gt;Reprogram BMW after doing Automatic to Manual Conversion&lt;/h2&gt;
&lt;p&gt;Based on my E36 328is experience, &lt;strong&gt;written in 2010&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="assumptions"&gt;Assumptions&lt;/h2&gt;
&lt;p&gt;This guide assumes the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You have programmed a BMW ECU/DME before using DIS or similar.&lt;/li&gt;
&lt;li&gt;You are taking all the necessary safety precautions. (Fully charged battery etc…)&lt;/li&gt;
&lt;li&gt;You have DIS working (We used EasyDIS 1.0, Base 44)&lt;/li&gt;
&lt;li&gt;You have Ediabas (INPA, NCS Expert, IFH Serve) installed and working.&lt;/li&gt;
&lt;li&gt;You&amp;rsquo;re able to read between the lines of our crappy document, some steps may differ slightly and our wording may be somewhat imprecise.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="data-gathering"&gt;Data Gathering&lt;/h2&gt;
&lt;p&gt;Make notes of the following:&lt;/p&gt;</description><author>smcleod.net</author><pubDate>Thu, 10 Jun 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/2010/06/bmw-e36-328i-manual-conversion-programming/</guid></item><item><title>Ride Report: Paris-Roubaix</title><link>https://rob.sh/post/189/</link><description>&lt;div style="width: 100%;"&gt;
&lt;p&gt;&lt;i&gt;"L'Enfer du Nord"&lt;/i&gt; (&lt;i&gt;"The Hell of the North"&lt;/i&gt;), &lt;i&gt;"The Queen of the Classics"&lt;/i&gt;, &lt;i&gt;"A Sunday in Hell"&lt;/i&gt; - call it what you will, Paris-Roubaix is legendary for being a tough classic race. It stands at 255km in length, with 52.8 km of rough, French pavé (cobblestones) - starting in Compiègne (60km from Paris), and ending in the velodrome in Roubaix. A long, tough day in the saddle with endless dust when it's dry, an epic, iconic mud-bath when the weather turns bad.&lt;/p&gt;</description><author>rob.sh</author><pubDate>Tue, 08 Jun 2010 13:26:14 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/189/</guid></item><item><title>JDZoom</title><link>https://donatstudios.com/JDZoom</link><description>&lt;div class="GithubFeed"&gt;&lt;h2&gt;Recent Activity&lt;/h2&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2019-02-04T11:15:10-06:00" title="2019-02-04T11:15:10-06:00"&gt;Feb. 4, 2019&lt;/time&gt;&lt;/h3&gt;&lt;h4&gt;Jesse Donat &lt;small&gt;(&lt;a href="https://github.com/donatj" target="_blank"&gt;donatj&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Readme/LICENSE fixes&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2014-01-22T14:30:20-06:00" title="2014-01-22T14:30:20-06:00"&gt;Jan. 22, 2014&lt;/time&gt;&lt;/h3&gt;Merge pull request #1 from bitdeli-chef/master&lt;br /&gt;
&lt;br /&gt;
Add a Bitdeli Badge to README&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h4&gt;Bitdeli Chef &lt;small&gt;(&lt;a href="https://github.com/bitdeli-chef" target="_blank"&gt;bitdeli-chef&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Add a Bitdeli badge to README&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2010-10-25T11:26:30-05:00" title="2010-10-25T11:26:30-05:00"&gt;Oct. 25, 2010&lt;/time&gt;&lt;/h3&gt;&lt;h4&gt;Jesse Donat &lt;small&gt;(&lt;a href="https://github.com/donatj" target="_blank"&gt;donatj&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Fixed an issue with cross domain images&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2010-10-08T09:34:28-05:00" title="2010-10-08T09:34:28-05:00"&gt;Oct. 8, 2010&lt;/time&gt;&lt;/h3&gt;Fixed a regression where selector would only accept strings&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2010-10-07T23:58:52-05:00" title="2010-10-07T23:58:52-05:00"&gt;Oct. 7, 2010&lt;/time&gt;&lt;/h3&gt;Restructured Repo per MooTools Forge requirements&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Updated README.md&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Added Options:&lt;br /&gt;
&lt;br /&gt;
Magnified Position Option Added&lt;br /&gt;
options: fixed/float&lt;br /&gt;
&lt;br /&gt;
Cancel Click Option Added&lt;br /&gt;
boolean, prevents default on an images anchor&lt;br /&gt;
&lt;br /&gt;
Misc Code Cleanup...&lt;br /&gt;
&lt;br /&gt;
Fixed &amp;quot;endless.com&amp;quot; style added&lt;br /&gt;
&lt;br /&gt;
index.html demo's updated - shows many different&lt;br /&gt;
options and settings in action.&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Added escaping to css url() calls to prevent problems with images with&lt;br /&gt;
spaces in file names.&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Large Rework of Functionality&lt;br /&gt;
- Chrome compatability added&lt;br /&gt;
- Zoom box to magnified result math corrected&lt;br /&gt;
- Image preloaded&lt;br /&gt;
- Div now hovers over image rather than replacing&lt;br /&gt;
- Selector option added allowing an element, array of elements,&lt;br /&gt;
or a string selector to be passed.&lt;br /&gt;
- Internet Explorer Compatability fixes.&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2010-06-07T11:22:08-05:00" title="2010-06-07T11:22:08-05:00"&gt;Jun. 7, 2010&lt;/time&gt;&lt;/h3&gt;README.md and .gitignore added&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Initial Commit&lt;hr /&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;JDZoom is a MooTools powered hover zoom / magnifier similarly styled to the one featured on Endless.com.&lt;/p&gt;
&lt;p&gt;It is supported by IE6+, Firefox 2.5+, Safari 2+ and Chrome&lt;/p&gt;
&lt;p&gt;It does not interfere with click though, such it can be used in conjunction with almost any lightbox. In fact by altering the selector when you instantiate it, most lightboxes can be extended with JDZoom without touching the HTML at all. See the &lt;a href="https://donatstudios.com/assets/18/Demo/" target="_blank"&gt;advanced demonstration&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p&gt;JDZoom requires MooTools, and is Compatible with 1.2.5+ and 1.3+&lt;/p&gt;
&lt;p&gt;It &lt;strong&gt;does not require&lt;/strong&gt; any components of &lt;i&gt;MooTools More&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/donatj/jdzoom" target="_blank"&gt;Click here for the Github repository.&lt;/a&gt;&lt;/p&gt;

&lt;fieldset style="width: 300px;"&gt;&lt;legend&gt;Demonstration&lt;/legend&gt;
&lt;a href="https://donatstudios.com/assets/18/Demo/images/sakakibaraonsen.jpg" rel="jdzoom_fixed" title="Sakakibara Onsen, I've been naked here"&gt;&lt;img src="https://donatstudios.com/assets/18/Demo/images/sakakibaraonsen.jpg" width="300" /&gt;&lt;/a&gt;
&lt;div style="text-align: center;"&gt;&lt;small&gt;&lt;a href="https://donatstudios.com/assets/18/Demo/"&gt;View Advanced Demonstration&lt;/a&gt;&lt;/small&gt;&lt;/div&gt;
&lt;/fieldset&gt;
&lt;h2&gt;Example Source&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
	&amp;lt;link href="https://donatstudios.com/&amp;lt;a href="https://github.com/donatj/jdzoom/blob/master/Demo/css/jdzoom.css"&gt;css/jdzoom.css&lt;/a&gt;" rel="stylesheet" type="text/css" /&amp;gt;
	&amp;lt;script src=&amp;quot;&lt;a href="https://mootools.net/download" target="_blank"&gt;js/mootools.js&lt;/a&gt;&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
	&amp;lt;script src=&amp;quot;&lt;a href="https://github.com/donatj/jdzoom/blob/master/Source/jdzoom.js" target="_blank"&gt;js/jdzoom.js&lt;/a&gt;&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;	window.addEvent('load',function() { &lt;br /&gt;		var jdz = new JDZoom();&lt;br /&gt;	});&lt;br /&gt;	&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
	&amp;lt;a rel="jdzoom" href="https://donatstudios.com/&amp;lt;a href="https://donatstudios.com/assets/18/Demo/images/venus.jpg" target="_blank"&gt;images/venus.jpg&lt;/a&gt;"&amp;gt;&amp;lt;img src="https://donatstudios.com/&amp;lt;a href="https://donatstudios.com/assets/18/Demo/images/venus_thumb.jpg" target="_blank"&gt;images/venus_thumb.jpg&lt;/a&gt;" /&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;table cellpadding="0" cellspacing="0" class="datatable" style="width: 100%;"&gt;
		&lt;tr&gt;&lt;th align="left"&gt;Build&lt;/th&gt;&lt;th align="left"&gt;Date&lt;/th&gt;&lt;th align="left"&gt;Message&lt;/th&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td align="left"&gt;v0.1&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/jdzoom/zipball/v0.1" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2010-07-27T00:18:46-05:00" title="2010-07-27T00:18:46-05:00"&gt;Jul. 27, 2010&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;Initial Alpha&lt;br /&gt;
&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=""&gt;&lt;td align="left"&gt;v0.9&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/jdzoom/zipball/v0.9" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2010-10-07T18:50:04-05:00" title="2010-10-07T18:50:04-05:00"&gt;Oct. 7, 2010&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;version 0.9 - nearing release&lt;br /&gt;
&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td align="left"&gt;v0.9.1&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/jdzoom/zipball/v0.9.1" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2010-10-07T22:36:20-05:00" title="2010-10-07T22:36:20-05:00"&gt;Oct. 7, 2010&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;version 0.9.1&lt;br /&gt;
&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;	&lt;/table&gt;</description><author>Donat Studios</author><pubDate>Tue, 08 Jun 2010 11:18:35 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/JDZoom</guid></item><item><title>XML Excel Exporter</title><link>https://donatstudios.com/XML_Excel_Exporter</link><description>&lt;p&gt;&lt;strong&gt;Update 2017&lt;/strong&gt;: The functionality of &amp;quot;XML Excel Exporter&amp;quot; is now part of the &lt;a href="https://github.com/QuorumCollection/Exporter"&gt;Quorum Exporter&lt;/a&gt; project.&lt;/p&gt;
&lt;p&gt;&lt;div class="GithubFeed"&gt;&lt;h2&gt;Recent Activity&lt;/h2&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2010-10-15T23:46:59-05:00" title="2010-10-15T23:46:59-05:00"&gt;Oct. 15, 2010&lt;/time&gt;&lt;/h3&gt;XSpreadsheet dies after outputting the spreadsheet now, preventing corruption&lt;hr /&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2010-02-18T13:05:58-06:00" title="2010-02-18T13:05:58-06:00"&gt;Feb. 18, 2010&lt;/time&gt;&lt;/h3&gt;Repository Restructured&lt;br /&gt;
-Working Corpus now in Source Folder&lt;br /&gt;
-`Scripts` folder added, includes database dump batch, and README.md HTML viewer&lt;br /&gt;
-`Local` folder added, for testing use with local database connections, etc&lt;br /&gt;
&lt;br /&gt;
Documentation&lt;br /&gt;
-Finally! Created an initial README.md&lt;br /&gt;
-TODO moved from includes folder into root&lt;hr /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This simple class allows you via PHP to export an XML Spreadsheet compatible with all versions of Excel 2003 and up.&lt;/p&gt;
&lt;p&gt;The files generated will work with versions of Office 2003 and up. It is considered production safe, and is currently in use in a fair number of production sites.&lt;p&gt;

&lt;p&gt;Unlike CSV or HTML Table exports, &lt;strong&gt;you can have multiple worksheets of data!&lt;/strong&gt; A sheets data can be added to the spreadsheet either by a MySQL query resource or as a 2 dimensional array.&lt;/p&gt;

&lt;h3&gt;Known bugs:&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Office 2007/2010 bark about XLS file extensions despite refusing to open XML file extensions downloaded from the internet. (Anyone know a solution?)&lt;/li&gt;
    &lt;li&gt;DOMDocument incorrectly converts/removes non-printable/low range characters (eg: &amp;amp;#10;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Limitations:&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;File Format is not supported by:
    &lt;ul&gt;
        &lt;li&gt;Open Office&lt;/li&gt;
        &lt;li&gt;Google Documents&lt;/li&gt;
        &lt;li&gt;Microsoft Office Live&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;MySQL Example&lt;/h2&gt;
&lt;pre&gt;require('includes/classes/XSpreadsheet.php');
$spread = new XSpreadsheet($fname)
$spread-&amp;gt;AddWorksheet('Products', mysql_query(&amp;quot;Select * From products&amp;quot;))
    -&amp;gt;AddWorksheet('Categories', mysql_query(&amp;quot;Select * From categories&amp;quot;))
    -&amp;gt;Generate()-&amp;gt;Send();
&lt;/pre&gt;

&lt;h2&gt;Array Example&lt;/h2&gt;
&lt;pre&gt;require('includes/classes/XSpreadsheet.php');
$data = array(
    array( 'Column 1', 'Column 2', 'Column 3' ),
    array( 1, 2, 3 ),
);

$spread = new XSpreadsheet($fname)
$spread-&amp;gt;AddWorksheet('Awesome Sheet', $data )
    -&amp;gt;Generate()-&amp;gt;Send();
&lt;/pre&gt;

&lt;a href="https://donatstudios.com/Github/redirect?link=https%3A%2F%2Fgithub.com%2Fdonatj%2FCorpusPHP%2Fraw%2Fmaster%2FSource%2Fincludes%2Fclasses%2FXSpreadsheet.php" title="Click Here to Download"&gt;&lt;button type="button"&gt;Click Here to Download&lt;/button&gt;&lt;/a&gt;</description><author>Donat Studios</author><pubDate>Tue, 08 Jun 2010 06:54:58 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/XML_Excel_Exporter</guid></item><item><title>Paris-Roubaix Sportive 2010</title><link>https://rob.sh/post/187/</link><description>&lt;p&gt;I&amp;rsquo;m planning to write a ride report up for this, but here&amp;rsquo;s some preliminary photos, and a link to some ride data.&lt;/p&gt;
&lt;div style="height: 15px;"&gt;&lt;/div&gt;
&lt;div align="center"&gt;
&lt;a href="https://rob.sh/gps/835"&gt;&lt;img src="https://cdn.rob.sh/img/pr-title.png" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div style="height: 15px;"&gt;&lt;/div&gt;
&lt;div align="center"&gt;
&lt;a href="http/cdn.rob.sh/img/prhands.jpg"&gt;&lt;img src="https://cdn.rob.sh/img/prhands-thumb.jpg" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div style="height: 15px;"&gt;&lt;/div&gt;
&lt;div align="center"&gt;
&lt;a href="https://cdn.rob.sh/img/prbike.jpg"&gt;&lt;img src="https://cdn.rob.sh/img/prbike-thumb.jpg" /&gt;&lt;/a&gt;
&lt;/div&gt;</description><author>rob.sh</author><pubDate>Tue, 08 Jun 2010 01:30:05 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/187/</guid></item><item><title>Automatically add library jar contents to executable jar with Netbeans</title><link>https://jeroenpelgrims.com/automatically-add-library-jar-contents-to-executable-jar-with-netbeans/</link><description>&lt;p&gt;Say you have a Java project in Netbeans with a library jar added.
In my case this was &lt;a href="http://www.zentus.com/sqlitejdbc/"&gt;SQLiteJDBC&lt;/a&gt;, an SQLite JDBC driver for Java applications.&lt;/p&gt;
&lt;p&gt;When you build the project ("Clean and build project") a folder &lt;code&gt;dist&lt;/code&gt; will be created with as contents:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your executable jar file&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;lib&lt;/code&gt; folder with the jar files of your added libraries inside&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In your executable jar file (it's actually a zip file, you can open it with Winrar for example) there is a folder called &lt;code&gt;META-INF&lt;/code&gt; with inside a file called &lt;code&gt;MANIFEST.MF&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Class-Path: lib/sqlitejdbc-v056.jar&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This line in &lt;code&gt;MANIFEST.MF&lt;/code&gt; makes sure that your executable jar file knows that the jar file for the SQLiteJDBC driver library is in &lt;code&gt;lib/sqlitejdbc-v056.jar&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now, the problem for me was that I wanted a single executable, not an executable with some added library files.
With Java you can easily solve this problem by copying the contents of your library jars into your executable jar.
This means opening &lt;code&gt;sqlitejdbc-v056.jar&lt;/code&gt; and opening the created executable jar with Winrar and dragging all the contents from the library jar to the executable jar.&lt;/p&gt;
&lt;p&gt;Now, I'm quite lazy and I want that when I click the 'Clean and Build' button this all happens automatically.&lt;/p&gt;</description><author>Jeroen Pelgrims</author><pubDate>Sat, 05 Jun 2010 20:29:00 GMT</pubDate><guid isPermaLink="true">https://jeroenpelgrims.com/automatically-add-library-jar-contents-to-executable-jar-with-netbeans/</guid></item><item><title>Where is a filter to convert FrameMaker files on Linux?</title><link>https://stop.zona-m.net/2010/06/where-is-a-filter-to-convert-framemaker-files-on-linux/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 04 Jun 2010 13:29:23 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/06/where-is-a-filter-to-convert-framemaker-files-on-linux/</guid></item><item><title>[Rails] Releasing Action Throttler, A Rails Plugin for Throttling Actions</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-releasing-action-throttler-a-rails-plugin-for-throttling-actions</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Thu, 03 Jun 2010 06:21:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-releasing-action-throttler-a-rails-plugin-for-throttling-actions</guid></item><item><title>Twitter Success Story - Hurricane Bill</title><link>https://honza.pokorny.ca/2010/06/twitter-success-story-hurricane-bill/</link><description>&lt;p&gt;Beginners often find Twitter very confusing and useless. I think it&amp;rsquo;s because
they come to it with some preconceived ideas, and when Twitter doesn&amp;rsquo;t fit
their model they get frustrated. This series is meant to show why Twitter is so
useful and how it&amp;rsquo;s different from other social networks.&lt;/p&gt;
&lt;p&gt;My family and I live in the city of Aberdeen in Scotland. My wife is originally
from Halifax, Canada where her parents still live. In August of last year,
there was a hurricane threat to the Halifax area. The hurricane was slowly
making its way up the coast towards Halifax, and was to strike the city around
8:00AM on a Sunday morning. Naturally, we were in touch with my in-laws and
kept checking news sites for updates.&lt;/p&gt;
&lt;p&gt;However, as you might expect the news companies were closed (or at least on
limited staff) on that Sunday morning. We googled and googled and couldn&amp;rsquo;t find
any updates on the hurricane. Did it hit the city? Is it serious? Has
electricity been cut off?&lt;/p&gt;
&lt;p&gt;Twitter is a source of real-time information. With the right query, you can get
updates and news just about anything. So, I searched for &amp;ldquo;hurricane bill
halifax&amp;rdquo; and just watched the tweets come in. At first, there wasn&amp;rsquo;t much. But
as time went by, people started talking about the hurricane. Some were saying
that the sky is a bit darker, some were seeing a little rain, etc. I even found
one user who actually went to the Halifax harbour to watch the hurricane come
in. He was posting images from his cell phone to show us what the weather was
like.&lt;/p&gt;
&lt;p&gt;Thanks to Twitter we were able to follow the development of the hurricane
almost minute by minute. In the end, there wasn&amp;rsquo;t much of hurricane after all.
By the time it got to Halifax, it had reduced to a mere storm.&lt;/p&gt;</description><author>Honza Pokorný</author><pubDate>Thu, 03 Jun 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://honza.pokorny.ca/2010/06/twitter-success-story-hurricane-bill/</guid></item><item><title>Moar physics entities</title><link>https://etodd.io/2010/06/02/moar-physics-entities/</link><description>&lt;p&gt;Drop pods no longer sit in one place, they now roll around, freely dispersing their monetary goodness among the citizenry. They're quite light too, which means a single grenade can send one flying across the map, with your bots following in hot pursuit. Speaking of maps, Sector X is just about done! It's definitely our most massive map to date, and it has some interesting moments. So far the ring around the top has been great for sniping.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Thu, 03 Jun 2010 01:31:57 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/06/02/moar-physics-entities/</guid></item><item><title>Flock</title><link>https://mattkeeter.com/projects/flock</link><description>Swarms of lo-fi birds</description><author>Matt Keeter</author><pubDate>Tue, 01 Jun 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://mattkeeter.com/projects/flock</guid></item><item><title>The big limits of today's email: privacy, barriers and robustness</title><link>https://stop.zona-m.net/2010/05/the-big-limits-of-todays-email-privacy-barriers-and-robustness/</link><description>&lt;p&gt;Email is one of the most useful and more widely used applications of the Internet. So far, however, I have met very few people that seem aware of how suboptimal its usage is, or of the problems that may arise when many people will start to realize it. Please note that, while the rest of this page explains these statements only in the case of email, most of it applies to any other form of direct, person-to-person communication through the Internet (chat, IM, VoIP phone calls, social networking through Facebook or Ning&amp;hellip;).&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 29 May 2010 08:49:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/05/the-big-limits-of-todays-email-privacy-barriers-and-robustness/</guid></item><item><title>Why Open Digital Standards Matter in Government: Conclusions</title><link>https://stop.zona-m.net/2010/05/why-open-digital-standards-matter-in-government-conclusions/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 29 May 2010 06:36:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/05/why-open-digital-standards-matter-in-government-conclusions/</guid></item><item><title>MySQL Query Cache Resources</title><link>https://arnorhs.dev/posts/2010-05-29/mysql-query-cache-resources/</link><description>To follow up on my post about Drupal's MySQL performance, I wanted to share some resources I found during that journey.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sat, 29 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-05-29/mysql-query-cache-resources/</guid></item><item><title>Oracle memory troubleshooting article</title><link>https://tanelpoder.com/2010/05/28/oracle-memory-troubleshooting-article/</link><description>&lt;p&gt;Randolf Geist has written a good article about systematic troubleshooting of a PL/SQL memory allocation &amp;amp; CPU utilization problem – and he has used some of my tools too!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://oracle-randolf.blogspot.com/2010/05/advanced-oracle-troubleshooting-session.html" target="_blank"&gt;&lt;a href="http://oracle-randolf.blogspot.com/2010/05/advanced-oracle-troubleshooting-session.html"&gt;http://oracle-randolf.blogspot.com/2010/05/advanced-oracle-troubleshooting-session.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 28 May 2010 19:37:45 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/05/28/oracle-memory-troubleshooting-article/</guid></item><item><title>More maps</title><link>https://etodd.io/2010/05/27/more-maps/</link><description>&lt;p&gt;The main menu now has a global chat room, powered by some simple PHP/MySQL. The tutorial has been updated (it looks a LOT better), and the website received a makeover too! A lot of behind-the-scenes updates have been happening as well... the network code is becoming increasingly bulletproof, and several more physics bugs have been addressed.&lt;/p&gt;
&lt;p&gt;And now for the fun stuff... more multiplayer maps! The first one is called Gold, it's adapted directly from the gg_halo_gold CS:S map. It's basically already done, and it promises to offer some intense 4-player action. The other two are works in progress, but both are looking like they could facilitate some epic battles.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Thu, 27 May 2010 21:33:49 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/05/27/more-maps/</guid></item><item><title>A Whole World of Difference: Phusion Passenger Apache to Nginx, Ruby Enterprise Edition 1.8.6 to 1.8.7</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/a-whole-world-of-difference-phusion-passenger-apache-to-nginx-ruby-enterprise-edition-1-8-6-to-1-8-7</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Thu, 27 May 2010 11:35:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/a-whole-world-of-difference-phusion-passenger-apache-to-nginx-ruby-enterprise-edition-1-8-6-to-1-8-7</guid></item><item><title>busy at work</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/busy-at-work</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Thu, 27 May 2010 08:49:58 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/busy-at-work</guid></item><item><title>Surprising mysql queries in Drupal</title><link>https://arnorhs.dev/posts/2010-05-27/drupal-and-slow-mysql-queries/</link><description>Warning: This blog post is unusually technical for most of the posts here. The hosting provider I work for in Iceland has been having some problems with one of the servers. Turns out the problems are caused by a single website running Drupal and it has a lot of traffic.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Thu, 27 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-05-27/drupal-and-slow-mysql-queries/</guid></item><item><title>When You Are Old by W B Yeats</title><link>https://ho.dges.online/words/commonplace/when-you-are-old-by-w-b-yeats/</link><description>&lt;p&gt;When you are old and grey and full of sleep,&lt;br /&gt;
And nodding by the fire, take down this book,&lt;br /&gt;
And slowly read, and dream of the soft look&lt;br /&gt;
Your eyes had once, and of their shadows deep;&lt;/p&gt;
&lt;p&gt;How many loved your moments of glad grace,&lt;br /&gt;
And loved your beauty with love false or true,&lt;br /&gt;
But one man loved the pilgrim soul in you,&lt;br /&gt;
And loved the sorrows of your changing face;&lt;/p&gt;</description><author>ho.dges.online</author><pubDate>Thu, 27 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ho.dges.online/words/commonplace/when-you-are-old-by-w-b-yeats/</guid></item><item><title>We Climbed This Hill... by Peter Watts</title><link>https://ho.dges.online/words/commonplace/we-climbed-this-hill...-by-peter-watts/</link><description>&lt;blockquote&gt;
&lt;p&gt;“We climbed this hill. Each step up we could see farther, so of course we kept going. Now we’re at the top…. And we look out across the plain and we see this other tribe dancing around above the clouds, even higher than we are. Maybe it’s a mirage, maybe it’s a trick. Or maybe they just climbed a higher peak we can’t see because the clouds are blocking the view. So we head off to find out - but every step takes us downhill. No matter what direction we head, we can’t move off our peak without losing our vantage point. So we climb back up again. We’re trapped on a local maximum.&lt;/p&gt;</description><author>ho.dges.online</author><pubDate>Wed, 26 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ho.dges.online/words/commonplace/we-climbed-this-hill...-by-peter-watts/</guid></item><item><title>[Rails] Use App_Config For Your Application Specific Configuration</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-use-app-config-for-your-application-specific-configuration</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Wed, 26 May 2010 02:50:46 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-use-app-config-for-your-application-specific-configuration</guid></item><item><title>[Rails Tip] Model Attributes Not Updating? `reset_column_information` To the Rescue!</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-tip-model-attributes-not-updating-reset-column-information-to-the-rescue</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Tue, 25 May 2010 13:58:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-tip-model-attributes-not-updating-reset-column-information-to-the-rescue</guid></item><item><title>Random Stray Thoughts</title><link>https://captnemo.in/blog/2010/05/25/what-the-hell-is-this/</link><description>&lt;p&gt;[Editor’s note: I found this scrawled across a a4 sheet in a classroom. The author drifts off way too much from his thinking to make any sense, but there were some things that I really liked. So I present them to you, unedited, random, and unexplainable thoughts of a genius. My comments are in brackets]&lt;/p&gt;

&lt;p&gt;Sometimes you are just destined to be where you are. You may try to veer off course, try to change it. But the end remains the same.&lt;/p&gt;

&lt;p&gt;You.Here.Now&lt;/p&gt;

&lt;p&gt;The forces of Destiny seem too powerful to be stopped by you. So you keep on flowing. Further &amp;amp; further away.&lt;/p&gt;

&lt;p&gt;And time moves on
And its Now already.&lt;/p&gt;

&lt;p&gt;Looking back at the choices you made, the crossroads you stood. The coincidences, accidents pile up and as you remember them you think - would you have chosen otherwise?&lt;/p&gt;

&lt;p&gt;But regardless of your answer you’d still be here, Now.&lt;/p&gt;

&lt;p&gt;And its only left to deal with the Now.&lt;/p&gt;

&lt;p&gt;[Note: Now the author takes a swipe at history. lol]&lt;/p&gt;

&lt;p&gt;Ever since mankind learned to reason, the challenge had always been to tackle the Now. For tomorrow was forever being planned, partly in our own dreams, and partly in the garden of Destiny&lt;/p&gt;

&lt;p&gt;As of the Past, it was just a multitude of feelings, a vault to choose from - Happy, sad, heartbreaking, exciting memories, remembrances, last words. The Past always walks besides us - sometimes haunting, crippling us down, and at times uplifting, encouraging, &amp;amp; maybe even expecting.&lt;/p&gt;

&lt;p&gt;And so the challenge remains the the Now. What do you do with it? Go ahead and battle it head on - as you’ve been asked to, regardless of the consequences?&lt;/p&gt;

&lt;p&gt;For herein lies the path to greatness, the say - Keep Fighting. But is it the only path?&lt;/p&gt;

&lt;p&gt;[Note: Here on the author seems to get drifted far too much in his own thoughts, and does not care to explain very much. As a result much of the following is pretty self contradictory, and maybe even rubbish]&lt;/p&gt;

&lt;p&gt;What if there is another road. A road much less taken as Frost said. A road you know nothing about.&lt;/p&gt;

&lt;p&gt;What if the present is not a choice? What if it is just a sequence of events to be played out from someone’s memories, where you just play your part, and in-spite of what road you choose, you end up where you must.&lt;/p&gt;

&lt;p&gt;So you fight. And think. And fight with the Present [As if the present is a monster, you fool], believing that the Future can be changed, it can be manipulated, morphed into someone’s likeness.&lt;/p&gt;

&lt;p&gt;Your head starts to pound with the effort. You decide to stop thinking. [Ahh. Finally, I was wondering how long I would have to keep up]&lt;/p&gt;

&lt;p&gt;Its clearing your head.
Then you look around you. [Reality, anyone?]
The Present closes in [Not again!!] You realize its not there to be defeated, or to win either.
It just is.
Just as you are.
And you close your eyes again.&lt;/p&gt;

&lt;p&gt;You start to think.&lt;/p&gt;

&lt;p&gt;[I like the ending]&lt;/p&gt;</description><author>Nemo's Home</author><pubDate>Tue, 25 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://captnemo.in/blog/2010/05/25/what-the-hell-is-this/</guid></item><item><title>Jaron Lanier on technology</title><link>https://jasoneckert.github.io/myblog/jaron-lanier-on-technology/</link><description>&lt;p&gt;&lt;img alt="Jaron Lanier" src="jaron.jpg#right" title="Jaron Lanier" /&gt;&lt;/p&gt;
&lt;p&gt;Jaron Lanier is a technologist who is known for coining the term “virtual reality” in the 1980s (he started VPL Research - the first virtual reality company).&lt;/p&gt;
&lt;p&gt;I saw him speak during on the of the debates at the Quantum to Cosmos festival last year (a Pi Institute event in Waterloo, Ontario), and quickly Googled him (since he was the only person during the debate who actually said anything worth listening to).  A few months ago, his first book (You are not a gadget) was released, and I just finished reading it twice.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sun, 23 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/jaron-lanier-on-technology/</guid></item><item><title>Project: PHPRestfulSubversion</title><link>https://manuel.kiessling.net/2010/05/21/project-phprestfulsubversion/</link><description>PHPRestfulSubversion…  …provides a RESTful JSON webservice API to access information in your Subversion repository, …provides tools to cache your Subversion repository in order to make it searchable through the webservice in a fast and simple manner, …is a library of PHP classes which you can use to implement more complex use cases.  
 A secondary goal of this project is to explore how to create very clean PHP code using a 100% test-driven approach.</description><author>Home on The Log Book of Manuel Kießling</author><pubDate>Fri, 21 May 2010 18:13:00 GMT</pubDate><guid isPermaLink="true">https://manuel.kiessling.net/2010/05/21/project-phprestfulsubversion/</guid></item><item><title>On Idempotence, intention, and unix commands</title><link>https://peterlyons.com/problog/2010/05/on-idempotence-intention-and-unix-commands/</link><description>&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Idempotence#In_computing"&gt;Idempotence&lt;/a&gt; means that running a command or function several times produces the same result as running it only once. This is an very important design principle that is a blessing when used appropriately and a scourge when not used where warranted.&lt;/p&gt;
&lt;p&gt;For analogy, imagine you ask a housemate (or butler if that's how you roll) to empty the dishwasher. They dutifully go over there, open the dishwasher door, and find it's already empty. How do they react? Do they come back to you shouting in confusion "You fool! How can I empty the dishwasher if there's nothing in it! Oh woe is me. What am I to do?"? Or do they just think to themselves "score!" and go on a coffee break, leaving you to go about your business trusting that the dishwasher is now empty?&lt;/p&gt;
&lt;p&gt;Another analogy is from the military's notion of "management by intent" wherein a commander might order his troops to "have camp fully operational by noon" as opposed to dictating specific tactics that must be taken in order to achieve the intended outcome. This way, the troops can rely on their own abilities to achieve the intent and are empowered to respond to changing or unexpected circumstances independently.&lt;/p&gt;
&lt;p&gt;Now, when it comes to computer programs, UNIX has a mixed bag of utilities that understand this and some that don't.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;mkdir /tmp/2;echo $?;mkdir /tmp/2;echo $?
0
mkdir: cannot create directory `/tmp/2': File exists
1

rm /tmp/foo;echo $?;rm /tmp/foo;echo $?
0
rm: cannot remove `/tmp/foo': No such file or directory
1

&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;So the bad examples include &lt;code&gt;mkdir, rmdir, rm, ln, and perhaps kill (debatable)&lt;/code&gt;. Think about how much simpler using a command line and writing shell scripts would be if these were idempotent and instead of panicking in horror when the user does not know the current state of the filesystem, just allowed the user to describe the desired end state. I would love to have idempotent and recursive by default commands like &lt;code&gt;mkdir -p&lt;/code&gt; or &lt;code&gt;rm -rf&lt;/code&gt; in combination with a transactional filesystem with built in undo capabilities.&lt;/p&gt;
&lt;p&gt;Good idempotent examples include &lt;code&gt;touch, tar, zip, cp, chmod&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So the point about design and usability here is &lt;strong&gt;it's good to ask oneself "What is the user's intent here?"&lt;/strong&gt;, and try to do everything in your power to work in concert with that intention. A strong and painful negative example from my career has to do with the fact that the Solaris &lt;code&gt;patchadd&lt;/code&gt; program is not idempotent and it doesn't return exit codes according to the user's intent. So when I run &lt;code&gt;patchadd 123456-01&lt;/code&gt;, really my intention is "I want this system to be OK with regard to patch 123456-01". &lt;code&gt;patchadd&lt;/code&gt; will return a non-zero exit code if the patch is already installed or the patch is not applicable to the server or if a newer revision is already installed. As a user of &lt;code&gt;patchadd&lt;/code&gt;, I don't care. It's all success to me, and nor do I want to be bothered with implementation details within patchadd such as not installing a patch if a newer revision is already installed. I think many shell scripts would be a lot smaller and clearer and simpler without always having to wrap &lt;code&gt;mkdir&lt;/code&gt; in an &lt;code&gt;if [ ! -d /blah/dir ]&lt;/code&gt; clause to avoid spurious error output.&lt;/p&gt;
&lt;p&gt;A few other links on this topic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://devhawk.net/2007/11/09/The+Importance+Of+Idempotence.aspx"&gt;The Importance of Idempotence (devhawk)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.allapplabs.com/glossary/idempotent.htm"&gt;Java Glossary entry on Idempotent&lt;/a&gt;. I like this quote "Elevator call buttons are also idempotent, though many people think they are not."&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/1077412/what-is-an-idempotent-operation"&gt;Stack Overflow: What is an idempotent operation?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Pete's Points</author><pubDate>Fri, 21 May 2010 12:42:05 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/05/on-idempotence-intention-and-unix-commands/</guid></item><item><title>Cut and paste mail-bombing? No, thanks!</title><link>https://stop.zona-m.net/2010/05/cut-and-paste-mail-bombing-no-thanks/</link><description>&lt;p&gt;&lt;em&gt;Preface: this is the translation of a post written on April 2, 2010, to explain to all italian Internet users, with a real-life example, of the complete uselessness of copying or forwarding protest email about whatever argument to politicians or any organization.&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 21 May 2010 07:09:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/05/cut-and-paste-mail-bombing-no-thanks/</guid></item><item><title>Google's new Font Directory is a Disaster</title><link>https://arnorhs.dev/posts/2010-05-20/googles-new-font-directory-is-a-disaster/</link><description>Yesterday, Google released the "Google Font Directory": A list of free fonts that can be embedded and used directly from their site. It's a promising service and a good boost for fonts on the web. However, I wanted to try to use one of the fonts for this blog and the results were pretty surprising.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Thu, 20 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-05-20/googles-new-font-directory-is-a-disaster/</guid></item><item><title>Bit the bullet, redid the layout</title><link>https://arnorhs.dev/posts/2010-05-19/bit-the-bullet-redid-the-layout/</link><description>I bit the bullet and added the sidebar on this blog's theme. I wanted to keep the blog design really simple and clean with no side column, but I think it's easier to browse the articles etc when you have the categories, etc.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Wed, 19 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-05-19/bit-the-bullet-redid-the-layout/</guid></item><item><title>The real obstacles to personal email management: unaware users and (absent) laws</title><link>https://stop.zona-m.net/2010/05/the-real-obstacles-to-personal-email-management-unaware-users-and-absent-laws/</link><description>&lt;p&gt;Email is a crucial, basic service that is almost impossible to not use these days, but &lt;a href="https://stop.zona-m.net/2010/02/who-cancels-your-email-warning-to-infostrada-and-barracuda-users/"&gt;the way email is normally used these days has serious limits&lt;/a&gt;. The most common answer I get when I try to explaine &lt;a href="https://stop.zona-m.net/2010/02/who-cancels-your-email-warning-to-infostrada-and-barracuda-users/"&gt;those limits&lt;/a&gt; is some variation of &amp;ldquo;you may be right, but&amp;hellip; I&amp;rsquo;m not I software programmer and never will, so I have no choice but to use what&amp;rsquo;s around&amp;rdquo;. This is wrong.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Mon, 17 May 2010 11:19:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/05/the-real-obstacles-to-personal-email-management-unaware-users-and-absent-laws/</guid></item><item><title>Making of webOS (r)evolution commercial</title><link>https://justingarrison.com/blog/2010-05-17-making-of-webos-r-evolution-commercial/</link><description>I would like to take a couple minutes to share with everyone how she made it, and what software I used</description><author>Justin Garrison's Homepage</author><pubDate>Mon, 17 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-05-17-making-of-webos-r-evolution-commercial/</guid></item><item><title>Feedback from beta 2</title><link>https://etodd.io/2010/05/16/feedback-from-beta-2/</link><description>&lt;p&gt;Hey everyone, it's me again. I'm happy to report that Beta 2 turned out pretty well! We got a bit of publicity for the final release, and more importantly, some valuable feedback. It sounds like people had trouble with the browser plugin, so in addition to the browser-based game, I'm also going to release a stand-alone version with a self-contained installer. This also re-opens the possibility of LAN parties in the absence of an internet connection.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Mon, 17 May 2010 01:00:45 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/05/16/feedback-from-beta-2/</guid></item><item><title>Sudoku Solver</title><link>https://www.databasesandlife.com/sudoku/</link><description>&lt;p class="intro"&gt;
This is a Sudoku solver I wrote in Java a while back. Here it is running in the browser. 
&lt;/p&gt;

&lt;div id="sudokucontainer"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Please feel free to type in the hardest Sudokus you can find anywhere, and let me know if it can solve them, I haven&amp;rsquo;t found any it can&amp;rsquo;t yet.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Sat, 15 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/sudoku/</guid></item><item><title>3 things I wish somebody would create</title><link>https://arnorhs.dev/posts/2010-05-14/3-things-i-wish-somebody-would-create/</link><description>I wish somebody would make any of the following applications or web standards. (a few of these ideas evolve from the reports lately about Facebook's privacy issues and my general discontent with Facebook) Click to see the list.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Fri, 14 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-05-14/3-things-i-wish-somebody-would-create/</guid></item><item><title>Beta 2 is out!</title><link>https://etodd.io/2010/05/12/beta-2-is-out/</link><description>&lt;p&gt; &lt;div class="video"&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;A3P Beta 2 is live, go &lt;a href="http://a3p.sourceforge.net"&gt;check it out&lt;/a&gt;! This release has a whole slew of new features, some of which have been covered on this blog. To recap:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;New camera angle and aiming methods.&lt;/strong&gt; Should be familiar to fans of Gears of War and loads of other third person shooters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New money system&lt;/strong&gt; (the return of drop pods!) with a whole new UI for purchasing items to boot.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Massive AI overhaul&lt;/strong&gt; using navigation meshes rather than waypoints.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A whole new game type&lt;/strong&gt; called Survival. Think &lt;a href="http://callofduty.wikia.com/wiki/Nazi_Zombies"&gt;Nazi Zombies&lt;/a&gt; or Dawn of War 2's &lt;a href="http://www.joystiq.com/2009/10/16/dawn-of-war-iis-free-the-last-stand-dlc-released/"&gt;Last Stand&lt;/a&gt;, although maybe not quite as awesome.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Three new fabulous maps&lt;/strong&gt; created by the excellent &lt;a href="http://www.fpsbanana.com/members/776402"&gt;Bobpoblo&lt;/a&gt;. Seriously, check out his CS:S maps, he's a genius with Hammer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The molotov cocktail&lt;/strong&gt; is the latest addition to our assortment of weapons available. Use it wisely.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Revamped online lobby&lt;/strong&gt; complete with a nifty global chat box.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;At least 3.7 million&lt;/strong&gt; other tiny little updates and bug fixes. Like the spawn points and home bases, which have been modified to be much less annoying.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So go hang out in the lobby and check out the new features! This will be the last beta release before the final version, so get your feedback in now!&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Wed, 12 May 2010 14:35:23 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/05/12/beta-2-is-out/</guid></item><item><title>The Wonders of SSH Tunneling</title><link>https://www.brightball.com/articles/the-wonders-of-ssh-tunneling</link><description>Have you ever been working on a website and needed direct access to the database, but couldn't get access without using something like phpMyAdmin?  SSH tunneling can solve this common problem and a whole lot more.</description><author>Brightball Articles</author><pubDate>Tue, 11 May 2010 11:37:00 GMT</pubDate><guid isPermaLink="true">https://www.brightball.com/articles/the-wonders-of-ssh-tunneling</guid></item><item><title>Flash Will Live, HTML5 Will Take Over On-line Video</title><link>https://arnorhs.dev/posts/2010-05-11/flash-will-live-html5-will-take-over-on-line-video/</link><description>I've been pretty calm for the past few days/weeks. The sun has started to shine outside, I've had the chance to go bouldering outside the last days so I've managed to stay silent through the whole twitter follower mess, Steve's flash rant etc. But no more. I got into a conversation with my coworker, Ari, about the future of Flash in the HTML5 world. The general opinion out there that the media has led us to believe is generally that Flash is dead, forgotten and HTML5's canvas + javascript will replace it completely in the nearest future.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Tue, 11 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-05-11/flash-will-live-html5-will-take-over-on-line-video/</guid></item><item><title>Potty Training YAML</title><link>https://caiustheory.com/potty-training-yaml/</link><description>&lt;p&gt;Ran into a problem today where I have a class with a few attributes on it, but I only want a certain three of those attributes to appear in the YAML dump of a class instance.&lt;/p&gt;
&lt;p&gt;Diving straight into a code example&amp;ndash;lets say we have a &lt;code&gt;Contact&lt;/code&gt; class, and we only want to dump the &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;email&lt;/code&gt; and &lt;code&gt;website&lt;/code&gt; attributes.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"yaml"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Contact&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kp"&gt;attr_accessor&lt;/span&gt; &lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:website&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:telephone&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# helper method to make setting up easy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&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="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;meffod&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_s&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;="&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meffod&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;respond_to?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meffod&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# And create an instance for us to play with&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;caius&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Contact&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:name&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"Caius"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:email&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"dev@caius.name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:website&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"http://caius.name/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="ss"&gt;:telephone&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"12345"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As we&amp;rsquo;d expect when dumping this, all instance variables get dumped out:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="n"&gt;caius&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; --- !ruby/object:Contact &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; email: dev@caius.name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; name: Caius&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; telephone: "12345"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; website: http://caius.name/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Initially I tried to override &lt;code&gt;to_yaml&lt;/code&gt; and unset the instance variables I didn&amp;rsquo;t want showing up, but that just made them show up empty. After digging around a bit more, I happened across the &lt;a href="http://yaml4r.sourceforge.net/doc/page/type_families.htm"&gt;Type Families&lt;/a&gt; page in the yaml4r docs, which right at the bottom mentions &lt;code&gt;to_yaml_properties&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Turns out &lt;code&gt;to_yaml_properties&lt;/code&gt; returns an array of instance variable names (as strings) that should be dumped out as part of the object. A quick method definition later, and we&amp;rsquo;re only dumping the variables we want. (&lt;em&gt;See my &lt;a href="http://caiustheory.com/ruby-shortcuts"&gt;Ruby Shortcuts&lt;/a&gt; post if you don&amp;rsquo;t know what &lt;code&gt;%w()&lt;/code&gt; does&lt;/em&gt;)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Contact&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;to_yaml_properties&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="sx"&gt;%w(@name @email @website)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And now we dump the class, expecting only the three attributes to be outputted:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="n"&gt;caius&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; --- !ruby/object:Contact &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; name: Caius&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; email: dev@caius.name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; website: http://caius.name/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Success!&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Tue, 11 May 2010 00:46:17 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/potty-training-yaml/</guid></item><item><title>Meshes of navigation</title><link>https://etodd.io/2010/05/08/meshes-of-navigation/</link><description>&lt;p&gt;&lt;strong&gt;Update 8/23/2011:&lt;/strong&gt; the source/executable for the navigation mesh .obj exporter is &lt;a href="http://www.mediafire.com/?qdf8ivrv9dqxj37"&gt;here&lt;/a&gt;. Import a mesh, set up the parameters (only simple mode is supported right now), and have it generate the mesh. It should output a .obj file in the directory where it was executed.&lt;/p&gt;
&lt;p&gt;The AI system has finally received a massive and desperately needed update: support for navigation meshes. That means the bots shouldn't get stuck running into walls all the time, or running back and forth between waypoints like machines. I think this was probably the biggest weakness of the game up until now; the AI is still something of a problem, but it's much better.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Sat, 08 May 2010 03:41:20 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/05/08/meshes-of-navigation/</guid></item><item><title>Flexible Sqlplus command line history with RLWRAP</title><link>https://tanelpoder.com/2010/05/07/flexible-sqlplus-command-line-history-with-rlwrap/</link><description>&lt;p&gt;At Hotsos Symposium Training Day I used rlwrap with sqlplus – which gives nice command line editing and history capabilities for tools like sqlplus. Additionally I pre-generated commonly used Oracle keywords, data dictionary view and package names into rlwrap wordfile, so I got nice tab-completion too. Sqlplus sucks much less with rlwrap ;-)&lt;/p&gt;
&lt;p&gt;It’s relatively easy to install rlwrap on Unix (there are rlwrap RPMs out there, Solaris freeware packages and I installed it on Mac via macports.org). Just google around…&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 08 May 2010 01:49:26 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/05/07/flexible-sqlplus-command-line-history-with-rlwrap/</guid></item><item><title>Why Open Digital Standards Matter in Government</title><link>https://stop.zona-m.net/2010/05/why-open-digital-standards-matter-in-government/</link><description>&lt;p&gt;&lt;strong&gt;Preface&lt;/strong&gt;: this is the complete essay I wrote for the &lt;a href="https://stop.zona-m.net/2010/02/why-every-citizen-should-read-the-open-government-book/"&gt;Open Government Book&lt;/a&gt;.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 07 May 2010 12:37:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/05/why-open-digital-standards-matter-in-government/</guid></item><item><title>The Digital Age Explained</title><link>https://stop.zona-m.net/2010/05/the-digital-age-explained/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 07 May 2010 10:51:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/05/the-digital-age-explained/</guid></item><item><title>Standards and the Problems with Digital Technology</title><link>https://stop.zona-m.net/2010/05/standards-and-the-problems-with-digital-technology/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 07 May 2010 10:46:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/05/standards-and-the-problems-with-digital-technology/</guid></item><item><title>Why Has Digital Gone Bad So Often?</title><link>https://stop.zona-m.net/2010/05/why-has-digital-gone-bad-so-often/</link><description>(this page is a part of the essay I wrote for the Open Government Book. For copyright info, see the introduction)
Index  Why Open Digital Standards Matter in Government: Introduction The Digital Age Explained Standards and the Problems with Digital Technology Why Has Digital Gone Bad So Often? The Huge Positive Potential of Digital Technologies Free and Open Standards and Software: The Digital Basis of Open Government Conclusions  Why Has Digital Gone Bad So Often?</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 07 May 2010 10:41:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/05/why-has-digital-gone-bad-so-often/</guid></item><item><title>The Huge Positive Potential of Digital Technologies</title><link>https://stop.zona-m.net/2010/05/the-huge-positive-potential-of-digital-technologies/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 07 May 2010 10:32:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/05/the-huge-positive-potential-of-digital-technologies/</guid></item><item><title>Free and Open Standards and Software: The Digital Basis of Open Government</title><link>https://stop.zona-m.net/2010/05/free-and-open-standards-and-software-the-digital-basis-of-open-government/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 07 May 2010 10:26:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/05/free-and-open-standards-and-software-the-digital-basis-of-open-government/</guid></item><item><title>Should my domain name include a "www"?</title><link>https://www.brightball.com/articles/should-my-domain-name-include-a-www</link><description>In the age of Twitter and Web 2.0, we've started to see a lot of websites drop the standard www from their domain names.  This could simply be a product of people following trends or just trying to be a little different, but the real question is "What are the drawbacks?"</description><author>Brightball Articles</author><pubDate>Thu, 06 May 2010 21:27:00 GMT</pubDate><guid isPermaLink="true">https://www.brightball.com/articles/should-my-domain-name-include-a-www</guid></item><item><title>More stuff!</title><link>https://etodd.io/2010/05/04/more-stuff/</link><description>&lt;p&gt;We are closing in on a new release here... in the mean time a lot of new features have been added!&lt;/p&gt;
&lt;p&gt;First, and most notably, I'm experimenting with a new camera strategy. If you've played the excellent Just Cause 2, it's very similar. By default your character is off center to the right, with a wide, inaccurate crosshair on the screen. You can right-click to zoom in and increase your accuracy and damage. So far I think it's a major improvement over the old system.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Wed, 05 May 2010 02:09:39 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/05/04/more-stuff/</guid></item><item><title>Selling... Seduction... same difference</title><link>/2010/05/03/Selling...-Seduction...-same-difference/</link><description>&lt;p&gt;On an entirely separate blog I have a full write up on seduction. The other posts contain steps for how a guy would seduce a girl, I think it&amp;rsquo;s actually quite pertinent to selling sighing business. Before you start making to many assumptions about the other post let me explain a little further, but dorm the selling side within business.&lt;/p&gt;
&lt;p&gt;You see in selling something there&amp;rsquo;s usually a lot of sides to what you&amp;rsquo;re selling, just as there are to a person. The real key to this is to know which features are relevant, while you might like the option of mind reading, a more likely one is to become friendly early. Become buddy and friendly with them quickly, commiserate with their woes and try to bond with them over similar experiences. This will make the initial conversation over what they&amp;rsquo;re looking for much more constructive. And while I say this is a conversation about what they&amp;rsquo;re looking for, what you should be asking is what their pains are.&lt;/p&gt;
&lt;p&gt;For every pain that exists, theres 5 to 10 ways to solve it. However if you miss the pain points and problems they&amp;rsquo;re having, you&amp;rsquo;re more than likely to miss on the pitch. IF you are able to get the pain points correctly it simple becomes a process of guiding them in ways to solve their problem. This process usually starts with dissecting the fundamental issues in the process, then building it back up with your product or solution being the backbone. In the same way it&amp;rsquo;s hard to win someone over on a 1 on 1 personal level without knowing what they want, you can&amp;rsquo;t sell to someone that doesn&amp;rsquo;t have a problem, and won&amp;rsquo;t be able to pitch well without knowing it.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Tue, 04 May 2010 07:25:01 GMT</pubDate><guid isPermaLink="true">/2010/05/03/Selling...-Seduction...-same-difference/</guid></item><item><title>Keyword arguments</title><link>http://blog.danieljanus.pl/defnk/</link><description>&lt;div&gt;&lt;p&gt;There’s been an &lt;a href="http://stuartsierra.com/2010/01/15/keyword-arguments-in-clojure"&gt;ongoing&lt;/a&gt; &lt;a href="http://www.fatvat.co.uk/2009/01/passing-parameters-in-clojure.html"&gt;debate&lt;/a&gt; about how to pass optional named arguments to Clojure functions. One way to do this is the &lt;a href="http://richhickey.github.com/clojure-contrib/def-api.html#clojure.contrib.def/defnk"&gt;defnk&lt;/a&gt; macro from &lt;code&gt;clojure.contrib.def&lt;/code&gt;; I hesitate to call it &lt;em&gt;canonical&lt;/em&gt;, since apparently not everyone uses it, but I’ve found it useful a number of times. Here’s a sample:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs clojure"&gt;user&amp;gt; (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;use&lt;/span&gt;&lt;/span&gt; &amp;#x27;clojure.contrib.def)
&lt;span class="hljs-literal"&gt;nil&lt;/span&gt;
user&amp;gt; (&lt;span class="hljs-name"&gt;defnk&lt;/span&gt; f [&lt;span class="hljs-symbol"&gt;:b&lt;/span&gt; &lt;span class="hljs-number"&gt;43&lt;/span&gt;] (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;inc&lt;/span&gt;&lt;/span&gt; b))
#&amp;#x27;user/f
user&amp;gt; (&lt;span class="hljs-name"&gt;f&lt;/span&gt;)
&lt;span class="hljs-number"&gt;44&lt;/span&gt;
user&amp;gt; (&lt;span class="hljs-name"&gt;f&lt;/span&gt; &lt;span class="hljs-symbol"&gt;:b&lt;/span&gt; &lt;span class="hljs-number"&gt;100&lt;/span&gt;)
&lt;span class="hljs-number"&gt;101&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is an example of &lt;em&gt;keyword arguments&lt;/em&gt; in action. Keyword arguments are a core feature of some languages, notably &lt;a href="http://www.gigamonkeys.com/book/functions.html#keyword-parameters"&gt;Common Lisp&lt;/a&gt; and &lt;a href="http://caml.inria.fr/pub/docs/manual-ocaml/manual006.html#htoc38"&gt;Objective Caml&lt;/a&gt;. Clojure doesn’t have them, but it’s pretty easy to emulate their basic usage with macros, as &lt;code&gt;defnk&lt;/code&gt; does.&lt;/p&gt;&lt;p&gt;But there’s more to Common Lisp’s keyword arguments than &lt;code&gt;defnk&lt;/code&gt; provides. In CL, the default value of a keyword argument can be an expression referring to other arguments of the same function. For example:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs lisp"&gt;CL-USER&amp;gt; (&lt;span class="hljs-name"&gt;defun&lt;/span&gt; f (&lt;span class="hljs-name"&gt;&amp;amp;key&lt;/span&gt; (&lt;span class="hljs-name"&gt;a&lt;/span&gt; &lt;span class="hljs-number"&gt;1&lt;/span&gt;) (&lt;span class="hljs-name"&gt;b&lt;/span&gt; a))
           (&lt;span class="hljs-name"&gt;+&lt;/span&gt; a b))
F
CL-USER&amp;gt; (&lt;span class="hljs-name"&gt;f&lt;/span&gt;)
&lt;span class="hljs-number"&gt;2&lt;/span&gt;
CL-USER&amp;gt; (&lt;span class="hljs-name"&gt;f&lt;/span&gt; &lt;span class="hljs-symbol"&gt;:a&lt;/span&gt; &lt;span class="hljs-number"&gt;45&lt;/span&gt;)
&lt;span class="hljs-number"&gt;90&lt;/span&gt;
CL-USER&amp;gt; (&lt;span class="hljs-name"&gt;f&lt;/span&gt; &lt;span class="hljs-symbol"&gt;:b&lt;/span&gt; &lt;span class="hljs-number"&gt;101&lt;/span&gt;)
&lt;span class="hljs-number"&gt;102&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I wish &lt;code&gt;defnk&lt;/code&gt; had this feature. Or is there some better way that I don’t know of?&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Tue, 04 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/defnk/</guid></item><item><title>Digital Economy Bill YouTube Questions</title><link>https://rob.sh/post/186/</link><description>&lt;p&gt;So, if we take a moment to look at the following responses to questions that the leaders of the three parties involved in the &amp;ldquo;Digital Debate&amp;rdquo; on YouTube gave, concerning the Digital Economy Bill:&lt;/p&gt;
&lt;div style="height: 15px;"&gt;&lt;/div&gt;
&lt;div align="center" style="padding: 10px;"&gt;
&lt;div style="padding: 10px;"&gt;&lt;/div&gt;
&lt;div style="padding: 10px;"&gt;&lt;/div&gt;
&lt;div style="padding: 10px;"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="height: 15px;"&gt;&lt;/div&gt;
Sure, we get some tired old rhetoric, as expected. However, the key point here is that both Labour and the Conservatives appear to believe that they've done the right thing with this bill. Combine this with the fact that Gordon Brown mentioned a broadband rollout as part of the few ideas that he could during one of the debates, and I think that it starts to become apparently that politicians do not understand the UK "Internet" industry. Where there can be comments as to who is being "looked after" by each party (Cameron even mentions that the bill is most important for the media producers (or 'rights holders")) - I think the problem here is that politicians in the UK fundamentally do not understand how this industry operates. I think increasingly we are going to see the UK fall behind in terms of what we can roll-out due to impractical over-taxation, and ideas such as those put forward in the DEA.&lt;br /&gt;&lt;br /&gt;
Looking simply at two issues:
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Fibre Taxation&lt;/b&gt; - in the UK, if a business is to light up a fibre pair, as well as any standard taxes (e.g. VAT) that must be paid,  then an additional VoA Business Rate is due on these fibres. This can be up to �500/pair/year outside of London, and �600/pair/year in the London metro region [source: &lt;a href="http://www.voa.gov.uk"&gt;Valuation Office Agency&lt;/a&gt;]. &lt;br /&gt;&lt;br /&gt;
Let's look at what this does for the telecommunications industry in the UK, especially for small players. Since such a company probably does not have a DWDM system, then the relatively cheap fibre runs are now taxed quite highly, should such a company then want to start increasing their capacity, then the additional costs are inflated due to taxation. Where larger players might be able to split these rates over a large number of DWDM channels (up to 32 or 64) a smaller provider might only have one channel - and hence the cost of infrastructure or customer links for smaller companies is inflated, due to the fact that they cannot justify the CapEx required for such multiplexing systems. Even for larger players, this isn't encouraging large scale fibre build out. If tax is paid per route-KM for every FTT{H,P,C} deployment, then this adds an additional overhead (in avoidable taxation!) to any such roll-out. Hardly an incentive for a commercial entity to begin such a deployment! Alongside the CapEx, OpEx, and business rates you are required to pay - the UK government will tax you just for lighting up the infrastructure they are encouraging you to build! This alone is not helping with any of the three party's plans for any kind of broadband roll-out, especially to rural areas where there is no profit for commercial entities to roll out such technologies.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Digital Economy Act&lt;/b&gt; - Andrew Cormack of &lt;a href="http://www.ja.net"&gt;JANET (UK)&lt;/a&gt; gave an excellent presentation at UKNOF relating to the DEA. There are two key points here:
&lt;ul&gt;&lt;li&gt;The government (and apparently the Tories) believe that this bill being pushed through in "wash-up" was the right thing to do. Contrast this with the fact that they also appear to be stating that the digital economy (and communications that such an economy provides) is key for Britain. I agree it's key, we're a services based economy, and if more services can be provided utilising the Internet, then one of two things will happen. Either the UK will not be equipped to deliver such services globally, and the "Digital Economy" will mean that these can then be out-sourced to other countries - or the UK will be in a position to grow the services that it can deliver, with the considerable skill of the UK workforce, into both global and European markets. Any bill therefore, that affects the manner in which this "Digital Economy" (by which I'm now referring to ISPs and telcos), should therefore, one would have thought, justify reasonable debate by the fully attended (?!) Commons!&lt;/li&gt;
&lt;li&gt;Westminster appears to have no idea as to who they are legislating for. I am not against ensuring that the creative industries are able to protect their rights - however, this needs to be done in a manner that can be policed without damaging another industry. As Andrew said in his &lt;a href="http://www.uknof.org.uk/uknof16/Cormack-DEA.pdf"&gt;presentation&lt;/a&gt; the Government is unsure of  how many ISPs are in scope - stating it could be 5, 10, 20 or 450. How can the impact of legislation be considered, if the Government cannot identify the scope? In addition, whilst many rights holders, I would imagine, will say "well, there is very little that is being requested of the ISPs here!" - the technical challenges of implementing mechanisms whereby specific IP addresses, and users can be located, within the timeframes that such complaints appear to take to be progressed, should be costed. I believe that most people within the xSP industry are not going to say "We don't care about your rights as a content producer", however, how can the Government expect our industry to pay directly to police this? We don't care that customer X is pulling data A, B and C - really, once it comes down to working in a larger ISP, we care about getting bit X to endpoint Z whilst ensuring any commercial guarantees that we have made for bit X.&lt;/li&gt;
&lt;/ul&gt;
Another concern following these points is that it appears that very few of the UK ISP industry are being directly consulted here. Whilst there may be involvement - it's not something that I have seen mention of particularly amongst smaller ISPs in the community. Government should remember that legislation such as this affects all enterprises within this sector, and hence should consider them. The role of incumbents within this country already affects the delivery of many services, we don't need further legislation to push things further into their favour.
&lt;/ol&gt;
The reason I feel the need to mention this, is that it aggravates me whilst seeing responses such as the above. Politicians cannot absolve themselves of blame for such issues being pushed through in what I feel is quite an undemocratic manner. I'm still not sure who I am going to vote for - but as far as I see it, the huge lack of understanding of the industry within which I work will mean that whoever is in power during the next Parliament will likely not be in the right place to make legislation that actually takes into account how this industry works. Because of this, the UK's economy will suffer - which is a great shame.</description><author>rob.sh</author><pubDate>Sun, 02 May 2010 15:51:09 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/186/</guid></item><item><title>New documentation project for blind Linux users and all the others</title><link>https://stop.zona-m.net/2010/05/new-documentation-project-for-blind-linux-users-and-all-the-others/</link><description>&lt;p&gt;When he realized that &lt;a href="https://stop.zona-m.net/2010/04/why-custom-documentation-for-free-software-is-needed-for-vision-impaired-users/"&gt;custom documentation for Free Software is needed for vision-impaired users&lt;/a&gt;, Tony Baechler offered to &lt;a href="https://www.redhat.com/archives/blinux-list/2010-April/msg00007.html"&gt;launch a dedicated service&lt;/a&gt;. I asked Tony what exactly he hopes to set up and how it should work.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 02 May 2010 06:54:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/05/new-documentation-project-for-blind-linux-users-and-all-the-others/</guid></item><item><title>To Rewrite or Not to Rewrite and The Sunk Code Dilemma</title><link>https://arnorhs.dev/posts/2010-05-02/to-rewrite-or-not-to-rewrite-and-the-sunk-code-dilemma/</link><description>Stop. Don't do it. I know what you're thinking. You're thinking: "This code is ugly. It's messy, it's big, it seems too complicated with too many features, trying to get my head into it will be too time consuming, I'll just rewrite this. It won't take long. A few hours, maybe". I'm here to tell you: Don't do it.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sun, 02 May 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-05-02/to-rewrite-or-not-to-rewrite-and-the-sunk-code-dilemma/</guid></item><item><title>Notes on copying the CC licensed parts of this website</title><link>https://stop.zona-m.net/2010/05/notes-on-copying-the-cc-licensed-parts-of-this-website/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 01 May 2010 15:16:51 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/05/notes-on-copying-the-cc-licensed-parts-of-this-website/</guid></item><item><title>Alte Homepage wieder verfügbar</title><link>https://manuel.kiessling.net/2010/04/30/alte-homepage-wieder-verfugbar/</link><description>Meine alte Homepage (2000-2005) ist wiederauferstanden und unter http://old.manuel.kiessling.net/ erreichbar.</description><author>Home on The Log Book of Manuel Kießling</author><pubDate>Fri, 30 Apr 2010 18:13:00 GMT</pubDate><guid isPermaLink="true">https://manuel.kiessling.net/2010/04/30/alte-homepage-wieder-verfugbar/</guid></item><item><title>Proposal from OLPC Paraguay on how to manage Sugar or other educational software</title><link>https://stop.zona-m.net/2010/04/proposal-from-olpc-paraguay-on-how-to-manage-sugar-or-other-educational-software/</link><description>&lt;p&gt;The project to deliver &lt;a href="http://www-static.laptop.org/it/"&gt;One Laptop Per Child (OLPC)&lt;/a&gt; for educational purpose in developing countries is &lt;a href="https://stop.zona-m.net/2010/04/olpc-in-paraguay-educates-both-little-kids-and-teenagers/"&gt; doing great in Paraguay&lt;/a&gt;. According to developer &lt;a href="http://codewiz.org"&gt;Bernie Innocenti&lt;/a&gt;, this success comes from a way to manage the development of the Sugar educational software that other countries (or any other similar projects, see for example the &lt;a href="https://stop.zona-m.net/2010/01/the-great-educational-minicomputer-that-didnt-want-to-exist/"&gt;Teachermate&lt;/a&gt; or the italian &lt;a href="https://stop.zona-m.net/2009/10/computers-in-the-classroom-how-jumpc-helped-teachers-and-pupils-without-turning-the-system-upside-down/"&gt;JumpPC&lt;/a&gt;) could and should imitate.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 30 Apr 2010 09:45:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/04/proposal-from-olpc-paraguay-on-how-to-manage-sugar-or-other-educational-software/</guid></item><item><title>Mr/Mrs/...</title><link>https://www.databasesandlife.com/a-few-html-option/</link><description>&lt;p&gt;A friend of mine came across the following HTML:&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 30 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/a-few-html-option/</guid></item><item><title>The special variable “_”</title><link>https://www.databasesandlife.com/the-underscore-variable/</link><description>&lt;p&gt;Reading this blog post, &lt;a href="http://www.citizen428.net/blog/2010/04/29/destructuring-binds-in-ruby/" rel="noopener noreferrer" target="_blank"&gt;Destructuring binds in Ruby&lt;/a&gt; just now reminded me of a feature I love about Prolog which I wish would make it into other languages.&lt;/p&gt;
&lt;p&gt;Firstly, I love assigning a list to a list of &lt;a href="http://cplus.about.com/od/glossar1/g/lvalue.htm" rel="noopener noreferrer" target="_blank"&gt;lvalues&lt;/a&gt; i.e. variables; this is possible in both PHP and Perl which I use regularly; and no doubt many other languages. (But not Java: why not!?)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;($a, $b)     = ($b, $a);       // Perl
list($a, $b) = array($b, $a);  // PHP
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;PHP, as always, wins in inelegance, having the left side syntactically different to the right side. While it&amp;rsquo;s obviously the case that a list of values and a list of lvalues are technically different, I don&amp;rsquo;t think this difference should be expressed in the syntax.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 30 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/the-underscore-variable/</guid></item><item><title>2010-04-30</title><link>https://ho.dges.online/pictures/2010-04-30/</link><description>&lt;p&gt;Boy meets Scotland.&lt;/p&gt;</description><author>ho.dges.online</author><pubDate>Fri, 30 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ho.dges.online/pictures/2010-04-30/</guid></item><item><title>Tour of Flanders Photo</title><link>https://rob.sh/post/185/</link><description>&lt;p&gt;After ordering from the &lt;a href="http://www.firstfotofactory.com/"&gt;official Tour of Flanders Sportive photographers&lt;/a&gt;, I got a photo of me on the Bosberg.
&lt;br /&gt;&lt;/p&gt;
&lt;div align="center" style="padding: 10px;"&gt;
&lt;img src="https://cdn.rob.sh/img/rjs-rvv.jpg" /&gt;
&lt;/div&gt;
Feel the burn!</description><author>rob.sh</author><pubDate>Thu, 29 Apr 2010 16:51:39 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/185/</guid></item><item><title>Global Voices, Transparency and the need to understand technology</title><link>https://stop.zona-m.net/2010/04/global-voices-transparency-and-the-need-to-understand-technology/</link><description>&lt;p&gt;On April 27th, 2010, I assisted to a lecture from &lt;a href="http://el-oso.net"&gt;David Sasaki&lt;/a&gt; of &lt;a href="http://www.globalvoicesonline.org/"&gt;Global Voices Online (GVO)&lt;/a&gt; about &lt;a href="http://www.johncabot.edu/About_JCU/News_Events/NewsRead.aspx?IDN=482"&gt;&amp;ldquo;Citizen Media and the Technology for Transparency Network (TNN)&amp;quot;&lt;/a&gt;. This is a transcript of the notes I took that night, plus a couple of general comments about Citizen Media, Transparency in Government and related topics.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 29 Apr 2010 09:44:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/04/global-voices-transparency-and-the-need-to-understand-technology/</guid></item><item><title>[jQuery Tip] Traverse/Parse HTML String</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/jquery-tip-traverse-parse-html-string</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Wed, 28 Apr 2010 04:42:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/jquery-tip-traverse-parse-html-string</guid></item><item><title>Execution plan Quiz: Shouldn’t these row sources be the other way around ;-)</title><link>https://tanelpoder.com/2010/04/27/execution-plan-quiz-shouldnt-these-row-sources-be-the-other-way-around/</link><description>&lt;p&gt;Here’s a little trick question. Check out the execution plan below.&lt;/p&gt;
&lt;p&gt;What the hell, shouldn’t the INDEX/TABLE access be the other way around?!&lt;/p&gt;
&lt;p&gt;Also, how come it’s TABLE ACCESS FULL (and not by INDEX ROWID) in there?&lt;/p&gt;
&lt;p&gt;This question is with a little gotcha, but can you come up with a query which produced such plan? ;-)&lt;/p&gt;
&lt;pre&gt;----------------------------------------------
| Id  | Operation          | Name   | E-Rows |
----------------------------------------------
|   0 | SELECT STATEMENT   |        |        |
|*  1 |  INDEX RANGE SCAN  | PK_EMP |      1 |
|*  2 |   TABLE ACCESS FULL| EMP    |      1 |
----------------------------------------------&lt;/pre&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 27 Apr 2010 21:58:27 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/04/27/execution-plan-quiz-shouldnt-these-row-sources-be-the-other-way-around/</guid></item><item><title>[Rails Tip] DataMapper M:M Association Bug and Workaround</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-tip-datamapper-m-m-association-bug-and-workaround</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Tue, 27 Apr 2010 02:35:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-tip-datamapper-m-m-association-bug-and-workaround</guid></item><item><title>UKNOF 16: Enhancing BGP</title><link>https://rob.sh/post/184/</link><description>&lt;p&gt;After a late programme committee request, I presented on &amp;ldquo;Enhancing BGP&amp;rdquo; at UKNOF 16. The presentation was intended to be an update on the current drafts in the IDR working group, and give some encouragement to operators to get involved, and contribute.&lt;br /&gt;&lt;br /&gt;
I&amp;rsquo;ll put the video up when the Tom at &lt;a href="http://www.portfast.net"&gt;PortFast&lt;/a&gt; and Brandon of &lt;a href="http://www.bogons.net"&gt;Bogons&lt;/a&gt; have done their excellent job on it. For the meantime, the &lt;a href="https://cdn.rob.sh/files/RJS-UKNOF-IETF-IDR.pdf"&gt;slides&lt;/a&gt; are linked below.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;a href="https://cdn.rob.sh/files/RJS-UKNOF-IETF-IDR.pdf"&gt;&lt;img src="https://cdn.rob.sh/img/uknof16-slides.png" style="border: 1px solid black;" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;There's also a good add-paths presentation that John Scudder and Dave Ward gave at NANOG &lt;a href="http://www.nanog.org/meetings/nanog48/presentations/Tuesday/Ward_AddPath_N48.pdf"&gt;here&lt;/a&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Mon, 26 Apr 2010 14:12:10 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/184/</guid></item><item><title>Dynamic Form Actions using Different Buttons</title><link>https://thomashunter.name/posts/2010-04-25-dynamic-form-actions-using-different-buttons</link><description>A method for dynamically changing form action depending on which submit button is clicked using JavaScript. Does not require knowledge of the forms name.</description><author>Thomas Hunter II</author><pubDate>Sun, 25 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2010-04-25-dynamic-form-actions-using-different-buttons</guid></item><item><title>Check out my weekend project: FridgeList todo list</title><link>https://arnorhs.dev/posts/2010-04-25/check-out-my-weekend-project-fridgelist-todo-list/</link><description>I've been spending most of this weekend knees deep in HTML5, localStorage, CSS3 for a hobby weekend project of mine: FridgeList The original intention was to create a HTML5 web app using the Facebook Graph API, since I've been pretty excited about that. But then I got this idea for a super simple task list and I guess the Facebook Graph project will have to wait....</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sun, 25 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-04-25/check-out-my-weekend-project-fridgelist-todo-list/</guid></item><item><title>OLPC in Paraguay educates both little kids and teenagers</title><link>https://stop.zona-m.net/2010/04/olpc-in-paraguay-educates-both-little-kids-and-teenagers/</link><description>&lt;p&gt;&lt;a href="http://www.sugarlabs.org/"&gt;Sugar&lt;/a&gt; is an educational graphical computer environment specifically developed for collaborative learning in primary school. Initially, Sugar was developed and only used within the famous &lt;a href="http://www-static.laptop.org/"&gt;One Laptop Per Child project (OLPC)&lt;/a&gt; launched by Nicholas Negroponte to make special laptop computers, called XO, available to the children of all developing countries. (follow the link to see an &lt;a href="http://www.sugarlabs.org/index.php?template=gallery&amp;amp;page=gallery"&gt;Example of the Sugar graphical interface&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt="OLPC in Paraguay educates both little kids and teenagers /img/sugar_interface.png" src="https://stop.zona-m.net//img/sugar_interface.png" width="100%" /&gt;
&lt;/figure&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 24 Apr 2010 03:01:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/04/olpc-in-paraguay-educates-both-little-kids-and-teenagers/</guid></item><item><title>Quiz: Explaining index creation</title><link>https://tanelpoder.com/2010/04/23/quiz-explaining-index-creation/</link><description>&lt;p&gt;Did you know that it’s possible to use EXPLAIN PLAN FOR &lt;strong&gt;CREATE INDEX&lt;/strong&gt; ON table(col1,col2,col3) syntax for explaining what exactly would be done when an index is created?&lt;/p&gt;
&lt;p&gt;That’s useful for example for seeing the Oracle’s estimated index size without having to actually create the index.&lt;/p&gt;
&lt;p&gt;You can also use EXPLAIN PLAN FOR &lt;strong&gt;ALTER INDEX&lt;/strong&gt; i &lt;strong&gt;REBUILD&lt;/strong&gt; to see whether this operation would use a FULL TABLE SCAN or a FAST FULL INDEX SCAN (offline index rebuilds of valid indexes can use this method).&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 23 Apr 2010 17:49:02 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/04/23/quiz-explaining-index-creation/</guid></item><item><title>About Daniel Little</title><link>https://daniellittle.dev/about</link><description>I'm a Software Engineer based in Brisbane Australia, with a focus on developing web based systems. I enjoy functional programming, domain…</description><author>Daniel Little Dev</author><pubDate>Fri, 23 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://daniellittle.dev/about</guid></item><item><title>A new approach to block web spam</title><link>https://www.jimwestergren.com/a-new-approach-to-block-web-spam/</link><description>This article updated on the august 11, 2010. Around half a year ago or so I had a unique idea (at least I had never heard or read about it before) on how to block web spam. It is very simple, yet very powerful. Normally comment spam, false registrations and other such spam are being &amp;#91;...&amp;#93;</description><author>Jim Westergren</author><pubDate>Thu, 22 Apr 2010 12:46:06 GMT</pubDate><guid isPermaLink="true">https://www.jimwestergren.com/a-new-approach-to-block-web-spam/</guid></item><item><title>Why custom documentation for Free Software is needed for vision-impaired users</title><link>https://stop.zona-m.net/2010/04/why-custom-documentation-for-free-software-is-needed-for-vision-impaired-users/</link><description>&lt;p&gt;&lt;em&gt;(this is the second part of an &lt;a href="https://stop.zona-m.net/2010/05/new-documentation-project-for-blind-linux-users-and-all-the-others/"&gt;interview to Tony Baechler&lt;/a&gt; about the usability of Free Software by vision-impaired users).&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 22 Apr 2010 05:54:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/04/why-custom-documentation-for-free-software-is-needed-for-vision-impaired-users/</guid></item><item><title>Linux, a very powerful but still almost unknown environment for vision-impaired users</title><link>https://stop.zona-m.net/2010/04/linux-a-very-powerful-but-still-almost-unknown-environment-for-vision-impaired-users/</link><description>&lt;p&gt;Back in 2006, I wrote that &lt;a href="http://www.linux.com/archive/feed/52819"&gt;the Free Software community and disabled users must learn to communicate&lt;/a&gt; and &lt;a href="http://www.hudlug.org.uk/wiki/Foss_And_Disabled_Users"&gt;invited Free Software developers to do their part&lt;/a&gt;. Last week I interviewed Tony Baechler, an active member of the &lt;a href="https://www.redhat.com/mailman/listinfo/blinux-list"&gt;Blinux mailing list&lt;/a&gt;, to check how things are going in 2010, and to know more about a very interesting project for Linux vision-impaired users he&amp;rsquo;s trying to launch.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 22 Apr 2010 05:50:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/04/linux-a-very-powerful-but-still-almost-unknown-environment-for-vision-impaired-users/</guid></item><item><title>Defining "The Cloud" - Hint: SaaS is not Cloud!</title><link>https://arnorhs.dev/posts/2010-04-22/defining-the-cloud-hint-saas-is-not-cloud/</link><description>There are so many buzz words in this industry that gain momentum, and people tend to start using them everywhere, trying to insert some jizz into whatever their product is. In the last couple of years the term "Cloud" has been one of the most popular ones. It comes in many forms of course. Some of them include "In the cloud", "Cloud computing", "Cloud based services", etc.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Thu, 22 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-04-22/defining-the-cloud-hint-saas-is-not-cloud/</guid></item><item><title>Drop pods are back</title><link>https://etodd.io/2010/04/21/drop-pods-are-back/</link><description>&lt;p&gt;And they're much more interesting now. Instead of delivering reinforcements, they now act as cash dispensers. So rather than receiving a flat sum every match, you'll have to earn your money by remaining near a drop pod. Currently, the pod doesn't make you wait and then dump all the cash on you in one transaction; the money is deposited in $10 increments every second. We'll see whether that changes or not.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Thu, 22 Apr 2010 01:49:44 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/04/21/drop-pods-are-back/</guid></item><item><title>cursor: pin S waits, sporadic CPU spikes and systematic troubleshooting</title><link>https://tanelpoder.com/2010/04/21/cursor-pin-s-waits-sporadic-cpu-spikes-and-systematic-troubleshooting/</link><description>&lt;p&gt;I recently consulted one big telecom and helped to solve their sporadic performance problem which had troubled them for some months. It was an interesting case as it happened in the Oracle / OS touchpoint and it was a product of multiple “root causes”, not just one, an early Oracle mutex design bug and a Unix scheduling issue – that’s why it had been hard to resolve earlier despite multiple SRs opened etc.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 22 Apr 2010 00:55:09 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/04/21/cursor-pin-s-waits-sporadic-cpu-spikes-and-systematic-troubleshooting/</guid></item><item><title>KGH: NO ACCESS – Buffer cache inside streams pool too!</title><link>https://tanelpoder.com/2010/04/21/kgh-no-access-buffer-cache-inside-streams-pool-too/</link><description>&lt;p&gt;Some time ago I &lt;a href="https://tanelpoder.com/2009/09/09/kgh-no-access-allocations-in-vsgastat-buffer-cache-within-shared-pool/"&gt;wrote&lt;/a&gt; that since Oracle 10.2, some of the buffer cache can physically reside within &lt;strong&gt;shared pool&lt;/strong&gt; granules.&lt;/p&gt;
&lt;p&gt;I just noticed this in an 11.2 instance:&lt;/p&gt;
&lt;div&gt;
  &lt;span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"&gt;SQL&gt; select * from v$sgastat where name like &amp;#8216;KGH%&amp;#8217;;&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;pre&gt;POOL         NAME                            BYTES
------------ -------------------------- ----------
streams pool KGH: NO ACCESS                4186144&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
  So, it looks that also streams pool can surrender parts of its memory granules to buffer cache, if it&amp;#8217;s unable to flush everything out from the granule for complete granule handover.
&lt;/div&gt;
&lt;div&gt;
  Let&amp;#8217;s see whether that&amp;#8217;s the case:
&lt;/div&gt;
&lt;div&gt;
  &lt;pre&gt;
&lt;p&gt;SQL&amp;gt; select last_oper_type, last_oper_mode from v$sga_dynamic_components where component = &amp;lsquo;streams pool&amp;rsquo;;
LAST_OPER_TYP LAST_OPER&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 21 Apr 2010 22:21:44 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/04/21/kgh-no-access-buffer-cache-inside-streams-pool-too/</guid></item><item><title>Error Handling in BGP (Again!)</title><link>https://rob.sh/post/183/</link><description>&lt;p&gt;It looks like, once again, there's another attribute flying around the global BGP table causing Quagga instances to crash (if based on 0.99.9 - I believe the bug is fixed in 0.99.10). This relates to the 2007 draft that introduced AS_PATHLIMIT - see &lt;a href="http://tools.ietf.org/html/draft-ietf-idr-as-pathlimit-03"&gt;ietf.org - draft-ietf-idr-as-pathlimit&lt;/a&gt;. This attribute is actually relatively interesting, from an operator's point of view, where control that is more granular than setting the common &lt;span style="font-family: monospace;"&gt;no-export&lt;/span&gt; or &lt;span style="font-family: monospace;"&gt;no-advertise&lt;/span&gt; communities does not suffice.&lt;/p&gt;</description><author>rob.sh</author><pubDate>Wed, 21 Apr 2010 17:04:33 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/183/</guid></item><item><title>[Rails Tip] DataMapper Timestamps Bug and Workaround</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-tip-datamapper-timestamps-bug-and-workaround</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Mon, 19 Apr 2010 11:22:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-tip-datamapper-timestamps-bug-and-workaround</guid></item><item><title>Stopwatch ASIC</title><link>https://mattkeeter.com/projects/stopwatch</link><description>VLSI final project</description><author>Matt Keeter</author><pubDate>Mon, 19 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://mattkeeter.com/projects/stopwatch</guid></item><item><title>Wine + CUPS</title><link>https://bastian.rieck.me/blog/2010/wine__cups/</link><description>&lt;p&gt;Yesterday, I stumbled over an interesting problem with &lt;a href="http://www.winehq.org"&gt;Wine&lt;/a&gt;: If a &lt;code&gt;ServerName&lt;/code&gt; directive exists in &lt;code&gt;/usr/local/etc/cups/client.conf&lt;/code&gt;, i.e., if you are connecting to a shared server for printing services, programs started with Wine seem to hang.&lt;/p&gt;
&lt;p&gt;This problem is caused by non-reachable servers. It might occur when you change your network or when the shared server is unavailable. In this case, Wine will &lt;em&gt;seem&lt;/em&gt; to hang. More precisely: If you wait long enough, the application will run eventually. But nobody likes waiting very much.&lt;/p&gt;
&lt;p&gt;So, if you have a similar problem, abort the &amp;ldquo;hanging&amp;rdquo; application and check the console output. My output contained the line&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Module:attach\_process\_dlls &amp;quot;winspool.drv&amp;quot; failed to initialize, aborting
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and to solve the problem, I simply changed &lt;code&gt;client.conf&lt;/code&gt; by adding&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ServerName localhost
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;in the first line and restarting CUPS via &lt;code&gt;/usr/local/etc/rc.d/cupsd restart&lt;/code&gt;.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Sun, 18 Apr 2010 23:41:07 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2010/wine__cups/</guid></item><item><title>`/etc/cron.daily` scripts may not have dots in their name</title><link>https://www.databasesandlife.com/etc-cron-daily-scripts-may-not-have-dots-in-their-name/</link><description>&lt;p&gt;I just had the problem I&amp;rsquo;d placed a script into &lt;code&gt;/etc/cron.daily&lt;/code&gt; on my Debian Lenny system but it wasn&amp;rsquo;t getting run (or at least it didn&amp;rsquo;t seem so).
Two things I learned:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Execute the following to see which scripts would get run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```
run-parts --test /etc/cron.daily
```
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In my case, the reason the script was never executed was that I called it &lt;code&gt;xyz.sh&lt;/code&gt; as it was a shell script; the dot in the filename was the problem. I removed the dot and now it runs.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Sun, 18 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/etc-cron-daily-scripts-may-not-have-dots-in-their-name/</guid></item><item><title>Sunflower</title><link>http://blog.danieljanus.pl/sunflower/</link><description>&lt;div&gt;&lt;p&gt;The program I’ve been [writing about recently][1] has come to a point where I think it can be shown to the wide public. It’s called [Sunflower][2] and has its home on GitHub. It’s nowhere near being completed, and of alpha quality right now, but even at this stage it might be useful.&lt;/p&gt;&lt;p&gt;Just as sunflower seed kernels come wrapped in hulls, most HTML documents seen in the wild come wrapped in noise that is not really part of the document itself. Take any news site: a document from such a site contains things such as advertisements, header, footer, and many links. Now suppose you have many documents grabbed from the same site. Is it possible to somehow automate the extraction of the document “essences”?&lt;/p&gt;&lt;p&gt;Sunflower to the rescue. It relies on the assumption that documents coming from the same source have the same structure. It presents a list of strings to the user, and asks to pick those that are contained in the text essence. Then it finds the coordinates of the smallest HTML subtree that contains all those strings, and uses those coordinates to extract information from all documents. And it comes with a nice, easily understandable GUI for that.&lt;/p&gt;&lt;p&gt;This technique works remarkably well for many collections, although not all. An earlier, proof-of-concept implementation (in Common Lisp) has been used to extract many press texts for the [National Corpus of Polish][3].&lt;/p&gt;&lt;p&gt;I’ve given up on the symbol-capturing approach to wizards I’ve presented in my previous posts. Inspired by the DOM tree in Web apps, with a bag of elements with identifiers, I now have a central bag of Swing widgets (implemented as an atom) identified by keywords. This bag contains tidbits of the mutable state of Sunflower. This means that I can write callback functions like this:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs clojure"&gt;#(&lt;span class="hljs-name"&gt;with-components&lt;/span&gt; [strings-model selected-dir]
   (&lt;span class="hljs-name"&gt;.removeAllElements&lt;/span&gt; strings-model)
   (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;let&lt;/span&gt;&lt;/span&gt; [p (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;-&amp;gt;&lt;/span&gt;&lt;/span&gt; selected-dir htmls first parse)]
     (&lt;span class="hljs-name"&gt;add-component&lt;/span&gt; &lt;span class="hljs-symbol"&gt;:parsed&lt;/span&gt; p)
     (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;doseq&lt;/span&gt;&lt;/span&gt; [x (&lt;span class="hljs-name"&gt;strings&lt;/span&gt; p)]
       (&lt;span class="hljs-name"&gt;.addElement&lt;/span&gt; strings-model x))))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Name and conquer: having parts of state explicitly named mean that I can reliably access them from just about anywhere. This reduces confusion and allows for less tangled, more self-contained and understandable code.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Sun, 18 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/sunflower/</guid></item><item><title>I just enabled @anywhere for arnorhs.com</title><link>https://arnorhs.dev/posts/2010-04-16/i-just-enabled-anywhere-for-arnorhs-com/</link><description>Twitter recently launched a development platform called @anywhere. You can find more information about that on https://dev.twitter.com/ (Side note: I really like the design of the site)</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Fri, 16 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-04-16/i-just-enabled-anywhere-for-arnorhs-com/</guid></item><item><title>Java was lacking a String "join" function</title><link>https://www.databasesandlife.com/java-is-lacking-a-string-join-function/</link><description>&lt;p&gt;Between Java 1.0 and Java 1.3 (1996-2002 according to Wikipedia) there was no way to split strings into an array or a list.&lt;/p&gt;
&lt;p&gt;In Java 1.4 the authors of Java saw it fit to introduce a method to split strings,&lt;/p&gt;
&lt;pre&gt;String csvData = "field1,field2,field3";
String[] fields = csvData.split(",");
&lt;/pre&gt;
&lt;p&gt;However they did not introduce a method to &amp;ldquo;join&amp;rdquo; strings! Even in Java 7 there is no way to do this, e.g. via a static String.join method (2002-now).&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 16 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/java-is-lacking-a-string-join-function/</guid></item><item><title>Using the Inform programming language on Twitter</title><link>https://mbutler.org/using-the-inform-programming-language-on-twitter/</link><description>It was announced today that the Library of Congress will digitally archive all public tweets. Every public tweet that&amp;#8217;s been sent since 2006 and every public tweet in the future will be stored on their servers. Of course, your private and reserved messages will remain private, but there is now a serious public archive of [&amp;#8230;]</description><author>mbutler</author><pubDate>Thu, 15 Apr 2010 19:15:46 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/using-the-inform-programming-language-on-twitter/</guid></item><item><title>Why I Code</title><link>http://jrgns.net/why_i_code/index.html</link><description>&lt;p&gt;A a student I went to a career psychologist to explore my career needs and drives, and got told that I like solving problems in a creative way. As the son of an engineer and a very artsy mother, that kind of made sense. Seeing as I was already into computers and programming, I chose coding as my problem solving mechanism.&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;Through the years I learned that I loved, never mind liked, solving problems this way. I wrote a &lt;a href="http://backend-php.net"&gt;framework&lt;/a&gt;, because I saw a lot of unstructured and repetitive code in my projects. I dev’ed &lt;a href="http://whatsupinmelville.co.za"&gt;What’s up in Melville&lt;/a&gt; because I needed information about the area I lived in. I saw &lt;a href="http://news.ycombinator.com"&gt;Hacker News&lt;/a&gt;, and wanted the same site, but for South Africa, so I dev’ed &lt;a href="http://zacoders.net"&gt;ZA Coders&lt;/a&gt;. All (hopefully) creative solutions to problems I faced.&lt;/p&gt;

&lt;p&gt;I am now Head of Development at &lt;a href="http://www.brandedinternet.co.za"&gt;Branded Internet&lt;/a&gt;, and I’m still very passionate about solving problems through code. Any dev department at a company whose main aim is not to produce software, is to help the rest of the company to solve their problems through code. Finances needs to regularly generate a certain report, Dev scripts the code, and gives them the link. Support needs to information on an account, Dev scripts the code, and gives them the link.&lt;/p&gt;

&lt;p&gt;Sometimes Dev departments will write code to help themselves, but most of the work will be done for other departments. So the Dev department needs to communicate, needs to interact, so that they know which problems to solve to help the other departments do their job.&lt;/p&gt;

&lt;p&gt;Development departments exists to help other departments. In other words, it’s not about me.&lt;/p&gt;</description><author>Jurgens du Toit</author><pubDate>Thu, 15 Apr 2010 11:56:23 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/why_i_code/index.html</guid></item><item><title>What Makes a Great Webcast?</title><link>https://arnorhs.dev/posts/2010-04-15/what-makes-a-great-webcast/</link><description>I'm a big fan of webcasts (video podcasts).  I have my favorites in various categories that I watch regularly. My viewing pattern is somewhat different from watching standard TV shows or something lik...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Thu, 15 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-04-15/what-makes-a-great-webcast/</guid></item><item><title>Java varargs: inconsistent behaviour if you pass an array</title><link>https://www.databasesandlife.com/java-varargs-inconsistent-behaviour-if-you-pass-an-array/</link><description>&lt;p&gt;In Java 1.4 there was the function &lt;code&gt;Arrays.asList&lt;/code&gt;. You could pass it an array and it would make a list out of it.&lt;/p&gt;
&lt;pre&gt;String[] myArray = new String[] { "foo", "bar" };
List myList = Arrays.asList(myArray);
&lt;/pre&gt;
&lt;p&gt;In Java 1.5 this was retrofitted for varargs; you could simply pass elements to the function&lt;/p&gt;
&lt;pre&gt;List&amp;lt;String&amp;gt; myList = Arrays.asList("foo", "bar");
&lt;/pre&gt;
&lt;p&gt;I never really understood how that worked in a backwards-compatible way; I mean either the function takes an array of stuff, or it takes individual elements, surely?&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 15 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/java-varargs-inconsistent-behaviour-if-you-pass-an-array/</guid></item><item><title>Worries Css Template</title><link>https://captnemo.in/blog/2010/04/15/worries-css-template/</link><description>Finally, from being a complete programmer to a designer as well, who can create a css template using Paint.Net. Photoshop is way too outlandish for me, you see. It wasn't easy, but it was definately fun. The template was based on a wallpaper by http://leon-gao.deviantart.com. The final template is still unnamed. Hope you all like it, and there is a demo available at http://nemo.criitique.in/worries . [caption id="attachment_55" align="alignleft" width="300" caption="Worries Template"]&lt;a href="http://captn3m0.files.wordpress.com/2010/04/simple2.png"&gt;&lt;img alt="Template" class="size-medium wp-image-55" height="208" src="http://captn3m0.files.wordpress.com/2010/04/simple2.png?w=300" title="Worries Template" width="300" /&gt;&lt;/a&gt;[/caption]</description><author>Nemo's Home</author><pubDate>Thu, 15 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://captnemo.in/blog/2010/04/15/worries-css-template/</guid></item><item><title>Pictures from the Ronde Van Vlaanderen</title><link>https://rob.sh/post/182/</link><description>&lt;p&gt;A couple of weekends ago, &lt;a href="http://www.grupetto.co.uk/"&gt;CS Grupetto&lt;/a&gt; rolled out to Flanders for the Ronde van Vlaanderen sportive, and to catch the race live. The sportive was brutal, lots of &amp;ldquo;power climbs&amp;rdquo; (although I&amp;rsquo;m not so sure that I can say I &amp;lsquo;powered&amp;rsquo; up most of them - the Muur and Koppenberg and I have unfinished business), in rain, hail, and gusty winds. The pavé brings a new definition to bike control, and in the wet it&amp;rsquo;s quite an experience.&lt;br /&gt;&lt;br /&gt;
The point of this post is to link to my photos, that were snapped as the pros showed us how it was done (in the dry!) on Sunday:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Tue, 13 Apr 2010 00:33:44 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/182/</guid></item><item><title>BlackBerry 950 teardown</title><link>https://jasoneckert.github.io/myblog/blackberry-950-teardown/</link><description>&lt;p&gt;&lt;img alt="BlackBerry 950" src="bb950.png#center" title="BlackBerry 950" /&gt;&lt;/p&gt;
&lt;p&gt;As I was moving the stuff in my desk from the old campus to the new campus yesterday, I found an old BlackBerry 950&amp;hellip;&amp;hellip;..so I took it apart and found an Intel FW88386VXSD CPU, which is an embedded version of the famous Intel 80386 CPU (big black chip on the right side of the picture above).&lt;/p&gt;
&lt;p&gt;I remember having an 80386 PC that weighed a ton back in 1990, so this is like carrying that PC around in your pocket.  I wonder if it could run Windows 3.1 or Linux (remember that Linus Torvalds first developed Linux on an 80386).&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sun, 11 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/blackberry-950-teardown/</guid></item><item><title>Tapestry: UpdateComponents, Eventlistener and Script files</title><link>https://www.craigpardey.com/post/2010-04-10-tapestry-updatecomponents-eventlistener-and-script-files/</link><description>&lt;p&gt;This week I encountered an interesting issue in Tapestry when I tried to
dynamically load a component using Tapestry&amp;rsquo;s built-in EventListener
functionality. The component in question had a &lt;code&gt;.script&lt;/code&gt; file associated with
it, which Tapestry loaded dynamically, but the JavaScript functions in the
&lt;code&gt;.script&lt;/code&gt; file were &amp;ldquo;not found&amp;rdquo; when I tried to execute them.&lt;/p&gt;
&lt;p&gt;After a bit of digging around, a colleague of mine noticed that Tapestry was
loading the &lt;code&gt;.script&lt;/code&gt; file using an &lt;code&gt;eval()&lt;/code&gt; statement instead of inserting
the script into the DOM.&lt;/p&gt;</description><author>Craig Pardey</author><pubDate>Sat, 10 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.craigpardey.com/post/2010-04-10-tapestry-updatecomponents-eventlistener-and-script-files/</guid></item><item><title>New maps, new weapon, new money system, new game mode!</title><link>https://etodd.io/2010/04/09/new-maps-new-weapon-new-money-system-new-game-mode/</link><description>&lt;p&gt;I've been silent here for a while, but that's just because I've been busy getting some glamorous new features in! Things are really starting to shape up.&lt;/p&gt;
&lt;p&gt;First things first. Bobpoblo has joined the team as a mapper/tester! He's been working hard on some new maps made in Hammer, textures courtesy of [-B-]. The original maps will likely be remade as well.  Unfortunately the content pipeline is a little convoluted: I open the Source map in Crafty, export it to Wavefront OBJ format, and import it into Blender. From there I fix import errors, remove degenerate triangles, apply lightmaps, etc. before exporting to .egg format.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Fri, 09 Apr 2010 17:14:10 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/04/09/new-maps-new-weapon-new-money-system-new-game-mode/</guid></item><item><title>Netlive,a complete Free Software lab in the pockets of every teacher</title><link>https://stop.zona-m.net/2010/04/netlivea-complete-free-software-lab-in-the-pockets-of-every-teacher/</link><description>&lt;p&gt;Endless cuts to Public Education budgets are creating survival problems to many italian Public Schools, forcing them to ask more or less &amp;ldquo;voluntary&amp;rdquo; contributions to parents every year. How can you guarantee quality education in such conditions, especially when many teachers,&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 09 Apr 2010 08:51:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/04/netlivea-complete-free-software-lab-in-the-pockets-of-every-teacher/</guid></item><item><title>[Rails Tip] Run Specs Faster!</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-tip-run-specs-faster</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Fri, 09 Apr 2010 07:03:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-tip-run-specs-faster</guid></item><item><title>siqqel: SQL-Abfragen direkt aus HTML heraus ausführen und darstellen</title><link>https://manuel.kiessling.net/2010/04/08/siqqel-ein-sehr-nutzliches-tool-fur-entwickler-business-analysten-produktmanager-und-qaler/</link><description>Ein Kollege von mir, Max Winde, hat in den vergangenen Wochen ein Tool geschrieben welches sich innerhalb kürzester Zeit zu einem Renner in den verschiedensten Abteilungen entwickelt hat, und schon jetzt aus dem Arbeitsalltag kaum noch wegzudenken ist: siqqel.  Welchen Zweck erfüllt siqqel?  Die verschiedensten Leute in einem Unternehmen müssen aus den verschiedensten Gründen auf relationale Datenbanken zugreifen. Klassischerweise gibt es zwei Szenarien:   Ich brauche eine einfache und kurze Information Beispiel: “Wie war noch gleich der ‘name’ des ‘product’ mit der Id 12345?</description><author>Home on The Log Book of Manuel Kießling</author><pubDate>Thu, 08 Apr 2010 18:13:00 GMT</pubDate><guid isPermaLink="true">https://manuel.kiessling.net/2010/04/08/siqqel-ein-sehr-nutzliches-tool-fur-entwickler-business-analysten-produktmanager-und-qaler/</guid></item><item><title>A Sneak Peak...</title><link>https://blog.yiningkarlli.com/2010/04/sneak-peak.html</link><description>&lt;p&gt;A lot of you guys already know what I’ve been up to for the past few weeks, but for anybody who I haven’t told, here’s a peek:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Apr/maya_progress.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Apr/maya_progress.png" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Thu, 08 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/04/sneak-peak.html</guid></item><item><title>Digg killed the iFrame toolbar, hackers rejoice</title><link>https://arnorhs.dev/posts/2010-04-07/digg-killed-the-iframe-toolbar-hackers-rejoice/</link><description>Kevin Rose [posted on the Digg blog](https://about.digg.com/blog/digg-digg-iframe-toolbar-dead-unbanning-domains) that they're going to remove the [D](https://about.digg.com/diggbar)...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Wed, 07 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-04-07/digg-killed-the-iframe-toolbar-hackers-rejoice/</guid></item><item><title>Why The Cloud Will Finally Work</title><link>/2010/04/05/Why-The-Cloud-Will-Finally-Work/</link><description>&lt;p&gt;The cloud has a lot of technical arguments going for it. The problem is consumers don&amp;rsquo;t understand the cloud, they don&amp;rsquo;t understand virtual storage and growth and syncing and the complexities of things. The average consumer is generally pretty dumb, they just want to be able to do things and it just work. If they ask a question they want an answer, not the deduction behind the answer. It&amp;rsquo;s why I loved mint.com so much when it launched. I gave it accounts and it told me everything I wanted to know. If it was wrong I seldom noticed it, such as classifying a purchase into a wrong category. My suspicion is that 98% of the users don&amp;rsquo;t notice much of the mis-classification that happens. They look the first time and it looks pretty good so they trust it, because if you look at 90% of purchases and classify them, why use mint, why not just use excel, or even go back to a paper and notebook?&lt;/p&gt;
&lt;p&gt;Cloud is that same type of issue, it needs to just work, users need to just expect their document to always be the same. I think the iPad but more specifically MobileMe will have a great shot at doing this. The reason the iPad will play a role is now the average consumer will have more than 1 device. They&amp;rsquo;ll have their laptop/desktop and an iPad. This user will want to work on the device, and more than just email. Having their application open a file, work for 15 minutes on a train/bus, turn it off, walk in their front door and open the same file on their computer will really bring cloud storage/computing to a consumer. Because apple controls the reins on the primary applications where this has value:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;This will push the expectation on developers to deliver the same kind of experience with the cloud, it&amp;rsquo;s going to become the norm now. Not because its cost effective, not because of the technical benefits, but because it&amp;rsquo;s going to be transparent to users, and users are just going to expect it from now on.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Tue, 06 Apr 2010 03:29:35 GMT</pubDate><guid isPermaLink="true">/2010/04/05/Why-The-Cloud-Will-Finally-Work/</guid></item><item><title>A case for symbol capture</title><link>http://blog.danieljanus.pl/symbol-capture/</link><description>&lt;div&gt;&lt;p&gt;Clojure by default protects macro authors from incidentally capturing a local symbol. Stuart Halloway &lt;a href="http://blog.thinkrelevance.com/2008/12/17/on-lisp-clojure-chapter-9"&gt;describes this&lt;/a&gt; in more detail, explaining why this is a Good Thing. However, sometimes this kind of symbol capture is called for. I’ve encountered one such case today while hacking a Swing application.&lt;/p&gt;&lt;p&gt;As I develop the app, I find new ways to express Swing concepts and interact with Swing objects in a more Clojuresque way, so a library of GUI macros and functions gets written. One of them is a &lt;code&gt;wizard&lt;/code&gt; macro for easy creation of installer-like wizards, where there is a sequence of screens that can be navigated with &lt;em&gt;Back&lt;/em&gt; and &lt;em&gt;Next&lt;/em&gt; buttons at the bottom of the window.&lt;/p&gt;&lt;p&gt;The API (certainly not finished yet) currently looks like this:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs clojure"&gt;(&lt;span class="hljs-name"&gt;wizard&lt;/span&gt; &amp;amp; components)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;where each Swing &lt;code&gt;component&lt;/code&gt; corresponding to one wizard screen can be augmented by a supplementary map, which can contain, &lt;em&gt;inter alia&lt;/em&gt;, a function to execute upon showing the screen in question.&lt;/p&gt;&lt;p&gt;Now, I want those functions to be able to access the &lt;em&gt;Back&lt;/em&gt; and &lt;em&gt;Next&lt;/em&gt; buttons in case they want to disable or enable them at need. I thus want the API user to be able to use two symbols, &lt;code&gt;back-button&lt;/code&gt; and &lt;code&gt;next-button&lt;/code&gt;, in the macro body, and have them bound to the corresponding buttons.&lt;/p&gt;&lt;p&gt;It is crucial that these bindings be lexical and not dynamic. If they were dynamic, they would be only effective during the definition of the wizard, but not when my closures are invoked later on. Thus, my implementation looks like this:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs clojure"&gt;(&lt;span class="hljs-keyword"&gt;defmacro&lt;/span&gt; &lt;span class="hljs-title"&gt;wizard&lt;/span&gt; [&amp;amp; panels]
  `(&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;let&lt;/span&gt;&lt;/span&gt; [~&amp;#x27;back-button (&lt;span class="hljs-name"&gt;button&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;&amp;lt; Back&amp;quot;&lt;/span&gt;)
         ~&amp;#x27;next-button (&lt;span class="hljs-name"&gt;button&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;Next &amp;gt;&amp;quot;&lt;/span&gt;)]
   (&lt;span class="hljs-name"&gt;do-wizard&lt;/span&gt; ~&amp;#x27;back-button ~&amp;#x27;next-button ~(&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;vec&lt;/span&gt;&lt;/span&gt; panels))))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;where &lt;code&gt;do-wizard&lt;/code&gt; is a private function implementing the actual wizard creation, and the &lt;code&gt;~'foo&lt;/code&gt; syntax forces symbol capture.&lt;/p&gt;&lt;p&gt;By the way, if all goes well, this blog post should be the first one syndicated to Planet Clojure. Hello, Planet Clojure readers!&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Mon, 05 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/symbol-capture/</guid></item><item><title>The Foyer</title><link>https://blog.yiningkarlli.com/2010/04/the-foyer.html</link><description>&lt;p&gt;For most of March, our Digital Design Foundations assignment was to create a room from an odd perspecitve using Illustrator and Photoshop. Here’s what I came up with:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Apr/room_textured_all-04.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Apr/room_textured_all-04.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Almost all of this is Illustrator, including the wood, which took ages to do. I loosely based this off of the foyer back at home. My intent with this piece was to practice doing lighting work, and I must say I’m rather happy with it.&lt;/p&gt;

&lt;p&gt;I made a quick little video of all the stages this piece went through:&lt;/p&gt;

&lt;div class="embed-container"&gt;The Foyer&lt;/div&gt;

&lt;p&gt;Just for fun, here are some color variations that I made by putting it through Lightroom:&lt;/p&gt;

&lt;p&gt;I call this variant the “Coraline” version:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Apr/room_textured_all-04_coraline.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Apr/room_textured_all-04_coraline.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Apr/room_textured_all-04_greenglow.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Apr/room_textured_all-04_greenglow.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Apr/room_textured_all-04_purple.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Apr/room_textured_all-04_purple.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Sun, 04 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/04/the-foyer.html</guid></item><item><title>Hiking in the Apennines</title><link>http://blog.danieljanus.pl/apennines-hiking/</link><description>&lt;div&gt;&lt;p&gt;I’ve recently done a week-long hike in the Umbria-Marche region of the Italian Apennines (the vicinity of &lt;a href="http://en.wikipedia.org/wiki/Monte_Catria"&gt;Monte Catria&lt;/a&gt;, near &lt;a href="http://en.wikipedia.org/wiki/Cantiano"&gt;Cantiano&lt;/a&gt;, to be more precise), and here are some tips I’d like to share.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;The Umbria-Marche Apennine doesn’t seem to be frequented by a lot of tourists, especially in mid-March. The information offices, although helpful, are often closed (this is not only the case with the mountain region: contrary to information available on the Web, the tourist information at Forlì airport was closed on Sunday morning), and most of the Italians we’ve met didn’t speak English.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;The tourist trails in the region are not well marked. Direction marks are nowhere to be found, nor are the signs visible on junctions. We had to ask the locals when leaving Cantiano for Monte Tenetra (and ended up on M. Alto instead anyway).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;There are a lot of &lt;em&gt;rifugi&lt;/em&gt; (mountain huts), but most of them are closed at this time of year. We passed by six or seven, out of which only one was available for sleep: Rifugio Fonte del Faggio (depicted), merely a small bothy with one worm-eaten bunk bed. Another one, &lt;a href="http://www.montecatria.com/it/rifugi/rifugio_cupa_delle_cotaline.aspx"&gt;Cupa delle Cotaline&lt;/a&gt;, with restaurant facilities and situated by a station of a local skilift, opened in the morning, but was closed for the night.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;figure class="image"&gt;&lt;img alt="" src="/img/blog/faggio.jpg" /&gt;&lt;figcaption&gt;Rifugio Fonte del Faggio&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Sun, 04 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/apennines-hiking/</guid></item><item><title>Non-trivial performance problems</title><link>https://tanelpoder.com/2010/04/03/non-trivial-performance-problems/</link><description>&lt;p&gt;Gwen Shapira has written an article about a good example of a &lt;a href="http://prodlife.wordpress.com/2010/04/02/daylight-saving-time-causes-performance-issues/"&gt;non-trivial performance problem&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’m not talking about anything advanced here (such as bugs or problems arising at OS/Oracle touchpoint) but that sometimes the root cause of a problem (or at least the reason why you notice this problem now) is not something deeply technical or related to some specific SQL optimizer feature or a configuration issue. Instead of focusing on the first symptom you see immediately, it pays off to take a step back and see how the problem task/application/SQL is actually used by the users or client applications.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 03 Apr 2010 13:07:26 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/04/03/non-trivial-performance-problems/</guid></item><item><title>Ruby Plugins for Sketchup</title><link>https://johnj.com/posts/ruby-plugins-for-sketchup/</link><description>&lt;p&gt;
Here are some Ruby plugins I developed recently during my experimentation with
SketchUp:&lt;/p&gt;
&lt;div class="outline-2" id="outline-container-headline-1"&gt;
&lt;h2 id="headline-1"&gt;
Auto-reload Plugin
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-1"&gt;
&lt;p&gt;
The &lt;a href="https://gist.github.com/eigenhombre/8bcaff80a9e6bc08e198260308a06bd5"&gt;&lt;code class="verbatim"&gt;scan_plugins&lt;/code&gt;&lt;/a&gt; plugin monitors any given directory and looks for any
changed &lt;code class="verbatim"&gt;.rb&lt;/code&gt; files. When your code changes, it is reloaded into
SketchUp automatically. This means you can work in your own plugin
directory, and won’t need to restart SketchUp to test changes to your
scripts.&lt;/p&gt;
&lt;p&gt;
I found the plugin-writing process somewhat frustrating because, in
order to install a new plugin, you typically have to quit SketchUp and
restart it. This is murder if you test continuously as you develop (as
we all do… right?). &lt;code class="verbatim"&gt;scan_plugins&lt;/code&gt; avoids this problem.&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Caveat: because each file will be executed as soon as it is changed&lt;/em&gt;,
&lt;em&gt;the Ruby files in the specified directory should consist ONLY of&lt;/em&gt;
&lt;em&gt;SketchUp plugins! Put your Ruby-based disk cleanup programs&lt;/em&gt;,
&lt;em&gt;WEP-cracking utilities, etc., elsewhere.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
I have found this script indispensable while developing other plugins,
by greatly reducing the turnaround time for testing.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-2" id="outline-container-headline-2"&gt;
&lt;h2 id="headline-2"&gt;
Crowd Plugin
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-2"&gt;
&lt;p&gt;
The &lt;a href="https://gist.github.com/eigenhombre/b66534dfb9057532c0b4c8b5f98c0f26"&gt;&lt;code class="verbatim"&gt;crowd plugin&lt;/code&gt;&lt;/a&gt; places a selected component at random throughout an
area on the x-y (red/green) plane. This was the first plugin I wrote,
just to try out the process.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/crowd0.jpg"&gt;&lt;img class="resize" src="https://johnj.com/crowd0_hu_34e2ef15827d76a0.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Crowd Plugin result
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-2" id="outline-container-headline-3"&gt;
&lt;h2 id="headline-3"&gt;
Current Project
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-3"&gt;
&lt;p&gt;
I have been working sporadically on a set of mesh manipulation tools
for subdividing, smoothing, joining, and sculpting polygonal
meshes. Meanwhile, Subdivide and Smooth [video no longer available] and &lt;a href="https://sketchucation.com/forums/viewtopic.php?f%3D180&amp;amp;t%3D11212&amp;amp;start%3D0"&gt;Tools on
Surface&lt;/a&gt; are great plugins to get you started with advanced mesh
manipulations.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Sat, 03 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/ruby-plugins-for-sketchup/</guid></item><item><title>2010-04-02</title><link>https://ho.dges.online/pictures/2010-04-02/</link><description>&lt;p&gt;A picture of my dear old nan with my youngest son, one month after he was born and two weeks after my granddad died.&lt;/p&gt;</description><author>ho.dges.online</author><pubDate>Fri, 02 Apr 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ho.dges.online/pictures/2010-04-02/</guid></item><item><title>The Sin of Disharmony in Coleridge’s “Ancient Mariner”</title><link>https://www.davidschlachter.com/writings/ancientmarinessay</link><description>The Ancient Mariner’s offense explored and unified.</description><author>David Schlachter</author><pubDate>Thu, 01 Apr 2010 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/ancientmarinessay</guid></item><item><title>Calculate SQL_ID and SQL_HASH_VALUE from SQL text</title><link>https://tanelpoder.com/2010/03/31/calculate-sql_id-and-sql_hash_value-from-sql-text/</link><description>&lt;p&gt;Some time ago I wrote &lt;a href="https://tanelpoder.com/2009/02/22/sql_id-is-just-a-fancy-representation-of-hash-value/"&gt;an article&lt;/a&gt; about the 10g+ SQL_ID being just a hash value of the &lt;strong&gt;SQL statement text&lt;/strong&gt;. It’s just like the “old” SQL_HASH_VALUE, only twice longer (8 last bytes instead of 4 last bytes of the MD5 hash value of SQL text).&lt;/p&gt;
&lt;p&gt;Slavik Markovich has written a nice python script for calculating SQL_IDs and SQL hash values from SQL text using that approach.&lt;/p&gt;
&lt;p&gt;Slavik’s article is available here:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 31 Mar 2010 20:39:05 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/03/31/calculate-sql_id-and-sql_hash_value-from-sql-text/</guid></item><item><title>gnome-do trick</title><link>https://purpleidea.com/blog/2010/03/31/gnome-do-trick/</link><description>&lt;p&gt;I use gnome-do. It&amp;rsquo;s fairly useful. One quick trick: press SHIFT - &amp;lt;ENTER&amp;gt; instead of plain &amp;lt;ENTER&amp;gt; to launch without closing the launcher box. Therefore, if you want three terminals, type: &amp;lt;SUPER&amp;gt; - &amp;lt;SPACE&amp;gt;, t(erminal), (&amp;lt;SHIFT&amp;gt; - &amp;lt;ENTER&amp;gt; X 2), &amp;lt;ENTER&amp;gt;.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://m9rx.com/" target="_blank"&gt;hire James&lt;/a&gt; and his team at &lt;a href="https://m9rx.com/" target="_blank"&gt;m9rx corporation&lt;/a&gt;.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://mastodon.social/@purpleidea" target="_blank"&gt;follow James on Mastodon&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://twitter.com/intent/follow?screen_name=purpleidea" target="_blank"&gt;follow James on Twitter&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://github.com/sponsors/purpleidea/" target="_blank"&gt;support James on GitHub&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://www.patreon.com/purpleidea" target="_blank"&gt;support James on Patreon&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;
&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Wed, 31 Mar 2010 15:17:21 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2010/03/31/gnome-do-trick/</guid></item><item><title>lecturing and git-bisect</title><link>https://purpleidea.com/blog/2010/03/31/lecturing-and-git-bisect/</link><description>&lt;p&gt;I was recently asked to give a lecture for the &lt;a href="http://www.cs.mcgill.ca/~prelude/Prelude/Home.html"&gt;PRELUDE&lt;/a&gt; series at McGill. Here was my abstract:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;I don't like computers, and neither should you.&lt;/blockquote&gt;
&lt;blockquote&gt;We spend too much time figuring out how to talk to them, instead of having them figure out how to understand us.&lt;/blockquote&gt;
&lt;blockquote&gt;There's a big discontinuity between what software is providing, and the killer features we want!&lt;/blockquote&gt;
&lt;blockquote&gt;We're not completely lost though. There are a lot of good tools and methodologies available!&lt;/blockquote&gt;
&lt;blockquote&gt;Until the feature gap closes, let me introduce you to some of these tools, and show you how I use the computer.&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;span style="background-color: #ffffff;"&gt;I spoke about a variety of topics with the intention of filling in everyone's knowledge about the useful tools available to users and developers. I included a section about &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html"&gt;git-bisect&lt;/a&gt; and have posted the script in the examples section of the &lt;a href="http://www.cs.mcgill.ca/~james/code/"&gt;bash-tutor&lt;/a&gt; tarball. It is now available for you to download and share.&lt;/span&gt;
&lt;p&gt;&lt;span style="background-color: #ffffff;"&gt;I hope everyone enjoyed the lecture, and I always appreciate feedback!&lt;/span&gt;&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Wed, 31 Mar 2010 13:13:48 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2010/03/31/lecturing-and-git-bisect/</guid></item><item><title>scary cool bash scripting inside a Makefile</title><link>https://purpleidea.com/blog/2010/03/31/scary-cool-bash-scripting-inside-a-makefile/</link><description>&lt;p&gt;&lt;a href="http://www.gnu.org/software/make/manual/make.html"&gt;Makefiles&lt;/a&gt; are both scary and wonderful. When both these adjectives are involved, it often makes for interesting hacking. This is likely the reason I use &lt;a href="http://www.gnu.org/software/bash/"&gt;bash&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In any case, I digress, back to real work. I use Makefiles as a general purpose tool to launch any of a number of shell scripts which I use to maintain my code, and instead of actually having external shell scripts, I just build any necessary bash right into the Makefile.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Wed, 31 Mar 2010 13:05:21 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2010/03/31/scary-cool-bash-scripting-inside-a-makefile/</guid></item><item><title>The importance of Document Freedom Day explained by Microsoft job offer</title><link>https://stop.zona-m.net/2010/03/the-importance-of-document-freedom-day-explained-by-microsoft-job-offer/</link><description>&lt;p&gt;March 31st, 2010, is &lt;a href="http://www.documentfreedom.org/About"&gt;&amp;ldquo;Document Freedom Day (DFD), a global day for document liberation&amp;rdquo;&lt;/a&gt;. Local events have been organized all over the world to &lt;em&gt;&amp;ldquo;educate the public about the importance of Free Document Formats and Open Standards in general&amp;rdquo;.&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 31 Mar 2010 06:14:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/the-importance-of-document-freedom-day-explained-by-microsoft-job-offer/</guid></item><item><title>What's your school project? An alternative to Microsoft Windows!</title><link>https://stop.zona-m.net/2010/03/whats-your-school-project-an-alternative-to-microsoft-windows/</link><description>&lt;p&gt;The final year of all Italian High Schools (18/19 years age students) ends with a formal State Exam. Depending on which category of school they attend, all students are tested in a different group of subjects and the final vote also depends on personal projects prepared for each subject. This year, among all the final year students in Italy there are two who are preparing a project that is as unusual (at least for Italy) as interesting.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 31 Mar 2010 05:54:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/whats-your-school-project-an-alternative-to-microsoft-windows/</guid></item><item><title>The pitfalls of &amp;lt;code&amp;gt;lein swank&amp;lt;/code&amp;gt;</title><link>http://blog.danieljanus.pl/lein-swank/</link><description>&lt;div&gt;&lt;p&gt;A couple of weeks ago I finally got around to acquainting myself with [Leiningen][1], one of the most popular build tools for Clojure. The thing that stopped me the most was that Leiningen uses [Maven][2] under the hood, which seemed a scary beast at first sight — but once I’ve overcome the initial fear, it turned out to be a quite simple and useful tool.&lt;/p&gt;&lt;p&gt;One feature in particular is very useful for Emacs users like me: &lt;code&gt;lein swank&lt;/code&gt;. You define all dependencies in &lt;code&gt;project.clj&lt;/code&gt; as usual, add a magical line to &lt;code&gt;:dev-dependencies&lt;/code&gt;, then say&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$ lein swank
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and lo and behold, you can &lt;code&gt;M-x slime-connect&lt;/code&gt; from your Emacs and have all the code at your disposal.&lt;/p&gt;&lt;p&gt;There is, however, an issue that you must be aware of when using &lt;code&gt;lein swank&lt;/code&gt;: Leiningen uses a custom class loader — [AntClassLoader][3] to be more precise — to load the Java classes referenced by the code. Despite being a seemingly irrelevant thing — an implementation detail — this can bite you in a number of most surprising and obscure ways. Try evaluating the following code in a Leiningen REPL:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs clojure"&gt;(&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;str&lt;/span&gt;&lt;/span&gt; (&lt;span class="hljs-name"&gt;.decode&lt;/span&gt;
       (&lt;span class="hljs-name"&gt;java.nio.charset.Charset/forName&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;ISO-8859-2&amp;quot;&lt;/span&gt;)
       (&lt;span class="hljs-name"&gt;java.nio.ByteBuffer/wrap&lt;/span&gt;
         (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;into-array&lt;/span&gt;&lt;/span&gt; Byte/TYPE (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;map&lt;/span&gt;&lt;/span&gt; byte [&lt;span class="hljs-number"&gt;-79&lt;/span&gt; &lt;span class="hljs-number"&gt;-26&lt;/span&gt; &lt;span class="hljs-number"&gt;-22&lt;/span&gt;])))))
&lt;span class="hljs-comment"&gt;;=&amp;gt; &amp;quot;???&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The same code evaluated in a plain Clojure REPL will give you &lt;code&gt;"ąćę"&lt;/code&gt;, which is a string represented in ISO-8859-2 by the three bytes from the above snippet.&lt;/p&gt;&lt;p&gt;Whence the difference? Internally, each charset is represented as a unique instance of its specific class. These are loaded lazily as needed by the &lt;code&gt;Charset/forName&lt;/code&gt; method. Presumably, the system class loader is used for that, and somewhere along the way a &lt;code&gt;SecurityException&lt;/code&gt; gets thrown and caught.&lt;/p&gt;&lt;p&gt;Note also that there are parts of Java API which use the charset lookup under the hood and are thus vulnerable to the same problem, for example &lt;code&gt;Reader&lt;/code&gt; constructors taking charset names. If you use &lt;code&gt;clojure.contrib.duck-streams&lt;/code&gt;, then rebinding &lt;code&gt;*default-encoding*&lt;/code&gt; will not work from a Leiningen REPL. Jars and überjars produced by Leiningen should be fine, though.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Wed, 31 Mar 2010 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/lein-swank/</guid></item><item><title>Twitter API Request Entity too large / HTTP 413 error</title><link>http://jrgns.net/twitter_api_request_entity_too_large_http_413_error/index.html</link><description>&lt;p&gt;I’ve setup &lt;a href="http://zacoders.net"&gt;zacoders.net&lt;/a&gt; that it will automatically tweet new RFC’s. A while back this functionality stopped working. Today I investigated a bit further, and here’s what I found.&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;When posting an update, the Twitter API responded with a 413 HTTP error code, and the following text:&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;Request Entity Too Large

The requested resource

/1/statuses/update.json

does not allow request data with POST requests,
or the amount of data provided in the request
exceeds the capacity limit.
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;I realized that the &lt;a href="http://backend-php.net"&gt;backend&lt;/a&gt;’s OAuth utility sent through POST requests with the parameters included in the URI, just like a GET request:&lt;/p&gt;

&lt;p&gt;POST HTTP/1.1 http://api.twitter.com/1/statuses/update.json?parameters=here&lt;/p&gt;

&lt;p&gt;What baffled me is that I only got this error when running it on my live server, not on my testing local server. I suspect it might be a difference in the Curl libraries, but I’m not sure.&lt;/p&gt;

&lt;p&gt;To fix it, I just updated the code to only add the parameters to the URI when it was a GET, and to POST the data when it was a POST, and voila, it’s working again.&lt;/p&gt;</description><author>Jurgens du Toit</author><pubDate>Tue, 30 Mar 2010 10:12:09 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/twitter_api_request_entity_too_large_http_413_error/index.html</guid></item><item><title>Articles of regional Free Software law violate the Italian Constitution</title><link>https://stop.zona-m.net/2010/03/articles-of-regional-free-software-law-violate-the-italian-constitution/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 28 Mar 2010 08:34:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/articles-of-regional-free-software-law-violate-the-italian-constitution/</guid></item><item><title>Oracle Latch Contention Troubleshooting</title><link>https://tanelpoder.com/2010/03/27/oracle-latch-contention-troubleshooting/</link><description>&lt;p&gt;I wrote a latch contention troubleshooting article for IOUG Select journal last year (it was published earlier this year). I have uploaded this to tech.E2SN too, I recommend you to read it if you want to become systematic about latch contention troubleshooting:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tech.e2sn.com/oracle/troubleshooting"&gt;http://tech.e2sn.com/oracle/troubleshooting&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’m working on getting the commenting &amp;amp; feedback work at tech.E2SN site too, but for now you can comment here at this blog entry…&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 28 Mar 2010 07:46:08 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/03/27/oracle-latch-contention-troubleshooting/</guid></item><item><title>My Favorite Tech related Webcasts on Startups and Entrepreneurship</title><link>https://arnorhs.dev/posts/2010-03-28/my-favorite-tech-related-webcasts-on-startups-and-entrepreneurship/</link><description>I can't believe I've made a "Top X"-post, but I just wanted to get this off my chest. These are in my opinion the best tech-related webcasts on start-ups or entrepreneurship.

#### 4\. YCombinator inter...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sun, 28 Mar 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-03-28/my-favorite-tech-related-webcasts-on-startups-and-entrepreneurship/</guid></item><item><title>Textbooks are too expensive, so Italian high school tries to produce them in house</title><link>https://stop.zona-m.net/2010/03/textbooks-are-too-expensive-so-italian-high-school-tries-to-produce-them-in-house/</link><description>&lt;p&gt;Every year italian families must spend hundreds of Euros in textbooks for every child, while the cost limits set by the government &lt;a href="http://www.repubblica.it/2008/07/sezioni/scuola_e_universita/servizi/spesa-libri-2008/spesa-libri-2008/spesa-libri-2008.html"&gt;are regularly violated&lt;/a&gt; in spite of &lt;a href="http://www.istruzione-oggi.it/archives/0009100.html"&gt;denounces&lt;/a&gt; and &lt;a href="http://www.altroconsumo.it/scuola/libri-scolastici-controlla-se-la-scuola-di-tuo-figlio-sfora-i-tetti-di-spesa-s215723.htm"&gt;warnings&lt;/a&gt; from consumer associations.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 27 Mar 2010 08:14:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/textbooks-are-too-expensive-so-italian-high-school-tries-to-produce-them-in-house/</guid></item><item><title>How to remove the www from your URL</title><link>http://jrgns.net/remove_www_from_url/index.html</link><description>&lt;p&gt;If you like simplicity, you might like to simplify your website’s URL. You can do this by adding the following in your &lt;code class="highlighter-rouge"&gt;.htaccess&lt;/code&gt; file, or in the &lt;code class="highlighter-rouge"&gt;VirtualHost&lt;/code&gt; declaration on your Apache setup.&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.mysite.co.za$ [NC]
RewriteRule ^(.*)$ http://mysite.co.za/$1 [L,R=301]
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The rewrite module for apache needs to be installed for this to work.&lt;/p&gt;

&lt;p&gt;Remember that you can tell Google to list all links to your site with / without the www by setting that in the &lt;a href="http://www.google.com/webmasters/tools/"&gt;Webmaster Tools&lt;/a&gt;.&lt;/p&gt;</description><author>Jurgens du Toit</author><pubDate>Fri, 26 Mar 2010 10:03:29 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/remove_www_from_url/index.html</guid></item><item><title>[Rails] Run Queued Tasks Using 'delayed_job', Now With Intervals!</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-run-queued-tasks-using-delayed-job-now-with-intervals</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Thu, 25 Mar 2010 13:53:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-run-queued-tasks-using-delayed-job-now-with-intervals</guid></item><item><title>Eclipse can't find source when remote debugging</title><link>https://www.craigpardey.com/post/2010-03-25-eclipse-cant-find-source-when-remote-debugging/</link><description>&lt;p&gt;I had a problem recently where Eclipse couldn&amp;rsquo;t find my source files when
remote debugging a particular application. It would stop and the breakpoint
and show the class file with a &amp;ldquo;attach source&amp;rdquo; button, but pointing it to the
source directory didn&amp;rsquo;t do anything.&lt;/p&gt;
&lt;p&gt;It turns out that the solution was to add the project to the remote debug
configuration.&lt;/p&gt;
&lt;p&gt;This is done by &amp;ldquo;Run -&amp;gt; Debug configurations&amp;hellip;&amp;rdquo;&lt;br /&gt;
Choose the remote config from the tree on the left&lt;br /&gt;
Click on the &amp;ldquo;Source&amp;rdquo; tab&lt;br /&gt;
Click on the &amp;ldquo;Add&amp;hellip;&amp;rdquo; button&lt;br /&gt;
Follow the wizard.&lt;/p&gt;</description><author>Craig Pardey</author><pubDate>Thu, 25 Mar 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.craigpardey.com/post/2010-03-25-eclipse-cant-find-source-when-remote-debugging/</guid></item><item><title>New look!</title><link>http://jrgns.net/new_look/index.html</link><description>&lt;p&gt;At long last I’ve been able to find the time to port my website from drupal to &lt;a href="http://backend-php.net"&gt;backend&lt;/a&gt;. Backend is a PHP framework I wrote myself and open sourced to get it out there.&lt;/p&gt;

&lt;p&gt;I’ve also redesigned the site, made it simpler and hopefully more usable. I’ll be adding more information as I go along.&lt;/p&gt;</description><author>Jurgens du Toit</author><pubDate>Thu, 25 Mar 2010 01:05:40 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/new_look/index.html</guid></item><item><title>Cash for software clunkers? No, thanks, unless it promotes Free Software</title><link>https://stop.zona-m.net/2010/03/cash-for-software-clunkers-no-thanks-unless-it-promotes-free-software/</link><description>&lt;p&gt;The italian Information &amp;amp; Communications Technology (ICT) industry is in dire straits. On March 10, 2010, &lt;a href="http://www.assinform.it/english_version/_index.htm"&gt;Assinform, the association of the bigger italian ICT companies&lt;/a&gt;, announced that their 2010 forecast includes an estimate of 8000 lost jobs, after the 16000 already lost in 2009. One of the solutions Assinform proposes to fight the crisis is what you may call a &lt;em&gt;&amp;ldquo;cash for software clunkers&amp;rdquo;&lt;/em&gt; program: state-financed discounts for all companies that replace with newer applications obsolete software that isn&amp;rsquo;t working well anymore. At first sight, this looks like a dumb, or at least useless, idea, for the reasons explained below, but it &lt;em&gt;could&lt;/em&gt; do well, after all, if implemented in the right way.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 24 Mar 2010 05:42:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/cash-for-software-clunkers-no-thanks-unless-it-promotes-free-software/</guid></item><item><title>My Pragmatic Take on SEO</title><link>https://arnorhs.dev/posts/2010-03-24/my-pragmatic-take-on-seo/</link><description>I've been thinking a lot about SEO (Search Engine Optimization) these days. Mostly due to a pretty controversial article by Paul Boag, Why I don't get SEO. I get the point of the article but I think it misses a few considerations. I want to summarize my own thoughts on SEO in a pragmatic way. Disclaimer: I'm not an SEO expert and I do not work in the field so I could be wrong. This is just a Web Developer's pragmatic perspective.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Wed, 24 Mar 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-03-24/my-pragmatic-take-on-seo/</guid></item><item><title>Was Java's "for each" version of its `for` statement originally called `foreach`?</title><link>https://www.databasesandlife.com/foreach-syntax/</link><description>&lt;p&gt;Java 5 introduced the &amp;ldquo;for each&amp;rdquo; syntax. But why did they have to use the keyword &lt;code&gt;for&lt;/code&gt;, instead of the keyword &lt;code&gt;foreach&lt;/code&gt; used by practically every other language?&lt;/p&gt;
&lt;table style="width: 100%;"&gt;
  &lt;tr&gt;
    &lt;td style="width: 100px;"&gt;
      &lt;strong&gt;PHP&lt;/strong&gt;
    &lt;/td&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;td style=&amp;quot;font-family: monospace;&amp;quot;&amp;gt;
  foreach (&amp;lt;em&amp;gt;list &amp;lt;/em&amp;gt;as &amp;lt;em&amp;gt;element&amp;lt;/em&amp;gt;)
&amp;lt;/td&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Perl&lt;/strong&gt;
    &lt;/td&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;td style=&amp;quot;font-family: monospace;&amp;quot;&amp;gt;
  foreach my &amp;lt;em&amp;gt;element &amp;lt;/em&amp;gt;(&amp;lt;em&amp;gt;list&amp;lt;/em&amp;gt;)
&amp;lt;/td&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Java&lt;/strong&gt;
    &lt;/td&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;td style=&amp;quot;font-family: monospace;&amp;quot;&amp;gt;
  for (&amp;lt;em&amp;gt;element &amp;lt;/em&amp;gt;: &amp;lt;em&amp;gt;list&amp;lt;/em&amp;gt;)
&amp;lt;/td&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Javascript&lt;/strong&gt;
    &lt;/td&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;td style=&amp;quot;font-family: monospace;&amp;quot;&amp;gt;
  for (var &amp;lt;em&amp;gt;element &amp;lt;/em&amp;gt;in &amp;lt;em&amp;gt;list&amp;lt;/em&amp;gt;)
&amp;lt;/td&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;C#&lt;/strong&gt;
    &lt;/td&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;td style=&amp;quot;font-family: monospace;&amp;quot;&amp;gt;
  foreach (&amp;lt;em&amp;gt;element &amp;lt;/em&amp;gt;in &amp;lt;em&amp;gt;list&amp;lt;/em&amp;gt;)
&amp;lt;/td&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Java already has the keyword &lt;code&gt;for&lt;/code&gt; to do the traditional C-style loops, as do most other languages. For example:&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 24 Mar 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/foreach-syntax/</guid></item><item><title>New command system and social portal</title><link>https://etodd.io/2010/03/23/new-command-system-and-social-portal/</link><description>&lt;p&gt;Quick update just to keep this blog alive. I've made some improvements to the command/AI system. It's now much simpler and easier to tell your units to attack a specific enemy. The closest enemy you're aiming at is highlighted, and you can hit Q or E (depending on which one of your two units you want to command) to order an attack on that enemy. Special abilities are also mapped to Q or E, when tapped twice in quick succession.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Tue, 23 Mar 2010 12:48:16 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/03/23/new-command-system-and-social-portal/</guid></item><item><title>What's Sailing</title><link>https://captnemo.in/blog/2010/03/23/whats-sailing/</link><description>&lt;p&gt;&lt;strong&gt;Aboard The Nautilus, that is&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I finally decided to write a blog post for my non geek friends with affiliations ranging from DPs to BPs and the oblivious to all, but the elite few, GPs (Keep thinking, non_IITians). In midst of all the chapos, and ghissai(not me, of course), Nautilus has been, and will remain a lonely submarine beneath the ocean. And this has been the way for me in the past month. After a hefty piece of time where we were attacked by the mighty INS Cognizance (actually it was a retariation attack, because you see, Nautilus had won an event of theirs, a treasure hunt, and the mighty Cognizance, and the event organizers deemed the methods of my winning to be dishonest. (I had my reasons). But after that a hefty war at the seas resumed. I, had the luxury to dip underneath and avoid everything, once in a while. But rumours surrounded me, and I started to hear all sorts of things about me. And that is when the drama settled once and for all.(It ended with a 5k fine, if you need to know).&lt;/p&gt;

&lt;p&gt;INS Cognizance is on its way for the end of its journey(Join it @ www.cognizance.org.in and 26-30 Mar, IITR). However I shall be busy participating somewhere else, Chaos ‘10, India’s largest gaming extravaganza. I have assured INS Cognizance that Nautilus shall no longer be troubling them, but who knows with such waters, a collision may be unavoidable in the near future. And when that happens, I’m taking my warheads with me, just in case.&lt;/p&gt;

&lt;p&gt;In other news, I have been working on a couple of my own ideas, such as SMAC-I (Search Music Across Channel I), a Video Portal for Cinematography Section, IITRAANA.org, Counter Strike servers, the Intra Bhawan Gaming Tourney (which we won easily enough in AoE, NFS, as well as CS). Congrats to my clan mates. The net connectivity has been terrible here, and I’ve been derailed a few times along my route to Gmail.  Among other news, Oh, and I won the second prize in srishti’s dynamic website design, for LION- my twitter clone. I may or may not launch it, because you see, its just another clone. I also put up a new design for Criitique.in. Please check it out, and comment. I also posted a lot of pics and designs in Kriti , the DeviantArt clone for IITR. Check them as well.&lt;/p&gt;

&lt;p&gt;For those outside IITR, the link for my web presence is http://nemo.criitique.in.&lt;/p&gt;

&lt;p&gt;Here are some final few words in parting to all my frnds @ IITR&lt;/p&gt;

&lt;p&gt;@[Ex!$TeN$n3] - gl hf, gg :)&lt;br /&gt;
@LxG - 14,11&lt;br /&gt;
@alpha_Q - Better Luck Next Time&lt;br /&gt;
@17ninJa - Practice For Chaos&lt;br /&gt;
@bOb - fnatic lost to na’vi 2-0 (16-14, 16-13 in train, infy !)&lt;br /&gt;
@roomie - [insert silence here]&lt;br /&gt;
@xerxes,forsaken - nice team&lt;br /&gt;
@DArK_LOrD - i expected better&lt;br /&gt;
@Dead_Man - Welcome to LxG&lt;br /&gt;
@ll those I frGT - [Proxy laga dena plz]&lt;/p&gt;

&lt;p&gt;And special thanks to DR. Lecter, General Hendrix for making the legend of Capt. Nemo a reality. If you ever need assistance in a cross atlantic trip, let me know. I may ship you till atlantis, after which you are responsible for yourself and your belongings :)&lt;/p&gt;</description><author>Nemo's Home</author><pubDate>Tue, 23 Mar 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://captnemo.in/blog/2010/03/23/whats-sailing/</guid></item><item><title>Oracle Session Snapper v3.10</title><link>https://tanelpoder.com/2010/03/22/oracle-session-snapper-v3-10/</link><description>&lt;p&gt;Hi all, long time no see!  =8-)&lt;/p&gt;
&lt;p&gt;Now as I’m done with the awesome Hotsos Symposium (and the training day which I delivered) and have got some rest, I’ll start publishing some of the cool things I’ve been working on over the past half a year or so.&lt;/p&gt;
&lt;p&gt;The first is Oracle Session Snapper version 3!&lt;/p&gt;
&lt;p&gt;There are some major improvements in Snapper 3, like ASH style session activity sampling!&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 22 Mar 2010 18:35:50 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/03/22/oracle-session-snapper-v3-10/</guid></item><item><title>Italian Government fails to shut down one of its websites</title><link>https://stop.zona-m.net/2010/03/italian-government-fails-to-shut-down-one-of-its-websites/</link><description>&lt;p&gt;&lt;a href="http://www.normattiva.it"&gt;Normattiva (&amp;ldquo;active norm/law&amp;rdquo;)&lt;/a&gt; is a new online portal from the Italian Government that &amp;ldquo;using innovative software technologies creates a reliable, free and complete information service about Italian laws&amp;rdquo;. Normattiva &lt;a href="http://www.normattiva.it/static/progetto.html"&gt;opened to the public&lt;/a&gt; in March 2010. I first heard about it &lt;a href="http://punto-informatico.it/2836454/PI/News/normattiva-legge-online.aspx"&gt;on March 19th&lt;/a&gt;. Three days later, on March 22nd, 2010, I saw a post from &lt;a href="http://finalmentelibero.ning.com/profile/Flavia"&gt;Flavia Marzano&lt;/a&gt; that said: &lt;em&gt;&amp;quot;(now that) Normattiva is online, normeinrete is offline&amp;quot;&lt;/em&gt;.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Mon, 22 Mar 2010 10:39:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/italian-government-fails-to-shut-down-one-of-its-websites/</guid></item><item><title>Choosing Recurring or Subscription-based Credit Card Payments</title><link>https://arnorhs.dev/posts/2010-03-21/choosing-recurring-or-subscription-based-credit-card-payments/</link><description>I've been spending a few evenings researching the best way to integrate subscription-based payments for my new SaaS project. I was curious if there were any new start-ups implementing a web-based appl...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sun, 21 Mar 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-03-21/choosing-recurring-or-subscription-based-credit-card-payments/</guid></item><item><title>Microsoft, where did you get those data about OpenDocument?</title><link>https://stop.zona-m.net/2010/03/microsoft-where-did-you-get-those-data-about-opendocument/</link><description>&lt;p&gt;I already explained in another article that &lt;a href="https://stop.zona-m.net/2010/02/file-formats-alphabets-and-public-money-did-you-know-that/"&gt;open file formats are essential to save money in Public Administrations and make them more efficient&lt;/a&gt; and that the right choice for office document is the OpenDocument Format (ODF).&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 20 Mar 2010 06:30:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/microsoft-where-did-you-get-those-data-about-opendocument/</guid></item><item><title>Comparison of the Carabid Assemblages of a Deciduous and a Coniferous Stand in Aylmer, Quebec’s Boucher Forest [PDF, 160 kB]</title><link>https://www.davidschlachter.com/writings/spea.pdf</link><description>A comparison of the carabid beetle (Coleoptera: Carabidae) assemblages of a coniferous and a deciduous stand of Aylmer, Quebec’s Boucher Forest. The dominant species were nonindigenous, preferring cultivated ground.</description><author>David Schlachter</author><pubDate>Fri, 19 Mar 2010 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/spea.pdf</guid></item><item><title>Bleeding Edge and Rotting Core</title><link>https://peterlyons.com/problog/2010/03/bleeding-edge-and-rotting-core/</link><description>&lt;p&gt;I just wanted to post some thoughts on the topic of selecting software components with regard to the maturity thereof. I think overall the programmer community is by default gung-ho about the bleeding edge. We like the shiny new toys with the bells and whistles. Once something's been around enough to have its weaknesses well understsood, we find it very frustrating to have to continue to work with it. I'm not going to offer any specific recommendations, just some things to keep in mind. The general gist though is that it takes some hard-earned pragmatism and real production experience to understand the value of using older releases of components.&lt;/p&gt;
&lt;p&gt;First, let's define some terms. We're familiar with what is known as the bleeding edge. The new hotness. The stuff straight off the presses instilled with the glimmering light of state of the art knowledge. There's probably always been a lot of this, but there seems to have been a flurry in the past five years of so of interest in ruby, rails, erlang, clojure, scala, dozens of python app and web frameworks, etc. On the other hand, we have the old guard, which I'd like to call the rotting core. Generally we shy away from this, but there are times when it is absolutely the correct choice in certain situations.&lt;/p&gt;
&lt;p&gt;So, let's look at some pros and cons.&lt;/p&gt;
&lt;p&gt;Bleeding edge pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The freshest and (usually) best designs and thinking are made available&lt;/li&gt;
&lt;li&gt;Almost always more succinct and expressive&lt;/li&gt;
&lt;li&gt;Often more coherent, clean, and consistent&lt;/li&gt;
&lt;li&gt;Embodies improvements based on lessons learned from past failings and shortcomings&lt;/li&gt;
&lt;li&gt;Development tools and processes are sometimes more productive&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bleeding edge cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Development tools are usually immature and inferior
&lt;ul&gt;
&lt;li&gt;IDE support is likely to lag behind&lt;/li&gt;
&lt;li&gt;Debugger may lag behind as may remote graphical debugging&lt;/li&gt;
&lt;li&gt;Performance profilers might not be there&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Deployment issues may not have been well addressed yet&lt;/li&gt;
&lt;li&gt;Updates will come more frequently causing churn&lt;/li&gt;
&lt;li&gt;Software has not had as broad testing in production and is therefore likely to have more "surprises". Sometimes these can be showstoppers.&lt;/li&gt;
&lt;li&gt;Community size will be smaller&lt;/li&gt;
&lt;li&gt;Depth of knowledge in the community will be shallower&lt;/li&gt;
&lt;li&gt;Standard library may be undergoing more flux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rotting core pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stable, known quantity. It may have warts and bugs, but at least we're aware of most of them by now&lt;/li&gt;
&lt;li&gt;Development tools generally have solid support including remote graphical debugging, mature performance profilers, etc&lt;/li&gt;
&lt;li&gt;Community size will be larger&lt;/li&gt;
&lt;li&gt;Community depth of knowledge will be much deeper&lt;/li&gt;
&lt;li&gt;Updates are rare and only for occasional major issues or security patches&lt;/li&gt;
&lt;li&gt;standard library will be well known and stable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rotting core cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Less exciting to developers. Yesterday's designs and paradigms.&lt;/li&gt;
&lt;li&gt;Often tedious compared to the bleeding edge&lt;/li&gt;
&lt;li&gt;Support issues. Standard answer may always be "update to the latest version"&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And now, let's back this up with some examples and anecdotes. I think when it comes to rotting core technologies, you have both the "oldie but a goodie" category and the "oldie and a baddie" one. Currently my project has a component written against the now ancient Python 1.5.2 runtime, and we have hundreds of thousands of copies of that component installed at customer sites. It is running on something around seventy different OSes. Now, at the time when that component was originally written, this was close to the bleeding edge. We've still not entirely upgraded it because it's an oldie and a goodie. We've patched it a bunch and run it under huge loads and huge scales. We know what it can do, and we know what it can't do. We even had famous python educator Mark Lutz (Programming Python) come in to train us and give us quizzical looks when we explain that half of what he is saying doesn't apply to us since it wasn't available in python 1.5.2. Over the years, I've come to see the merits of this and even though its frustrating, the business reality is that every year that stuff continues to run without issue is bettering the return on the initial R&amp;amp;D investment. It ain't broke, so we're not in a hurry to fix it.&lt;/p&gt;
&lt;p&gt;Of course, on the other side, you've got things like Java 1.2, which I also worked with. Python has come a long way since 1.5.2, but really it's still basically the same deal, and the design was good from the start. Java has probably come even farther, but the design was a mess from the beginning and they've since seen the error of their ways and made some great improvements. I would put that one in the "oldie but a baddie" category and do what it takes to upgrade.&lt;/p&gt;
&lt;p&gt;I remember chatting with a stranger on a plane after we each noticed that we were both programmers and were both actively programming on the plane. This was a few years ago and Ruby was still pretty much bleeding edge. He looked at me with desperation and asked me if I knew anything about debugging deadlocks, threading issues, and core dumps since his production ruby app was regularly hitting issues and his team was basically at a point where they didn't have the knowledge or tools to solve them, and it was jeopardizing their whole project. Sadly I couldn't offer any help, but I could certainly sympathize.&lt;/p&gt;
&lt;p&gt;I also have a friend who used to work at a DNS registry run by someone very much of the "rotting core" philosophy. They ran Solaris 8 and ancient versions of lots of core C/unix utilities (bind et al), and to actually run versions that old took significant effort on their part, but it made sense for that project. They are running a piece of the Internet backbone. It's not bleeding edge stuff. It just needs stability, stability, stability, and those are the tools they needed to meet their business goals.&lt;/p&gt;
&lt;p&gt;So next time you join a new project and start to reflexively freak out when they explain their software stack, supress your urge for a minute and get some information about the choices they have made and the reasoning and circumstances that got them where they are. You might be surprised at the difficult but pragmmatic choices that were made and hopefully you can admire and appreciate the character of those who made them.&lt;/p&gt;
&lt;p&gt;And finally, think about the value of being able to look across a broad set of available components and correctly determine where components are in a "sweet spot" of their lifecycle, ripe to be chosen and deployed at length. That is a deep wisdom that is a long time coming.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Fri, 19 Mar 2010 10:53:53 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/03/bleeding-edge-and-rotting-core/</guid></item><item><title>WGR v1.0.3</title><link>https://benovermyer.com/blog/2010/03/wgr-v1-0-3/</link><description>&lt;p&gt;The latest version of WoW Guild Retrieve supports custom rank names and adds the ability to change the default number of rows displayed.&lt;/p&gt;
&lt;p&gt;I plan on making rank name changing a little easier for the next release.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Fri, 19 Mar 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2010/03/wgr-v1-0-3/</guid></item><item><title>Ruby Shortcuts</title><link>https://caiustheory.com/ruby-shortcuts/</link><description>&lt;p&gt;There&amp;rsquo;s a few useful shorthand ways to create certain objects in Ruby, a couple of obvious ones are &lt;code&gt;[]&lt;/code&gt; to create an &lt;code&gt;Array&lt;/code&gt; and &lt;code&gt;{}&lt;/code&gt; to create a &lt;code&gt;Hash&lt;/code&gt; (Or block/&lt;code&gt;Proc&lt;/code&gt;). There&amp;rsquo;s some not so obvious ones too, for creating strings, regexes and executing shell commands.&lt;/p&gt;
&lt;p&gt;With all of the examples I&amp;rsquo;ve used &lt;code&gt;{}&lt;/code&gt; as the delimiter characters, but you can use a variety of characters. Personally I tend to use &lt;code&gt;{}&lt;/code&gt; unless the string contains them, in which case I&amp;rsquo;ll use &lt;code&gt;//&lt;/code&gt; or &lt;code&gt;@@&lt;/code&gt;. My only exception appears to be &lt;code&gt;%w&lt;/code&gt;, for which I tend to use &lt;code&gt;()&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="strings"&gt;Strings&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;%&lt;/code&gt; and &lt;code&gt;%Q&lt;/code&gt; are the same as using double quotes, including string interpolation. Really useful when you want to create a string that contains double quotes, but without the hassle of escaping them.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%{}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; ""&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%Q{}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; ""&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%{caius}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; "caius"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%{caius &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sx"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; "caius 5"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%{some "foo" thing}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; "some \"foo\" thing"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;%q&lt;/code&gt; is equivalent to using single quotes. Behaves exactly the same, no string interpolation.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%q{}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; ''&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%q{caius}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; "caius"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%q{caius #{5}}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; "caius \#{5}"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="arrays"&gt;Arrays&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;%w&lt;/code&gt; is the equivalent of using String#split. It takes a string and splits it on whitespace. With the added bonus of being able to escape whitespace too. &lt;code&gt;%W&lt;/code&gt; allows string interpolation.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%w(foo bar sed)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; ["foo", "bar", "sed"]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%w(foo\ bar sed)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; ["foo bar", "sed"]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%W(foo &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sx"&gt; bar)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; ["foo", "5", "bar"]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="regexes"&gt;Regexes&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;%r&lt;/code&gt; is just like using &lt;code&gt;//&lt;/code&gt; to create a regexp object. Comes in handy when you&amp;rsquo;re writing a regex containing &lt;code&gt;/&lt;/code&gt; as you don&amp;rsquo;t have to continually escape it.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sr"&gt;%r{foo|bar}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; /foo|bar/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sr"&gt;%r{foo/bar}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; /foo\/bar/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="symbols"&gt;Symbols&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;%s&lt;/code&gt; creates a symbol, just like writing &lt;code&gt;:foo&lt;/code&gt; manually. It takes care of escaping the symbol, but unlike &lt;code&gt;:&amp;quot;&amp;quot;&lt;/code&gt; it doesn&amp;rsquo;t allow string interpolation however.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%s{foo}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; :foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%s{foo/bar}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; :"foo/bar"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="ss"&gt;:"foo-&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="ss"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; :"foo-5"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%s{foo-#{5}}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; :"foo-\#{5}"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="shelling-out"&gt;Shelling out&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;%x&lt;/code&gt; is the same as backticks (&lt;!-- raw HTML omitted --&gt;``&lt;!-- raw HTML omitted --&gt;), executes the command in a shell and returns the output as a string. And just like backticks it supports string interpolation.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;`echo hi`&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; "hi\n"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%x{echo hi}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; "hi\n"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sx"&gt;%x{echo &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sx"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; "5\n"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><author>Caius Theory</author><pubDate>Fri, 19 Mar 2010 00:32:45 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/ruby-shortcuts/</guid></item><item><title>SQLite Viewer</title><link>http://jrgns.net/sqllite_view/index.html</link><description>&lt;p&gt;I’m playing around with &lt;a href="http://developers.google.com/gears/"&gt;Google Gears&lt;/a&gt;, doing data imports, and generally playing around. I’m quite visiually oriented, so I need to SEE that the data has been added to a table. For my conventional PHP / MySQL apps, I usually use phpMyAdmin or the MySQL query browser, but for Gears developmen, which uses SQLite, I needed to use something else.&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;I wrote a small JavaScript / Gears app which enables you to view the contents of a SQLite database. All you need to use it, is to download the file, and unzip it into the folder where your web app sits. And no, you won’t be able to use it for a remote DB. You need at least FTP access to the website you want to look at, and it will only show you your local data.&lt;/p&gt;

&lt;p&gt;You will also need to know the name of the database. At the moment I can see no simple way to supply the user with a listing of DB’s, so the app prompts the user for the DB name.&lt;/p&gt;

&lt;p&gt;The app currently links to the scripts and styles on my host, which is fine for light use. If you plan to use this app extensively, please start hosting the files on your own host and update the HTML!&lt;/p&gt;</description><author>Jurgens du Toit</author><pubDate>Thu, 18 Mar 2010 18:28:30 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/sqllite_view/index.html</guid></item><item><title>Update On Backend</title><link>http://jrgns.net/Update on Backend/index.html</link><description>&lt;p&gt;Bakend: PHP framework, as it’s now called, now has it’s own website! Check it out at &lt;a href="http://backend-php.net"&gt;http://backend-php.net&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Follow backend on Twitter at &lt;a href="http://twitter.com/backend_php"&gt;@backend_php&lt;/a&gt;!&lt;/p&gt;</description><author>Jurgens du Toit</author><pubDate>Thu, 18 Mar 2010 18:23:37 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/Update on Backend/index.html</guid></item><item><title>Backend 100 Revisions</title><link>http://jrgns.net/backend_100_revisions/index.html</link><description>&lt;p&gt;I’ve been working on &lt;a href="http://backend-php.net"&gt;backend&lt;/a&gt;, a PHP framework the last couple of months, and it’s really starting to take shape. I’ve learned a lot about what one can do by coding smarter and the advantages open source code gives on.&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;After getting somewhat disheartened a few weeks back, I decided to take a look at how &lt;a href="http://codeigniter.com/"&gt;CodeIgnitir&lt;/a&gt; does things, and wow, it blew my mind. After spending some time with their code base, I had so many ideas I wanted to implement in backend and my thoughts around it was instantly rejuvinated. Problems that stopped me from progressing had new solutions, and the momentum I gathered from that helped to solve some problems that didn’t have any solutions directly at hand.&lt;/p&gt;

&lt;p&gt;So, backend just hit it’s 100th revision, somewhat arbitrarily, as I reset the branch at some point, and don’t always follow the exact same commit methodology, but hey, it looks like a milestone, I’ll treat it as one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What has changed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;URL mapping has improved a lot (thanks to CodeIgnitir). &lt;code class="highlighter-rouge"&gt;?q=controller/action/param1/param2&lt;/code&gt; now maps to &lt;code class="highlighter-rouge"&gt;Controller::action(param1, param2)&lt;/code&gt; without much effort. This has also helped to work towards being a RESTful API.&lt;/p&gt;

&lt;p&gt;The installation process is now very smooth and stable. The setting up of data sources need some work, but once that is done, getting the application up and running and fine tuning it is a breeze.&lt;/p&gt;

&lt;p&gt;The beginning of a Links structure with named link lists can be managed. The primary use will be for primary and secondary links for a website.&lt;/p&gt;

&lt;p&gt;I’ve managed to implement tags for content, as well as RSS feeds for content as a whole, or content in a tag. The ease with which I could do it really gives me hope that backend will make my coding life easier!&lt;/p&gt;

&lt;p&gt;All around polish and stability. Especially around the HTML templating  and rendering engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where to from here?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The permissions / security infrastructure still needs some work. I’ve managed to automatically install most of the default permissions, but there’s no useful management interface yet.&lt;/p&gt;

&lt;p&gt;I want to start using backend on my personal site (this one) and on another site I’ve got in the works, called &lt;a href="http://zacoders.net"&gt;zacoders.net&lt;/a&gt;. More on that later.&lt;/p&gt;</description><author>Jurgens du Toit</author><pubDate>Thu, 18 Mar 2010 18:20:29 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/backend_100_revisions/index.html</guid></item><item><title>My take on single or multiple returns</title><link>http://jrgns.net/my_take_on_single_or_multiple_returns/index.html</link><description>&lt;p&gt;Originally posted on &lt;a href="http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement/1276951#1276951"&gt;StackOverflow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I force myself to use only one return statement, as it will in a sense generate code smell. Let me explain:&lt;!--break--&gt;&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&amp;lt;?php
function isCorrect($param1, $param2, $param3) {
    $toret = false;
    if ($param1 != $param2) {
        if ($param1 == ($param3 * 2)) {
            if ($param2 == ($param3 / 3)) {
                $toret = true;
            } else {
                $error = 'Error 3';
            }
        } else {
            $error = 'Error 2';
        }
    } else {
        $error = 'Error 1';
    }
    return $toret;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;(The conditions are arbritary…)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The more conditions, the larger the function gets, the more difficult it is to read. So if you’re attuned to the code smell, you’ll realise it, and want to refactor the code. Two possible solutions are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Multiple returns&lt;/li&gt;
  &lt;li&gt;Refactoring into separate functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Multiple Returns&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&amp;lt;?php
function isCorrect($param1, $param2, $param3) {
    if ($param1 == $param2)       { $error = 'Error 1'; return false; }
    if ($param1 != ($param3 * 2)) { $error = 'Error 2'; return false; }
    if ($param2 != ($param3 / 3)) { $error = 'Error 3'; return false; }
    return true;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Separate Functions&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&amp;lt;?php
function isEqual($param1, $param2) {
    return $param1 == $param2;
}

function isDouble($param1, $param2) {
    return $param1 == ($param2 * 2);
}

function isThird($param1, $param2) {
    return $param1 == ($param2 / 3);
}

function isCorrect($param1, $param2, $param3) {
    $toret = false;
    if (!isEqual($param1, $param2)
        &amp;amp;&amp;amp; isDouble($param1, $param3)
        &amp;amp;&amp;amp; isThird($param2, $param3)
    ) {
        $toret = true;
    }
    return $toret;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Granted, it is longer and a bit messy, but in the process of refactoring the function this way, we’ve&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;created a number of reusable functions,&lt;/li&gt;
  &lt;li&gt;made the function more human readable, and&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;the focus of the functions is on why the values are correct.&lt;/p&gt;

  &lt;/li&gt;
&lt;/ul&gt;</description><author>Jurgens du Toit</author><pubDate>Thu, 18 Mar 2010 18:17:11 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/my_take_on_single_or_multiple_returns/index.html</guid></item><item><title>Firefox requests a page twice?</title><link>http://jrgns.net/firefox_requests_a_page_twice/index.html</link><description>&lt;p&gt;I’m busy creating a site for a client who wants to know when certain internal links get clicked. Not a problem, I just insert a record into a table every time the links they want to know about get accesesd. Only problem is, when I check the table, I notice that every page impression gets logged twice.&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;Now, this happened before, where I also needed to implement some page tracking, and it ended up being an image or something with src=””, and Firefox interpreting it as the same location as the current page (as with form with action=””). Don’t know if that is according to standards, either way, it messes up my page tracking.&lt;/p&gt;

&lt;p&gt;The simple solution is to find any images or HTML elements with source attributes that are empty. Only problem is I couldn’t find any this time. So, by taking out chunks of code, I eventually tracked it to srcover attributes in some of the images. Just as a side note, I don’t use srcover, the designers use them, and unfortunately I must make do with what the designers give me.&lt;/p&gt;

&lt;p&gt;So why does Firefox (I didn’t test on other browser) do this on srcover? Firebug shows that the images specified in srcover are downloaded, and the mouseovers work, so it’s not that the images are missing or anything.&lt;/p&gt;

&lt;p&gt;I’ll investigate when I have some time, and report back…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I found this page at &lt;a href="http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/PHP_Databases/Q_23101341.html"&gt;Experts Exchange&lt;/a&gt;, but hey, they want me to pay to see it. No chance of that happening. If anyone is a member, and you don’t want money to share some wisdom, please do!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update number two:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I fount &lt;a href="http://forums.mozillazine.org/viewtopic.php?p=3022038"&gt;this page&lt;/a&gt; which only talks about the empty src tag, but it also quotes the HTML spec that says that empty src tags refer to the same page their in. So why does srcover still re-request my page?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update number final:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ok, so it wasn’t Firefox’s fault, but the javascript that did the rollover images. When it preloades, it doesn’t check for empty src attributes, it just loads them. As it checks for both srcover and srcdown, which aren’t necessarily specified, it gets quite a lot of empty tags. I guess that Firefox uses a cached page for the rest of the requests.&lt;/p&gt;

&lt;p&gt;The javascript library is called imagerollover.js by Adam Smith. I couldn’t find a working website, so I don’t know if I have the latest version, but I’ll upload my modified version…&lt;/p&gt;</description><author>Jurgens du Toit</author><pubDate>Thu, 18 Mar 2010 18:13:43 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/firefox_requests_a_page_twice/index.html</guid></item><item><title>Parse Http Accept Header</title><link>http://jrgns.net/parse_http_accept_header/index.html</link><description>&lt;p&gt;I want to generate CSS on the fly for a personal project. I’m doing this by redirect all requests for files that does not exist to index.php, and then, if the request is for a stylesheet, index.php generates it.&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;To identify a request for a stylesheet, we need to parse the Accept header in the HTTP Request. I’ve grouped all the functions together in a Parser class.&lt;/p&gt;

&lt;p&gt;This function retrieves the header, and then determines the mime type, precedence, and tokens for each type given. It’s then sorted according to &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html"&gt;RFC 2616&lt;/a&gt; specifications.&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&amp;lt;?php
public static function accept_header($header = false) {
	$toret = null;
	$header = $header ? $header : (array_key_exists('HTTP_ACCEPT', $_SERVER) ? $_SERVER['HTTP_ACCEPT']: false);
	if ($header) {
		$types = explode(',', $header);
		$types = array_map('trim', $types);
		foreach ($types as $one_type) {
			$one_type = explode(';', $one_type);
			$type = array_shift($one_type);
			if ($type) {
				list($precedence, $tokens) = self::accept_header_options($one_type);
				list($main_type, $sub_type) = array_map('trim', explode('/', $type));
				$toret[] = array('main_type' =&amp;gt; $main_type, 'sub_type' =&amp;gt; $sub_type, 'precedence' =&amp;gt; (float)$precedence, 'tokens' =&amp;gt; $tokens);
			}
		}
		usort($toret, array('Parser', 'compare_media_ranges'));
	}
	return $toret;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This helper function parses the options for each mime type, determining the precedence and tokens. It returns the precidence as a float, and an array of tokens.&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&amp;lt;?php
public static function accept_header_options($type_options) {
	$precedence = 1;
	$tokens = array();
	if (is_string($type_options)) {
		$type_options = explode(';', $type_options);
	}
	$type_options = array_map('trim', $type_options);
	foreach ($type_options as $option) {
		$option = explode('=', $option);
		$option = array_map('trim', $option);
		if ($option[0] == 'q') {
			$precedence = $option[1];
		} else {
			$tokens[$option[0]] = $option[1];
		}
	}
	$tokens = count ($tokens) ? $tokens : false;
	return array($precedence, $tokens);
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This function is used to sort the array of mime types we parsed from the header. At the moment it doesn’t check any tokens, but this code can easily be added on line 6.
&lt;/p&gt;</description><author>Jurgens du Toit</author><pubDate>Thu, 18 Mar 2010 18:10:35 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/parse_http_accept_header/index.html</guid></item><item><title>Backend-PHP Framework</title><link>http://jrgns.net/backend_intro/index.html</link><description>&lt;div class="notice"&gt;
&lt;h3&gt;Update: 21/11/2011&lt;/h3&gt;
Backend has undergone a major rewrite. Get the latest info &lt;a href="/content/backend-core-a-restful-mvc-php-framework"&gt;here&lt;/a&gt;, and get the code on &lt;a href="https://github.com/jrgns/backend-core"&gt;GitHub&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;In the past few years I’ve been working on a PHP framework / backend. Sometimes out of frustration with copying and pasting code, but usually because I’m to lazy to write a lot of code, so decide to write a little bit of code to do a lot… And then I write some more code, to do a little bit more, and before you know it, it’s yet another PHP framework. I tried to get some public input on the &lt;a href="http://launchpad.net/yaphpfter"&gt;project&lt;/a&gt; once before, but that went nowhere, and I left it there - until of course I had to do some work that required the same type of thing, and now I’m at it again.&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;What makes backend different from my previous &lt;a href="http://www.codinghorror.com/blog/archives/000576.html"&gt;failed&lt;/a&gt; experiment? Well, the fact that this is now the 7th or 8th time that I’ve rehashed the concept, and that this time, I’ve actually put some thought and effort into it. No, it’s not perfect, and it won’t solve the world’s problems, but it better and simpler, and hopefully more useful.&lt;/p&gt;

&lt;p&gt;One concept that I definitely want to run with in backend, is the concept of backend as a web service, as opposed to a framework or a content / data management system. Backend provides a client, as in a browser or an application, with the requested data, in a format that the client can understand. Be it a human readable web page, JSON, XML or even PHP variables. This struck me as important after reading &lt;a href="http://tomayko.com/writings/rest-to-my-wife"&gt;this&lt;/a&gt; by Ryan Tomayko:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Wife: A web page is a resource?&lt;/p&gt;

  &lt;p&gt;Ryan: Kind of. A web page is a
“representation” of a resource.
Resources are just concepts.
URLs—those things that you type into
the browser…&lt;/p&gt;

  &lt;p&gt;Wife: I know what a URL is..&lt;/p&gt;

  &lt;p&gt;Ryan: Oh, right. Those tell the
browser that there’s a concept
somewhere. A browser can then go ask
for a specific representation of the
concept. Specifically, the browser
asks for the web page representation
of the concept.&lt;/p&gt;

  &lt;p&gt;Wife: What other kinds of
representations are there?&lt;/p&gt;

  &lt;p&gt;Ryan: Actually, representations is one
of these things that doesn’t get used
a lot. In most cases, a resource has
only a single representation. But
we’re hoping that representations will
be used more in the future because
there’s a bunch of new formats popping
up all over the place.&lt;/p&gt;

  &lt;p&gt;Wife: Like what?&lt;/p&gt;

  &lt;p&gt;Ryan: Hmm. Well, there’s this concept
that people are calling “Web
Services”. It means a lot of different
things to a lot of different people
but the basic concept is that machines
could use the web just like people do.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So it’s important for me to make it easy for web developers to easily provide data in different formats. Backend can already provide any client with data in 4, yes 4, different formats:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;HTML, or a human readable webpage&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://json.org/"&gt;JSON&lt;/a&gt;, the new darling of AJAX fans&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.php.net/serialize"&gt;(PHP) Serialized byte stream representations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.php.net/var-export"&gt;PHP variables&lt;/a&gt;, as created by var_export&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This will hopefully increase backend’s usefulness as a web service. And yes, I know, XML is missing, but of those 4, HTML was necessary, although not necessarily easy, and the other three were extremely easy to implement, as they are all products of simple PHP functions. One day when someone uses backend and actually &lt;strong&gt;needs&lt;/strong&gt; XML, we can implement it. (Notice that I said &lt;em&gt;we&lt;/em&gt;, not &lt;em&gt;I&lt;/em&gt; - I rarely use XML, so I won’t know the requirements, so if I do it alone, it will probably be useless).&lt;/p&gt;

&lt;p&gt;At the moment backend is on version 0.1.2.1 in my personal repo. All that means is that I’ve decided I’ve reached a point where I can actually release the code to the public, and made some improvements, fixes and changes. When will it be marked as version 1.0?&lt;/p&gt;

&lt;p&gt;When we have the following:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;A fully fledged and integrated admin space
2, Easy and intuitive setup / install system&lt;/li&gt;
  &lt;li&gt;Easy and intuitive update system&lt;/li&gt;
  &lt;li&gt;An intuitive plugin system&lt;/li&gt;
  &lt;li&gt;Intuitive and function DB Objects&amp;lt;&lt;/li&gt;
  &lt;li&gt;The ability to easily implement different data formats&lt;/li&gt;
  &lt;li&gt;The ability to use multiple and different data sources (MySQL, SQLite, flat files, etc.)&lt;/li&gt;
  &lt;li&gt;Working and secure user access control&lt;/li&gt;
  &lt;li&gt;Either a REST-full implementation, or a roadmap towards it&lt;/li&gt;
  &lt;li&gt;Something that makes coding easier&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s ten requirements for me to release backend v1.0…&lt;/p&gt;

&lt;p&gt;What’s already done?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Semi working DB Objects&lt;/li&gt;
  &lt;li&gt;Output of different data formats using views&lt;/li&gt;
  &lt;li&gt;Simple templating / caching system&lt;/li&gt;
  &lt;li&gt;Simple user access control&lt;/li&gt;
  &lt;li&gt;CRUD, actually, just CRU actions. I haven’t gotten round to the Deletes yet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m using &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; as a JavaScript backend, and &lt;a href="http://www.blueprintcss.org/"&gt;blueprint&lt;/a&gt; for my CSS needs. For now it’s under the &lt;a href="http://www.opensource.org/licenses/eclipse-1.0.php"&gt;EPL&lt;/a&gt;, but I may switch to the MIT license at some point. I’m using MySQL exclusively at this point, but am hoping to add support for other DB’s / sources eventually.&lt;/p&gt;

&lt;p&gt;I’ll be putting the code on &lt;a href="http://launchpad.net/backend"&gt;Launchpad&lt;/a&gt; soon, so if you want to contribute, or comment, please do!&lt;/p&gt;</description><author>Jurgens du Toit</author><pubDate>Thu, 18 Mar 2010 10:46:32 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/backend_intro/index.html</guid></item><item><title>Importing a file into a Google Gears DB using PHP</title><link>http://jrgns.net/import_to_google_gears/index.html</link><description>&lt;p&gt;I’m playing around with &lt;a href="http://developers.google.com/gears/"&gt;Google Gears&lt;/a&gt;, particularly the database part, just to see what it’s usefull for, and if I can use it in an app I’m working on. At some point I realised that I will need to import data at some point. Here’s how I did it:&lt;/p&gt;

&lt;!--break--&gt;

&lt;p&gt;By using an HTML uploading form, and PHP to process the upload, you can create a JSON object which can be used to import data into whatever Gears DB you have. Use whatever you use to put all of the data into one array. The source can be a DB or a file upload, come to think of it. Convert the data to JSON using json_encode, and assign it to a JavaScript variable:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;var data = ;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After that, check that the table exists, loop through the data, and insert!&lt;/p&gt;

&lt;p&gt;The complete code below:&lt;/p&gt;

&lt;p&gt;The test data to import:&lt;/p&gt;

&lt;pre&gt;
"one two",2,1
"three four",3.4,2
&lt;/pre&gt;

&lt;p&gt;And the test page, HTML and PHP together:&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php
$data = false;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
	$data = array();
	if (!empty($_FILES['to_import']['tmp_name']) &amp;amp;&amp;amp; is_readable($_FILES['to_import']['tmp_name'])) {
		$fp = fopen($_FILES['to_import']['tmp_name'], 'r');
		while (($row = fgetcsv($fp)) !== false) {
			$data[] = $row;
		}
		fclose($fp);
	}
	$data;
}
?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
	&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
		&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;JSON / Gears import Test&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
	&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
	&lt;span class="nt"&gt;&amp;lt;body&lt;/span&gt; &lt;span class="na"&gt;onload=&lt;/span&gt;&lt;span class="s"&gt;"do_import()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
		&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"post"&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="na"&gt;enctype=&lt;/span&gt;&lt;span class="s"&gt;"multipart/form-data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
			&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"to_import"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
			&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
		&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
		&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;'gears_init.js'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
		&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt; &lt;span class="nx"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;json_encode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;do_import&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
	&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;google&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gears&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;factory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'beta.database'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
	&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'database-test'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
	&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'CREATE TABLE IF NOT EXISTS Import'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
				&lt;span class="s1"&gt;' (Phrase text, Amount float, Something int)'&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="nx"&gt;data&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="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&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="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&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="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'INSERT INTO Import Values(?, ?, ?)'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
		&lt;span class="p"&gt;}&lt;/span&gt;

		&lt;span class="nx"&gt;rs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'SELECT * FROM Import'&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="nx"&gt;rs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isValidRow&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
			&lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;field&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="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;' - '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;rs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;field&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="s1"&gt;' - '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;rs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
			&lt;span class="nx"&gt;rs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
		&lt;span class="p"&gt;}&lt;/span&gt;
		&lt;span class="nx"&gt;rs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;close&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="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
	&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description><author>Jurgens du Toit</author><pubDate>Thu, 18 Mar 2010 10:45:19 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/import_to_google_gears/index.html</guid></item><item><title>Redirect All Requests To Index.php Using .htaccess</title><link>http://jrgns.net/redirect_request_to_index/index.html</link><description>&lt;p&gt;In one of my pet projects, I redirect all requests to index.php, which then decides what to do with it:&lt;!--break--&gt;&lt;/p&gt;

&lt;p&gt;###Simple Example&lt;/p&gt;

&lt;p&gt;This snippet in your .htaccess will ensure that all requests for files and folders that does not exists will be redirected to index.php:&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This enables the rewrite engine:&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;RewriteEngine on
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This checks for existing folders (-d) and files (-f):&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;And this does the actual redirecting:&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;RewriteRule . index.php [L]
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;###Extended Example&lt;/p&gt;

&lt;p&gt;You can extend this to pass the requested path to the index.php file by modifying the &lt;code class="highlighter-rouge"&gt;RewriteRule&lt;/code&gt; to the following:&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;The &lt;code class="highlighter-rouge"&gt;^(.*)$&lt;/code&gt; part tells the rewrite module that we want to pass down the whole requested path as one parameter.&lt;/li&gt;
  &lt;li&gt;The &lt;code class="highlighter-rouge"&gt;QSA&lt;/code&gt; part tells the module to append any query strings to the request.&lt;/li&gt;
  &lt;li&gt;The &lt;code class="highlighter-rouge"&gt;?q=$1&lt;/code&gt; tells the module how to pass down the parameter. In this case, it’s passed down as the &lt;code class="highlighter-rouge"&gt;q&lt;/code&gt; parameter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can extend this even further by using regular expressions. For example:&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;RewriteRule ^([^/]*)(.*)$ index.php?first=$1&amp;amp;second=$2 [L,QSA]
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This will pass down the first part of the path as the &lt;code class="highlighter-rouge"&gt;first&lt;/code&gt; parameter, and the rest as the &lt;code class="highlighter-rouge"&gt;second&lt;/code&gt;. So the following request&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;http://yourhost.com/some/path/somewhere
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;will result in&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;http://yourhost.com/index.php?first=some&amp;amp;second=path/somewhere
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This allows for some creative ways to do clean URLs.&lt;/p&gt;

&lt;p&gt;###Trouble Shooting&lt;/p&gt;

&lt;p&gt;If it’s not working, make sure that mod_rewrite is installed on Apache. On a unix system you can just do&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;sudo a2enmod rewrite
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;to achieve that.&lt;/p&gt;</description><author>Jurgens du Toit</author><pubDate>Thu, 18 Mar 2010 10:42:15 GMT</pubDate><guid isPermaLink="true">http://jrgns.net/redirect_request_to_index/index.html</guid></item><item><title>i need textmate 2 or a 3d monitorprojector to</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/i-need-textmate-2-or-a-3d-monitorprojector-to</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Wed, 17 Mar 2010 11:25:04 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/i-need-textmate-2-or-a-3d-monitorprojector-to</guid></item><item><title>[Rails] MongoMapper on Rails 3 Master, Undefined 'to_key' Method</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-mongomapper-on-rails-3-master-undefined-to-key-method</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Wed, 17 Mar 2010 10:54:34 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-mongomapper-on-rails-3-master-undefined-to-key-method</guid></item><item><title>More than 100 candidates to Italian regional elections support Free Software</title><link>https://stop.zona-m.net/2010/03/more-than-100-candidates-to-italian-regional-elections-support-free-software/</link><description>&lt;p&gt;If you read Stop!/Zona-M regularly, you already know that &amp;ldquo;free as in freedom&amp;rdquo; software and file formats are an essential tool for anybody interested in reducing expenses in Public Administrations, make them more efficient and allow all citizens to control in the best possible way what they representatives are doing (and if you don&amp;rsquo;t know this yet, it&amp;rsquo;s time to read the article linked at the bottom of this page!).&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 17 Mar 2010 10:05:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/more-than-100-candidates-to-italian-regional-elections-support-free-software/</guid></item><item><title>Use the 'textmate' Command to Quickly Install Bundle Files</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/use-the-textmate-command-to-quickly-install-bundle-files</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Sun, 14 Mar 2010 12:46:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/use-the-textmate-command-to-quickly-install-bundle-files</guid></item><item><title>i hate it when this happens and i have a dozen of</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/i-hate-it-when-this-happens-and-i-have-a-dozen-of</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Sun, 14 Mar 2010 04:53:35 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/i-hate-it-when-this-happens-and-i-have-a-dozen-of</guid></item><item><title>A word about online spoof stories and chain email</title><link>https://stop.zona-m.net/2010/03/a-word-about-online-spoof-stories-and-chain-email/</link><description>&lt;p&gt;As I wrote in the &lt;a href="https://stop.zona-m.net/2009/12/the-online-loser-guide-2010-edition/"&gt;Online Loser Guide&lt;/a&gt;, Internet is a wonderful thing, but should be used with lots of attention. Following the flow without thinking you just risk to contribute to lots of confusion, as shown in the example below (which is quite recent, even if for several reasons I was unable to publish it earlier).&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 14 Mar 2010 03:39:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/a-word-about-online-spoof-stories-and-chain-email/</guid></item><item><title>[Rails] Use HAML templates with Devise</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-use-haml-templates-with-devise</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Sat, 13 Mar 2010 16:40:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-use-haml-templates-with-devise</guid></item><item><title>Improv and beyond</title><link>https://blog.steren.fr/2010/03/12/improv-and-beyond/</link><author>Steren's essays</author><pubDate>Fri, 12 Mar 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.steren.fr/2010/03/12/improv-and-beyond/</guid></item><item><title>Why I won't sign the "Internet For Democracy" Petition</title><link>https://stop.zona-m.net/2010/03/why-i-wont-sign-the-internet-for-democracy-petition/</link><description>&lt;p&gt;The online petition of the week, at least in Europe, is called &lt;a href="http://www.internetfordemocracy.net/"&gt;&amp;ldquo;Internet for Democracy - Shut Down the Europarliament. Now!&amp;quot;&lt;/a&gt;. I will &lt;strong&gt;not&lt;/strong&gt; sign it, and I recommend everybody to do the same. However, I do suggest that everybody reads it because it&amp;rsquo;s about very general issues that you should really, really think about.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 11 Mar 2010 08:59:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/why-i-wont-sign-the-internet-for-democracy-petition/</guid></item><item><title>getting gedit to work like magic</title><link>https://purpleidea.com/blog/2010/03/09/getting-gedit-to-work-like-magic/</link><description>&lt;p&gt;i use &lt;a href="http://en.wikipedia.org/wiki/GNU/Linux"&gt;gnu/linux&lt;/a&gt;. it&amp;rsquo;s probably no secret. what is more of a secret, is that i secretly (well actually not so secretly) love using &lt;a href="http://projects.gnome.org/gedit/"&gt;gedit&lt;/a&gt; for editing text. i still use &lt;a href="http://www.vim.org/"&gt;vim&lt;/a&gt;, echo (&lt;a href="http://www.gnu.org/"&gt;gnu&lt;/a&gt; bash) and &lt;a href="http://www.gnu.org/software/emacs/"&gt;emacs&lt;/a&gt; (but only for &lt;a href="http://orgmode.org/"&gt;org-mode&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;vim is really, really great. but for day to day full-screen coding, i love working in gedit. i only have one [1] longstanding gripe, and today i believe that it is solved. here is the magic combination which appeases my troubled spirit:&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Tue, 09 Mar 2010 19:17:51 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2010/03/09/getting-gedit-to-work-like-magic/</guid></item><item><title>first photoshop now textmate whats next</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/first-photoshop-now-textmate-whats-next</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Tue, 09 Mar 2010 12:43:35 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/first-photoshop-now-textmate-whats-next</guid></item><item><title>Advanced Search Query on GitHub</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/advanced-search-query-on-github</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Tue, 09 Mar 2010 10:54:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/advanced-search-query-on-github</guid></item><item><title>Mercurial changes how you work</title><link>https://www.craigpardey.com/post/2010-03-09-mercurial-changes-how-you-work/</link><description>&lt;p&gt;I&amp;rsquo;ve recently started using &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt;, which
is a &lt;a href="http://en.wikipedia.org/wiki/Distributed_revision_control"&gt;distributed version control
system&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;DVCSs initially struck me as a solution looking for a problem. SubVersion
seemed good enough for our purposes at work, but we decided to try out
Mercurial for one iteration to see what all the fuss was about.&lt;/p&gt;
&lt;p&gt;Perhaps the most significant difference between SubVersion and Mercurial is
that Mercurial uses a local repository. This subtle distinction significantly
changes how you work because you can commit your changes without having to
publish them. A &amp;lsquo;commit&amp;rsquo; in Mercurial is like a savepoint in database-speak -
it gives you a safe place to roll back to if things go awry. Once you&amp;rsquo;re happy
with your changes you can use the patch queue to fold all your commits into a
single changeset and &amp;lsquo;push&amp;rsquo; (i.e. publish) your changes to the central
repository.&lt;/p&gt;</description><author>Craig Pardey</author><pubDate>Tue, 09 Mar 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.craigpardey.com/post/2010-03-09-mercurial-changes-how-you-work/</guid></item><item><title>[Rails Tip] Making i18n Forms, the Easy Way</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/rails-tip-making-i18n-forms-the-easy-way</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Mon, 08 Mar 2010 07:41:00 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/rails-tip-making-i18n-forms-the-easy-way</guid></item><item><title>MoinMoin Columns Macro</title><link>https://peterlyons.com/problog/2010/03/moinmoin-columns/</link><description>&lt;p&gt;I just updated the "Columns" macro for the &lt;a href="http://moinmo.in/"&gt;MoinMoin&lt;/a&gt; wiki. This allows you to lay out a wiki page in two to ten columns. This makes it easier to get lots of info on one page in certain situations and I've used it to great benefit on my personal wiki where I organize my stuff.&lt;/p&gt;
&lt;p&gt;Here's the &lt;a href="http://moinmo.in/MacroMarket/Columns#peterlyonsupdate"&gt;MacroMarket page where my update has been posted for discussion&lt;/a&gt;. The original author may not like it, so it might not become the canonical fork, but that's how it goes with open source.&lt;/p&gt;
&lt;p&gt;Here's what it looks like with four columns:&lt;/p&gt;
&lt;p&gt;&lt;img alt="MoinMoin wiki page with Columns macro" src="https://peterlyons.com/problog/images/moinmoin_columns.png" /&gt;&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Mon, 08 Mar 2010 02:43:31 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/03/moinmoin-columns/</guid></item><item><title>this is from an email newsletter i received in my</title><link>http://persumi.com/u/fredwu/tech/e/blog/p/this-is-from-an-email-newsletter-i-received-in-my</link><description/><author>Fred Wu (@fredwu)</author><pubDate>Sat, 06 Mar 2010 01:46:43 GMT</pubDate><guid isPermaLink="true">http://persumi.com/u/fredwu/tech/e/blog/p/this-is-from-an-email-newsletter-i-received-in-my</guid></item><item><title>When traditional media want copyright for themselves, but violate others' copyright</title><link>https://stop.zona-m.net/2010/03/when-traditional-media-want-copyright-for-themselves-but-violate-others-copyright/</link><description>&lt;p&gt;&lt;strong&gt;UPDATE MARCH 4TH, 2010, 20.30 GMT+1: the unauthorized copy mentioned below has been removed by the staff of the Bellunopress website, shortly after I asked them to comply with the terms of use of this website. I am happy to see such a confirmation that this incident was just a temporary slip, without (as I had said since the beginning, cfr below) any intention at all to harm anybody: This page remains online, of course, as useful resource for whoever should have the same problem in the future with other websites.&lt;/strong&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 04 Mar 2010 10:38:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/when-traditional-media-want-copyright-for-themselves-but-violate-others-copyright/</guid></item><item><title>Read GET URL variables using JavaScript</title><link>https://thomashunter.name/posts/2010-03-04-read-get-url-variables-using-javascript</link><description>Function which will either build an associative array of the GET URL variables on the current page, or return the value of a specified GET variable in JavaScript.</description><author>Thomas Hunter II</author><pubDate>Thu, 04 Mar 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2010-03-04-read-get-url-variables-using-javascript</guid></item><item><title>Taxing every citizen for Microsoft Windows problems? Are we insane?</title><link>https://stop.zona-m.net/2010/03/taxing-every-citizen-for-microsoft-windows-problems-are-we-insane/</link><description>&lt;p&gt;Just when you think you&amp;rsquo;ve heard everything, something new arrives &lt;strong&gt;(update 2010/10/07: actually, &lt;a href="https://stop.zona-m.net/2010/10/computer-health-certificates-for-surfing-the-internet-are-you-serious/"&gt;S. Charney just did it again&lt;/a&gt;)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Two years ago, we heard that &lt;a href="http://www.softlist.net/press/pandalabs_says_half_a_million_computers_are_infected_with_malicious_bots_every_day-62.html"&gt;half a million computers are infected with malicious bots every day&lt;/a&gt; (a &amp;ldquo;bot&amp;rdquo; is a software program that enters your computer from the Internet or inside infected files, then runs in the background to steal your data, send spam or wreak havoc in some other way).&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 03 Mar 2010 07:01:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/taxing-every-citizen-for-microsoft-windows-problems-are-we-insane/</guid></item><item><title>n900 features that should be added</title><link>https://purpleidea.com/blog/2010/03/02/n900-features-that-should-be-added/</link><description>&lt;p&gt;i decided i&amp;rsquo;d compile a short list of features / functionality which should be added to the new &lt;a href="http://maemo.nokia.com/n900/"&gt;nokia N900&lt;/a&gt; to make it totally pro. it&amp;rsquo;s pretty good as it is, despite it not working with the &lt;a href="http://www.bell.ca/"&gt;bell&lt;/a&gt; networks. i&amp;rsquo;ve attempted to order this list in order of importance (more or less).&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;all the closed source bits must become free software under a &lt;a href="http://www.gnu.org/licenses/gpl.html"&gt;GPL&lt;/a&gt; or &lt;a href="http://www.fsf.org/licensing/licenses/agpl-3.0.html"&gt;AGPL&lt;/a&gt; license.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;it should support a fully encrypted file system. if i lose my phone, i shouldn't worry that all my data or contacts get stolen!&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;addresses that are stored in contacts should integrate with maps program. (currently they only display)&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;the stock maps tool should integrate nicely with the rest of the phone. currently it's a bit of a sore thumb. confusing too. also it's green.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;screen/interfaces should support multi touch.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;user should be able to choose username instead of default "user"&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;hostname should match bluetooth name, etc... on device, one name.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;it should support the "usb on the go" host functionality. i'd like to be able to plug in a usb key and be able to copy files to and from it.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;better battery, if even only an upgrade to the 1500mAh version.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;once plugged in via usb, it would be nice to be able to unmount as usb device while retaining the charging functionality. currently, when you click on the notification area thing, usb mass storage mode is connected, but there is no software way to disconnect. (that i know of) this is important because you can't access the files through your phone when mounted.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;user should be able to specify which accounts notify you of new messages and which don't. same for which do periodic updates and when.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;default shell should be bash, not busybox, and it should include usual software like "man".&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;should include stock ir remote control software, that has a large database of hardware including radios, air conditioners and weird tvs. irreco needs some serious work.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;people sometimes click on contacts to view data eg a phone number or address to use on a different phone or otherwise. it should be easy to zoom into to read.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;my gps should just work. (it doesn't seem to at the moment for some reason)&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;since i change my wireless WEP keys often, and always forget them, the phones wireless manager should integrate nicely with aircrack-ng to easily help me recover my lost WEP key.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;it could be a little thinner. it's a bit of a brick as it stands. i could overlook this problem if it did everything above.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;battery life indicator could benefit from having a countdown timer (sure it would change based on usage, but it would give users an approximate idea)&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="background-color: #ffffff;"&gt;the cameras should be able to function as a usb camera for the computer when the device is plugged in. (over bluetooth could be nice too)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
unfortunately i haven't mentioned this phones positive features-- many before me have-- there are many! overall it's a nice package and i look forward to seeing improvements to the above.
&lt;p&gt;&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://m9rx.com/" target="_blank"&gt;hire James&lt;/a&gt; and his team at &lt;a href="https://m9rx.com/" target="_blank"&gt;m9rx corporation&lt;/a&gt;.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://mastodon.social/@purpleidea" target="_blank"&gt;follow James on Mastodon&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://twitter.com/intent/follow?screen_name=purpleidea" target="_blank"&gt;follow James on Twitter&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://github.com/sponsors/purpleidea/" target="_blank"&gt;support James on GitHub&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://www.patreon.com/purpleidea" target="_blank"&gt;support James on Patreon&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;
&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Tue, 02 Mar 2010 19:59:47 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2010/03/02/n900-features-that-should-be-added/</guid></item><item><title>Do we deserve traffic jams? Ask cats and dogs</title><link>https://stop.zona-m.net/2010/03/do-we-deserve-traffic-jams-ask-cats-and-dogs/</link><description>&lt;p&gt;It&amp;rsquo;s weird how things that seem completely unrelated are, in fact, more or less connected. On February 5th, 2010, just five days after the &lt;a href="https://stop.zona-m.net/it/2010/01/una-domanda-da-farsi-durante-i-blocchi-del-traffico-a-milano-e-altrove/"&gt;traffic ban in Milan, with caused a storm of discussions&lt;/a&gt;, an absolutely unusual event, that is &lt;a href="http://milano.corriere.it/milano/notizie/cronaca/10_febbraio_5/maltempo-neve-lombardia-milano-precipitazioni-inquinamento-1602410945957.shtml?fr=box_primopiano"&gt;some inches of snow falling in full winter&lt;/a&gt;, created even more chaos than usual on the streets of Milan and all the surrounding area.&lt;/p&gt;
&lt;p&gt;During that afternoon, the speakers of &lt;a href="http://www.caterpillar.rai.it/"&gt;Caterpillar (a popular talk-show on a national radio station&lt;/a&gt; asked to all Milan citizens who were listening inside their cars to call and tell how long they had already been blocked in the streets and how long they thought they would still remain there.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 02 Mar 2010 03:50:33 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/do-we-deserve-traffic-jams-ask-cats-and-dogs/</guid></item><item><title>Again on public or private water (this time in Rome)</title><link>https://stop.zona-m.net/2010/03/again-on-public-or-private-water-this-time-in-rome/</link><description>&lt;p&gt;On February 11th, 2010 a &lt;a href="http://www.asca.it/news-ACEA____MANI_BLU___IN_PIAZZA_GIOVEDI__A_ROMA_CONTRO_PRIVATIZZAZIONE-892801-POL-1.html"&gt;public rally against the complete privatization of Acea&lt;/a&gt; took place in Rome. &lt;a href="http://www.aceaspa.it"&gt;Acea&lt;/a&gt; is the partly public company that manages the water distribution system in Rome and other cities of the Lazio region. The purpose of the rally was&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 02 Mar 2010 03:27:26 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/again-on-public-or-private-water-this-time-in-rome/</guid></item><item><title>Zend Certified Engineer (ZCE) Study Guide Links</title><link>https://thomashunter.name/posts/2010-03-02-zend-certified-engineer-zce-study-guide-links</link><description>The listing of items from ZCE for the exam, with relevant links compiled by Renowned Media.</description><author>Thomas Hunter II</author><pubDate>Tue, 02 Mar 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2010-03-02-zend-certified-engineer-zce-study-guide-links</guid></item><item><title>Junior High students in Monza build their own Ubuntu computers</title><link>https://stop.zona-m.net/2010/03/junior-high-students-in-monza-build-their-own-ubuntu-computers/</link><description>&lt;p&gt;Last November, the &lt;a href="http://www.smsconfalonieri.it"&gt;Confalonieri Public Junior High School&lt;/a&gt; in &lt;a href="http://www.hellomilano.it/Index/Monza/Monza.htm"&gt;Monza, Northern Italy&lt;/a&gt; set up a really interesting and original optional course for its students. When I heard about it on an &lt;a href="http://lists.linux.it/pipermail/scuola/2010-January/000534.html"&gt;Italian mailing list&lt;/a&gt; I contacted the two teachers who run the course, Fabio Frittoli and Francesco De Gennaro (quoted below as F&amp;amp;F for brevity) to know something more.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Mon, 01 Mar 2010 04:40:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/03/junior-high-students-in-monza-build-their-own-ubuntu-computers/</guid></item><item><title>Valuing Employees</title><link>/2010/02/27/Valuing-Employees/</link><description>&lt;p&gt;A coworker and I were recently having conversations over employee compensation. We covered the gambit around employee feedback, evals, and compensation. He mentioned Joel Spolsky, and his format of being very open about where individuals were ranked. He also pointed me to: &lt;a href="http://alumnit.ca/~apenwarr/log/?m=200904#05"&gt;http://alumnit.ca/~apenwarr/log/?m=200904#05&lt;/a&gt; which provided good insight, though I most like his final point. The end goal with evaluating your employees and compensation for them is to make sure they&amp;rsquo;re happy. Sure the business should make sure they feel like you&amp;rsquo;re worth what you&amp;rsquo;re being paid, but usually there is no question about this, or if there is you&amp;rsquo;re quickly escorted out the door. While this is an interesting model, I think it can be much simpler, but companies usually confine themselves too much in giving credit to employees.&lt;/p&gt;
&lt;p&gt;There was another recent occasion where a statement was made of &amp;rsquo;no more playing stick them up, until next year&amp;rsquo;. When I first thought about this, I knew I didn&amp;rsquo;t like the statement, but was unsure of why. The reason is that there can be several reasons why employees leave. Only one of which is compensation. If you feel you&amp;rsquo;re being adequately compensated for the job you&amp;rsquo;re doing it makes sense.&lt;/p&gt;
&lt;p&gt;But there&amp;rsquo;s another reason thats very clear in the valley but less clear in other parts of the country. Paul Buchheit at Startup School this weekend in Berkeley said it very well: If you&amp;rsquo;ve been at your job too long, QUIT. Meaning if you&amp;rsquo;re comfortable, you know the people, you know how to do your job, and you&amp;rsquo;re not being challenged, then you should go somewhere where you are challenged.&lt;/p&gt;
&lt;p&gt;So what does this have to do in regards to playing stick em up? Well if you&amp;rsquo;re at a comfortable place you should be compensate appropriately that&amp;rsquo;s fair. However if you&amp;rsquo;re at a comfortable place, you should either find ways to be challenged there or move on. If you&amp;rsquo;re challenged there it means your role over time will change, there&amp;rsquo;s not a standard guide for how quickly you become experienced in that role. It it&amp;rsquo;s two weeks, then salary should be re-evaluated then, if it&amp;rsquo;s 3 years salary should perhaps be re-evaluated yearly to keep up with changes in value to the dollar, but nothing more substantial to that.&lt;/p&gt;
&lt;p&gt;At the end of the day it means you have to deliver value to an employer, and as long as your doing that the employer should recognize you for the value you deliver, based on merit, not based on policies laid out. Whether you jump to an extreme of merit/value being very clear such as a Joel Spolsky method, or follow something more traditional of a large company, the bottom line is you should give your employees what they&amp;rsquo;re worth, and as an employee its what you should expect.&lt;/p&gt;
&lt;p&gt;A coworker (&lt;!-- raw HTML omitted --&gt;@danfarina&lt;!-- raw HTML omitted --&gt;) and I were recently having conversations over employee compensation. We covered the gambit around employee feedback, evals, and compensation. He mentioned Joel Spolsky, and his format of being very open about where individuals were ranked. He also pointed me to: &lt;!-- raw HTML omitted --&gt;&lt;a href="http://alumnit.ca/~apenwarr/log/?m=200904#05"&gt;http://alumnit.ca/~apenwarr/log/?m=200904#05&lt;/a&gt;&lt;!-- raw HTML omitted --&gt; which provided good insight, though I most like his final point. The end goal with evaluating your employees and compensation for them is to make sure they&amp;rsquo;re happy. Sure the business should make sure they feel like you&amp;rsquo;re worth what you&amp;rsquo;re being paid, but usually there is no question about this, or if there is you&amp;rsquo;re quickly escorted out the door. While this is an interesting model, I think it can be much simpler, but companies usually confine themselves too much in giving credit to employees.&lt;/p&gt;
&lt;p&gt;There was another recent occasion where a statement was made of &amp;rsquo;no more playing stick them up, until next year&amp;rsquo;. When I first thought about this, I knew I didn&amp;rsquo;t like the statement, but was unsure of why. The reason is that there can be several reasons why employees leave. Only one of which is compensation. If you feel you&amp;rsquo;re being adequately compensated for the job you&amp;rsquo;re doing it makes sense.&lt;/p&gt;
&lt;p&gt;But there&amp;rsquo;s another reason thats very clear in the valley but less clear in other parts of the country. Paul Buchheit at Startup School this weekend in Berkeley said it very well: If you&amp;rsquo;ve been at your job too long, QUIT. Meaning if you&amp;rsquo;re comfortable, you know the people, you know how to do your job, and you&amp;rsquo;re not being challenged, then you should go somewhere where you are challenged.&lt;/p&gt;
&lt;p&gt;So what does this have to do in regards to playing stick em up? Well if you&amp;rsquo;re at a comfortable place you should be compensate appropriately that&amp;rsquo;s fair. However if you&amp;rsquo;re at a comfortable place, you should either find ways to be challenged there or move on. If you&amp;rsquo;re challenged there it means your role over time will change, there&amp;rsquo;s not a standard guide for how quickly you become experienced in that role. It it&amp;rsquo;s two weeks, then salary should be re-evaluated then, if it&amp;rsquo;s 3 years salary should perhaps be re-evaluated yearly to keep up with changes in value to the dollar, but nothing more substantial to that.&lt;/p&gt;
&lt;p&gt;At the end of the day it means you have to deliver value to an employer, and as long as your doing that the employer should recognize you for the value you deliver, based on merit, not based on policies laid out. Whether you jump to an extreme of merit/value being very clear such as a Joel Spolsky method, or follow something more traditional of a large company, the bottom line is you should give your employees what they&amp;rsquo;re worth, and as an employee its what you should expect.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Sun, 28 Feb 2010 03:10:23 GMT</pubDate><guid isPermaLink="true">/2010/02/27/Valuing-Employees/</guid></item><item><title>⭐️ Retrospective Rules</title><link>https://james-carr.org/posts/retrospective-rules/</link><description>I am preparing to conduct a retrospective for my team at my current client site. To guide me, I have been reviewing notes from previous retrospectives I have either attended or led. In doing so, I have noticed an emerging pattern of behavior that can significantly impact the success of a retrospective. Here are a few key factors that I believe are most important:
Retrospective Belongs to the Team
Possibly the most important observation I&amp;rsquo;ve made is that retrospectives are only effective if they truly belong to the team.</description><author>James Carr</author><pubDate>Sun, 28 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://james-carr.org/posts/retrospective-rules/</guid></item><item><title>RabbitMQ, Node.js and Java Goodness</title><link>https://james-carr.org/posts/rabbitmq-nodejs-and-java-goodness/</link><description>Tuesday night I gave a talk at a local Java User Group (that’s four JUG appearances this year, hoorah!) on RabbitMQ and demonstrated not just using it communicate between two java processes, but also as a way of communicating asynchronously between a node.js application and a java application… I have to say it was pretty awesome and I really think it opens the doors for integrating node.js applications seemlessly into an existing java infrastructure.</description><author>James Carr</author><pubDate>Sun, 28 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://james-carr.org/posts/rabbitmq-nodejs-and-java-goodness/</guid></item><item><title>Why Flash-based Websites Are Usually a Bad Idea</title><link>https://arnorhs.dev/posts/2010-02-27/why-flash-based-websites-are-usually-a-bad-idea/</link><description>Through the last years developing websites for various types of clients - from small start ups, retailers, organizations to bigger companies - I've come to realize one thing pretty clearly. Everybody loves Flash. Well, almost everybody...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sat, 27 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-02-27/why-flash-based-websites-are-usually-a-bad-idea/</guid></item><item><title>Database Change Management mithilfe von VCS: Teil 1</title><link>https://manuel.kiessling.net/2010/02/26/database-change-management-mithilfe-von-vcs-teil-1/</link><description>Dieser Artikel ist Work in Progress!
Vorüberlegungen Dieses Dokument beschreibt Werkzeuge und Prozesse, um Datenbankänderungen innerhalb von großen Softwareprojekten einfach, fehlerfrei und nachvollziehbar durchzuführen und zu managen.
Zentraler Ansatz dieser Lösung ist: Datenbankänderungen und Codeänderungen sind prinzipiell genau dasselbe. Denn Datenbankänderungen haben genau wie Codeänderung die folgenden Eigenschaften:
 Sie ändern das Verhalten des Softwaresystems Sie entwickeln sich verteilt in verschiedenen Projekten bzw. Branches, und müssen für Abnahme und Rollout/Release zusammengeführt werden Beim Zusammenführen kann es Überschneidungen und Konflikte geben, die man mitbekommen und lösen können möchte Man möchte sie auch später noch nachvollziehen können, also sehen wer wann was gemacht hat Man möchte diese Änderungen ggf.</description><author>Home on The Log Book of Manuel Kießling</author><pubDate>Fri, 26 Feb 2010 17:13:00 GMT</pubDate><guid isPermaLink="true">https://manuel.kiessling.net/2010/02/26/database-change-management-mithilfe-von-vcs-teil-1/</guid></item><item><title>Italian entrepreneur fights proprietary file formats in Public Administrations</title><link>https://stop.zona-m.net/2010/02/italian-entrepreneur-fights-proprietary-file-formats-in-public-administrations/</link><description>&lt;p&gt;As I already explained in another article &lt;a href="https://stop.zona-m.net/2010/02/file-formats-alphabets-and-public-money-did-you-know-that/"&gt;file formats are extremely important&lt;/a&gt;: unless, at least in Public Administrations (PAs), only open file formats are used, serious amounts of public money can go to waste, important public digital documents may become unreadable and private citizens or businesses may be forced to useless expenses if they want to interact with PAs.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 26 Feb 2010 10:43:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/02/italian-entrepreneur-fights-proprietary-file-formats-in-public-administrations/</guid></item><item><title>JRebel and Tapestry working together</title><link>https://www.craigpardey.com/post/2010-02-26-jrebel-and-tapestry-working-together/</link><description>&lt;p&gt;I&amp;rsquo;ve recently started trialling
&lt;a href="http://www.zeroturnaround.com/jrebel/"&gt;JRebel&lt;/a&gt; at work. JRebel is a piece of
software that hot-swaps your code so that changes made in your IDE are
reflected in your application server &lt;em&gt;without&lt;/em&gt; requiring a restart.&lt;/p&gt;
&lt;p&gt;The benefits of this idea are fairly obvious. I no longer have to wait 1 - 2
minutes for JBoss to restart each time I correct a spelling mistake etc. The
time saved by not restarting probably make the product worth the $US149
licensing fee.&lt;/p&gt;</description><author>Craig Pardey</author><pubDate>Fri, 26 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.craigpardey.com/post/2010-02-26-jrebel-and-tapestry-working-together/</guid></item><item><title>George Harrison Portrait</title><link>https://blog.yiningkarlli.com/2010/02/george-harrison-portrait.html</link><description>&lt;p&gt;For Digital Design Foundations, our latest project was to do a portrait of a famous person with interesting looking hair. We were supposed to do these in Illustrator with black, white, and two colors of our choosing (the two colors allowed us to use as many opacity settings as we wanted for each color).&lt;/p&gt;

&lt;p&gt;I decided to do George Harrison from the Beatles:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Feb/HarrisonFinalv2_full.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Feb/HarrisonFinalv2.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The background pattern is influenced by the psychedelic pattern on the inner sleeve of Sgt. Pepper’s Lonely Hearts Club Band.&lt;/p&gt;

&lt;p&gt;Here are some studies that show the progression of the portrait and some of the variations his mustache went though:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Feb/HarrisonStudiesv2_full.png"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Feb/HarrisonStudiesv2.png" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Tue, 23 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/02/george-harrison-portrait.html</guid></item><item><title>Stats on Spam</title><link>https://arnorhs.dev/posts/2010-02-23/stats-on-spam/</link><description>Now I've been collecting spam for a little over a year on spambotlove.com. The purpose of which I do not know, yet. I kind of forgot about the project until just recently, so I started harvesting some stats from the database. Currently we have 729,255 records in the database. That's 3 MB of data.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Tue, 23 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-02-23/stats-on-spam/</guid></item><item><title>a custom epiphany location bar</title><link>https://purpleidea.com/blog/2010/02/22/a-custom-epiphany-location-bar/</link><description>&lt;p&gt;since i do much research on the internets, i often find myself in a web browser. my favourite of the lot is &lt;a href="http://projects.gnome.org/epiphany/"&gt;epiphany&lt;/a&gt;. this post isn&amp;rsquo;t about its merits or failures, but about the awesome way to make my location bar be exactly how i like it: monospaced.&lt;/p&gt;
&lt;p&gt;just add the following into your ~/.gtkrc-2.0 file and then restart epiphany. feel free to modify as you wish.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-fallback"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;# ~/.gtkrc-2.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;style "Epiphany_Locationbar" {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;# leave out the font size if you wish
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;font_name = "Monospace 12"
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;#bg[NORMAL] = "#ff0000"
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-fallback"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;# both of these seem to work...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;#widget "*.EphyLocationEntry.*" style "Epiphany_Locationbar"
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;widget_class "*.EphyLocationEntry.*" style "Epiphany_Locationbar"
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;thanks to &lt;a href="http://raphael.slinckx.net/blog/2006-03-01/epiphany-url-entry-in-monospace"&gt;raphael&lt;/a&gt; for the original post, and the #epiphany developers.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Mon, 22 Feb 2010 19:04:38 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2010/02/22/a-custom-epiphany-location-bar/</guid></item><item><title>Spawn points and more networking</title><link>https://etodd.io/2010/02/21/spawn-points-and-more-networking/</link><description>&lt;p&gt;Networking has received yet another performance boost. I discarded Panda3D's network classes in favor of Python's sockets. I also switched to a single-threaded, non-blocking system that performs significantly better and clears up the messy Panda3D threads that were acting very strangely. I also improved the connection process; both the client and server now send packets to each other while connecting, in an attempt to punch through even the most draconian of NAT schemes.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Sun, 21 Feb 2010 22:58:39 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/02/21/spawn-points-and-more-networking/</guid></item><item><title>We took uboot.com online 10 years ago</title><link>https://www.databasesandlife.com/we-took-uboot-com-online-10-years-ago/</link><description>&lt;p&gt;At approx 6:30am on Monday 21st Feb 2000 my boss, my colleague and I took the first version of Uboot online.&lt;/p&gt;
&lt;p&gt;It certainly didn&amp;rsquo;t have all the features it needed back then, it took us one extra week to add an address book to the messaging functionality, for example. And it didn&amp;rsquo;t have any photo sharing, video sharing, blogging, or the e-commerce functions that it has now.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s actually amazing how fast we did develop the first version: a team of three software developers, I started at the company on 3rd Jan 2000 and completed two other projects before starting Uboot; the first commit was on 19th Jan 2000.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Sun, 21 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/we-took-uboot-com-online-10-years-ago/</guid></item><item><title>Accessing CodeIgniter Session Data using External Scripts</title><link>https://thomashunter.name/posts/2010-02-20-accessing-codeigniter-session-data-using-external-scripts</link><description>PHP Sourcecode so that a non CodeIgniter PHP script can access data stored in the users CodeIgniter session.</description><author>Thomas Hunter II</author><pubDate>Sat, 20 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2010-02-20-accessing-codeigniter-session-data-using-external-scripts</guid></item><item><title>Hello world</title><link>https://arnorhs.dev/posts/2010-02-20/hello-world-2/</link><description>First post Then I imported the blog entries from the SpamBotLove blog (it was a tumblr blog), so there are older entries here</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sat, 20 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-02-20/hello-world-2/</guid></item><item><title>Where's your logic?</title><link>https://arnorhs.dev/posts/2010-02-20/wheres-your-logic/</link><description>_Ok, this is my first blog post here, so it probably sucks. If you value your time, don't read this._ When writing code these days, I keep running into these dilemmas. With the way the web a...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sat, 20 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2010-02-20/wheres-your-logic/</guid></item><item><title>Learning PHP/mySQL Part 1</title><link>https://captnemo.in/blog/2010/02/20/learning-phpmysql-part-1/</link><description>&lt;p&gt;Over the past 2 months, I’ve been learning PHP/mySQL as a great language. After helping out a lot of people, I’ve decided to write a tutorial on using PHP/mySQL to create a cool website. For the entire duration of this tutorial, this is the list of softwares we will be working with:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://www.google.com/search?btnI=I'm Feeling Lucky&amp;amp;q=XAMPP Server Lite version"&gt;XAMPP Server Lite version&lt;/a&gt; (to get apache &amp;amp; mySQL)
&lt;a href="http://www.mediafire.com/?4eemynbynjw" target="_blank"&gt;Dreamweaver CS4&lt;/a&gt; (For Template Support). Alternatively use &lt;a href="http://www.google.com/search?btnI=I'm Feeling Lucky&amp;amp;q=Microsoft Expression Web 3"&gt;Microsoft Expression Web 3&lt;/a&gt;.
&lt;a href="http://www.google.com/search?btnI=I'm Feeling Lucky&amp;amp;q=Notepad++"&gt;Notepad++&lt;/a&gt; (Its a cool editor)
&lt;a href="http://www.google.com/search?btnI=I'm Feeling Lucky&amp;amp;q=PHP Manual"&gt;PHP Manual&lt;/a&gt; (download the full html version)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The website we will be developing is called Artemis Fowl Files (AFF for short). It is a small website with several features that we shall develop over the length of the tutorial.&lt;/p&gt;

&lt;h2 id="installing-php--mysql-using-xampp"&gt;Installing PHP &amp;amp; mySQL using XAMPP&lt;/h2&gt;

&lt;p&gt;PHP is a server side scripting language. Which means that PHP is run on the web server itself. For example any PHP script running at Google.com will remain on the server, and not reach you (the client). By contrast, JavaScript runs on the client side, i.e. any JS code must be transmitted to the client before being executed.&lt;/p&gt;

&lt;p&gt;This is how a basic PHP script actually runs:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;PHP source File –&amp;gt; PHP Parser (running on the web server) –&amp;gt; Becomes an HTML file –&amp;gt; HTML File sent to Client&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which means that the PHP source file is run on the server, which converts the file to a pre-calculated html file, which is then sent to the client. Lets write some basic php coding.&lt;/p&gt;

&lt;div class="language-plaintext highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;1:  &amp;lt;HTML&amp;gt;
2:  &amp;lt;HEAD&amp;gt;&amp;lt;TITLE&amp;gt;Sample PHP File&amp;lt;/TITLE&amp;gt;&amp;lt;/HEAD&amp;gt;
3:  &amp;lt;BODY&amp;gt;
4:  &amp;lt;?php
5:  echo "This is a sample PHP File";
6:  ?&amp;gt;
7:  &amp;lt;/BODY&amp;gt;
8:  &amp;lt;/HTML&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The basic context of PHP is that the only code that is considered PHP is that covered between &amp;lt;?PHP and ?&amp;gt; blocks. Anything outside these is neglected and remains the same(i.e. it is not run on the server). The echo command sends the text string to the html file. All this means that the file received by the client will look like this:&lt;/p&gt;

&lt;div class="language-plaintext highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;1:  &amp;lt;HTML&amp;gt;&amp;lt;HEAD&amp;gt;&amp;lt;TITLE&amp;gt;Sample PHP File&amp;lt;/TITLE&amp;gt;&amp;lt;/HEAD&amp;gt;
2:  &amp;lt;BODY&amp;gt;
3:  This is a sample PHP File
4:  &amp;lt;/BODY&amp;gt;
5:  &amp;lt;/HTML&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is what you will  get if you ran the script on a test server. But before doing that we must install XAMPP, and do some basic setup stuff.&lt;/p&gt;

&lt;p&gt;Download, and Extract XAMPPlite.exe anywhere in your computer. Go to where you installed it and run setup_xampp.bat. This will automatically start the Apache Server, and the mysql Server by default. Also try tinkering with XAMPP-Control and see what runs it.&lt;/p&gt;

&lt;p&gt;Now open your web browser (Firefox/Chrome is preferred) and open &lt;a href="http://127.0.0.1"&gt;http://127.0.0.1&lt;/a&gt;. This IP address is a loopback IP address and always refers to this computer itself (yours). Now you should see a XAMPP splash screen. Go ahead and explore. As of now, what you’ve achieved is this : Installed Apache and the mySQL server. Now we need to change the settings for mysql. Open &lt;a href="http://127.0.0.1/security/xamppsecurity.php"&gt;http://127.0.0.1/security/xamppsecurity.php&lt;/a&gt; and change the mysql root password(its blank by default). Also set a password on the xampp directory, so that others cant access these settings. Remember the mysql root password, for it will be useful later on.&lt;/p&gt;

&lt;p&gt;Now comes the part where we actually sit down to write some code. We will be developing the mysql parts in the next segment. However we still need to do some other little things before we reach that part.&lt;/p&gt;

&lt;h2 id="creating-the-dreamweaver-template"&gt;Creating The Dreamweaver Template&lt;/h2&gt;

&lt;p&gt;Now, call me lazy, but I don’t like designing themes, and CSS for my websites. I usually use a free one. And for the rest of this tutorial, I assume you will do the same. We need to create a Dreamweaver website using a readymade CSS Template. To get a template head on to &lt;a href="http://www.freecsstemplates.org"&gt;http://www.freecsstemplates.org&lt;/a&gt;. I choose &lt;a href="http://www.freecsstemplates.org/preview/reckoning" target="_blank"&gt;this&lt;/a&gt; template. Feel free to choose anything. It does not really matter which, but take care not to download a three column template, because what we will be developing is quite basic.&lt;/p&gt;

&lt;p&gt;Create a directory called artemis inside htdocs folder(found inside xampp). Extract the css template files to the artemis folder such that the index.html file is inside xampp\artemis . Now head to your browser and open &lt;a href="http://127.0.0.1/artemis"&gt;http://127.0.0.1/artemis&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If all went well, you should now see the template theme. Now we must convert this css template into a Dreamweaver template. Open the index.html file in  Dreamweaver. We have to mark certain areas that we intend to edit in each document as editable. For instance the top header in each document must remain the same and would not be editable. But the sidebar content may need to change as per each page on our site. Taking this further the footer will be the same for each page. To create an editable region, just select a sample text from the main text (the one on that looks like the blog entry) and right click –&amp;gt;Templates-&amp;gt;Create Editable Region.&lt;/p&gt;

&lt;p&gt;Dreamweaver will give a warning that the current document will be converted to a template. That is what we want. Give a name to the region(lets call it ‘main’). Now delete everything other than this main region from the right column(ie the blog entry column. You may need to switch to the split view to cleanly delete the html markup.&lt;/p&gt;

&lt;p&gt;Similarly create another editable region for the sidebar. Remember to delete everything else in the sidebar as well. Now there is something to Dreamweaver which requires you to create a “site” before you can create a template. So go to Site Menu and click on New Site. Choose a site name (Artemis) and enter the correct web address where you can access index.html (&lt;a href="http://127.0.0.1/artemis"&gt;http://127.0.0.1/artemis&lt;/a&gt; or &lt;a href="http://localhost/artemis"&gt;http://localhost/artemis&lt;/a&gt;). Tell Dreamweaver that you want to use a server technology (PHP mySQL). Choose edit and test locally(because we don’t yet have access to an external web server).&lt;/p&gt;

&lt;p&gt;Once you’ve created a site, you can save the web template. (Ctrl S). Currently no templates exist in our web site, So we will create one and call it “main template”. If Dreamweaver asks you to update links, press yes.&lt;/p&gt;

&lt;p&gt;Now we will create our basic home page using this template. Press Ctrl+N to create a new page. On the left choose “Page from Template”, Choose the site as Artemis, and the template as well. Press Create, and viola, we have our homepage. You may see that the heading, footer, and links are not changeable, because they’re not defined as “editable” in the template. However the regions you choose to be editable are marked as such. Try writing some basic text in the sidebar and in the main content screen, and then save the file as index.php.&lt;/p&gt;

&lt;p&gt;Now open &lt;a href="http://127.0.0.1/artemis/"&gt;http://127.0.0.1/artemis/&lt;/a&gt; in your computer, and be greeted with your newest creation. It’ is still, as of now, a static site, with links that don’t work and no dynamism, but we will make it better in the next part.&lt;/p&gt;

&lt;p&gt;If you had trouble following this tutorial anywhere feel free to post comments, or tweet me @captn3m0. I will be happy to reply. Further if you feel that you missed something, here is my work for you to compare with:&lt;/p&gt;

&lt;p&gt;//#todo add link to zip file here&lt;/p&gt;</description><author>Nemo's Home</author><pubDate>Sat, 20 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://captnemo.in/blog/2010/02/20/learning-phpmysql-part-1/</guid></item><item><title>How to CANCEL a query running in another session?</title><link>https://tanelpoder.com/2010/02/17/how-to-cancel-a-query-running-in-another-session/</link><description>&lt;p&gt;Here&amp;rsquo;s an article of mine, explaining some of the Oracle internals and the OS touch point. It actually goes beyond explaining just commands for canceling SQL. I have written a couple of &lt;em&gt;updates&lt;/em&gt; into the beginning of this article about SQL cancellation commands, but if you want to learn the internals, scroll down to &lt;em&gt;The original article&lt;/em&gt; section.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update 1:&lt;/strong&gt;&lt;/em&gt; As the beginning says, this article was meant as something interesting about Oracle internals and CTRL+C / OCICancel() handling. There&amp;rsquo;s a &lt;a href="https://docs.oracle.com/cd/E18283_01/appdev.112/e16760/d_resmgr.htm"&gt;documented way&lt;/a&gt; for canceling session calls if you are running Oracle Enterprise Edition and are currently using resource manager:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 18 Feb 2010 06:14:54 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/02/17/how-to-cancel-a-query-running-in-another-session/</guid></item><item><title>The Importance of Maintaining a Sustainable Pace</title><link>https://james-carr.org/posts/the-importance-of-maintaining-a-sustainable-pace/</link><description>When it comes to working in the software industry, I believe I can best summarize what the majority of developers and teams do by quoting Pink Floyd&amp;rsquo;s song &amp;ldquo;Breathe&amp;rdquo;:
Run, rabbit run Dig that hole, forget the sun And when at last the work is done Don’t sit downIt’s time to dig another one
I think that the verse goes quite well with the default behavior of developers when faced with an overwhelming amount of work on a project.</description><author>James Carr</author><pubDate>Thu, 18 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://james-carr.org/posts/the-importance-of-maintaining-a-sustainable-pace/</guid></item><item><title>Why every citizen should read the Open Government book</title><link>https://stop.zona-m.net/2010/02/why-every-citizen-should-read-the-open-government-book/</link><description>Open Government - Collaboration, Transparency, and Participation in Practice is a book (DISCLAIMER: I&amp;rsquo;m one of the authors, see below) that explains how governments and local Public Administrations can use digital technologies to work more efficiently, save lots of taxpayers money and let citizens control what public officers are actually doing. Why is something like this very important for all citizens?
Because, as I already explained in the Online Loser Guide, digital technologies and the Internet can be either a huge help to make real democracy happen, or just a new, more powerful system for centralized control.</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 17 Feb 2010 10:15:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/02/why-every-citizen-should-read-the-open-government-book/</guid></item><item><title>File formats, alphabets and public money: did you know that...</title><link>https://stop.zona-m.net/2010/02/file-formats-alphabets-and-public-money-did-you-know-that/</link><description>&lt;p&gt;File formats are the rules that define the meaning of all the sequences of bits that you can find inside a computer file.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 17 Feb 2010 08:08:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/02/file-formats-alphabets-and-public-money-did-you-know-that/</guid></item><item><title>Java conversions and 7 Golden rules of widening, boxing &amp;amp; varargs</title><link>https://studiofreya.org/java/java-conversions-and-golden-rules-of-widening-boxing-varargs/</link><description>&lt;p&gt;Here is a very useful java conversion table that I’ve created while preparing for the &lt;a href="https://www.amazon.com/gp/product/1118957407/ref=as_li_tl?ie=UTF8&amp;#038;camp=1789&amp;#038;creative=9325&amp;#038;creativeASIN=1118957407&amp;#038;linkCode=as2&amp;#038;tag=monsterfreyan-20&amp;#038;linkId=4f779ac4ece840ffb3e755d3605d1b76" rel="nofollow" target="_blank"&gt;Certified SE Java Programmer&lt;/a&gt; exam.&lt;/p&gt;
&lt;p&gt;&lt;span class="editable"&gt;&lt;a href="http://studiofreya.com/wp-content/uploads/2010/02/conversions.jpg"&gt;&lt;span class="editable"&gt;&lt;img alt="primitives conversion" class="size-full wp-image-511" height="242" src="http://studiofreya.com/wp-content/uploads/2010/02/conversions.jpg" width="890" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;b&gt;Read also:&lt;/b&gt; &lt;a href="http://studiofreya.com/java/how-to-use-java-varargs/"&gt;What is and how to use Java varargs&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
  And here is a complete overview of the Java Golden rules of widening, boxing &amp; varargs:
&lt;/p&gt;
&lt;p&gt;
  1. Primitive Widening &gt; Boxing &gt; Varargs.&lt;br /&gt; 2. Widening and Boxing (WB) not allowed.&lt;br /&gt; 3. Boxing and Widening (BW) allowed.&lt;br /&gt; 4. While overloading Widening + vararg and boxing + vararg are mutually exclusive of each other.&lt;br /&gt; 5. Widening between wrapper classes not allowed&lt;br /&gt; 6. Widening+varArgs &amp; Boxing+varargs are individually allowed (but not allowed in overloaded version of method)&lt;br /&gt; 7. Boxing+Widening is preferred over Boxing+Varargs.
&lt;/p&gt;</description><author>Studiofreya SSG Site</author><pubDate>Tue, 16 Feb 2010 21:31:43 GMT</pubDate><guid isPermaLink="true">https://studiofreya.org/java/java-conversions-and-golden-rules-of-widening-boxing-varargs/</guid></item><item><title>Who cancels your email? Warning to Infostrada and Barracuda users</title><link>https://stop.zona-m.net/2010/02/who-cancels-your-email-warning-to-infostrada-and-barracuda-users/</link><description>&lt;p&gt;Infostrada is one of the biggest Internet Access Providers (IAP) in Italy. &lt;a href="http://www.barracudanetworks.com/"&gt;Barracuda&lt;/a&gt; is a software filter that analyzes all the email messages entering the network of an organization in order to block spam, viruses and similar.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 16 Feb 2010 12:11:31 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/02/who-cancels-your-email-warning-to-infostrada-and-barracuda-users/</guid></item><item><title>New versions of LatchProf and LatchProfX for latch contention troubleshooting and tuning</title><link>https://tanelpoder.com/2010/02/15/new-versions-of-latchprof-and-latchprofx-for-latch-contention-troubleshooting-and-tuning/</link><description>&lt;p&gt;The LatchProf and LatchProfX scripts allow you to be more systematic with latch contention troubleshooting and tuning. No more guesswork is needed as these scripts give you exact session IDs and in this version also SQLIDs of the troublemaking applications.&lt;/p&gt;
&lt;p&gt;You can download the new versions here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/latchprof.sql" rel="noopener" target="_blank"&gt;LatchProf&lt;/a&gt; (reads V$ views)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/latchprofx.sql" rel="noopener" target="_blank"&gt;LatchProfX&lt;/a&gt; (reads X$ tables, but gives better info, run as SYS)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example output (with SQLID info) is below:&lt;/p&gt;
&lt;pre class="brush: plain; title: ; notranslate" title=""&gt;SQL&amp;gt; @latchprof name,sid,sqlid % % 100000

-- LatchProf 1.21 by Tanel Poder (  )

NAME                                       SID SQLID               Held       Gets  Held %     Held ms Avg hold ms
----------------------------------- ---------- ------------- ---------- ---------- ------- ----------- -----------
cache buffers chains                       133 3jbwa65aqmkvm        349        348     .35      14.169        .041
simulator lru latch                        133 3jbwa65aqmkvm         51         51     .05       2.071        .041
row cache objects                          133 3jbwa65aqmkvm          5          5     .01        .203        .041
cache buffers chains                        24                        5          5     .01        .203        .041
cache buffers chains                       149 3jbwa65aqmkvm          3          3     .00        .122        .041
resmgr group change latch                   33 147a57cxq3w5y          2          2     .00        .081        .041
cache buffers chains                         9 5raw2bzx227wp          2          1     .00        .081        .081
In memory undo latch                       149 f3y38zthh270n          2          1     .00        .081        .081
active checkpoint queue latch                5                        2          1     .00        .081        .081
cache buffers chains                       149 75621g9y3xmvd          2          2     .00        .081        .041
cache buffers chains                         9 gvgdv2v90wfa7          2          2     .00        .081        .041
cache buffers chains                        33 75621g9y3xmvd          2          2     .00        .081        .041
checkpoint queue latch                       5                        1          1     .00        .041        .041
ksuosstats global area                       8                        1          1     .00        .041        .041
cache buffers lru chain                    133 3jbwa65aqmkvm          1          1     .00        .041        .041
multiblock read objects                    155 75ju2gn3s8009          1          1     .00        .041        .041
resmgr group change latch                    9 0w2qpuc6u2zsp          1          1     .00        .041        .041
resmgr group change latch                   33 apgb2g9q2zjh1          1          1     .00        .041        .041
resmgr group change latch                  133 apgb2g9q2zjh1          1          1     .00        .041        .041
space background task latch                 17                        1          1     .00        .041        .041
cache buffers chains                       149 5raw2bzx227wp          1          1     .00        .041        .041
cache buffers chains                        33 5raw2bzx227wp          1          1     .00        .041        .041
cache buffers chains                        33 05s4vdwsf5802          1          1     .00        .041        .041
cache buffers chains                        31 0yas01u2p9ch4          1          1     .00        .041        .041
cache buffers chains                         9 41zu158rqf4kf          1          1     .00        .041        .041
In memory undo latch                        33 0bzhqhhj9mpaa          1          1     .00        .041        .041
In memory undo latch                        31 gvgdv2v90wfa7          1          1     .00        .041        .041
In memory undo latch                         9 gvgdv2v90wfa7          1          1     .00        .041        .041
simulator lru latch                        149 3jbwa65aqmkvm          1          1     .00        .041        .041
row cache objects                          133 5yq51dtyc6qf2          1          1     .00        .041        .041
SQL memory manager workarea list la        133 3jbwa65aqmkvm          1          1     .00        .041        .041
enqueues                                   141                        1          1     .00        .041        .041
row cache objects                          132                        1          1     .00        .041        .041

33 rows selected.

&lt;/pre&gt;
&lt;p&gt;LatchProf scripts allow you to easily identify which session and SQLID (or sqlhash in 9i) cause the latch(es) to be held the most.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 16 Feb 2010 05:01:51 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/02/15/new-versions-of-latchprof-and-latchprofx-for-latch-contention-troubleshooting-and-tuning/</guid></item><item><title>Downcasing strings</title><link>http://blog.danieljanus.pl/downcasing/</link><description>&lt;div&gt;&lt;p&gt;I just needed to convert a big (around 200 MB) text file, encoded in UTF-8 and containing Polish characters, all into lowercase. &lt;code&gt;tr&lt;/code&gt; to the rescue, right? Well, not quite.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$ echo ŻŹŚÓŃŁĘĆĄ | tr A-ZĄĆĘŁŃÓŚŹŻ a-ząćęłńóśźż
żźśóńłęćą
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Looks reasonable (apart from the fact that I need to specify an explicit character mapping — it would be handy to just have a lcase utility or suchlike); but here’s what happens on another random string:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$ echo abisyński | tr A-ZĄĆĘŁŃÓŚŹŻ a-ząćęłńóśźż
abisyŅski
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I was just about to report this as a bug, when I spotted the following in the manual:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Currently &lt;code&gt;tr&lt;/code&gt; fully supports only single-byte characters. Eventually it will support multibyte characters; when it does, the &lt;code&gt;-C&lt;/code&gt; option will cause it to complement the set of characters, whereas &lt;code&gt;-c&lt;/code&gt; will cause it to complement the set of values.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Turns out some of the basic tools don’t support multibyte encodings. &lt;code&gt;dd conv=lcase&lt;/code&gt;, for instance, doesn’t even pretend to touch non-ASCII letters, and perl’s &lt;code&gt;tr&lt;/code&gt; operator likewise fails miserably even when one specifies &lt;code&gt;use utf8&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;This is a sad, sad state of affairs. It’s 2010, UTF-8 has been around for seventeen years, and it’s still not supported by one of the core operating system components as other encodings are becoming more and more obsolete. I’m dreaming of the day my system uses it internally for everything.&lt;/p&gt;&lt;p&gt;Fortunately, not everything is broken. Gawk, for example, works:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$ echo koŃ i żÓłw | gawk '{ print tolower($0); }'
koń i żółw
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and so does sed.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Update 2010-04-04:&lt;/em&gt; I should have been more specific. The above rant applies to the GNU tools (&lt;code&gt;tr&lt;/code&gt; and &lt;code&gt;dd&lt;/code&gt;) as found in most Linux distributions; other versions can be more featureful. As &lt;a href="http://alexott.net/"&gt;Alex Ott&lt;/a&gt; points out in an email comment, tr on OS X works as expected for characters outside of ASCII, and also supports character classes as in &lt;code&gt;tr '[:upper:]' '[:lower:]'&lt;/code&gt;. This is yet another testimony to general high quality of Apple software; in this particular case, though, it may well be a direct effect of OS X’s BSD heritage. Does it work on *BSD?&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Tue, 16 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/downcasing/</guid></item><item><title>In user-interface design, always address the user as "you" (and never "me")</title><link>https://www.databasesandlife.com/me-vs-you-in-user-interface-dialogs/</link><description>&lt;p class="intro"&gt;Computers, if they are addressing the user, should address the user as "you", not as "me".&lt;/p&gt;
&lt;p&gt;Computers need, from time to time, to address the user, for example &amp;ldquo;You have updated your setting successfully&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Some programs use the word &amp;ldquo;you&amp;rdquo; to address the user, some use the word &amp;ldquo;me&amp;rdquo; on the grounds that the user is reading it, and to them, they are &amp;ldquo;me&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;However, using &amp;ldquo;me&amp;rdquo; to address someone is ridiculous! That&amp;rsquo;s as logical as a human using the word &amp;ldquo;I&amp;rdquo; or &amp;ldquo;me&amp;rdquo; to refer to the recipient of a piece of communication, &amp;ldquo;hey, do I fancy going to the pub?&amp;rdquo; on the grounds that, to the recipient, they are &amp;ldquo;I&amp;rdquo;.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 15 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/me-vs-you-in-user-interface-dialogs/</guid></item><item><title>O for the P</title><link>https://www.keithrpetersen.com/blog/o-for-the-p/</link><description>&lt;p&gt;I just finished reading &lt;a href="https://bookshop.org/books/mountains-beyond-mountains/9780812973013"&gt;&lt;em&gt;Mountains Beyond Mountains: The Quest of Dr. Paul Farmer, a Man Who Would Cure the World&lt;/em&gt;&lt;/a&gt;. I’ve known of the book for a couple years but never quite got around to reading it, likely because I knew it would challenge me. After the Haitian earthquake about a month ago, I remembered the book, decided I must read it, and then Barnes &amp;amp; Noble had it on sale. So here I am.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.keithrpetersen.com/blog/o-for-the-p/"&gt;Read More&lt;/a&gt;&lt;/p&gt;</description><author>Blog - Keith R. Petersen</author><pubDate>Mon, 15 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.keithrpetersen.com/blog/o-for-the-p/</guid></item><item><title>Oracle Troubleshooting: How to read Oracle ERRORSTACK output?!</title><link>https://tanelpoder.com/2010/02/14/oracle-troubleshooting-how-to-read-oracle-errorstack-output/</link><description>&lt;p&gt;I have written the first article to the troubleshooting section of my new website tech.E2SN.com:&lt;/p&gt;
&lt;p&gt;It’s about a very valuable Oracle troubleshooting tool -&amp;gt; ERRORSTACK trace.&lt;/p&gt;
&lt;p&gt;I cover 4 frequently asked questions there:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Reading the current executing SQL statement text from errorstack trace&lt;/li&gt;
&lt;li&gt;Reading the current executing PL/SQL package and PL/SQL source code line number from errorstack trace&lt;/li&gt;
&lt;li&gt;Reading the current bind variable values from errostack trace&lt;/li&gt;
&lt;li&gt;Identifying how much private (UGA) memory a cursor is using&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can read it here:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 14 Feb 2010 20:41:46 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/02/14/oracle-troubleshooting-how-to-read-oracle-errorstack-output/</guid></item><item><title>Optional Syntax Should Be Illegal</title><link>https://peterlyons.com/problog/2010/02/optional-syntax-should-be-illegal/</link><description>&lt;p&gt;Why in the world do some programming languages include optional syntax? To a true type A engineer, this is incomprehensible and unacceptable. For example, in Adobe's ActionScript, statements may optionally be terminated with a semicolon. Usually this is not required, except in a few situations you need it. Evil. The statement that our number one job as software engineers is to manage complexitity really resonates with me, and willy nilly allowing of optional syntax just destroys consistency, predictability, and simplicity for no reason whatsoever. Optional syntax seems to me a bad language design smell that indicates the language authors need to rethink a bit and find something that works always and should be required.&lt;/p&gt;
&lt;p&gt;Part of the impetus for this post is my annoyance when my thinking cycles are wasted on unimportant details in a source code file. I'd rather have a strict format so that whenever I am reading or writing in a language, there will be a strong and deep consistency. I don't have to spend time deciding whether I'm going to use some optional syntax or which of the several ways to express the same thing I'm going to use. Similarly, when I come upon someone else's code and it's a mixture of two optional approaches, I feel compelled to go and make it consistent, which is another time waster.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Sun, 14 Feb 2010 05:33:31 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/02/optional-syntax-should-be-illegal/</guid></item><item><title>Environment Variables Considered Harmful</title><link>https://peterlyons.com/problog/2010/02/environment-variables-considered-harmful/</link><description>&lt;p&gt;Many projects reference environment variables at either build time, install time, or run time to handle configuration that can't be made to work across all of the target environments.  It is better to use plain text simple configuration files for the reasons that follow.  First, let's quickly review common usage of environment variables.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Directory path to supporting tools and libraries (JAVA_HOME, LD_LIBRARY_PATH, CATALINA_HOME, etc)&lt;/li&gt;
&lt;li&gt;Customization of build time locations (BUILD_DIR, OUTPUT_DIR, DIST_DIR, etc)&lt;/li&gt;
&lt;li&gt;Customization of compiler options and other build time configurations (STATIC_LINK, etc)&lt;/li&gt;
&lt;li&gt;Settings that apply OS-wide and to several programs (http_proxy, etc). In theory this would almost make sense.  You set your http_proxy environment variable in one place, and any program that makes HTTP requests respects that setting.  In practice, these settings are more realistically effective higher up in your desktop environment, and AFAIK in the whole GNU/Linux/UNIX ecosystem, there are only a small handful of cross-program environment variables that are actually used commonly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So what's the problem with environment variables?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The are ephemeral, nebulous, stored in memory within your shell and process tree&lt;/li&gt;
&lt;li&gt;How and where they are set is inconsistent across shells (~/.bash_profile, ~/.zshrc, etc)&lt;/li&gt;
&lt;li&gt;The syntax to specify them is needlessly different across different shells (csh vs. bash vs. cmd.exe, etc)&lt;/li&gt;
&lt;li&gt;How to fully unset them varies per shell and is often unclear&lt;/li&gt;
&lt;li&gt;There is widespread confusion on the distinction between shell variables and environment variables, how to set each, and how each interacts with subprocesses&lt;/li&gt;
&lt;li&gt;They are often tied to a user account due to where they are specified above, and can vary between login shell verses non-login shell. They can therefore often vary when a program runs via init compared to run from an interactive root login shell.  This can be difficult to detect and troubleshoot&lt;/li&gt;
&lt;li&gt;They are rife with &lt;a href="https://www.securecoding.cert.org/confluence/pages/worddav/preview.action?pageId=3524&amp;amp;fileName=Environment+Variables+v3.pdf"&gt;major security concerns&lt;/a&gt; and a common attack vector&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these reasons combined mean that in general environment variables are losers in our goal of managing complexity and making simple, easy to use software that is cross platform.  So what's the solution?  The solution, as it so often is, is simple plain text configuration files.  At the end of the day, environment variables end up set in a shell script as KEY=VALUE type pairs, and that's where they belong in a configuration file on the filesystem. How does this make things better?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One consistent place to set your application's configuration&lt;/li&gt;
&lt;li&gt;Same syntax regardless of shell, programming language or OS&lt;/li&gt;
&lt;li&gt;Files on disk are concrete and reliable. You can email it to someone for help with troubleshooting and be confident about its content&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So go forth and configure with simple plain text configuration files.  And there will be much rejoicing.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Sun, 14 Feb 2010 05:30:14 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2010/02/environment-variables-considered-harmful/</guid></item><item><title>The first question you should ask yourself during traffic bans</title><link>https://stop.zona-m.net/2010/02/the-first-question-you-should-ask-yourself-during-traffic-bans/</link><description>&lt;p&gt;On January 31st, 2010, &lt;a href="http://www.notizieoggi.net/10370/milano-domenica-31-gennaio-blocco-del-traffico-per-smog/"&gt;Milan&lt;/a&gt; and a &lt;a href="http://www.asca.it/news-LOMBARDIA_SMOG__DOMENICA_BLOCCO_TRAFFICO_ANCHE_A_MONZA_E_IN_BRIANZA-890442-ORA-.html"&gt;few neighbor areas&lt;/a&gt; declared a total traffic ban to reduce air pollution. Since such measures are already used in other countries or may be adopted in the coming years, the protests and questions raised in that occasion are useful to think about the real usefulness of traffic bans in general.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 14 Feb 2010 04:02:15 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/02/the-first-question-you-should-ask-yourself-during-traffic-bans/</guid></item><item><title>Snow Day February 2010</title><link>https://solomon.io/snow-day-february-2010/</link><description>Auburn is not known for snow, but we’ve had fantastic snow days in back-to-back years.</description><author>Sam Solomon</author><pubDate>Sun, 14 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/snow-day-february-2010/</guid></item><item><title>Native applications are doomed</title><link>https://blog.steren.fr/2010/02/14/native-applications-are-doomed/</link><author>Steren's essays</author><pubDate>Sun, 14 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.steren.fr/2010/02/14/native-applications-are-doomed/</guid></item><item><title>A family's experience with Free Software, the Internet and autism</title><link>https://stop.zona-m.net/2010/02/a-familys-experience-with-free-software-the-internet-and-autism/</link><description>&lt;p&gt;&lt;a href="https://stop.zona-m.net/2010/01/good-news-for-all-parents-and-teachers-its-ubuntu-user-day/"&gt;Ubuntu&lt;/a&gt; is a computer operating system alternative to Windows, but free of license costs and well suited to families and schools. When I read &lt;a href="https://lists.ubuntu.com/archives/ubuntu-it/2010-January/043373.html"&gt;this message&lt;/a&gt; on the mailing list for Ubuntu Italian users:&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 13 Feb 2010 11:40:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/02/a-familys-experience-with-free-software-the-internet-and-autism/</guid></item><item><title>When and how can Free Software really save public money?</title><link>https://stop.zona-m.net/2010/02/when-and-how-can-free-software-really-save-public-money/</link><description>&lt;p&gt;A few days ago, during an email conversation about efficient public services and waste of money in Public Administrations, I had to answer a couple of questions. Since those answers may interest many other people, here they are.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 13 Feb 2010 05:16:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/02/when-and-how-can-free-software-really-save-public-money/</guid></item><item><title>Nginx SSL + Tomcat (for Confluence)</title><link>https://blog.nobugware.com/post/2010/02/12/nginx-ssl-tomcat-confluence/</link><description>I have an Nginx frontend to serv everything but confluence which was not happy with my SSLized conf, here is the solution !
This doc is related to confluence but will works with any java apps in a tomcat
First don&amp;rsquo;t use the standalone version of confluence (which is a Tomcat 5.5), use the EAR/WAR tar gz archive.
We need Tomcat 6 cause we will use a &amp;ldquo;Valve&amp;rdquo; [RemoteIPValve](http://tomcat.apa che.org/tomcat-6.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html) that will check for a header (X-Forwarded-Proto) to see if the source request was secured by SSL.</description><author>Fabrice Aneche</author><pubDate>Fri, 12 Feb 2010 20:02:03 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2010/02/12/nginx-ssl-tomcat-confluence/</guid></item><item><title>Java test with JUnit</title><link>https://studiofreya.org/java/testing-java-with-junit/</link><description>&lt;p&gt;Software testing is a powerful tool when creating all types of applications. That’s why it is also so important to test it in details so that a chance of an unexpected fail is minimal. We say it so: all code you write must be tested with minimum 2 types of tests: positive and negative. A positive test is a test that verifies a correct functionality, a negative test verifies that a function will fail or throw an exception. Let’s see how it works.&lt;/p&gt;</description><author>Studiofreya SSG Site</author><pubDate>Thu, 11 Feb 2010 23:42:45 GMT</pubDate><guid isPermaLink="true">https://studiofreya.org/java/testing-java-with-junit/</guid></item><item><title>Using Process Memory Matrix script for calculating Oracle process memory usage on Solaris</title><link>https://tanelpoder.com/2010/02/11/using-process-memory-matrix-script-for-calculating-oracle-process-memory-usage-on-solaris/</link><description>&lt;p&gt;I just published a new script and article about calculating the &lt;em&gt;real&lt;/em&gt; Oracle process memory usage on Solaris.&lt;/p&gt;
&lt;p&gt;The problem with V$PROCESS* views (and the V$SESSTAT) is that they will tell you what Oracle &lt;em&gt;thinks&lt;/em&gt; it’s using, not the real amount of memory used. There will be discrepancies due how memory is actually allocated in OS, libraries out of Oracle’s control, the static memory areas inside Oracle binary and of course bugs.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 11 Feb 2010 20:21:04 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/02/11/using-process-memory-matrix-script-for-calculating-oracle-process-memory-usage-on-solaris/</guid></item><item><title>If you want to generate code, make sure your target language is not Java</title><link>https://www.databasesandlife.com/java-method-64k-limit/</link><description>&lt;p class="intro"&gt;I tried to write a program using Java; it all seemed to be going well but then I hit a ridiculous limit. Java cannot be used for this type of problem. I have now completely re-written it in a different programming language, and that works fine.&lt;/p&gt;
&lt;p&gt;Be aware of this limit. I was unaware of it when I started this project. But it makes Java completely unsuitable for a whole class of problem.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 10 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/java-method-64k-limit/</guid></item><item><title>Clojure SET</title><link>http://blog.danieljanus.pl/clojure-set/</link><description>&lt;div&gt;&lt;p&gt;I’ve just taken a short breath off work to put &lt;a href="http://github.com/nathell/setgame"&gt;some code&lt;/a&gt; on GitHub that I had written over one night some two months ago. It is an implementation of the &lt;a href="http://en.wikipedia.org/wiki/Set_(game)"&gt;Set&lt;/a&gt; game in Clojure, using Swing for GUI.&lt;/p&gt;&lt;p&gt;I do not have time to clean up or comment the code, so I’m leaving it as is for now; however, I hope that even in its current state it can be of interest, especially for Clojure learners.&lt;/p&gt;&lt;p&gt;Some random notes on the code:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;Clojure is concise! The whole thing is just under 250 lines of code, complete with game logic and the GUI. Of these, the logic is about 50 LOC. Despite this it reads clearly and has been a pleasure to write, thanks to Clojure’s supports for sets as a data structure (in vein of the game’s title and theme).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;There are no graphics included. All the drawing is done in the GUI part of code (I’ve replaced the canonical squiggle shape by a triangle and stripes by gradients, for the sake of easier drawing).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;I’ve toyed around with different Swing layout managers for this game. Back in the days when I wrote in plain Java, I used to use &lt;a href="https://tablelayout.dev.java.net/"&gt;TableLayout&lt;/a&gt;, but it has a non-free license; &lt;a href="http://www.jgoodies.com/freeware/forms/"&gt;JGoodies Forms&lt;/a&gt; is also nice, but has a slightly more complicated API (and it’s an additional dependency, after all). In the end I’ve settled with the standard GridBagLayout, which is similar in spirit to those two, but requires more boilerplate to set up. As it turned out, simple macrology makes it quite pleasurable to use; see &lt;code&gt;add-gridbag&lt;/code&gt; in the code for details.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Other things of interest might be my function to randomly shuffle seqs, which strikes a nice balance between simplicity/conciseness of implementation and randomness; and a useful debugging macro.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Comments?&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Wed, 10 Feb 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/clojure-set/</guid></item><item><title>CV Update</title><link>https://rob.sh/post/181/</link><description>&lt;p&gt;I am currently actively interested in new opportunities due to changing circumstances with my current role. I&amp;rsquo;ve therefore uploaded a current curriculum vitae to &lt;a href="https://cdn.rob.sh/files/rjs-cv-nc.pdf"&gt;this site&lt;/a&gt;.&lt;/p&gt;</description><author>rob.sh</author><pubDate>Tue, 09 Feb 2010 22:52:19 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/181/</guid></item><item><title>Oracle Wait Event reference</title><link>https://tanelpoder.com/2010/02/09/oracle-wait-event-reference/</link><description>&lt;p&gt;Kyle Hailey has started putting together a much needed Oracle wait event reference.&lt;/p&gt;
&lt;p&gt;You can access it &lt;a href="http://sites.google.com/site/embtdbo/wait-event-documentation" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By the way, Oracle documentation also has a wait event reference section, it has more events, but it’s less detailed…&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 09 Feb 2010 12:35:57 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/02/09/oracle-wait-event-reference/</guid></item><item><title>reading obscure documentation</title><link>https://purpleidea.com/blog/2010/02/08/reading-obscure-documentation/</link><description>&lt;p&gt;Sometimes the interfaces you need just aren&amp;rsquo;t well documented, but &lt;span style="background-color: #ffffff;"&gt;thanks to the &lt;a href="http://en.wikipedia.org/wiki/Internets"&gt;internets&lt;/a&gt;, some &lt;a href="http://google.com/"&gt;websearches&lt;/a&gt;, and a useful &lt;a href="http://www.chiark.greenend.org.uk/ucam/chat/FAQ.0.8.html#3%2010"&gt;dictionary&lt;/a&gt;, you can often decipher random web documentation jargon to help you produce useful &lt;a href="http://www.cs.mcgill.ca/~james/code/"&gt;code&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;span style="background-color: #ffffff;"&gt;
&lt;/span&gt;
&lt;p&gt;&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://m9rx.com/" target="_blank"&gt;hire James&lt;/a&gt; and his team at &lt;a href="https://m9rx.com/" target="_blank"&gt;m9rx corporation&lt;/a&gt;.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://mastodon.social/@purpleidea" target="_blank"&gt;follow James on Mastodon&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://twitter.com/intent/follow?screen_name=purpleidea" target="_blank"&gt;follow James on Twitter&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://github.com/sponsors/purpleidea/" target="_blank"&gt;support James on GitHub&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://www.patreon.com/purpleidea" target="_blank"&gt;support James on Patreon&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;
&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Mon, 08 Feb 2010 15:05:23 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2010/02/08/reading-obscure-documentation/</guid></item><item><title>Finally, online multiplayer!</title><link>https://etodd.io/2010/02/08/finally-online-multiplayer/</link><description>&lt;p&gt;I've updated the browser plugin to finally support full online multiplayer! &lt;a href="http://a3p.sourceforge.net/play.html"&gt;Go try it!&lt;/a&gt; I think the plugin is now stable enough that I am promoting it as the officially recommended method of playing the game. :)&lt;/p&gt;
&lt;p&gt;Of course, there are still some problems. Namely, in Internet Explorer the mouse control doesn't work. Testing so far has shown Firefox 3 and Chrome (on Windows) handle the game very well.&lt;/p&gt;
&lt;p&gt;So give it a whirl, and please post any errors or bugs you get, along with your OS and browser!&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Mon, 08 Feb 2010 03:34:01 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/02/08/finally-online-multiplayer/</guid></item><item><title>Java</title><link>https://studiofreya.org/java/java/</link><description>&lt;blockquote&gt;
&lt;p&gt;“A scientist builds in order to learn, an engineer learns in order to build.” &lt;em&gt;(Fred Brooks)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="java-introduction-tutorials"&gt;&lt;span id="Java-Introduction-Tutorials"&gt;Java Introduction Tutorials&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/java-basic-programs-5-simple-examples/"&gt;Java Basic Programs: 5 Simple Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/java-hello-world-how-to-run/"&gt;Java Hello World - How to Run&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="java-9-tutorials"&gt;&lt;span id="Java-9-Tutorials"&gt;Java 9 Tutorials&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/java-9-strings/"&gt;Java 9 Strings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="java-8-tutorials"&gt;&lt;span id="Java-8-Tutorials"&gt;Java 8 Tutorials&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/how-to-sort-a-set-in-java-example/"&gt;How to sort a Set in Java example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/java-parallel-streams-api/"&gt;Java 8 parallel streams API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/java-regex-by-example-strings/"&gt;Java regex by example: strings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="java-best-practice"&gt;&lt;span id="Java-Best-Practice"&gt;Java Best Practice&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/programming-basics/prefer-two-element-enum-types-to-boolean-parameters/"&gt;Prefer two-element enum types to boolean parameters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/recipe-for-a-high-quality-equals-method/"&gt;Recipe for a high-quality &amp;ldquo;equals&amp;rdquo; method&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/programming-basics/return-empty-objects-not-nulls/"&gt;Return empty objects, not nulls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/programming-basics/ugly-code-the-law-of-demeter/"&gt;Ugly code: The Law of Demeter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="other-java-articles-and-tutorials"&gt;&lt;span id="Other-Java-articles-and-tutorials"&gt;Other Java articles and tutorials&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/2018/07/14/grails-javascript-example/"&gt;Grails Javascript Example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/2019/05/07/groovy-intersect-lists-with-objects/"&gt;Groovy intersect lists with objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/2019/04/15/groovy-remove-duplicate-objects-from-list/"&gt;Groovy: remove duplicate objects from list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/2016/02/17/how-to-convert-java-long-to-4-bytes-data/"&gt;How to convert java long to 4 bytes data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/2016/01/27/how-to-program-a-drone-with-java/"&gt;How to program a drone with Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/how-to-use-java-varargs/"&gt;How to use Java varargs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/equality-checking-in-the-face-of-inheritance-in-java/"&gt;Inheritance Java equality check&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/java-conversions-and-golden-rules-of-widening-boxing-varargs/"&gt;Java conversions and 7 Golden rules of widening, boxing &amp;amp; varargs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/testing-java-with-junit/"&gt;Java test with JUnit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/java-variable-types/"&gt;Java variable types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/java-volatile-vs-atomic-variables/"&gt;Java volatile vs atomic variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/2016/12/07/read-and-write-to-spreadsheet-in-java/"&gt;Read and write to spreadsheet in Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/2016/03/17/java-static-variable-default-value-with-examples/"&gt;Static variables default values with examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/2016/03/04/too-many-functions-in-java-code/"&gt;Too many functions in Java code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="java-quiz"&gt;&lt;span id="Java-Quiz"&gt;Java Quiz&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/java-quiz-declarations-and-access/"&gt;Java quiz: Declarations and Access&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://studiofreya.com/java/java-quiz-object-orientation/"&gt;Java quiz: Object Orientation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="good-java-resources"&gt;&lt;span id="Good-Java-Resources"&gt;Good Java Resources&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.amazon.com/gp/product/0596009208/ref=as_li_tl?ie=UTF8&amp;#038;camp=1789&amp;#038;creative=9325&amp;#038;creativeASIN=0596009208&amp;#038;linkCode=as2&amp;#038;tag=monsterfreyan-20&amp;#038;linkId=f9cfef37471a5254327597fe2fbdf358" rel="nofollow" target="_blank"&gt;&lt;img alt="clean code" border="0" height="250" src="https://studiofreya.com/wp-content/uploads/2017/11/cleancode.jpg" width="193" /&gt;&lt;/a&gt; &lt;a href="https://www.amazon.com/gp/product/0132350882/ref=as_li_tl?ie=UTF8&amp;#038;camp=1789&amp;#038;creative=9325&amp;#038;creativeASIN=0132350882&amp;#038;linkCode=as2&amp;#038;tag=monsterfreyan-20&amp;#038;linkId=6ce8113badfb1705d52a0c79cd9dfed1" rel="nofollow" target="_blank"&gt;&lt;img alt="head first" border="0" height="250" src="https://studiofreya.com/wp-content/uploads/2017/11/javaheadfirst.jpg" width="216" /&gt;&lt;/a&gt; &lt;a href="https://www.amazon.com/gp/product/0134685997/ref=as_li_tl?ie=UTF8&amp;#038;camp=1789&amp;#038;creative=9325&amp;#038;creativeASIN=0134685997&amp;#038;linkCode=as2&amp;#038;tag=monsterfreyan-20&amp;#038;linkId=fbeac2b7036432b7fab3889e7e293438" rel="nofollow" target="_blank"&gt;&lt;img alt="head first" border="0" height="250" src="https://studiofreya.com/wp-content/uploads/2017/11/effectivejava.jpg" width="192" /&gt;&lt;/a&gt; &lt;a href="https://www.amazon.com/gp/product/1119272092/ref=as_li_tl?ie=UTF8&amp;#038;camp=1789&amp;#038;creative=9325&amp;#038;creativeASIN=1119272092&amp;#038;linkCode=as2&amp;#038;tag=monsterfreyan-20&amp;#038;linkId=0ab646540a1b62210bcb46bd1088edce" rel="nofollow" target="_blank"&gt;&lt;img alt="head first" border="0" height="250" src="https://studiofreya.com/wp-content/uploads/2017/11/ocp.jpg" width="204" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Studiofreya SSG Site</author><pubDate>Sat, 06 Feb 2010 22:52:22 GMT</pubDate><guid isPermaLink="true">https://studiofreya.org/java/java/</guid></item><item><title>dPNG</title><link>https://www.davidschlachter.com/misc/dpng</link><description>Tool to convert images to PNG format, then optimize them to reduce file size. Requires Mac OS 10.6.</description><author>David Schlachter</author><pubDate>Sat, 06 Feb 2010 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/misc/dpng</guid></item><item><title>Simple Light</title><link>https://studiofreya.org/opengl/simple-light/</link><description>&lt;img alt="OpenGL light example" src="https://studiofreya.org/opengl/simple-light/light.jpg" /&gt;


&lt;p&gt;Here we&amp;rsquo;ll look at an example of a simple light. We draw a static ball in the middle that will serve us as a background. Four small balls will move around the big one and represent different lights. These small balls are not actually lights, but are there to show the color and position of the light.&lt;/p&gt;</description><author>Studiofreya SSG Site</author><pubDate>Sat, 06 Feb 2010 00:54:19 GMT</pubDate><guid isPermaLink="true">https://studiofreya.org/opengl/simple-light/</guid></item><item><title>After water, Australian State may open many more public data</title><link>https://stop.zona-m.net/2010/02/after-water-australian-state-may-open-many-more-public-data/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 05 Feb 2010 03:21:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/02/after-water-australian-state-may-open-many-more-public-data/</guid></item><item><title>(French) Neutralité du Net</title><link>https://blog.separateconcerns.com/2010-02-04-fr-neutralite-du-net.html</link><description>&lt;p&gt;Tout le monde parle de neutralité du Net en ce moment. J’ai pensé que ça pourrait être une bonne idée de faire un point là-dessus, parce que j’entends et je lis tout et n’importe quoi, en particulier dans la presse française.&lt;/p&gt;
&lt;p&gt;La première étape pour appréhender le problème de la neutralité du Net, c’est de la définir. Benjamin Bayart &lt;a href="http://blog.fdn.fr/post/2010/01/12/Rencontre-avec-l-ARCEP-sur-la-neutralit%C3%A9-du-r%C3%A9seau"&gt;s’y est essayé devant l’ARCEP&lt;/a&gt; et je suis d’accord avec lui pour l’essentiel, même si nos points de vue divergent probablement sur certains points de détail.&lt;/p&gt;
&lt;p&gt;D’abord, il faut comprendre que la neutralité du Net est une qualité essentielle. J’entends par là qu’Internet est par définition neutre, et donc qu’un réseau non-neutre n’est pas Internet&lt;/p&gt;
&lt;p&gt;Qu’est-ce qu’Internet ? Comme son nom l’indique, c’est un ensemble de réseaux qui se sont mis d’accord pour se regrouper et permettre aux entités qui les composent de discuter entre elles. Que les puristes me pardonnent les raccourcis techniques qui vont suivre.&lt;/p&gt;
&lt;p&gt;Les réseaux qui composent Internet sont appelés systèmes autonomes (AS), parce que leurs dirigeants sont libres de définir la manière dont les messages sont transportés en leur sein ainsi que les règles utilisées pour que ces messages arrivent à bonne destination. Pour faire une analogie fréquente : peu importe si les facteurs du bureau de poste de Trifouilly-les-oies distribuent le courrier à bicyclette ou en scooter, et peu importe s’ils utilisent un plan du quartier ou leur GPS pour trouver le 47 rue des Lilas, pourvu que Mme Michu, son occupante, reçoive son courrier en bon état.&lt;/p&gt;
&lt;p&gt;Par contre, il est indispensable que le courrier soit distribué dans des enveloppes à un format standard sur lesquelles figure une adresse. Sur Internet, les lettres sont des paquets, composés d’un message (&lt;strong&gt;Protocol Data Unit&lt;/strong&gt;) enveloppé dans des en-têtes au format &lt;strong&gt;Internet Protocol&lt;/strong&gt;, parmi lesquels figure l’adresse du destinataire. Ces en-têtes (enveloppes) sont les mêmes dans tous les AS (bureaux de poste) du monde et les adresses sont uniques. C’est ce qui fait que Mme Michu peut correspondre avec son amant chinois, M. Chang.&lt;/p&gt;
&lt;p&gt;Chaque bureau de poste est, je l’ai dit, libre de répertorier les adresses qui en dépendent comme il veut, mais il faut que le bureau de Trifouilly-les-oies sache quoi faire des lettres destinées à M. Chang. Sur Internet, chaque AS est identifié par un numéro unique, un peu comme un code postal à l’échelle mondiale, et maintient des tables permettant de savoir de quel AS dépend chaque adresse IP. Comme la structure d’Internet est dynamique (de nouveaux AS peuvent apparaitre, d’autres disparaitre, les associations IP - AS peuvent changer…), les AS s’échangent ces informations en permanence suivant le &lt;strong&gt;Border Gateway Protocol&lt;/strong&gt;, le protocole de routage dans l’Internet.&lt;/p&gt;
&lt;p&gt;La règle fondamentale de neutralité dans tout ça est très simple à comprendre avec mon analogie : la poste (les FAI) transporte le courrier (les paquets) de son point de départ à son point d’arrivée, et elle ne fait que ça. Le facteur n’ouvre pas les lettres pour lire les déclarations enflammées de M. Chang à Mme Michu, et il ne glisse pas de publicité dans les enveloppes. Sur Internet, il n’y a pas non plus de service de type Chronopost : un AS peut passer un accord avec ses voisins pour qu’ils transportent certains paquets plus vite, mais il ne l’écrit pas dans les en-têtes IP, et même s’il le fait personne n’a l’obligation de respecter ces instructions. On dit qu’un réseau IP, et en particulier Internet, ne gère pas les règles de qualité de service (QoS) mais fait simplement de son mieux (&lt;strong&gt;Best Effort&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Maintenant, on peut essayer de voir ce qui n’est pas neutre, et donc pas Internet. Un réseau où les machines n’ont pas d’adresses IP publiques n’est pas Internet. Elles ont des adresses IP, certes, mais une machine sur Internet ne peut pas leur envoyer de paquets directement. Bayart donne l’exemple des opérateurs mobiles, je vais en prendre un autre : si vous êtes connecté au &lt;a href="http://resel.fr/"&gt;ResEl&lt;/a&gt;, vous n’êtes pas sur Internet, parce que l’adresse attribuée à votre interface réseau n’est pas accessible de l’extérieur. C’est ce qui fait que vous ne pouvez pas héberger votre serveur web, par exemple. C’est une bonne occasion d’enfoncer une porte ouverte : Internet a un coût. Je ne connais pas de vrai Fournisseur d’Accès à Internet pour 10 € par an.&lt;/p&gt;
&lt;p&gt;Un FAI ne devrait pas non plus empêcher certains paquets de passer. Si le votre bloque le peer-to-peer, il viole le principe de neutralité. En fait, le simple fait qu’il sache que vous faites du peer-to-peer suffit : il a regardé dans l’enveloppe. Si votre FAI traite les paquets d’un fournisseur de service (disons Dailymotion) plus vite que ceux d’un autre (disons Youtube), il y a aussi de fortes chances qu’il viole la neutralité du Net, sans parler de la législation sur la concurrence. Si quand vous consultez le web un bandeau s’affiche en haut de chaque page et vous rappelle que votre connexion est fournie par Machin, vous n’êtes pas sur Internet. Si vous ne pouvez pas installer un serveur SMTP sur le port 25 de votre machine… vous avez compris l’idée.&lt;/p&gt;
&lt;p&gt;Un point tendancieux : je considère personnellement qu’Internet se limite à ce que j’ai décrit plus haut, ce qui veut dire qu’un filtrage BGP ou sur les IP est contraire à la neutralité du Net mais un filtrage au niveau des noms de domaine (DNS) pas forcément, dans le sens où vous bannir des pages blanches n’empêche pas de vous écrire. Je ne dis pas que j’y suis favorable, juste que c’est moins grave.&lt;/p&gt;
&lt;p&gt;Maintenant, pourquoi la neutralité du Net est-elle si importante ? Parce que c’est ce qui lui permet de garantir des droits fondamentaux tels que la liberté d’expression (c’est pas moi qui le dit, &lt;a href="http://www.conseil-constitutionnel.fr/conseil-constitutionnel/francais/les-decisions/acces-par-date/decisions-depuis-1959/2009/2009-580-dc/decision-n-2009-580-dc-du-10-juin-2009.42666.html"&gt;c’est le Conseil Constitutionnel&lt;/a&gt;) ou la libre concurrence, et aussi parce que c’est parce qu’Internet est neutre qu’il peut fonctionner, techniquement et d’un point de vue diplomatique. Simplement parce que si on commence à dire qu’Internet n’est plus neutre (ou ouvert, c’est à peu près équivalent), alors c’est qu’&lt;a href="http://twitter.com/timoreilly/status/7924286619"&gt;on en laisse le contrôle à quelqu’un&lt;/a&gt;, et les autres ne
risquent pas d’être d’accord.&lt;/p&gt;
&lt;p&gt;Alors évidemment, il y en a que ça tenterait bien de contrôler Internet. On l’a vu, la neutralité va plus loin que l’absence de censure, mais elle l’inclut, et c’est bien de cela qu’il est question quand on vous parle de &lt;a href="http://www.generation-nt.com/loppsi-filtrage-net-juge-tardy-actualite-951391.html"&gt;filtrage&lt;/a&gt;. Bien entendu, le gouvernement et leurs amis des médias vous diront qu’ils cherchent à empêcher les méchants terroristes et leurs comparses pédophiles de nuire, parce qu’ils ne vont pas vous dire ouvertement qu’ils veulent juste reprendre le contrôle de l’information. Demandez donc à M. Chang ce qu’il en pense !&lt;/p&gt;
&lt;p&gt;Donc non, la neutralité du Net n’est &lt;a href="http://www.youtube.com/watch?v=mP01t0Z4Hr8"&gt;pas une obsession de libristes illuminés&lt;/a&gt;, et les artistes qui la comprennent &lt;a href="https://en.wikipedia.org/wiki/Future_of_Music_Coalition"&gt;n’en pensent pas ce qu’on voudrait bien nous faire croire&lt;/a&gt;. La France, en la matière, est en train de nager à contre-courant ; elle finira par s’épuiser et couler si elle persiste.&lt;/p&gt;
&lt;p&gt;Pour conclure, un conseil : si vous voulez vous faire une idée sur le sujet, éteignez votre télévision, débranchez votre radio et oubliez les journaux. On ne juge pas les abus d’un état en prenant pour argent comptant sa propagande. Le seul endroit où l’on peut s’informer objectivement sur Internet en France, c’est le Net lui-même. Du moins, tant qu’il lui reste un semblant de liberté…&lt;/p&gt;</description><author>Separate Concerns</author><pubDate>Thu, 04 Feb 2010 13:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.separateconcerns.com/2010-02-04-fr-neutralite-du-net.html</guid></item><item><title>Update</title><link>https://etodd.io/2010/02/04/update/</link><description>&lt;p&gt;Not dead... just really busy. Been doing a lot of network debugging and optimization; I added zlib compression to the network packets, which cut down network bandwidth by about a fourth. I also streamlined a few network issues, added a simple network performance logger, and implemented simple client-side interpolation; everything moves much smoother now, even if there is a slight delay. It's basically a fact of life these days in online games; as long as hit detection is still accurate, a small delay is practically unnoticeable.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Thu, 04 Feb 2010 03:13:20 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/02/04/update/</guid></item><item><title>getopt vs. optparse vs. argparse</title><link>https://purpleidea.com/blog/2010/02/03/getopt-vs-optparse-vs-argparse/</link><description>&lt;p&gt;sooner or later you&amp;rsquo;ll end up needing to do some argument parsing. the foolish end up writing their own yucky parser that ends up having a big if statement filled with things like:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;if len(sys.argv) &amp;gt; 1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;in it. don&amp;rsquo;t do this unless you have a &lt;b&gt;really&lt;/b&gt; good excuse.&lt;/p&gt;
&lt;p&gt;sooner or later, someone directs you to &lt;a href="http://docs.python.org/library/getopt.html"&gt;getopt&lt;/a&gt;, and you happily continue on with buggy manual parsing thinking you&amp;rsquo;ve &amp;ldquo;&lt;i&gt;found the way&lt;/i&gt;&amp;rdquo;. useful in some circumstances, but should generally be avoided.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Wed, 03 Feb 2010 14:25:08 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2010/02/03/getopt-vs-optparse-vs-argparse/</guid></item><item><title>Oracle Peformance Visualization…</title><link>https://tanelpoder.com/2010/02/03/oracle-peformance-visualization/</link><description>&lt;p&gt;Coskan Gundogar and Karl Arao have written two interesting articles about Oracle performance analysis and visualization, check these out!&lt;/p&gt;
&lt;p&gt;Coskan’s article:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://coskan.wordpress.com/2010/01/27/working-with-statspack-part-1a-diagnosis/"&gt;http://coskan.wordpress.com/2010/01/27/working-with-statspack-part-1a-diagnosis/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Karl’s article:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://karlarao.wordpress.com/2010/01/31/workload-characterization-using-dba_hist-tables-and-ksar/" target="_blank"&gt;&lt;a href="http://karlarao.wordpress.com/2010/01/31/workload-characterization-using-dba_hist-tables-and-ksar/"&gt;http://karlarao.wordpress.com/2010/01/31/workload-characterization-using-dba_hist-tables-and-ksar/&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that in March I will be releasing &lt;a href="https://tanelpoder.com/2008/12/28/performance-visualization-made-easy-perfsheet-20-beta/"&gt;PerfSheet&lt;/a&gt; v3.0, which will have lots of improvements! ;-)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 03 Feb 2010 11:47:42 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/02/03/oracle-peformance-visualization/</guid></item><item><title>Bind Variable Peeking – execution plan inefficiency</title><link>https://tanelpoder.com/2010/02/02/bind-variable-peeking-execution-plan-inefficiency/</link><description>&lt;p&gt;In my &lt;a href="https://tanelpoder.com/2010/01/15/beyond-oracle-wait-interface-part-2/" target="_blank"&gt;Beyond Oracle Wait interface article&lt;/a&gt; I troubleshooted a test case where an execution plan somehow went “crazy” and started burning CPU, lots of logical IOs and the query never completed.&lt;/p&gt;
&lt;p&gt;I have uploaded the test case that you can run here (note that it drops and creates tables T1..T5 in your schema):&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/ast/02_bind_peeking_nested_loops.sql" target="_blank"&gt;/ast/02_bind_peeking_nested_loops.sql&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Basically what I do is this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I run the query with bind variable values where only a handful of rows match the filter condition. Thus Oracle picks nested loop join (and indexed access path)&lt;/li&gt;
&lt;li&gt;Then I run the &lt;em&gt;same&lt;/em&gt; query with different bind values, where a lot of rows match the filter condition. Oracle reuses existing execution plan (with nested loops!!!). Oracle ends up looping through a lot of blocks again and again (because nested loop visits the “right” side of the join once for &lt;strong&gt;&lt;em&gt;every&lt;/em&gt;&lt;/strong&gt; row coming from the “left” side of the join).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Using nested loops over &lt;em&gt;lots&lt;/em&gt; of rows is a sure way to kill your performance.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 02 Feb 2010 19:11:34 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/02/02/bind-variable-peeking-execution-plan-inefficiency/</guid></item><item><title>Disappointed (so far) by Italian Open Legislation experiment</title><link>https://stop.zona-m.net/2010/02/disappointed-so-far-by-italian-open-legislation-experiment/</link><description>&lt;p&gt;In may 2009 I announced on the P2P Foundation blog what I believe is the &lt;a href="http://blog.p2pfoundation.net/open-legislation-in-italy/2009/05/17"&gt;first collaborative law writing experiment in Italy&lt;/a&gt;:&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 02 Feb 2010 08:49:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/02/disappointed-so-far-by-italian-open-legislation-experiment/</guid></item><item><title>Mr Label's nightmare: what really, really scares him</title><link>https://stop.zona-m.net/2010/02/mr-labels-nightmare-what-really-really-scares-him/</link><description>&lt;p&gt;Author&amp;rsquo;s note: I wrote the short &amp;ldquo;novel&amp;rdquo; below in&amp;hellip; June 2004. For several reasons I didn&amp;rsquo;t immediately publish it online, then it went lost on my hard drive. I found it again only some weeks ago, and I think the basic idea is still valid, so here it is.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 02 Feb 2010 02:08:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/02/mr-labels-nightmare-what-really-really-scares-him/</guid></item><item><title>Enough with this "Free Software is communist" myth! Please!</title><link>https://stop.zona-m.net/2010/01/enough-with-this-free-software-is-communist-myth-please/</link><description>&lt;p&gt;Really. It&amp;rsquo;s way paste expiration date.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 31 Jan 2010 02:28:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/01/enough-with-this-free-software-is-communist-myth-please/</guid></item><item><title>(French) Râleries multiples</title><link>https://blog.separateconcerns.com/2010-01-30-fr-raleries.html</link><description>&lt;p&gt;Ceux qui me connaissent savent que râler, je sais faire. J’essaie d’éviter autant que possible, mais parfois c’est nécessaire.&lt;/p&gt;
&lt;section id="Paye-ta-TV"&gt;
&lt;h2&gt;Paye ta TV&lt;/h2&gt;
&lt;p&gt;On la critique en France mais la redevance TV est bien pire en Angleterre. Si dans l’hexagone elle est perçue par l’État, ici c’est une &lt;a href="http://www.tvlicensing.co.uk"&gt;société privée&lt;/a&gt; qui s’en charge. Et contrairement à chez nous, ni les gens qui regardent la télé sur Internet ou sur un téléphone mobile ni les étudiants en résidence ne sont exemptés.&lt;/p&gt;
&lt;p&gt;Cette société, TV Licensing, envoie régulièrement des lettres de menace aux délinquants qui osent capter la bonne parole diffusée sur les ondes sans s’acquitter de la dîme. Hmm, un petit arrière-goût d’HADOPI ? J’ai reçu cinq lettres, et je suis d’après leurs dires “scheduled for visit”. Ils peuvent venir, j’ai l’esprit tranquille : je ne regarde &lt;strong&gt;pas&lt;/strong&gt; la TV, la loi anglaise ne leur permet pas d’entrer chez moi et de toute façon c’est tellement difficile techniquement d’atteindre ma porte que ça m’étonnerait qu’ils y arrivent un jour.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="Le-garçon-qui-criait-au-loup"&gt;
&lt;h2&gt;Le garçon qui criait au loup&lt;/h2&gt;
&lt;p&gt;Depuis que j’habite ici, j’ai bien dû être réveillé une vingtaine de fois par des alarmes incendies en pleine nuit. La première fois, enfiler un manteau, des chaussures et descendre devant l’entrée se geler pendant une demi-heure en attendant l’arrivée de la sécurité peut être drôle, mais à la longue ça lasse. Qui plus est, le dispositif d’alarme permet de savoir aisément quel détecteur a déclenché l’alerte, et donc de confirmer rapidement que c’est une erreur, mais la loi anglaise stipule qu’ignorer l’alarme et retourner au chaud dans son lit est un crime !&lt;/p&gt;
&lt;p&gt;Si jamais un feu se déclenche vraiment, j’espère que les familles des victimes penseront à faire un procès à tous les responsables du dispositif d’alarme. Un système d’alerte qui génère autant de faux-positifs est totalement inutile, simplement parce que personne n’y prête plus attention. Tous les administrateurs système qui ont déjà essayé de lire des logs doivent bien le savoir…&lt;/p&gt;
&lt;/section&gt;
&lt;section id="La-vie-privée-c'est-dépassé"&gt;
&lt;h2&gt;La vie privée, c’est dépassé !&lt;/h2&gt;
&lt;p&gt;C’est en tout cas ce que pense Mark Zuckerberg, le patron de Facebook. Il a le droit, et j’ai le droit de ne pas être d’accord. Comme &lt;a href="http://www.alain-bazot.fr/index.php/la-vie-privee-un-concept-depasse/"&gt;mon ami Dédé&lt;/a&gt;, je vais donc logiquement quitter le célèbre réseau social.&lt;/p&gt;
&lt;p&gt;De toute façon, les soi-disant réseaux sociaux sont des aberrations, des substituts au Web pour ceux qui ne l’ont pas compris. Vous voulez donner des nouvelles, ou même poster des liens débiles ? Ouvrez un blog (on appelait ça “une page perso” à l’époque révolue du Web 1.0), ou twittez si ça vous amuse ! Il semblerait que la raison qui pousse les gens à rejoindre Facebook soit la simplicité d’ouverture d’un compte. Ouvrir son blog aussi est très simple.&lt;/p&gt;
&lt;p&gt;Pour ma part, je ne consulterai pas Facebook en février. Je ne clôturerai mon compte que début mars de sorte que les gens qui n’ont que ce moyen pour me joindre puissent m’en demander un autre par message privé (je les reçois dans ma boite mail). Si vous trouvez que je suis paranoïaque, sachez simplement que l’un des sujets proposés en &lt;strong&gt;MSc Thesis&lt;/strong&gt; à Cranfield consiste à faire du &lt;strong&gt;data-mining&lt;/strong&gt; (collecter plein d’informations sur vous) sur Facebook en utilisant le &lt;strong&gt;Grid Computing&lt;/strong&gt; (un paquet d’ordinateurs, dont des super-calculateurs, en réseau). Si de tels moyens, habituellement réservés à de très grosses industries comme le pétrole, l’automobile ou la mode, sont déployés dans ce but, c’est simplement parce que vos données personnelles valent très cher.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="Java-m'pendre-ou-pas"&gt;
&lt;h2&gt;Java m’pendre (ou pas)&lt;/h2&gt;
&lt;p&gt;Java est un langage tout pourri, si je commençais à énumérer toutes les raisons pour ça il me faudrait autant de lignes que pour coder une application de taille moyenne dans le dit langage, et oui ça fait beaucoup.&lt;/p&gt;
&lt;p&gt;En tout cas, étant contraint et forcé d’en faire pas mal en ce moment, j’ai pu bien m’arracher les cheveux sur quelques points :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;string.length()&lt;/code&gt;, mais &lt;code&gt;table.length&lt;/code&gt;. La cohérence, vous connaissez ?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Avec Java, Axis et un programme un peu complexe, il suffit qu’une exception se déclenche pour afficher une trace qui fait cinq fois la hauteur de votre console. Bien entendu, le message d’erreur intéressant est en haut.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enfin et surtout, c’est &lt;strong&gt;lent&lt;/strong&gt;, à la compilation comme à l’exécution.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voilà, tout ceux qui l’ont utilisé savent que Java c’est mal. Après, il y en a qui aiment, et je n’ai rien contre les masochistes, mais je supporte déjà moins les sadiques qui forcent des gens sains d’esprit à s’en servir.&lt;/p&gt;
&lt;/section&gt;</description><author>Separate Concerns</author><pubDate>Sat, 30 Jan 2010 13:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.separateconcerns.com/2010-01-30-fr-raleries.html</guid></item><item><title>A simple exercise about online privacy</title><link>https://stop.zona-m.net/2010/01/a-simple-exercise-about-online-privacy/</link><description>&lt;p&gt;We regularly hear from prime time news or urban legends how Internet is some sort of Big Brother (the &lt;a href="http://gutenberg.net.au/ebooks01/0100021.txt"&gt;real one&amp;hellip;&lt;/a&gt;) able to track and report to some more or less hidden controllers everything we do online, to the point that what was once called privacy is dead.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 30 Jan 2010 07:21:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/01/a-simple-exercise-about-online-privacy/</guid></item><item><title>If you died now, who would look after your digital YOU?</title><link>https://stop.zona-m.net/2010/01/if-you-died-now-who-would-look-after-your-digital-you/</link><description>&lt;p&gt;You&amp;rsquo;ve surely seen, at least once in your life, one of those very romantic, hearth-breaking movies in which some John or Mary die but, just one moment before passing away says to whoever is tenderly holding his or her hands something like:&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 29 Jan 2010 04:09:37 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/01/if-you-died-now-who-would-look-after-your-digital-you/</guid></item><item><title>iPad Goes Corporate</title><link>https://www.danstroot.com/posts/2010-01-29-ipad-goes-corporate</link><description>&lt;img alt="post image" src="https://danstroot.imgix.net/assets/blog/img/iPad2010.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Like many people in the Technology world I watched Apple's iPad announcement this week with intense interest.  Unlike most people I am interested not in the consumer space  - but rather how could this device be used for business.  How could a new category like this be used?&lt;br /&gt;&lt;br /&gt;This post &lt;a href="https://www.danstroot.com/posts/2010-01-29-ipad-goes-corporate"&gt;iPad Goes Corporate&lt;/a&gt; first appeared on &lt;a href="https://www.danstroot.com"&gt;Dan Stroot's Blog&lt;/a&gt;</description><author>Dan Stroot</author><pubDate>Fri, 29 Jan 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.danstroot.com/posts/2010-01-29-ipad-goes-corporate</guid></item><item><title>Tripping up.</title><link>https://benovermyer.com/blog/2010/01/tripping-up/</link><description>&lt;p&gt;The beginning of Week 4. What a ride.&lt;/p&gt;
&lt;p&gt;I apologize for this post being a little late. The rough weather this past weekend and a hectic schedule catching up made for little blog-time.&lt;/p&gt;
&lt;p&gt;As it stands, I fell off the horse this last week. Though I haven’t used it, I’ve been carrying my debit card with me.&lt;/p&gt;
&lt;p&gt;That’ll stop this week, and next. My goal for Week 4 was to have less spending money in the budget, and to be honest, I failed there. I didn’t set a budget, let alone a smaller one. I could make excuses, but really, it’s just lack of motivation. I’ve set a budget now and will continue to do so.&lt;/p&gt;
&lt;p&gt;One of the most important things you can do as a human being is to fail and learn from those failures. I intend to do that this time around.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Thu, 28 Jan 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2010/01/tripping-up/</guid></item><item><title>iPad? iPerfect (…for me)</title><link>https://caiustheory.com/ipad-iperfect-for-me/</link><description>&lt;p&gt;&lt;em&gt;Google Groups is a pile of fail and hasn&amp;rsquo;t posted my message in reply to a thread on &lt;a href="http://geekup.org/"&gt;Geekup&lt;/a&gt; so I&amp;rsquo;m blogging it instead.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;On 27 Jan 2010, at 19:53, Steve Richardson wrote:&lt;br /&gt;
Thoughts?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;ve been searching for a device to fit between my Macbook Pro and iPhone. I work all day on the MBP, and moving it to then watch video in another room or read twitter/news/mail whilst watching telly, etc is a pain.&lt;/p&gt;
&lt;p&gt;The iPhone is a great little device on the move, but for trying to multitask at home it&amp;rsquo;s a bit.. tedious. Even jailbroken and running multiple apps at once it&amp;rsquo;s still limiting.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d been looking around at netbooks, but what put me off actually getting one was my previous experience with one. I know I&amp;rsquo;d want it to run OS X to keep in sync (easily) with my other Apple devices, but hackintoshing one was a bit too much hassle, plus the fact ones to hackintosh cost more than I really wanted to pay for something that wasn&amp;rsquo;t &lt;em&gt;quite&lt;/em&gt; what I thought I needed.&lt;/p&gt;
&lt;p&gt;And then.. the iPad. I&amp;rsquo;ve been sort of keeping up with the rumours (mainly through &lt;a href="http://daringfireball.net"&gt;Daring Fireball&lt;/a&gt;) and whilst I didn&amp;rsquo;t get excited about it too much ahead of announcement&lt;!-- raw HTML omitted --&gt;1&lt;!-- raw HTML omitted --&gt;, having seen the official video of it it&amp;rsquo;s pretty much guaranteed that I&amp;rsquo;m going to get one.&lt;/p&gt;
&lt;p&gt;Yes, it&amp;rsquo;s limited (App Store, closed device), but.. I don&amp;rsquo;t care. Take the iPhone, it&amp;rsquo;s good enough for doing things on it, even if someone else is in charge of the ecosystem and has a big finger saying yes or no. I (willingly) use iTunes, Mobile Me, all the things that are so wonderfully integrated in the world of Apple, so another device that consumes my media using channels I already know and use is just a massive win for me.&lt;/p&gt;
&lt;p&gt;All I&amp;rsquo;m hoping now is that $499 doesn&amp;rsquo;t equal £499. Hopefully it&amp;rsquo;ll be £399, still a good £80 above direct exchange rate, but low enough that it&amp;rsquo;s a no-brainer for me to get one.&lt;/p&gt;
&lt;p&gt;…And I think this is the first Apple product that I&amp;rsquo;ve seen announced and actually known from the start &lt;em&gt;why&lt;/em&gt; I&amp;rsquo;m going to get one, instead of just a knee-jerk &amp;ldquo;SHINY!!!! WANT!!!&amp;rdquo; reaction. Uh oh, does that make me an adult?&lt;/p&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;1&lt;!-- raw HTML omitted --&gt; I miss getting really excited about apple announcements :(&lt;/p&gt;
&lt;h4 id="update"&gt;Update&lt;/h4&gt;
&lt;p&gt;It just got even better. Was lamenting to a &lt;a href="http://tmertz.com/"&gt;friend&lt;/a&gt; on IM that it&amp;rsquo;d be so much nicer once you can directly suck photos off a camera/SD card into it. Turns out there&amp;rsquo;s an adapter for that. See &amp;ldquo;iPad Camera Connection Kit&amp;rdquo; at the bottom of &lt;a href="http://www.apple.com/ipad/specs/"&gt;http://www.apple.com/ipad/specs/&lt;/a&gt; for details.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Wed, 27 Jan 2010 22:56:50 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/ipad-iperfect-for-me/</guid></item><item><title>Scala 2.8.0 beta 1 released</title><link>https://rd.nz/2010/01/scala-280-beta-1-released.html</link><author>Rich Dougherty</author><pubDate>Wed, 27 Jan 2010 21:15:00 GMT</pubDate><guid isPermaLink="true">https://rd.nz/2010/01/scala-280-beta-1-released.html</guid></item><item><title>sorting out the confusion</title><link>https://purpleidea.com/blog/2010/01/27/sorting-out-the-confusion/</link><description>&lt;p&gt;if i&amp;rsquo;ve been silent as of late, it&amp;rsquo;s because i&amp;rsquo;ve been furiously coding away. i&amp;rsquo;ve got what i think are some elegant implementations cooking, and with any luck my extra work will pay off in hours and days and months of time saved down the road. i&amp;rsquo;ve got a few interesting (interesting with respect to your average rating of the blog posts on this site) posts cooking in my mind, and hopefully they&amp;rsquo;ll appear shortly!&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Wed, 27 Jan 2010 15:03:51 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2010/01/27/sorting-out-the-confusion/</guid></item><item><title>Who will filter the stream first?</title><link>/2010/01/26/Who-will-filter-the-stream-first/</link><description>&lt;p&gt;Facebook is where I have more noise than any other social site, twitter may even tie facebook at amount of sheer content I receive in my feed. With regards to the ratio of what I care about to what I see facebook is a lot better, due to their news feed versus live feed. However, their news feed is still very often off. I wrote some time back about web 3.0, and how essentially showing what I want to see is what the web will become. You&amp;rsquo;ll take the vast amount of content and distill it into what I want to see. People seem to be taking very half-hazard shots at it and its quite a let down.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll start with twitter, twitter gives no filtering on the content based on their view. Instead they put the control in the users hands for me to create filters based on friends. This means I have to take time to go through all of my 600+ people I follow and group them into lists, then navigate each list when I want to view such topics. This is not only time intensive it still doesn&amp;rsquo;t accomplish what I want which is information by topic in a lot of cases, especially on twitter.&lt;/p&gt;
&lt;p&gt;Moving on to facebook, they at least take care of the process (almost transparently) of who I want to see. If someone shows up, I can simply say hide from the news feed. I have a strong hunch that when I click out of the news feed and go to someone&amp;rsquo;s profile it weights that person to be more frequent. This is a very logical deduction to make, and in most cases I&amp;rsquo;m pretty pleased with the result. The big problem with this is it&amp;rsquo;s still all about the people, not about the content. If I clicked on someone because they mentioned coming to visit California, I may have not talked to them in 2 years, but would simply like to offer up my help when they visit. This doesn&amp;rsquo;t mean I want to get updates about them after they visit.&lt;/p&gt;
&lt;p&gt;Facebook is definitely a leader in this space, first they&amp;rsquo;re one of the few with enough content in a feed that filtering even matters. Then the fact that they get a user beyond analysis-paralysis it&amp;rsquo;s a positive move, however the classification is wrong. Whether it&amp;rsquo;s twitter, facebook, or some other service that hasn&amp;rsquo;t emerged yet, filtering a mass of information to what a user cares about will be huge.&lt;/p&gt;
&lt;p&gt;Amazon and Netflix have done this for products, why has no one tried this for information?&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Wed, 27 Jan 2010 03:56:01 GMT</pubDate><guid isPermaLink="true">/2010/01/26/Who-will-filter-the-stream-first/</guid></item><item><title>Elemental Magic Workshop with Joseph Gilland</title><link>https://blog.yiningkarlli.com/2010/01/elemental-magic-workshop-with-joseph-gilland.html</link><description>&lt;p&gt;Last week over the Martin Luther King Jr. Day weekend, I attended a workshop on effects animation at Penn’s School of Design. The workshop was run by &lt;a href="http://elementalmagic.blogspot.com/"&gt;Joseph Gilland&lt;/a&gt;, who ran effects animation at Walt Disney Feature Animation for a while and worked on films such as Lilo and Stitch and Mulan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Jan/penn_6.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Jan/penn_6.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The workshop ran for three days and focused on Mr. Gilland’s “organic approach” to visual effects animation- basically, his idea is that effects animation should focus on more traditional, hand-animated techniques rather than the complex CGI simulation stuff that’s all the rage today. After his workshop, I think I agree with him- the stuff he showed us was simply breathtaking.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Jan/penn_68.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Jan/penn_68.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Jan/penn_7.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Jan/penn_7.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During the workshop, we did some studies and prototyping for various visual effects ideas we had. I chose to do an exploding aquarium (I think Mr. Gilland started referring me as “the crazy guy” after I chose that.). I had another idea: a hand reaching through smoke. I had the idea that the hand would be reaching through smoke into a bank vault or something. Here’s a sketch of the two initial ideas:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Jan/concepts.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Jan/concepts.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mr. Gilland was kind enough to talk through the concept with me though. He sketched this initial concept for me (mad cool!):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Jan/jgsketch.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Jan/jgsketch.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After talking with Mr. Gilland and looking at some of his suggestions, I went about doing three separate studies of what the glass, water, and fireball might look like. Some pencil sketches:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Jan/pencilsketch1.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Jan/pencilsketch1.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Jan/pencilsketch2.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Jan/pencilsketch2.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I scanned the three studies and composited/colorized them together in Photoshop. The blue is water, the yellow/orange is the fireball, and the red represents the shattering glass:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.yiningkarlli.com/content/images/2010/Jan/finalcolor.jpg"&gt;&lt;img alt="" src="https://blog.yiningkarlli.com/content/images/2010/Jan/finalcolor.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m going to try to actually do some animation tests for this- although obviously the end result will have to be much simpler visually than the above sketches. I have a feeling I’m going to be consulting the effects library Mr. Gilland gave us a LOT.&lt;/p&gt;

&lt;p&gt;Mr. Gilland has a book on visual effects animation titled &lt;a href="http://www.amazon.com/Elemental-Magic-Special-Effects-Animation/dp/0240811631"&gt;Elemental Magic&lt;/a&gt;. I really recommend checking it out.&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Wed, 27 Jan 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2010/01/elemental-magic-workshop-with-joseph-gilland.html</guid></item><item><title>Issues Aren't Always Bad</title><link>/2010/01/25/Issues-Arent-Always-Bad/</link><description>&lt;p&gt;I often encounter people whether at my office or at other places of employment that are distraught after getting an earful from a manager from some problem arising. The problem usually isn&amp;rsquo;t in their control, and therefore they don&amp;rsquo;t understand why they get heat for this. Most managers though do actually understand when issues come up, however what they don&amp;rsquo;t appreciate is late notice, lack of problem solving, and dictating what should be done next.&lt;/p&gt;
&lt;p&gt;Managers typically want individuals to take control of a situation and work towards resolving it.&lt;/p&gt;
&lt;p&gt;One thing you can do to ease the backlash that may occur for issues coming up is to communicate proactively as things develop/occur or lack there of. Keep in mind this should relate well to your managers style, some managers only want details when they absolutely have to have them. In that case you&amp;rsquo;ll want to gradually give your manager a heads up, but not burden him with too much information. I would venture to say however that most managers appreciate details, details are great to give them insight into how things are going and allow them to feel engaged at a lower level.&lt;/p&gt;
&lt;p&gt;So assume you&amp;rsquo;ve communicated regularly to your manager, this still does not prevent any issues from happening, but rather reduces the shock when something does. At this point a manager still does not want a fact stated that there&amp;rsquo;s a problem. In every case I&amp;rsquo;ve encountered the manager wants you to take ownership of the issue, meaning to give some options. Once the problem has arisen you should instantly start looking for ways to solve it. Often time these ways are not within your power to make the final decision, though you do have a great deal of control in presenting the case to a manager.&lt;/p&gt;
&lt;p&gt;Finally if you want brownie points, take less credit for any of the work you&amp;rsquo;ve done and give your manager more. If you&amp;rsquo;ve communicated early, laid out various options for how to resolve the issue with pros and cons of each you&amp;rsquo;ve done what you can. This should make it very easy on your manager to simple say, go with Option B, and follow back up with me on Monday. At this point if you give your manager most of the credit for helping the issue, it will only come back to you. While this is potentially the least critical of the three points, it can often pay off equally as much.&lt;/p&gt;
&lt;p&gt;This is easier to do as you pay attention to issues and start to become pro-active. Taking ownership may not be in your job title or description, but it will definitely get you less earfuls from managers, and likely move you through the ranks faster.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Tue, 26 Jan 2010 03:30:10 GMT</pubDate><guid isPermaLink="true">/2010/01/25/Issues-Arent-Always-Bad/</guid></item><item><title>Experiments</title><link>https://web.navan.dev/posts/2010-01-24-experiments.html</link><description>Just a markdown file for all experiments related to the website</description><author>Navan's Archive</author><pubDate>Mon, 25 Jan 2010 01:43:00 GMT</pubDate><guid isPermaLink="true">https://web.navan.dev/posts/2010-01-24-experiments.html</guid></item><item><title>Copyright in Canada</title><link>https://jasoneckert.github.io/myblog/copyright-in-canada/</link><description>&lt;p&gt;&lt;img alt="Copyright" src="copyright.jpg#right" title="Copyright" /&gt;&lt;/p&gt;
&lt;p&gt;Thirty years ago, people bought music on a record&amp;hellip;.a tangible thing like any other item for sale in a store.  Now, people can download information (text, music, movies, etc.) from the Internet effortlessly.  This copying of information has threatened the business models of many large and powerful companies such as music labels and movie producers.  And these companies have reacted to their shrinking profits by abusing copyright and suing their customers rather than changing their business models.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sat, 23 Jan 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/copyright-in-canada/</guid></item><item><title>Good news for all parents and teachers: it's Ubuntu User Day</title><link>https://stop.zona-m.net/2010/01/good-news-for-all-parents-and-teachers-its-ubuntu-user-day/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 22 Jan 2010 07:45:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/01/good-news-for-all-parents-and-teachers-its-ubuntu-user-day/</guid></item><item><title>Recursive sessions…</title><link>https://tanelpoder.com/2010/01/21/recursive-sessions-2/</link><description>&lt;p&gt;I have published a new article to tech.e2sn.com about recursive sessions and &lt;strong&gt;ORA-00018: maximum number of sessions exceeded&lt;/strong&gt; error message:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tech.e2sn.com/oracle/oracle-internals-and-architecture/recursive-sessions-and-ora-00018-maximum-number-of-sessions-exceeded" target="_blank"&gt;&lt;a href="http://tech.e2sn.com/oracle/oracle-internals-and-architecture/recursive-sessions-and-ora-00018-maximum-number-of-sessions-exceeded"&gt;http://tech.e2sn.com/oracle/oracle-internals-and-architecture/recursive-sessions-and-ora-00018-maximum-number-of-sessions-exceeded&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Note that I’m working on setting up RSS feed for tech.e2sn too, coming soon :)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 22 Jan 2010 06:43:29 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/01/21/recursive-sessions-2/</guid></item><item><title>Continuations plugin for Scala 2.8 beta</title><link>https://rd.nz/2010/01/continuations-plugin-for-scala-28-beta.html</link><author>Rich Dougherty</author><pubDate>Fri, 22 Jan 2010 02:28:00 GMT</pubDate><guid isPermaLink="true">https://rd.nz/2010/01/continuations-plugin-for-scala-28-beta.html</guid></item><item><title>Privacy: Privilege or Right?</title><link>https://www.keithrpetersen.com/blog/privacy-privilege-or-right/</link><description>&lt;p&gt;Nicholas Carr, my favorite information technology skeptic, has written &lt;a href="http://www.roughtype.com/archives/2010/01/other_peoples_p.php" title="Other people's privacy"&gt;a great post on privacy&lt;/a&gt; with respect to the Gmail security breach and Facebook’s “enhanced” privacy options:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.keithrpetersen.com/blog/privacy-privilege-or-right/"&gt;Read More&lt;/a&gt;&lt;/p&gt;</description><author>Blog - Keith R. Petersen</author><pubDate>Fri, 22 Jan 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.keithrpetersen.com/blog/privacy-privilege-or-right/</guid></item><item><title>Forget Doing Something Better, Do Something Different</title><link>/2010/01/21/Forget-Doing-Something-Better-Do-Something-Different/</link><description>&lt;p&gt;I have a tendency of really latching onto very simple ideas. Typically these ideas don&amp;rsquo;t require complex engineering to make them happen. This is not to say the engineering is not important, but more so that it is some variation of engineering feats that have been done before. The reason I tend to like these over more complex engineering that really makes something better is that making something better is typically a marginal improvement. When it&amp;rsquo;s a marginal improvement it&amp;rsquo;s a lot harder to sell.&lt;/p&gt;
&lt;p&gt;With marginal improvements you have to:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;In contrast if I address a problem that hasn&amp;rsquo;t been solved my life instantly becomes a lot easier. I no longer have an argument of something not being good enough today, it becomes a question of value and how much its worth to solve the problem. Haggling over price is a conversation I&amp;rsquo;d rather have than trying to justify value and convince a customer they&amp;rsquo;ve been wrong in their choice for so many years.&lt;/p&gt;
&lt;p&gt;Over the coming days I&amp;rsquo;m going to be posting a few of these examples/ideas and why I like them. Many of them are still being thought through, and while as I sort them out, I&amp;rsquo;m generally happy to publish high points about them. The even bigger key here is that success is typically in the execution and less so in the idea, though even then I&amp;rsquo;d prefer to execute on something that has less battles than something that from the onset has more. By doing something that is being done today you get no advantages of penetrating the market.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 22 Jan 2010 00:49:33 GMT</pubDate><guid isPermaLink="true">/2010/01/21/Forget-Doing-Something-Better-Do-Something-Different/</guid></item><item><title>Explaining global warming to home buyers</title><link>https://stop.zona-m.net/2010/01/explaining-global-warming-to-home-buyers/</link><description>Even in this period of housing crisis (or maybe just because of it) buying a house may be a wise investment if you can afford it without a big mortgage! The task is made easier by the Internet, which lets us find the best deal with just a few clicks.
As an example, let's look at the cases of three not-so-imaginary Italian average citizens, signori Rossi, Bianchi and Verdi, who are thinking about purchasing a house for their summer holidays in some Italian seaside city.</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 21 Jan 2010 03:55:38 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/01/explaining-global-warming-to-home-buyers/</guid></item><item><title>Parallelizing the Product Process?</title><link>/2010/01/20/Parallelizing-the-Product-Process/</link><description>&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 21 Jan 2010 00:42:49 GMT</pubDate><guid isPermaLink="true">/2010/01/20/Parallelizing-the-Product-Process/</guid></item><item><title>Who Cares About Visitors?</title><link>/2010/01/19/Who-Cares-About-Visitors/</link><description>&lt;p&gt;The web is becoming saturated. It&amp;rsquo;s no longer the pimply faced 20 somethings living in their mom&amp;rsquo;s basements that are the key users and the source of most of the traffic on the web. Now you have communities for pregnant moms, sites for elderly widows looking to date, and social sites for kids from the time they&amp;rsquo;re able to talk. So now that the web is hitting its saturation point of types of people interacting it becomes a critical issue to take advantage of those users and get them to do more.&lt;/p&gt;
&lt;p&gt;Up until this point it&amp;rsquo;s been about getting more users, more people, that easily translated into more hits of course. But now what people want is richer engagement, they want users to be active, then to contribute the content. When users are more active it means just as many hits, but more engagement is a harder issue than more users. More users usually meant more marketing budget and a piece of allowing the market to mature. More engagement means you actually have to be more methodical about what you&amp;rsquo;re doing. It means you have to more closely balance the quality of what is one your site versus how you manage the ad&amp;rsquo;s which equate to revenue.&lt;/p&gt;
&lt;p&gt;The news that facebook is exposing how many impressions a page gets versus the amount of feedback has been received is a driver in this direction. Fortunately for facebook, they don&amp;rsquo;t have control over Fan Pages so it&amp;rsquo;s not their job to drive up engagement on a per page basis. Unfortunately for other major publishers this is a very unscientific science, and what works and doesn&amp;rsquo;t work can only be a result of trying out new options. There&amp;rsquo;s a lot of opportunity here for those that really figure out what key drivers are of engagement, it&amp;rsquo;s one thing to measure it, it&amp;rsquo;s another to be able to readily define out to improve it, and no one has repeatedly done that on the web yet.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Wed, 20 Jan 2010 01:55:22 GMT</pubDate><guid isPermaLink="true">/2010/01/19/Who-Cares-About-Visitors/</guid></item><item><title>Sometimes things are easy (Part 1): How to fix wrapped execution plan text?</title><link>https://tanelpoder.com/2010/01/18/sometimes-things-are-easy-part-1-how-to-fix-wrapped-execution-plan-text/</link><description>&lt;p&gt;What you see below is a common problem. Someone sends you (or posts to a forum) a wide execution plan, which is unreadable because of wrapped lines. For example, this one below:&lt;/p&gt;
&lt;pre&gt;--------------------------------------------------------------------------------
-------------------

| Id  | Operation                   | Name                    | E-Rows |  OMem |
 1Mem | Used-Mem |

--------------------------------------------------------------------------------
-------------------

|   0 | SELECT STATEMENT            |                         |        |       |
 |          |

|   1 |  SORT AGGREGATE             |                         |      1 |       |
 |          |

|*  2 |   HASH JOIN                 |                         |     13 |  1102K|
 1102K|  355K (0)|

|*  3 |    HASH JOIN                |                         |     13 |   988K|
 988K|  367K (0)|

|*  4 |     HASH JOIN               |                         |     13 |   921K|
 921K|  621K (0)|

|*  5 |      HASH JOIN OUTER        |                         |     13 |   836K|
 836K| 1224K (0)|

|*  6 |       HASH JOIN             |                         |     13 |   821K|
 821K|  501K (0)|

|*  7 |        HASH JOIN            |                         |     13 |  1102K|
 1102K|  501K (0)|

|   8 |         MERGE JOIN CARTESIAN|                         |      1 |       |
 |          |

|*  9 |          TABLE ACCESS FULL  | PROFILE$                |      1 |       |
 |          |

|  10 |          BUFFER SORT        |                         |      1 | 73728 |
 73728 |          |

|* 11 |           TABLE ACCESS FULL | PROFILE$                |      1 |       |
 |          |

|* 12 |         TABLE ACCESS FULL   | USER$                   |     36 |       |
 |          |

|  13 |        TABLE ACCESS FULL    | PROFNAME$               |      1 |       |
 |          |

|* 14 |       TABLE ACCESS FULL     | RESOURCE_GROUP_MAPPING$ |      1 |       |
 |          |

|  15 |      TABLE ACCESS FULL      | TS$                     |      7 |       |
 |          |

|  16 |     TABLE ACCESS FULL       | TS$                     |      7 |       |
 |          |

|  17 |    TABLE ACCESS FULL        | USER_ASTATUS_MAP        |      9 |       |
 |          |

--------------------------------------------------------------------------------
-------------------
&lt;/pre&gt;
&lt;p&gt;So now you either try to manually edit and fix the execution plan text so you could read it or ask the developer to send the execution plan again. Both approaches take time.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 18 Jan 2010 18:26:33 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/01/18/sometimes-things-are-easy-part-1-how-to-fix-wrapped-execution-plan-text/</guid></item><item><title>Reactivation (and some ramblings on my blogging infrastructure)</title><link>http://blog.danieljanus.pl/reactivation/</link><description>&lt;div&gt;&lt;p&gt;This blog has not seen content updates in more than a year. Plenty of things can happen in such a long period, and in fact many aspect of my life have seen major changes over this time. I’m not, however, going to write a lengthy post about all that right now. Instead, I just would like to announce the reactivation of the blog.&lt;/p&gt;&lt;p&gt;You might have noticed that many things have changed. First, the blog has a new address: &lt;a href="http://blog.danieljanus.pl"&gt;&lt;code&gt;http://blog.danieljanus.pl&lt;/code&gt;&lt;/a&gt;; the address of the RSS feed has also changed and is now &lt;a href="http://blog.danieljanus.pl/index.rss"&gt;&lt;code&gt;http://blog.danieljanus.pl/index.rss&lt;/code&gt;&lt;/a&gt; — please update your readers!&lt;/p&gt;&lt;p&gt;Probably the most important change is that you now may post comments under the entries, even though this blog continues to be just a bunch of static HTML pages. This is possible thanks to the &lt;a href="http://disqus.com/"&gt;Disqus&lt;/a&gt; service. I wonder whether it will encourage people to give feedback: I have received very few email comments since I started blogging. Also, the static calendar at the top of each page is gone, replaced by a bunch of links to archive posts.&lt;/p&gt;&lt;p&gt;I have long been considering changing &lt;a href="http://www.blosxom.com/"&gt;Blosxom&lt;/a&gt; to something else. The main reason for such a step is that it’s written in Perl, which makes it particularly hard to debug upon encountering an unexpected behaviour. The single most irritating thing was that Blosxom would unexpectedly change the date of a post that was edited (which did not let me fix typos and other glitches); I found a patch for this somewhere, but lost it.&lt;/p&gt;&lt;p&gt;On the other hand, I really liked — and still like — Blosxom’s minimalistic approach and the ease of adding posts. (The very idea of installing a monstrosity such as Wordpress, with its gazillion of features I don’t need, posts kept in a database and what not, makes me feel dizzy.) I fiddled for a while with the thought of reimplementing Blosxom in Common Lisp, but that turned out to be a more time-consuming project than it initially seemed. So when I found &lt;a href="http://blosxom.ookee.com/"&gt;The Unofficial Blosxom User Group&lt;/a&gt; and learned that, contrary to my belief, Blosxom is still actively maintained and has a thriving community, I ended up staying with the original Perl version, refining my installation so that it no longer gets in the way (&lt;a href="http://blosxom.ookee.com/blog/help/howto_update_posts_without_making_the_date_change.html"&gt;this FAQ entry&lt;/a&gt; did the trick). I also rewrote all my source text files to &lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt;, which made them vastly more readable and easy to edit, updating links and adding short followup notes where appropriate, but otherwise leaving old entries as they were.&lt;/p&gt;&lt;p&gt;I’d like to thank &lt;a href="http://www.3ofcoins.net/2010/01/08/revive-the-blog-project-52/"&gt;Maciek Pasternacki&lt;/a&gt; for inspiring me to finally get around to this. While my plans are not as ambitious as his — I am not courageous enough to publicly prove my perseverance, so my blogging will likely continue to be irregular — I plan to write more (having accumulated many ideas for blog posts) and I hope the periods of silence will be much shorter than hitherto.&lt;/p&gt;&lt;p&gt;I would like to take this opportunity to wish my readers all the best in the New Year!&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Mon, 18 Jan 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/reactivation/</guid></item><item><title>PHP cURL cookies not saving on Windows</title><link>https://thomashunter.name/posts/2010-01-17-php-curl-cookies-not-saving-on-windows</link><description>Why cURL doesn't work well with relative paths that PHP works fine with, and a workaround for the issue.</description><author>Thomas Hunter II</author><pubDate>Sun, 17 Jan 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2010-01-17-php-curl-cookies-not-saving-on-windows</guid></item><item><title>Time to lose the cards…</title><link>https://benovermyer.com/blog/2010/01/time-to-lose-the-cards/</link><description>&lt;p&gt;So here we are at the beginning of week 3. Week 2 passed successfully, as I was able to set a budget for the cash I was carrying and stick to it. I have noticed, though, that since this is a once-a-week decision, it might not be enough of a conscious habit to stick permanently. We’ll see.&lt;/p&gt;
&lt;p&gt;This coming week is a big one – leaving the plastic at home. Since I’ll no longer have that perceived safety net, I have to be very careful about how I budget my cash. If I screw up, I could be stranded, as I have to travel a fair distance to get to work. As it stands now, about 95% of my cash is budgeted towards gas money, with the remaining 5% put towards miscellaneous expenses.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Sun, 17 Jan 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2010/01/time-to-lose-the-cards/</guid></item><item><title>Beyond Oracle Wait Interface – Part 2</title><link>https://tanelpoder.com/2010/01/15/beyond-oracle-wait-interface-part-2/</link><description>&lt;p&gt;This is the second part of the joint blog “project” with James Morle, called “The Wait Interface Is Useless (Sometimes)”.&lt;/p&gt;
&lt;p&gt;We already did a joint presentation on this topic at UKOUG and more conferences will follow :) Read the first part by James &lt;a href="http://www.jamesmorle.com/the-oracle-wait-interface-is-useless-sometimes-pt/" target="_blank"&gt;here&lt;/a&gt; for intro.&lt;/p&gt;
&lt;p&gt;So, where do we go when Oracle’s wait interface doesn’t help us? We will show multiple techniques over time, but here’s where I normally continue when wait interface is “useless”.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 15 Jan 2010 12:53:57 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2010/01/15/beyond-oracle-wait-interface-part-2/</guid></item><item><title>Gameplay trailer</title><link>https://etodd.io/2010/01/15/gameplay-trailer/</link><description>&lt;p&gt;Finally got sound working in these videos, yay! New features in this video include the aforementioned shadow mapping and reloading, a brand new three player map called Orbit, and heavy modifications to the original Impact level.&lt;/p&gt;
&lt;p&gt;I really cannot wait to get the multiplayer up and running, and get people playing the beta. Next on my to-do list are a few standard online features: basic match-making, in-game chat, etc.&lt;/p&gt;
&lt;p&gt;Without further ado:&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Fri, 15 Jan 2010 04:30:38 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/01/15/gameplay-trailer/</guid></item><item><title>Behavioral Targeting versus Contextual Advertising</title><link>/2010/01/14/Behavioral-Targeting-versus-Contextual-Advertising/</link><description>&lt;p&gt;There&amp;rsquo;s a continual shift that seems to be happening on whether contextual advertising is better than behavioral. It seems that most people are becoming bigger and bigger on behavioral, and assuming that contextual has reached it&amp;rsquo;s peak. After meeting with a company that at first started to do both, blurring the lines, taking advantage of each when they had appropriate data it started to become clear that they more so have their place and time. Behavioral and Contextual shouldn&amp;rsquo;t be direct competitors.&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 15 Jan 2010 03:25:37 GMT</pubDate><guid isPermaLink="true">/2010/01/14/Behavioral-Targeting-versus-Contextual-Advertising/</guid></item><item><title>Lessons from Haiti - Never Under Estimate Ease of Use</title><link>https://www.danstroot.com/posts/2010-01-15-lessons-from-haiti</link><description>&lt;img alt="post image" src="https://danstroot.imgix.net/assets/blog/img/haiti.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;The Red Cross, via a company called mGive, has got the major U.S. carriers on board to allow people to very easily donate $10 to the Red Cross via a simple SMS text message. This led to an "unprecedented mobile response," and has raised over $10 million in relief for Haiti. With text donations peaking at a rate of 10,000 a minute, at $10 per donation, this is raising $100,000 per minute!&lt;br /&gt;&lt;br /&gt;This post &lt;a href="https://www.danstroot.com/posts/2010-01-15-lessons-from-haiti"&gt;Lessons from Haiti - Never Under Estimate Ease of Use&lt;/a&gt; first appeared on &lt;a href="https://www.danstroot.com"&gt;Dan Stroot's Blog&lt;/a&gt;</description><author>Dan Stroot</author><pubDate>Fri, 15 Jan 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.danstroot.com/posts/2010-01-15-lessons-from-haiti</guid></item><item><title>Fifth Annual Report: My Success</title><link>https://www.jimwestergren.com/fifth-annual-report-my-success/</link><description>On the 5th of December 2004 when I was 22 years old I changed my life 180 degrees. I quit my earlier very special life and moved back to Sweden to change my life totally. I had no money, education, experience or connections and some people highly doubted that I could get successful – personally &amp;#91;...&amp;#93;</description><author>Jim Westergren</author><pubDate>Mon, 11 Jan 2010 13:07:00 GMT</pubDate><guid isPermaLink="true">https://www.jimwestergren.com/fifth-annual-report-my-success/</guid></item><item><title>Analysing some bin packing heuristics</title><link>https://bastian.rieck.me/blog/2010/bin_packing/</link><description>&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;The bin packing problem is the problem of packing various objects of certain
sizes into a minimum number of bins with a fixed size (where the bin size is
usually smaller than the sum of all objects). If you have helped someone moving
out you already know something about the bin packing problem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It is easy to state (&amp;ldquo;Just pack everything as tight as possible&amp;rdquo;).&lt;/li&gt;
&lt;li&gt;It is hard to solve (&amp;ldquo;Dude, why is this box half-empty?&amp;rdquo;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In fact, the problem is &lt;a href="https://en.wikipedia.org/wiki/NP-hard"&gt;&amp;ldquo;NP-hard&amp;rdquo;&lt;/a&gt;. In order to
solve it quickly, some heuristics have been found. The simplest heuristic is
the &lt;code&gt;Next-Fit&lt;/code&gt; heuristic. It works like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Keep one bin open.&lt;/li&gt;
&lt;li&gt;Go through the objects.&lt;/li&gt;
&lt;li&gt;As long as the object fits in the bin, pack it there. If it does not fit
anymore, open a new bin.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Again, if you have ever helped someone moving out, this is the approach most
people prefer to take when packing stuff. The interesting thing about this
heuristic is that it is only twice as big as the optimal solution (in the worst
case).&lt;/p&gt;
&lt;p&gt;Being nerds, we are not content with this solution. Luckily, many other
heuristics have been developed. I have analyzed and implemented some of them, namely:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Best-Fit&lt;/li&gt;
&lt;li&gt;First-Fit&lt;/li&gt;
&lt;li&gt;First-Fit-Decreasing&lt;/li&gt;
&lt;li&gt;Max-Rest (also known as Worst-Fit)&lt;/li&gt;
&lt;li&gt;Next-Fit&lt;/li&gt;
&lt;li&gt;Next-Fit-Decreasing&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="code"&gt;Code&lt;/h1&gt;
&lt;p&gt;I have written a demo program that compares the running time and quality of the
heuristics mentioned before. The program is released under a BSD licence. Please
find it &lt;a href="https://github.com/Pseudomanifold/bin-packing-heuristics"&gt;on GitHub&lt;/a&gt;.
Basic usage:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;make
./bin-packing &amp;lt; bin-packing-demo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see, the input is read directly from &lt;code&gt;STDIN&lt;/code&gt;. The input file must obey a very easy format:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The first line must contain the number of objects as integer&lt;/li&gt;
&lt;li&gt;The second line must contain the bin size as an integer&lt;/li&gt;
&lt;li&gt;The following lines must contain the size of each object as an integer (one line per object)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The file is not checked for consistency or anything. It&amp;rsquo;s just a demo, after all.&lt;/p&gt;
&lt;p&gt;You can generate your own input data by using the perl script
&lt;code&gt;generate-problem.pl&lt;/code&gt;. It simply generates random object data and writes it to
&lt;code&gt;STDOUT&lt;/code&gt;. The script expects two command-line parameters, namely the number of objects
followed by the bin size:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;perl generate-problem.pl 10000 100 &amp;gt; my-problem
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The line above generates a random problem that contains 10000 objects varying
in sizes between 1 and 100.&lt;/p&gt;
&lt;h1 id="analysis-of-the-heuristics"&gt;Analysis of the Heuristics&lt;/h1&gt;
&lt;p&gt;I have analyzed the running time and quality of the heuristics for some example
files (provided by my course instructors). I do not know whether I am allowed
to publish them, so I will just publish my &amp;ldquo;results&amp;rdquo;. &lt;a href="https://bastian.rieck.me/research/Note_BP.pdf"&gt;Feel free to download my
paper&lt;/a&gt;; it contains a short description of each heuristic
along with a very basic complexity analysis. For some of the heuristics, I also
prove the quality of the resulting solution (the proofs are &lt;em&gt;very basic&lt;/em&gt;, so
don&amp;rsquo;t be disappointed).&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Sat, 09 Jan 2010 22:26:45 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2010/bin_packing/</guid></item><item><title>Reloading, shadow mapping</title><link>https://etodd.io/2010/01/09/reloading-shadow-mapping/</link><description>&lt;p&gt;Thanks to the Panda3D 1.7.0 shader generator supporting shadow mapping, and the awesome new BuildBot service set up on the Panda3D website, A3P now supports basic shadow mapping! Actually, the sun is just implemented as a giant spotlight with a 2048x2048 shadow buffer. Definitely not the most efficient or high-quality method, but certainly the easiest, and the results are acceptable.&lt;/p&gt;
&lt;p&gt;Also new in SVN is a reloading mechanic. The shotgun, chaingun, and sniper rifle all have to be reloaded, with varying clip sizes and reload times. Of course, reloading units are highlighted as vulnerable, and they also beep furiously to make it perfectly clear they need to be shot at.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Sat, 09 Jan 2010 21:11:26 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/01/09/reloading-shadow-mapping/</guid></item><item><title>Juniper PSN-2010-01-626 (AS4 Again!)</title><link>https://rob.sh/post/180/</link><description>&lt;p&gt;I&amp;rsquo;ve had a couple of mails relating to this PSN, which again references the research that Andy Davidson, Jonathan Oddy and I did last year. It seems that some of the sources of the initial mailing list posts we made are gone (particularly the merit.edu one that is referenced from both Juniper&amp;rsquo;s site and most other places). For that reason, I&amp;rsquo;ve included both the mails that we sent to NANOG/C-NSP/J-NSP last year here.
&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Fri, 08 Jan 2010 09:55:37 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/180/</guid></item><item><title>There Isn't an App for… - Part 1: PhpED</title><link>https://donatstudios.com/No_App_P1_PhpED</link><description>&lt;h2&gt;&amp;ldquo;There Isn't an App For That&amp;rdquo; - Windows Apps I haven't been able to replace in Mac OS X&lt;/h2&gt;
&lt;p&gt;For a very long time I was a Windows guy, I &lt;em&gt;was once&lt;/em&gt; a DOS guy. I switched nearly exclusively to Mac for my home use about 4 years ago. I&amp;rsquo;ve been very happy with it. Its stable, well engineered, and - my favorite part of all - consistent. Yet, in this time there remain a few applications I cannot seem to replace.&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://www.nusphere.com/"&gt;Nusphere PhpED&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt; I am a PHP Developer by trade, and PhpED for my money is by far the best development environment for the serious PHP developer. When I do develop on the Mac platform it is usually split between two applications &amp;ndash; Coda and TextMate. They are fantastic text editors, don&amp;rsquo;t misunderstand, but when you are developing highly classed applications a strong IDE becomes highly desirable. PhpED&amp;rsquo;s IntelliSense style PHP auto completion is &lt;strong&gt;on par&lt;/strong&gt; with and in some ways &lt;strong&gt;surpasses&lt;/strong&gt; Visual Studios.&lt;/p&gt;
&lt;p&gt;Applications like Dreamweaver, Coda, TextMate and Espresso by comparison provide very basic auto completion. Zend Studio, Aptana Studio and other Eclipse based solutions have varying qualities of auto completion, but are awkward due to Eclipses generality and slow and visually out of water due to being built on Java. Komodo comes the closest, but can be very slow at times. Weighing in at $299 its pricetag is also heavy.&lt;/p&gt;
&lt;p&gt;To give you in an example, in my CorpusPHP Framework the user class is built specifically to be extended for the sites particular needs. The login class therefore has a member instance of &lt;em&gt;whatever&lt;/em&gt; type of object extending user you might have. This member is dynamically set as an instance and therefore type cannot be determined by &lt;em&gt;most&lt;/em&gt; editors and auto completion will not work.&amp;nbsp; PhpED on the other hand has a solution. This brings me to my favorite PhpED feature - deep phpDocumentor integration.&lt;/p&gt;
&lt;pre&gt;class Login {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* Object that holds the user object, brought over from the session
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* @var User
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public $user;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;hellip;&amp;nbsp;&amp;hellip;&amp;nbsp;&amp;hellip;&lt;br /&gt;
}&lt;/pre&gt;
&lt;p&gt;The above code snippet shows the user member of the login class. It can be any type of user, for instance admin or limited. It will though be inherently be something that extends the user object.&amp;nbsp; Using phpDocumentor syntax here we imply that the type is a &lt;em&gt;user&lt;/em&gt; and since PhpED is smart, it auto completes based on this.&amp;nbsp; If you are unfamiliar with phpDocumentor syntax you should &lt;a href="https://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.pkg.html" target="_blank"&gt;read up on it&lt;/a&gt;, and begin marking your PHP up in this standardized syntax.&lt;/p&gt;
&lt;p&gt; &lt;img alt="Php Autocomplete" src="https://donatstudios.com/images/post/phpedAutocomplete.png" /&gt;&lt;/p&gt;
&lt;p&gt; PhpED takes this integration further and will show descriptions of methods and functions as well as their parameters and return values based on their inline phpDocumentor documentation.&lt;/p&gt;
&lt;p&gt; &lt;img alt="PhpED phpDoc description" src="https://donatstudios.com/images/post/phpedCodeDescription.png" /&gt;&lt;/p&gt;
&lt;p&gt; While auto complete is the PhpED killer feature in my book, it has many other excellent features.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Its internal debugger&amp;nbsp; is second to none, and requires &lt;em&gt;no&lt;/em&gt; setup unlike other debuggers. It installs its own copies of Apache and PHP 4 &amp;amp; PHP 5.2 or 5.3 which it uses to debug. The debugger can output to an internal version of IE or Mozilla or any external browser. Its quite configurable, everything you would expect like ability to set $_GET, $_POST, etc variables, break points, runtime analysis.&lt;/p&gt;
&lt;p&gt;Some smaller features I personally enjoy are for instance:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;To-Do list shows you all the todo&amp;rsquo;s throughout your project.&lt;/li&gt;
	&lt;li&gt;Continually improving, high quality CSS/HTML auto completion.&lt;/li&gt;
	&lt;li&gt;The ability to set a default character set on a per-project basis&lt;/li&gt;
	&lt;li&gt;Non-Ascii range characters show up dark blue in variable and function names, making them obvious &amp;ndash; which is particularly helpful when working on code from a Cyrillic coder whereas &amp;Alpha; (Alpha) and A are &lt;em&gt;visually&lt;/em&gt; identical but entirely different characters.&lt;/li&gt;
	&lt;li&gt;Great support &amp;ndash; Support will work with you to fix a problem.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Update 7/7/2011&lt;/h2&gt;
&lt;p&gt;The dark PhpED Theme I use is now available &lt;a href="https://donatstudios.com/PhpED-Dark-Theme"&gt;here for PhpED 5 and 6&lt;/a&gt;.&lt;/p&gt;</description><author>Donat Studios</author><pubDate>Fri, 08 Jan 2010 04:53:36 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/No_App_P1_PhpED</guid></item><item><title>Schedule delays</title><link>https://etodd.io/2010/01/06/schedule-delays/</link><description>&lt;p&gt;It's time to face the facts. While the game is progressing at an incredible pace, it's not going to be ready by January 9, or even the end of January. So, I guess I failed to meet my deadline.&lt;/p&gt;
&lt;p&gt;But! I'm not giving up. I'll still be releasing regular updates, and especially once the multiplayer lobby server is set up, things will start getting a lot more polish. My new goal will be to finish the game before school lets out for the summer. Of course it will be online and playable well before then, but I won't consider it "finished" until I'm satisfied.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Wed, 06 Jan 2010 16:05:54 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2010/01/06/schedule-delays/</guid></item><item><title>Grupetto Start to the Year</title><link>https://rob.sh/post/179/</link><description>&lt;p&gt;A lovely, albeit slightly chilly, start to 2010 with &lt;a href="http://www.grupetto.co.uk"&gt;the Grupetto&lt;/a&gt; this morning. About 90km &lt;a href="https://rob.sh/gps/706"&gt;out to Windsor&lt;/a&gt; and &lt;a href="https://rob.sh/gps/707"&gt;back to London&lt;/a&gt; on one of our normal training routes. Mark also kindly took &lt;a href="http://client.mewmedia.com/grupetto/comments.php?DiscussionID=517&amp;amp;page=1#Item_4"&gt;some photos&lt;/a&gt;, a few of which feature me.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;a href="https://cdn.rob.sh/img/grupetto-rjs-one.jpg"&gt;&lt;img src="https://cdn.rob.sh/img/grupetto-rjs-one-thumb.jpg" /&gt;&lt;/a&gt;&lt;a href="https://cdn.rob.sh/img/grupetto-rjs-two.jpg"&gt;&lt;img src="https://cdn.rob.sh/img/grupetto-rjs-two-thumb.jpg" /&gt;&lt;/a&gt;&lt;a href="https://cdn.rob.sh/img/grupetto-rjs-three.jpg"&gt;&lt;img src="https://cdn.rob.sh/img/grupetto-rjs-three-thumb.jpg" /&gt;&lt;/a&gt;&lt;a href="https://cdn.rob.sh/img/grupetto-group.jpg"&gt;&lt;img src="https://cdn.rob.sh/img/grupetto-group-thumb.jpg" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
Lots more similar rides to come whilst training for Paris-Roubaix and the Tour of Flanders.&lt;br /&gt;&lt;br /&gt;
Happy New Year!</description><author>rob.sh</author><pubDate>Sun, 03 Jan 2010 18:31:42 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/179/</guid></item><item><title>The great educational minicomputer that didn't want to exist</title><link>https://stop.zona-m.net/2010/01/the-great-educational-minicomputer-that-didnt-want-to-exist/</link><description>&lt;figure&gt;
  &lt;img alt="The great educational minicomputer that didn't want to exist /img/01_teachermate.jpg" src="https://stop.zona-m.net//img/01_teachermate.jpg" width="100%" /&gt;
&lt;/figure&gt;
&lt;p&gt;During the &lt;a href="https://stop.zona-m.net/2009/11/plan-for-universal-basic-education-discussed-in-kathmandu/"&gt;Assembly for Quality Basic Education in Kathmandu&lt;/a&gt; I had the possibility to play a bit with an interesting mini-computer designed for primary school education, the &lt;a href="http://www.innovationsforlearning.org/about_teachermate.php"&gt;TeacherMate&lt;/a&gt; from &lt;a href="http://www.innovationsforlearning.org/"&gt;Innovations for Learning (IfL)&lt;/a&gt;, and to talk with Seth Weinberger, IfL Executive Director.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 02 Jan 2010 02:04:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2010/01/the-great-educational-minicomputer-that-didnt-want-to-exist/</guid></item><item><title>The First Habit: Using Cash Only</title><link>https://benovermyer.com/blog/2010/01/the-first-habit-using-cash-only/</link><description>&lt;div class="dress-image"&gt;
    &lt;img alt="A close up of a twenty-dollar bill" src="https://benovermyer.com/blog/2010/01/the-first-habit-using-cash-only/&amp;#x2F;&amp;#x2F;benovermyer.com&amp;#x2F;processed_images&amp;#x2F;gianttwenty.6b5e480b68e91b6f.jpg" /&gt;
    
&lt;/div&gt;

&lt;p&gt;The idea of this period’s habit is to move away from using credit cards or debit cards and use cash almost exclusively. The reason behind it is because I tend to spend money very freely and very rapidly. While I usually take care of bills before spending money on frivolous things, I also fall victim to impulse buys on a frequent basis.&lt;/p&gt;
&lt;p&gt;To get rid of that, I’m going to start carrying cash only. Since I have eight weeks to establish a solid habit of frugality based on not carrying plastic, I’ll have a step for each week. Nothing like a bit of ambitious scheduling to really set the pace, aye!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Week 1: Carry Cash&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pretty simple. This week, all I do is keep a bit of cash in my wallet to cover some expenses. The cards don’t leave the wallet yet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Week 2: Budget for the Week&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This week I will write up a budget for the week. The budget is based on what cash I will need to cover all my expenses for that week and nothing more. Following that, I take out enough cash to follow the budget, and that’s how much I carry.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Week 3: Lose the Cards&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here’s where the plastic goes away. Building on the last two weeks, I establish a new budget and just use cash. Note: I’m not destroying the cards or closing their associated accounts, just leaving them at home instead of in my wallet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Week 4: Budget Harder (Half Way Point!)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Where before my budgets were more practice than anything else, this week’s budget will be heavily geared towards spending less on impulse buys. I plan on having less money in this week’s budget for spending.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Week 5: Budget Harder Still&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Again, I reduce the amount of spending money available. At this point I should be close to an “ideal” spending budget, but still a little bit over that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Week 6: Final Budget&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This week is when my spending budget reaches its ideal amount. I should be carrying only enough cash to cover travel costs and anything I have set out specifically to pay for, like groceries.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Week 7: Reduce Online Spending&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now I won’t just reduce my out-of-home spending, but any online spending I might be doing also. This is mostly getting rid of non-recurring online entertainment expenses, like say buying games online.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Week 8: Put Bills on Auto-Pilot (Final Week!)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here is the fun part. By putting as many bills as possible on automatic payment, I remove myself from the digital money transfer process for the majority of transactions. This has the benefit of making bills a high priority, but also reduces the amount of time my cards spend on my mind.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Fri, 01 Jan 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2010/01/the-first-habit-using-cash-only/</guid></item><item><title>2009 Predictions Follow-up</title><link>https://justingarrison.com/blog/2010-01-01-2009-predictions-follow-up/</link><description>I thought I would follow up on my predictions for last year and see how I did.</description><author>Justin Garrison's Homepage</author><pubDate>Fri, 01 Jan 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-01-01-2009-predictions-follow-up/</guid></item><item><title>2010 Tech Predictions</title><link>https://justingarrison.com/blog/2010-01-01-2010-tech-predictions/</link><description>It was fun doing this last year. So I thought I would have another go at it and see what I come up with.</description><author>Justin Garrison's Homepage</author><pubDate>Fri, 01 Jan 2010 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2010-01-01-2010-tech-predictions/</guid></item><item><title>The real effect of the Internet on Catholicism (or any other religion)</title><link>https://stop.zona-m.net/2009/12/the-real-effect-of-the-internet-on-catholicism-or-any-other-religion/</link><description>&lt;p&gt;The &lt;a href="https://stop.zona-m.net/2009/12/the-online-loser-guide-2010-edition/"&gt;Online Loser Guide&lt;/a&gt; that I just wrote was born also as a reaction to a vision of the Internet (haven for perverted and terrorists, huge time-wasting toy or mere work tool) very limited and narrow-minded. A proof that the effects of digital technologies are much deeper is in how they are influencing the religious sphere, in ways still &lt;strong&gt;largely&lt;/strong&gt; ignored by traditional, mainstream media and by many blogs. The following paragraphs contain some evidence of this trend in Catholicism, but I&amp;rsquo;d guess that the same general concept is valid for any other religion (more on this at the end).&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 31 Dec 2009 04:41:29 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/12/the-real-effect-of-the-internet-on-catholicism-or-any-other-religion/</guid></item><item><title>This is a long-range thinking, highly creative website: what about yours?</title><link>https://stop.zona-m.net/2009/12/this-is-a-long-range-thinking-highly-creative-website-what-about-yours/</link><description>Here&amp;rsquo;s a post a bit more frivolous than what you&amp;rsquo;d normally find here. I&amp;rsquo;ve just discovered a funny but useful online service: Typealizer analyzes a blog and classifies it according to its content. Here is what it said when I entered the Stop! internet address on that page:
*The analysis indicates that the author of [http:*stop.zona-m.net](http://stop.zona-m.net) is of the type: INTJ - The Scientists* which means, according to Typealizer, that the part of me that writes these pages is:</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 31 Dec 2009 04:18:50 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/12/this-is-a-long-range-thinking-highly-creative-website-what-about-yours/</guid></item><item><title>Visualising MPLS-TE Networks</title><link>https://rob.sh/post/178/</link><description>&lt;p&gt;
	For all network deployments, there is a requirement to present information relating to both topology, and various utilisation statistics to some human operator. In many cases, this process has become so ingrained in network requirements that there are almost ubiquitous solutions to the visualising data - for example, link utilisation is almost always presented via some framework or tool powered by &lt;a href="http://oss.oetiker.ch/rrdtool/"&gt;RRDTool&lt;/a&gt;. Other tools, such as network &amp;quot;weathermap&amp;quot; diagrams linking this utilisation information into an overview of a network topology are also seen in many NOCs. In most cases, the problem of visualising data relating to a flat MPLS or IP network is solved for most common deployments.
&lt;/p&gt;</description><author>rob.sh</author><pubDate>Thu, 31 Dec 2009 01:54:04 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/178/</guid></item><item><title>NULL is not zero!</title><link>https://tanelpoder.com/2009/12/30/null-is-not-zero/</link><description>&lt;p&gt;Some time ago I wrote a post about how COUNT(*) and COUNT(column) are semantically different things (&lt;a href="https://tanelpoder.com/2009/08/21/select-count-and-countcolumn-are-different-things/"&gt;link&lt;/a&gt;). Such queries may return different results if the column counted has NULLs in it. And the difference comes from that NULL is not a value, it’s rather a state which says “value unknown” or “no value entered”.&lt;/p&gt;
&lt;p&gt;So, you better understand how NULLs interact with your SQL constructs if you call yourself a DBA or a database developer ;-)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 30 Dec 2009 08:48:15 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/12/30/null-is-not-zero/</guid></item><item><title>Convert ASCII to UTF-8 using VBA</title><link>https://thomashunter.name/posts/2009-12-29-convert-ascii-to-utf-8-using-vba</link><description>A function for converting characters into a UTF-8 format, required by Google Maps for making API calls.</description><author>Thomas Hunter II</author><pubDate>Tue, 29 Dec 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-12-29-convert-ascii-to-utf-8-using-vba</guid></item><item><title>at(1) on OS X</title><link>https://caiustheory.com/at-1-on-os-x/</link><description>&lt;p&gt;I recently came across the &lt;a href="http://developer.apple.com/mac/library/DOCUMENTATION/Darwin/Reference/ManPages/man1/at.1.html"&gt;&lt;code&gt;at(1)&lt;/code&gt;&lt;/a&gt; command, and wondered why it wasn&amp;rsquo;t executing jobs I gave it on my machine. Had a poke around the man pages, and discovered in &lt;a href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man8/atrun.8.html"&gt;&lt;code&gt;atrun(8)&lt;/code&gt;&lt;/a&gt; that by default &lt;code&gt;launchd(8)&lt;/code&gt; has the &lt;code&gt;atrun&lt;/code&gt; entry disabled.&lt;/p&gt;
&lt;p&gt;To enable it (and have &lt;code&gt;at&lt;/code&gt; jobs fire) you simply need to run the following command once:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Personally I&amp;rsquo;ve taken to using this to sleep my machine after a custom amount of time, mainly because my alarm clock/sleep timer of choice (&lt;a href="http://embraceware.com/awaken/"&gt;Awaken&lt;/a&gt;) can&amp;rsquo;t handle playing &lt;a href="http://www.spotify.com/"&gt;Spotify&lt;/a&gt; for x minutes and then sleeping the machine. The following command puts the machine to sleep, which (quite effectively) silences spotify.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"osascript -e 'tell app \"Finder\" to sleep'"&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; at 1:00am
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See the &lt;a href="http://developer.apple.com/mac/library/DOCUMENTATION/Darwin/Reference/ManPages/man1/at.1.html"&gt;&lt;code&gt;at(1)&lt;/code&gt;&lt;/a&gt; manpage for how to specify the time, but as I&amp;rsquo;m only ever scheduling it on the same day (usually 20 minutes or so in advance), just passing the time works fine.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Mon, 28 Dec 2009 11:30:30 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/at-1-on-os-x/</guid></item><item><title>A little known but very powerful tool for homeschooling: Free Software</title><link>https://stop.zona-m.net/2009/12/a-little-know-but-very-powerful-tool-for-homeschooling-free-software/</link><description>Free Software is widely used in education due to its lower cost and huge flexibility. Homeschooling is relatively popular in the USA and other countries. One would expect Free Software to be very popular among homeschoolers, due to their own philosophy: how could an homeschooling advocate not love software that is all about being &amp;ldquo;free as in freedom&amp;rdquo; and doing things by yourself?
Reality, however is quite different: compared to Windows and Mac, Free Software is still almost unknown in the homeschooling community.</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Mon, 28 Dec 2009 08:38:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/12/a-little-know-but-very-powerful-tool-for-homeschooling-free-software/</guid></item><item><title>v0.5a released</title><link>https://etodd.io/2009/12/27/v0-5a-released/</link><description>&lt;p&gt;That "a" stands for "not quite ready yet". This is sort of an intermediate release that focuses mainly on online multiplayer, which is largely functional, but needs more testing. Aside from polish and bug fixes, the only other things I'm going to add are more weapons and special abilities. And maybe a new level. We'll see.&lt;/p&gt;
&lt;p&gt;This release went much smoother than the last two, as I used Panda3D's built-in packpanda to make the installer. I also cut the installer size down by scaling images, deleting unused files, and resampling music and sounds into the Ogg Vorbis format. It's incredible what Ogg Vorbis can do; without sacrificing any quality at all, I cut down the music size by about 20%. With a bit of downsampling, it was about 50%. The final installer is 80 Mb, a far cry from the 176 Mb v0.3 installer!&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Sun, 27 Dec 2009 18:22:42 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/12/27/v0-5a-released/</guid></item><item><title>The Online Loser Guide, 2010 edition</title><link>https://stop.zona-m.net/2009/12/the-online-loser-guide-2010-edition/</link><description>&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt; awareness of the immense power of the Internet is so widespread these days that it is almost impossible to look a fool by using it in the wrong way. Should that be your goal, however, follow the advice below!&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 27 Dec 2009 04:11:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/12/the-online-loser-guide-2010-edition/</guid></item><item><title>New name: A3P</title><link>https://etodd.io/2009/12/26/new-name-a3p/</link><description>&lt;p&gt;Goodbye Stainless, hello A3P. I spent a good chunk of time creating new A3P material and switching everything over to the new name. Unfortunately, SourceForge's UNIX rename feature is down, so I created a new project for web hosting purposes only. The code and file releases are still on the Stainless SourceForge project. Which, to be extra confusing, I renamed as well, but again, I couldn't change the UNIX name.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Sat, 26 Dec 2009 19:47:39 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/12/26/new-name-a3p/</guid></item><item><title>[...], help me have a sane, slow Christmas</title><link>https://stop.zona-m.net/2009/12/help-me-have-a-sane-slow-christmas/</link><description>&lt;p&gt;The short prayer which follows was inspired by participation to family discussions about next Christmas and from the discovery of the article and website mentioned below. It is a prayer which is perfect for everybody, regardless of religion. You can fill the empty square brackets with whatever you want, from the name of any God to&amp;hellip; your own, and it will still make sense. And it&amp;rsquo;s good even if you don&amp;rsquo;t celebrate Christmas yourself and nobody celebrates it around you. All in all, it&amp;rsquo;s probably good (modern life being what it is) even at other times of the year.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 24 Dec 2009 03:21:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/12/help-me-have-a-sane-slow-christmas/</guid></item><item><title>Measuring what matters</title><link>https://tanelpoder.com/2009/12/22/measuring-what-matters/</link><description>&lt;p&gt;Cary Millsap’s &lt;a href="http://carymillsap.blogspot.com/2009/12/my-whole-system-is-slow-now-what.html" target="_blank"&gt;recent post&lt;/a&gt; prompted me to write down some of the related thoughts in my head.&lt;/p&gt;
&lt;p&gt;Here are few of my mantras for systematic troubleshooting and performance tuning, which have materialized in my head over the years of work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Picking the right starting point to troubleshooting and performance tuning is the most important decision in that process.&lt;/li&gt;
&lt;li&gt;Pick the wrong starting point and you end up going in circles.&lt;/li&gt;
&lt;li&gt;The scope of your performance data needs to match the scope of your problem, otherwise you end up going in circles.&lt;/li&gt;
&lt;li&gt;If you don’t measure what matters, you may end up fixing what doesn’t matter.&lt;/li&gt;
&lt;li&gt;If you’re not systematic in your troubleshooting, you may get lucky, but you don’t want to be dependent on luck! Moreover, you wont’t &lt;em&gt;need&lt;/em&gt; to be lucky if you are systematic in your work!&lt;/li&gt;
&lt;li&gt;Performance tuning is overrated. Fixing fundamental design and coding flaws via changing a magic configuration parameter is a dream just like is getting slim and healthy via eating magic diet pills bought from TV shop.&lt;/li&gt;
&lt;li&gt;Your response times are too long for only two reasons:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;You are doing too much work&lt;/li&gt;
&lt;li&gt;You are waiting for too much&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p style="padding-left: 30px;"&gt;
  &amp;#8230;both of the above things can be measured in Oracle&amp;#8230;
&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 23 Dec 2009 02:58:39 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/12/22/measuring-what-matters/</guid></item><item><title>Migrating Disqus</title><link>https://blog.tracefunc.com/2009/12/22/migrating-disqus-html/</link><description>&lt;p&gt;In changing this blog over to jekyll, my urls changed (there’s now a trailing slash). Easy enough to tell google about it, just set up redirects, but there’s no easy way to tell &lt;a href="http://disqus.com/"&gt;Disqus&lt;/a&gt; about it so my comments migrate over.&lt;/p&gt;

&lt;p&gt;The good news is that it’s pretty straightforward using their API, the only bad news is that I can’t delete the new threads auto-generated for the new urls, so I’m just moving them out of the way.&lt;/p&gt;

&lt;p&gt;I’m using the &lt;a href="http://httparty.rubyforge.org"&gt;HTTParty&lt;/a&gt; gem to wrap API access, like so:&lt;/p&gt;

&lt;div class="language-ruby highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;table class="rouge-table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="rouge-gutter gl"&gt;&lt;pre class="lineno"&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
28
29
&lt;/pre&gt;&lt;/td&gt;&lt;td class="rouge-code"&gt;&lt;pre&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'rubygems'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'httparty'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'json'&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Disqus&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;HTTParty&lt;/span&gt;
  &lt;span class="n"&gt;base_uri&lt;/span&gt; &lt;span class="s1"&gt;'disqus.com'&lt;/span&gt;
  &lt;span class="nb"&gt;format&lt;/span&gt; &lt;span class="ss"&gt;:json&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'1.1'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;
    &lt;span class="vi"&gt;@version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;auth&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:user_api_key&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="vi"&gt;@key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:api_version&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="vi"&gt;@version&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="o"&gt;=&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="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"/api/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:query&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auth&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="s2"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="o"&gt;=&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="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"/api/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:body&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to_params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Do note that I’m adding trailing slashes to the api calls to avoid a redirect. Doesn’t matter for the GET, but the redirect on POST was causing issues.&lt;/p&gt;

&lt;p&gt;With this in hand, I’m grabbing my forum, looping through the threads, and renaming any that have comments (a whopping 3 of them).&lt;/p&gt;

&lt;div class="language-ruby highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;table class="rouge-table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="rouge-gutter gl"&gt;&lt;pre class="lineno"&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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
&lt;/pre&gt;&lt;/td&gt;&lt;td class="rouge-code"&gt;&lt;pre&gt;&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"secret"&lt;/span&gt; &lt;span class="c1"&gt;# get yours at http://disqus.com/api/get_my_key/&lt;/span&gt;
&lt;span class="n"&gt;disqus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Disqus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;forum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;disqus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:get_forum_list&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt; &lt;span class="c1"&gt;# I just have one&lt;/span&gt;
&lt;span class="n"&gt;forum_api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;disqus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:get_forum_api_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:forum_id&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;forum&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;# manual pagination, eww&lt;/span&gt;
&lt;span class="kp"&gt;loop&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;threads&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;disqus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:get_thread_list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:forum_id&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;forum&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="ss"&gt;:start&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;threads&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt;

  &lt;span class="n"&gt;threads&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;thread&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;span class="n"&gt;disqus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:get_thread_posts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:thread_id&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"id"&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;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;empty?&lt;/span&gt;
    
    &lt;span class="n"&gt;target_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s2"&gt;"/"&lt;/span&gt;

    &lt;span class="c1"&gt;# There's another thread in the way...&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;other_thread&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;disqus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="ss"&gt;:get_thread_by_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="ss"&gt;:forum_api_key&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;forum_api_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="ss"&gt;:url&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;target_url&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="c1"&gt;# free up the url we want to use&lt;/span&gt;
      &lt;span class="n"&gt;disqus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="ss"&gt;:update_thread&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="ss"&gt;:forum_api_key&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;forum_api_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="ss"&gt;:thread_id&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;other_thread&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="ss"&gt;:url&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;target_url&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'old'&lt;/span&gt;
      &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;

    &lt;span class="c1"&gt;# update thread url&lt;/span&gt;
    &lt;span class="n"&gt;disqus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="ss"&gt;:update_thread&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="ss"&gt;:forum_api_key&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;forum_api_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="ss"&gt;:thread_id&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;thread&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="ss"&gt;:url&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;target_url&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Et voilà, old comments are in the right place now.&lt;/p&gt;</description><author>set_trace_func</author><pubDate>Tue, 22 Dec 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.tracefunc.com/2009/12/22/migrating-disqus-html/</guid></item><item><title>The Amazon Kindle ROCKS!</title><link>https://jasoneckert.github.io/myblog/the-amazon-kindle-rocks/</link><description>&lt;p&gt;&lt;img alt="Kindle1" src="kindle1.png#right" title="Kindle1" /&gt;&lt;/p&gt;
&lt;p&gt;Recently, the Amazon Kindle 2 (International Edition) arrived in Canada (the last country to get it :-), and I recently picked one up.   Since its original introduction in November 2007, I have watched reviews of it fly around the Internet and on blogs such as GeekBrief.tv.&lt;/p&gt;
&lt;p&gt;Although the reviews were generally positive, I really couldn’t visualize myself replacing my book collection with a Kindle for the simple reason that books have their own distinctive “experience” (and smell :-).&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Tue, 22 Dec 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/the-amazon-kindle-rocks/</guid></item><item><title>Experimenting with Time Lapse</title><link>https://blog.yiningkarlli.com/2009/12/experimenting-with-time-lapse.html</link><description>&lt;p&gt;Only two days left until my last final for the semester, so what do I do? Not study! I SHOULD be studying, but then the entire Northeast coast got slammed with a snowstorm. The snow looked really cool outside my window, which meant… photography experiment time!&lt;/p&gt;

&lt;p&gt;Recently I’ve been experimenting with Adobe After Effects and Adobe Premiere Pro. More on that later. I also recently got Nikon Camera Control Pro 2, which is Nikon’s tool for remote controlling their DSLRs from computers, which means I can now remote trigger my Nikon D60 over USB from my MacBook Pro. Awesomeness. Time for some snowstorm time lapse experimenting!&lt;/p&gt;

&lt;p&gt;So on Friday night/Saturday morning, I pointed my D60 out the window and set Camera Control to take a picture every 40 seconds for 5 hours starting from 5 AM. Unfortunately, I forgot the charge the battery to the camera died 80 minutes into the experiment. Also, apparently the movement of the camera’s internal mirror is enough to cause the camera to shift a bit if not stabilized. As a result, the video is really short and not very stable. It’s not particularly good, but it’s a start:&lt;/p&gt;

&lt;div class="embed-container"&gt;Snowstorm Sunrise Time Lapse Test- 12/19/2009&lt;/div&gt;

&lt;p&gt;This time lapse experiment also served a secondary purpose- to test out the planned workflow that we’re going to try using with the upcoming Omjii Show. I composited all of the video in Adobe After Effects and Adobe Premiere Pro and then used Apple Color to color grade the video. If you’re wondering why I’m using Apple Color but am using Premiere Pro instead of Final Cut Pro, it’s because I tend to favor things that plug into Adobe’s Creative Suite workflow but Adobe doesn’t have a color grader, whereas Apple has a really nice one.&lt;/p&gt;

&lt;p&gt;Later in the afternoon, I decided to give the time lapse another shot. This time i remembered to charge the battery and stabilize the camera. The result:&lt;/p&gt;

&lt;div class="embed-container"&gt;Snowstorm Sunset Time Lapse- 12/19/2009&lt;/div&gt;

&lt;p&gt;The problem with attempting time-lapses with a DSLR is that the length of the time you can cover is limited by your battery, unless you have an extended battery or something. Another attempt, this time from Sunday:&lt;/p&gt;

&lt;div class="embed-container"&gt;Sunset Over UPenn Time Lapse- 12/20/2009&lt;/div&gt;

&lt;p&gt;I’m still working on getting the technique down, but I’ll post improved attempts and a detailed run-through of the process once I figure out how to stabilize better, among other things.&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Mon, 21 Dec 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2009/12/experimenting-with-time-lapse.html</guid></item><item><title>If we all used computers to watch TV...</title><link>https://stop.zona-m.net/2009/12/if-we-all-used-computers-to-watch-tv/</link><description>&lt;p&gt;Italy started the transition from analog to digital TV in mid 2009. Six months later, the transition is still ongoing and causing a lot of hassles, unplanned expenses and, above all, confusion. In a few months Italians found themselves in a situation where, to receive all the channels available through satellites and terrestrial digital TV providers, &lt;a href="http://archiviostorico.corriere.it/2009/settembre/04/VOGLIONO_NOVE_DECODER_PER_NON_mo_0_090904002.shtml"&gt;every TV should be equipped with nine (9!) extra digital decoders!&lt;/a&gt;.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 19 Dec 2009 10:18:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/12/if-we-all-used-computers-to-watch-tv/</guid></item><item><title>Free Software, Open Data give more opportunities to young Kosovars</title><link>https://stop.zona-m.net/2009/12/free-software-open-data-give-more-opportunities-to-young-kosovars/</link><description>&lt;p&gt;During summer of 2009 I received an invitation to &lt;a href="http://mfioretti.com/2009/08/kosova-sfk09-conference/"&gt;explain how Free Software can help developing countries&lt;/a&gt; at SFK09, the first &lt;a href="http://www.kosovasoftwarefreedom.org/"&gt;Software Freedom Conference in Kosova&lt;/a&gt;. Here is why and how, after SFK09, some people continue to propose &amp;ldquo;Free as in Freedom&amp;rdquo; digital technologies as an important tool to solve the serious problem of people in Kosova (or any other country, really).&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 19 Dec 2009 06:19:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/12/free-software-open-data-give-more-opportunities-to-young-kosovars/</guid></item><item><title>New gameplay</title><link>https://etodd.io/2009/12/17/new-gameplay/</link><description>&lt;p&gt;Sorry for the distinct lack of updates this blog has. A lot is happening right now with Stainless, and most of it's good. :)&lt;/p&gt;
&lt;p&gt;First off, Stainless is going to have online multiplayer! Woot. Thanks to the fabulous work by the guys over at Panda3D, it may even live in a browser plugin on the SourceForge website. Either way, I came across a problem I never anticipated with online multiplayer: &lt;a href="http://www.mindcontrol.org/~hplus/nat-punch.html"&gt;NAT punch-through&lt;/a&gt;.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Thu, 17 Dec 2009 22:44:55 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/12/17/new-gameplay/</guid></item><item><title>Network Updates and Opportunities</title><link>https://rob.sh/post/177/</link><description>&lt;p&gt;A quick personal post to break the silence here!&lt;br /&gt;&lt;br /&gt;
I&amp;rsquo;m currently very interested in hearing about any UK or EU-based network engineering or architecture opportunities that are out there, especially in SP networks that run MPLS with TE. If anyone has some such opportunity, or knows of something that they think might suit me &amp;ndash; please drop me a mail to &lt;a href="mailto:rjs@rob.sh"&gt;&lt;a href="mailto:rjs@rob.sh"&gt;rjs@rob.sh&lt;/a&gt;&lt;/a&gt; for a copy of my CV.&lt;br /&gt;&lt;br /&gt;
An outline of my CV is available on &lt;a href="http://uk.linkedin.com/in/robjs"&gt;LinkedIn&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;
I&amp;rsquo;m hoping to find some time to put some technical articles together that can be posted here in the near future.&lt;/p&gt;</description><author>rob.sh</author><pubDate>Sat, 12 Dec 2009 14:06:52 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/177/</guid></item><item><title>What does the Stop logo mean, and who did it?</title><link>https://stop.zona-m.net/2009/12/what-does-the-stop-logo-mean-and-who-did-it/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 12 Dec 2009 13:46:15 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/12/what-does-the-stop-logo-mean-and-who-did-it/</guid></item><item><title>Why am I using Hibernate?</title><link>https://www.databasesandlife.com/hibernate/</link><description>&lt;p&gt;Something is going wrong in my life.&lt;/p&gt;
&lt;p&gt;I read the &lt;a href="http://www.amazon.com/Hibernate-Action-Christian-Bauer/dp/193239415X" rel="noopener noreferrer" target="_blank"&gt;book&lt;/a&gt; about Hibernate by its author, Gavin King, and I was really impressed, for the first time in my life, by an object-relational mapping system.&lt;/p&gt;
&lt;p&gt;Although I doubted it would really &lt;em&gt;save&lt;/em&gt; development time over writing SQL manually, I thought it wouldn&amp;rsquo;t significantly &lt;em&gt;increase&lt;/em&gt; development time either, and it had a few nice features (like being able to have a key-value Map in an object, and that Map getting persisted to its own table automatically).&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 11 Dec 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/hibernate/</guid></item><item><title>What should we do with FIAT cars made in Termini Imerese?</title><link>https://stop.zona-m.net/2009/12/what-should-we-do-with-fiat-cars-made-in-termini-imerese/</link><description>&lt;p&gt;Some days ago I heard a radio interview to workers and Union representatives of the FIAT car manufacturing plant in Termini Imerese, Sicily. FIAT management announced this year that they plan to stop car production in that plant by the end of 2011, because it is not convenient anymore. The thing that impressed me the most in the interviews were people declaring that &amp;ldquo;in Italy we produce too few cars!&amp;rdquo;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 10 Dec 2009 17:36:44 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/12/what-should-we-do-with-fiat-cars-made-in-termini-imerese/</guid></item><item><title>piping data through ssh</title><link>https://purpleidea.com/blog/2009/12/09/piping-data-through-ssh/</link><description>&lt;p&gt;not that what i&amp;rsquo;m about to tell you is brilliant, new or revolutionary, however i thought i&amp;rsquo;d mention it in case you&amp;rsquo;re not doing it. also feel free to let me know if there is a better way.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;problem:&lt;/strong&gt; i have some stdout which comes from a command and i want it in a file on another machine.&lt;/p&gt;
&lt;p&gt;i &lt;em&gt;could&lt;/em&gt; first send it to a temp file, scp that over, and then remove the temp file; but instead, i&amp;rsquo;ll just:&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Thu, 10 Dec 2009 00:36:05 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/12/09/piping-data-through-ssh/</guid></item><item><title>Read Later in a keystroke</title><link>https://caiustheory.com/read-later-in-a-keystroke/</link><description>&lt;p&gt;I use a wonderful service for saving text to be read later, &lt;a href="http://instapaper.com/"&gt;instapaper.com&lt;/a&gt;. It&amp;rsquo;s gotten more wonderful as time has gone on and other applications/service&amp;rsquo;s have gained the ability to save links/articles/webpages there for me to pick up later.&lt;/p&gt;
&lt;p&gt;For instance, I&amp;rsquo;m out and about checking twitter on my iPhone using &lt;a href="http://atebits.com/tweetie-iphone/"&gt;tweetie&lt;/a&gt; and someone tweets a link. Rather than wait for it to load and having to read it then and there I can just hit &amp;ldquo;Read Later&amp;rdquo; and it&amp;rsquo;s saved in my instapaper account for me to read as and when I choose to. Recently the legendary mac feed reader &lt;a href="http://www.newsgator.com/INDIVIDUALS/NETNEWSWIRE/"&gt;NetNewsWire&lt;/a&gt; gained this ability too.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a few ways to send a feed item to instapaper from within NNW. Firstly you can right-click and click &amp;ldquo;Send to Instapaper&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Send to Instapaper from contextual menu" src="http://farm3.static.flickr.com/2553/4163576297_ee60e26b53_o.jpg" /&gt;&lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/caius/4163576297"&gt;View Original on Flickr&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Secondly there&amp;rsquo;s a menu item for it in the News menu, which also provides my chosen way of instapapering an item—the keyboard shortcut! ⌃P &lt;em&gt;(control-P)&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Send to Instapaper from News menu" src="http://farm3.static.flickr.com/2748/4164341910_476f8ba539_o.jpg" /&gt;&lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/caius/4164341910"&gt;View Original on Flickr&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, in NNW I&amp;rsquo;m happily sending stuff to instapaper with the handy ⌃P shortcut, but that doesn&amp;rsquo;t exist in the third place I mark things to read later&amp;ndash;Safari! Up until now I&amp;rsquo;ve been using the standard &amp;ldquo;Read Later&amp;rdquo; bookmarklet that &lt;a href="http://instapaper.com/"&gt;instapaper.com&lt;/a&gt; provides, and it&amp;rsquo;s got a spot on my Bookmarks Bar so I can easily click it.&lt;/p&gt;
&lt;p&gt;That doesn&amp;rsquo;t really help with the fact I&amp;rsquo;m hitting ⌃P in NNW, and it doesn&amp;rsquo;t work in Safari. Quite often I noticed myself hitting the key combination in Safari and wondering for a split second why it wasn&amp;rsquo;t sending the item to instapaper. Then the solution hit me!&lt;/p&gt;
&lt;p&gt;In OS X you can setup (and/or override) menu items with custom key combinations! Why hadn&amp;rsquo;t I remembered this before. Because the &amp;ldquo;Read Later&amp;rdquo; bookmark*(let)* is nested under the Bookmarks menu, it &lt;strong&gt;is&lt;/strong&gt; a menu item! A quick trip into the Keyboards Prefpane in System Preferences and a new binding later and voilâ, &amp;ldquo;Read Later&amp;rdquo; in Safari is bound to ⌃P and I can use it in both Safari and NNW.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Filling in the form to bind the keyboard shortcut" src="http://farm3.static.flickr.com/2517/4163642801_a14250da65_o.jpg" /&gt;&lt;br /&gt;
&lt;a href="http://www.flickr.com/photos/caius/4163642801"&gt;View Original on Flickr&lt;/a&gt;&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Mon, 07 Dec 2009 00:15:37 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/read-later-in-a-keystroke/</guid></item><item><title>My Menubar Items</title><link>https://caiustheory.com/my-menubar-items/</link><description>&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;This is a something that occasionally makes the rounds again, I&amp;rsquo;ve not seen it for a while and I&amp;rsquo;ve added some new items since I last remember documenting it. Thus, &lt;a href="http://twitter.com/macarne"&gt;@macarne&lt;/a&gt; &lt;a href="http://twitter.com/macarne/status/6398125336"&gt;asking&lt;/a&gt; what the app was that gives me stats prompted me to document my current menubar items.&lt;/p&gt;
&lt;p&gt;&lt;img alt="annotated-menubar by ©aius, on Flickr" src="http://farm3.static.flickr.com/2586/4162170875_1d1a8be4cf.jpg" title="annotated-menubar" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/caius/4162170875/"&gt;View original&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.eidac.de/"&gt;SMCFanControl&lt;/a&gt; - Lets me adjust the minimum speed of my fans.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://atebits.com/tweetie-mac"&gt;Tweetie/mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://iscrobbler.sourceforge.net/"&gt;iScrobbler&lt;/a&gt; - Scrobbles tunes iTunes plays&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.realmacsoftware.com/littlesnapper/"&gt;LittleSnapper&lt;/a&gt; &lt;em&gt;(Or more accurately the menubar icon is NanoSnapper, LittleSnapper is the full app.)&lt;/em&gt; Mainly used for screen grabs.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.orange-carb.org/SBM/"&gt;SlimBatteryMonitor&lt;/a&gt; - Takes up less horizontal space than Apple&amp;rsquo;s menu item.&lt;/li&gt;
&lt;li&gt;Expresscard menu item - Lets me power off my &lt;a href="http://www.memoryc.com/storage/solidstatedisk/48gbfilematesolidgoexpresscardultra.html"&gt;Expresscard/34 SSD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ragingmenace.com/software/menumeters/"&gt;MenuMeters&lt;/a&gt; - An old friend I&amp;rsquo;ve been using for as long as I can remember running OS X. Set to show (left to right)
&lt;ol&gt;
&lt;li&gt;Ram - &lt;strong&gt;U&lt;/strong&gt;sed and &lt;strong&gt;F&lt;/strong&gt;ree totals.&lt;/li&gt;
&lt;li&gt;Network - Graph + values.&lt;/li&gt;
&lt;li&gt;CPU - Graph per core. Probably the most useful out of the three.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Bluetooth&lt;/li&gt;
&lt;li&gt;Time Machine&lt;/li&gt;
&lt;li&gt;Modem - To dial on my Huawei E220 3G stick.&lt;/li&gt;
&lt;li&gt;Airport&lt;/li&gt;
&lt;li&gt;Sound&lt;/li&gt;
&lt;li&gt;Day/Time&lt;/li&gt;
&lt;li&gt;Fast User Switching - Not sure why I keep this in the menubar, only have one user and I lock my screen with a password protected screensaver.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.viscosityvpn.com/"&gt;Viscosity&lt;/a&gt; - VPN software. Pretty useful.&lt;/li&gt;
&lt;li&gt;Spotlight! - Occasionally this vanishes when spotlight decides to be a dick and eat ram/cpu reindexing my disk every few hours. Touch wood it hasn&amp;rsquo;t done it since 10.6.1.&lt;/li&gt;
&lt;/ol&gt;</description><author>Caius Theory</author><pubDate>Sun, 06 Dec 2009 14:56:49 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/my-menubar-items/</guid></item><item><title>Read standard input using Objective-C</title><link>https://caiustheory.com/read-standard-input-using-objective-c/</link><description>&lt;p&gt;On a couple of occasions now I&amp;rsquo;ve wanted to read from &lt;code&gt;STDIN&lt;/code&gt; into an Objective-C command line tool, and both times I&amp;rsquo;ve had to hunt quite a bit to find the answer because nothing shows up in google for the search terms I used. &amp;ldquo;Objective-c read from stdin&amp;rdquo; and &amp;ldquo;objc read stdin&amp;rdquo; both turn up results ranging from using &lt;code&gt;NSInputStream&lt;/code&gt; to dropping some C++ in there.&lt;/p&gt;
&lt;p&gt;The answer is quite simple really, just use &lt;code&gt;NSFileHandle&lt;/code&gt;. More specifically &lt;code&gt;+[NSFileHandle fileHandleWithStandardInput]&lt;/code&gt;. You can then read all data currently in &lt;code&gt;STDIN&lt;/code&gt;, monitor it for new data and anything else you can do with a normal &lt;code&gt;NSFileHandle&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;And here&amp;rsquo;s some example code, reads all data from &lt;code&gt;STDIN&lt;/code&gt; and stores it into an NSString:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-objc"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NSFileHandle&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSFileHandle&lt;/span&gt; &lt;span class="n"&gt;fileHandleWithStandardInput&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NSData&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;inputData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSData&lt;/span&gt; &lt;span class="nl"&gt;dataWithData&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="n"&gt;readDataToEndOfFile&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NSString&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;inputString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="n"&gt;NSString&lt;/span&gt; &lt;span class="n"&gt;alloc&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nl"&gt;initWithData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;inputData&lt;/span&gt; &lt;span class="nl"&gt;encoding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;NSUTF8StringEncoding&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;I&amp;rsquo;m using this in GarbageCollected apps, memory management without GC is left as an exercise to the user.&lt;/em&gt;&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sun, 06 Dec 2009 13:50:08 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/read-standard-input-using-objective-c/</guid></item><item><title>What should we do with Free Software users who don't contribute to it in any way?</title><link>https://stop.zona-m.net/2009/12/what-should-we-do-with-free-software-users-who-dont-contribute-to-it-in-any-way/</link><description>&lt;p&gt;(Notes added on 2017/12/06):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;links and formatting were updated on 2017/12/06)&lt;/li&gt;
&lt;li&gt;now you may help fix the underlying cultural and awareness problems mentioned here, also by suggesting the right concepts for this &lt;a href="https://stop.zona-m.net/2017/12/5000-concepts-for-europe-a-book-proposal/"&gt;book&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This page, unlike the rest of &lt;a href="https://stop.zona-m.net/about"&gt;Stop!&lt;/a&gt;, is not written for the general public. It only addresses the community of Free/Open Source advocates. That&amp;rsquo;s why it isn&amp;rsquo;t listed in the home page: it is always related to the general theme of the website (which is how technology, especially digital could improve our lives) and it&amp;rsquo;s more convenient to publish it here, but it&amp;rsquo;s not for the usual readers of the Stop.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 05 Dec 2009 13:13:24 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/12/what-should-we-do-with-free-software-users-who-dont-contribute-to-it-in-any-way/</guid></item><item><title>Love as Misunderstood in Much Ado About Nothing and A Midsummer Night’s Dream</title><link>https://www.davidschlachter.com/writings/midsummeraboutnothing</link><description>Comparison of Oberon and Don Pedro’s understandings of love contrasted with the influence of Puck and Dogberry.</description><author>David Schlachter</author><pubDate>Fri, 04 Dec 2009 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/midsummeraboutnothing</guid></item><item><title>(French) GTD ROI</title><link>https://blog.separateconcerns.com/2009-12-04-fr-gtd-roi.html</link><description>&lt;p&gt;J’ai l’impression que &lt;a href="https://blog.separateconcerns.com/2009-11-16-fr-gen-y.html"&gt;mon article&lt;/a&gt; sur les habitudes consommatrices de temps en ligne avait intéressé quelques personnes. Je vais revenir brièvement sur ce qui est arrivé depuis et en tirer un rapide bilan.&lt;/p&gt;
&lt;p&gt;Dans l’ensemble, j’ai fait ce que j’avais prévu : je ne suis plus le forum d’archlinux.org ni Tuxmachines et j’ai arrêté les jeux Motion Twin. Ça m’arrive encore pas mal de cliquer sur des liens par pure curiosité mais j’imagine que c’est une habitude difficile à perdre.&lt;/p&gt;
&lt;p&gt;En plus de ça, je consulte beaucoup moins Facebook pour lequel j’ai perdu de l’intérêt, j’ai encore écrémé un peu mes inscriptions aux &lt;strong&gt;mailing-lists&lt;/strong&gt;, je relève ma messagerie moins fréquemment, j’ai quitté certains canaux IRC, et je me suis mis à utiliser &lt;a href="https://surf.suckless.org"&gt;surf&lt;/a&gt; beaucoup plus que Firefox, ce qui limite la tentation de faire plusieurs choses à la fois (onglets) ou de remettre des choses triviales à plus tard (marque-pages).&lt;/p&gt;
&lt;p&gt;J’ai l’impression que ces quelques changements n’ont pas trop mal fonctionné, et j’apprécie de m’être dégagé un peu de temps pour faire des choses plus enrichissantes. Je suis aussi content de ne pas avoir eu à recourir à mes idées plus radicales. Je pense que le plus important était surtout de prendre conscience du problème et de commencer à me demander de temps en temps, avant d’ouvrir une page web : “n’ai-je pas mieux à faire ?”.&lt;/p&gt;</description><author>Separate Concerns</author><pubDate>Fri, 04 Dec 2009 13:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.separateconcerns.com/2009-12-04-fr-gtd-roi.html</guid></item><item><title>(French) Chrome OS</title><link>https://blog.separateconcerns.com/2009-12-04-fr-chrome-os.html</link><description>&lt;p&gt;J’avais promis que j’en parlerais : comme tout le monde (ou pas), j’ai regardé &lt;a href="http://www.chromium.org/chromium-os"&gt;les vidéos&lt;/a&gt; diffusées par Google sur Chrome OS et je me suis fait ma petite idée.&lt;/p&gt;
&lt;p&gt;La première chose qui me vient à l’esprit, c’est que même Benjamin Bayart était probablement loin d’imaginer combien il était proche de la vérité lorsqu’il parlait de Minitel 2.0. Le principe de Chrome OS, c’est le retour aux clients légers, aux terminaux. Toute l’information est dans les nuages, rien sur votre machine. Il ne supporte même pas les disques durs au profit de la mémoire Flash !&lt;/p&gt;
&lt;p&gt;Du point de vue technique, l’interface emprunte de très bonnes idées aux gestionnaires de fenêtres minimalistes : applications en plein écran, panneaux qui se superposent aux fenêtres à une position fixe… Tout le travail effectué pour démarrer plus vite est aussi intéressant et se rapproche de ce que font certains utilisateurs d’Arch Linux amateurs d’optimisation et de &lt;strong&gt;bootcharts&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Le problème, comme toujours avec Google, n’est pas vraiment la technique. C’est le vrai but de l’opération qui est difficile à deviner. Chrome OS est &lt;strong&gt;open source&lt;/strong&gt;, ce qui est très bien, mais qui ira lire les sources, les comprendre ? Qui saura influer sur l’évolution du système ? Qui utilisera d’autres serveurs que ceux de Google pour stocker ses données ?&lt;/p&gt;
&lt;p&gt;Et même si le système client est &lt;strong&gt;open source&lt;/strong&gt;, je le vois un peu comme un piège qui va influer lentement sur la mentalité du public et lui faire considérer comme normal de ne pas avoir le contrôle de ses données. Google sait bien que dicter leurs habitudes aux gens est une stratégie efficace, c’est ce qui fait que les tortues asthmatiques que sont Internet Explorer et Outlook dominent encore largement leurs marchés respectifs. Chrome OS, c’est une drogue dont la première dose est gratuite et ne fait aucun mal, mais ensuite ?&lt;/p&gt;
&lt;p&gt;Heureusement, il y a de l’espoir : je pense que Google s’est laissé emporter par son élan et que Chrome OS est bien trop en avance sur son temps. Pourquoi ? Il cible principalement le marché des netbooks. Or, les gens achètent des netbooks entre autres parce qu’ils sont faciles à utiliser dans les transports en commun. Et vous êtes pratiquement certain de ne pas trouver de wifi gratuit dans un train, encore moins dans un avion. Votre netbook sous Chrome OS devient donc soudainement inutile : vous ne pouvez pas regarder votre film préféré parce qu’il est resté là-haut dans les nuages, et vous ne pouvez pas travailler sur votre rapport parce que Google Docs n’est pas accessible.&lt;/p&gt;
&lt;p&gt;Bref, nous voilà encore une fois sauvés de l’horrible Big Brother du 21e siècle. Oh, et sinon, je viens de commencer à utiliser ce formidable outil qu’est Wave ! ;)&lt;/p&gt;</description><author>Separate Concerns</author><pubDate>Fri, 04 Dec 2009 13:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.separateconcerns.com/2009-12-04-fr-chrome-os.html</guid></item><item><title>Stainless v0.4</title><link>https://etodd.io/2009/12/04/stainless-v0-4/</link><description>&lt;p&gt;&lt;a href="https://etodd.io/assets/stainless-v0-4-title.jpg"&gt;&lt;img alt="" class="aligncenter size-medium wp-image-108" src="https://etodd.io/assets/stainless-v0-4-title-small.jpg" title="Stainless v0.4" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Available on the new website: &lt;a href="http://stainless.sf.net"&gt;stainless.sf.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There's a whole bunch of new stuff in v0.4 that I don't have time to talk about. So check out the website to see the new HD trailer.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Fri, 04 Dec 2009 03:41:02 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/12/04/stainless-v0-4/</guid></item><item><title>Nautilus : Behind The Curtains</title><link>https://captnemo.in/blog/2009/12/04/nautilus-behind-the-curtains/</link><description>&lt;p&gt;Almost everyone looks at my laptop’s screen, and asks me “is that Windows 7 ?” and I reply each of them with the same answer “No”. I have not yet moved to 7, because of various reasons, which I am not going to explain over here, but lets just say that I’m still clinging to dear old Vista. I don’t really have much of a trouble with Vista as many people have said. I work blazingly fast with Vista, which is what it is all about. As an operating system, it is expected to help me get my job done, not do everything by itself”. And this is where my software listing comes into view. Since everyone have those “how the heck did you do that?” moments when they look at me doing stuff, I decided to publish a listing of some of my favourite applications that I use so that I may redirect you to safe spot where you may choose things as you like. This listing may not suite your way of working, however you might find a gem or two along the way. This is not a listing of all softwares that I use. Rather just a collection of cool tools that I think every Windows user must be using. If you think you’ve found that killer-app for doing things, do let me know in the comments. I’ll be listening.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;**&lt;a href="http://www.delldock.com" title="Dell Dock"&gt;&lt;img align="right" alt="" border="0" class="thumbnail" height="143" src="http://captn3m0.files.wordpress.com/2009/12/delldock.jpg" style="display: inline; border-width: 0; margin: 0 0 0 15px;" width="640" /&gt;&lt;/a&gt;Dell Dock : **I just love this tools and its ability to divide the applications that I use into categories. It doesn’t take much of a screen estate, and takes me where ever I ask it to. With the ability to assign custom icons, and add separators/categories etc, it is more than an average dock, its my favourite dock. On the downside, this is only for Dell Computers, and comes preinstalled. However you can download it from &lt;a href="http://www.delldock.com" target="_blank" title="DellDock.com"&gt;here&lt;/a&gt; if you didn’t get it with your dell systems. Non dell users may be interested in RK Launcher, a freeware dock that simulates Mac Dashboard, and does a pretty good job. There was another version of Dell Dock (2.x which has yet to be released on the website, but was available to Dell Studio buyers, with new and better icons. Drop by a comment if you need it.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;**Windows Sidebar : **Another tool I find myself using frequently is the Windows Sidebar, with 3-4 gadgets that are absolutely essential to me, such as the NowPlaying, MultiMeter, and the Top Processes gadget. A key shortcut to remember here is Win+Space which pops up my sidebar. Gadgets are a quick way to organize yourself, and keep a check on other things, like you schedule(Date Time), twitter(Twadged), quick launching apps, direct search among other things. Most users underestimate their usage and restrict themselves to the Clock and Slideshow gadget. Go ahead and search for them, see if you can find a gadget that matches what you’d like.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;**&lt;a href="http://captn3m0.files.wordpress.com/2009/12/taskbar.jpg"&gt;&lt;img align="right" alt="My Taskbar" border="0" class="thumbnail" height="77" src="http://captn3m0.files.wordpress.com/2009/12/taskbar_thumb.jpg" style="display: inline; margin-left: 0; margin-right: 0; border-width: 0;" title="My Taskbar" width="480" /&gt;&lt;/a&gt;Quick Launch : **Not many would regard this as a tool, however this gives one a productivity boost. Try putting your favourite tools in the Quick Launch, and see if that helps you a bit, between searching for that app in Start Menu, or clicking it right where its clickable. Also try increasing the size of the Quick Launch, by Unlocking the taskbar, right click-&amp;gt;View-&amp;gt;Large Icons. That really looks cool!&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Internet Download Manager"&gt;&lt;strong&gt;Internet Download Manager&lt;/strong&gt;&lt;/a&gt;** :**My personal favourite download manager. Others that you may be interested in are : Orbit , &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=DownThemAll"&gt;DownThemAll&lt;/a&gt;! ( a firefox extension). Helps me keep a track on what I’m downloading right now, and speed benefits are downright clear. I also like its feature to capture downloads from any application, so I don’t have to wait for those updates taking forever to download. Downloads using batch files, schedulers, and even turns off your computer when its done.&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.voidtools.com/" target="_blank"&gt;&lt;strong&gt;Everything&lt;/strong&gt;&lt;/a&gt;** : **I should have put this above all in the list. This is such a good tool, I cannot overestimate its importance. What it basically does is searches “Everything”. The tool does not index file contents/properties, and only maintains an index of file names. As such it is blazingly fast, and searches all my applications/music/files damn quick. With an efficient shortcut(such as Win+S), you’re on your way to becoming a windows power user. On the downside, once you start using this real frequently, you tend to get a little disorganized putting stuff everywhere, knowing you will find it with Everything. Here’s a link to the &lt;a href="http://www.voidtools.com"&gt;website&lt;/a&gt;. (MUST USE)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Browsers :&lt;/strong&gt; In browsers, I currently use a combination of &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Google Chrome"&gt;Google Chrome&lt;/a&gt;/&lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Firefox"&gt;Firefox &lt;/a&gt;as my primary browser, updated to the latest dev build, and last  stable beta respectively. Both of these are great, and I prefer Firefox with its huge base of extensions available. And if someone is out there using IE still, please switch immediately. Firefox is such a great way to browse with, and Chrome such a ease on the eyes. Its hard for me to pick between the two, I’ll rather wait and watch over the next year, where each one stands. Safari and Opera come a distant second for me with Safari being the better one.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;File Tools :&lt;/strong&gt; I use &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=7-zip"&gt;7-zip&lt;/a&gt; for compression purposes, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=CCleaner"&gt;CCleaner &lt;/a&gt;to rid my computer of junk, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Defraggler"&gt;Defraggler &lt;/a&gt;to defragment my hard disk, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Recuva"&gt;Recuva &lt;/a&gt;from the same company to restore those accidently deleted files.Another tool I would mention here is “&lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=GoodSync"&gt;GoodSync&lt;/a&gt;” which i use to sync my usb drive and my Documents. I also use it to organize my Start Menu, using a Dock folder in my Desktop, which i sync to the Start Menu. &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Dropbox"&gt;Dropbox&lt;/a&gt; is the best tool I use for my syncing purposes, between different computers. It offers 2 gb for starters, and all the sync is on the fly, meaning you just copy things to your Dropbox folder, which is automatically synced to all of your computer. It is also a great way to sync your projects with different people.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;**Multimedia : **I prefer Windows Media Player 11 for audio, and &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=VLC"&gt;VLC &lt;/a&gt;for video viewing. With my NowPlaying gadget, and GTalk in sync with WMP, its easy to change tracks, and let others know what you’re listening to. I also use Zune occasionally when I’m in the mood of a pure music experience. Pictures are pretty easy to manage with Windows built in Photo Gallery, or its live version. Also check out picasa, google’s free photo management tool.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Office Tools :&lt;/strong&gt;I am currently using a Technical Preview Beta of &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Office 2010"&gt;Office 2010&lt;/a&gt;, for documents,presentations. &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Notepad++"&gt;Notepad++&lt;/a&gt; for text and code editing, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Foxit PDF Reader"&gt;Foxit PDF Reader&lt;/a&gt; for ebooks, and reading stuff, which is way faster, and smaller than that Bloated Adobe Acrobat Reader. I use &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Windows Live Writer,"&gt;Windows Live Writer&lt;/a&gt;, which offers a lot of plugins to edit posts, including this one.Offline gmail and Google Docs capability is way cooler than you think. Do try it out&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href="http://captn3m0.files.wordpress.com/2009/12/mse.jpg"&gt;&lt;img align="right" alt="mse" border="0" class="thumbnail" height="168" src="http://captn3m0.files.wordpress.com/2009/12/mse_thumb.jpg" style="display: inline; border-width: 0; margin: 0 0 0 20px;" title="mse" width="306" /&gt;&lt;/a&gt; Anti Virus :&lt;/strong&gt; This is one of the areas where I am consulted the most. Which antivirus to use? Well I would recommend you &lt;a href="http://www.google.com/search?btnI=I'm Feeling Lucky&amp;amp;q=Kaspersky"&gt;Kaspersky &lt;/a&gt;if you’re ready to shell out some money with a little slowing down to your system or use “&lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Microsoft Security Essentials"&gt;Microsoft Security Essentials&lt;/a&gt;” which I currently use. It is quick, doesn’t hog down my system, stops real time protection when i want it to, excludes some of my dangerous folders from being scanned and nuked, updates itself, detects almost any virus I dare to throw at it, and looks neat. On the downside, however it is just minimal, with no support for hosts file scanning, white listing, firewall, cookie management, user control, among other “high level stuff” that other anti viruses offer. But I like it, have been consistently using it for last 3 months, and am pretty sure I’m virus free. It does have a catch : you must own a valid, genuine copy of Windows to use the tool.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Security Tools :&lt;/strong&gt; Security Tools includes those nifty small programs that help me keep my computer safe, and sound. This listing comprises of tools I would suggest to the average user, I personally use a combination more than the following tools:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=AMPAWSmasherX"&gt;AMPAWSmasherX&lt;/a&gt; :Stops antiviruses from using your pen drive as a medium, by blocking that autorun.inf file. You might not find the tool easily available for download, but if you do, its a pretty good one.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=SpyBot Search &amp;amp; Destroy"&gt;SpyBot Search &amp;amp; Destroy&lt;/a&gt; : This is a one stop protection for all malware. Keep the definitions updated, however, and you will find that infections are pretty easy to deal with.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=HiJack This"&gt;HiJack This&lt;/a&gt; : Must use every 2 weeks or so. Shows you anything that has been changed from normal settings on your computer,and allows you to change it to default. Use carefully, as it may cause instability on your system later on, as it is quite a powerful tool, and if you don’t know what to do, generate your report, and post it online in one of the help forums.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;&lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=WinPatrol"&gt;&lt;img align="right" alt="winpatrol" border="0" class="thumbnail" height="168" src="http://captn3m0.files.wordpress.com/2009/12/winpatrol.jpg" style="display: inline; margin-left: 0; margin-right: 0; border-width: 0;" title="winpatrol" width="377" /&gt; WinPatrol&lt;/a&gt; : This is also a must-use program for securing your computer against anything “unwanted” which may include viruses, malware, additional crapware, fake windows services, hidden files, and the like. This is basically a watchdog(Scotty), which keeps a watch on any new startup programs (my favorite), and file extension changes, and new services and the like. If Scotty detects an unwanted change in your system, it barks and reminds you of the change and asks you if you’d like to keep it. It also allows you to add/remove/delay your startup programs list, and is my favourite program of the lot.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;**Other Tools : **I would just like to recommend some more everyday helpful tools to you, in no particular order. Try them out, you might like them or not, but they are definitely worth checking out : &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=TeraCopy"&gt;TeraCopy&lt;/a&gt;, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=AveThumbnail Resizer"&gt;AveThumbnail Resizer&lt;/a&gt;, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=TuneUpUtilities"&gt;TuneUpUtilities&lt;/a&gt;, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=VistaGlazz"&gt;VistaGlazz&lt;/a&gt;(must use for including transparency in title bar, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=appwiz.cpl"&gt;appwiz.cpl&lt;/a&gt;, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=WinBubbles"&gt;WinBubbles&lt;/a&gt;, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Privoxy"&gt;Privoxy&lt;/a&gt;, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=TaskBar Shuffle"&gt;TaskBar Shuffle&lt;/a&gt;, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=Paint.NET"&gt;Paint.NET&lt;/a&gt;, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=DupFiles"&gt;DupFiles&lt;/a&gt;, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=WinDirStat"&gt;WinDirStat&lt;/a&gt;, &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=OverDisk"&gt;OverDisk&lt;/a&gt; (both for checking disk usage), &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=PMenu"&gt;PMenu&lt;/a&gt;(especially if you use portable programs in you usb drive, or for assigning Win+ hotkeys to programs, like I use Win+P=paint, N=notepad), &lt;a href="http://www.google.com/search?btnI=I'm Feeling Lucky&amp;amp;q=Nero Free version"&gt;Nero Free version&lt;/a&gt; among others (Refer below for a complete listing)
&lt;a href="http://captn3m0.files.wordpress.com/2009/12/pm.jpg"&gt;&lt;img align="right" alt="PowerMenu" border="0" class="thumbnail" height="195" src="http://captn3m0.files.wordpress.com/2009/12/pm_thumb.jpg" style="display: inline; margin-left: 0; margin-right: 0; border-width: 0;" title="PowerMenu" width="244" /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;**Looks : **Looks are necessary part of making your computer shine out in the crowd. And I use the least required programs for that purpose. Using Tune Up’s styler to change my login Screen, and my personal wallpaper collection which I shuffle through using “Vortec Wallpaper changer”, a utility i built. Using Vista Glazz to patch my theme files to support 3rd party themes, I use themes downloaded from “deviantArt”. I also iconized my taskbar, for efficiently managing taskbar, and changed the quick launch icon size to large(looks cool).  &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=QTTab Bar"&gt;QTTab Bar&lt;/a&gt; is also a cool addition to Windows installing tabbed browsing in Windows Explorer. The current theme I use is “Cleaero”, and it gives me some cool transparency. I also use &lt;a href="http://www.google.com/search?btnI=I’m Feeling Lucky&amp;amp;q=PowerMenu"&gt;PowerMenu&lt;/a&gt;(another must use)for adding transparency, or changing priority of any window. I love it when my firefox window is transparent and I’m browsing while watching a video in the background. That is damn-right as cool as it gets without using Windows Blinds. And choosing the coolest gadgets can make all the difference, so see if you can find the right ones!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="complete-listing-of-tools"&gt;Complete Listing of Tools&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;The above was just a partial listing of the programs that I use. I generated a file listing of all the sofwares that I using four different methods. All of these are in text files, that you may use, with one exception. The easiest one is a tree map generated for my Dock Folder(list.dock). I generate a listing of all exe files inside my program files(which may not be complete since many like Chrome are installed in userdata folder). This one is renamed as list.exe.txt. Next I generate a listing of all installed programs using Hijack this!, called list.hijack. Another one was compiled using windirstat (list.windirstat). Using OverDisk I generated a virtual folder view of my Apps directory(this one’s huge at 2.x mb). Then I zipped them up and post them here. Browse through them, you might find a lesser used unknown app here. Especially check out the “tiny” folder. It is literally legendary, with tons of stuff! And one more thing, use OverDisk to open the ovd file.&lt;/p&gt;

  &lt;p&gt;Download Here – &lt;a href="http://dl.dropbox.com/u/1766113/List.zip" target="_self"&gt;Listings&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This list was composed by Capt. Nemo as a recommendation for non-power users of Windows. You are free to check out any of the programs, most of them are freeware, if not open source, and do not pose a harm to your computer. However if anything happens to your computer by these tools I am NOT responsible for the usage of the tool. And I try to use open-source/freeware tools as far as possible. If you use a commercial tool, do remember to pay the author, and stand against piracy. Otherwise use “Free as in Beer” tools like me!&lt;/p&gt;</description><author>Nemo's Home</author><pubDate>Fri, 04 Dec 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://captnemo.in/blog/2009/12/04/nautilus-behind-the-curtains/</guid></item><item><title>Jekyll: Custom Liquid Tags</title><link>https://blog.tracefunc.com/2009/12/04/jekyll-custom-liquid-tags-html/</link><description>&lt;p&gt;The base install of &lt;a href="http://github.com/mojombo/jekyll"&gt;Jekyll&lt;/a&gt; at the moment doesn’t let you run &lt;em&gt;any&lt;/em&gt; arbitrary ruby code. This is so that they can use it for github pages and not need to worry about making a super-secure sandbox just to generate some HTML.&lt;/p&gt;

&lt;p&gt;Unfortunately, that means we’re out of luck for creating custom liquid filters. The most annoying deficiency for me is tags. The way the default liquid &lt;code class="highlighter-rouge"&gt;map&lt;/code&gt; filter works isn’t friendly with @site.tags, so to generate my &lt;a href="https://blog.tracefunc.com/tags/"&gt;Tags&lt;/a&gt; page I had to do some really crazy stuff with &lt;code class="highlighter-rouge"&gt;capture&lt;/code&gt;:&lt;/p&gt;

&lt;div class="language-html highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;table class="rouge-table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="rouge-gutter gl"&gt;&lt;pre class="lineno"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
&lt;/pre&gt;&lt;/td&gt;&lt;td class="rouge-code"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"articles"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;table&amp;gt;&lt;/span&gt;
    {% for tag_ in @site.tags %}
      {% capture tag %}{{ tag_ | first }}{% endcapture %}
      &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&lt;/span&gt;{{ tag }}&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"{{ tag }}"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"anchor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ni"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
      {% for post in @site.posts %}
        {% if post.tags contains tag %}
          &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;{{ post.date | date: '%b %e, %Y' }}&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
              &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"{{ post.url }}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{ post.title }}&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
        {% endif %}
      {% endfor %}
    {% endfor %}
  &lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Fortunately, it wasn’t to hard to make a fork, and in &lt;a href="http://github.com/jamie/jekyll"&gt;my fork&lt;/a&gt; I added a super simple code loading option. Now, I can add a quick extension in &lt;code class="highlighter-rouge"&gt;_lib/filters.rb&lt;/code&gt; like so:&lt;/p&gt;

&lt;div class="language-ruby highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;table class="rouge-table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="rouge-gutter gl"&gt;&lt;pre class="lineno"&gt;1
2
3
4
5
6
7
8
9
10
11
&lt;/pre&gt;&lt;/td&gt;&lt;td class="rouge-code"&gt;&lt;pre&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Jekyll&lt;/span&gt;
  &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Filters&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;tagged&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;include?&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now &lt;code class="highlighter-rouge"&gt;tags.html&lt;/code&gt; looks like this:&lt;/p&gt;

&lt;div class="language-html highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;table class="rouge-table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="rouge-gutter gl"&gt;&lt;pre class="lineno"&gt;1
2
3
4
5
6
7
8
9
10
11
12
&lt;/pre&gt;&lt;/td&gt;&lt;td class="rouge-code"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"articles"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;table&amp;gt;&lt;/span&gt;
    {% for tag in @site.tags|keys|sort %}
      &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&lt;/span&gt;{{ tag }}&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"{{ tag }}"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"anchor"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ni"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
      {% for post in @site.posts|tagged:tag %}
        &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;{{ post.date | date: '%b %e, %Y' }}&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"{{ post.url }}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{ post.title }}&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
      {% endfor %}
    {% endfor %}
  &lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;There’s a bit of trickery there that liquid doesn’t document very well on lines 3 and 5 - in the second half of the for block you can chain filters on the collection you’re iterating over. The short format used is something along the lines of &lt;code class="highlighter-rouge"&gt;collection|filter:arg,arg,arg|filter...&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Similarly, I had some ugly code in my regular &lt;a href="https://blog.tracefunc.com/archive/"&gt;archive&lt;/a&gt; page to group by year and put headings in:&lt;/p&gt;

&lt;div class="language-html highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;table class="rouge-table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="rouge-gutter gl"&gt;&lt;pre class="lineno"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
&lt;/pre&gt;&lt;/td&gt;&lt;td class="rouge-code"&gt;&lt;pre&gt;{% for post in site.posts %}
  {% unless post.next %}
    &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&lt;/span&gt;{{ post.date | date: '%Y' }}&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&lt;/span&gt;&lt;span class="ni"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
  {% else %}
    {% capture year %}{{ post.date | date: '%Y' }}{% endcapture %}
    {% capture nyear %}{{ post.next.date | date: '%Y' }}{% endcapture %}
    {% if year != nyear %}
      &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&lt;/span&gt;{{ post.date | date: '%Y' }}&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&lt;/span&gt;&lt;span class="ni"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
    {% endif %}
  {% endunless %}

  ...
{% endfor %}
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now, a few extra liquid filters later, it looks like this:&lt;/p&gt;

&lt;div class="language-html highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;table class="rouge-table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="rouge-gutter gl"&gt;&lt;pre class="lineno"&gt;1
2
3
4
5
6
7
&lt;/pre&gt;&lt;/td&gt;&lt;td class="rouge-code"&gt;&lt;pre&gt;{% for post in site.posts %}
  {% if post|last_of_year? %}
    &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&lt;/span&gt;{{ post.date | date: '%Y' }}&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&lt;/span&gt;&lt;span class="ni"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
  {% endif %}
  
  ...
{% endfor %}
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you want to get easy extensions in your own project, rather than maintaining Yet Another Jekyll Fork, please vote up &lt;a href="http://github.com/mojombo/jekyll/issues#issue/100"&gt;my merge request&lt;/a&gt; on github.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;As a side note, blogging about liquid is a pain. The least pain I’ve found so far is to use liquid to output the leading open brace for all tags. Looks like garbage in my text editor, but it gets the job done:&lt;/p&gt;

&lt;div class="highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;table class="rouge-table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="rouge-gutter gl"&gt;&lt;pre class="lineno"&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class="rouge-code"&gt;&lt;pre&gt;{{'{'}}{ post.title }}
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Blogging about blogging about liquid (as above) I leave as an exercise to the reader.&lt;/p&gt;</description><author>set_trace_func</author><pubDate>Fri, 04 Dec 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.tracefunc.com/2009/12/04/jekyll-custom-liquid-tags-html/</guid></item><item><title>CorpusPHP</title><link>https://donatstudios.com/CorpusPHP</link><description>&lt;div class="GithubFeed"&gt;&lt;h2&gt;Recent Activity&lt;/h2&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2019-03-11T12:03:59-05:00" title="2019-03-11T12:03:59-05:00"&gt;Mar. 11, 2019&lt;/time&gt;&lt;/h3&gt;&lt;h4&gt;GitHub &lt;small&gt;(&lt;a href="https://github.com/web-flow" target="_blank"&gt;web-flow&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Update README.md&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2015-04-14T15:32:16-05:00" title="2015-04-14T15:32:16-05:00"&gt;Apr. 14, 2015&lt;/time&gt;&lt;/h3&gt;&lt;h4&gt;Jesse Donat &lt;small&gt;(&lt;a href="https://github.com/donatj" target="_blank"&gt;donatj&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Correct year and formatting&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Create LICENSE.md&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2014-01-07T10:12:39-06:00" title="2014-01-07T10:12:39-06:00"&gt;Jan. 7, 2014&lt;/time&gt;&lt;/h3&gt;Merge pull request #9 from bitdeli-chef/master&lt;br /&gt;
&lt;br /&gt;
Add a Bitdeli Badge to README&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h4&gt;Bitdeli Chef &lt;small&gt;(&lt;a href="https://github.com/bitdeli-chef" target="_blank"&gt;bitdeli-chef&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Add a Bitdeli badge to README&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2013-07-15T11:45:29-05:00" title="2013-07-15T11:45:29-05:00"&gt;Jul. 15, 2013&lt;/time&gt;&lt;/h3&gt;&lt;h4&gt;Jesse Donat &lt;small&gt;(&lt;a href="https://github.com/donatj" target="_blank"&gt;donatj&lt;/a&gt;)&lt;/small&gt;&lt;/h4&gt;Better constant&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2013-05-16T22:01:34-05:00" title="2013-05-16T22:01:34-05:00"&gt;May. 16, 2013&lt;/time&gt;&lt;/h3&gt;Cache class made to serialize&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2013-04-26T11:41:20-05:00" title="2013-04-26T11:41:20-05:00"&gt;Apr. 26, 2013&lt;/time&gt;&lt;/h3&gt;Corrections to the Github api modules pulled in&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2013-03-05T12:47:02-06:00" title="2013-03-05T12:47:02-06:00"&gt;Mar. 5, 2013&lt;/time&gt;&lt;/h3&gt;See doesn't die.  Drop submits an error code.&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2012-10-15T10:33:25-05:00" title="2012-10-15T10:33:25-05:00"&gt;Oct. 15, 2012&lt;/time&gt;&lt;/h3&gt;Update Source/corpus/modules/TwitterFeed.php&lt;br /&gt;
&lt;br /&gt;
Change in the twitter API url&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2012-09-05T15:49:26-05:00" title="2012-09-05T15:49:26-05:00"&gt;Sep. 5, 2012&lt;/time&gt;&lt;/h3&gt;Update TODO&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2012-08-17T14:46:52-05:00" title="2012-08-17T14:46:52-05:00"&gt;Aug. 17, 2012&lt;/time&gt;&lt;/h3&gt;Basic SASS/Compass support added&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2012-07-11T00:40:38-05:00" title="2012-07-11T00:40:38-05:00"&gt;Jul. 11, 2012&lt;/time&gt;&lt;/h3&gt;Merge branch 'master' of github.com:donatj/CorpusPHP&lt;br /&gt;
&lt;br /&gt;
Conflicts:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;corpus.sql&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Last.fm module allowed to float on its own&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Comments upgraded to DonatStudios hierarchical system&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Tag cloud improvements from Donat Studios&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;supplementary column added for supplementary JSON encoded data about a page&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;db_dump shell script added to scripts&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;SQL dump upgraded to 5.5 looking file&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2012-07-10T23:30:11-05:00" title="2012-07-10T23:30:11-05:00"&gt;Jul. 10, 2012&lt;/time&gt;&lt;/h3&gt;Brfeadcrumb code given itemprops&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Comment fix&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;More useful MySQL errors&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2012-07-09T11:24:16-05:00" title="2012-07-09T11:24:16-05:00"&gt;Jul. 9, 2012&lt;/time&gt;&lt;/h3&gt;headers_list_assoc function allowing headers_list result a an associative array added&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2012-06-05T15:24:40-05:00" title="2012-06-05T15:24:40-05:00"&gt;Jun. 5, 2012&lt;/time&gt;&lt;/h3&gt;Update master&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2012-06-01T09:41:13-05:00" title="2012-06-01T09:41:13-05:00"&gt;Jun. 1, 2012&lt;/time&gt;&lt;/h3&gt;old template =&amp;gt; layout correction&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;time class="entryDate" datetime="2012-05-15T23:03:53-05:00" title="2012-05-15T23:03:53-05:00"&gt;May. 15, 2012&lt;/time&gt;&lt;/h3&gt;HTML5 cleanup-y stuff&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Mediabox advance removed&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Basic namespace support roughed in to the autoloader&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Made to throw errors by default in silly environments&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;Merge branch 'master' of github.com:donatj/CorpusPHP&lt;hr /&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;CorpusPHP is setting out to be a world class PHP Framework. The aim is simple, to provide encapsulation, modularization, and helpful tools, all without changing the way you write PHP.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Project Information, documentation, and a timeline for the first release available  availble soon&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nightly's available at &lt;a href="https://github.com/donatj/CorpusPHP" target="_new"&gt;GitHub&lt;/a&gt;, or download the latest milestone below.
	&lt;table cellpadding="0" cellspacing="0" class="datatable" style="width: 100%;"&gt;
		&lt;tr&gt;&lt;th align="left"&gt;Build&lt;/th&gt;&lt;th align="left"&gt;Date&lt;/th&gt;&lt;th align="left"&gt;Message&lt;/th&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td align="left"&gt;v0.9&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/CorpusPHP/zipball/v0.9" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2010-02-18T13:32:38-06:00" title="2010-02-18T13:32:38-06:00"&gt;Feb. 18, 2010&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;Major steps made in maturity, approaching release candidate&lt;br /&gt;
&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=""&gt;&lt;td align="left"&gt;v0.92&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/CorpusPHP/zipball/v0.92" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2010-05-14T12:55:38-05:00" title="2010-05-14T12:55:38-05:00"&gt;May. 14, 2010&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;Version 0.92&lt;br /&gt;
&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td align="left"&gt;v0.98&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/CorpusPHP/zipball/v0.98" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2010-09-07T15:39:52-05:00" title="2010-09-07T15:39:52-05:00"&gt;Sep. 7, 2010&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;Version 0.98&lt;br /&gt;
&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=""&gt;&lt;td align="left"&gt;v0.981&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/CorpusPHP/zipball/v0.981" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2010-12-21T00:18:32-06:00" title="2010-12-21T00:18:32-06:00"&gt;Dec. 21, 2010&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;Optional $seperator paramter added to the breadcrumb generator.&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td align="left"&gt;v0.99&lt;br /&gt;&lt;small&gt;&lt;a href="https://github.com/donatj/CorpusPHP/zipball/v0.99" target="_blank"&gt;Download&lt;/a&gt;&lt;/small&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;time class="entryDate" datetime="2011-05-29T01:08:40-05:00" title="2011-05-29T01:08:40-05:00"&gt;May. 29, 2011&lt;/time&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;small&gt;version 0.99&lt;br /&gt;
&lt;/small&gt;&lt;/td&gt;&lt;/tr&gt;	&lt;/table&gt;</description><author>Donat Studios</author><pubDate>Thu, 03 Dec 2009 05:21:04 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/CorpusPHP</guid></item><item><title>America’s Forgotten Problem</title><link>https://solomon.io/americas-forgotten-problem/</link><description>America’s Forgotten Problem by Samuel Solomon / ASSOCIATE NEWS EDITOR 12.03.09 – 05:00 am American infrastructure is failing.</description><author>Sam Solomon</author><pubDate>Thu, 03 Dec 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/americas-forgotten-problem/</guid></item><item><title>Digital Culture online course for parents, teachers and everybody else!</title><link>https://stop.zona-m.net/2009/12/digital-culture-online-course-for-parents-teachers-and-everybody-else/</link><description>&lt;p&gt;Here is a new online course, one teaching concepts that every parent, teacher or other educator should know. Please write me (mfioretti, at nexaima.net) or contact directly &lt;a href="http://www.volint.it"&gt;VIS&lt;/a&gt; if you are interested in an English edition.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 01 Dec 2009 13:29:18 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/12/digital-culture-online-course-for-parents-teachers-and-everybody-else/</guid></item><item><title>An Introduction</title><link>https://blog.yiningkarlli.com/2009/12/an-introduction.html</link><description>&lt;p&gt;Welcome to Code and Visuals, my blog for tracking my exploration of the world of computer graphics!&lt;/p&gt;

&lt;p&gt;This post says December 2009 on it, but it’s actually backdated. I’m adding this post backdated in order to serve as a bit of an introduction. This blog began elsewhere but eventually became my computer graphics blog. Upon moving the hosting of this blog to Github Pages, I’ve decided to clear out some older off-topic posts, although those posts will remain available on the &lt;a href="http://yiningkarlli.blogspot.com"&gt;old Blogger version of this blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I started this blog around the time I joined Penn’s Digital Media Design program in 2009. Most of the older posts on this blog are pretty silly, but hopefully they show that I’ve made progress since then!&lt;/p&gt;</description><author>Code &amp;amp; Visuals</author><pubDate>Tue, 01 Dec 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.yiningkarlli.com/2009/12/an-introduction.html</guid></item><item><title>Should water be public or private? Australian, of course!</title><link>https://stop.zona-m.net/2009/11/should-water-be-public-or-private-australian-of-course/</link><description>&lt;p&gt;There are a lot of talks and public discussions in Italy these days about the &amp;ldquo;privatization of water&amp;rdquo; that should be soon approved by the national Parliament. Some people denounce a &lt;a href="http://www.disinformazione.it/privatizzazione_acqua.htm"&gt;theft of all water&lt;/a&gt; that &lt;a href="http://wildgretapolitics.wordpress.com/2009/11/06/privatizzazione-dellacqua-perche-va-impedita/"&gt;should be forbidden, period!&lt;/a&gt; There is also a &lt;a href="http://www.acquabenecomune.org/"&gt;&amp;ldquo;Save the Water&amp;rdquo; national campaign&lt;/a&gt;.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 29 Nov 2009 03:57:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/11/should-water-be-public-or-private-australian-of-course/</guid></item><item><title>Reduce waste this week, next Christmas and every other day</title><link>https://stop.zona-m.net/2009/11/reduce-waste-this-week-next-christmas-and-every-other-day/</link><description>&lt;p&gt;The week from Nov. 22 to Nov. 29 is the &lt;a href="http://www.wastereductionweek-pilotedition.eu/index.php?lang=en"&gt;European Waste Reduction Week&lt;/a&gt;. The reason for such an initiative is obvious from the &lt;a href="http://images.google.com/images?hl=en&amp;amp;safe=off&amp;amp;client=firefox-a&amp;amp;hs=TF4&amp;amp;q=naples%20waste%20crisis&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;sa=N&amp;amp;tab=wi"&gt;2008 images from Naples&lt;/a&gt;: many other cities worldwide risk similar crisis and it&amp;rsquo;s pointless to discuss whether one should recycle or burn waste if you don&amp;rsquo;t minimize the &lt;strong&gt;amount&lt;/strong&gt; of waste in the first place.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 27 Nov 2009 04:26:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/11/reduce-waste-this-week-next-christmas-and-every-other-day/</guid></item><item><title>Web Spidering with PHP</title><link>https://thomashunter.name/posts/2009-11-26-web-spidering</link><description>Spidering, in its simplest form is the act of transferring data from one database to another. Spidering requires the use of Regular Expressions, the cURL library (if POST data or cookies are used), and the cron libraries (if we need to download information with a schedule).</description><author>Thomas Hunter II</author><pubDate>Thu, 26 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-26-web-spidering</guid></item><item><title>(French) Ces sites qui ne devraient pas exister</title><link>https://blog.separateconcerns.com/2009-11-24-fr-websites-that-should-not-exist.html</link><description>&lt;p&gt;Regarder le &lt;a href="http://www.alexa.com/topsites"&gt;top 10 d’Alexa&lt;/a&gt; peut faire peur quand on connait un peu ce qu’est Internet. Ce classement par trafic est assez représentatif de l’évolution du web ces quelques années. On y trouve évidemment beaucoup de moteurs de recherche : google.com (1er), yahoo.com (3e), live.com (5e), baidu.com (8e) et yahoo.jp (10e). msn.com, le portail de Microsoft, arrive en 9e position, pourquoi pas. Le problème, c’est les quatre autres. Prenons-les dans le désordre.&lt;/p&gt;
&lt;section id="YouTube-4e-et-Blogger-7e"&gt;
&lt;h2&gt;YouTube (4e) et Blogger (7e)&lt;/h2&gt;
&lt;p&gt;Deux services de Google, bizarrement. Tous deux vous permettent d’héberger du contenu, vidéo pour YouTube et principalement textuel pour Blogger. Ce contenu pourra ensuite être commenté par d’autres utilisateurs, c’est ce qu’on appelle Web 2.0. Qu’y a-t-il de mal à cela ? Pas grand-chose, en fait, si ce n’est la situation de quasi-monopole de ces plates-formes.&lt;/p&gt;
&lt;p&gt;En offrant un service simple et gratuit, Google [1] s’est imposé sur ces secteurs. Or, même si Google n’est &lt;a href="http://investor.google.com/conduct.html"&gt;pas maléfique&lt;/a&gt;, il est bon de se rappeler que c’est une entreprise dont le &lt;strong&gt;business model&lt;/strong&gt; repose sur deux choses : vous vendre de la publicité et apprendre des choses sur vous. Vous lui donnez une occasion en or de faire la deuxième en vous créant un compte personnel chez eux et en y hébergeant vos données, quant à la première il n’y a qu’à voir le principal changement sur YouTube pour l’utilisateur depuis le rachat [2].&lt;/p&gt;
&lt;p&gt;Autre problème commun à tous les services gratuits gérés par de grosses boites : vous ne valez pas grand-chose pour eux, et ils ne feront rien pour vous aider, par exemple, à éviter la censure. Il suffit de voir le nombre de vidéos supprimées de YouTube sans raison valable, sur simple demande de gens qui ne sont souvent pas les ayant-droits. Certains se souviennent peut-être de la vidéo où Mme Albanel prouvait son incompétence en annonçant qu’OpenOffice incluait un pare-feu. Cette vidéo a été censurée à de multiples reprises bien qu’elle ait été filmée de manière officielle à l’Assemblée Nationale.&lt;/p&gt;
&lt;p&gt;Ceci dit, ces problèmes sont mineurs, il suffit d’en être informé, et ces services ont une raison d’être sur Internet. Pour les deux qui suivent, c’est une autre histoire.&lt;/p&gt;
&lt;p&gt;[1] OK, pour Youtube c’était déjà le cas avant que Google achète…&lt;/p&gt;
&lt;p&gt;[2] Pour ceux qui ne l’utilisent pas, je parle de publicités sous forme de bandeaux qui s’affichent en superposition sur la vidéo.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="Wikipedia-6e"&gt;
&lt;h2&gt;Wikipedia (6e)&lt;/h2&gt;
&lt;p&gt;Wikipedia, l’un des plus gros succès du libre. Une source d’information à laquelle chacun peut contribuer s’il a les compétences nécessaires, accessible instantanément de tout point du monde. Une merveille !&lt;/p&gt;
&lt;p&gt;Attendez, ça ne vous fait pas penser à quelque chose ça ? Ah si, le Web… Sauf que Wikipedia a un modèle centralisé alors que le Web est distribué. Sauf que sur Wikipedia ce sont les modérateurs qui détiennent le pouvoir de décider si une information est valable ou non, alors que sur le Web c’est à chacun de se faire son idée, même si l’opinion dominante se trouvera en premier dans les moteurs de recherche. Sauf que sur Wikipedia tout devra s’appuyer sur des sources “fiables”, comme par exemple des publications scientifiques (hum). Bref, Wikipedia, une formidable machine à imposer une pensée unique à des utilisateurs qui ne demandent pas mieux.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;EDIT - Pour ceux qui ne s’en seraient pas rendu compte, j’exagère volontairement. Ne prenez pas tout pour argent comptant non plus, la diversité d’opinion existe bien sur Wikipedia dans une certaine mesure.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/section&gt;
&lt;section id="Facebook-2e"&gt;
&lt;h2&gt;Facebook (2e)&lt;/h2&gt;
&lt;p&gt;J’ai gardé le meilleur pour la fin. Juste derrière le roi des moteurs de recherche, le sultan des réseaux sociaux. Facebook, la toile dans la toile, mais une toile encore une fois centralisée et où on ne communique qu’avec ses “amis”. Pratique, je peux dire des bêtises comme ça, personne ne le verra. Et si jamais un jour je ne les assume plus, j’efface.&lt;/p&gt;
&lt;p&gt;Mouais. Vous faites vraiment une confiance absolue à tous vos contacts, vous ? Si c’est le cas, bravo. Sinon, une fois que vous aurez réalisé que tout ce que vous mettez sur Facebook est du numérique, donc de l’information copiable, vous vous rendrez compte que, quels que soient les réglages de votre compte, il vaudrait mieux considérer que tout ce que vous y postez est public.&lt;/p&gt;
&lt;p&gt;Et puis même au-delà de ça, comment comprendre qu’un tel principe ait du succès ? Parce qu’après tout, soit vous n’ajoutez pas de contenu et vous ne faites que poster des liens vers des choses que vous avez trouvées en surfant sur le Web ou partager ceux des autres, et ça ressemble fortement aux chaînes d’emails que personne ou presque n’aime, soit vous mettez des choses nouvelles en ligne et c’est souvent égoïste parce que vous réservez (théoriquement) à vos pseudo-amis l’accès à de l’information qui n’est en général pas si privée que ça et qui aurait peut-être pu servir ou faire plaisir à d’autres. Regardez un peu en arrière, même les kikoolols de la génération Caramail préféraient en général les forums publics aux forums privés.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="Le-cœur-du-problème"&gt;
&lt;h2&gt;Le cœur du problème&lt;/h2&gt;
&lt;p&gt;Oui, parce qu’il faut bien le dire, il y a un problème. Et ce n’est pas que ces trucs-là existent, ils en ont le droit, c’est même un des fondements d’Internet : n’importe quel service a sa chance.&lt;/p&gt;
&lt;p&gt;Non, le problème, c’est que bien que je voie tous leurs défauts gros comme des maisons, je les utilise ! J’ai un compte YouTube, un compte Facebook et ça m’arrive régulièrement de consulter des pages Wikipedia. Seule exception : ces quelques pages ne sont pas chez Google mais bien sur mon VPS, sous mon nom de domaine. Ouf.&lt;/p&gt;
&lt;p&gt;La raison pour laquelle je les utilise, c’est que bien que conceptuellement et idéologiquement ils soient percés de partout, techniquement, ils vont de pas trop mauvais (Facebook, Wikipedia) à très bons (tout ce que fait Google). C’est un peu la différence avec Windows ou Internet Explorer, vous voyez : le fait qu’ils sont techniquement mauvais fait que leurs alternatives sont crédibles, pas vraiment la question éthique qui est derrière.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="Conclusion"&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Conclusion ? Rien. Que voulez-vous que je dise de plus ? Voir que ces sites-là sont parmi les plus visités du monde me rend un peu triste mais ce n’est pas pour autant que je vais arrêter de les utiliser. Pas tout de suite en tout cas.&lt;/p&gt;
&lt;p&gt;Peut-être qu’un jour j’aurai le temps de mettre en place un système simple pour héberger mes vidéos sur mon serveur. Peut-être que je me lasserai de Facebook (les gens que dont je voudrais avoir des nouvelles n’y postent plus trop de toute façon) et que je fermerai mon compte. Peut-être qu’on reverra des annuaires collaboratifs de liens vers des pages qui donnent des avis variés sur divers sujets, avec une structure d’arbre ou de graphe par thématique et un hébergement décentralisé, de la réplication spontanée, du Web quoi… Houlà, je m’envole ;)&lt;/p&gt;
&lt;p&gt;En attendant le miracle, je profite de la qualité de ces services, comme tout le monde. Je ne suis pas assez fanatique pour les boycotter. J’essaie juste de me rappeler de temps en temps qu’on est bien loin de l’utopie du Web de 90.&lt;/p&gt;
&lt;p&gt;La prochaine fois, je parlerai peut-être de Chrome OS, un sujet pas si éloigné finalement.&lt;/p&gt;
&lt;/section&gt;</description><author>Separate Concerns</author><pubDate>Tue, 24 Nov 2009 13:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.separateconcerns.com/2009-11-24-fr-websites-that-should-not-exist.html</guid></item><item><title>Replay functionality, new icons</title><link>https://etodd.io/2009/11/24/replay-functionality/</link><description>&lt;p&gt;Yes, you can now view the last five games you played as a spectator! All I did was save each network packet that's sent out into a big list, then use Python's pickle module to serialize the list to a file. Each packet has a timestamp, so I just read the packets back in order, checking the timestamps to make sure it reads the packets back at the right speed. Fast forwarding is not implemented, but it would be pretty easy. Rewinding/seeking would be more difficult, so I'm not sure I'll get to implement those.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Tue, 24 Nov 2009 12:01:18 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/11/24/replay-functionality/</guid></item><item><title>Games to play and not to play</title><link>https://captnemo.in/blog/2009/11/23/gamers-saga-games-to-play-and-not-to-play/</link><description>&lt;p&gt;This article has been bubbling in my mind for quite some time, and I’ve decided to steam it off. There are games that you must play, like Mario or Contra. Then there are games that you play (Counter Strike, AoE). Some games you wish you could play (Assassin’s Creed, Far Cry). Games you should play (Braid, Minesweeper, Spore). And finally come the games you must NEVER play (Farmville, World Of Warcraft, Mafia Wars, School Of Magic and the like). Why this categorization? Because I recently decided to leave School Of Magic on facebook after a week long affair where I reached lvl 15, and was about to get into “thick of things” as they say. Why? Because I realized that SOM is not a true game. A game is supposed to be entertaining, and indulgive. If it tells me to do something, I must do it because I take interest in it. Not to get ahead of my peers. I recently came across an &lt;a href="http://www.smh.com.au/news/articles/ethical-dilemmas/2007/09/19/1189881577195.html"&gt;article&lt;/a&gt; by &lt;a href="http://en.wikipedia.org/wiki/Jonathan_Blow"&gt;Jonathan Blow&lt;/a&gt;, my favourite game designer (Braid). He opened my mind to the fact that &lt;strong&gt;“A Game is a form of art”&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You may not agree with this statement right now, but consider James Cameron’s Avatar, which looks so close to real, yet is live 3d. It does look kind of gamer-ish, doesn’t it? And we all agree that cinemas, and literature are a part of our culture, part of our art. But as movies get closer to games(Resident Evil, Prince Of Persia), the same is happening the other way around. Games are becoming a part of our art culture. Games like Bio-Shock, and Fear portray the doomed versions of our future. The designer behind these games did not just say, let’s make another FPS, where you kill everything that moves (that was Doom 1,2 by the way). They decided to create a realistic storyline, and a better game play. That is as innovative as it takes to get the feel of the game to the player. Let us now take up some of these categories I defined quickly.&lt;/p&gt;

&lt;dl&gt;
  &lt;dt&gt;Games You Must Play&lt;/dt&gt;
  &lt;dd&gt;These are the kind of games, that each of us has played. They remind us of how we first stared at that green background trying to figure out the next play in Solitaire. Or the joy of ducking under the dragon and touching that axe in Mario. These games still remind us about the giant leap that the gaming industry has taken. For Dave, Wolf-3d, Roadrash, we have reached graphics quality that surpasses HD (Call Of Duty Modern Warfare 2)&lt;/dd&gt;
  &lt;dt&gt;Games You Play&lt;/dt&gt;
  &lt;dd&gt;Skip this if you aren’t a gamer. If you’re one, well you know the games I’m talking about. Nothing beats taking a frag with a deagle. Other than maybe shouting 14 before all those AoE games. Its the thrill, and excitement, and your love of the game that keeps you glued to the seat. I won’t call these games entirely unethical, because the game play here is fair enough, and exciting. You know what you’re doing, and why. And its not just because of that score, or frag. It is also because of the satisfaction that you get after that frag.&lt;/dd&gt;
  &lt;dt&gt;Games You Wish You Could Play&lt;/dt&gt;
  &lt;dd&gt;Sometimes you Graphics Card isn’t all that powerful, or you just can’t find a torrent/download link for the game. Sometimes 10GB games do seem big. And sometimes, as in the case of FIESTA, the game hasn’t been launched for PC.&lt;/dd&gt;
  &lt;dt&gt;Games You Should Play&lt;/dt&gt;
  &lt;dd&gt;These are the games that really matter. That form of the core of my “games are art” theory. Games like &lt;a href="http://www.braid-game.com"&gt;Braid&lt;/a&gt;, &lt;a href="http://www.hemispheregames.com/osmos/"&gt;Osmos&lt;/a&gt;, Minesweeper, Prince Of Persia (not all), Tomb Raider (again not all parts). These games take you into their own world, where you get to learn, listen, think, and observe. Where you play the game because its exciting, and fun, and you want to play it. Not because someone is offering you a “level up” if you click on a button.&lt;/dd&gt;
  &lt;dt&gt;Games You Should Never Play&lt;/dt&gt;
  &lt;dd&gt;If once is not enough, I repeat, &lt;strong&gt;Stay away from these games&lt;/strong&gt;. Please, these hacked up versions of the same code, or sometimes game idea, do not deserve to be called as games. Mafia Wars, Restaurant, Cafe Shop, and all of those mindless facebook games come here. And so do War Of Warcraft, Travian, NFS Pro Street(that was just a bad game). These so-called-games
    &lt;ol&gt;
      &lt;li&gt;do nothing to entertain you&lt;/li&gt;
      &lt;li&gt;offer you nothing but just-another-level-up&lt;/li&gt;
      &lt;li&gt;never “teach” something (play braid, you’ll understand what I mean)&lt;/li&gt;
      &lt;li&gt;have nothing interesting&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Then what is the reason that they are so hyped, and most played MMORPGs? The reason is lack of better games. Lack of games that exist on facebook and is not-another-clone-of-mafia-wars. Lack of games that adhere to strict design ideas. Do not take me wrong. There are some serious game designers who are talented, but the truth is that they are forced to make what sells, and what sells is Mafia Wars. Unfortunately. And these people are forced to work for such games. Wasting their talent on such mindless games. And if all of this wasn’t enough read this quote by the CEO of Mafia Wars :&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I knew that i wanted to control my destiny, so I knew I needed revenues, right, fucking, now. Like I needed revenues now. So I funded the company myself but I did every horrible thing in the book to, just to get revenues right away. I mean we gave our users poker chips if they downloaded this zwinky toolbar which was like, I dont know, I downloaded it once and couldn’t get rid of it. &lt;em&gt;laughs&lt;/em&gt; We did anything possible just to just get revenues so that we could grow and be a real business…So control your destiny. So that was a big lesson, controlling your business. So by the time we raised money we were profitable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read the entire story on facebook gaming scams &lt;a href="https://consumerist.com/2009/11/09/mafia-wars-ceo-brags-about-scamming-users-from-day-one/"&gt;here&lt;/a&gt;. And if you’re with me, try picking up some better titles instead of playing these nonsense games on FB&lt;/p&gt;</description><author>Nemo's Home</author><pubDate>Mon, 23 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://captnemo.in/blog/2009/11/23/gamers-saga-games-to-play-and-not-to-play/</guid></item><item><title>One hour with the XO laptop in a Nepali school</title><link>https://stop.zona-m.net/2009/11/one-hour-with-the-xo-laptop-in-a-nepali-school/</link><description>&lt;p&gt;On Nov. 5th, 2009, during the first &lt;a href="https://stop.zona-m.net/2009/11/plan-for-universal-basic-education-discussed-in-kathmandu/"&gt;OLE Assembly in Kathmandu&lt;/a&gt;, I visited a class that uses the &lt;a href="http://laptop.org/en/laptop/index.shtml"&gt;XO laptop&lt;/a&gt; in the Binayak Bal School of Badal Gaun, Nepal.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 21 Nov 2009 05:49:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/11/one-hour-with-the-xo-laptop-in-a-nepali-school/</guid></item><item><title>Ninux Day: here's why you too may need your "neighborhood Internet"</title><link>https://stop.zona-m.net/2009/11/ninux-day-heres-why-you-too-may-need-your-neighborhood-internet/</link><description>According to TV commercials, a fast Internet connection turns your whole life upside down: music, movies and online games at the smallest possible cost, more news than you may ever handle and, above all, cheaper and more efficient services of all kinds.
The Internet makes it possible to use a computer to stop wasting hours in lines at medical centers, banks or postal offices, or to keep your public administrators under control.</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 21 Nov 2009 04:26:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/11/ninux-day-heres-why-you-too-may-need-your-neighborhood-internet/</guid></item><item><title>$42,500 in Laptop Computers Stolen from Haley Center</title><link>https://solomon.io/42500-in-laptop-computers-stolen-from-haley-center/</link><description>An estimated $42,500 in laptop computers was stolen from the Haley Center between Nov. 6 and Nov. 9. Twenty-five laptops were stolen.</description><author>Sam Solomon</author><pubDate>Fri, 20 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/42500-in-laptop-computers-stolen-from-haley-center/</guid></item><item><title>Finding the reasons for excessive logical IOs</title><link>https://tanelpoder.com/2009/11/19/finding-the-reasons-for-excessive-logical-ios/</link><description>&lt;p&gt;There’s another interesting thread going on in Oracle-L, about understanding &lt;a href="http://www.freelists.org/post/oracle-l/Logical-IO" target="_blank"&gt;logical IOs&lt;/a&gt; and drilling down into their reasons. Of course sometimes (or rather usually) the excessive logical IOs come from a bad execution plan (when a nested loop loops over lots of datablocks again and again or a wrong index is used for driving a query etc), but sometimes the excessive LIOs are caused by some internal issues, like space management etc.&lt;/p&gt;
&lt;p&gt;A convenient tool I use for reporting logical IO reasons is (again) my &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/snapper.sql" target="_blank"&gt;Snapper&lt;/a&gt;! It has  an option “b” for reporting Buffer get reasons or as I use below – option “a” shows All information Snapper can show.&lt;/p&gt;
&lt;p&gt;There are couple of gotchas though which make this approach imperfect:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The X$ tables Snapper uses for LIO reason reporting contain instance-wide counters, not specific to a single testing session. Thus you either need to be the single user in your database when experimenting and even then the background activity may increment some counters while you are testing too. I have sometimes suspended all other processes (kill -STOP and kill -CONT to resume)  or used Flash Freeze (oradebug ffbegin and ffresumeinst) to hang the whole instance that there would be no other activity going on.&lt;/li&gt;
&lt;li&gt;These buffer get reason counters are not maintained properly in Oracle 11g, probably due an optimization effort and some changes for faster pinning of buffer cache buffers (there’s a parameter called _fastpin_enable which is set to 1 in 11g and it enables so called fastpath buffer gets. If you see v$sesstat statistics such “consistent gets from cache (fastpath) or “db block gets from cache (fastpath)” being inremented, then fastpath buffer gets/pins are used. Note that I &lt;em&gt;do&lt;/em&gt; have a script which works also on 11g but I’ll write about that one some time in the future :)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Anyway, if you are testing in an environment exclusively used by you, on Oracle 10.2 or lower, then you can run snapper with the gather=a option to report a bunch &lt;strong&gt;&lt;em&gt;instance-level&lt;/em&gt;&lt;/strong&gt; statistics in addition to the standard session-level stats:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;BUFG – Buffer get reasons (both consistent and current mode gets)&lt;/li&gt;
&lt;li&gt;LATG – Latch gets (both willing to wait and immediate gets)&lt;/li&gt;
&lt;li&gt;ENQG – Enqueue gets&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here’s an example, prepare for long output:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 19 Nov 2009 19:16:38 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/11/19/finding-the-reasons-for-excessive-logical-ios/</guid></item><item><title>OOo4Kids, the office suite for all children... and their parents</title><link>https://stop.zona-m.net/2009/11/ooo4kids-the-office-suite-for-all-children-and-their-parents/</link><description>&lt;p&gt;&lt;a href="http://wiki.ooo4kids.org/index.php/Main_Page"&gt;OOo4Kids&lt;/a&gt; is a special version of &lt;a href="http://www.openoffice.org"&gt;OpenOffice.org&lt;/a&gt; (the popular, free and easy to use alternative to Microsoft Office) which is very interesting and useful not only for schools, but also for many adult users. Besides, interaction with developers seems much simpler and friendlier than in many other Free Software projects. Keep reading to know, straight from OOo4Kids developer Eric Bachard, what is that makes OOo4kids unique.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 19 Nov 2009 05:03:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/11/ooo4kids-the-office-suite-for-all-children-and-their-parents/</guid></item><item><title>FL Studio Piano Roll Tutorial</title><link>https://thomashunter.name/posts/2009-11-19-fl-studio-piano-roll-tutorial</link><description>This tutorial covers the FL Studio piano roll, and explains every facet of the interface.</description><author>Thomas Hunter II</author><pubDate>Thu, 19 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-19-fl-studio-piano-roll-tutorial</guid></item><item><title>Welcome Aboard The Nautilus</title><link>https://captnemo.in/blog/2009/11/19/welcome/</link><description>&lt;p&gt;This is my first real post on my brand new blog at wordpress, and quite seriously, I’m thrilled to get a new start. I hope this project would flourish unlike many of the other things I took up (&lt;a href="http://kasiasi.blogspot.com" target="_blank"&gt;Kasiasi&lt;/a&gt;, &lt;a href="http://www.papercut.co.nr" target="_blank"&gt;Papercut&lt;/a&gt;,…). I have not yet completely given up on Papercut, and I really liked the Google Sites interface, but posting online, and editing it takes time. So this is my first attempt at publishing offline edited work, using Windows Live Writer. I’ll try to use other options as well, and let you know which I like best.&lt;/p&gt;

&lt;p&gt;Now for some blogging stuff. What’s happening aboard the Nautilus? What is the Nautilus, and who is Capt. Nemo ? Let me answer these these three questions in my introductory post first. It all began in Kota, when I was a JEE student vying to enter the holiest institutes of the country, the IIT. And what I was doing there was, well studying and playing Age Of Empires, with my two best friends, Sankalp (aka General Hendrix) and Shundi (aka DR. Lecter). And our trio was one of the most feared AoE clans in Kota. We were playing together in perfect team play, and knew every counter there was to know, and every fact in the guidebook.&lt;/p&gt;

&lt;p&gt;There was just a little flaw, I didn’t have a name. I used to play under various names, like Godfather, Eragon, and of course Harry Potter, but none of these stuck, and I was still nameless. I was like Maerad in the The Gift, looking for her true name. That night I went sleepless, and searched my inner soul for my True name. Both of my teammates already had titles (one doctor, and other a general), so I decided I would get one as well. And after storming by brain for all the books I’ve read, and all those movies, I settled for &lt;a href="http://en.wikipedia.org/wiki/Capt._Nemo" target="_blank"&gt;Capt. Nemo&lt;/a&gt;. Where did I get the name from? It was from a book called “20,000 Leagues under the sea”, by the immortal master of Sc-Fi, Jules Verne. The character of Capt. Nemo was one of most mysterious you could ever see. And one of the most brilliant. And I got it when I’d read it for the umpteenth time, Capt. Nemo wasn’t an enigma. Just because he didn’t fit into the definition of a hero doesn’t make him a villain. I could go on and on about the character, but that would take up space, which I’m determined to use to answer the other 2 questions.&lt;/p&gt;

&lt;p&gt;So what is the Nautilus. I call pretty much everything I own, the Nautilus. Why? Because that was Capt. Nemo’s masterpiece. His submarine, and the very first, at least on paper.And my room and my laptop are labelled as Nautilus . And this blog is the path that I follow “Aboard The Nautilus”. That brings me to the third question, what I’ve been doing lately?&lt;/p&gt;

&lt;p&gt;Lately I’ve been playing around with PHP a lot, and mind you it is really cool. I might post some of my experiences with PHP later on. And the reason I’ve been playing with PHP is because I’ve been working on my own website(its not exactly mine, its under Web Designing Section, IITR, but I’ve written 95% of its code). I’ll be launching soon, under a limited beta, so keep watching. I’ve also been working on the second issue of Criitique, an e-magazine for the youth. With kick-ass articles you are sure to like it. Do check it at &lt;a href="http://www.criitique.com"&gt;www.criitique.com&lt;/a&gt;. Playing Age Of Empires is now a daily affair for me now, and I’ve been working my way up and down my timings. For those interested, my timings currently are “13,20,35 with 27,28-29 pop. I’ve been tweeting a lot, and I still don’t know why the twitter fad isn’t catching up in India. Twitter is fast, and easy, so why don’t people use it? Any ideas? Let me know.&lt;/p&gt;

&lt;p&gt;I’ve also got to study, with my end sems coming up, and this seems to be the time to do it. Got any more brainstorming ideas to work on? Wanna work with me? Join the fun Aboard The Nautilus&lt;/p&gt;

&lt;p&gt;As an update, Windows Live Writer refused to connect to my blog and I finnaly used BlogDesk to publish my post. And I also tried Qumana, and wBlogger, and FYI, none of them work.&lt;/p&gt;</description><author>Nemo's Home</author><pubDate>Thu, 19 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://captnemo.in/blog/2009/11/19/welcome/</guid></item><item><title>The "Respect Creativity" project from EMCA Italia: do they tell the whole story?</title><link>https://stop.zona-m.net/2009/11/the-respect-creativity-project-from-emca-italia-do-they-tell-the-whole-story/</link><description>&lt;p&gt;In August 2009 an administrative employee of an Italian school &lt;a href="http://linux-club.org/pipermail/digitalfreedomweek/2009-August/004954.html"&gt;announced on a teachers mailing list&lt;/a&gt; that his school had received an invitation to a European Educational Project for protection of creativity and copyright by Dott.ssa Isabella Longo, Coordinator of EMCA Italia (EMCA is the European Music Copyright Alliance).&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 18 Nov 2009 05:37:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/11/the-respect-creativity-project-from-emca-italia-do-they-tell-the-whole-story/</guid></item><item><title>Explain Plan For command may show you the wrong execution plan – Part 1</title><link>https://tanelpoder.com/2009/11/17/explain-plan-for-command-may-show-you-the-wrong-execution-plan-part-1/</link><description>&lt;p&gt;In Oracle-L mailing list &lt;a href="http://www.freelists.org/post/oracle-l/explain-plan-and-the-real-execution-plan" target="_blank"&gt;a question&lt;/a&gt; was asked about under which conditions can the explain plan report a wrong execution plan (not the one which was actually used when a problem happened).&lt;/p&gt;
&lt;p&gt;I replied this with the following, but thought to show an example test case of this problem too:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The optimizer statistics the EXPLAIN PLAN ends up using are different from the statistics the other session ended up using&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Explain plan does not use bind variable peeking, thus will not optimize for &lt;em&gt;current&lt;/em&gt; bind variable values&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 18 Nov 2009 04:33:24 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/11/17/explain-plan-for-command-may-show-you-the-wrong-execution-plan-part-1/</guid></item><item><title>FL Studio Comprehensive Mixer Interface Overview</title><link>https://thomashunter.name/posts/2009-11-18-fl-studio-comprehensive-mixer-interface-overview</link><description>This tutorial will provide you with a comprehensive understanding of the mixer interface for FL Studio. We describe every single knob/option on the interface.</description><author>Thomas Hunter II</author><pubDate>Wed, 18 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-18-fl-studio-comprehensive-mixer-interface-overview</guid></item><item><title>Polymorphism, Abstract Classes, and Interfaces in PHP</title><link>https://thomashunter.name/posts/2009-11-17-polymorphism-abstract-classes-and-interfaces-in-php</link><description>This article will explain the advanced topics of PHP classes, including polymorphism, abstract classes, and interfaces.</description><author>Thomas Hunter II</author><pubDate>Tue, 17 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-17-polymorphism-abstract-classes-and-interfaces-in-php</guid></item><item><title>FL Studio Automations</title><link>https://thomashunter.name/posts/2009-11-17-fl-studio-automations</link><description>An explanation of Automation Clips in FL Studio, how to create and modify them and assign them to different properties in FL Studio.</description><author>Thomas Hunter II</author><pubDate>Tue, 17 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-17-fl-studio-automations</guid></item><item><title>really well written article</title><link>https://purpleidea.com/blog/2009/11/16/really-well-written-article/</link><description>&lt;p&gt;i&amp;rsquo;m sure that most (if not all) of the technically inclined readers know about this already, but since it&amp;rsquo;s such a well written article (and detailed in the right places), i felt i should bump up it&amp;rsquo;s link count.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Binary_prefix"&gt;&lt;a href="http://en.wikipedia.org/wiki/Binary_prefix"&gt;http://en.wikipedia.org/wiki/Binary_prefix&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;as an aside, i really liked Knuth&amp;rsquo;s suggestion; in the meantime let&amp;rsquo;s use the stupid kibi&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://m9rx.com/" target="_blank"&gt;hire James&lt;/a&gt; and his team at &lt;a href="https://m9rx.com/" target="_blank"&gt;m9rx corporation&lt;/a&gt;.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://mastodon.social/@purpleidea" target="_blank"&gt;follow James on Mastodon&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://twitter.com/intent/follow?screen_name=purpleidea" target="_blank"&gt;follow James on Twitter&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://github.com/sponsors/purpleidea/" target="_blank"&gt;support James on GitHub&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://www.patreon.com/purpleidea" target="_blank"&gt;support James on Patreon&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;
&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Mon, 16 Nov 2009 15:14:15 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/11/16/really-well-written-article/</guid></item><item><title>(French) Le piège de la génération Y</title><link>https://blog.separateconcerns.com/2009-11-16-fr-gen-y.html</link><description>&lt;p&gt;Hier soir, j’ai joué à &lt;a href="http://www.bigbluecup.com/yabb/index.php?topic=39327.0"&gt;Featherweight&lt;/a&gt;, un bon petit jeu d’aventure indépendant qui se finit en quelques minutes. J’ai beaucoup apprécié, et ça m’a fait réaliser que ça faisait longtemps que je n’avais pas fait quelque chose du genre. La raison ? Je suis atteint d’un syndrome qui touche beaucoup de gens de ma génération : je passe la plupart de mon temps libre à faire des choses inintéressantes sur mon PC. Du coup, je ne fais plus un certain nombre de choses que je faisais avant et qui me plaisaient beaucoup, comme jouer à des jeux vidéos ou coder pour moi, et ça me manque. C’est grave docteur, ça se soigne ? À mon avis oui, mais il va falloir reprendre les choses en main et supprimer un certain nombre de distractions.&lt;/p&gt;
&lt;p&gt;Heureusement, le principal danger est évité : je gère à peu près bien ma messagerie instantanée. Je n’ai jamais utilisé de réseau type MSN, et je vais beaucoup moins sur IRC depuis que &lt;a href="http://phraktured.net/becoming-a-morning-person.html#comment-6120694"&gt;phrakture me l’a conseillé&lt;/a&gt;. J’ai ajouté un peu trop de contacts dans Skype à mon goût, mais ça reste gérable. Je me suis aussi désinscrit de la plupart des mailing-lists de Télécom qui me prenaient pas mal de temps à lire, et j’ai délaissé identi.ca (un twitter-like libre). Par contre, je fais un paquet de choses inutiles par habitude, que je vais arrêter immédiatement.&lt;/p&gt;
&lt;p&gt;D’abord, lire les nouveaux messages sur le forum anglophone d’Arch Linux. Il y en a beaucoup trop maintenant, plusieurs centaines par jour, ça n’est plus gérable. Je continuerai à lire ceux du forum francophone de temps en temps pour l’instant.&lt;/p&gt;
&lt;p&gt;Ensuite, jouer à des jeux en ligne, du genre de ceux publiés par &lt;a href="http://www.motion-twin.com/"&gt;Motion Twin&lt;/a&gt;. Jouer à des jeux vidéos n’est pas forcément mauvais, c’est jouer à des jeux sans fin le problème (MMORPG, jeux Flash, etc). Je vais faire une exception de &lt;a href="https://www.shinobi.fr"&gt;Shinobi&lt;/a&gt; pour l’instant parce que je m’y suis pas mal impliqué et qu’il ne me prend pas beaucoup de temps.&lt;/p&gt;
&lt;p&gt;Enfin, j’arrêterai de suivre &lt;a href="http://www.tuxmachines.org/"&gt;Tuxmachines&lt;/a&gt; ainsi que les liens lorsque je lis un article ou, pire, les suggestions de Youtube quand je regarde une vidéo.&lt;/p&gt;
&lt;p&gt;J’évaluerai l’efficacité de ces mesures dans environ deux semaines. Si ça ne suffit pas, j’en prendrai d’autres.&lt;/p&gt;
&lt;p&gt;Je commencerai par supprimer de mes contacts Facebook tous les gens qui ne sont pas des amis proches, surtout ceux qui spamment avec des quiz débiles (SVP, stop).&lt;/p&gt;
&lt;p&gt;Je supprimerai des RSS de mon lecteur de news. Certes, le RSS, c’est du push, donc bon pour la productivité, mais trop de webcomic tue le webcomic, et pareil pour l’actualité technologique.&lt;/p&gt;
&lt;p&gt;J’arrêterai Shinobi, le forum archlinux.fr et je me désinscrirai de presque toutes les mailing-lists auxquelles je suis abonné.&lt;/p&gt;
&lt;p&gt;C’est un peu violent, certes, mais je pense que j’y gagnerai beaucoup. Et si jamais tout ça ne suffit pas, j’ai bien encore des idées comme utiliser un navigateur, un client mail et un lecteur de flux RSS en mode texte seulement, mais j’espère bien ne pas en arriver à de telles extrémités, pourtant courantes chez les gens adeptes du worse is better. Je n’irai quand même pas jusqu’à faire comme Knuth, qui &lt;a href="https://www-cs-faculty.stanford.edu/~knuth/email.html"&gt;n’utilise pas l’email&lt;/a&gt;…&lt;/p&gt;
&lt;p&gt;J’espère en tout cas que tout ça me permettra de gagner en productivité et en temps libre pour faire des choses utiles et/ou qui me plaisent plus.&lt;/p&gt;</description><author>Separate Concerns</author><pubDate>Mon, 16 Nov 2009 13:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.separateconcerns.com/2009-11-16-fr-gen-y.html</guid></item><item><title>FL Studio Interface Overview</title><link>https://thomashunter.name/posts/2009-11-16-fl-studio-interface-overview</link><description>This is an overview of the FL Studio application interface. This describes every window used in FL Studio.</description><author>Thomas Hunter II</author><pubDate>Mon, 16 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-16-fl-studio-interface-overview</guid></item><item><title>Pourquoi Android ne peut pas gagner la guerre des smartphones ?</title><link>https://blog.nobugware.com/post/2009/11/15/pourquoi-android-ne-peut-pas-gagner-la-guerre-des-smartphones/</link><description>Parce qu&amp;rsquo;Android est une plateforme avant d&amp;rsquo;etre un os pousse par un constructeur:
En chine il sort des modeles de smartphone, supportant Android, de tres bonne qualite, qui vont inonder les marches occidentaux dans les mois a venir.
Ces smartphones sont bien moins chers et le seul differenciateur grace a Android, ne sera plus que la finition, un detail dans un marche qui vise de plus en plus le grand public.</description><author>Fabrice Aneche</author><pubDate>Mon, 16 Nov 2009 01:30:55 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/11/15/pourquoi-android-ne-peut-pas-gagner-la-guerre-des-smartphones/</guid></item><item><title>November update</title><link>https://etodd.io/2009/11/15/november-update/</link><description>&lt;p&gt;This month's release will start to show more of the Real-Time Strategy side of Stainless. One new feature that unfortunately will exclude a section of the target audience is speech recognition. I'm using the MS Speech API, which obviously only works on Windows. Sorry Linux and Mac users. :(&lt;/p&gt;
&lt;p&gt;Still, it's going to be worth it. Right now the level design and AI are not quite advanced enough to benefit from speech commands, but the potential is there. Also, the game has a new system for money management, which means players will have to start rationing their money and deciding which units to buy. Basically, you'll buy the right to use a certain unit for one round in a game, and no matter how many times that unit dies that round, he'll respawn for free. But then the next round, you have to buy all new units.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Sun, 15 Nov 2009 19:55:33 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/11/15/november-update/</guid></item><item><title>Introduction to CSS: Selectors and Relationships Explained</title><link>https://thomashunter.name/posts/2009-11-15-introduction-to-css</link><description>This article will provide an introduction to CSS, which also requires an explanation of HTML (even if you know HTML you may want to read through it as it explains the relationship model). This article won't explain every single CSS attribute, but will explain everything you need to know to fully comprehend the language.</description><author>Thomas Hunter II</author><pubDate>Sun, 15 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-15-introduction-to-css</guid></item><item><title>Preloading CSS Hover Images</title><link>https://thomashunter.name/posts/2009-11-14-preloading-css-hover-images</link><author>Thomas Hunter II</author><pubDate>Sat, 14 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-14-preloading-css-hover-images</guid></item><item><title>Linux, great scenery and great Italian food... all in one day!</title><link>https://stop.zona-m.net/2009/11/linux-great-scenery-and-great-italian-food-all-in-one-day/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 13 Nov 2009 04:16:12 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/11/linux-great-scenery-and-great-italian-food-all-in-one-day/</guid></item><item><title>Simple AJAX</title><link>https://thomashunter.name/posts/2009-11-13-simple-ajax</link><description>AJAX is not a language. It is simply giving a name to something that has existed for years. Using the DOM of the web browser you are allowed to pass XML between the server and the client without having to reload the page. You don't necessarily have to pass XML; in this example we will be passing simple text.</description><author>Thomas Hunter II</author><pubDate>Fri, 13 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-13-simple-ajax</guid></item><item><title>Remembering the Berlin Wall</title><link>https://solomon.io/remembering-the-berlin-wall/</link><description>“People don’t really understand, but we came within hours, we came within hours of a full nuclear exchange with the Russians,” said Paul Harris, who was in the…</description><author>Sam Solomon</author><pubDate>Fri, 13 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/remembering-the-berlin-wall/</guid></item><item><title>Plan for Universal Basic Education discussed in Kathmandu</title><link>https://stop.zona-m.net/2009/11/plan-for-universal-basic-education-discussed-in-kathmandu/</link><description>&lt;p&gt;The &lt;a href="http://ole.org"&gt;Open Learning Exchange (OLE)&lt;/a&gt;, a network of grassroots organizations committed to providing Quality Universal Basic Education (QUBE) worldwide by 2015, held its first global assembly in Kathmandu in November 2009.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 12 Nov 2009 09:13:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/11/plan-for-universal-basic-education-discussed-in-kathmandu/</guid></item><item><title>Challenge In Building a CMS: Different Hosting Setups</title><link>https://www.jimwestergren.com/challenge-in-building-a-cms-different-hosting-setups/</link><description>This is the first article in a serie about the Clesto CMS - my first PHP project (I am still a kind of noob, feedback appreciated). There is a huge difference in building something for yourself and something that you release for a lot of people to download. The Clesto CMS has now been tested &amp;#91;...&amp;#93;</description><author>Jim Westergren</author><pubDate>Wed, 11 Nov 2009 12:58:05 GMT</pubDate><guid isPermaLink="true">https://www.jimwestergren.com/challenge-in-building-a-cms-different-hosting-setups/</guid></item><item><title>First impressions of the "Go" programming language</title><link>https://www.databasesandlife.com/go-programming-language/</link><description>&lt;p&gt;Before everyone gets too excited about golang, let&amp;rsquo;s not forget it lacks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.databasesandlife.com/exceptions-use-them/"&gt;Exceptions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Assertions&lt;/li&gt;
&lt;li&gt;Inheritance&lt;/li&gt;
&lt;li&gt;Generic types&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Generics are necessary to express concepts like &lt;code&gt;List&amp;lt;List&amp;lt;MyType&amp;gt;&amp;gt;&lt;/code&gt;. If you are in to static typing, then you need to be able to express those concepts. (And if you are not, then a statically typed language like Go is not for you anyway.)&lt;/p&gt;
&lt;p&gt;Obviously it has good features as well, such as its concurrency constructs and type inference, but without those features above, I can&amp;rsquo;t see how you can do any useful modeling in the language; or rather how can you can express a useful model in the language without losing a lot of information.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 11 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/go-programming-language/</guid></item><item><title>E-Learning for Kids... and everybody else</title><link>https://stop.zona-m.net/2009/11/e-learning-for-kids-and-everybody-else/</link><description>&lt;figure&gt;
  &lt;img alt="E-Learning for Kids... and everybody else /img/e-learningforkids_logo.png" src="https://stop.zona-m.net//img/e-learningforkids_logo.png" width="100%" /&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a href="http://www.e-learningforkids.org"&gt;E-Learning for Kids (efK)&lt;/a&gt; is a global nonprofit foundation whose mission is to be &amp;ldquo;the source for childhood learning on the Internet, available from anywhere and without charge&amp;rdquo;.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 10 Nov 2009 03:53:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/11/e-learning-for-kids-and-everybody-else/</guid></item><item><title>The Cruel Stranger</title><link>https://johnj.com/posts/the-cruel-stranger/</link><description>&lt;p&gt;





&lt;a href="https://johnj.com/planetary_convergence_iii.jpg"&gt;&lt;img class="resize" src="https://johnj.com/planetary_convergence_iii_hu_917664088324e131.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
Came across an interesting post today by author R. Scott Bakker,
writing on &lt;a href="http://www.tor.com/index.php?option%3Dcom_content&amp;amp;view%3Dblog&amp;amp;id%3D58246"&gt;Tor.com&lt;/a&gt; about his novel, “Neuropath.” He has &lt;a href="https://www.tor.com/2009/11/09/a-fact-more-indigestible-than-evolution/"&gt;some
interesting things&lt;/a&gt; to say about the sometimes alien and unpalatable
conclusions provided by science, an institution which he likens to a
“cruel stranger”:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So here’s the question: What other bitter pills does science hold in
store for us? The cruel stranger isn’t finished, you can bet the
family farm on that simply because nothing is final in science. So
what other stomach churning surprises does it hold in store for us?
And what happens if it begins telling us things that are out and out
indigestible?&lt;/p&gt;
&lt;p&gt;
What if science, the greatest institutional instrument of discovery in
history, starts telling us there’s no such thing as choices, or
stranger still, selves? What if the portrait of humanity that science
ultimately paints strikes us as immediately and obviously inhuman?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
I have been long intrigued by the ability of science to dish up
conclusions in which are difficult to accept. The obvious example is
evolution, but evolution is something I personally grew up with and
actually find comforting (our literal kinship with the rest of the
animal kingdom). However, some of science’s conclusions about the
physical world are hard to swallow. Einstein, for one, could never
accept the randomness inherent in the quantum theory (“God does not
play dice with the universe”). I, for one, am pained by notions such
as the &lt;a href="https://en.wikipedia.org/wiki/Interstellar_travel#Interstellar_distances"&gt;inaccessibility of distant stars&lt;/a&gt; or the notion of &lt;a href="http://en.wikipedia.org/wiki/Heat_death_of_the_universe"&gt;the end of
the universe&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
The latter idea is particularly difficult and intriguing for me. As a
&lt;del&gt;non-theist with strong&lt;/del&gt; Buddhist &lt;del&gt;leanings&lt;/del&gt;, what I &lt;em&gt;want&lt;/em&gt; to believe (so
long as I have beliefs!) is that the universe will continue to
manifest forever in a sort of infinite, awesome, endless dance of
change. However, while the cosmological picture has evolved
tremendously even in my lifetime, and will probably change more, the
dominant theory (as I understand it) currently has the universe
continually expanding at ever increasing speeds under the influence of
dark energy, as the stars gradually burn out, grow cold and
dark. Ultimately, very little can happen in such an asymptotic
universe… certainly not any form of life as we can currently imagine
it.&lt;/p&gt;
&lt;p&gt;
On the human scale, one struggles to accept one’s own mortality, but
it is a comfort to think of the world continuing on. Of course, the
eventual fate of the Earth is likely &lt;a href="http://en.wikipedia.org/wiki/Red_giant#The_Sun_as_a_red_giant"&gt;evaporation as the sun
expands&lt;/a&gt;. But the cosmos will always be there, with new beings, new
civilizations, or at least, the vast beauty of astronomical
phenomena. Or will it?&lt;/p&gt;
&lt;p&gt;
Forget mortality, forget the utter insignificance of humanity in the
crushing vastness of the cosmos. If the universe itself dies (becomes
static), then &lt;em&gt;change itself&lt;/em&gt; will come to an end. Where is the comfort
in that? Fortunately, cosmology as a science is truly in its infancy
(for example the vast majority of the mass-energy in the universe, in
the form of dark energy and dark matter, are still almost completely
unknown to us), so the picture will probably continue to evolve. But
what if science tells us that the universe really has a finite (if
very very very long) life span? The Cruel Stranger will have struck
yet again… and, certainly, not for the last time.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Tue, 10 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/the-cruel-stranger/</guid></item><item><title>Password Encryption, Hashing, Salting Explained</title><link>https://thomashunter.name/posts/2009-11-10-password-encryption-hashing-salting-explained</link><author>Thomas Hunter II</author><pubDate>Tue, 10 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-10-password-encryption-hashing-salting-explained</guid></item><item><title>Graphing with Inkscape: The Art of Data Presentation</title><link>https://murphyslab.ca/notes/graphing-with-inkscape/</link><description>This article explains how to create attractive, high-quality graphs in Inkscape using spreadsheet data from either Calc (OpenOffice.org) or Excel (Microsoft).
Introduction
Communicating information is an art. For scientists, even the most amazing discoveries can be rendered worthless if we fail to communicate them effectively. Despite being one of the most important aspects of science, it&amp;rsquo;s often the most neglected.
Perhaps the best means to communicate information are visual. Visual representations of data can be quickly and easily understood, whereas data tables can require detailed examination in order to extract trends and other general data.</description><author>Murphy's Lab Notes on Murphy's Lab</author><pubDate>Sun, 08 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://murphyslab.ca/notes/graphing-with-inkscape/</guid></item><item><title>Neighborhood Photos</title><link>https://liza.io/neighborhood-photos/</link><description>&lt;p&gt;I took some photos around the neighborhood today:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Stone Wall" src="http://farm3.static.flickr.com/2716/4082673668_2396fec78f_b.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://farm3.static.flickr.com/2780/4082643010_cf33a6a884_b.jpg" /&gt;
&lt;img alt="" src="http://farm3.static.flickr.com/2619/4082386366_3fc550b296_b.jpg" /&gt;
&lt;img alt="" src="http://farm3.static.flickr.com/2520/4082380918_d2996c8f57_b.jpg" /&gt;
&lt;img alt="" src="http://farm4.static.flickr.com/3490/4081616039_4711704202_b.jpg" /&gt;
&lt;img alt="" src="http://farm3.static.flickr.com/2774/4081603895_122b6e9dae_b.jpg" /&gt;&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sat, 07 Nov 2009 11:51:20 GMT</pubDate><guid isPermaLink="true">https://liza.io/neighborhood-photos/</guid></item><item><title>Create Windows Vista like buttons using Photoshop</title><link>https://thomashunter.name/posts/2009-11-07-create-windows-vista-like-buttons-using-photoshop</link><description>This is a step by step guide on how to make attractive buttons in Photoshop which look just like the Windows Vista buttons.</description><author>Thomas Hunter II</author><pubDate>Sat, 07 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-07-create-windows-vista-like-buttons-using-photoshop</guid></item><item><title>Web Image Formats Size and Quality Comparison</title><link>https://thomashunter.name/posts/2009-11-06-web-image-formats-size-and-quality-comparison</link><description>This is a demonstration of the different image formats used for the web, with an explanation of which situation to use one or the other.</description><author>Thomas Hunter II</author><pubDate>Fri, 06 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-06-web-image-formats-size-and-quality-comparison</guid></item><item><title>IPVS + shorewall</title><link>https://purpleidea.com/blog/2009/11/05/ipvs-shorewall/</link><description>&lt;p&gt;&lt;a href="http://www.linuxvirtualserver.org/"&gt;lvs&lt;/a&gt; load balancing always felt like an elusive task. here i will document how to get it working with the excellent &lt;a href="http://www.shorewall.net/"&gt;shorewall&lt;/a&gt; firewall, as an extension to their &lt;a href="http://www.shorewall.net/two-interface.htm"&gt;two interface&lt;/a&gt; common use case. this was all necessary for a group of grad students that needed to test out and develop some distributed algorithms. it turns out that once you get going, all this is quite easy and fun!&lt;/p&gt;
&lt;p&gt;the various components and files used for this setup include:&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Thu, 05 Nov 2009 13:29:16 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/11/05/ipvs-shorewall/</guid></item><item><title>Creating Seamless Textures using Photoshop</title><link>https://thomashunter.name/posts/2009-11-05-creating-seamless-textures-using-photoshop</link><author>Thomas Hunter II</author><pubDate>Thu, 05 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-05-creating-seamless-textures-using-photoshop</guid></item><item><title>Detect chained and migrated rows in Oracle – Part 1</title><link>https://tanelpoder.com/2009/11/04/detect-chained-and-migrated-rows-in-oracle/</link><description>&lt;p&gt;I received a question about migrated rows recently.&lt;/p&gt;
&lt;p&gt;It was about how to detect migrated rows in a 200TB data warehouse, with huge tables – as the ANALYZE TABLE xyz LIST CHAINED ROWS INTO command can not be automatically parallelized at table level (as DBMS_STATS can be, but oh, DBMS_STATS doesn’t gather the migrated/chained row info). Therefore the analyze command would pretty much run forever before returning (and committing) the chained row info in the output table. Also as there are regular maintenance jobs running on these tables (I suspect partition maintentance for example), then it wouldn’t be nice to keep running ANALYZE on the whole table constantly.&lt;/p&gt;
&lt;p&gt;So, is there any faster or better way for finding the amount of migrated rows?&lt;/p&gt;
&lt;p&gt;Ihave two answers to this.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Answer 1:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As we are dealing with a huge 200+ TB data warehouse its tables/indexes are most likely partitioned. Thus you could use the ANALYZE TABLE xyz &lt;strong&gt;PARTITION (abc)&lt;/strong&gt; LIST CHAINED ROWS command to analyze individual partitions, even in parallel (sqlplus sessions) if you like. This would allow you to focus only on the partitions of interest (the latest ones, with the heaviest activity perhaps).&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; create table CHAINED_ROWS (
2    owner_name         varchar2(30),
3    table_name         varchar2(30),
4    cluster_name       varchar2(30),
5    &lt;strong&gt;partition_name&lt;/strong&gt;     varchar2(30),
6    &lt;strong&gt;subpartition_name&lt;/strong&gt;  varchar2(30),
7    &lt;strong&gt;head_rowid&lt;/strong&gt;         rowid,     &lt;em&gt;-- actual chained row's head piece address in the segment&lt;/em&gt;
8    analyze_timestamp  date
9  );&lt;/pre&gt;
&lt;pre&gt;Table created.&lt;/pre&gt;
&lt;pre&gt;SQL&amp;gt;
SQL&amp;gt; analyze table tmp &lt;strong&gt;partition (sys_p501) &lt;/strong&gt;list chained rows; &lt;em&gt;-- the default table name used for output is "CHAINED_ROWS"&lt;/em&gt;&lt;/pre&gt;
&lt;pre&gt;Table analyzed.&lt;/pre&gt;
&lt;pre&gt;SQL&amp;gt; analyze table tmp &lt;strong&gt;partition (sys_p502)&lt;/strong&gt; list chained rows;&lt;/pre&gt;
&lt;pre&gt;Table analyzed.&lt;/pre&gt;
&lt;pre&gt;SQL&amp;gt; select partition_name, count(*) from &lt;strong&gt;chained_rows&lt;/strong&gt; group by partition_name;&lt;/pre&gt;
&lt;pre&gt;PARTITION_NAME                   COUNT(*)
------------------------------ ----------
SYS_P502                              252
SYS_P501                             5602

SQL&amp;gt;&lt;/pre&gt;
&lt;p&gt;So, from above you see its possible to find out partition (or even sub-partition level row chaining).&lt;/p&gt;
&lt;p&gt;However this above command lists you both CHAINED rows and MIGRATED rows (even though Oracle calls them all chained rows internally, as the chaining mechanism is the same for both cases).&lt;/p&gt;
&lt;p&gt;Chained row is a row which is too large to fit into a block, so will always have to be split between multiple different blocks – with an exception of intra-block chaining which is used for rows with more than 255 columns. Migrated row on the other hand is a row which has been updated larger than it initially was – and if as a result it doesn’t fit into its original block, the row itself is moved to a new block, but the header (kind of a stub pointer) of the row remains in original location. This is needed so that any indexes on the table would still be able to find that row using original ROWIDs stored in them). If Oracle didn’t leave the row head piece in place then it would always go and update all indexes which have the ROWID of the migrating row in them.&lt;/p&gt;
&lt;p&gt;Why should we care whether a row is a real chained row or just a migrated row?&lt;/p&gt;
&lt;p&gt;It’s because if the row is chained, then any reorgs would not help you – if a row is too big to fit into a block, its too big to fit into a block no matter how many times you move around the table. (Note that if you have large tables full of rows longer than 8KB there’s likely something wrong with your design).&lt;/p&gt;
&lt;p&gt;But migrated rows on the other hand are “chained” into another block due some update which made them not fit into existing block anymore. This happens when PCTFREE is set too low compared to real row growth factor and sometimes you may want to fix it by reorganizing the table/partition with ALTER TABLE/PARTITION MOVE or by backing the rows up, deleting them and reinserting them back to the table (that one makes sense when only a small amount of rows in a table are migrated).&lt;/p&gt;
&lt;p&gt;If you are completely sure that you don’t have any rows longer than the free space in an empty block (thus all individual rows would fit into a block and would need to be split among multiple blocks) then you can conclude that all the rows reported were migrated due their growth.&lt;/p&gt;
&lt;p&gt;Another option would be to query out all or a sample of these chained/migrated rows and actually measure how long they are if all columns are put together. This could be done using vsize() function (or also dump() and lengthb() in some cases). Of course the column and row header overhead would need to be accounted in as well.&lt;/p&gt;
&lt;p&gt;So, this already gets pretty complex and there are more tiny details which we should take into account… thus I will introduce another way to look into the row migration/chaining thing:&lt;/p&gt;
&lt;p&gt;**Answer 2: (Alternatively called “should we care?”)&lt;/p&gt;
&lt;p&gt;**&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 05 Nov 2009 00:34:47 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/11/04/detect-chained-and-migrated-rows-in-oracle/</guid></item><item><title>Introduction to Photoshop Blending Options</title><link>https://thomashunter.name/posts/2009-11-04-introduction-to-photoshop-blending-options</link><description>Here we will describe several of the popular blending options used in photoshop, with screenshots and explanations of each setting.</description><author>Thomas Hunter II</author><pubDate>Wed, 04 Nov 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-11-04-introduction-to-photoshop-blending-options</guid></item><item><title>scary man pages</title><link>https://purpleidea.com/blog/2009/11/02/scary-man-pages/</link><description>&lt;p&gt;while doing a little reading and research,  i ended up reading a bit of the hdparm man page. never in my life have i read such a scary man page. i guess it &lt;em&gt;is&lt;/em&gt; appropriate for halloween, but it came 2 days late in my case. as a result of my being so impressed with the sheer amount of warnings in the manual, i have decided to compile them here.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Tue, 03 Nov 2009 01:21:57 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/11/02/scary-man-pages/</guid></item><item><title>INGOTs: a software certification that rewards children helping other people</title><link>https://stop.zona-m.net/2009/10/ingots-a-software-certification-that-rewards-children-helping-other-people/</link><description>&lt;p&gt;The &lt;a href="http://www.theingots.org/"&gt;International Grades in Office Technology&lt;/a&gt; (INGOTs) is a system for certifying IT capability. This article explains what is unique in the INGOTs, their current status and how to join the program, through an interview with INGOTs founder Ian Lynch.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 31 Oct 2009 10:06:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/10/ingots-a-software-certification-that-rewards-children-helping-other-people/</guid></item><item><title>Computers in the classroom: how JumPC helped teachers and pupils without turning the system upside down</title><link>https://stop.zona-m.net/2009/10/computers-in-the-classroom-how-jumpc-helped-teachers-and-pupils-without-turning-the-system-upside-down/</link><description>&lt;figure&gt;
  &lt;img alt="Computers in the classroom: how JumPC helped teachers and pupils without turning the system upside down /img/jumpc.png" src="https://stop.zona-m.net//img/jumpc.png" width="100%" /&gt;
&lt;/figure&gt;
&lt;p&gt;Last year every child of the fifth class, A section of &lt;a href="http://www.ddrivoli1.it/"&gt;Don Milani School in Rivoli, Piedmont&lt;/a&gt; got an &lt;em&gt;individual&lt;/em&gt; laptop computer, equipped with &lt;a href="http://share.dschola.it/olpc/Schede%20JumPC/Schede%20Attivit%C3%A0%20per%20Notebook%20degli%20studenti%20delle%20scuole%20Primarie.htm"&gt;educational software for primary school&lt;/a&gt; and a custom, simplified user interface (fifth class in Italy hosts 10 years old children). The computers, called &lt;a href="http://www.ddrivoli1.it/progetto%20jumpc/un_computer_per_ogni_studente.htm"&gt;JumPC&lt;/a&gt;, were assigned to be &lt;em&gt;used for normal schoolwork and homework, in class and at home, throughout the whole year&lt;/em&gt;. The same experiment was carried on for shorter periods also in the third classes (section A and B) of Borgofranco di Ivrea and in class forth, section C in Novi Ligure.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 31 Oct 2009 03:12:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/10/computers-in-the-classroom-how-jumpc-helped-teachers-and-pupils-without-turning-the-system-upside-down/</guid></item><item><title>Awards Given at Photo XI Exhibition</title><link>https://solomon.io/awards-given-at-photo-xi-exhibition/</link><description>Local artists and photographers entered more than 100 photographs into the Auburn Arts Association’s Photo XI photo exhibition at the Jan Dempsey Community Arts…</description><author>Sam Solomon</author><pubDate>Fri, 30 Oct 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/awards-given-at-photo-xi-exhibition/</guid></item><item><title>Robot Simulates Sight for Blind</title><link>https://solomon.io/robot-simulates-sight-for-blind/</link><description>About 314 million people worldwide are visually impaired, and almost 45 million of those are blind, according to the World Health Organization Web site.</description><author>Sam Solomon</author><pubDate>Fri, 30 Oct 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/robot-simulates-sight-for-blind/</guid></item><item><title>Laser Eye Surgery</title><link>https://liza.io/laser-eye-surgery/</link><description>&lt;p&gt;I had my laser eye surgery today. Instead of writing about how awesome (or not awesome) it was, I&amp;rsquo;ll first tell you how exactly it happened.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Thu, 29 Oct 2009 13:23:51 GMT</pubDate><guid isPermaLink="true">https://liza.io/laser-eye-surgery/</guid></item><item><title>Stainless v0.3 beta released!</title><link>https://etodd.io/2009/10/28/stainless-v0-3-beta-released/</link><description>&lt;p&gt;Along with an &lt;a href="http://www.youtube.com/watch?v=rZdzxD5nFBE"&gt;HD trailer&lt;/a&gt;. Free download &lt;a href="https://sourceforge.net/projects/stainless/files/0.3/stainless-v0.3-win-x86-x64.zip/download"&gt;here&lt;/a&gt;!&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Wed, 28 Oct 2009 22:06:26 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/10/28/stainless-v0-3-beta-released/</guid></item><item><title>Donat Studios Officially Launches</title><link>https://donatstudios.com/Donat_Studios_Launches</link><description>&lt;p&gt;After much ado, Donat Studios is finally live!&lt;/p&gt;
&lt;p&gt;There are a few things left to complete. Eventually setting up the documentation and public git repository for CorpusPHP will certainly take up a fair amount of time. I'm still not quite sure what to put in my portfolio, I was thinking of for the time being just throwing a bunch of my sketches in there.&lt;/p&gt;
&lt;p&gt;My reasoning and goals behind this site are slightly different than my other sites. More than anything I wanted a place where I could rant about everything web related. I have strong opinions on many topics, and where Oasisband.net is good for movies and politics, and PHPStandards is pretty much just raw anger directed at Zend, and my live journal is for my personal life. Donat Studios on the other hand will allow me to express my thoughts on web development, databases, html, php, ajax, design, basically everything I do at work.&lt;/p&gt;
&lt;p&gt;Where does the name &amp;quot;Donat Studios&amp;quot; come from? I was getting some photos printed by a great place in St. Paul, &amp;quot;White House Custom Color&amp;quot; and they needed to know the name of my studio. I didn't have a studio, so I quickly made up &amp;quot;Donat Studios&amp;quot;. Later, I realized I liked the name, and it stuck.&lt;/p&gt;
&lt;p&gt;Here's wishing my newest domain luck!&lt;/p&gt;</description><author>Donat Studios</author><pubDate>Tue, 27 Oct 2009 09:45:28 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/Donat_Studios_Launches</guid></item><item><title>What’s a good way to learn some Oracle internals every day?</title><link>https://tanelpoder.com/2009/10/26/whats-a-good-way-to-learn-some-oracle-internals-every-day/</link><description>&lt;p&gt;Sometimes when an attendee describes me some totally weird problem during a seminar, I am immediately able to answer something like “Hey this looks like a bug related to this Oracle configuration and can be influenced by xyz”.&lt;/p&gt;
&lt;p&gt;And then people ask me “How the hell do you know all this stuff?”&lt;/p&gt;
&lt;p&gt;Well, I haven’t been bitten by all of these bugs myself, but I have been doing something for many years, almost every day… reading my email!&lt;/p&gt;
&lt;p&gt;Oh, and additionally I have configured Metalink to send me daily updates about new/updated notes, forum articles and… &lt;strong&gt;&lt;em&gt;bug descriptions&lt;/em&gt;&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;The last part is very important. Bug descriptions tell you something about new bugs found (and old bugs rediscovered) and sometimes their details tell you an interesting piece or two about Oracle internals related to them.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 26 Oct 2009 18:11:10 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/10/26/whats-a-good-way-to-learn-some-oracle-internals-every-day/</guid></item><item><title>The missing accessory for your cell phone is coming</title><link>https://stop.zona-m.net/2009/10/the-missing-accessory-for-your-cell-phone-is-coming/</link><description>&lt;p&gt;If you are one of the several billions people around the world who want or must use a cell phone, here are some good news: last week, instead of inventing yet another model of cell phone, industry representatives agreed to on something that will both reduce pollution &lt;strong&gt;and&lt;/strong&gt; save you money!&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Mon, 26 Oct 2009 04:34:35 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/10/the-missing-accessory-for-your-cell-phone-is-coming/</guid></item><item><title>Prepping for first release</title><link>https://etodd.io/2009/10/25/prepping-for-first-release/</link><description>&lt;p&gt;Less than one week away from release! Looking at the to-do list from last week, I actually haven't worked a lot on the items listed. I've been ironing out a lot of bugs and adding polish. The multiplayer scoring is now working, and you can see everyone's scores on the top of the screen, conveniently color-coded. I killed the ugly black boxes around the scores and added drop shadows instead, and I moved your current balance to the right side of the screen, to avoid confusion. Take a gander:&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Sun, 25 Oct 2009 18:07:50 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/10/25/prepping-for-first-release/</guid></item><item><title>SystemTap is production supported in Redhat EL5.4</title><link>https://tanelpoder.com/2009/10/25/systemtap-is-production-supported-in-redhat-el5-4/</link><description>&lt;p&gt;If you don’t know what SystemTap is – it’s the Linux world’s attempt to build Solaris DTrace style &lt;strong&gt;&lt;em&gt;safe&lt;/em&gt; &lt;em&gt;dynamic&lt;/em&gt;&lt;/strong&gt; instrumentation into Linux kernel.&lt;/p&gt;
&lt;p&gt;I’m not going into religious discussions which one is better here, I have used both SystemTap and DTrace successfully for diagnosing low level issues inside OS kernel, so both are good enough for me :)&lt;/p&gt;
&lt;p&gt;The problem with SystemTap though has been that it’s not production quality, it’s rather been a technology preview.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 25 Oct 2009 17:53:45 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/10/25/systemtap-is-production-supported-in-redhat-el5-4/</guid></item><item><title>Linux Day: why software isn't just a matter of software</title><link>https://stop.zona-m.net/2009/10/linux-day-why-software-isnt-just-a-matter-of-software/</link><description>&lt;p&gt;As you already know if you read the advice of a mom about &lt;a href="https://stop.zona-m.net/2009/10/mother-explains-why-everybody-should-attend-the-2009-linux-day/"&gt;why all parents should attend a Linux Day at least once in life&lt;/a&gt; the Italian Linux Day is a nationwide, yearly event devoted to promote the advantages of Linux and Free Software. This year I was present at the Rome edition. I tried to explain in a few minutes something which will be one of Stop! main themes and is also the central subject of both the &lt;a href="http://digifreedom.net"&gt;Family Guide to Digital Freedom&lt;/a&gt; and of the &lt;a href="https://stop.zona-m.net/2009/12/digital-culture-online-course-for-parents-teachers-and-everybody-else/"&gt;online course of Digital Culture for parents and teachers&lt;/a&gt;: how and why civil rights and quality of life heavily depend on how software is used &lt;strong&gt;around&lt;/strong&gt; us. The extra-short answer is that:&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 25 Oct 2009 05:16:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/10/linux-day-why-software-isnt-just-a-matter-of-software/</guid></item><item><title>Two things to remember on Oct 24: Time and Climate</title><link>https://stop.zona-m.net/2009/10/two-things-to-remember-on-oct-24-time-and-climate/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 24 Oct 2009 03:50:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/10/two-things-to-remember-on-oct-24-time-and-climate/</guid></item><item><title>multi monitors and how it should all work (long babble)</title><link>https://purpleidea.com/blog/2009/10/23/multi-monitors-and-how-it-should-all-work-long-babble/</link><description>&lt;p&gt;at work i use two screens for my day to day workflow. i find it&amp;rsquo;s much more efficient for doing work, like coding. i&amp;rsquo;ll often have at least one terminal open, a full screen text editor, and usually a number of references, such as the &lt;a href="http://dbus.freedesktop.org/doc/dbus-specification.html"&gt;dbus specification&lt;/a&gt; open in a &lt;a href="http://projects.gnome.org/epiphany/"&gt;web browser&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;i recently just realized that one of the reasons multiple monitors are so useful to me, isn&amp;rsquo;t because of the increased screen real estate (although that certaintly is an important factor) but because of how the window manager deals with the windows. for example, when i click maximize, the chosen window expands to fill that monitors capacity, and not the entire set of monitors. it would be nice for this type of behaviour to be configurable somewhere for people with ultra large screens, who want to manage their windows better. the closest i&amp;rsquo;ve found is: &lt;a href="https://launchpad.net/winwrangler"&gt;winwrangler&lt;/a&gt; which i&amp;rsquo;ve started using at home where i only have one screen. it works sort of along those lines, however i still want more. multiple &amp;ldquo;workspaces&amp;rdquo; are essential. no matter how many screens i have, i&amp;rsquo;ll always need a few workspaces to be able to flip between email and coding&amp;ndash; there is no sense in mixing it all together.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Sat, 24 Oct 2009 00:09:13 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/10/23/multi-monitors-and-how-it-should-all-work-long-babble/</guid></item><item><title>tech support for a keyboard</title><link>https://purpleidea.com/blog/2009/10/23/tech-support-for-a-keyboard/</link><description>&lt;p&gt;so my &lt;a href="http://www.cs.mcgill.ca/"&gt;boss&lt;/a&gt; was recently kind enough to purchase a new keyboard and mouse combo to attempt to relieve the elbow-and-down pain that i endure due to constant programming and mouse moving. thanks.&lt;/p&gt;
&lt;p&gt;i received my &amp;ldquo;&lt;a href="http://www.logitech.com/index.cfm/keyboards/keyboard_mice_combos/devices/4677&amp;amp;cl=US,EN"&gt;logitech cordless desktop wave pro&lt;/a&gt;&amp;rdquo; today, and 15 seconds later i&amp;rsquo;m up and running in linux. the keyboard and mouse seem to be really nice, however i won&amp;rsquo;t dwell on their merits here, i&amp;rsquo;m sure you can read about that &lt;a href="http://www.aselabs.com/articles.php?id=279"&gt;elsewhere&lt;/a&gt; on the internets. what i &lt;em&gt;would&lt;/em&gt; like to point out is that for some stupid reason, the keyboard only sports a battery indicator light. that&amp;rsquo;s right, NO NUM LOCK, CAPS LOCKS OR SCROLL LOCK LIGHTS. (woops, sorry didn&amp;rsquo;t realize caps was on.)&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Fri, 23 Oct 2009 16:14:43 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/10/23/tech-support-for-a-keyboard/</guid></item><item><title>Walkability: check it before choosing your next home!</title><link>https://stop.zona-m.net/2009/10/walkability-check-it-before-choosing-your-next-home/</link><description>&lt;p&gt;Walkability is a characteristic of homes and apartments that all their owners, or everybody considering (even in these times) buying a new house should know and think about.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 23 Oct 2009 06:04:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/10/walkability-check-it-before-choosing-your-next-home/</guid></item><item><title>Asphalt May be Source of 'Green' Technology</title><link>https://solomon.io/asphalt-may-be-source-of-green-technology/</link><description>Researchers are looking into a major source of green energy found not in the air, but within roadways.</description><author>Sam Solomon</author><pubDate>Fri, 23 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/asphalt-may-be-source-of-green-technology/</guid></item><item><title>vanilla: my favourite flavour of gnome</title><link>https://purpleidea.com/blog/2009/10/22/vanilla-my-favourite-flavour-of-gnome/</link><description>&lt;p&gt;after a recent upgrade to ubuntu 9.04, it seems that i&amp;rsquo;ve been pushed into using some &amp;ldquo;unfeatures&amp;rdquo; that i didn&amp;rsquo;t ask for. well apparently they won&amp;rsquo;t be unfeatures forever, but for me, &lt;a href="https://wiki.ubuntu.com/NotifyOSD"&gt;notify-osd&lt;/a&gt; and &lt;a href="https://launchpad.net/indicator-applet"&gt;indicator-applet&lt;/a&gt; aren&amp;rsquo;t quite ready for my consumption. i realize that ubuntu is trying to improve the desktop experience, but i&amp;rsquo;m going to need to wait for some more polish first.&lt;/p&gt;
&lt;p&gt;so how do i get rid of these horrible things ? i really liked the look of the notification-daemon, and i wanted it back. turns out i can do:&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Thu, 22 Oct 2009 20:14:47 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/10/22/vanilla-my-favourite-flavour-of-gnome/</guid></item><item><title>CSS Image Button Rollovers</title><link>https://thomashunter.name/posts/2009-10-21-image-css</link><description>CSS Rules for IMG tags, along with information about using images as CSS background-image.</description><author>Thomas Hunter II</author><pubDate>Wed, 21 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-10-21-image-css</guid></item><item><title>How to install FreeBSD on a Thinkpad R50e</title><link>https://bastian.rieck.me/blog/2009/r50e/</link><description>&lt;p&gt;This HOWTO describes the installation of FreeBSD 6.2 on a Thinkpad R50e.
For your convenience, I also included parts of the configuration files
you might consider useful. All in all, the R50e is a perfect notebook
for FreeBSD. Every important device is usable, allowing you to be
productive without major annoyances.&lt;/p&gt;
&lt;h1 id="installation"&gt;Installation&lt;/h1&gt;
&lt;p&gt;There is a small partition containing something like a rescue system
from IBM. To make things simpler, you might decide to keep it. But
removing it and using the whole hard disk for your installation should
not hurt, either (this is my personal experience).&lt;/p&gt;
&lt;p&gt;The actual installation process is really straightforward. Install
FreeBSD any way you want.&lt;/p&gt;
&lt;h1 id="wlan"&gt;WLAN&lt;/h1&gt;
&lt;p&gt;The WLAN chipset driver is now included in the kernel. Simply add the
following line to &lt;code&gt;/boot/loader.conf&lt;/code&gt; in order to enable it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if_iwi_load=&amp;quot;YES&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Caveat&lt;/strong&gt;: The driver version I used had some problems when connecting
to hidden access points. I recommend turning the SSID broadcast on.
Since you, being security-minded, are using WPA2 anyway, this won&amp;rsquo;t
decrease your security.&lt;/p&gt;
&lt;h1 id="acpi-and-powerd-configuration"&gt;ACPI and powerd configuration&lt;/h1&gt;
&lt;p&gt;Assuming you want to use ACPI/powerd, there are several things that have
to be configured first. Automatic CPU frequency adjustment has to be
set up via &lt;code&gt;/etc/rc.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;powerd_enable=&amp;quot;YES&amp;quot;
powerd_flags=&amp;quot;-b adaptive -a max&amp;quot;
performance_cx_lowest=&amp;quot;C2&amp;quot;
performance_cpu_freq=&amp;quot;1399&amp;quot;
economy_cx_lowest=&amp;quot;C3&amp;quot;
economy_cpu_freq=&amp;quot;NONE&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These settings seem reasonable to me. However, you might want to change
them if you have other objectives. I was told that SpeedStep should be
disabled on a R50e, so add &lt;code&gt;hint.ichss.0.disabled=&amp;ldquo;1&amp;rdquo;&lt;/code&gt; to
&lt;code&gt;/boot/loader.conf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The ACPI configuration is quite fast, too. These lines belong into
&lt;code&gt;/etc/sysctl.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kern.timecounter.hardware=i8254
debug.acpi.do_powerstate=1

hw.acpi.lid_switch_state=S3
hw.acpi.standby_state=S1
hw.acpi.suspend_state=S3
hw.acpi.sleep_button_state=S3
hw.acpi.sleep_delay=3
hw.acpi.reset_video=0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This allows your Thinkpad to suspend when you close the lid. To enable the
Thinkpad keys that control suspension, add
&lt;code&gt;acpi_ibm_load=&amp;ldquo;YES&amp;rdquo;&lt;/code&gt; to your
&lt;code&gt;/boot/loader.conf&lt;/code&gt;.  You might also want to take a look at
&lt;code&gt;deskutils/tpb&lt;/code&gt;. This program is a port that allows you to redefine
the (mostly unused) Thinkpad keys.&lt;/p&gt;
&lt;h1 id="sound"&gt;Sound&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;snd_ich_load=&amp;ldquo;YES&amp;rdquo;&lt;/code&gt; in &lt;code&gt;/boot/loader.conf&lt;/code&gt;
enables the sound card.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Tue, 20 Oct 2009 22:03:52 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2009/r50e/</guid></item><item><title>Hyppolyta - The Amazon Queen</title><link>https://bastian.rieck.me/blog/2007/hyppolyta/</link><description>&lt;p&gt;Do you strive to catalogue and sort your belongings? Do you own many
books?&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Hyppolyta&lt;/code&gt; is a rather elegant way to sort your books: Using the
Amazon Webservices (AWS), you only need a barcode scanner,
&lt;a href="http://www.perl.org"&gt;Perl&lt;/a&gt;, some CPAN modules and &lt;code&gt;wget&lt;/code&gt; to gather
information about all sorts of products: books, DVDs, CDs etc.&lt;/p&gt;
&lt;p&gt;Sounds interesting? Read the &lt;a href="https://bastian.rieck.me/blog/2007/hyppolyta_or_how_to_scan_your_book_collection/"&gt;article in my blog&lt;/a&gt; for more details or see below for the very detailed documentation.&lt;/p&gt;
&lt;p&gt;You can find the program on &lt;a href="https://github.com/Pseudomanifold/Hyppolyta"&gt;my GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id="the-problem"&gt;The Problem&lt;/h1&gt;
&lt;p&gt;I am an avid reader. In fact, most of the space in my shelves is
used by books. Books that cover many different topics: Maths,
Physics, Programming, Fantasy, Sci-Fi, Dramas/Plays, Poems,
Classics&amp;hellip;&lt;/p&gt;
&lt;p&gt;Recently, I became aware of the fact that this collection had to be sorted and
catalogued, somehow. This would enable me to sort out the duplicate books (A
general problem when one has &amp;ldquo;some&amp;rdquo; books: One is given books by other people
as a present, but most of them are already in the personal collection.) and
prevent getting duplicates. Moreover, I said to myself:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If I catalogue &lt;em&gt;all&lt;/em&gt; books that are stored somewhere in our house,
I could easily spot the literary gems that are present in some dark
box, unbeknownst to me and the others.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To solve this problem, several subproblems had to be taken care of:
&lt;strong&gt;What&lt;/strong&gt; book data do I need? &lt;strong&gt;How&lt;/strong&gt; do I get this data? &lt;strong&gt;Where&lt;/strong&gt;
do I store the data? Thus, the problem was well-defined and I could
begin looking for solutions.&lt;/p&gt;
&lt;h1 id="a-solution"&gt;A Solution&lt;/h1&gt;
&lt;p&gt;In Germany, most of the books that are published are assigned a unique number,
the &lt;acronym title="International Standard Book Number"&gt;ISBN&lt;/acronym&gt;. On
newer books, this number is printed on the back of the book as a barcode,
allowing booksellers to get information (price etc.) about the book as quickly
as possible.&lt;/p&gt;
&lt;p&gt;For many years, the ISBN was a 10-digit number: 9 digits for the code itself
and one for the checksum. However, since the beginning of 2007 (European) books
are required to carry a 13-digit ISBN on their backs: The &lt;acronym title="European Article Number"&gt;EAN&lt;/acronym&gt;. EAN is a much more general code
that is, as the name implies, used for other product categories, such as DVDs,
CDs or food.&lt;/p&gt;
&lt;p&gt;Luckily (for me), the 13-digit ISBNs are a subset of the 13-digit EANs
(Actually, the EAN comes in two flavours: 13 digit or 8 digits. The EAN-8 is
commonly used for &amp;ldquo;smaller&amp;rdquo; items and since we are talking about catalogueing
books and not about running a grocery store, I think we can gracefully ignore
it.), so there would be no conversion necessary between these two codes.&lt;/p&gt;
&lt;h2 id="getting-data"&gt;Getting data&lt;/h2&gt;
&lt;p&gt;Quite naturally, the thought of how to exploit this fact came almost
immediately to me. Given a list of EANs (I will now use this word regardless of
whether I am writing about ISBNs or EANs.), I could get all the data I need if
I had a source that allowed me to search for EANs and return information about
the item.&lt;/p&gt;
&lt;p&gt;Since I have not much money to spend on this project, I decided to
query the most comprehensive (and free!) database of books I knew:
The online bookstore &amp;ldquo;amazon.com&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;This task was easier than I expected it to be: amazon.com provides
developers with (free) access to the &amp;ldquo;Amazon E-Commerce Service&amp;rdquo;
(ECS). Being an amazon.com customer anyway, after reading the
documentation, I decided to sign up for it and give it a try.&lt;/p&gt;
&lt;h2 id="getting-eans"&gt;Getting EANs&lt;/h2&gt;
&lt;p&gt;Before doing anything else, I first had to find a way of how to
read EANs. I was not willing to enter &lt;em&gt;all&lt;/em&gt; EANs manually. But what
was good for booksellers should work for me as well. So I bought an
&lt;code&gt;OVOX CCD-800 USB Barcode Scanner&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This device is truly perfectly suited for my needs: It reads EAN and UPC
barcodes in all flavours (and a whole lot more barcodes which I will probably
never encounter in my life) fast and reliably (if the barcode can be read, it
will be read properly without any errors), it can be configured nicely (by
scanning barcodes, of course, which is a mild case of bootstrapping if you ask
me) and it identifies itself as a normal USB keyboard, hence allowing me to use
it with FreeBSD (or Windows).&lt;/p&gt;
&lt;p&gt;I configured the scanner to read the barcode, print it with
alphanumeric characters and add a newline afterwards. This meant I
could use &lt;code&gt;vim&lt;/code&gt;, the best text editor, and scan every book I
encountered. The EANs would be added to a list, which I would
process later on.&lt;/p&gt;
&lt;h1 id="hyppolyta-the-amazon-queen"&gt;Hyppolyta, the Amazon queen&lt;/h1&gt;
&lt;p&gt;After I knew what had to be done, I could begin implementing a
program that would to the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Accept a list of EANs as an input file.&lt;/li&gt;
&lt;li&gt;Request further information (Title, Author(s)&amp;hellip;) via
Amazon&amp;rsquo;s ECS.&lt;/li&gt;
&lt;li&gt;Save information about the items in a sensible and practical
format.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The name &amp;ldquo;Hyppolyta&amp;rdquo; seemed very apt for this program.&lt;/p&gt;
&lt;p&gt;Besides wondering how anyone could name a program &amp;ldquo;Hyppolyta&amp;rdquo;, you may have
noticed that I wrote &amp;lsquo;items&amp;rsquo; instead of &amp;lsquo;books&amp;rsquo;. This was a perfectly sane
decision: Since amazon.com offers a lot more products besides books, I wanted
my program to be as general as possible in order to get information about all
sorts of products that can be identified by EANs. This resulted in me
catalogueing my audio CDs and DVDs, too (but this is an entirely different
story. Let&amp;rsquo;s focus here.).&lt;/p&gt;
&lt;p&gt;Hyppolyta is written in Perl. With lots of modules and its general flexibility,
this language seemed most suited for my task. Not to mention the fact that it
is one of the languages that is officially supported by the ECS API.&lt;/p&gt;
&lt;p&gt;I am by no means a Perl wizard. In fact, it was my first project that was done
in Perl. I am sure that the code could be implemented much more smoothly,
therefore I encourage you to rewrite it if you consider it too offensive.&lt;/p&gt;
&lt;p&gt;The current version of Hyppolyta is able to generate CSV output.
This simple format should allow you to use your data in almost any
program. Just make sure that the program you are going to use for
imports is able to understand CSV data that contains the newline
character in fields! Every field is escaped by default via
&lt;code&gt;&amp;quot;&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;p&gt;Untar everything. Install &lt;code&gt;wget&lt;/code&gt; and place it in the path of your
Perl interpreter. Furthermore, install the following Perl modules,
if not already present:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LWP::UserAgent&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MIME::Base64&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;XML::XPath&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Date::Format&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Text::CSV_XS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Getopt::Long&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As a last step, open &lt;code&gt;hyppolyta.pl&lt;/code&gt; and look for the line:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;my $req_key = &amp;quot;[YOUR KEY]&amp;quot;; 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add your AWS access key. If you do not have one, please register
with &lt;a href="http://aws.amazon.com"&gt;Amazon&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="first-steps"&gt;First steps&lt;/h2&gt;
&lt;p&gt;The steps of a general session with Hyppolyta could be something
like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Go through the shelves/boxes one by one. Scan all books you
encounter. I suggest sorting them before starting to scan them. For
example, I tend to group them in two categories,
&amp;ldquo;technical literature&amp;rdquo; versus &amp;ldquo;fiction&amp;rdquo; and scan each category in a
separate text file.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You should now have a list of EANs/ISBNs. Each line does not
contain any whitespaces and ends with a newline character. Start
Hyppolyta from the command-line via:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./hyppolyta.pl -i &amp;lt;input file&amp;gt; -o &amp;lt;output file&amp;gt;.csv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you do not want Hyppolyta to download images for each item,
specify the &lt;code&gt;-n&lt;/code&gt; switch, too. Otherwise, all available images are
stored in a subdirectory depending on the search index: If the
search index is &lt;code&gt;DVD&lt;/code&gt;, images will be stored in the folder
&lt;code&gt;./dvd/&lt;/code&gt;. The URI of the image is set accordingly, thus allowing
you to simply upload the appropriate folder to your server in order
to display all DVDs. By default, &lt;code&gt;wget&lt;/code&gt; is used to download the
images.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hyppolyta will now download all information about the items and
store them in a CSV file.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Import the file and have fun. As always, this step is left out
as an exercice to the reader.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="more-complex-usages"&gt;More complex usages&lt;/h2&gt;
&lt;p&gt;To understand Hyppolyta&amp;rsquo;s configuration options you have to learn
the basics about the &amp;ldquo;Amazon E-Commerce Service&amp;rdquo; (ECS). To get data
from Amazon, an &lt;code&gt;ItemLookup&lt;/code&gt; request is used. This request has
several important parameters, which are preset by default when no
other options are present:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;ReqEnd&lt;/code&gt; which specifies the locale. Set to &lt;code&gt;de&lt;/code&gt; by
default. You can change this via the &lt;code&gt;-l&lt;/code&gt; or &lt;code&gt;-locale&lt;/code&gt; switch:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./hyppolyta.pl -i &amp;lt;input file&amp;gt; --locale co.uk
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Valid locales are (among others): &lt;code&gt;com&lt;/code&gt;, &lt;code&gt;co.uk&lt;/code&gt;, &lt;code&gt;de&lt;/code&gt;. Please note
that not all locales share the same database. It is advisable to
change the locale if an insufficient number of items has been
retrieved.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;IDType&lt;/code&gt; that specifies the type of the search parameters, for example
ISBN (default), &lt;acronym title="Universal Product Code"&gt;UPC&lt;/acronym&gt; or
EAN. Actually, more options are possible, but these are not covered here.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;ItemID&lt;/code&gt;, a list of up to 10 items of the type specified by
&lt;code&gt;IDType&lt;/code&gt;. These are, in fact, the codes you scanned earlier. The ID
type can be changed using the &lt;code&gt;-t&lt;/code&gt; or the &lt;code&gt;--idtype&lt;/code&gt; switch:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./hyppolyta.pl -i upc.txt -t UPC
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Not all locales support all ID types. Read the fine manual for
reference purposes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;SearchIndex&lt;/code&gt; that tells Amazon which part of the catalogue
is to be searched. Valid values include: Books, ForeignBooks,
Music, DVD. The default value is &amp;ldquo;Books&amp;rdquo;. However this implies that
&lt;em&gt;only&lt;/em&gt; books of the request&amp;rsquo;s locale are queried! That means: If
the locale is set to &lt;code&gt;de&lt;/code&gt; (by default), books in other languages
will be available &lt;em&gt;only&lt;/em&gt; (!) by using the &amp;ldquo;ForeignBooks&amp;rdquo; search
index. Specifying the search index is possible via the &lt;code&gt;-s&lt;/code&gt; or
&lt;code&gt;--search-index&lt;/code&gt; switch:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./hyppolyta.pl -e -i classical_music.txt -s Music
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;ResponseGroup&lt;/code&gt;, which used by Amazon to decide what
information about an items is sent back. For example: The response
group &lt;code&gt;ItemAttributes&lt;/code&gt; returns a lot of information about each
item, including package dimensions, whereas &lt;code&gt;EditorialReviews&lt;/code&gt; adds
the &amp;ldquo;official&amp;rdquo; review of the item to the response (if available).
More information is available in the ECS documentation.&lt;/p&gt;
&lt;p&gt;This parameter should &lt;em&gt;not&lt;/em&gt; be changed by the end user. Keep your
hands off it unless you know what you are doing.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If available, as much as 10 items are used in one request. After
the request has been assembled, it is sent to Amazon for
processing. The response will be an XML file which is parsed by the
&lt;code&gt;XML::XPath&lt;/code&gt; module. This is where the heart of the program lies.&lt;/p&gt;
&lt;h2 id="tweaking-hyppolyta"&gt;Tweaking Hyppolyta&lt;/h2&gt;
&lt;p&gt;To keep the program as general as possible, hashes are used
everywhere in the program. If you look at the code, you will find
two important variables: &lt;code&gt;@attributes_general&lt;/code&gt; and
&lt;code&gt;%attributes_specific&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I will now explain to you how to use these wisely.&lt;/p&gt;
&lt;h3 id="attributes_general"&gt;&lt;code&gt;@attributes_general&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;This is a list of attributes that have to be included in every request. Each
item has two subitems: First, the title/name of the attribute is specified.
Then, a relative path that tells Hyppolyta where the attribute can be found in
the response (just think of a tree).&lt;/p&gt;
&lt;p&gt;The name of the item is used when the CSV header is written.
Although it is possible to use titles such as &lt;code&gt;Item1&lt;/code&gt;, &lt;code&gt;Item2&lt;/code&gt;
etc., it is not prudent as it makes parsing and understanding a CSV
file much harder. You can change the names to your leisure.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;NodeIterate&lt;/code&gt; value tells Hyppolyta wich nodes are to be used
to iterate over multiple items. In general, this is just the node
of the attribute as described in the ECS documentation. It is also
possible to add new attributes. Just make sure that the path to
&lt;code&gt;NodeIterate&lt;/code&gt; is correct.&lt;/p&gt;
&lt;p&gt;The value in &lt;code&gt;NodeValue&lt;/code&gt; tell Hyppolyta where it should look for
the actual value you want to receive. This may be different from
the &lt;code&gt;NodeIterate&lt;/code&gt; setting.&lt;/p&gt;
&lt;p&gt;Furthermore, specify the flag &lt;code&gt;Output =&amp;gt; 1&lt;/code&gt; if you want Hyppolyta
to print these values every time a new item has been retrieved from
a request.&lt;/p&gt;
&lt;p&gt;Example: Suppose we have a node called &amp;lsquo;Person&amp;rsquo;. This
node has a child called &amp;lsquo;Name&amp;rsquo;. It it stored by ECS in the
following way:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Person -- Name, Person -- Name, Person -- Name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In this case, we would set &lt;code&gt;NodeIterate&lt;/code&gt; to &amp;lsquo;Person&amp;rsquo; (actually, the
whole path has to be used. But this is an example, after all) and
&lt;code&gt;NodeValue&lt;/code&gt; to &amp;lsquo;Name&amp;rsquo;.&lt;/p&gt;
&lt;h3 id="attributes_specific"&gt;&lt;code&gt;@attributes_specific&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;An associative array for attributes that are only requested if a
certain search index is used. The array&amp;rsquo;s key is the search index
(keep in mind that ECS is indeed case-sensitive), the value is
another hash of attributes that are requested for every item. The
syntax is the same as above (&lt;code&gt;Name&lt;/code&gt;, &lt;code&gt;NodeIterate&lt;/code&gt; etc.).&lt;/p&gt;
&lt;p&gt;While this may seem clumsy, it is, in fact, &lt;em&gt;not&lt;/em&gt;, as I dare to
say: People who want to organize their music collection need more
information about artists etc., whereas people who want to sort
their books are almost always happy to know about the author and
the publisher.&lt;/p&gt;
&lt;p&gt;If you want to add attributes, please read the ECS documentation
for more information.&lt;/p&gt;
&lt;h2 id="use-case-my-collection"&gt;Use case: My collection&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s suppose you have your well-ordered list of ISBNs. Before
doing anything else, these should be sorted according to their
origin: In 13-digit ISBNs, the 4th digit will specify the origin: 4
is for Germany (or German-speaking countries), anything else for,
well, another country. In 10-digit ISBNs, the origin is coded in
the first number. Same game.&lt;/p&gt;
&lt;p&gt;Use whatever you want to divide the list in two new lists (one with
the &amp;ldquo;foreign&amp;rdquo; books and one with the local ones): Write a script,
do it manually, use &lt;code&gt;awk&lt;/code&gt; and &lt;code&gt;sed&lt;/code&gt; etc.&lt;/p&gt;
&lt;p&gt;At last, do two runs of Hyppolyta:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./hyppolyta.pl -i books_german.txt -o books_german.csv 
./hyppolyta.pl -i books_foreign.txt -s ForeignBooks -o books_foreign.csv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The .csv files now contain data about your books. Furthermore,
images for every item available should have been downloaded.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Tue, 20 Oct 2009 22:03:52 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2007/hyppolyta/</guid></item><item><title>Using FreeBSD's BPF device with C/C++</title><link>https://bastian.rieck.me/blog/2009/bpf/</link><description>&lt;p&gt;This is a small HOWTO about the BPF device under FreeBSD. I will show
you how to access and configure this device. You will also learn how to
send and receive ethernet frames. If you want to see an example for
possible BPF uses, you might want to consider taking a look at &lt;a href="https://github.com/Pseudomanifold/imr"&gt;in medias
res&lt;/a&gt;.
Any C compiler should be able to compile the example code. Thanks to
Pedro for pointing out several syntax errors. I am also indebted to
Bertrand Petit, who suggested several additions to the text.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveat lector&lt;/strong&gt;: This article essentially represents my knowledge
about the BPF device from more than a decade ago. You have been warned.&lt;/p&gt;
&lt;h1 id="what-is-the-bpf"&gt;What is the BPF?&lt;/h1&gt;
&lt;p&gt;The &lt;strong&gt;B&lt;/strong&gt;erkeley &lt;strong&gt;P&lt;/strong&gt;acket &lt;strong&gt;F&lt;/strong&gt;ilter is one of FreeBSD&amp;rsquo;s most
impressive devices.  It provides you full (&amp;ldquo;raw&amp;rdquo;) access to your NICs
data link layers, i.e.  you are totally protocol-independent. In
general, you should be able to capture and send all packets that arrive
on your network card, even if they are meant to reach other hosts (for
example: if you are using a hub instead of a switch, higher-leveled raw
interfaces will probably discard frames that are not for your MAC
address. The BPF won&amp;rsquo;t&amp;hellip;). To use this really powerful device, you need
a kernel that contains &lt;code&gt;device bpf&lt;/code&gt;. If you don&amp;rsquo;t know how to
create your own kernel, take a look at the excellent &lt;a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html"&gt;FreeBSD
handbook&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;More information about the BPF is readily available via &lt;code&gt;man 4
bpf&lt;/code&gt;.&lt;/p&gt;
&lt;h1 id="creating-and-configuring-a-bpf-device"&gt;Creating and configuring a BPF device&lt;/h1&gt;
&lt;p&gt;In order to create a functional, readable instance of the BPF device,
you have to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Open &lt;code&gt;/dev/bpf&lt;i&gt;n&lt;/i&gt;&lt;/code&gt;, where &lt;i&gt;n&lt;/i&gt; depends on how many
other applications are using a BPF&lt;/li&gt;
&lt;li&gt;Associate your file descriptor with one network interface&lt;/li&gt;
&lt;li&gt;Set the &amp;ldquo;immediate mode&amp;rdquo; so that a call to &lt;code&gt;read&lt;/code&gt; will
return immediately if a packet has been received&lt;/li&gt;
&lt;li&gt;Request the BPF&amp;rsquo;s buffer size&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s proceed chronologically. First, we will try to open the next
available BPF device:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;char buf[ 11 ] = { 0 };
int bpf = 0;

for( int i = 0; i &amp;lt; 99; i++ )
{
	sprintf( buf, &amp;quot;/dev/bpf%i&amp;quot;, i );
	bpf = open( buf, O_RDWR );
	
	if( bpf != -1 )
		break;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now we are going to associate it with a specific network device, such as
&lt;code&gt;fxp0&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const char* interface = &amp;quot;fxp0&amp;quot;;
struct ifreq bound_if;

strcpy(bound_if.ifr_name, interface);
if(ioctl( bpf, BIOCSETIF, &amp;amp;bound_if ) &amp;gt; 0)
	return(-1);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;All&amp;rsquo;s well at the moment, so let&amp;rsquo;s enable immediate mode and request the
buffer size. The last point is &lt;em&gt;very important&lt;/em&gt;, as the BPF is allowed
to provide you with more than one packet after issuing a call to
&lt;code&gt;read&lt;/code&gt;. If you know the buffer size, you can advance to the
next packet.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int buf_len = 1;

// activate immediate mode (therefore, buf_len is initially set to &amp;quot;1&amp;quot;)
if( ioctl( bpf, BIOCIMMEDIATE, &amp;amp;buf_len ) == -1 )
	return( -1 );

// request buffer length
if( ioctl( bpf, BIOCGBLEN, &amp;amp;buf_len ) == -1 )
      return( -1 );
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id="reading-packets"&gt;Reading packets&lt;/h1&gt;
&lt;p&gt;Now, as we are completely done with the initialization and have a
working file descriptor, we want to capture incoming traffic. The good
thing about BPF is that you can set up filter rules if you only want to
receive specific traffic, such as TCP/IP packets.&lt;/p&gt;
&lt;p&gt;In theory, there is no need to do more than making a call to
&lt;code&gt;read&lt;/code&gt;. The resulting buffer contains a &lt;code&gt;bpf_hdr&lt;/code&gt;
and following after that, a packet.  So one could just do something like
that to convert this buffer into a valid ethernet frame:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;frame = (ethernet_frame*) ( (char*) bpf_buf + bpf_buf-&amp;gt;bh_hdrlen);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Unfortunately, sometimes the kernel likes to add more than one packet to
your buffer. Well, the lazy approach would just read one packet per
buffer, and wait for the TCP retransmissions that may arrive. But being
lazy is not a good solution. Therefore, we need a loop to read all
packets that are in the buffer:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int read_byes = 0;

ethernet_frame* frame;
struct bpf_hdr* bpf_buf = new bpf_hdr[buf_len];
struct bpf_hdr* bpf_packet;

while(run_loop)
{
	memset(bpf_buf, 0, buf_len);
	
	if((read_bytes = read(bpf, bpf_buf, buf_len)) &amp;gt; 0)
	{
		int i = 0;
		
		// read all packets that are included in bpf_buf. BPF_WORDALIGN is used
		// to proceed to the next BPF packet that is available in the buffer.
	
		char* ptr = reinterpret_cast&amp;lt;char*&amp;gt;(bpf_buf);
		while(ptr &amp;lt; (reinterpret_cast&amp;lt;char*&amp;gt;(bpf_buf) + read_bytes))
		{
			bpf_packet = reinterpret_cast&amp;lt;bpf_hdr*&amp;gt;(ptr);
			frame = (ethernet_frame*)((char*) bpf_packet + bpf_packet-&amp;gt;bh_hdrlen);

			// do something with the Ethernet frame
			// [...]

			ptr += BPF_WORDALIGN(bpf_packet-&amp;gt;bh_hdrlen + bpf_packet-&amp;gt;bh_caplen);
		}
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above loop does the following things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;As long as the &amp;ldquo;distance&amp;rdquo; between the original &lt;code&gt;bpf_buf&lt;/code&gt;
and the auxiliary pointer &lt;code&gt;ptr&lt;/code&gt; is not bigger as the number
of bytes actually read&amp;hellip;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;hellip;the auxiliary pointer is advanced to the next ethernet frame.
&lt;code&gt;BPF_WORDALIGN&lt;/code&gt; rounds up to the next even multiple of
&lt;code&gt;BPF_ALIGNMENT&lt;/code&gt;. This means that you will jump over all
bytes that are used for padding purposes. Hence,
&lt;code&gt;bpf_packet&lt;/code&gt; always points to the next &lt;code&gt;bpf_hdr&lt;/code&gt;
structure, always given the fact that there is more than one.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please note that &lt;code&gt;ethernet_frame&lt;/code&gt; is my own structure used to
describe one ethernet frame (802.3). Read the standard RFCs or use
Wireshark if you want to learn more.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (2024-04-04)&lt;/strong&gt;: If you request nanosecond timestamps via
&lt;code&gt;BIOCSTSTAMP&lt;/code&gt;, you need to use &lt;code&gt;bpf_xhdr&lt;/code&gt; instead of &lt;code&gt;bpf_hdr&lt;/code&gt;. When
reading packets, make sure that your buffer is using the size provided
by &lt;code&gt;BIOCGBLEN&lt;/code&gt; or &lt;code&gt;BIOCSBLEN&lt;/code&gt;. You can obtain these values via &lt;code&gt;ioctl&lt;/code&gt;.&lt;/p&gt;
&lt;h1 id="sending-your-own-packets"&gt;Sending (your own) packets&lt;/h1&gt;
&lt;p&gt;Sometimes, you might want to send your own packets instead of sticking
to the analysis of captured ones. No problem with the BPF. If the BPF is
initialised as aforementioned, sending packets is really no problem at
all. A quick call to &lt;code&gt;write&lt;/code&gt; will do the trick:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;write(bpf, frame, bpf_buf-&amp;gt;bh_caplen);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In this snippet, &lt;code&gt;bpf&lt;/code&gt; is the BPF&amp;rsquo;s file descriptor,
&lt;code&gt;frame&lt;/code&gt; is a pointer to an ethernet frame that has a TCP/IP
packet attached (remember the initialization of &lt;code&gt;frame&lt;/code&gt;
above?). Of course, this is totally useless, but if you want to write a
little broadcast router or something like that, you could just change
the destination MAC address and write the more or less unchanged frame
plus the payload to the BPF. You won&amp;rsquo;t have to care about the source MAC
address, as the BPF does that for you (look at the man page and search
for &lt;code&gt;BIOCGHDRCMPLT&lt;/code&gt; if you want to disable this feature).&lt;/p&gt;
&lt;h1 id="ethernet-frames"&gt;Ethernet frames&lt;/h1&gt;
&lt;p&gt;An ethernet frame is the basic structure that is sent through your
network cables. You have to use it if you need to access the link layer,
i.e. if you want to send your own raw packets. This is how an ethernet
frame (802.3, ethernet version 2.0) could look like:&lt;/p&gt;
&lt;table border="1" cellpadding="5" cellspacing="1"&gt;
	&lt;tr&gt;
		&lt;td&gt;destination hardware (MAC) address [&lt;i&gt;6 bytes&lt;/i&gt;]&lt;/td&gt;
		&lt;td&gt;source hardware (MAC) address [&lt;i&gt;6 bytes&lt;/i&gt;]&lt;/td&gt;
		&lt;td&gt;layer-3 protocol type [&lt;i&gt;2 bytes&lt;/i&gt;]&lt;/td&gt;
		&lt;td&gt;payload [&lt;i&gt;46 - 1500 bytes&lt;/i&gt;]&lt;/td&gt;
		&lt;td&gt;&lt;acronym title="Frame Check Sequence"&gt;FCS&lt;/acronym&gt; [&lt;i&gt;4 bytes&lt;/i&gt;]&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;The FCS field is not necessarily needed. The other attributes should be
initialised, except the source MAC address (see above for explanation).
This is what you should do if you want to send your own packets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prepare one ethernet frame and supply it with the proper values&lt;/li&gt;
&lt;li&gt;Pay particular attention to the &lt;code&gt;type&lt;/code&gt; field. Otherwise,
you might experience errors (for example: IP packets with an ARP type
field).&lt;/li&gt;
&lt;li&gt;Attach the payload. For an arbitrary TCP/IP packet, you would need:
&lt;ul&gt;
&lt;li&gt;IP header&lt;/li&gt;
&lt;li&gt;TCP header&lt;/li&gt;
&lt;li&gt;TCP payload&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Send it!&lt;/li&gt;
&lt;li&gt;For debugging purposes, you should have a network sniffer which will
tell you if something went wrong.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Following the given example, your frame could look like this:&lt;/p&gt;
&lt;table border="1" cellpadding="5" cellspacing="1"&gt;
&lt;tr&gt;
  &lt;td&gt;01:02:03:04:05:06&lt;/td&gt;
  &lt;td&gt;&lt;b&gt;Destination MAC&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;01:02:03:04:05:06&lt;/td&gt;
  &lt;td&gt;&lt;b&gt;Source MAC&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;0x0800&lt;/td&gt;
  &lt;td&gt;&lt;b&gt;Type: IP&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td align="center" colspan="2"&gt;IP header&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td align="center" colspan="2"&gt;TCP header&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td align="center" colspan="2"&gt;TCP payload&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h1 id="conclusion"&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;The BPF clearly is a &lt;em&gt;very&lt;/em&gt; powerful thing. If you know something about
the underlying network structure, you can do unbelievable things with
it. Of course, you do not need to stick to the TCP. For a nice example
of using the BPF, take a look at &lt;a href="https://github.com/Pseudomanifold/imr"&gt;IMR&lt;/a&gt;, a
man-in-the-middle application that uses ARP and directs traffic between
two victim hosts.&lt;/p&gt;
&lt;p&gt;Additional information is available through these documents:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.rfc-editor.org/cgi-bin/rfcdoctype.pl?loc=RFC&amp;amp;letsgo=768&amp;amp;type=ftp&amp;amp;file_format=txt"&gt;RFC 768 (UDP)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.rfc-editor.org/cgi-bin/rfcdoctype.pl?loc=RFC&amp;amp;letsgo=793&amp;amp;type=ftp&amp;amp;file_format=txt"&gt;RFC 793 (TCP)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.rfc-editor.org/cgi-bin/rfcdoctype.pl?loc=RFC&amp;amp;letsgo=826&amp;amp;type=ftp&amp;amp;file_format=txt"&gt;RFC 826 (ARP)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Wireshark&amp;rsquo;s and tcpdump&amp;rsquo;s capture files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You could also take a closer look on the additional BPF flags, for
example &lt;code&gt;BIOCGHDRCMPLT&lt;/code&gt;. This flag allows you to fill in the
link level source address of an ethernet frame by yourself, thus
allowing you to create arbitrary spoofed packets that may trick other
hosts in your network.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Tue, 20 Oct 2009 22:03:52 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2009/bpf/</guid></item><item><title>Using K3b with FreeBSD</title><link>https://bastian.rieck.me/blog/2009/k3b/</link><description>&lt;p&gt;&lt;a href="http://k3b.plainblack.com"&gt;K3b&lt;/a&gt; is a great CD/DVD authoring software.
This small tutorial explains how to use it with non-root user accounts.
This HOWTO is also applicable if you want to get
&lt;a href="http://k9copy.sourceforge.net"&gt;k9copy&lt;/a&gt; working. You can skip setting
SUID flags in this case.&lt;/p&gt;
&lt;h1 id="kernel-setup"&gt;Kernel setup&lt;/h1&gt;
&lt;p&gt;First, let&amp;rsquo;s check whether you have to do anything about your kernel
setup at all. Execute &lt;code&gt;camcontrol devlist&lt;/code&gt; in a terminal. If
you see your CD/DVD writer, all is well. For example, this is the output
of the command when being run on my good old Thinkpad R50e:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/home/bastian % camcontrol devlist
&amp;lt;MATSHITA DVD-RAM UJ-830Sx 1.00&amp;gt;   at scbus1 target 0 lun 0 (pass0,cd0)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you don&amp;rsquo;t see your hardware, let&amp;rsquo;s try something else: This is as
easy as it gets: Either add &lt;code&gt;atapicam_load=&amp;ldquo;YES&amp;rdquo;&lt;/code&gt; in
&lt;code&gt;/boot/loader.conf&lt;/code&gt; or compile a new kernel that contains
&lt;code&gt;device atapicam&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This should do the trick.&lt;/p&gt;
&lt;h1 id="devfs-configuration"&gt;DevFs configuration&lt;/h1&gt;
&lt;p&gt;You need to set the proper permissions for the CD/DVD drive. If you look
at the output from &lt;code&gt;camcontrol devlist&lt;/code&gt; from above, you will
notice the part &lt;code&gt;(pass0,cd0)&lt;/code&gt;. If you have multiple CD/DVD
drives in your computer, the numbers will be different. Substitute the
correct numbers for &lt;em&gt;your&lt;/em&gt; system in the lines below.&lt;/p&gt;
&lt;p&gt;Open &lt;code&gt;/etc/devfs.conf&lt;/code&gt; and add the following lines at a
convenient location:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Allow CD/DVD authoring
perm cd0   0660
perm pass0 0660
perm xpt0  0660
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you are the &lt;em&gt;only&lt;/em&gt; user of your computer, simply add your account to
the &lt;code&gt;operator&lt;/code&gt; group (which owns the devices by default).&lt;/p&gt;
&lt;p&gt;If you want to enable burning for &lt;code&gt;multiple&lt;/code&gt; users, however,
I would strongly suggest creating an appropriate user group (e.g.
&lt;code&gt;burn&lt;/code&gt;) and adding the user accounts that are allowed to burn
CDs/DVDs. In this case, in addition to the lines from above, the
following lines should also be added to &lt;code&gt;/etc/devfs.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;own cd0   root:burn
own pass0 root:burn
own xpt0  root:burn
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id="set-suid-flags"&gt;Set SUID flags&lt;/h1&gt;
&lt;p&gt;Skip this step if you are trying to install k9copy.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t like it very much, but is necessary to endow &lt;code&gt;cdrdao&lt;/code&gt;
and &lt;code&gt;cdrecord&lt;/code&gt; with root permissions. So, &lt;code&gt;su&lt;/code&gt; to
&lt;code&gt;root&lt;/code&gt; and execute:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chmod u+s /usr/local/bin/cdrdao
chmod u+s /usr/local/bin/cdrecord
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id="enable-dma"&gt;Enable DMA&lt;/h1&gt;
&lt;p&gt;Execute &lt;code&gt;sysctl hw.ata.atapi_dma&lt;/code&gt; to check whether DMA is
enabled for CD/DVD drives:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/home/bastian % sysctl hw.ata.atapi_dma
hw.ata.atapi_dma: 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the output is &lt;code&gt;0&lt;/code&gt;, add &lt;code&gt;hw.ata.atapi_dma=1&lt;/code&gt; to
&lt;code&gt;/etc/sysctl.conf&lt;/code&gt;.&lt;/p&gt;
&lt;h1 id="conclusion"&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;K3b or k9copy should work now. If you want to enable user mounting of
CDs/DVDs, add &lt;code&gt;vfs.usermount=1&lt;/code&gt; to
&lt;code&gt;/etc/sysctl.conf&lt;/code&gt;.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Tue, 20 Oct 2009 22:03:52 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2009/k3b/</guid></item><item><title>Using the Microsoft Windows 7 (or Vista) boot manager to boot FreeBSD</title><link>https://bastian.rieck.me/blog/2009/windows_boot_manager/</link><description>&lt;p&gt;I want to dual-boot Microsoft Windows 7 and FreeBSD. Since the FreeBSD
boot manager will be overwritten when installing Windows (I wonder if
this will ever change. Probably not. OS evangelism aside, this is one of
the things that &lt;em&gt;truly&lt;/em&gt; sucks about a Windows installation), I decided
to use the Microsoft Windows 7 boot manager to boot FreeBSD. This HOWTO
outlines the necessary steps.&lt;/p&gt;
&lt;p&gt;The procedure should work for the Windows Vista boot manager, too.&lt;/p&gt;
&lt;h1 id="setup"&gt;Setup&lt;/h1&gt;
&lt;p&gt;I am assuming a normal setup here, i.e.:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You have a working computer.&lt;/li&gt;
&lt;li&gt;You want to install Windows 7 and FreeBSD on the &lt;em&gt;same&lt;/em&gt; hard disk.&lt;/li&gt;
&lt;li&gt;This hard disk is the primary disk.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="freebsd-installation"&gt;FreeBSD installation&lt;/h1&gt;
&lt;p&gt;Perform a regular installation of FreeBSD. Create a partition, label the
slices, choose the packages you want to install etc.&lt;/p&gt;
&lt;p&gt;After the installation has finished, boot into your new system and copy
&lt;code&gt;/boot/boot1&lt;/code&gt; to a safe location such as an USB stick.&lt;/p&gt;
&lt;p&gt;Reboot and insert your Windows 7 DVD.&lt;/p&gt;
&lt;h1 id="windows-7-installation"&gt;Windows 7 installation&lt;/h1&gt;
&lt;p&gt;Install Windows 7. You pretty much don&amp;rsquo;t have any choices during the
installation process except for selecting the correct partition.
Double-check that you are not overwriting the FreeBSD partition.&lt;/p&gt;
&lt;p&gt;After the installation has finished, boot into your new Windows system.&lt;/p&gt;
&lt;h1 id="configuring-the-windows-boot-manager"&gt;Configuring the Windows boot manager&lt;/h1&gt;
&lt;p&gt;Copy &lt;code&gt;/boot/boot1&lt;/code&gt; to &lt;code&gt;C:\FreeBSD.mbr&lt;/code&gt;. We will
now use some arcane magic that I have taken from &lt;a href="http://www.openbsd.org/faq/faq4.html#Multibooting"&gt;OpenBSD&amp;rsquo;s tome of
answers&lt;/a&gt; and adapted
for FreeBSD.&lt;/p&gt;
&lt;p&gt;Open &lt;code&gt;cmd.exe&lt;/code&gt; and create a new entry for the boot manager:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;C:\Windows\system32&amp;gt; bcdedit /create /d &amp;quot;FreeBSD 7.2&amp;quot; /application bootsector
The entry {01234567-ABCD-ABCD-ABCD-0123456789AB} was successfully created.

C:\Windows\system32&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Substitute the GUID (i.e.
&lt;code&gt;{01234567-ABCD-ABCD-ABCD-0123456789AB}&lt;/code&gt;) that you received
when executing the command from above for the next commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;C:\Windows\system32&amp;gt; bcdedit /set {01234567-ABCD-ABCD-ABCD-0123456789AB} device boot
The operation completed successfully.

C:\Windows\system32&amp;gt; bcdedit /set {01234567-ABCD-ABCD-ABCD-0123456789AB} path \FreeBSD.mbr
The operation completed successfully.

C:\Windows\system32&amp;gt; bcdedit /set {01234567-ABCD-ABCD-ABCD-0123456789AB} device partition=c:
The operation completed successfully.

C:\Windows\system32&amp;gt; bcdedit /displayorder {01234567-ABCD-ABCD-ABCD-0123456789AB} /addlast
The operation completed successfully.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Further help is available if you call &lt;code&gt;bcdedit /?&lt;/code&gt;. The
documentation is also helpful if you want to fine-tune any settings.&lt;/p&gt;
&lt;h1 id="conclusion"&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;This guide works perfectly for my system (FreeBSD 7.2 and Windows 7).
There was not data loss or any other problem. However, I did a &lt;em&gt;fresh
install&lt;/em&gt; and restored from a backup. Your mileage may vary when you try
to add Windows 7 to an existing installation of FreeBSD or vice versa.&lt;/p&gt;
&lt;p&gt;In short: Be a man—take backups.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Tue, 20 Oct 2009 22:03:52 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2009/windows_boot_manager/</guid></item><item><title>Laser Eye Surgery is a-Go!</title><link>https://liza.io/laser-eye-surgery-is-a-go/</link><description>&lt;p&gt;I had my consultation appointment with Perth Laser Vision at Murdoch Hospital today. I had to go through two rooms of testing, where they had me look into all kinds of machines to map the surface of my eyes, check my retinas, and other such things. All in all they had to bring me up to four different types of machines before they sat me back down in the reception area to wait for the surgeon.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Tue, 20 Oct 2009 15:07:30 GMT</pubDate><guid isPermaLink="true">https://liza.io/laser-eye-surgery-is-a-go/</guid></item><item><title>CSS Box Model differences in Firefox and Internet Explorer</title><link>https://thomashunter.name/posts/2009-10-20-css-box-model-differences-in-firefox-and-internet-explorer</link><description>Here is the bane of web developers existence, Internet Explorer incorrectly displaying the CSS box model. What is the box model? This describes all elements used in HTML documents.</description><author>Thomas Hunter II</author><pubDate>Tue, 20 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-10-20-css-box-model-differences-in-firefox-and-internet-explorer</guid></item><item><title>Database Administration using phpMyAdmin</title><link>https://thomashunter.name/posts/2009-10-18-database-administration-using-phpmyadmin</link><author>Thomas Hunter II</author><pubDate>Sun, 18 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-10-18-database-administration-using-phpmyadmin</guid></item><item><title>Production schedule</title><link>https://etodd.io/2009/10/17/production-schedule/</link><description>&lt;p&gt;Yes, I have a schedule/deadline now. I'M SO NERVOUS. :)&lt;/p&gt;
&lt;p&gt;Here's the plan. And when I say "forum", I am of course referring to the fabulous &lt;a href="http://www.gamedev.net/community/forums"&gt;GameDev.net forums&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;October build&lt;/strong&gt; - Release 0.3, Oct 31 - with the following AI droids: shotgun, sniper, shield, cloaker, melee, chaingun. Virtual file system, XML map format, working multiplayer with scoring and simple "game over" condition. No ability to choose units yet. First forum announcement.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;November build&lt;/strong&gt; - Release 0.4, Nov 30 - implement unit suppression from grenades and melee jump jet. Complete match/round logic. Simple squad orders. Unit selection screen at match start. Rough draft YouTube trailer. Forum announcement update.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Official release&lt;/strong&gt; - Release 0.5, Jan 9 - special abilities, finalize multiplayer maps, finalize YouTube trailer, overall polish, official website goes live. Image of the Day post / official forum announcement.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;January 9 final release! Which means Stainless will have been in development for &lt;em&gt;exactly&lt;/em&gt; one year! Quite impressive for a guy who never seems to finish these things.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Sat, 17 Oct 2009 18:41:01 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/10/17/production-schedule/</guid></item><item><title>Fremantle-y Day</title><link>https://liza.io/fremantle-y-day/</link><description>&lt;p&gt;I am half-relaxing half working. What a tiring, but good, day. Had a driving lesson early in the morning. Met up with a friend whose name I will not mention because then I won&amp;rsquo;t be able to talk about incriminating &amp;ldquo;froggy&amp;rdquo; evidence I have on him. Hung out in Fremantle, in the heat (37 degrees today!). Then got back, had a dinner with C (after a very wet after-pool hug), bussed it back to my house, took a 2km run, had a shower, got my things ready for tomorrow, ordered some sides from Eagle Boys, and am now working/relaxing/watching Eagle Eye.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sat, 17 Oct 2009 15:48:48 GMT</pubDate><guid isPermaLink="true">https://liza.io/fremantle-y-day/</guid></item><item><title>Mother explains why everybody should attend the 2009 Linux Day</title><link>https://stop.zona-m.net/2009/10/mother-explains-why-everybody-should-attend-the-2009-linux-day/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 16 Oct 2009 08:38:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/10/mother-explains-why-everybody-should-attend-the-2009-linux-day/</guid></item><item><title>Premature Prize for the President</title><link>https://solomon.io/premature-prize-for-the-president/</link><description>President Barack Obama, winner of the 2009 Nobel Peace prize, was awarded for the things he might one day accomplish.</description><author>Sam Solomon</author><pubDate>Fri, 16 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/premature-prize-for-the-president/</guid></item><item><title>Students Take Adderall Even When It's Not Prescribed</title><link>https://solomon.io/students-take-adderall-even-when-its-not-prescribed/</link><description>Thirty-two percent of people have taken psycho stimulants such as Adderall without a prescription, while only 13 percent are prescribed…</description><author>Sam Solomon</author><pubDate>Fri, 16 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/students-take-adderall-even-when-its-not-prescribed/</guid></item><item><title>Saturn's New Ring</title><link>https://solomon.io/saturns-new-ring/</link><description>Saturn’s rings captivated Galileo when he saw them for the first time nearly 400 years ago.</description><author>Sam Solomon</author><pubDate>Thu, 15 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/saturns-new-ring/</guid></item><item><title>why linux is powerful or: how to erase half your system and then fix it</title><link>https://purpleidea.com/blog/2009/10/14/why-linux-is-powerful-or-how-to-erase-half-your-system-and-then-fix-it/</link><description>&lt;p&gt;after a brief bout of stupidity i quickly realized that my makefile had gone awry and was quickly eating through my filesystem.&lt;/p&gt;
&lt;p&gt;after ^C killing it, it seems i only took out most of /lib/* and /usr/sbin/* &amp;ndash; who needs those anyways&amp;hellip; apparently almost everyone.&lt;/p&gt;
&lt;p&gt;what happened next. well it turns out i was lucky and had a few shells and a webbrowser open&amp;ndash; attempts to launch new programs will fail, but existing programs are already loaded in memory so i was able to work.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Wed, 14 Oct 2009 19:00:57 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/10/14/why-linux-is-powerful-or-how-to-erase-half-your-system-and-then-fix-it/</guid></item><item><title>Blog</title><link>https://donatstudios.com/Blog</link><description/><author>Donat Studios</author><pubDate>Tue, 13 Oct 2009 06:36:31 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/Blog</guid></item><item><title>Code</title><link>https://donatstudios.com/Projects</link><description/><author>Donat Studios</author><pubDate>Tue, 13 Oct 2009 06:36:31 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/Projects</guid></item><item><title>Contact</title><link>https://donatstudios.com/?id=5</link><description/><author>Donat Studios</author><pubDate>Tue, 13 Oct 2009 06:36:31 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/?id=5</guid></item><item><title>JSONP: Take It With a Grain of Salt</title><link>https://donatstudios.com/JSONP</link><description>&lt;p&gt;I don’t want anyone take this the wrong way. I &lt;em&gt;love&lt;/em&gt; JSON. It is so much simpler to parse than XML, and is an all around exceptional way to represent data. I have one caveat though, and that is “JSON with Padding” or “JSONP” as it goes by.&lt;/p&gt;
&lt;p&gt;Building &lt;em&gt;this site&lt;/em&gt; I wanted to bring in images from my Flickr account as you may have noticed. Building the module in PHP, I basically ran &lt;code&gt;file_get_contents&lt;/code&gt; on the feeds url and passed that directly into &lt;code&gt;json_decode&lt;/code&gt;. It didn't work, the result was null. It had failed to decode. As a test I echoed the result of the &lt;code&gt;file_get_contents&lt;/code&gt; to see what was up; it was succeeding at retrieving the feed. At a glance it looked like JSON, yet it was failing to parse. I knew something was up. &lt;/p&gt;
&lt;p&gt;Here is an example result set:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;jsonFlickrFeed({
  "title":"Uploads from donatj",
  "link":"http://www.flickr.com/photos/donatj/",
  "description":"",
  "modified":"2009-05-31T08:24:46Z",
  "generator":"http://www.flickr.com/",
  "items":[
    {
 "title":"STP81353",
 "link":"http://www.flickr.com/photos/donatj/3581174864/",
 "media":{
   "m":"http://farm4.static.flickr.com/3568/3581174864_be1a44764e_m.jpg"
      },
      "date_taken":"2009-03-30T19:10:34-08:00",
      "description":"&amp;lt;p&amp;gt;&amp;lt;a href=\"http://www.flickr.com/people/donatj/\"&amp;gt;donatj&amp;lt;\/a&amp;gt; posted a photo:&amp;lt;\/p&amp;gt; &amp;lt;p&amp;gt;&amp;lt;a href=\"http://www.flickr.com/
photos/donatj/3581174864/\" title=\"STP81353\"&amp;gt;&amp;lt;img src=\"http://farm4.static.flickr.com/3568/3581174864_be1a44764e_m.jpg\" width=\"180\" height=\"240\" alt=\"S
TP81353\" /&amp;gt;&amp;lt;\/a&amp;gt;&amp;lt;\/p&amp;gt; ",
      "published":"2009-05-31T08:24:46Z",
      "author":"nobody@flickr.com (donatj)",
      "author_id":"30444376@N08",
      "tags":""
    }
  ]
})&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On further examination I noticed, as you should have noted, the data is wrapped in a function. My first thought was that this violates the &lt;a href="https://www.ietf.org/rfc/rfc4627.txt?number=4627"&gt;JSON Specification&lt;/a&gt;, so I immediately tweeted about how silly it was for Flickr to have an invalid JSON feed when their parent company Yahoo employs Douglas Crockford, the creator of JSON. I soon received a response from a colleague informing me that this was JSONP. He explained what it was, and how to use it in jQuery. I had not heard of JSONP.&lt;/p&gt;
&lt;p&gt;It basically comes down to this: XMLHttpRequest will not, in order to protect against XSS, work across domains. Therefore, JSON cannot be directly retrieved nor parsed via JavaScript across domains.&lt;/p&gt;
&lt;p&gt;This is where JSONP comes in. JSONP is essentially a regular JSON result set wrapped in a function. Rather than using XMLHttpRequest to retrieve the document, you dynamically attach a script tag to the page pointing the the JSONP document, which evokes a function call passing your JSON object to whatever function the JSONP is set to pass the data to, forgoing the need to eval anything.&lt;/p&gt;
&lt;p&gt;I have a number of &lt;em&gt;criticisms&lt;/em&gt; of this approach.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First and foremost, JSONP is at its very heart remote code execution. You must have &lt;em&gt;absolute&lt;/em&gt; faith not only in the intentions of the site you are bringing the feed in from, but the security of said site as well, because the code is in fact being &lt;strong&gt;&lt;em&gt;executed&lt;/em&gt;&lt;/strong&gt; by the browser with &lt;em&gt;no chance&lt;/em&gt; for putting regular expressions or other such safety mechanisms in place. This makes your site and visitors &lt;em&gt;wide open&lt;/em&gt; to &lt;strong&gt;any and all&lt;/strong&gt; malicious code a hacker may plant in the feed.&lt;/li&gt;
&lt;li&gt;JSONP is a language specific data type. What I mean by this is that JSONP is designed &lt;em&gt;for&lt;/em&gt; &lt;strong&gt;JavaScript&lt;/strong&gt;, and even then &lt;strong&gt;strictly in the context of a web browser&lt;/strong&gt;. There is no &lt;em&gt;need, none,&lt;/em&gt; for JSONP anywhere else or in any other language (PHP, ASP.Net, Ruby on Rails). Making a &lt;em&gt;feed&lt;/em&gt; in a language specific format is inherently in &lt;em&gt;bad form&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Adding to the last point, other languages currently cannot naturally parse JSONP. As I ran into in PHP, it is &lt;em&gt;not valid JSON&lt;/em&gt; and &lt;code&gt;json_decode&lt;/code&gt; will not handle it. My colleagues answer was to write a regular expression to remove the function, but this is at best a hack.&lt;/li&gt;
&lt;li&gt;Mixing function and data goes in the face of &lt;em&gt;separation of concerns&lt;/em&gt;. You’ve got logic in your data, you’ve got data in your logic. Bad form, good sir, bad form.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;JSONP is in many cases an unsafe practice, and more over its just &lt;em&gt;evil&lt;/em&gt;. It is a necessary evil in some cases, but evil none the less.&lt;/p&gt;
&lt;p&gt;There is at &lt;em&gt;least&lt;/em&gt; one &lt;strong&gt;safe alternative&lt;/strong&gt; to JSONP. The simplest solution provided you have access to server side code is to download, sanitize, optionally cache, and finally pass locally any remote JSON to the client rather than having the clients machine directly load the feed. Yes, this is added overhead on your side, bur for much added &lt;strong&gt;security&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If nothing else, it is up to you to weigh the risks and benefits before blindly using JSONP.&lt;/p&gt;</description><author>Donat Studios</author><pubDate>Tue, 13 Oct 2009 06:36:31 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/JSONP</guid></item><item><title>Tools</title><link>https://donatstudios.com/Tools</link><description/><author>Donat Studios</author><pubDate>Tue, 13 Oct 2009 06:36:31 GMT</pubDate><guid isPermaLink="true">https://donatstudios.com/Tools</guid></item><item><title>Fire Sale! 80+ Web Sites And Domains Must Go</title><link>https://www.jimwestergren.com/fire-sale-80-web-sites-and-domains-must-go/</link><description>Over the years I have bought a lot of domain names and web sites. I especially bought a lot of web sites in 2006 and 2007 to use for link building to clients but as I sold my link building services and 40 web sites in October 2007 I have had almost no use of &amp;#91;...&amp;#93;</description><author>Jim Westergren</author><pubDate>Mon, 12 Oct 2009 16:22:37 GMT</pubDate><guid isPermaLink="true">https://www.jimwestergren.com/fire-sale-80-web-sites-and-domains-must-go/</guid></item><item><title>Online contest for young people "Citizens of the World"</title><link>https://stop.zona-m.net/2009/10/online-contest-for-young-people-citizens-of-the-world/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Mon, 12 Oct 2009 07:38:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/10/online-contest-for-young-people-citizens-of-the-world/</guid></item><item><title>Photoshop on a Dime</title><link>https://johnj.com/posts/photoshop-on-a-dime/</link><description>&lt;p&gt;
As a side benefit of transitioning back from European time since
returning home last week, I have been waking up early most mornings
and getting in a bit of painting. Some days there is nothing like
gradually improving old paintings, scumbling, glazing and blending
with some quiet music going and the sun slowly rising outside.&lt;/p&gt;
&lt;p&gt;
As satisfying as that can be, I don’t want to only rehash the same
unfinished paintings endlessly (some may be beyond help). I keep
coming back to the problem of composing new pictures — what to put in
a piece, and where to put it. When I draw (or just close my eyes),
many images or ideas arise… not to mention the thousands of photos I
take or the images I “clip” from books and the Web. But it can be hard
to knit this slurry of ideas and source material into something which
works, which has, in other words, a unique and compelling aesthetic
logic. Painting is such a slow process (at least the way I do it) that
it can be painful to make the required compositional choices once a
piece is “launched.”&lt;/p&gt;
&lt;p&gt;
I have posted before about making studies and preliminary drawings,
but I keep tweaking my methods, looking for processes which will help
generate the most compelling images (at least to me) and will add more
momentum and fun to art making.&lt;/p&gt;
&lt;p&gt;
One thing which I’ve tried before and which I returned to this morning
is the use of transparent overlays to make preliminary studies. I
first encountered this method of drawing in slides of Eric Fischl’s
work. A few years back I tried a variant of the process for composing
pictures, using transparent sheets known as Kimodesk. While trying to
add some content to a sketchbook drawing this morning, I tried it
again, and it seemed powerful and slightly magical, as if I had a
physical version of Photoshop at my fingertips:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;One 'composes’ multiple figures, buildings, etc. quickly, simply by
moving sheets around on top of each other;&lt;/li&gt;
&lt;li&gt;You can draw on both sides of the sheet for a greater expressive
range;&lt;/li&gt;
&lt;li&gt;The surface takes graphite like soft, black butter; gouache works
too if it’s very 'dry’ (no washes… probably oil would be fine);&lt;/li&gt;
&lt;li&gt;Unlike a drawing in a sketchbook, where you have to erase whenever
you move or change something, there is very little penalty for
making adjustments;&lt;/li&gt;
&lt;li&gt;It is easy to duplicate a picture element or series of marks;&lt;/li&gt;
&lt;li&gt;You can trace existing drawings from sketchbooks and incorporate
found photos, etc., or just run the Kimodesk directly through a
laser printer, making a nice, rich black;&lt;/li&gt;
&lt;li&gt;You can flip your drawing and see the image in reverse at any time
(a good compositional check, essentially the same looking at your
painting in the mirror&lt;sup class="footnote-reference"&gt;&lt;a href="#footnote-1" id="footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Kimodesk looks really good and can be used directly in finished works
(as &lt;a href="http://website.education.wisc.edu/jdamer/index.html"&gt;Jack Damer&lt;/a&gt;, who introduced me to the material, has done), but
probably glassine or other transparent paper would work nearly as well
for the preliminary drawings I’m interested in at the
moment. Unfortunately I don’t believe anybody is making or selling the
stuff at the moment. If anybody knows otherwise, please let me know.&lt;/p&gt;
&lt;p&gt;
(Why not just use Photoshop? I like Photoshop, but the lack of
physicality is offputting at times, and you have to get the images
into the computer and back out again. Plus, I already spend 99.9% of my
time in front of a computer.)&lt;/p&gt;
&lt;div class="footnotes"&gt;
&lt;hr class="footnotes-separatator" /&gt;
&lt;div class="footnote-definitions"&gt;
&lt;div class="footnote-definition"&gt;
&lt;sup id="footnote-1"&gt;&lt;a href="#footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;div class="footnote-body"&gt;
&lt;p&gt;The eye gets used to flaws in a work-in-progress. To counter that problem, in addition to the mirror trick, some people turn their work upside down, or use a convex lens to make it look farther away. Salvador Dalí used to have his wife Gala place his paintings at surprise locations around the house where he could bump into them unexpectedly and be struck by things he hadn’t noticed about them… lacking Gala, most of the rest of us use other tricks.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Mon, 12 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/photoshop-on-a-dime/</guid></item><item><title>More shiny!</title><link>https://etodd.io/2009/10/11/more-shiny/</link><description>&lt;p&gt;Three updates, one in graphics and two in gameplay.&lt;/p&gt;
&lt;p&gt;Graphics: new water shader! Thanks to Panda3D's new built-in support for user clip planes in the shader generator, the reflections were a piece of cake. It's a very basic shader that simply deforms the render buffer and the reflected render buffer, then blends the results 50-50. No fresnel, no lighting, nothing. It works, though.&lt;/p&gt;
&lt;p&gt;Using the distortion shader from my last post, I added a shield droid that puts little shields around team entities in its vicinity. The shields decreases ranged damage by 25%.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Mon, 12 Oct 2009 02:45:35 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/10/11/more-shiny/</guid></item><item><title>Tweetie 2 Freaky Keyboard - Still Worth It</title><link>https://liza.io/tweetie-2-freaky-keyboard-still-worth-it/</link><description>&lt;p&gt;When &lt;a href="http://twitter.com/skitau"&gt;RB &lt;/a&gt;tweeted that Tweetie 2 is out for the iPhone I immediately bought it. I bought it because 1) I heard great things about Tweetie 1 and have never used it before and 2) I am on a crazy app buying spree which is probably going to leave me broke in the near future.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sat, 10 Oct 2009 12:02:07 GMT</pubDate><guid isPermaLink="true">https://liza.io/tweetie-2-freaky-keyboard-still-worth-it/</guid></item><item><title>Does Authenticity Matter?</title><link>/2009/10/09/Does-Authenticity-Matter/</link><description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Facebook is as authentic of a network as you can have, you have you, you are you, you&amp;rsquo;re not FunChick21, or MotorcycleGuy42, You&amp;rsquo;re Craig Kerstiens. You have a birthdate, which is likely you&amp;rsquo;re birthdate, you have a job that is your job, you have friends that are you&amp;rsquo;re friends. Facebook is probably as close to a virtual representation of your true life as you can get on a social network.&lt;/p&gt;
&lt;p&gt;Then you have Twitter. Twitter is probably as inauthentic as they come. You ARE FunChick21 or MotorcycleGuy42. You have that name, and that&amp;rsquo;s it. You have friends, but they&amp;rsquo;re up to you, it&amp;rsquo;s a one way relationship, not confirmation of friendship. For that reason you have 1,000,000 people following Ashton Kutcher, and he follows under 100. You&amp;rsquo;re friends could be celebrities, they could be friends, they could be random people that you liked their tweets.&lt;/p&gt;
&lt;p&gt;Facebook from an ad perspective I know almost everything I could want to about you from an ad targeting perspective. Few sites could give much more demographic info that I&amp;rsquo;d want to target effectively. Twitter I have next to nothing, I have a user name, and the content of what you say.&lt;/p&gt;
&lt;p&gt;So there&amp;rsquo;s an advantage to facebook. But then you have the context of what I&amp;rsquo;m trying to do. If you&amp;rsquo;re facebook, you have users engaged in the site not wanting to leave. If you&amp;rsquo;re Twitter you have users that won&amp;rsquo;t be on the site for beyond 60 seconds. Getting them to leave shouldn&amp;rsquo;t be an issue, which means if you can drive where they are leaving to it should work out well for you.&lt;/p&gt;
&lt;p&gt;But there&amp;rsquo;s a final piece. It&amp;rsquo;s a heavily growing marketplace, that really neither of the major communities picks up on, and it&amp;rsquo;s virtual goods. Virtual goods exist in either form of network, but neither seems to take advantage, meanwhile it&amp;rsquo;s the entire basis behinds such communities as World of Warcraft. How will they start to roll into mainstream networks, that&amp;rsquo;s yet to be seen, but I&amp;rsquo;ll be curious if virtual goods can become dominant in authentic networks or if they&amp;rsquo;ll primarily reside in inauthentic networks as they do today.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Sat, 10 Oct 2009 06:36:41 GMT</pubDate><guid isPermaLink="true">/2009/10/09/Does-Authenticity-Matter/</guid></item><item><title>Risks for Italian Public Education in Government/Microsoft deal</title><link>https://stop.zona-m.net/2009/10/risks-for-italian-public-education-in-governmentmicrosoft-deal/</link><description>&lt;p&gt;What would you do if a teacher&amp;hellip;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 10 Oct 2009 05:08:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2009/10/risks-for-italian-public-education-in-governmentmicrosoft-deal/</guid></item><item><title>Man on Wire</title><link>https://johnj.com/posts/man-on-wire/</link><description>&lt;figure&gt;





&lt;a href="https://johnj.com/man-on-wire.jpg"&gt;&lt;img class="resize" src="https://johnj.com/man-on-wire_hu_1632932ce7641cd8.jpg" style="width: 400px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Still from James March's "Man on Wire"
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Growing up in the Midwest speaking English like everyone else around
me, I always thought my native tongue was somewhat ordinary, even
ugly. In high school and beyond, I loved studying French for the
glimpses it afforded into other ways of thinking, ways which I may
have presumed were more culturally sophisticated. French was the
language of Baudelaire, of wine and cuisine, of Louis XIV and
Napoléon; of Monet, Delacroix, Ingres.&lt;/p&gt;
&lt;p&gt;
I think it took me many years of reading English prose and making
small forays into other languages (something I still enjoy) to truly
appreciate how marvelous a language English really is. For one thing,
at roughly 1 million words, it far outstrips most other languages in
terms of vocabulary (though perhaps half of those are technical
terms). The sheer lexicographic heft of English provides enormous
expressive power — when several similar words exist for the same
thing, one can choose the one with exactly the right associations or
poetic impact.&lt;/p&gt;
&lt;p&gt;
Yet, as with any language, English has words whose equivalents in
other languages are more beautiful. “Beautiful,” for example, is not a
beautiful word. It sounds a bit prim, or prissy. “Beau,” on the other
hand, is such a simple word, barely an exhale, or a sigh. It is far
superior to its English cousin, in my opinion.&lt;/p&gt;
&lt;p&gt;
“Beau” is a word you hear a lot towards the end of &lt;a href="http://en.wikipedia.org/wiki/Man_on_Wire"&gt;Man on Wire&lt;/a&gt;, a
film by James March which portrays the efforts of Frenchman &lt;a href="http://en.wikipedia.org/wiki/Philippe_Petit"&gt;Philippe
Petit&lt;/a&gt;, in 1974, to cross between the Twin Towers of the World Trade
Center on a tightrope. While the film itself is very well made, what
is particularly captivating is the story — how Petit and his friends
combined vision and inspiration, careful planning, stealth, stamina
and, above all, courage, to stage an act which transformed not just
themselves, but also the public’s view of the Towers.&lt;/p&gt;
&lt;p&gt;
I was somewhat incredulous to hear, years after the fact (I was only
eight years old at the time of the stunt) that someone had tightroped
between the two buildings. Now, of course, the imagery in the film is
amped and torqued in gut-wrenching ways by the ghastly absence of the
Towers themselves and the collective memory of their destruction,
burned on the retinas and the psyches on so many of us who remember
seeing them fall on live television. Yet the tears shed by the
participants in the film, interviewed decades after the fact, do not
seem to be about the fallen towers themselves, but about the purity
and intensity of the moments before, during, and after Petit’s walk,
and the beauty created, however briefly, on that day — August 7, 1974.&lt;/p&gt;
&lt;p&gt;
Seeing the film (made just last year) transforms the memory of the
Towers from one of trauma to something more like transcendence. One of
the film’s ironies is that it invites comparison between the
clandestine, overseas preparations of the youthful Petit and his
friends to what one imagines the nineteen hijackers’ final months and
days were like (it would make an interesting film to try to capture
their point of view honestly, but I doubt the world is ready for such
a film). The contrast, very vivid, and never stated in any form in the
film itself, is an obvious one: the sheer horror of Sept. 11, versus
the joy and amazement generated by the simple feat of walking between
the two buildings, more than 400 meters above the streets below. Yet
perhaps it shows the power of art that such comparisons fade when one
is shown Petit’s feat on its own terms. In the space left behind by
the towers, one imagines the space between them — and the courage
required to face imprisonment by a foreign police force or, equally
likely, death at the hands of high winds and gravity. To achieve the
impossible — not for the sake of destruction, but for beauty.
&lt;em&gt;Comme c’est beau.&lt;/em&gt;&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Fri, 09 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/man-on-wire/</guid></item><item><title>New Car Plant Coming to Alabama</title><link>https://solomon.io/new-car-plant-coming-to-alabama/</link><description>A start-up automotive company focused on producing all eco-friendly vehicles will join top automakers such as Mercedes, Honda, Hyundai…</description><author>Sam Solomon</author><pubDate>Fri, 09 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/new-car-plant-coming-to-alabama/</guid></item><item><title>Oh, the horror...</title><link>https://murphyslab.ca/notes/oh-the-horror/</link><description>Some concepts are difficult to teach to students because it is something which you take for granted because it is so deeply ingrained. Chemistry concepts from first year university can be like that. But the most difficult experience in my teaching practice might have been this morning. It was difficult because each answer the student gave raised new questions about how much she was missing in her educational foundation.
 During the morning Chem Help Session where I was teaching, and a girl walked in seeking some help with her pre-lab assignment.</description><author>Murphy's Lab Notes on Murphy's Lab</author><pubDate>Thu, 08 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://murphyslab.ca/notes/oh-the-horror/</guid></item><item><title>Nuevo foro de fotografía: enfocas.es</title><link>https://danielpecos.com/2009/10/07/nuevo-foro-de-fotografia-enfocas-es/</link><description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://enfocas.es" target="_blank" title="Enfocas"&gt;&lt;img alt="Enfocas" class="aligncenter size-full" height="100" src="https://danielpecos.com/assets/2009/10/logo_100.png" title="Enfocas" width="330" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;a href="http://enfocas.es" target="_blank" title="Enfocas"&gt;&lt;strong&gt;http://enfocas.es&lt;/strong&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;En origen, ENFOCAS, está formado por un grupo de amig@s de Castellón, unidos por su pasión hacia la fotografía. El foro en sí, nace como punto de encuentro de quienes como nosotros, sientan la necesidad de compartir esta afición, a través de las imágenes que podamos aportar, junto con los comentarios, dudas, informaciones de interés o cualquier otro aspecto que pueda surgir a lo largo de su vida.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;No pretendemos ser ningún referente, tan solo queremos disponer de una parcela de la red para poder compartir nuestra pasión por la fotografía, con quienes quieran acercarse a él, y lo hagan de forma respetuosa hacia las obras, aportaciones y opiniones de los demás.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Precisamente en este talante de respeto hacia las aportaciones, grandes o pequeñas, y de las opiniones de sus componentes, esperamos que surja un foro vivo y participativo, donde  el propio foro, su estructura, su estilo  sea fruto de la participación de quienes lo componemos.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Por último, no podemos evitar tener presente en nuestro pensamiento, que la comunicación a través de Internet, aún siendo deseable y de gran importancia, no puede ni debe suplir, en la medida de lo posible, un contacto directo y personal. Tratamos, pues, de conseguir una participación más cercana, buscando fomentar la presencia activa a través de puntos de encuentro, ya sean mediante KDD´s en nuestra comunidad o fuera de ella, si fuera posible, y a través de todos aquellos birrings que nos permitan compartir unos momentos de amigable camaradería y conversación.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Wed, 07 Oct 2009 13:26:50 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2009/10/07/nuevo-foro-de-fotografia-enfocas-es/</guid></item><item><title>the python subprocess module</title><link>https://purpleidea.com/blog/2009/10/07/the-python-subprocess-module/</link><description>&lt;p&gt;i&amp;rsquo;m sure that i won&amp;rsquo;t be able to tell you anything revolutionary which can&amp;rsquo;t be found out by reading the &lt;a href="http://docs.python.org/library/subprocess.html"&gt;manual&lt;/a&gt;, but i thought i would clarify it, and by showing you a specific example which i needed.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;subprocess.Popen&lt;/em&gt; accepts a bunch or args, one of which is the &lt;strong&gt;shell&lt;/strong&gt; argument, which is False by default. If you specify &lt;em&gt;shell=True&lt;/em&gt; then the first argument of popen should be a &lt;strong&gt;string&lt;/strong&gt; which is what gets parsed by the shell and then eventually run. (nothing revolutionary)&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Wed, 07 Oct 2009 13:24:53 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/10/07/the-python-subprocess-module/</guid></item><item><title>Lawmakers Meet to Discuss Distractions Facing Drivers</title><link>https://solomon.io/lawmakers-meet-to-discuss-distractions-facing-drivers/</link><description>Nearly 6,000 deaths and 500,000 injuries can be attributed to secondary tasks while driving in 2008, said the National Highway Traffic Safety Administration’s…</description><author>Sam Solomon</author><pubDate>Mon, 05 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/lawmakers-meet-to-discuss-distractions-facing-drivers/</guid></item><item><title>Stargate Universe Looks Promising</title><link>https://liza.io/stargate-universe-looks-promising/</link><description>&lt;p&gt;I just watched the first episode (well, a double episode) of Stargate Universe. So far so good! Watch out, there are spoilers ahead.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sun, 04 Oct 2009 18:01:19 GMT</pubDate><guid isPermaLink="true">https://liza.io/stargate-universe-looks-promising/</guid></item><item><title>Tesla Roadster</title><link>https://justingarrison.com/blog/2009-10-04-tesla-roadster/</link><description>For my birthday this past weekend I treated myself to something I wouldn’t normally do.</description><author>Justin Garrison's Homepage</author><pubDate>Sun, 04 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2009-10-04-tesla-roadster/</guid></item><item><title>Panda3D distortion sample</title><link>https://etodd.io/2009/10/03/panda3d-distortion-sample/</link><description>&lt;p&gt;For any Panda3D users out there, this is an improved version of the frame-buffer distortion sample currently shipping with Panda3D 1.6.2. Whereas the original sample just samples a wave texture to offset the frame-buffer sample location, the shader in this version actually uses normals from the Egg model. It also gives a slight tint to the object. You can easily adjust the color and intensity of the tint at the top of the "distortion.sha" file.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Sat, 03 Oct 2009 13:55:43 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/10/03/panda3d-distortion-sample/</guid></item><item><title>Lion King PC Game Nostalgia</title><link>https://liza.io/lion-king-pc-game-nostalgia/</link><description>&lt;p&gt;When people ask me what the first video game I ever played was, I say Warcraft 2 on the PC when I first moved to the U.S.. Recently it dawned on me that this isn&amp;rsquo;t exactly true. In fact, the first video game I remember playing was The Lion King. These were the days when we &lt;em&gt;just&lt;/em&gt; got a VHS player. It was all the rage in our area at the time. The first movie we got was Anaconda, but my favorite movie in the world at the time - The Lion King - followed soon after. There was this toy, game and video shop in our neighborhood. I remember they had three or four computers set up, where they would charge kids to play The Lion King for about 15 minutes or so. There was always a group of kids waiting to play. I remember sitting in the chair and roaring at the  porcupines, fighting the hyenas, jumping from rock to rock and tree to tree. I also remember the second level, which I think I actually passed only once in the time that was allocated - the level where you had to jump from animal to animal to the &amp;ldquo;I just can&amp;rsquo;t wait to be king&amp;rdquo; theme music.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Fri, 02 Oct 2009 18:15:54 GMT</pubDate><guid isPermaLink="true">https://liza.io/lion-king-pc-game-nostalgia/</guid></item><item><title>Free Notepad++ Web Developers Theme</title><link>https://thomashunter.name/posts/2009-10-02-free-notepad-web-developers-theme</link><author>Thomas Hunter II</author><pubDate>Fri, 02 Oct 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-10-02-free-notepad-web-developers-theme</guid></item><item><title>Motivating Users</title><link>/2009/09/30/Motivating-Users/</link><description>&lt;p&gt;I&amp;rsquo;ve done some recent advising for someone working on a site that&amp;rsquo;s of a social nature. The site is intended in some form to motivate users, the initial thought on this was to define a lot of rules, and send automated messages to users. To me this approach felt very 1990&amp;rsquo;s. So assuming that were true, then comes the question of how do you motivate users?&lt;/p&gt;
&lt;p&gt;I think rules do usually come somewhere in the process, you need to know when to motivate the users, however the catch is how you expose the results of those rules. And in thinking about it there&amp;rsquo;s a variety of levels at which you can expose those rules from more raw data forms, to several steps of analysis or actions on top of them. Raw data works for analytical users, users that naturally consume data AND are already heavily motivated for the set goal. Lets say for sake of argument this is 10% of users. This means by exposing very little gloss, and mostly the data which the rules are run on you&amp;rsquo;ll lose 90% of users.&lt;/p&gt;
&lt;p&gt;The other extreme is to almost entirely hide the rule and obfuscate this with actions that you know can lead the user back to their goal. I feel not quite this, but some derivative of it, in the form of social nudging could be incredibly useful for many different means. There&amp;rsquo;s many real world situations where people rely on each other for support, you can think of traditional AA type settings, or weight loss, or other groups with a central focus of accountability. But these forms of groups seem to be largely absent in the virtual space, or when they are present are realistic groups simple dropped into a virtual space.&lt;/p&gt;
&lt;p&gt;What happens when users want some mixed level of privacy, but encouragement? What you need to do is to have your rules define when you need to have users get motivation from others. The fun part is how you drive users to interact at those times, this can be through a variety of options, all depending on your site. A very basic example of this is the birthday reminder on facebook. They&amp;rsquo;re not just reminding you of it for the sake of it, they&amp;rsquo;re reminding you, so you use applications to send virtual birthday cards to users and messages, therefore enriching the user experience. If other sites were able to apply this to goal setting, and use social nudging over system rules, users will feel more connected to others and it will likely increase effectiveness.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Oct 2009 08:25:24 GMT</pubDate><guid isPermaLink="true">/2009/09/30/Motivating-Users/</guid></item><item><title>New artwork</title><link>https://etodd.io/2009/10/01/new-artwork/</link><description>&lt;p&gt;Yeah, I'm back to art now. I am ashamed. But I'm starting to get the hang of this Blender stuff. Check it out:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://etodd.io/assets/render2.jpg"&gt;&lt;img alt="New weapon model. This is a Blender Render, not in-game." class="size-medium wp-image-62" src="https://etodd.io/assets/render2-small.jpg" title="render2" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And here it is in-game. Don't worry, I fixed the clamped textures on the bottom after I took this screenshot.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://etodd.io/assets/screen12.png"&gt;&lt;img alt="Here stands the inanimate metallic ball, ready to kick butt and take names." class="size-medium wp-image-63" src="https://etodd.io/assets/screen12-small.png" title="screen12" /&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Thu, 01 Oct 2009 04:21:29 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/10/01/new-artwork/</guid></item><item><title>Hungary: Budapest &amp;amp; Heviz Trip Report</title><link>https://www.planetjones.net/blog/30-09-2009/hungary-budapest-heviz-trip-report.html</link><description>A 10 day trip to Hungary&amp;rsquo;s capital Budapest and a 3 night trip to Heviz, a town near Lake Balaton which is home to Europe&amp;rsquo;s largest outdoor thermal lake.</description><author>Jonathan Jones homepage: planetjones.net</author><pubDate>Wed, 30 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.planetjones.net/blog/30-09-2009/hungary-budapest-heviz-trip-report.html</guid></item><item><title>Nissan Almera Self Diagnostic Menu</title><link>https://caiustheory.com/nissan-almera-self-diagnostic-menu/</link><description>&lt;p&gt;Here&amp;rsquo;s how to access the self diagnostic / configuration menu on a Nissan Almera 2003 SVE (N16):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start the engine&lt;/li&gt;
&lt;li&gt;Turn the radio on&lt;/li&gt;
&lt;li&gt;Turn the radio off&lt;/li&gt;
&lt;li&gt;Hold the info button in &lt;em&gt;then:&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Turn the volume knob up (clockwise) &lt;em&gt;until:&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Diagnostic menu appears&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;From here you can do various things: run self-diagnostics; reset/change the main service counter; various other tests for the climate control, sat nav system, etc.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Mon, 28 Sep 2009 13:44:00 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/nissan-almera-self-diagnostic-menu/</guid></item><item><title>Pagerank and higher search engine rankings explained</title><link>https://thomashunter.name/posts/2009-09-28-pagerank-and-higher-search-engine-rankings-explained</link><author>Thomas Hunter II</author><pubDate>Mon, 28 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-09-28-pagerank-and-higher-search-engine-rankings-explained</guid></item><item><title>A Bad Run - Running in the Heat</title><link>https://liza.io/a-bad-run-running-in-the-heat/</link><description>&lt;p&gt;As I type this I&amp;rsquo;m laying in bed, rubbing my head and trying to figure out what the heck happened.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sun, 27 Sep 2009 10:37:05 GMT</pubDate><guid isPermaLink="true">https://liza.io/a-bad-run-running-in-the-heat/</guid></item><item><title>And now for something completely different...</title><link>https://etodd.io/2009/09/25/and-now-for-something-completely-different/</link><description>&lt;p&gt;I actually planned a full-fledged single-player campaign for Stainless, before I came to my senses and downgraded it to a much simpler multiplayer game. However, I'm still considering a short (2-4 hours) campaign. What I have in mind is similar to Valve's strategy with &lt;a href="http://l4d.com"&gt;Left 4 Dead&lt;/a&gt;: a short, highly replayable campaign designed for 2-4 players. With one catch: the players are fighting &lt;em&gt;against&lt;/em&gt; each other.&lt;/p&gt;
&lt;p&gt;With my limited marketing and branding skills, I have dubbed my idea an "anti-cooperative campaign". It would be best with 1v1 or 2v2, but regardless of the player count, the computer would balance the teams by bestowing various power-ups. Which means, if I ever add an online component beyond LAN, matchmaking would be unnecessary.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Fri, 25 Sep 2009 03:19:16 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/09/25/and-now-for-something-completely-different/</guid></item><item><title>Micromanaging</title><link>/2009/09/24/Micromanaging/</link><description>&lt;p&gt;Three times in recent years I&amp;rsquo;ve had to micromanage others. Though probably in the contrary form to what you would expect. Most people think of micromanagement as their manager wanting to know every detail about their day, and be involved in every minute task. In most cases this form of micromanagement is never received well. Generally my feelings are that if I have to micromanage you, you don&amp;rsquo;t belong in the role you&amp;rsquo;re in, though I suppose exception cases may exist.&lt;/p&gt;
&lt;p&gt;But the form of micromanagement I&amp;rsquo;m talking about is upward management. This could be needed for a variety of reasons:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;First it&amp;rsquo;s helpful to start with a regular process. Sending status emails every morning or every afternoon, will keep them in the loop. It&amp;rsquo;ll prevent them from asking too many questions, and will keep them in the loop, but mainly with knowledge you feel is pertinent.&lt;/p&gt;
&lt;p&gt;Discussions and calls with insider info will allow them to feel as if they&amp;rsquo;re driving the process. If you provide information as factual and provide the facts of how certain things have historically worked, or do would at a tactical level from you&amp;rsquo;re experiences it will help to steer the process in that direction. If they&amp;rsquo;re outside they&amp;rsquo;re comfort zone they&amp;rsquo;re going to take their best guess, it&amp;rsquo;s 50-50 if that&amp;rsquo;s the same as you&amp;rsquo;d see fit.&lt;/p&gt;
&lt;p&gt;But, do let them drive the process at hand. If they feel as if you&amp;rsquo;re attempting to drive it, then they&amp;rsquo;re going to feel as if they&amp;rsquo;re authority is being challenged. It&amp;rsquo;s more a kin to telling them the directions of how to get their and letting them drive the car. If they&amp;rsquo;re slightly off path, but in the right direction let it go because otherwise you&amp;rsquo;re time will be consumed with trying to get the exact directions.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 24 Sep 2009 22:41:57 GMT</pubDate><guid isPermaLink="true">/2009/09/24/Micromanaging/</guid></item><item><title>NASA Awards Auburn University $600,000 Grant</title><link>https://solomon.io/nasa-awards-auburn-university-600000-grant/</link><description>A $600,000 grant from NASA has been awarded to Auburn University’s College of Sciences and Mathematics in association with the Alabama Department of Education…</description><author>Sam Solomon</author><pubDate>Thu, 24 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/nasa-awards-auburn-university-600000-grant/</guid></item><item><title>Business hours</title><link>https://peterlyons.com/problog/2009/09/business-hours/</link><description>&lt;p&gt;NOTICE: To all businesses with a single physical location and a web site. You will put your address, phone number, and business hours on your home page. There will not be a "Contact" page. There will not be an "About" page. END OF NOTICE&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Tue, 22 Sep 2009 13:38:56 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2009/09/business-hours/</guid></item><item><title>Ignore .gitignore in Git</title><link>https://caiustheory.com/ignore-gitignore-in-git/</link><description>&lt;p&gt;Recently I ran into an issue where I was working on a project which had files I wanted git to ignore, but I didn&amp;rsquo;t want to commit a &lt;code&gt;.gitignore&lt;/code&gt; file into the project. In case you don&amp;rsquo;t know, any files matching a pattern in &lt;code&gt;.gitignore&lt;/code&gt; in a git repository are ignored by git. (Unless the file(s) have already been committed, then they need removing from git before they are ignored.)&lt;/p&gt;
&lt;p&gt;Initially I figured I could just throw the patterns I needed excluded into my global &lt;code&gt;~/.gitignore&lt;/code&gt;, but quickly realised that I needed files matching these patterns to show up in other git repos, so going the global route really wasn&amp;rsquo;t an option. After some thought I wondered if you could make git ignore &lt;code&gt;.gitignore&lt;/code&gt;, whilst still getting it to ignore files matching the other patterns in the &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Lets create a new empty repo to test this crazy idea in:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ mkdir foo
$ cd foo
$ git init
Initialized empty Git repository in /Volumes/Brutus/Users/caius/foo/.git/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And create a couple of files for us to play with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ touch bar
$ touch baz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ignore one of the files so we can check other matches are still ignored later on:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ echo &amp;quot;baz&amp;quot; &amp;gt;&amp;gt; .gitignore
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)
#
# .gitignore
# bar
nothing added to commit but untracked files present (use &amp;quot;git add&amp;quot; to track)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ok so far, but we can still see .gitignore in git, so now for the crazy shindig, ignore the ignore file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ echo &amp;quot;.gitignore&amp;quot; &amp;gt;&amp;gt; .gitignore
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lets see if it worked, or if we can still see our .gitignore:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)
#
# bar
nothing added to commit but untracked files present (use &amp;quot;git add&amp;quot; to track)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And lets just double-check that &lt;code&gt;.gitignore&lt;/code&gt; and &lt;code&gt;baz&lt;/code&gt; still exist on the filesystem:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ls -a
. .. .git .gitignore bar baz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fantastic! Turns out adding &amp;ldquo;.gitignore&amp;rdquo; to &lt;code&gt;.gitignore&lt;/code&gt; works perfectly. The file is still parsed by git to ignore everything else too, so it does exactly what I needed in this instance.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Mon, 21 Sep 2009 09:00:00 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/ignore-gitignore-in-git/</guid></item><item><title>Tiger Transit Stolen Saturday</title><link>https://solomon.io/tiger-transit-stolen-saturday/</link><description>One of my favorite articles of the year was when one of the Toomer’s Ten late night transport buses was stolen.</description><author>Sam Solomon</author><pubDate>Mon, 21 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/tiger-transit-stolen-saturday/</guid></item><item><title>Network system description</title><link>https://etodd.io/2009/09/19/network-system-description/</link><description>&lt;p&gt;As promised. :)&lt;/p&gt;
&lt;p&gt;First, a small disclaimer. This network system is designed for a very specific task: handling networked physics/gameplay over a LAN network. The structure described here might be useful in other scenarios, but the actual Python code is certainly not fit for much else.&lt;/p&gt;
&lt;p&gt;The system follows a modified Model-View-Controller pattern that focuses on two main types of objects: Entities and Controllers. The "View" part is split between the Entity and Controller. Entities handle most of the assets tied to a standard object in the game world: namely, the physics geometry and graphical representation. Each Entity has exactly one Controller, which handles all (and I mean &lt;em&gt;all&lt;/em&gt;) actions the Entity can perform. The Entity will not move at all without a Controller.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Sat, 19 Sep 2009 15:21:28 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/09/19/network-system-description/</guid></item><item><title>Change PHP Timezones</title><link>https://thomashunter.name/posts/2009-09-19-change-php-timezones</link><author>Thomas Hunter II</author><pubDate>Sat, 19 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-09-19-change-php-timezones</guid></item><item><title>Version 2 of my CMS, The Clesto CMS</title><link>https://www.jimwestergren.com/version-2-of-my-cms-the-clesto-cms/</link><description>After a lot of hard work and learning I have now finished making a complete new version of my Clesto CMS. It is still flat file based without a database and now it has both visual editor and HTML editor for making the pages - similar to that of Wordpress. Focus has been to make &amp;#91;...&amp;#93;</description><author>Jim Westergren</author><pubDate>Fri, 18 Sep 2009 15:38:06 GMT</pubDate><guid isPermaLink="true">https://www.jimwestergren.com/version-2-of-my-cms-the-clesto-cms/</guid></item><item><title>The wheel of not waiting</title><link>https://peterlyons.com/problog/2009/09/the-wheel-of-not-waiting/</link><description>&lt;p&gt;So flash videos are everywhere now. Generally as they load they show some spinning wheel type graphic. The problem is as an end user, I have no visual differentiation between a video that is loading slowly and a video sitting there waiting for TCP from an overloaded server that is simply never going to work, and certainly not in a timeframe smaller than my attention budget. Show me whether or not you are getting any data, and I might be willing to wait, but if you have me watching your spinner until your TCP connection times out, you are just frustrating me.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Fri, 18 Sep 2009 11:01:00 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2009/09/the-wheel-of-not-waiting/</guid></item><item><title>SUSCC Hosts Healthcare Forum</title><link>https://solomon.io/suscc-hosts-healthcare-forum/</link><description>Suzanne Repress, a legislative liaison for Children’s Health System in Birmingham, discusses the health care bill with Opelika residents: Rod Guajardo/</description><author>Sam Solomon</author><pubDate>Thu, 17 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/suscc-hosts-healthcare-forum/</guid></item><item><title>Perfunctory postage</title><link>https://etodd.io/2009/09/15/perfunctory-postage/</link><description>&lt;p&gt;Wow, so many updates to cover. I've been without internet for awhile, so... deal with it. :)&lt;/p&gt;
&lt;p&gt;Let's start with a list of new improvements:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Networked gameplay is now fully functional. Weapons, grenades, springboards that propel players around the map, it's all there. I'll make a bigger post one of these days that describes the whole system in more detail. It was quite educational for me, and I'll still be modifying it for awhile.&lt;/li&gt;
&lt;li&gt;The main arena level has received an upgrade in the form of a massive tower thing in the middle, with bridges going out to springboards on either side. Which makes it now completely incompatible with my primitive AI system. Oh darn.&lt;/li&gt;
&lt;li&gt;I'm using a nifty particle effect when the player spawns and to highlight the springboards. Kinda slow without the Panda3D MeshDrawer class though.&lt;/li&gt;
&lt;li&gt;The generic physics object, known as "Block" has received a visual overhaul. This was my first experiment with dirty textures, and it turned out not too bad. Textures were done in Inkscape and Gimp (with a normal map filter plugin).&lt;/li&gt;
&lt;li&gt;There is now a functional main menu! Well, more like 50% functional. Still on the to-do list: allowing the user to specify what server to connect to (possibly with a server auto-detect function), and allowing the host to choose which map to load. Also farther out on the roadmap is usernames and logins. And can anyone tell me how to deal with Blender's ridiculous smooth/solid mesh setting!? I can't get the continents to be smooth-shaded without screwing up the normals on the edges. It's passable for now though.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Behold!&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Wed, 16 Sep 2009 00:48:42 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/09/15/perfunctory-postage/</guid></item><item><title>Java: Always explicitly specify which XML parser to use</title><link>https://www.databasesandlife.com/java-always-explicitly-specify-which-xml-parser-to-use/</link><description>&lt;p&gt;There is the following design error in Java (at least in Servlets):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A server may serve multiple applications; each application may use different libraries or even different versions of the same library, &amp;ldquo;side by side&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;XML parsers, transformers (XSLT), etc., have a standard interface, and there may be different implementations of this interface from different vendors, open-source projects, etc.&lt;/li&gt;
&lt;li&gt;Which XML parser, transformed etc. is actually used depends on a &lt;strong&gt;global system variable&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And it&amp;rsquo;s point 3 that&amp;rsquo;s the problem really. Points 1 and 2 are debatable: they certainly bring advantages, but they certainly bring complexity too.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 15 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/java-always-explicitly-specify-which-xml-parser-to-use/</guid></item><item><title>Filter through command</title><link>https://caiustheory.com/filter-through-command/</link><description>&lt;p&gt;&lt;em&gt;This is another old post that I&amp;rsquo;m republishing. Originally published 27th April 2007.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;My text editor &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt; has a nice feature called &amp;ldquo;Filter through command&amp;rdquo; whereby you can filter the current document through a command.&lt;/p&gt;
&lt;p&gt;Anyway, I&amp;rsquo;ve never used it before, but today I had a text file with 30 or so url&amp;rsquo;s in, each on a new line, so I thought I&amp;rsquo;d test it out. I selected it to input the document &amp;amp; to not replace the output. I then entered the following command, which is a ruby command to take each line that isn&amp;rsquo;t blank, and run the shell command &lt;code&gt;open $url&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ruby -e &lt;span class="s1"&gt;'a = ARGF.read.scan(/\S+/); a.each { |x| `open #{x}` }'&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What this does is take ARGF (the document) and read it in line by line, but only the non-whitespace characters (so newlines, space, etc are ignored.) And it assigns it to an array called &lt;code&gt;a&lt;/code&gt;. What I then do is for each item of &lt;code&gt;a&lt;/code&gt;, we run it past the shell command &lt;code&gt;open&lt;/code&gt;, which on OS X if you pass it a URL it just opens that URL in the default browser.&lt;/p&gt;
&lt;p&gt;My browser is Safari, and its set to open new links in a new tab in the foremost window. So I ran the command, and hey presto, within a few seconds I had all the URL&amp;rsquo;s loading in seperate tabs in Safari&amp;rsquo;s foremost window!&lt;/p&gt;
&lt;p&gt;The power of Unix &lt;em&gt;(OS X)&lt;/em&gt; &amp;amp; TextMate (amongst other tools) just never ceases to amaze me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I just realised if you change the regex to scan for http://.* then it&amp;rsquo;ll select all website URLs.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ruby -e &lt;span class="s1"&gt;'a = ARGF.read.scan(/^http://.*$/); a.each { |url| `open #{url}` }'&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><author>Caius Theory</author><pubDate>Tue, 15 Sep 2009 01:39:37 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/filter-through-command/</guid></item><item><title>KGL simulator, shared pool simulator and buffer cache simulator – what are these?</title><link>https://tanelpoder.com/2009/09/13/kgl-simulator-shared-pool-simulator-and-buffer-cache-simulator-what-are-these/</link><description>&lt;p&gt;If you have queried v$sgastat on recent Oracle versions (by which I mean 9i and above) you probably have seen allocations for some sort of simulators in Oracle instance. Here’s an example:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; select * from v$sgastat where lower(name) like '%&lt;strong&gt;sim&lt;/strong&gt;%' order by name;

POOL         NAME                            BYTES
------------ -------------------------- ----------
shared pool  kglsim alloc latch area          1700
shared pool  kglsim alloc latches               68
shared pool  kglsim count of pinned he        9248
shared pool  kglsim free heap list             204
shared pool  kglsim free obj list              204
shared pool  kglsim hash table                4104
shared pool  kglsim hash table bkts        2097152
shared pool  kglsim heap                    635536
shared pool  kglsim latch area                1700
shared pool  kglsim latches                     68
shared pool  kglsim main lru count           87040
shared pool  kglsim main lru size           174080
shared pool  kglsim object batch            909440
shared pool  kglsim pin list arr               816
shared pool  kglsim recovery area             2112
shared pool  kglsim sga                      22092
shared pool  kglsim size of pinned mem       18496
shared pool  ksim client list                   84
shared pool  log_simultaneous_copies           480
shared pool  sim cache nbufs                   640
shared pool  sim cache sizes                   640
shared pool  sim kghx free lists                 4
shared pool  sim lru segments                  640
shared pool  sim segment hits                 1280
shared pool  sim segment num bufs              640
shared pool  sim state object                   48
shared pool  sim trace buf                    5140
shared pool  sim trace buf context             120
shared pool  sim_knlasg                       1200
shared pool  simulator hash buckets          16512
shared pool  simulator latch/bucket st        4608

31 rows selected.&lt;/pre&gt;
&lt;p&gt;See, a bunch of “kgl sim” and then just “sim” allocations.&lt;/p&gt;
&lt;p&gt;… or sometimes you can see latch contention on following latches:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; select name from v$latch where name like '%sim%';

NAME
-------------------------------------------------------
ksim membership request latch
simulator lru latch
simulator hash latch
sim partition latch
shared pool simulator
shared pool sim alloc

6 rows selected.&lt;/pre&gt;
&lt;p&gt;Again, there seems to be some “simulation” work going on in Oracle instance.&lt;/p&gt;
&lt;p&gt;So what are these simulators about?&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 14 Sep 2009 03:13:39 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/09/13/kgl-simulator-shared-pool-simulator-and-buffer-cache-simulator-what-are-these/</guid></item><item><title>Derren Brown Guesses Lottery Numbers</title><link>https://liza.io/derren-brown-guesses-lottery-numbers/</link><description>&lt;p&gt;Derren Brown correctly predicted the winning lottery numbers and put the feat down to a complex mathematical formula. According to the illusionist and hypnotist, he gathered 24 people who wrote down their predictions after studying last year&amp;rsquo;s numbers. All guesses were then averaged - added up and divided by 24. The &amp;ldquo;wisdom of the crowd&amp;rdquo; theory suggests that a large group of people making average guesses will get the correct figure as an average of all of their attempts.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sun, 13 Sep 2009 15:11:54 GMT</pubDate><guid isPermaLink="true">https://liza.io/derren-brown-guesses-lottery-numbers/</guid></item><item><title>Colorful Spectrum Analyzer</title><link>https://mattkeeter.com/projects/spectrum</link><description>Digital filters on an FPGA</description><author>Matt Keeter</author><pubDate>Fri, 11 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://mattkeeter.com/projects/spectrum</guid></item><item><title>In Which a Post Is Written to Introduce Murphy's Lab</title><link>https://murphyslab.ca/notes/to-introduce-murphys-lab/</link><description>“An Introduction is to introduce people” so rather than to introduce my “Lab” I really ought to introduce myself. Well then, here goes:
Hello, I&amp;rsquo;m Murphy, and I am a Ph.D. student. I&amp;rsquo;m student of science — chemistry in particular — and of life. I like to think about Questions, big and small. Being a “Lab” means that this is really about experimenting with ideas. Thought experiments? Perhaps. Even just seeing where the questions and answers lead.</description><author>Murphy's Lab Notes on Murphy's Lab</author><pubDate>Thu, 10 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://murphyslab.ca/notes/to-introduce-murphys-lab/</guid></item><item><title>KGH: NO ACCESS allocations in V$SGASTAT – buffer cache within shared pool!</title><link>https://tanelpoder.com/2009/09/09/kgh-no-access-allocations-in-vsgastat-buffer-cache-within-shared-pool/</link><description>&lt;p&gt;Since Oracle 10.2 it’s valid to say that buffer cache can be stored inside shared pool.&lt;/p&gt;
&lt;p&gt;Now you may think I’m crazy, but read until the end of the post – no matter how crazy I may sound – I have &lt;strong&gt;proof&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Here it is:&lt;/p&gt;
&lt;p&gt;Few years ago I started noticing a strange memory allocation in shared pool (in V$SGASTAT), called &lt;strong&gt;KGH: NO ACCESS&lt;/strong&gt;.&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; select * from v$sgastat where name = 'KGH: NO ACCESS';&lt;/pre&gt;
&lt;pre&gt;POOL         NAME                            BYTES
------------ -------------------------- ----------
shared pool  &lt;strong&gt;KGH: NO ACCESS               10513696

&lt;/strong&gt;SQL&amp;gt;&lt;/pre&gt;
&lt;p&gt;You see, some 10 MB of memory in shared pool has been allocated for something called KGH: NO ACCESS.&lt;/p&gt;
&lt;p&gt;Ok, lets see where this memory resides inside shared pool. We can use x$ksmsp view for that, this view has a line in it for each chunk of memory allocated from it (and also the free chunks), along the reasons (or comments) for what reason these chunks were allocated.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 09 Sep 2009 18:05:49 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/09/09/kgh-no-access-allocations-in-vsgastat-buffer-cache-within-shared-pool/</guid></item><item><title>WYSIWYGPro Helper and tutorial for CakePHP</title><link>https://www.brightball.com/articles/wysiwygpro-helper-and-tutorial-for-cakephp</link><description>I couldn't find any resources on setting up WYSIWYGPro with Cake so I developed this helper along with instructions for total integration with your system. If you've never used WYSIWYGPro, you should check out the demos. I've tried every WYSIWYG editor out there and none of the other ones even come close as far as I'm concerned.</description><author>Brightball Articles</author><pubDate>Wed, 09 Sep 2009 05:41:00 GMT</pubDate><guid isPermaLink="true">https://www.brightball.com/articles/wysiwygpro-helper-and-tutorial-for-cakephp</guid></item><item><title>Smoother CakePHP date/time fields with jQuery</title><link>https://www.brightball.com/articles/smoother-cakephp-datetime-fields-with-jquery</link><description>While working with the date/time input fields in Cake I got tired of having to select 3/6 drop down boxes to choose all of the date/time information and specifically of having to select 3/6 drop down boxes if I decided to clear the date. A little bit of jQuery will clear this right up though.</description><author>Brightball Articles</author><pubDate>Wed, 09 Sep 2009 04:50:00 GMT</pubDate><guid isPermaLink="true">https://www.brightball.com/articles/smoother-cakephp-datetime-fields-with-jquery</guid></item><item><title>Automatically loading your ACL tables</title><link>https://www.brightball.com/articles/automatically-loading-your-acl-tables</link><description>If you've spent anytime wanting to use ACL on your applications, you know how tedious it can be to manually enter your entire controller and action structure. This Task will handle finding and loading or updating all of those for you whenever you run it from the command line.</description><author>Brightball Articles</author><pubDate>Wed, 09 Sep 2009 04:02:00 GMT</pubDate><guid isPermaLink="true">https://www.brightball.com/articles/automatically-loading-your-acl-tables</guid></item><item><title>?uestlove and Better Time Management</title><link>https://jonpauluritis.com/articles/questloves-theory-of-time-management/</link><description>&lt;p&gt;So I was reading this &lt;a href="http://www.esquire.com/features/man-at-his-best/q-and-a/questlove-roots-interview-0513"&gt;esquire article&lt;/a&gt; … and I stumbled onto a particularly good little nugget:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mr. Ahmir Khalib Thompson (a.k.a. ?uestlove) believes that a human being can really only do 4 things a day (possibly as many as 6, but 4 is the reality).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As an example here is what was going on the day that he did that interview with esquire (the numbers were post quote):&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Today I worked out.&lt;/li&gt;
&lt;li&gt;I had to edit the book.&lt;/li&gt;
&lt;li&gt;I’ve had rehearsals for the Prince show this week, too. Actually, I’m doing two books. The memoir [Mo' Meta Blues, out next month] and a coffee-table book on Soul Train.&lt;/li&gt;
&lt;li&gt;the esquire interview, and the interview was taking place just before he played a gig at Brooklyn bowl (tickets sold out in 45 seconds).&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3&gt;So What? Who Cares?&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;In my limited experience on this planet I have come to realize that information from non-traditional sources can be a billion times more valuable,&lt;/li&gt;
&lt;li&gt;I find this theory as a decent working model for time management.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In regard to information from non-traditional sources. Traditionally, if someone was concerned with “time management” what they might do is go to their bookstore or amazon and purchase the top-recommended or rate books about “time management.” Here are the flaws: 1) the books are written to make money. I won’t say that this immediately negates everything as being skewed by the almightily dollar, but it plays a factor. If you have a decision to make in a book and one option will tell the complete truth and the other option will tell enough truth but make more money, the “more money” option will always win.&lt;/p&gt;
&lt;p&gt;Non-traditional sources don’t have the loaded agenda because it is not directly related to their livelihood. 2) Expert status in something doesn’t necessarily make you a competent teacher 3) Information on topics like as time-management are frequently commoditized (meaning they all use the same body of research, statistics, strategies, and talking points, though usually with a sight spin). This commoditization means that the people writing the books are really just re-writing rather than synthesizing information.&lt;/p&gt;
&lt;p&gt;On the other hand, &lt;strong&gt;?uestlove is the perfect source for information on time-management&lt;/strong&gt;. The guy is outrageously busy. Over 200 music credits (albums, compilations, writing, arrangement, or production), over 60 television or movie credits not including the Jimmy Fallon show, The Roots are the house band for the Jimmy Fallon show, almost 50,000 Tweets, he teaches at NYU for FUN, has has collaborated with Nike on footwear, he is working on multiple books, organizes a music festival once a year in Philadelphia. &lt;a href="http://www.discogs.com/artist/Ahmir+'%3Fuestlove'+Thompson"&gt;Discography here&lt;/a&gt;, &lt;a href="http://www.imdb.com/name/nm0859821/"&gt;IMDB&lt;/a&gt;, &lt;a href="https://twitter.com/questlove"&gt;His Twitter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So yea, he knows how to get the most out of his time. Which brings me to point number 2:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;?uestlove’s theory of time management is a good functional theory for how to construct your day.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I have run it against my own goal tracking and task lists (I have kept very detailed tracking during certain periods of my career) and sure enough he’s right. 4 things that will have a major impact on your life is pretty hard to do all the way in one day. I may soon adapt it, but at the moment I am adopting it and see how it plays out.&lt;/p&gt;</description><author>JonPaulUritis.com</author><pubDate>Wed, 09 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jonpauluritis.com/articles/questloves-theory-of-time-management/</guid></item><item><title>FEMA Demands Money From Baldwin County</title><link>https://solomon.io/fema-demands-money-from-baldwin-county/</link><description>The Federal Emergency Management Agency has questioned whether funds allocated to Baldwin County were used properly for post-hurricane cleanup.</description><author>Sam Solomon</author><pubDate>Wed, 09 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/fema-demands-money-from-baldwin-county/</guid></item><item><title>String localization with dynamic content in CakePHP</title><link>https://www.brightball.com/articles/string-localization-with-dynamic-content-in-cakephp</link><description>Cake has a wonderful shell script function built into it called extract that will run through your code and create a .po file full of all of the text contained within your __('My text here') calls. You can then pass these files onto to translators to modify them for your languages. When you want to add variables though, you have to break it up into pieces which may change the context of the phrase. Here's a way around that.</description><author>Brightball Articles</author><pubDate>Wed, 09 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.brightball.com/articles/string-localization-with-dynamic-content-in-cakephp</guid></item><item><title>PublishableBehavior for CakePHP</title><link>https://www.brightball.com/articles/publishablebehavior-for-cakephp</link><description>PublishableBehavior allows the use of datetime fields for start and end ranges on content. Included functionality allows for checking published status, toggling to published / unpublished status, and adding conditions to a find to properly filter those results.</description><author>Brightball Articles</author><pubDate>Wed, 09 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.brightball.com/articles/publishablebehavior-for-cakephp</guid></item><item><title>Why the enterprise cant reach consumers</title><link>/2009/09/07/Why-the-enterprise-cant-reach-consumers/</link><description>&lt;p&gt;Most of my working career has been in what many would call an enterprise environment. Corporate structure well in place at most of them and in those cases any development followed closely to a waterfall methodology. You laid out requirements strictly and then built to those requirements. You essentially had nothing to show until you got to the end product.&lt;/p&gt;
&lt;p&gt;Having been in the valley for several years and interacting with some startups and in other settings, I&amp;rsquo;ve seen a very opposite mindset. The &amp;ldquo;release early, release often&amp;rdquo; concept. First you never have clear requirements when dealing with anything a startup should be tackling, if it&amp;rsquo;s a very clear easy to solve problem, then someone else will have already tackled it. If you&amp;rsquo;re doing something new, which you should be you can&amp;rsquo;t gauge how users react, until you actually have something in front of them.&lt;/p&gt;
&lt;p&gt;A prime example would be twitter. Twitter was a simple concept, yet it has been done before in many ways, what&amp;rsquo;s the difference in blogging and twitter? Well twitter requires you&amp;rsquo;re shorter, has no title, just content, and centralizes the data. It actually incredibly reduced what the user could do, and in doing that created new and broader functionality.&lt;/p&gt;
&lt;p&gt;As a more general principle users don&amp;rsquo;t know what they want. Users will complain about how gmail doesn&amp;rsquo;t have folders, but they use folders in outlook only because they can&amp;rsquo;t properly search. If you take away something from a user, they&amp;rsquo;re going to complain about it. This is fine, it&amp;rsquo;s not a problem, as long as they didn&amp;rsquo;t actually use the feature, and there&amp;rsquo;s other steps you can use to manage this backlash.&lt;/p&gt;
&lt;p&gt;But I&amp;rsquo;d believe the over arching key is that you can&amp;rsquo;t ask users what they want. If you presume to know you&amp;rsquo;re going to be wrong, so what does this mean. This means that you build something and you launch it. You don&amp;rsquo;t test it in user groups, you don&amp;rsquo;t test it in a lab, you don&amp;rsquo;t test it in an invite only beta, you launch it. You launch for users, and if they don&amp;rsquo;t like it, you haven&amp;rsquo;t upset thousands of customers because you don&amp;rsquo;t have that many. In consumer land you can launch something without anyone knowing who you are, and then truly test how users will respond, this is far more powerful than the traditional model used in enterprise. It&amp;rsquo;s the reason most of the biggest sites used today are emergent from startups and similar environments, because they built themselves on what users want.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Tue, 08 Sep 2009 06:21:08 GMT</pubDate><guid isPermaLink="true">/2009/09/07/Why-the-enterprise-cant-reach-consumers/</guid></item><item><title>Presenting, Appirater</title><link>https://arashpayan.com/blog/2009/09/07/presenting-appirater/</link><description>Like most developers, I&amp;rsquo;m not thrilled with the way the App Store presents my apps. There are several problems, but in particular, I really don&amp;rsquo;t like the user review system. It&amp;rsquo;s biased towards bad reviews, and that ends up hurting sales (there are odd exceptions to this). The only time a user is reminded or asked to rate an app is when you delete it, and you probably don&amp;rsquo;t care for the app if you&amp;rsquo;re deleting it.</description><author>Arash Payan</author><pubDate>Tue, 08 Sep 2009 05:59:48 GMT</pubDate><guid isPermaLink="true">https://arashpayan.com/blog/2009/09/07/presenting-appirater/</guid></item><item><title>How to succeed in the workplace? Go to lunch!</title><link>/2009/09/06/How-to-succeed-in-the-workplace-Go-to-lunch/</link><description>&lt;p&gt;Something I learned very early on in my working career, not so much from my experiences but from observing the results of others, was to engage at a social level as early possible. This doesn&amp;rsquo;t mean you have to take time after 5:00 to get to know someone, the best opportunity exists every single day during what you would already do, lunch! Everyone usually takes a break and eats lunch during the day, usually there&amp;rsquo;s two groups in an office. Those that always go out, and those that bring their lunch or meet others for lunch or maybe even work through it. If you notice those in the first group in your office my guess it&amp;rsquo;s usually easier for them to get things done, they&amp;rsquo;re normally a little more in touch with things that are going on. Especially if you can manage to branch out a little and go outside of the people you work with every moment of the day.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s generally one thing when you come to work and do you&amp;rsquo;re job. But no matter how large or small the company you can&amp;rsquo;t entirely separate the work from the personal, and personalities come out and it becomes some form of factor. Yes, most people are professional, but at the end of the day you&amp;rsquo;re more likely to help someone that you like even if you&amp;rsquo;re busy, than someone you don&amp;rsquo;t. Maybe you have a 50-50 chance of being liked, but I&amp;rsquo;d say by being disliked you&amp;rsquo;re not going to get help any slower really.&lt;/p&gt;
&lt;p&gt;I know there&amp;rsquo;s a few people reading this and thinking, this is fine, but I don&amp;rsquo;t really want to spend money on eating out every day. In my experience the extra knowledge you gain is well worth the price. When you through an executive level person, a developer, a sales guy, a marketing person, and some middle management into a single lunch outing, all come away with a lot of insight into area&amp;rsquo;s of the business they had little exposure to. This come&amp;rsquo;s back to my post about &lt;!-- raw HTML omitted --&gt;leaders and developers&lt;!-- raw HTML omitted --&gt;, if the people in your business only understand what they do and nothing outside you&amp;rsquo;re as a whole going to be less effective. Most people in your company don&amp;rsquo;t think this way, by doing it you&amp;rsquo;ll become more effective than the average person.&lt;/p&gt;
&lt;p&gt;And to think, it all starts with something as simple as going out to lunch. It&amp;rsquo;s the reason that from day 1, to being a veteran in a company, when someone asks &amp;ldquo;Do you have plans for lunch?&amp;rdquo; 90% of the time my answer is &amp;ldquo;No, when do you want to go?&amp;rdquo;&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Mon, 07 Sep 2009 03:20:45 GMT</pubDate><guid isPermaLink="true">/2009/09/06/How-to-succeed-in-the-workplace-Go-to-lunch/</guid></item><item><title>Setting up VHOSTS using XAMPP/Apache in Windows</title><link>https://thomashunter.name/posts/2009-09-05-setting-up-vhosts-using-xampp-or-apache-in-windows</link><author>Thomas Hunter II</author><pubDate>Sat, 05 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-09-05-setting-up-vhosts-using-xampp-or-apache-in-windows</guid></item><item><title>Toomer's Ten Welcome Downtown</title><link>https://solomon.io/toomers-ten-welcome-downtown/</link><description>Morgan Thacker/ Associate Photo Editor Most people who have ventured downtown at night realize that parking spots are scarce.</description><author>Sam Solomon</author><pubDate>Thu, 03 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/toomers-ten-welcome-downtown/</guid></item><item><title>ssh to easyname account</title><link>https://www.databasesandlife.com/ssh-to-easyname-account/</link><description>&lt;p&gt;My colleagues have just released a feature on &lt;a href="http://www.easyname.eu/" rel="noopener noreferrer" target="_blank"&gt;www.easyname.eu&lt;/a&gt; where I work – it&amp;rsquo;s an automated domain-registration and web-hosting service – that you can &amp;ldquo;ssh&amp;rdquo; (log in) to your easyname filespace account. I think that&amp;rsquo;s cool – I don&amp;rsquo;t know of many web hosting companies where that feature is offered!&lt;/p&gt;
&lt;p&gt;(I didn&amp;rsquo;t program the feature – neither the front-end nor the back-end – but I just released it, so I would have been responsible for any problems – although there weren&amp;rsquo;t any&amp;hellip;.)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 03 Sep 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/ssh-to-easyname-account/</guid></item><item><title>GNU HttpTunnel: Como saltarse un proxy HTTP</title><link>https://danielpecos.com/2009/09/02/gnu-httptunnel-como-saltarse-un-proxy-http/</link><description>&lt;p&gt;Creo que es la primera vez que posteo sobre una aplicación, pero creo que en este caso merece la pena hacerlo. Se trata de GNU HttpTunnel, una pequeña aplicación que crea un túnel HTTP sobre el que podemos meter cualquier servicio. ¿Ventajas? Pues que al ser HTTP, si nos encontramos en una red que solo tiene salida a Internet mediante un proxy HTTP, con esta aplicación (y un PC fuera de la red), podemos salir de la red con el servicio que más nos interese.&lt;/p&gt;
&lt;img alt="HTTP Tunnel" class="aligncenter size-full" height="116" src="https://danielpecos.com/assets/2009/09/httptunnel.gif" title="HTTP Tunnel" width="300" /&gt;
&lt;p&gt;Aquí va el chuletario:&lt;/p&gt;
&lt;p&gt;En el PC al otro lado del proxy (fuera de la red) ejecutamos:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ hts -w -F host_remoto:puerto_remoto puerto_local_servidor
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;y en el cliente (detrás del proxy) ejecutamos:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ htc -P ip_proxy:puerto_proxy -F puerto_local_cliente ip_servidor:puerto_local_servidor
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Por ejemplo, si quisiera crear un tunel HTTP para el SSH que tengo en mi servidor de casa (cosa muy útil, por si tuviera que abrir nuevos túneles ;-)), tendría que ejecutar el siguiente comando en dicha máquina:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ hts -w -F localhost:22 7022
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;lo cual crearía un tunel a la expera de conexión en el puerto 8022 del servidor (este puerto tendría que hacerlo accesible desde internet, en caso de que nos encontremos detras de un router sin NAT), y en la máquina desde la que me quiero conectar ejecuto:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ htc -P ip_proyx:80 -F 22 ip_servidor:7022
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;de forma que ahora al conectarme al puerto 22 de la máquina local, realmente me estoy conectando al puerto 22 del servidor de mi casa.&lt;/p&gt;
&lt;p&gt;Pues espero que os sea útil!&lt;/p&gt;
&lt;p&gt;Un saludo!&lt;/p&gt;
&lt;p&gt;Más info:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.nocrew.org/software/httptunnel.html"&gt;http://www.nocrew.org/software/httptunnel.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.gnu.org/software/httptunnel/httptunnel.html"&gt;http://www.gnu.org/software/httptunnel/httptunnel.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Wed, 02 Sep 2009 15:41:25 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2009/09/02/gnu-httptunnel-como-saltarse-un-proxy-http/</guid></item><item><title>Oracle 11gR2 has been released – and with column oriented storage option</title><link>https://tanelpoder.com/2009/09/01/oracle-11gr2-has-been-released-and-with-column-oriented-storage-option/</link><description>&lt;p&gt;You may already have noticed that Oracle 11gR2 for Linux is available for &lt;a href="http://www.oracle.com/technology/software/products/database/index.html"&gt;download&lt;/a&gt; on Oracle.com website, with &lt;a href="http://www.oracle.com/pls/db112/homepage"&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And this document ends speculation about whether Oracle 11.2 will support column-oriented storage – yes it will:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.oracle.com/technology/products/database/oracle11g/pdf/oracle-database-11g-release2-overview.pdf"&gt;http://www.oracle.com/technology/products/database/oracle11g/pdf/oracle-database-11g-release2-overview.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;However, this is apparently available on Exadata storage only as a new error message below indicates:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ORA-64307: hybrid columnar compression is only supported in tablespaces residing on Exadata storage&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cause: An attempt was made to use hybrid columnar compression on unsupported storage.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 01 Sep 2009 21:07:05 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/09/01/oracle-11gr2-has-been-released-and-with-column-oriented-storage-option/</guid></item><item><title>Mac Tips you may not know</title><link>https://caiustheory.com/mac-tips-you-may-not-know/</link><description>&lt;p&gt;Here are some mac tips I know and consider &amp;ldquo;basic&amp;rdquo; mac knowledge, but no-one else seems to know.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;exposé&lt;/strong&gt; key is on modern mac keyboards, looks like a load of squares on the F3 key.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;⌘ + Exposé key&lt;/strong&gt; =&amp;gt; Show Desktop&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;⌃ + Exposé key&lt;/strong&gt; =&amp;gt; Show Application Windows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;⌥ + Brightness keys&lt;/strong&gt; =&amp;gt; Open Displays prefpane in System Preferences.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;⌥ + Exposé key&lt;/strong&gt; =&amp;gt; Open Exposé &amp;amp; Spaces prefpane in System Preferences.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;⌥ + Dashboard key&lt;/strong&gt; =&amp;gt; Open Exposé &amp;amp; Spaces prefpane in System Preferences.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;⌥ + Keyboard Backlight keys&lt;/strong&gt; =&amp;gt; Open Keyboard prefpane in System Preferences. &lt;em&gt;(Only on laptops with keyboard backlighting.)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;⌥ + Volume keys&lt;/strong&gt; =&amp;gt; Open Sound prefpane in System Preferences.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;⇧ + Volume keys&lt;/strong&gt; =&amp;gt; Adjust the volume with the feedback noise setting toggled. If you normally have feedback &amp;ldquo;blips&amp;rdquo;, it&amp;rsquo;ll be silent. Or vice versa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;⌥ + ⇧ + Volume keys&lt;/strong&gt; =&amp;gt; Adjust the volume in 1/4 of a usual step.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;⌃ + Eject key&lt;/strong&gt; =&amp;gt; Shows the Shut Down dialog.&lt;/li&gt;
&lt;li&gt;In the shut down dialog, hit &lt;em&gt;R&lt;/em&gt; to restart, &lt;em&gt;S&lt;/em&gt; to sleep, &lt;em&gt;⎋&lt;/em&gt; to cancel.&lt;/li&gt;
&lt;li&gt;(Pretty much) Any dialog that pops up, hitting &lt;em&gt;⎋&lt;/em&gt; will push the &amp;ldquo;cancel&amp;rdquo; button.&lt;/li&gt;
&lt;li&gt;In &amp;ldquo;Show all windows&amp;rdquo; or &amp;ldquo;Show application windows&amp;rdquo; exposé modes, hit the tab key to cycle through applications.&lt;/li&gt;
&lt;li&gt;Hit the space bar in exposé to activate &amp;ldquo;Quick Look&amp;rdquo; + windows pop up to 100% size as you mouse over them.&lt;/li&gt;
&lt;li&gt;Hold down &lt;strong&gt;⌃ + ⇧&lt;/strong&gt; when mousing over the dock to toggle magnification whilst the keys are down.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Alternative title &lt;a href="http://www.petercooper.co.uk/"&gt;Peter Cooper&lt;/a&gt; suggested, &amp;ldquo;A miscellany of input device co-ordinations to modulate the response of Apple&amp;rsquo;s task preview and switching subsystem&amp;rdquo;)&lt;/em&gt;&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Mon, 31 Aug 2009 16:08:48 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/mac-tips-you-may-not-know/</guid></item><item><title>A Box Full of Angels</title><link>https://mbutler.org/a-box-full-of-angels/</link><description>Box Full of Angels is a fictional operating system based on a paper by Aaron Sachs (Assistant Professor of Media, Technologies, and Culture at Saint Mary’s College of California) concerning the influence of religious belief on the writings of Marshall McLuhan and Walter Benjamin. I created this Flash application as a digital edition of his [&amp;#8230;]</description><author>mbutler</author><pubDate>Sun, 30 Aug 2009 06:43:06 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/a-box-full-of-angels/</guid></item><item><title>latch: cache buffers chains latch contention – a better way for finding the hot block</title><link>https://tanelpoder.com/2009/08/27/latch-cache-buffers-chains-latch-contention-a-better-way-for-finding-the-hot-block/</link><description>&lt;div&gt;
  &lt;p&gt;
    Here's a treat for Oracle performance professionals and geeks who are looking for more systematic ways for cache buffers chains (CBC) latch contention troubleshooting. Cache buffers chains latches are taken when a process wants to walk through a cache buffer hash chain, looking if the block with required DBA (data block address) is in buffer cache. If the block happens to be in cache, then in most cases it has to be pinned first before use and unpinned after use, to make sure no-one else can perform an incompatible operation on that block at the same time. The modification of pin structures (pinning/unpinning) is also protected by CBC latches.
  &lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 27 Aug 2009 12:37:08 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/08/27/latch-cache-buffers-chains-latch-contention-a-better-way-for-finding-the-hot-block/</guid></item><item><title>Zooming, panning, rotating with GLUT</title><link>https://bastian.rieck.me/blog/2009/zooming_panning_rotating_with_glut/</link><description>&lt;p&gt;By pure chance, I stumbled over a true gem for all programming related to computer graphics: &lt;a href="http://www.nigels.com/glt/gltzpr"&gt;GLT ZPR, a mouse manipulation module for C or C++ GLUT/OpenGL programs&lt;/a&gt; (verbatim quote).&lt;/p&gt;
&lt;p&gt;The module is very easy to use: Simply &lt;code&gt;#include &amp;quot;zpr.h&amp;quot;&lt;/code&gt; and call &lt;code&gt;zprInit();&lt;/code&gt; &lt;em&gt;after&lt;/em&gt; you called &lt;code&gt;glutCreateWindow&lt;/code&gt; and have made your local initializations (i.e. special setup for the window etc.). Now you are able to use the left, right, and middle mouse buttons to rotate, pan, and zoom—just make sure that your &lt;code&gt;GL_MODELVIEW&lt;/code&gt; matrix is not reset.&lt;/p&gt;
&lt;p&gt;You can download the program from &lt;a href="http://www.nigels.com/glt/gltzpr"&gt;Nigel Stewart&amp;rsquo;s homepage&lt;/a&gt; (I am not linking directly to the sources because I do not want to be impolite). By the way: It is also possible to specify selection and pick functions, but I have not tried this functionality yet.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Wed, 26 Aug 2009 22:23:45 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2009/zooming_panning_rotating_with_glut/</guid></item><item><title>Select COUNT(*) and COUNT(column) are different things!</title><link>https://tanelpoder.com/2009/08/21/select-count-and-countcolumn-are-different-things/</link><description>&lt;p&gt;Every now and then I see someone wondering why Oracle is “returning wrong results” for some count queries when counting using COUNT(column_name) instead of COUNT(*) or COUNT().&lt;/p&gt;
&lt;p&gt;Oracle is actually returning correct results, its just that sometimes the people asking the questions haven’t realized that COUNT(column) is something semantically different from COUNT(*).&lt;/p&gt;
&lt;p&gt;COUNT(*) operation counts &lt;strong&gt;all rows&lt;/strong&gt; fed to it by execution plan branch under it.&lt;/p&gt;
&lt;p&gt;COUNT(column) operation on the other hand counts &lt;strong&gt;all non-null values&lt;/strong&gt; &lt;strong&gt;in that column&lt;/strong&gt; from rows fed to it by execution plan branch under it.&lt;/p&gt;
&lt;p&gt;And here’s a little example:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 22 Aug 2009 06:58:19 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/08/21/select-count-and-countcolumn-are-different-things/</guid></item><item><title>Never close PHP class files with the "?&amp;gt;" tag</title><link>https://www.databasesandlife.com/never-close-php-class-files-with-the-tag/</link><description>&lt;p&gt;When developing PHP, a front-end PHP file will include other files: classes, utilities, etc.&lt;/p&gt;
&lt;p&gt;When writing those class files, one also needs to use the &lt;strong&gt;&lt;/strong&gt; tags are necessary to introduce PHP to the &amp;ldquo;exceptional circumstance&amp;rdquo; that one might actually want to program some PHP.)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 21 Aug 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/never-close-php-class-files-with-the-tag/</guid></item><item><title>the power to yield a better console interface</title><link>https://purpleidea.com/blog/2009/08/20/the-power-to-yield-a-better-console-interface/</link><description>&lt;p&gt;as part of a different project, i needed to duplicate some existing terminal magic in python. what i needed to write was something similar to the getch() function in curses. it can be found in: ncurses*/base/lib_getch.c after doing an: apt-get source libncurses5&lt;/p&gt;
&lt;p&gt;what&amp;rsquo;s the magic? i need to stay in a continuous loop reading from the file descriptor, however i want to return periodically so that gobject doesn&amp;rsquo;t block and the interface can remain responsive. enter: yield, who comes in and saves the day. see the accompanying code for specifics.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Thu, 20 Aug 2009 16:15:51 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/08/20/the-power-to-yield-a-better-console-interface/</guid></item><item><title>Changing MySQL Default Character Sets</title><link>https://thomashunter.name/posts/2009-08-20-changing-mysql-default-character-sets</link><description>How to change your default character sets in MySQL.</description><author>Thomas Hunter II</author><pubDate>Thu, 20 Aug 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2009-08-20-changing-mysql-default-character-sets</guid></item><item><title>Impressed</title><link>https://boyter.org/2009/08/impressed/</link><description>&lt;p&gt;Was playing around with Python for a second there. I learnt about one of the new &amp;ldquo;multiprocessing&amp;rdquo; features. Its pretty standard stuff, but thankfully does what I actually wanted Python to always do. Allow me to multiprocess any Map function. Below is the sample code (2.6 and above only sorry).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-python"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #f92672;"&gt;from&lt;/span&gt; multiprocessing &lt;span style="color: #f92672;"&gt;import&lt;/span&gt; Pool
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #f92672;"&gt;import&lt;/span&gt; time
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #66d9ef;"&gt;def&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;f&lt;/span&gt;(x):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  &lt;span style="color: #66d9ef;"&gt;return&lt;/span&gt; x&lt;span style="color: #f92672;"&gt;*&lt;/span&gt;x
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #66d9ef;"&gt;if&lt;/span&gt; __name__ &lt;span style="color: #f92672;"&gt;==&lt;/span&gt; &lt;span style="color: #e6db74;"&gt;'__main__'&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  p &lt;span style="color: #f92672;"&gt;=&lt;/span&gt; Pool(processes&lt;span style="color: #f92672;"&gt;=&lt;/span&gt;&lt;span style="color: #ae81ff;"&gt;2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  r &lt;span style="color: #f92672;"&gt;=&lt;/span&gt; range(&lt;span style="color: #ae81ff;"&gt;1&lt;/span&gt;,&lt;span style="color: #ae81ff;"&gt;10000000&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  t &lt;span style="color: #f92672;"&gt;=&lt;/span&gt; time&lt;span style="color: #f92672;"&gt;.&lt;/span&gt;time()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  p&lt;span style="color: #f92672;"&gt;.&lt;/span&gt;map(f,r)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  print time&lt;span style="color: #f92672;"&gt;.&lt;/span&gt;time()&lt;span style="color: #f92672;"&gt;-&lt;/span&gt;t&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><author>Ben E. C. Boyter</author><pubDate>Wed, 19 Aug 2009 03:04:10 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2009/08/impressed/</guid></item><item><title>Networking and better particles</title><link>https://etodd.io/2009/08/17/networking-and-better-particles/</link><description>&lt;p&gt;Network code is working reasonably well now. The server generates a unique MD5 hash (only six characters) for an entity, then broadcasts a packet to the clients instructing them to spawn an entity of the correct type, and assign the same hash as its ID. From then on, the server turns over the reigns to the entity's controller, which can send any information it wants in its own sandboxed data packet.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Mon, 17 Aug 2009 06:16:35 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/08/17/networking-and-better-particles/</guid></item><item><title>Alter system kill session and ORA-00031: session marked for kill</title><link>https://tanelpoder.com/2009/08/13/alter-system-kill-session-and-ora-00031-session-marked-for-kill/</link><description>&lt;p&gt;I’m sure you are all familiar with this situation:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; alter system kill session '152,33';
alter system kill session '152,33'
*
ERROR at line 1:
ORA-00031: session marked for kill&lt;/pre&gt;
&lt;p&gt;The session trying to issue the kill will hang for 60 seconds and then return this “session marked for kill” message. And the target session does not get killed at all.&lt;/p&gt;
&lt;p&gt;So why is that?&lt;/p&gt;
&lt;p&gt;The issue is in what this alter system kill command is doing. It’s not actually killing the target session (like kill -9 would do for OS processes). It just sets a bit in the target sessions state object, which marks that the target session should end. But its entirely up the target session to check this bit and act on it!&lt;/p&gt;
&lt;p&gt;So, intead of ALTER SYSTEM KILL SESSION, the command should look something like ALTER SYSTEM ASK SESSION TO COMMIT SUICIDE.&lt;/p&gt;
&lt;p&gt;All the kill session command is doing is ASK the target session to clean up and exit – via setting that bit.&lt;/p&gt;
&lt;p&gt;Now, normally the target sessions are nice and check that bit often enough in their code, act on it and die.&lt;/p&gt;
&lt;p&gt;But sometimes when the target session happens to be busy looping in some tight loop (due a bug perhaps) or is hung, then it never gets to check that “please die” bit and never exits.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 13 Aug 2009 10:22:27 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/08/13/alter-system-kill-session-and-ora-00031-session-marked-for-kill/</guid></item><item><title>Done with art for a while</title><link>https://etodd.io/2009/08/12/done-with-art-for-a-while/</link><description>&lt;p&gt;I've spent way too much time fooling with the Blender-Panda3D content pipeline, so I'm moving back to working on gameplay and coding.&lt;/p&gt;
&lt;p&gt;That being said, the art was fun while it lasted. Here's a sample of the results:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://etodd.io/assets/screen8.png"&gt;&lt;img alt="Wrestling with Blender pays off sometimes." class="size-large wp-image-18 " src="https://etodd.io/assets/screen8.png?w=1024" title="New arena map screenshot" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All art in this screenshot was created by me. The arena geometry enclosing the map was created by extruding individual faces of an icosphere. The texture maps were drawn in the excellent &lt;a href="http://inkscape.org" target="_blank"&gt;Inkscape&lt;/a&gt;, then touched up in the lightweight-but-useful &lt;a href="http://getpaint.net/" target="_blank"&gt;Paint.NET&lt;/a&gt;, then crunched by the incredibly flexible and powerful &lt;a href="http://www.crazybump.com/" target="_blank"&gt;CrazyBump&lt;/a&gt; for the normal maps. The whole process is recorded here for posterity:&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Thu, 13 Aug 2009 01:42:37 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/08/12/done-with-art-for-a-while/</guid></item><item><title>First major update</title><link>https://etodd.io/2009/08/12/first-major-update/</link><description>&lt;p&gt;Mmm. Been a while, hasn't it.&lt;/p&gt;
&lt;p&gt;Latest and greatest feature list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nifty particle effects for bullet impacts&lt;/li&gt;
&lt;li&gt;Decent AI pathfinding&lt;/li&gt;
&lt;li&gt;Grenades don't go through walls any more :D&lt;/li&gt;
&lt;li&gt;New test map with spiffy baked lighting courtesy of Blender&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Custom-made photoshop rusty grunge metal texture." class="size-full wp-image-4 " src="https://etodd.io/assets/metal-grunge.jpg" title="metal-grunge" /&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;Current project: revamping the orbital dock model seen on the front page screenshot. First up: my first shot at a rusty grungy metal texture.
Made from scratch in Photoshop in about a half hour with four layers of noise, airbrushing, blurring, burning, and dodging.&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Wed, 12 Aug 2009 06:14:37 GMT</pubDate><guid isPermaLink="true">https://etodd.io/2009/08/12/first-major-update/</guid></item><item><title>Women's Classic 5km Race</title><link>https://liza.io/womens-classic-5km-race/</link><description>&lt;p&gt;I ran my first race! And I finished!&lt;/p&gt;
&lt;p&gt;I showed up at Burswood at 7:30. I quickly gulped down my Endura and went to study the course. There were quite a few people there (200 racing in total for both the 5 and 10km plus their partners, families, and whatever other onlookers came).&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Tue, 11 Aug 2009 17:15:32 GMT</pubDate><guid isPermaLink="true">https://liza.io/womens-classic-5km-race/</guid></item><item><title>An interview with me</title><link>https://tanelpoder.com/2009/08/09/an-interview-with-me/</link><description>&lt;p&gt;&lt;a href="http://iggyfernandez.wordpress.com" target="_blank"&gt;Iggy Fernandez&lt;/a&gt; posted an interview with me (published in NoCOUG journal) on his blog.&lt;/p&gt;
&lt;p&gt;If you are interested in a little bit of my history and some more general (not-so-technical) thoughts of mine, check it out here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://iggyfernandez.wordpress.com/2009/08/08/great-expectations-an-interview-with-tanel-poder/" target="_blank"&gt;&lt;a href="http://iggyfernandez.wordpress.com/2009/08/08/great-expectations-an-interview-with-tanel-poder/"&gt;http://iggyfernandez.wordpress.com/2009/08/08/great-expectations-an-interview-with-tanel-poder/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 10 Aug 2009 04:56:46 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/08/09/an-interview-with-me/</guid></item><item><title>Loft Bed</title><link>https://www.mikekasberg.com/blog/2009/08/08/loft-bed.html</link><description>&lt;p&gt;When I searched for loft bed plans online, I didn’t find any freely available plans that I liked. I decided to make my own plans for a wooden loft bed, and I’m making these plans available for free.  These plans may be used &lt;strong&gt;and redistributed&lt;/strong&gt; freely under a &lt;a href="https://creativecommons.org/licenses/by-nc/3.0/us/" rel="license"&gt;Creative Commons Attribution-Noncommercial 3.0 United States License&lt;/a&gt; &lt;a href="https://creativecommons.org/licenses/by-nc/3.0/us/" rel="license"&gt;&lt;img alt="Creative Commons License" src="https://licensebuttons.net/l/by-nc/3.0/us/88x31.png" style="margin: 0; display: inline-block;" /&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;&lt;a href="https://www.mikekasberg.com/files/LoftBedPlans.pdf" target="_blank"&gt;plans&lt;/a&gt;&lt;/strong&gt; are available as a single page pdf. They’re not the most detailed plans available, and they don’t provide step-by-step instructions, but they should be sufficient if you’re comfortable with some basic tools. The bed’s designed so that the legs are attached with 8 bolts, and can be easily removed so that the legs store and travel flat. These plans are for a twin mattress, but can easily be adapted to other sizes. If you wanted, you could easily build a desk into the bed over the second ladder rungs.&lt;/p&gt;

&lt;p&gt;Disclaimer: I am not responsible for anything that might result from your use of these plans. By using these plans, you assume full responsibility for any consequences. These plans worked well for me, but I do not guarantee that they’ll work for you.&lt;/p&gt;</description><author>Mike Kasberg's Blog</author><pubDate>Sun, 09 Aug 2009 01:08:10 GMT</pubDate><guid isPermaLink="true">https://www.mikekasberg.com/blog/2009/08/08/loft-bed.html</guid></item><item><title>Quand je ne bosse pas je vole</title><link>https://blog.nobugware.com/post/2009/08/05/quand-je-ne-bosse-pas-je-vole/</link><description>Saitek Pro Flight Yoke et Saitek Pro Flight Rudder Pedals</description><author>Fabrice Aneche</author><pubDate>Thu, 06 Aug 2009 05:17:35 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/08/05/quand-je-ne-bosse-pas-je-vole/</guid></item><item><title>iPhone and iPod blog</title><link>https://blog.nobugware.com/post/2009/08/04/iphone-and-ipod-blog/</link><description>Some informations for iphone developers, and iphone owners. We have created a new iphone &amp;amp; ipod blog in french, with a dedicated developer category: tout sur l&amp;rsquo;iphone (everything about the iPhone).
I will continue to write iphone development related posts here, mostly traducted from tout sur l&amp;rsquo;iphone, but if you are a french speaker I recommend you to read the blog first and his developer part which will be bigger.</description><author>Fabrice Aneche</author><pubDate>Tue, 04 Aug 2009 18:09:06 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/08/04/iphone-and-ipod-blog/</guid></item><item><title>Python 2.6 in Gentoo stable</title><link>https://blog.nobugware.com/post/2009/07/31/python-26-gentoo-stable/</link><description>It was so long but python 2.6 is now in Gentoo stable, here is how to upgrade.
First emerge &amp;ndash;sync your ports tree (as of 31st July 2009).
Then update your ports _emerge -upvD world _remove -p when ready.
When emerging python-2.6.2 it will become the main python, as you can see with eselect python list.
So you only have to rebuild every ports that rely on python, simple ? Yes with python-update</description><author>Fabrice Aneche</author><pubDate>Fri, 31 Jul 2009 17:37:34 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/07/31/python-26-gentoo-stable/</guid></item><item><title>Education Network Restrictions</title><link>https://caiustheory.com/education-network-restrictions/</link><description>&lt;p&gt;&lt;em&gt;This is a re-run of an old post I took offline in an old server move and hadn&amp;rsquo;t re-published.&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Having been on two college systems and various university networks, I&amp;rsquo;m just amazed at the levels of freedom you have on some, and how locked down others are.&lt;/p&gt;
&lt;p&gt;Take the first university network I ever used for example. It was pretty much totally open, to the point that I could game quite freely, and the administrator only picked me up because I was logged in as admin and not a normal user. (I didn&amp;rsquo;t have an account for that machine.)&lt;/p&gt;
&lt;p&gt;Going from that to my school network was a very big shock as it was moderately filtered through third party filtering software. This meant you couldn&amp;rsquo;t go on the usual &lt;a href="http://en.wikipedia.org/wiki/NSFW" title="Not Safe for Work"&gt;NSFW&lt;/a&gt; stuff, but still had access to other sites that could be seen as bad, such as proxy sites, or IRC java Clients for example.&lt;/p&gt;
&lt;p&gt;Having moved from my old (slightly crass) college to my new one, its interesting how filtered this one is. You can&amp;rsquo;t seem to go on a site with &lt;code&gt;proxy&lt;/code&gt; or &lt;code&gt;irc&lt;/code&gt; in the URL, except &lt;em&gt;clean&lt;/em&gt; sites like the &lt;a href="http://www.bbc.co.uk/" title="British Broadcasting Corporation"&gt;BBC&lt;/a&gt; or &lt;a href="http://wikipedia.org/" title="Wikipedia in English"&gt;Wikipedia&lt;/a&gt;. The Proxy searching only came about through looking for web based IRC solutions.&lt;/p&gt;
&lt;p&gt;Personally I think the universities have got it right. With all the students they have, they just limit the things they definitely have to, and allow everything else. (Blacklisting technique.) Both colleges seem to do the opposite - block everything until its verified and unblocked. (Whitelisting technique.)&lt;/p&gt;
&lt;p&gt;The way I see it, the problem with the white listing technique is that people will always find a way around whatever restrictions are in place. For instance, I&amp;rsquo;m locked out of all of my web based email sites, so I can&amp;rsquo;t email anyone. Its not the not being able to send that bothers me, its the not being able to save text that I&amp;rsquo;ve written in college to a website to then retrieve it from home that annoys me.&lt;/p&gt;
&lt;p&gt;So how did I work around this restriction? Well I remembered that Google had bought &lt;a href="http://writely.com/" title="Collaborative Writing on the web"&gt;Writely&lt;/a&gt; at some point recently, so one quick sign in later and I&amp;rsquo;ve got my own little area where I can save, organise and edit text based files. All I have to do when I get home is login, copy / paste into my email client and hit send.&lt;/p&gt;
&lt;p&gt;One word that isn&amp;rsquo;t blocked yet is &lt;code&gt;blog&lt;/code&gt;, so I can still post this, and edit my posts. However, I&amp;rsquo;m still writing it in &lt;a href="http://writely.com/" title="Collaborative Writing on the web"&gt;Writely&lt;/a&gt; and checking my &lt;a href="http://daringfireball.net/projects/markdown/" title="Markup HTML without HTML"&gt;markdown&lt;/a&gt; syntax is correct with &lt;a href="http://daringfireball.net/projects/markdown/dingus/" title="Preview and Practice MarkDown &amp;amp; SmartyPants"&gt;Dingus&lt;/a&gt;. The writely interface is just that much nicer than notepad.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Fri, 31 Jul 2009 17:14:16 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/education-network-restrictions/</guid></item><item><title>SSH tunneling for web surfing</title><link>https://bastian.rieck.me/blog/2009/ssh_tunneling_for_web_surfing/</link><description>&lt;p&gt;If you cannot trust your local network for some reason, SSH tunneling can help you. All you need is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A machine &lt;em&gt;outside&lt;/em&gt; your current local network, for example a server with a static IP address in some data centre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ssh&lt;/strong&gt; (on your local machine)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;proxy server&lt;/strong&gt; (on the remote machine)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My remote machine runs Debian, and I decided to install &lt;code&gt;tinyproxy&lt;/code&gt;, a tiny HTTP proxy server. Configuration is done quickly by adding the following lines to &lt;code&gt;/etc/tinyproxy/tinyproxy.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Port 	8888
Listen  127.0.0.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I would recommend commenting out any other &lt;code&gt;Listen&lt;/code&gt; lines. Assuming you do not want to run an open proxy, you only want &lt;code&gt;tinyproxy&lt;/code&gt; to listen locally. After editing the configuration file, restart the proxy via &lt;code&gt;/etc/init.d/tinyproxy restart&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On your local machine, execute the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh user@server.example.net -L 1234:localhost:8888 -N
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This forwards all traffic from your local port 1234 to the remote machine&amp;rsquo;s port 8888 (&lt;code&gt;localhost&lt;/code&gt; is needed because we configured the server to listen only to the loopback interface), which is where &lt;code&gt;tinyproxy&lt;/code&gt; waits for inputs.&lt;/p&gt;
&lt;p&gt;You may now tell &lt;a href="http://www.opera.com"&gt;your cool browser&lt;/a&gt; to use &lt;code&gt;localhost:1234&lt;/code&gt; as a proxy server—congratulations, your web traffic is now securely tunnelled to your remote machine.&lt;/p&gt;
&lt;p&gt;Addendum: In the command string from above, you can also use &lt;code&gt;-f&lt;/code&gt; to request ssh to go into the background.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Wed, 29 Jul 2009 17:37:39 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2009/ssh_tunneling_for_web_surfing/</guid></item><item><title>ssh hanging</title><link>https://purpleidea.com/blog/2009/07/29/ssh-hanging/</link><description>&lt;p&gt;i&amp;rsquo;m sure everyone who has used ssh has experienced this, but couldn&amp;rsquo;t put their finger on what was happening exactly. &lt;a href="http://www.snailbook.com/faq/background-jobs.auto.html"&gt;this&lt;/a&gt; article explains.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://m9rx.com/" target="_blank"&gt;hire James&lt;/a&gt; and his team at &lt;a href="https://m9rx.com/" target="_blank"&gt;m9rx corporation&lt;/a&gt;.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://mastodon.social/@purpleidea" target="_blank"&gt;follow James on Mastodon&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://twitter.com/intent/follow?screen_name=purpleidea" target="_blank"&gt;follow James on Twitter&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://github.com/sponsors/purpleidea/" target="_blank"&gt;support James on GitHub&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://www.patreon.com/purpleidea" target="_blank"&gt;support James on Patreon&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;
&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Wed, 29 Jul 2009 12:40:46 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/07/29/ssh-hanging/</guid></item><item><title>An ultimate solaris 10 jumpstart profile</title><link>https://blog.nobugware.com/post/2009/07/28/ultimate-solaris-10-jumpstart-profile/</link><description>After years of pain playing with Solaris 10 Jumpstart&amp;rsquo;s package clusters, I took some time to build an ultimate install profile for Solaris 10.
The available packages clusters are :
SUNWCrnet is Reduced Network Support Software Group. -&amp;gt; lack of everything, from bash to bzip SUNWCreq is Core System Support Software Group. -&amp;gt; lack of bash, manpages&amp;hellip; SUNWCuser is End User Solaris Software Group. -&amp;gt; include CDE Desktop, Mozilla, etc SUNWCprog is Developer Solaris Software Group.</description><author>Fabrice Aneche</author><pubDate>Wed, 29 Jul 2009 02:22:12 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/07/28/ultimate-solaris-10-jumpstart-profile/</guid></item><item><title>Yosemite July 2009</title><link>https://solomon.io/yosemite-july-2009/</link><description>Some family photos from our trip out to Yosemite.</description><author>Sam Solomon</author><pubDate>Tue, 28 Jul 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/yosemite-july-2009/</guid></item><item><title>Building apps from the echo chamber</title><link>/2009/07/23/Building-apps-from-the-echo-chamber/</link><description>&lt;!-- raw HTML omitted --&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 24 Jul 2009 03:20:04 GMT</pubDate><guid isPermaLink="true">/2009/07/23/Building-apps-from-the-echo-chamber/</guid></item><item><title>cheetah == fortran</title><link>https://purpleidea.com/blog/2009/07/21/cheetah-fortran/</link><description>&lt;p&gt;turns out the &lt;a href="http://www.cheetahtemplate.org/"&gt;cheetah&lt;/a&gt; python templating engine (2.0 since year 2006) is quite reminiscent of &lt;a href="http://en.wikipedia.org/wiki/Fortran"&gt;fortran&lt;/a&gt; (since the 1950&amp;rsquo;s) in their use of the &lt;strong&gt;#slurp&lt;/strong&gt; directive (cheetah) and the &lt;strong&gt;$&lt;/strong&gt; string. either one, when appended to the end of a string, remove the implicit newline which usually gets printed. it took me ages to figure out how to suppress newline printing back when i did someone&amp;rsquo;s fortran homework, now i&amp;rsquo;ve had to struggle with it all over again.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Tue, 21 Jul 2009 19:59:50 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/07/21/cheetah-fortran/</guid></item><item><title>[py]inotify, polling, gtk and gio</title><link>https://purpleidea.com/blog/2009/07/21/pyinotify-polling-gtk-and-gio/</link><description>&lt;p&gt;i have this software with a gtk mainloop, using dbus and all that fun stuff that seems to play together nicely. i know about the kernel &lt;a href="http://en.wikipedia.org/wiki/Inotify"&gt;inotify&lt;/a&gt; support, and i wanted it to get integrated with that above stack. i thought i was supposed to do it with &lt;a href="http://trac.dbzteam.org/pyinotify"&gt;pyinotify&lt;/a&gt; and &lt;a href="http://www.pygtk.org/pygtk2reference/gobject-functions.html#function-gobject--io-add-watch"&gt;io_add_watch&lt;/a&gt;, but on closer inspection into the pyinotify code it turns out that it seems to actually use &lt;a href="http://trac.dbzteam.org/pyinotify/browser/pyinotify.py"&gt;polling&lt;/a&gt;! (search for: select.poll)&lt;/p&gt;
&lt;p&gt;thinking i was confused, i emailed a friend to see if he could confirm my suspicions. we both weren&amp;rsquo;t 100% sure, a little searching later i was convinced when i found &lt;a href="http://www.tenshu.net/archives/2008/10/24/using-inotify-in-a-pygtk-application-without-pyinotify/"&gt;this&lt;/a&gt; blog posting. i&amp;rsquo;m surprised i didn&amp;rsquo;t find out about this sooner. in any case, my application seems to be happy now.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Tue, 21 Jul 2009 13:19:52 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/07/21/pyinotify-polling-gtk-and-gio/</guid></item><item><title>evanescent 0.3</title><link>https://purpleidea.com/blog/2009/07/14/evanescent-03/</link><description>&lt;p&gt;new &lt;a href="http://www.cs.mcgill.ca/~james/code/"&gt;evanescent&lt;/a&gt; released. get your tar balls today. now with pro dbus support, and happier than 0.2 in every way. please send in any patches and bug reports.&lt;/p&gt;
&lt;p&gt;ps: easy one line installation too!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://m9rx.com/" target="_blank"&gt;hire James&lt;/a&gt; and his team at &lt;a href="https://m9rx.com/" target="_blank"&gt;m9rx corporation&lt;/a&gt;.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://mastodon.social/@purpleidea" target="_blank"&gt;follow James on Mastodon&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://twitter.com/intent/follow?screen_name=purpleidea" target="_blank"&gt;follow James on Twitter&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://github.com/sponsors/purpleidea/" target="_blank"&gt;support James on GitHub&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://www.patreon.com/purpleidea" target="_blank"&gt;support James on Patreon&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;
&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Tue, 14 Jul 2009 17:53:30 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/07/14/evanescent-03/</guid></item><item><title>Leaders and Developers</title><link>/2009/07/13/Leaders-and-Developers/</link><description>&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Tue, 14 Jul 2009 08:56:16 GMT</pubDate><guid isPermaLink="true">/2009/07/13/Leaders-and-Developers/</guid></item><item><title>logging out of $SESSION</title><link>https://purpleidea.com/blog/2009/07/13/logging-out-of-session/</link><description>&lt;p&gt;the &lt;a href="http://www.cs.mcgill.ca/~james/code/"&gt;software&lt;/a&gt; (evanescent) that i&amp;rsquo;m working on is supposed to log out the user from its current X session. originally i had some yucky looking code that ran a kill on gnome-session, which quickly got replaced with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-fallback"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;os.system('gnome-session-save --logout-dialog')
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;i&amp;rsquo;ve decided this was still a little crufty, so i&amp;rsquo;ve recently replaced this with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-fallback"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;bus = dbus.SessionBus()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;remote_object = bus.get_object('org.gnome.SessionManager', '/org/gnome/SessionManager')
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;# specify the dbus_interface in each call
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;remote_object.Logout(0, dbus_interface='org.gnome.SessionManager')
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;# or create an Interface wrapper for the remote object
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;#iface = dbus.Interface(remote_object, 'org.gnome.SessionManager')
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;#iface.Logout(0)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;# introspection is automatically supported
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;#print remote_object.Introspect(dbus_interface='org.freedesktop.DBus.Introspectable')
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.gnome.org/~mccann/gnome-session/docs/gnome-session.html#org.gnome.SessionManager.Logout"&gt;documentation&lt;/a&gt; can be found, although it took a little digging. the only catch is that this is gnome specific, and you need different code for kde, and each other DE. thanks to &lt;a href="http://www.purinchu.net/wp/2009/06/12/oh-fun/"&gt;&lt;a href="http://www.purinchu.net/wp/2009/06/12/oh-fun/"&gt;http://www.purinchu.net/wp/2009/06/12/oh-fun/&lt;/a&gt;&lt;/a&gt; for the kde version of the above.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Mon, 13 Jul 2009 13:05:05 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/07/13/logging-out-of-session/</guid></item><item><title>Starting Jetty: FAILED</title><link>https://www.databasesandlife.com/starting-jetty-failed/</link><description>&lt;p&gt;It is literally 23:19 on a Sunday and I&amp;rsquo;ve been working through the weekend to get a release out of some software I&amp;rsquo;m working on.&lt;/p&gt;
&lt;p&gt;The Java application webserver (Jetty) was taking a long time to restart each time I did a change, so for some reason I thought I&amp;rsquo;d experiment with some new command-line options. Probably not the right time to do that.&lt;/p&gt;
&lt;p&gt;Normally I would type&lt;/p&gt;
&lt;pre&gt;$ sudo  /etc/init.d/jetty6 restart
Stopping Jetty: OK
Starting Jetty: OK
&lt;/pre&gt;
&lt;p&gt;and everything would be good. I tried typing&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Sun, 12 Jul 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/starting-jetty-failed/</guid></item><item><title>How to detect when a cursor was closed from SQL trace output?</title><link>https://tanelpoder.com/2009/07/09/how-to-detect-when-a-cursor-was-closed-from-sql-trace-output/</link><description>&lt;p&gt;After Randolf&amp;rsquo;s comment on my last post about &lt;a href="https://tanelpoder.com/2009/07/09/identify-the-sql-statement-causing-those-wait-x-lines-in-a-top-truncated-sql-tracefile" target="_blank"&gt;identifying cursor SQL text from sql trace file&lt;/a&gt; I think one thing needs elaboration.&lt;/p&gt;
&lt;p&gt;I mentioned earlier in this post that this cursor dumping technique works “as long as the cursor of interest is still open”.&lt;/p&gt;
&lt;p&gt;So how do you know whether this cursor of interest is still open or has been closed and that slot reused by some other statement instead? You would not want to get misled to wrong SQL statement…&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 09 Jul 2009 14:50:07 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/07/09/how-to-detect-when-a-cursor-was-closed-from-sql-trace-output/</guid></item><item><title>Identify the SQL statement causing those WAIT #X lines in a (top-truncated) sql tracefile</title><link>https://tanelpoder.com/2009/07/09/identify-the-sql-statement-causing-those-wait-x-lines-in-a-top-truncated-sql-tracefile/</link><description>&lt;p&gt;Have you experienced such situation before?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A performance issue happens in production – let say some batch job has ran way over time&lt;/li&gt;
&lt;li&gt;You enable SQL trace on the problem session (while the problem is already ongoing)&lt;/li&gt;
&lt;li&gt;In tracefile you see lots of waits (or execs or fetches) caused by cursor &lt;em&gt;X&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;You grep for “PARSING IN CURSOR #&lt;em&gt;X&lt;/em&gt;” above the waits in the tracefile but don’t find the corresponding parsing entry nor SQL text there (this is a “top-truncated” tracefile)&lt;/li&gt;
&lt;li&gt;You really want to know which SQL corresponds to all those WAIT #X/FETCH #X lines&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;An example output would be here:&lt;/p&gt;
&lt;pre&gt;&lt;strong&gt;WAIT #2&lt;/strong&gt;: nam='db file scattered read' ela= 25190 file#=1 block#=863 blocks=2 obj#=113 tim=548703769817
&lt;strong&gt;WAIT #2&lt;/strong&gt;: nam='db file sequential read' ela= 51397 file#=1 block#=864 blocks=1 obj#=113 tim=548719015123
&lt;strong&gt;WAIT #2&lt;/strong&gt;: nam='db file scattered read' ela= 348553 file#=1 block#=5969 blocks=8 obj#=113 tim=548732315966
&lt;strong&gt;WAIT #2&lt;/strong&gt;: nam='db file scattered read' ela= 32275 file#=1 block#=5972 blocks=5 obj#=113 tim=548771073619

&lt;/pre&gt;
&lt;p&gt;In above case the cursor #2 was causing all these WAIT lines. The problem is, that if the cursor #2 was parsed &lt;em&gt;before&lt;/em&gt; the SQL trace was enabled, we won’t have the SQL statement dumped in the tracefile! Thus, by looking into the tracefile only, there’s no way to know which exact SQL statement is causing those waits.&lt;/p&gt;
&lt;p&gt;If this was a single long-running SQL statement, you could easily look into v$session.sql_hash_value and map this to SQL text using v$sql. However things aren’t as simple when you have lots of PARSE,EXEC,FETCH calls of &lt;em&gt;other&lt;/em&gt; statements happening in between (as the sql_hash_value would be constantly changing due each such call.&lt;/p&gt;
&lt;p&gt;Also, other v$ (or x$) views don’t show you anything about the WAIT #X mapping to SQL statement as this stuff is not stored in SGA.&lt;/p&gt;
&lt;p&gt;As a workaround, you could take the obj# and map it back to object number the (io) wait happened on and make some guesses about SQL statement from there. Or you could dump the datablock using file# and block# numbers, look at the data and make some further guesses about SQL statement, but guesses are no good as they can be wrong and misleading – and you would be dependent on &lt;em&gt;luck&lt;/em&gt; in your troubleshooting. But you want to be &lt;em&gt;systematic&lt;/em&gt;, right? ;-)&lt;/p&gt;
&lt;p&gt;So, in case of the top-truncated tracefile, if you want to be sure which WAIT# (or FETCH#,EXEC#) lines correspond to which SQL statement, we need to use some other way than v$views or trying to guess based on bits in the tracefile.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 09 Jul 2009 12:44:40 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/07/09/identify-the-sql-statement-causing-those-wait-x-lines-in-a-top-truncated-sql-tracefile/</guid></item><item><title>Jabber is the new ICQ</title><link>https://bastian.rieck.me/blog/2009/jabber_is_the_new_icq/</link><description>&lt;p&gt;Almost every person I know has an IM account. Most of them are still regular users of ICQ, despite of all its &lt;a href="http://en.wikipedia.org/wiki/ICQ#Criticism"&gt;shortcomings&lt;/a&gt;. I do not want to make any boring, technical comparisons between the two protocols. Jabber/XMPP is &lt;em&gt;clearly&lt;/em&gt; superior to ICQ for a many reasons. However, game theory shows us that &amp;ldquo;superior product&amp;rdquo; does not imply &amp;ldquo;market dominance&amp;rdquo;. Let me try to convince &lt;strong&gt;you&lt;/strong&gt; to create a Jabber account. Here are some questions you might have.&lt;/p&gt;
&lt;h1 id="where-can-i-get-a-suitable-client"&gt;Where can I get a suitable client?&lt;/h1&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/List_of_XMPP_client_software"&gt;Wikipedia to the rescue!&lt;/a&gt; My short suggestions: Use &lt;a href="http://www.pidgin.im"&gt;Pidgin&lt;/a&gt; (Windows, Linux, BSD) or &lt;a href="http://www.adium.im"&gt;Adium&lt;/a&gt; (MacOS X).&lt;/p&gt;
&lt;h1 id="why-should-i-want-to-use-another-protocol"&gt;Why should I want to use another protocol?&lt;/h1&gt;
&lt;p&gt;Because you will need it, eventually. Chances are, you already use a multiprotocol messenger, such as &lt;a href="http://www.ceruleanstudios.com"&gt;Trillian Pro&lt;/a&gt; or &lt;a href="http://www.miranda-im.org"&gt;Miranda&lt;/a&gt; for Windows, &lt;a href="http://www.pidgin.im"&gt;Pidgin&lt;/a&gt; or &lt;a href="http://kopete.kde.org"&gt;Kopete&lt;/a&gt; for Linux/Unix, &lt;a href="http://www.adium.im"&gt;Adium&lt;/a&gt; or &lt;a href="http://www.apple.com/macosx/what-is-macosx/ichat.html"&gt;iChat&lt;/a&gt; for MacOS X. If you are not yet using a multiprotocol messenger, you should consider using one. It makes life easier, because you can still maintain your ICQ account (I am doing this, for example, because there are some people who simply refuse to use anything but ICQ. You are not one of them *handwave*).&lt;/p&gt;
&lt;p&gt;You should also think about this: ICQ is owned by AOL. They want to make money—which is OK, I suppose. Hence, the original client for the ICQ network is &lt;strong&gt;Adware&lt;/strong&gt;. Of course, AOL does not want you to use &lt;em&gt;any other client&lt;/em&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[…] You agree not to (1) create or use any software other than the Software provided by ICQ or by America Online, Inc., or any affiliate thereof, to enter your ICQ number and password or to access the ICQ Services, without the express written authorization of ICQ; […]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Indeed, AOL changed the protocol several times in the past, thereby kicking out users that did not use the original client. Do you really want to be a part of that? There is also the &amp;ldquo;default argument&amp;rdquo; against ICQ, citing their user policy. Basically, AOL owns the right to use &lt;em&gt;your&lt;/em&gt; messages for all purposes (see &lt;a href="http://en.wikipedia.org/wiki/ICQ#Privacy_and_copyright"&gt;the Wikipedia article&lt;/a&gt; for more details). Most people will probably respond to that along the lines of &amp;ldquo;My conversations are not &lt;strong&gt;that&lt;/strong&gt; relevant&amp;rdquo;. That may be true, but for me, this passage reeks of intolerable business practices.&lt;/p&gt;
&lt;h1 id="alright-stop-how-do-i-get-an-account"&gt;Alright, stop. How do I get an account?&lt;/h1&gt;
&lt;p&gt;Good news first: You will not have to memorize a wimpy UIN. Instead, you will get a nice address of the form &lt;code&gt;_nickname_@_server_.tld&lt;/code&gt; (this also leads to less SPAM in your messenger).&lt;/p&gt;
&lt;p&gt;If you happen to have a Google Mail account, you can use Google Talk. This means that people can contact you using your e-mail address. Google has &lt;a href="http://www.google.com/talk/otherclients.html"&gt;instructions for some clients on their web page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In any other case, you must decide about a server. You probably want to use either &lt;a href="http://www.jabber.org"&gt;jabber.org&lt;/a&gt;. There are of course others, such as &lt;a href="http://jabber.ccc.de"&gt;jabber.ccc.de&lt;/a&gt;. For simplicity, I am describing the steps for jabber.org. I trust you will be able to read the necessary documents for other servers.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Register an account using the &lt;a href="http://register.jabber.org"&gt;web interface of jabber.org&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Start the appropriate wizard in your client program that allows you to add a new account. If you do not know how to do this, the documentation could be helpful. The &lt;a href="http://www.google.com/talk/otherclients.html"&gt;steps for Google Talk&lt;/a&gt; might also prove useful (of course, the account details will have to be changed).&lt;/li&gt;
&lt;li&gt;Enter your nickname (&lt;code&gt;_nickname_@jabber.org&lt;/code&gt;) and your password. For security, you should enable SSL/TLS, if that is an option in your client.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="are-there-any-alternatives-to-using-two-protocols"&gt;Are there any alternatives to using two protocols?&lt;/h1&gt;
&lt;p&gt;Yes, there is at least one: Jabber transports. Some servers allow you to treat contacts from other IM networks as normal Jabber contacts and &amp;ldquo;transport&amp;rdquo; your messages transparently to the other network. Since the server needs to support it, it might not be available everywhere. This little article does not cover transports, so you have to ask a search engine of your choice. Sorry.&lt;/p&gt;
&lt;h1 id="done-what-now"&gt;Done. What now?&lt;/h1&gt;
&lt;p&gt;See, that was not so hard.&lt;/p&gt;
&lt;p&gt;If you want so, you may now drop me a note via Jabber (&lt;a href="mailto:canmore@jabber.org"&gt;canmore@jabber.org&lt;/a&gt;). Do not forget to convert your friends, for they, too, shall bask in the glory of Jabber!&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Wed, 08 Jul 2009 01:38:02 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2009/jabber_is_the_new_icq/</guid></item><item><title>Use Trac source browser with Jira</title><link>https://blog.nobugware.com/post/2009/06/28/use-trac-browser-jira/</link><description>Jira is a nice product for issue tracking linked to a SCM repository, yes it&amp;rsquo;s not free software but they provide a 5$ starter license for 5 users.
But Jira lacks of a part that trac is doing very well, source browser, in facts Atlassian provides one: Fisheye but it&amp;rsquo;s really expensive
Simply go to your Jira Administration, on the left click on Subversion Repositories (this menu appears after the installation of the subversion&amp;rsquo;s plugin).</description><author>Fabrice Aneche</author><pubDate>Sun, 28 Jun 2009 19:46:35 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/06/28/use-trac-browser-jira/</guid></item><item><title>(Secret) Preview of Oracle 12g CBO leaked from Oracle labs…</title><link>https://tanelpoder.com/2009/06/27/secret-preview-oracle-12g-cbo-leaked-from-oracle-labs/</link><description>&lt;p&gt;After doing my seminar in Spain last month, one of the attendees sent me a secret note about what the CBO would look like in Oracle 12g. Apparently it&amp;rsquo;s re-engineered from ground and completely different from anything we’ve seen before. It goes beyond being automatic, intelligent and auto-tuning, it’s actually edible too!&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt="The New CBO" src="https://tanelpoder.com/files/images/cbo.jpg" title="CBO" /&gt;
  &lt;figcaption&gt;The New CBO&lt;/figcaption&gt;
&lt;/figure&gt; 
&lt;p&gt;Thanks to John Ospino for sending me this insider-info ;)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 27 Jun 2009 10:13:54 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/06/27/secret-preview-oracle-12g-cbo-leaked-from-oracle-labs/</guid></item><item><title>Oracle memory troubleshooting, Part 3: Automatic top subheap dumping with heapdump</title><link>https://tanelpoder.com/2009/06/24/oracle-memory-troubleshooting-part-3-automatic-top-subheap-dumping-with-heapdump/</link><description>&lt;p&gt;If you haven’t read them – here are the previous articles in Oracle memory troubleshooting series: &lt;a href="https://tanelpoder.com/2009/01/02/oracle-memory-troubleshooting-part-1-heapdump-analyzer/"&gt;Part 1&lt;/a&gt;, &lt;a href="https://tanelpoder.com/2009/06/04/ora-04031-errors-and-monitoring-shared-pool-subpool-memory-utilization-with-sgastatxsql/"&gt;Part 2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In Oracle, the HEAPDUMP dump event in Oracle allows you to dump various heap contents to tracefile. With adding the “level” parameter to this dump event, you can specify which heaps to dump.&lt;/p&gt;
&lt;p&gt;Julian Dyke has documented most of the levels &lt;a href="http://juliandyke.com/Diagnostics/Dumps/HEAPDUMP.html"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are two little known, but useful level bits for heapdumps – bit 0x10000000 and 0x20000000. These allow Oracle to dump top-5 biggest subheaps in a heap recursively.&lt;/p&gt;
&lt;p&gt;When bit 0x10000000 is enabled then Oracle dumps the top-5 subheaps inside any heap its instructed to dump.&lt;/p&gt;
&lt;p&gt;When bit 0x20000000 is enabled then Oracle dumps the top-5 subheaps as mentioned above, but in addition Oracle recursively dumps top-5 subheaps inside any subheaps automatically dumped above. So instead of dumping 1 level of subheaps, Oracle recursively dumps 2 levels if such sub-sub-heaps exist.&lt;/p&gt;
&lt;p&gt;This reduces the amount of manual work – as Oracle can drill down towards the root cause automatically and dump the relevant information.&lt;/p&gt;
&lt;p&gt;Here’s a little test case:&lt;/p&gt;
&lt;p&gt;I set the serverout buffer unlimited (Oracle 10.2+) so that Oracle would buffer unlimited amount of dbms_output data in UGA (this is also a “good” way for using up all the memory in your server so you use “unlimited” with care).&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; set serverout on size unlimited
SQL&amp;gt;
SQL&amp;gt; exec for i in 1..1000000 loop dbms_output.put_line(lpad('x',10,'x')); end loop;

&lt;/pre&gt;
&lt;p&gt;Without the recursive top subheap dumping we would see output like this (after processing the tracefile with &lt;a href="https://tanelpoder.com/2009/01/02/oracle-memory-troubleshooting-part-1-heapdump-analyzer/"&gt;heapdump_analyzer&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;This is the usual way for dumping a target process private heap:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; oradebug setorapid 35
Oracle pid: 35, Unix process pid: 26457, image: oracle@linux03
SQL&amp;gt; oradebug dump heapdump 1     &lt;em&gt;&amp;lt;-- level 1 dumps all top level private heaps (top-level PGA,UGA and call heap)&lt;/em&gt;
Statement processed.
SQL&amp;gt;

&lt;/pre&gt;
&lt;p&gt;And the output is:&lt;/p&gt;
&lt;pre&gt;[oracle@linux03 trace]$ heapdump_analyzer LIN11G_ora_26486.trc

  -- Heapdump Analyzer v1.00 by Tanel Poder (  )

  Total_size #Chunks  Chunk_size,        From_heap,       Chunk_type,  Alloc_reason
  ---------- ------- ------------ ----------------- ----------------- -----------------
    55065316     841      65476 ,     top uga heap,         freeable,  session heap          &lt;em&gt;&amp;lt;-- session heap is allocated from top uga heap&lt;/em&gt;
    41218392    2517      16376 ,     session heap,         freeable,  koh-kghu sessi      &lt;em&gt;&amp;lt;-- koh-kghu session heap is allocated from session heap&lt;/em&gt;
    13650208     836      16328 ,     session heap,             free,
       65520       1      65520 ,         pga heap,             free,
       65476       1      65476 ,     top uga heap,         recreate,  session heap
       57736      14       4124 ,     session heap,         freeable,  kxsFrame4kPage
...

&lt;/pre&gt;
&lt;p&gt;We would see that most of the uga memory (roughly 41MB of 55MB) is allocated for for some reason “koh-kghu sessi”. This is a session heap where from allocations for various objects like PL/SQL variables, records and collections are done. So when we’d want to drill down and see inside that heap we could use the HEAPDUMP_ADDR dump with that heap descriptors address as parameter to look inside it.&lt;/p&gt;
&lt;p&gt;However with these extra bits mentioned above, Oracle can automatically dump us the contents of biggest subheaps inside the heaps we asked it to dump:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 24 Jun 2009 15:31:07 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/06/24/oracle-memory-troubleshooting-part-3-automatic-top-subheap-dumping-with-heapdump/</guid></item><item><title>Jim Sparks - Alien Abductee</title><link>https://liza.io/jim-sparks-alien-abductee/</link><description>&lt;p&gt;C and I went to see Jim Sparks talk about his alien abduction experiences last night. It was a very interesting 4 hour talk and even though C is always extremely skeptical about these things, he found it interesting and says he enjoys going to these types of talks with me as it&amp;rsquo;s nice to see another point of view. I might write some more specifics on the talk later, but overall it was well worth the $30 per ticket for the most part. I&amp;rsquo;d definitely go again. Oh and they are putting together a group type thing to go to this place and try to communicate with aliens in a few weeks. I am so signing up.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sun, 21 Jun 2009 16:39:17 GMT</pubDate><guid isPermaLink="true">https://liza.io/jim-sparks-alien-abductee/</guid></item><item><title>Capitalise "ringer" on the iPhone Volume Bezel</title><link>https://caiustheory.com/capitalise-ringer-on-the-iphone-volume-bezel/</link><description>&lt;p&gt;&lt;strong&gt;Backstory:&lt;/strong&gt; Got myself a first generation iPhone second hand and unlocked it to work on my existing T-Mobile (Official iPhone network in the UK is O2.) Noticed after a week or so of owning it that when you change the volume on the phone, the bezel that comes up says &amp;ldquo;ringer&amp;rdquo; across the top. But when you have headphones plugged in, it says &amp;ldquo;Headphones&amp;rdquo;. &lt;em&gt;(Note the capitalisation difference.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now I&amp;rsquo;m not usually bothered by stuff like this (honest!) but as soon as I&amp;rsquo;d noticed the &lt;em&gt;&amp;ldquo;bug&amp;rdquo;&lt;/em&gt;, I couldn&amp;rsquo;t help but think of it everytime I changed the volume, whether I was looking at the screen or not. Seeing as I&amp;rsquo;m running a jailbroken phone, and therefore have SSH access to it, I figured the string would be defined in a .strings file somewhere in the &lt;code&gt;/System&lt;/code&gt; folder. And I&amp;rsquo;d be able to change it!&lt;/p&gt;
&lt;p&gt;Fast-forward a few months and I install the iPhone OS 3.0 update (jailbroken of course), and finally decide to turn the phone&amp;rsquo;s SSH server on and go looking for the setting. To do so I figured I&amp;rsquo;d just need &lt;code&gt;grep&lt;/code&gt; installed on the phone - I could copy the file itself to my mac and edit it there.&lt;/p&gt;
&lt;p&gt;So I connect to the phone, have a poke around the filesystem and then start a search to find the correct file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# On the iPhone
$ cd /System/Library/
$ grep -r &amp;quot;ringer&amp;quot; *
Binary file CoreServices/SpringBoard.app/English.lproj/SpringBoard.strings matches
Binary file CoreServices/SpringBoard.app/M68AP.plist matches
Binary file CoreServices/SpringBoard.app/SpringBoard matches
Binary file Frameworks/CFNetwork.framework/CFNetwork matches
Binary file Frameworks/CFNetwork.framework/da.lproj/Localizable.strings matches
Binary file Frameworks/CFNetwork.framework/no.lproj/Localizable.strings matches
Binary file Frameworks/Foundation.framework/da.lproj/URL.strings matches
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At which point I stopped the grep search (&lt;code&gt;^C&lt;/code&gt;) because I know the home screen of the iPhone is the SpringBoard.app, so I figured it would be in the file &lt;code&gt;SpringBoard.app/English.lproj/SpringBoard.strings&lt;/code&gt;. Making sure to have SSH enabled on your mac, a simple &lt;code&gt;scp CoreServices/SpringBoard.app/English.lproj/SpringBoard.strings user@your_mac.local:&lt;/code&gt; later and the file is sat in my home folder on my mac.&lt;/p&gt;
&lt;p&gt;Switching to the mac, now I try and open the file with TextMate, only to realise its in binary format. I need it in the nice XML format to edit it, so a quick google later and I&amp;rsquo;ve found a hint on &lt;a href="http://macosxhints.com"&gt;MacOSXHints&lt;/a&gt; telling me how to convert from &lt;a href="http://www.macosxhints.com/article.php?story=20050430105126392"&gt;binary to xml plist format&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# On the mac
$ plutil -convert xml1 SpringBoard.strings
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then opening the file in TextMate was a bit more successful! I can actually understand what its defining now. Search through the file for &amp;ldquo;ringer&amp;rdquo; and I found the following lines:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;key&amp;gt;&lt;/span&gt;RINGER_VOLUME&lt;span class="nt"&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;ringer&lt;span class="nt"&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Change the &amp;ldquo;ringer&amp;rdquo; to &amp;ldquo;Ringer&amp;rdquo; between the &lt;code&gt;&amp;lt;string&amp;gt;&lt;/code&gt; and my editing work is complete! Yes, it really is that easy to edit an interface string that is defined in a &lt;code&gt;.string&lt;/code&gt;. Now I just need to convert the file back to binary, and copy it back to the phone. Converting back to binary file is one line, just change the &lt;code&gt;xml1&lt;/code&gt; in the previous command to &lt;code&gt;binary1&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# On the mac
$ plutil -convert binary1 SpringBoard.strings
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then scp it back to the phone, make a backup of the existing file, and overwrite the existing file with the new one I&amp;rsquo;ve edited:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# On the iPhone
$ cd ~
$ scp user@mac_name.local:SpringBoard.strings .
$ cd /System/Library/CoreServices/SpringBoard.app/English.lproj/
$ mv SpringBoard.strings SpringBoard.strings.bak
$ cp ~/SpringBoard.strings SpringBoard.strings
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then restart the phone, either in the usual manner or just run &lt;code&gt;reboot&lt;/code&gt; on the phone via SSH. Lo and behold once its rebooted and I changed the volume, it read &amp;ldquo;Ringer&amp;rdquo;!&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screenshot of Volume bezel" src="http://caius.name/images/ringer.jpg" /&gt;&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sat, 20 Jun 2009 18:44:04 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/capitalise-ringer-on-the-iphone-volume-bezel/</guid></item><item><title>Mentoring</title><link>/2009/06/16/Mentoring/</link><description>&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Wed, 17 Jun 2009 03:29:38 GMT</pubDate><guid isPermaLink="true">/2009/06/16/Mentoring/</guid></item><item><title>convert .ai to .svg using uniconverter</title><link>https://purpleidea.com/blog/2009/06/16/convert-ai-to-svg-using-uniconverter/</link><description>&lt;p&gt;needed to convert a proprietary vector .ai adobe illustrator file to the open .svg format, inkscape failed, ai2svg failed, uniconverted worked! yay. very easy just do:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ uniconverter Martlet.ai Martlet.svg&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://m9rx.com/" target="_blank"&gt;hire James&lt;/a&gt; and his team at &lt;a href="https://m9rx.com/" target="_blank"&gt;m9rx corporation&lt;/a&gt;.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://mastodon.social/@purpleidea" target="_blank"&gt;follow James on Mastodon&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://twitter.com/intent/follow?screen_name=purpleidea" target="_blank"&gt;follow James on Twitter&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://github.com/sponsors/purpleidea/" target="_blank"&gt;support James on GitHub&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://www.patreon.com/purpleidea" target="_blank"&gt;support James on Patreon&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;
&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Tue, 16 Jun 2009 14:32:23 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/06/16/convert-ai-to-svg-using-uniconverter/</guid></item><item><title>Adding XHTML output validation to Cucumber stories</title><link>https://caiustheory.com/adding-xhtml-output-validation-to-cucumber-stories/</link><description>&lt;p&gt;At the 2009 &lt;a href="http://barcampleeds.com/"&gt;Barcamp Leeds&lt;/a&gt; I attended a talk by &lt;a href="http://neilcrosby.com/vcard/"&gt;Neil Crosby&lt;/a&gt; where he talked about automated testing, and about how he felt there was a gap in everything that people were testing. Everyone has unit tests, and people are doing full stack testing too, but no-one (so he feels) does XHTML/CSS/JS validation as part of their automated test suite. And certainly from what I&amp;rsquo;ve seen on the mainstream Ruby site&amp;rsquo;s about testing, I agreed with him.&lt;/p&gt;
&lt;p&gt;So after his talk I had a quick look at his &lt;a href="http://github.com/NeilCrosby/frontend-test-suite/tree/master"&gt;frontend test suite&lt;/a&gt;, and started wondering where exactly I would fit frontend validation testing into my workflow. Would it be part of my unit tests (RSpec), or part of the full stack tests (Cucumber)? As you&amp;rsquo;ve probably guessed by the title of this post, its ended up going into my cucumber tests. Since the initial play its been something I&amp;rsquo;ve mused about occasionally, but not something I&amp;rsquo;ve actively looked into how to implement as part of my test workflow.&lt;/p&gt;
&lt;p&gt;Fast-forward a few weeks from &lt;a href="http://barcampleeds.com/"&gt;Barcamp Leeds&lt;/a&gt; and I see a news article in my feed reader entitled &lt;a href="http://tenderlovemaking.com/2009/06/12/easy-markup-validation/"&gt;&amp;ldquo;Easy Markup Validation&amp;rdquo;&lt;/a&gt; which gets me hopeful someone&amp;rsquo;s solved this frontend validation thing easily for Rubyists. A quick read through and I&amp;rsquo;m sold on it and installing the gem. Opened an existing project I&amp;rsquo;m working on which has a fairly extensive test suite (both unit tests &amp;amp; full stack tests) and tried to slot the validation into my controller unit tests.&lt;/p&gt;
&lt;p&gt;Problem with doing this is by default RSpec-rails doesn&amp;rsquo;t generate the views in your controller specs. At that point I realised I was already generating the full page when I was doing a full stack test using &lt;a href="http://github.com/langalex/culerity/tree/master"&gt;culerity&lt;/a&gt; and &lt;a href="http://cukes.info/"&gt;cucumber&lt;/a&gt;. So why not just add a cucumber step in my stories to validate the HTML on each page I visit? Mainly because its not enough of a failure for this app to have invalid XHTML markup. Having valid markup would be nice, but I&amp;rsquo;d rather have it as a separate test to my stories in some way.&lt;/p&gt;
&lt;p&gt;Currently I just do that by only validating if &lt;code&gt;ENV[&amp;quot;VALIDATION&amp;quot;]&lt;/code&gt; is set to anything, so a normal run of my cucumber stories will just test the app does what its supposed to do. If I run them with &lt;code&gt;VALIDATION=true&lt;/code&gt; then it will check my markup is valid as well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;features/support/env.rb&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"markup_validity"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"VALIDATION"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;features/step_definitions/general_steps.rb&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;Then&lt;/span&gt; &lt;span class="s"&gt;%r/the page is valid XHTML/&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="vg"&gt;$browser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;should&lt;/span&gt; &lt;span class="n"&gt;be_xhtml_strict&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"VALIDATION"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;features/logging_in.feature&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-cucumber"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;Feature:&lt;/span&gt;&lt;span class="nf"&gt; Logging in
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; In order to do stuff
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; As a registered user
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; I want to login
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; &lt;/span&gt;&lt;span class="k"&gt;Scenario:&lt;/span&gt;&lt;span class="nf"&gt; Successful Login
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;&lt;/span&gt;&lt;span class="k"&gt; Given &lt;/span&gt;&lt;span class="nf"&gt;there is a user called "&lt;/span&gt;&lt;span class="s"&gt;Caius&lt;/span&gt;&lt;span class="nf"&gt;"
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; &lt;/span&gt;&lt;span class="k"&gt;When &lt;/span&gt;&lt;span class="nf"&gt;I goto the homepage
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; &lt;/span&gt;&lt;span class="k"&gt;Then &lt;/span&gt;&lt;span class="nf"&gt;the page is valid XHTML
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; &lt;/span&gt;&lt;span class="k"&gt;When &lt;/span&gt;&lt;span class="nf"&gt;I click on the "&lt;/span&gt;&lt;span class="s"&gt;Login&lt;/span&gt;&lt;span class="nf"&gt;" link
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; &lt;/span&gt;&lt;span class="k"&gt;Then &lt;/span&gt;&lt;span class="nf"&gt;I am redirected to the login page
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; &lt;/span&gt;&lt;span class="k"&gt;And &lt;/span&gt;&lt;span class="nf"&gt;the page is valid XHTML
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; &lt;/span&gt;&lt;span class="k"&gt;When &lt;/span&gt;&lt;span class="nf"&gt;I enter my login details
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; &lt;/span&gt;&lt;span class="k"&gt;And &lt;/span&gt;&lt;span class="nf"&gt;I click "&lt;/span&gt;&lt;span class="s"&gt;Login&lt;/span&gt;&lt;span class="nf"&gt;"
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; &lt;/span&gt;&lt;span class="k"&gt;Then &lt;/span&gt;&lt;span class="nf"&gt;I am redirected to my dashboard
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt; &lt;/span&gt;&lt;span class="k"&gt;And &lt;/span&gt;&lt;span class="nf"&gt;the page is valid XHTML
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now when I run &lt;code&gt;cucumber features/logging_in.feature&lt;/code&gt;, it doesn&amp;rsquo;t validate the HTML, it just makes sure that I can login as my user and that I am redirected to the right places. But if I run &lt;code&gt;VALIDATION=true cucumber features/logging_in.feature&lt;/code&gt;, then it &lt;em&gt;does&lt;/em&gt; validate my XHTML on the homepage, the login page and on the user&amp;rsquo;s dashboard. If it fails validation then it gives you a fairly helpful error message as to what it was expecting and what it found instead.&lt;/p&gt;
&lt;p&gt;From a quick run against a couple of stories in my app I discovered that I&amp;rsquo;ve not been wrapping form elements in an enclosing element, so they&amp;rsquo;ve been quickly fixed and now they validate. Now I realise this gem is only testing XHTML output, and doesn&amp;rsquo;t include CSS or JS validation, but from a quick peek at the gem&amp;rsquo;s source it should be fairly easy to add both of those in I think, although again they aren&amp;rsquo;t major errors for me yet in this app.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Tue, 16 Jun 2009 13:19:11 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/adding-xhtml-output-validation-to-cucumber-stories/</guid></item><item><title>LINX 65 Presentation</title><link>https://rob.sh/post/176/</link><description>&lt;p&gt;Further to my previous post - I presented this issue at LINX65 - video and slides can be found below.&lt;br /&gt;&lt;br /&gt;
&lt;a href="https://cdn.rob.sh/files/linx65-presentation.mp4"&gt;Video&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://cdn.rob.sh/files/LINX65-Rob-Shakir-Handling-BGP-Attribute-Errors.pdf"&gt;Fixed Slides&lt;/a&gt; - LINX&amp;rsquo;s PowerPoint install seems to have corrupted my slides on the day.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div align="center"&gt;
&lt;a href="https://cdn.rob.sh/files/LINX65-Rob-Shakir-Handling-BGP-Attribute-Errors.pdf"&gt;&lt;img src="https://cdn.rob.sh/img/linx65-slides.png" style="border: 1px solid black;" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
Comments and feedback are most welcome.</description><author>rob.sh</author><pubDate>Mon, 15 Jun 2009 03:01:49 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/176/</guid></item><item><title>Takeaways from Consulting</title><link>/2009/06/13/Takeaways-from-Consulting/</link><description>&lt;!-- raw HTML omitted --&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Take ownership of the process&lt;!-- raw HTML omitted --&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;!-- raw HTML omitted --&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Sun, 14 Jun 2009 06:46:39 GMT</pubDate><guid isPermaLink="true">/2009/06/13/Takeaways-from-Consulting/</guid></item><item><title>Hibernate error means the complete opposite of what it says, due to wording error</title><link>https://www.databasesandlife.com/my-favourite-hibernate-error/</link><description>&lt;p&gt;The following XML:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;one-to-many type="OtherClass"/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;delivers the following error:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Error parsing XML: Attribute &amp;ldquo;type&amp;rdquo; must be declared for element type &amp;ldquo;one-to-many&amp;rdquo;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This looks like a perfectly self-explanatory error, however looking at the file, the element &lt;em&gt;does&lt;/em&gt; have a &amp;ldquo;type&amp;rdquo; attribute. What should one do?&lt;/p&gt;
&lt;p&gt;At the time I first encountered this, I had only just introduced the &amp;ldquo;type&amp;rdquo; attribute. What happens if I change the attribute name to &amp;ldquo;fsdjkfdk&amp;rdquo;?&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;one-to-many fsdjkfdk="OtherClass"/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The error is now:&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 10 Jun 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/my-favourite-hibernate-error/</guid></item><item><title>Using Perfsheet and TPT scripts for solving real life performance problems</title><link>https://tanelpoder.com/2009/06/09/using-perfsheet-and-tpt-scripts-for-solving-real-life-performance-problems/</link><description>&lt;p&gt;&lt;a href="http://karlarao.wordpress.com"&gt;Karl Arao&lt;/a&gt; has written a nice blog entry where he used also some of my tools for visualizing and understanding performance of a RAC cluster suddenly gone slow. He presents a systematic approach he used for gathering &lt;em&gt;evidence&lt;/em&gt; and also hopefully you notice that having the ability to easily visualize performance data (with &lt;a href="https://tanelpoder.com/2008/12/28/performance-visualization-made-easy-perfsheet-20-beta/"&gt;PerfSheet&lt;/a&gt; for example) can be very helpful and time saving when troubleshooting non-trivial problems.&lt;/p&gt;
&lt;p&gt;Check his blog entry out here:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 10 Jun 2009 01:27:52 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/06/09/using-perfsheet-and-tpt-scripts-for-solving-real-life-performance-problems/</guid></item><item><title>A (not so) safe betting strategy for winning at roulette</title><link>https://blog.tafkas.net/2009/06/09/a-not-so-safe-betting-strategy-for-winning-at-roulette/</link><description>A couple of years ago I was on a trip to Budapest with a couple of friends. While roaming the streets we were passing by a casino and my friend insisted that there was a perfect strategy that would only lead to winning at roulette tables. Curious as I was I had him explain his theory. The system basically works as follows:
First, you place a coin on red. If red wins, take your winning and start over.</description><author>Tafkas Blog</author><pubDate>Tue, 09 Jun 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.tafkas.net/2009/06/09/a-not-so-safe-betting-strategy-for-winning-at-roulette/</guid></item><item><title>brilliant: get rid of mono</title><link>https://purpleidea.com/blog/2009/06/08/brilliant-get-rid-of-mono/</link><description>&lt;p&gt;fedora announces that they&amp;rsquo;ll be replacing potentially patent encumbered mono based note taking application tomboy with the line for line port to c++ called &lt;a href="http://live.gnome.org/Gnote"&gt;gnote&lt;/a&gt;.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;a href="https://www.redhat.com/archives/fedora-desktop-list/2009-June/msg00003.html"&gt;https://www.redhat.com/archives/fedora-desktop-list/2009-June/msg00003.html&lt;/a&gt;&lt;/p&gt;
with any luck we'll be able to replace &lt;a href="http://f-spot.org/"&gt;f-spot&lt;/a&gt;, and &lt;a href="http://banshee-project.org/"&gt;banshee&lt;/a&gt; too. have a look at:
&lt;p style="padding-left: 30px;"&gt;&lt;a href="http://santanu-sinha.blogspot.com/2009/06/solang.html"&gt;http://santanu-sinha.blogspot.com/2009/06/solang.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://m9rx.com/" target="_blank"&gt;hire James&lt;/a&gt; and his team at &lt;a href="https://m9rx.com/" target="_blank"&gt;m9rx corporation&lt;/a&gt;.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://mastodon.social/@purpleidea" target="_blank"&gt;follow James on Mastodon&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://twitter.com/intent/follow?screen_name=purpleidea" target="_blank"&gt;follow James on Twitter&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://github.com/sponsors/purpleidea/" target="_blank"&gt;support James on GitHub&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://www.patreon.com/purpleidea" target="_blank"&gt;support James on Patreon&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;
&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Mon, 08 Jun 2009 17:08:14 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/06/08/brilliant-get-rid-of-mono/</guid></item><item><title>Why Google Wave Will Fail</title><link>/2009/06/08/Why-Google-Wave-Will-Fail/</link><description>&lt;p&gt;Google doesn&amp;rsquo;t understand social or collaboration. There&amp;rsquo;s not much more to it than that, though for the sake of making this a an actual blog post I&amp;rsquo;ll explain a bit more.&lt;/p&gt;
&lt;p&gt;Blogger was huge, it was the place to go if you were creating a blog. There weren&amp;rsquo;t many &lt;a href="https://www.mybloghere.com"&gt;www.mybloghere.com&lt;/a&gt;, many of the largest most popular blogs on the internet were on blogger. People had accounts, people registered to post comments, people had full fledged profiles that could have easily preceded a facebook profile page. Google bought blogger and had more than enough resources to grow blogger into a sizable social community. But if you visit it looks much the same as it did 5 and almost 10 years ago.&lt;/p&gt;
&lt;p&gt;Google spreadsheets is one of the best online spreadsheet programs, and you can even collectively work on a spreadsheet with others at the same time thousands of miles away. Who do you know that uses google spreadsheets that isn&amp;rsquo;t some form of a techie? It likely has a user base of under 1% of users of spreadsheets, and its not because it&amp;rsquo;s missing the power features of pivot tables and such. If you re-brand it as a collaboration tool when working and throw chat/video/whiteboarding in the same application google would have an instant growth 10 fold of users, but they don&amp;rsquo;t understand that a user seeing the same thing on a spreadsheet and seeing what the other types in a single document isn&amp;rsquo;t collaboration!&lt;/p&gt;
&lt;p&gt;To jump ahead of the curve, counter arguments I&amp;rsquo;ve already heard are around ads and gmail. Gmail, google didn&amp;rsquo;t improve email, they simply give you lots of space for free, if gmail were to cease to exist tomorrow users would simply jump over to yahoo or microsoft. Ads, google changed the ad industry by making search effective, they&amp;rsquo;re good at algorithms and such, but they don&amp;rsquo;t get users and collaboration, and at their current rate they never will.&lt;/p&gt;
&lt;p&gt;Wave isn&amp;rsquo;t meant to just improve email, it&amp;rsquo;s meant to be a tool for collaboration, to view a conversation as an entity, and google just doesn&amp;rsquo;t get the conversation part.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Mon, 08 Jun 2009 11:00:26 GMT</pubDate><guid isPermaLink="true">/2009/06/08/Why-Google-Wave-Will-Fail/</guid></item><item><title>The famous Pentium FDIV bug</title><link>https://jasoneckert.github.io/myblog/the-famous-pentium-fdiv-bug/</link><description>&lt;p&gt;&lt;img alt="Pentium CPU" src="pentium.png#right" title="Pentium CPU" /&gt;&lt;/p&gt;
&lt;p&gt;One of my favourite CPUs from my CPU collection is the original Pentium 60MHz shown here.  The reason that this model (SX835 with Gold top) is one of my favourites in not because it looks good, but rather that it was one of the Pentium models that had the famous FDIV bug.&lt;/p&gt;
&lt;p&gt;The FDIV bug was a problem with the floating point unit in early Pentium CPUs that resulted in reduced precision of division operations (FDIV is the x86 assembly language instruction for floating point  division).&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Mon, 08 Jun 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/the-famous-pentium-fdiv-bug/</guid></item><item><title>ORA-04031 errors and monitoring shared pool subpool memory utilization with sgastatx.sql</title><link>https://tanelpoder.com/2009/06/04/ora-04031-errors-and-monitoring-shared-pool-subpool-memory-utilization-with-sgastatxsql/</link><description>&lt;p&gt;Since Oracle 9.2 the shared pool can be “partitioned” into multiple parts. This was probably done for relieving shared pool latch contention for crappy applications (which use shared pool latches too much due bad cursor or connection management).&lt;/p&gt;
&lt;p&gt;The “partitions” are called shared pool subpools and there can be up to 7 subpools. Each subpool is protected by a separate shared pool latch and each subpool has its own freelists and LRU list. If you are interested in more details, a good starting point is &lt;a href="https://www.oracle.com/technetwork/database/manageability/ps-s003-274003-106-1-fin-v2-128827.pdf"&gt;this whitepaper&lt;/a&gt; by Oracle.&lt;/p&gt;
&lt;p&gt;There are few different ways for detecting how many subpools you have in use. The more convenient ones are here:&lt;/p&gt;
&lt;p&gt;You could query X$KGHLU which has a line for each shared pool subpool and (from 10g) also java pool if it’s defined:&lt;/p&gt;
&lt;pre&gt;SQL&gt; select count(distinct kghluidx) num_subpools
  2  from x$kghlu
  3  where kghlushrpool = 1;

NUM_SUBPOOLS
------------
           7

&lt;/pre&gt;
&lt;p&gt;The “kghlushrpool” column, which is 1 for shared pool subheaps and 0 for java pool, isn’t there in 9i (and in 9i the java pool apparently is not reported in x$kghlu anyway).&lt;/p&gt;
&lt;p&gt;The reason why I don’t just count all matching lines from x$kghlu but use count distinct instead is that in Oracle 10.2.0.1 there are 4x more lines reported in this x$table. There’s an additional concept called &lt;strong&gt;sub-sub&lt;/strong&gt;-pool starting from 10.2 where each shared pool sub-pool is split futher into 4 areas (allocations with different expected lifetime/durations go into different sub-sub-pools, but the same sub-pool latch protects all activity in sub-sub pools too). But in 10.2.0.1 the x$kghlu reports all sub-sub-pools too for some reason. The whitepaper from Oracle mentioned above explains this in more detail.&lt;/p&gt;
&lt;p&gt;So from above output I see that in my instance all 7 shared pool subpools are in use. Oracle determines the number of needed subpools (during instance startup) based on your shared pool size and cpu_count. IIRC in 9.2 if you had 4 CPUs or more AND the shared_pool_size was bigger than 256 MB then 2 subpools were used, in 10g shared_pool_size had to be bigger for that, 512 MB I think and in 11g its 1GB. I don’t recall the exact threshold values and that’s not really important as you can see yourself how many subpools are in use with the above query.&lt;/p&gt;
&lt;p&gt;For sake of this experiment I set the &lt;strong&gt;_kghdsidx_count&lt;/strong&gt; variable to 7, this parameter can be used to force the number of subpools you want. In 9.2 days it was actually quite common to set this back to 1 IF you had ORA-4031 errors AND the reason was diagnosed to be free space imbalance between subpools. However since 10g this has been almost unnecessary as Oracle has improved their heap management algorithms.&lt;/p&gt;
&lt;pre&gt;SQL&gt; @&lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/pd.sql"&gt;pd&lt;/a&gt; kghdsidx

NAME                                          VALUE                          DESCRIPTION
--------------------------------------------- ------------------------------ ------------------
_kghdsidx_count                               7                              max kghdsidx count

&lt;/pre&gt;
&lt;p&gt;The &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/pd.sql"&gt;script&lt;/a&gt; above queries few X$ tables to show the value of this hidden parameter.&lt;/p&gt;
&lt;p&gt;So far the two above approaches have required access to X$ tables which usually means you need to be logged on as SYSDBA. What if you don’t have such access?&lt;/p&gt;
&lt;p&gt;In such case you can work this out pretty reliably by looking into how many of the shared pool latches are actually in use. All 7 latches are always there, even if you have less subpools in use, that number is hardcoded into Oracle. But you can see how many latches have a significant number of gets against them.&lt;/p&gt;
&lt;p&gt;In my case its evident that all latches are in use, they all have significant number of gets against them:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 05 Jun 2009 01:24:11 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/06/04/ora-04031-errors-and-monitoring-shared-pool-subpool-memory-utilization-with-sgastatxsql/</guid></item><item><title>Quantum Javascript Bug</title><link>https://caiustheory.com/quantum-javascript-bug/</link><description>&lt;p&gt;So I&amp;rsquo;ve got some js I&amp;rsquo;ve written to update a couple of &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; lists in a form, and it was all working fine for me (under Safari.) &lt;a href="http://johnleach.co.uk/"&gt;John&lt;/a&gt; happened to mention it wasn&amp;rsquo;t working for him under Firefox, so I fired up Firefox and took a look. Could reproduce it perfectly, changing the first popup was populating the second one, but then wasn&amp;rsquo;t selecting the right value from the list.&lt;/p&gt;
&lt;p&gt;Having no idea what was happened I figured I&amp;rsquo;d enable firebug and watch it execute to figure out what was happening. Enabled firebug, reloaded the page, selected from the first popup… and &lt;strong&gt;voila!&lt;/strong&gt; It updated the second one and selected the correct row! WTF!!!&lt;/p&gt;
&lt;p&gt;Turned firebug off and it didn&amp;rsquo;t work, turned it back on and it worked. Figured it might be something buggy in the Firefox 3.0.5 js runtime, so I grabbed a copy of the new &lt;a href="http://www.mozilla.com/en-US/firefox/all-beta.html"&gt;beta 3.5&lt;/a&gt; and tried it in there—still failed to update the page as it should.&lt;/p&gt;
&lt;p&gt;Then started poking around the javascript code, the function that was seemingly failing to run was being triggered by a setTimeout() call set to 1 second. We figured it might be the timing causing it, so started playing around with the time, tried anything from ½ a second up to 4 seconds but still no joy in firefox with firebug turned off.&lt;/p&gt;
&lt;p&gt;Then &lt;a href="http://johnleach.co.uk/"&gt;John&lt;/a&gt; went looking for the javascript errors in firefox (with firebug off) and discovered that it was throwing an error because &lt;code&gt;window.console&lt;/code&gt; didn&amp;rsquo;t exist. All of a sudden it made perfect sense! Safari has &lt;code&gt;window.console.log()&lt;/code&gt; for writing to the console log, as does firebug. But of course firefox &lt;em&gt;without&lt;/em&gt; firebug doesn&amp;rsquo;t!&lt;/p&gt;
&lt;p&gt;So the function was just exiting on that error. It was very weird initially to have it work perfectly as soon as the developer tools were enabled!&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Thu, 04 Jun 2009 18:12:24 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/quantum-javascript-bug/</guid></item><item><title>Interface Vs Inheritance</title><link>https://boyter.org/2009/06/interface-inheritance/</link><description>&lt;p&gt;Just found this while testing &lt;a href="http://www.bing.com/"&gt;http://www.bing.com/&lt;/a&gt; and thought I should preserve it here to be dammed sure I can find if when I want it.&lt;/p&gt;
&lt;p&gt;If the relationship is clearly &amp;ldquo;is-a&amp;rdquo;, I use inheritance. If it is more like &amp;ldquo;can-be&amp;rdquo;, I use interfaces. Eg, TextBox &amp;ldquo;is-a&amp;rdquo; Control, ArrayList &amp;ldquo;can-be&amp;rdquo; enumerated (so it implements IEnumerable).&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Thu, 04 Jun 2009 03:06:03 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2009/06/interface-inheritance/</guid></item><item><title>coloured tab completion</title><link>https://purpleidea.com/blog/2009/06/02/coloured-tab-completion/</link><description>&lt;p&gt;i &amp;lt;3 tab completion, coloured grep, and coloured ls, however i would love to see &lt;strong&gt;&lt;span style="color: #000080;"&gt;coloured&lt;/span&gt;&lt;/strong&gt; tab completion.&lt;/p&gt;
&lt;p&gt;what would this entail? imagine you have files: &amp;ldquo;apply&amp;rdquo;, &amp;ldquo;applied&amp;rdquo; and &amp;ldquo;applications&amp;rdquo; in a directory, and you typed: &amp;ldquo;cat ap&amp;rdquo; &amp;lt;TAB&amp;gt;, then i would expect to see: &lt;strong&gt;app&lt;span style="color: #ff0000;"&gt;ly&lt;/span&gt; app&lt;span style="color: #ff0000;"&gt;lied&lt;/span&gt; app&lt;span style="color: #ff0000;"&gt;lications&lt;/span&gt;&lt;/strong&gt; (highlighting the rest of the words / options. or perhaps there could be a mode that just highlights the next letter that needs to be typed.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Tue, 02 Jun 2009 18:06:58 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/06/02/coloured-tab-completion/</guid></item><item><title>grep, shopt:dotglob and (hidden) dot files</title><link>https://purpleidea.com/blog/2009/06/02/grep-shoptdotglob-and-hidden-dot-files/</link><description>&lt;p&gt;i thought grep was broken, but it&amp;rsquo;s not. see below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-fallback"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;james@dazzle:~$ echo $0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;bash
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;james@dazzle:~$ echo 'hello world' &amp;gt; .hello
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;james@dazzle:~$ grep 'hello world' *
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;james@dazzle:~$ grep 'hello world' .*
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;.hello:hello world
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;james@dazzle:~$ shopt | grep dotglob
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;dotglob            off
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;james@dazzle:~$ shopt -s dotglob
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;james@dazzle:~$ shopt | grep dotglob
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;dotglob            on
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;james@dazzle:~$ grep 'hello world' *
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;.hello:hello world
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;james@dazzle:~$ shopt -u dotglob
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;james@dazzle:~$ shopt | grep dotglob
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;dotglob            off
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;james@dazzle:~$ rm .hello
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;james@dazzle:~$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;the problem as it turns out is that the glob character `*&amp;rsquo; (the asterisk) doesn&amp;rsquo;t expand to include dot files unless you have the shopt variable set. so you can either use to workaround shown above or set it. personally i&amp;rsquo;ll keep mine off.&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Tue, 02 Jun 2009 14:56:08 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/06/02/grep-shoptdotglob-and-hidden-dot-files/</guid></item><item><title>Bumps</title><link>https://sam.hooke.me/game/bumps/</link><description>&lt;p&gt;A casual puzzle game designed for children. Help free the eponymous Bumps by moving them into place, clicking &amp;ldquo;go&amp;rdquo;, and then watch as they roll and bounce around. Try to place the Bumps so that they collect all the keys to free their trapped friends! Though remember that each Bump can only collect the keys corresponding to its colour. Try and complete all 99 levels.&lt;/p&gt;
&lt;h2 id="where-to-play"&gt;Where to play?&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s typically a few second hand copies &lt;a href="https://www.ebay.co.uk/sch/i.html?_nkw=bumps+video+game"&gt;floating around on eBay&lt;/a&gt; for a fairly cheap price. To my surprise you can also still purchase it brand new, over on &lt;a href="https://www.amazon.co.uk/FOCUS-MULTIMEDIA-Bumps-PC-CD/dp/B002BA54L2"&gt;Amazon&lt;/a&gt;, though I get no royalties.&lt;/p&gt;</description><author>Sam Hooke</author><pubDate>Mon, 01 Jun 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://sam.hooke.me/game/bumps/</guid></item><item><title>Catching a Wave</title><link>/post/catching-a-wave/</link><description>&lt;p&gt;I think &lt;a href="http://wave.google.com"&gt;Google Wave&lt;/a&gt; could become a big thing.&lt;/p&gt;
&lt;p&gt;The idea of replacing emails with feeds of conversations is not a new one. I remember
brainstorming about this with friends, and
&lt;a href="http://www.ebizq.net/blogs/bpmblog/2006/08/the_future_of_email.php"&gt;here&lt;/a&gt; is an old
article around this idea from an ex coworker.&lt;/p&gt;
&lt;p&gt;But the guys behind Wave not only turned this idea into reality, they are pushing it very
far, with great ambition and with the power of Google.  Wave might not only replace email
and instant messaging: it may easily become the main user interface for many software
systems.&lt;/p&gt;
&lt;p&gt;One good thing is that the &lt;a href="http://www.waveprotocol.org/"&gt;Wave protocol&lt;/a&gt; is open and designed to be
federated, much like today's email (where you can send emails to users on different
domains) and unlike popular instant messaging systems and social networks (which are
centralized proprietary silos).&lt;/p&gt;
&lt;p&gt;The key for Wave adoption seems to me a good Waves-email bridge. Imagine Google's GMail
being replaced by Google Wave, but having good support for legacy emailing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update!:&lt;/strong&gt; What a visionary! Google already killed Wave :-\&lt;/p&gt;</description><author>Neuroning</author><pubDate>Mon, 01 Jun 2009 00:38:00 GMT</pubDate><guid isPermaLink="true">/post/catching-a-wave/</guid></item><item><title>Automatically Deploying Website From Remote Git Repository</title><link>https://caiustheory.com/automatically-deploying-website-from-remote-git-repository/</link><description>&lt;p&gt;Before I start, I&amp;rsquo;ll just quickly run through where I put stuff on my server. Apache logs and config are in the ubuntu default folders: &lt;code&gt;/var/log/apache2&lt;/code&gt; and &lt;code&gt;/etc/apache2/&lt;/code&gt; respectively.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Websites: /home/caius/vhosts/&amp;lt;domain name&amp;gt;/htdocs
Git Repos: /home/caius/git/&amp;lt;domain name&amp;gt;.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So I have a git repo locally, &lt;code&gt;~/projects/somesite.com/&lt;/code&gt;, and want to deploy it to my webserver. I&amp;rsquo;ll keep the git repo in &lt;code&gt;~/git/&lt;/code&gt; and set it up so that when I push to the repo &lt;em&gt;(over ssh)&lt;/em&gt; it will automatically checkout the new changes into the website&amp;rsquo;s htdocs folder.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m assuming DNS is already setup (or I&amp;rsquo;ve used &lt;a href="http://github.com/bjeanes/ghost/tree/master"&gt;ghost&lt;/a&gt; to map it locally.) And that I&amp;rsquo;ve setup the virtualhost in apache pointing at &lt;code&gt;/home/caius/vhosts/somesite.com/htdocs&lt;/code&gt; and reloaded apache so the config is in place.&lt;/p&gt;
&lt;h2 id="remote-machine"&gt;Remote Machine&lt;/h2&gt;
&lt;p&gt;We create a bare git repo, then point the working tree at the docroot of our website. This means all the git stuff is kept in the &lt;code&gt;somesite.git&lt;/code&gt; folder, but the files themselves are checked out to the website&amp;rsquo;s folder. Then we setup a post-receive hook to update the worktree folder after new changes have been pushed to the repo.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd git
$ mkdir somesite.git
$ cd somesite.git/
$ git init --bare
Initialized empty Git repository in /home/caius/git/somesite.git/
$ git --bare update-server-info
$ git config core.worktree /home/caius/vhosts/somesite.com/htdocs
$ git config core.bare false
$ git config receive.denycurrentbranch ignore
$ cat &amp;gt; hooks/post-receive
#!/bin/sh
git checkout -f
^D
$ chmod +x hooks/post-receive
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="local-machine"&gt;Local Machine&lt;/h2&gt;
&lt;p&gt;And now on the client machine we add the remote repo as a git remote, and then push to it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git remote add web ssh://myserver/home/caius/git/somesite.git
$ git push web +master:refs/heads/master
Counting objects: 3, done.
Writing objects: 100% (3/3), 229 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://myserver/home/caius/git/somesite.git
* [new branch] master -&amp;gt; master
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="all-done"&gt;All Done&lt;/h2&gt;
&lt;p&gt;And now if you go to &lt;em&gt;somesite.com&lt;/em&gt; you&amp;rsquo;ll see the contents of your git repo there. (&lt;em&gt;somesite.com&lt;/em&gt; is just an example url though, I don&amp;rsquo;t actually own it!)&lt;/p&gt;
&lt;h3 id="helpful-urls"&gt;Helpful URLs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://toroid.org/ams/git-website-howto"&gt;http://toroid.org/ams/git-website-howto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mblondel.org/journal/2008/05/25/git-memo/"&gt;http://www.mblondel.org/journal/2008/05/25/git-memo/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tatey.com/2009/04/29/jekyll-meets-dreamhost-automated-deployment-for-jekyll-with-git.html"&gt;http://tatey.com/2009/04/29/jekyll-meets-dreamhost-automated-deployment-for-jekyll-with-git.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Caius Theory</author><pubDate>Sat, 30 May 2009 05:30:40 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/automatically-deploying-website-from-remote-git-repository/</guid></item><item><title>Oracle Performance Visualization videos from Sydney</title><link>https://tanelpoder.com/2009/05/27/oracle-performance-visualization-videos-from-sydney/</link><description>&lt;p&gt;&lt;a href="http://www.pythian.com/news/author/alex"&gt;Alex Gorbachev&lt;/a&gt; invited me to speak at Oracle Meetup @ Sydney event in April.&lt;/p&gt;
&lt;p&gt;I in addition to useful (and less cool) stuff I showed some useful (and very cool) stuff there too. I demoed my PerfSheet tool and also something completely new what I’ve been working on for last few months. Alex has uploaded couple of videos in to youtube, if you’re interested what I’ve been up to in last few months, check them out here:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 27 May 2009 16:18:31 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/05/27/oracle-performance-visualization-videos-from-sydney/</guid></item><item><title>Server Fault</title><link>https://purpleidea.com/blog/2009/05/27/server-fault/</link><description>&lt;p&gt;&lt;a href="http://serverfault.com/"&gt;Server Fault&lt;/a&gt;, the question and answer forum for systems administrators opened their doors today to the public. It is created by the same notorious bloggers who brought you &lt;a href="http://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt;, &lt;a href="http://www.joelonsoftware.com/"&gt;Joel on Software&lt;/a&gt; and the &lt;a href="http://thedailywtf.com/"&gt;Daily WTF&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Go have a look, ask a question, answer a question and have fun!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://m9rx.com/" target="_blank"&gt;hire James&lt;/a&gt; and his team at &lt;a href="https://m9rx.com/" target="_blank"&gt;m9rx corporation&lt;/a&gt;.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://mastodon.social/@purpleidea" target="_blank"&gt;follow James on Mastodon&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://twitter.com/intent/follow?screen_name=purpleidea" target="_blank"&gt;follow James on Twitter&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://github.com/sponsors/purpleidea/" target="_blank"&gt;support James on GitHub&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://www.patreon.com/purpleidea" target="_blank"&gt;support James on Patreon&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;
&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Wed, 27 May 2009 14:10:37 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/05/27/server-fault/</guid></item><item><title>community</title><link>https://purpleidea.com/blog/2009/05/27/community/</link><description>&lt;p&gt;so the idea was to open this up to sys admins in other mcgill departments, so if we don&amp;rsquo;t know about you, drop us a &lt;a href="mailto:james@cs.mcgill.ca"&gt;line&lt;/a&gt; and we&amp;rsquo;ll get you added to the blog. if people like the idea, then we&amp;rsquo;ll host this on a better cs machine than &lt;a href="http://dazzle.cs.mcgill.ca/"&gt;dazzle&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://m9rx.com/" target="_blank"&gt;hire James&lt;/a&gt; and his team at &lt;a href="https://m9rx.com/" target="_blank"&gt;m9rx corporation&lt;/a&gt;.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://mastodon.social/@purpleidea" target="_blank"&gt;follow James on Mastodon&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://twitter.com/intent/follow?screen_name=purpleidea" target="_blank"&gt;follow James on Twitter&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://github.com/sponsors/purpleidea/" target="_blank"&gt;support James on GitHub&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://www.patreon.com/purpleidea" target="_blank"&gt;support James on Patreon&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;
&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Wed, 27 May 2009 12:36:11 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/05/27/community/</guid></item><item><title>Scripts for showing execution plans via plain SQL and also in Oracle 9i</title><link>https://tanelpoder.com/2009/05/26/scripts-for-showing-execution-plans-via-plain-sql-and-also-in-oracle-9i/</link><description>&lt;p&gt;Hi all,&lt;/p&gt;
&lt;p&gt;Here are few scripts which allow you to query SQL execution plans and their execution statistics out from V$SQL_PLAN and V$SQL_PLAN_STATISTICS yourself.&lt;/p&gt;
&lt;p&gt;Why would you want to do this as there’s the DBMS_XPLAN.DISPLAY_CURSOR() function in Oracle 10g?&lt;/p&gt;
&lt;p&gt;Well, my scripts work also on Oracle 9.2. Also they give you better detail (and flexibility) compared to DBMS_XPLAN.DISPLAY_CURSOR.&lt;/p&gt;
&lt;p&gt;Of course in 9i there’s the DBMS_XPLAN.DISPLAY function which you can use in conjuction with EXPLAIN PLAN FOR command, but that approach has problems. EXPLAIN PLAN treats all bind variables as varchar2 datatype, possibly causing the reported execution plan to be different from reality. Also, if you have a long running report from last night and you run explain plan today morning, then if optimizer statistics have changed meanwhile, the explain plan command might come up with a different execution plan again, which is different from reality.&lt;/p&gt;
&lt;p&gt;So that’s why in 10g we have the DBMS_XPLAN.DISPLAY_CURSOR which goes directly to required library cache child cursor and extracts (unparses) the execution plan from there. The function uses V$SQL_PLAN% views as its data source. And guess what – these views are there in version 9.2 already! And thats’ where my scripts come in:&lt;/p&gt;
&lt;p&gt;Here’s an example. Let’s set statistics_level=all so we get rowsource level execution stats for the cursor (note that this parameter makes your query consume much more CPU so it should only be used at session level for troubleshooting a specific performance issue):&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; alter session set statistics_level = all;

Session altered.

SQL&amp;gt; select count(*) from all_users;

  COUNT(*)
----------
        36&lt;/pre&gt;
&lt;p&gt;I know the hash value of this query, so lets report its execution plan, directly from library cache. This is the REAL execution plan inside that child cursor, not some estimate like EXPLAIN PLAN command gives:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 26 May 2009 23:42:05 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/05/26/scripts-for-showing-execution-plans-via-plain-sql-and-also-in-oracle-9i/</guid></item><item><title>The benefit of leverage</title><link>/2009/05/23/The-benefit-of-leverage/</link><description>&lt;p&gt;Due to many recent events, which I&amp;rsquo;m sure I&amp;rsquo;ll disclose later, I&amp;rsquo;ve been in an interesting situation of a good bit of leverage. While leverage can of course be taken advantage of and misused, it also plays a very fair role in business. When hiring a new college graduate in most cases you take the offer you are given, some are able to negotiate for a higher salary, but most are quite unsuccessful. This is because they don&amp;rsquo;t have any leverage. If you ended up walking away from the job offer they would simply hire another college graduate. While yes you may have a lot of potential, it&amp;rsquo;s only that potential and not proven.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Additionally within a corporation, the company will often do just enough to keep an employee there. If a company does a great job, an employee gets a pat on the back. If an employee is indispensable (though no company will ever admit to this), they may get a noticeable reward, but it still doesn&amp;rsquo;t usually cover the value the individual is actually providing.&lt;/p&gt;
&lt;p&gt;This responsibility to get what you are truly worth usually lies with the employee. The hard part of this, is knowing when and how to use your leverage. First you must actually have leverage, this commonly in potential revenue you would bring in, or internal knowledge that you may have. Though I&amp;rsquo;m sure others have varying experiences, mine have been to make your dissatisfaction with a situation known, but in a light manner. Meanwhile make it visible that you&amp;rsquo;re open to other opportunities as they may come along, this can be via twitter, blog post, or water cooler talk. The final thing, and hopefully this is an easier one, is make it clear that you have the leverage, the sale should be a big one, or the internal knowledge should be costly should they lose it.&lt;/p&gt;
&lt;p&gt;The most unfortunate part of all of this is that, in my experiences the leverage is typically needed to get a fair deal. And the single point of requiring leverage no longer makes it fair, but at least knowing this ensures you&amp;rsquo;re not left out in the cold.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Sun, 24 May 2009 06:13:53 GMT</pubDate><guid isPermaLink="true">/2009/05/23/The-benefit-of-leverage/</guid></item><item><title>How to disable wpautop in WordPress blogs</title><link>https://peterlyons.com/problog/2009/05/disable-wpautop/</link><description>&lt;p&gt;So, when creating a &lt;a href="http://wordpress.org"&gt;WordPress&lt;/a&gt; blog, even if you are editing in HTML mode, WordPress includes a feature called "wpautop" that will replace any pair of line feed characters in your post markup with a &lt;p&gt; tag. This is helpful I think in general for people who blog mostly paragraphs with some links and images. However, if you blog with more complex markup, this can invalidate your HTML. I run my HTML through the &lt;a href="http://validator.w3.org"&gt;W3C HTML Validator&lt;/a&gt; to check it and wpautop can cause validation to fail. I hunted around online for an easy way to disable this and didn't see one, so I made the changes described below.&lt;/p&gt;
&lt;p&gt;One thing to keep in mind is that if you HAVE been relying on wpautop and you have not been including your own explicit &lt;p&gt; tags, disabling wpautop will cause all your paragraphs to run together and thus your layout will be broken. To prepare for this, pre-edit all your posts so they have the paragraph tags and remove extra blank lines from them. You can check how they look in that state since when there are no blank lines wpautop won't do anything. Once they look good like that, you can disable wpautop.&lt;/p&gt;
&lt;p&gt;In your WordPress installation, edit the file &lt;code&gt;wp-includes/formatting.php&lt;/code&gt;. Search for "function wpautop" and insert the following two lines at the beginning of the function to disable it.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;function wpautop($pee, $br = 1) {
        //plyons disabling this. 20090516
        return $pee;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Of course, this change will be undone when you upgrade to a newer WordPress release, so it's just a convenient hack. Once you have your posts with proper paragraph tags and no extra line feeds, wpautop should not change your markup and therefore you shouldn't have a problem when it is re-enabled after a WordPress upgrade.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Sat, 23 May 2009 22:53:19 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2009/05/disable-wpautop/</guid></item><item><title>Software Recycler</title><link>https://justingarrison.com/blog/2009-05-23-software-recycler/</link><description>I had an idea a while ago for a website that I know I will never be able to act on so I thought</description><author>Justin Garrison's Homepage</author><pubDate>Sat, 23 May 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2009-05-23-software-recycler/</guid></item><item><title>first babble</title><link>https://purpleidea.com/blog/2009/05/22/hello-world/</link><description>&lt;p&gt;hello! this blog is intended to be a place where ramblings and discoveries, by and for systems administrators and programmers can be posted and seen by many to ultimately help in the dissemination of useful findings that we wish we had been able to have read here earlier.&lt;/p&gt;
&lt;p&gt;if that didn&amp;rsquo;t make too much sense, perhaps i could rephrase it.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://m9rx.com/" target="_blank"&gt;hire James&lt;/a&gt; and his team at &lt;a href="https://m9rx.com/" target="_blank"&gt;m9rx corporation&lt;/a&gt;.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://mastodon.social/@purpleidea" target="_blank"&gt;follow James on Mastodon&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://twitter.com/intent/follow?screen_name=purpleidea" target="_blank"&gt;follow James on Twitter&lt;/a&gt; for more frequent updates and other random thoughts.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://github.com/sponsors/purpleidea/" target="_blank"&gt;support James on GitHub&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;

&lt;br /&gt;&lt;i&gt;You can &lt;a href="https://www.patreon.com/purpleidea" target="_blank"&gt;support James on Patreon&lt;/a&gt; if you'd like to help sustain this kind of content.&lt;/i&gt;
&lt;/p&gt;</description><author>The Technical Blog of James on purpleidea.com</author><pubDate>Fri, 22 May 2009 19:16:04 GMT</pubDate><guid isPermaLink="true">https://purpleidea.com/blog/2009/05/22/hello-world/</guid></item><item><title>Isle of Skye</title><link>https://www.planetjones.net/blog/19-05-2009/isle-of-skye-trip-report.html</link><description>A week long trip in May 2008 trip to Scotland&amp;rsquo;s Isle of Skye, where we were fortunate enough to get great weather!</description><author>Jonathan Jones homepage: planetjones.net</author><pubDate>Tue, 19 May 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.planetjones.net/blog/19-05-2009/isle-of-skye-trip-report.html</guid></item><item><title>Maritz: 1 - Very Dissatisfied</title><link>https://peterlyons.com/problog/2009/05/maritz-1-very-dissatisfied/</link><description>&lt;p&gt;I bought a new car this fall and a few months later I got a follow-up survey in the mail from Maritz Research. Having a few pieces of feedback to give, such as the orange readout on the Bose sound system being invisible through Sunglasses, I endeavored to fill it out. Holy SAT Test, Batman! The survey is nine jam-packed, small-font pages long. There are 76 officially numbered questions, but many questions involve dozens of individual line-items. See the example below where question 58 asks you to rate 67 individual aspects of the vehicle! Sixty frigging seven! I gave up in frustration long before getting there.&lt;/p&gt;
&lt;p&gt;This represents a complete failure to do your job as a market research company. This is their business. Did they exert any effort to make the customer do less work? No. Does the survey include dozens and dozens of line items that completely do not apply to my vehicle because it's not a pick-up truck, and so forth? Yes. Did they select only the really meaningful things for me to rate? No. For example, I am asked to supply my satisfaction level from 5 "Completely Satisfied" to 1 "Very Dissatisfied" on the topic "absence of engine stalling". Give me a break. You need to survey you customers to find out A) your cars stall and B) customers find that unsatisfactory. Please. Do they have any section for free-form comments, unprompted feedback, or even brief descriptions? No. Do they have a special "green traffic light" insert stapled in reading "Your Opinion Counts! Pleas Proceed..."? Yes. Apparently my opinion doesn't count enough for them to create a survey with less complexity than an income tax form. I'm hunting around for the section to fill in my &lt;a href="http://www.imdb.com/title/tt0365825/quotes"&gt;non-farm income&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please rate your satisfaction with this Maritz Research survey:&lt;/p&gt;
&lt;p&gt;&lt;input disabled="disabled" name="maritz_sat" type="radio" value="5" /&gt;5 - Completely Satisfied&lt;br /&gt;
&lt;input disabled="disabled" name="maritz_sat" type="radio" value="4" /&gt;4 - Very Satisfied&lt;br /&gt;
&lt;input disabled="disabled" name="maritz_sat" type="radio" value="3" /&gt;3 - Satisfied&lt;br /&gt;
&lt;input disabled="disabled" name="maritz_sat" type="radio" value="2" /&gt;2 - Somewhat Dissatisfied&lt;br /&gt;
&lt;input checked="checked" disabled="disabled" name="maritz_sat" type="radio" value="1" /&gt;1 - Very Dissatisfied&lt;/p&gt;
&lt;p&gt;&lt;img alt="Maritz Survey Fail" src="https://peterlyons.com/problog/images/maritz_survey_fail_web.jpg" /&gt;&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Sun, 17 May 2009 07:27:56 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2009/05/maritz-1-very-dissatisfied/</guid></item><item><title>Today I saw a cool device in a data centers that needs no electricity</title><link>https://www.databasesandlife.com/optical-device/</link><description>&lt;p&gt;I saw a cool device today. One of my customers manages data centers and they have a new data center and need to connect it to their old ones, so they&amp;rsquo;ve bought/rented some &amp;ldquo;dark fiber&amp;rdquo; between their data centers and have fiber multiplexers at each end so that lots of fiber-optical devices at each end can all talk to one another over this single dark fiber. (Or something like that – I don&amp;rsquo;t know too much about networking equipment!)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 15 May 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/optical-device/</guid></item><item><title>t-zones is even easier to setup now</title><link>https://arashpayan.com/blog/2009/05/11/t-zones-is-even-easier-to-setup-now/</link><description>After restoring a family member&amp;rsquo;s iPhone that was acting up, I began setting up t-zones for them, but couldn&amp;rsquo;t find the t-zones hack in the BigBoss repository. After some experimenting, I soon realized that none of the proxy configuration work is required anymore either. Setting up t-zones on your iPhone is now an easy 3 step process:
 Go to Settings-&amp;gt;General-&amp;gt;Network-&amp;gt;Cellular Data Network Type wap.voicestream.com for the APN (leave the username and password) blank There&amp;rsquo;s no step 3!</description><author>Arash Payan</author><pubDate>Tue, 12 May 2009 09:57:00 GMT</pubDate><guid isPermaLink="true">https://arashpayan.com/blog/2009/05/11/t-zones-is-even-easier-to-setup-now/</guid></item><item><title>Why Twitter Is About To Get Old</title><link>/2009/05/08/Why-Twitter-Is-About-To-Get-Old/</link><description>&lt;p&gt;Twitter has finally hit mainstream, it was bound to happen and with Ashton, Oprah, Shaq, among many others it&amp;rsquo;s now going to be around for a while. This means a lot of interesting things for twitter such as scalability to handle this new massive growth which will be much more regular unlike the more sparse spikes they would see before. But as user of twitter it means something far different, it means twitter is about to run out of usefulness. Before twitter was a nice resource to be able to regularly communicate with micromessaging, now it&amp;rsquo;s quickly going to become one of the noisiest things on the web. This would be a fine case, IF there were ways to manage the noise. However with twitter you either get really focused drops or the entire firehose, there is no medium in between. Sure twitter searches can be nice, but this requires maybe 20-30 constant searches to be up to date on what you care about.&lt;/p&gt;
&lt;p&gt;If someone is able to find some way to manage the firehose of information it will prove as valuable tool as twitter itself. But if that doesn&amp;rsquo;t happen in a respectable time, twitter is going to get really exciting to a lot of people, and just as quickly turn a lot of people off.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Sat, 09 May 2009 07:23:41 GMT</pubDate><guid isPermaLink="true">/2009/05/08/Why-Twitter-Is-About-To-Get-Old/</guid></item><item><title>Order of parameters to functions</title><link>https://www.databasesandlife.com/order-of-function-parameters/</link><description>&lt;p class="intro"&gt;Functions take parameters. What order should these parameters be in?&lt;/p&gt;
&lt;p&gt;Perhaps a bit of a ridiculous question, given that it clearly doesn&amp;rsquo;t matter.&lt;/p&gt;
&lt;pre&gt;void writeUser(Connection c, User u) { ... }
void writeUser(User u, Connection c) { ... }
&lt;/pre&gt;
&lt;p&gt;If one writes either of these functions, they will both work, and any performance differences between the two would be an extreme micro-optimization which wouldn&amp;rsquo;t be platform independent (e.g. in RISC OS the first 6 parameters to a C function were stored on the stack and the rest weren&amp;rsquo;t, unless one used a &amp;ldquo;pass by value&amp;rdquo; structure, so it might have an impact on performance&amp;hellip; but I digress)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 08 May 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/order-of-function-parameters/</guid></item><item><title>Warning: MySQL `LOCK TABLES` command does an implicit commit</title><link>https://www.databasesandlife.com/mysql-lock-tables-does-an-implicit-commit/</link><description>&lt;p class="intro"&gt;The MySQL &lt;code&gt;LOCK TABLES&lt;/code&gt; (and &lt;code&gt;UNLOCK TABLES&lt;/code&gt;) command has a nasty side-effect. It implicitly commits the current transaction.&lt;/p&gt;
&lt;p&gt;This caused a bug in production code (a normally irrelevant temporary error, which should have normally caused a rollback, only rolled back to the last &lt;code&gt;UNLOCK TABLES&lt;/code&gt; command due to its implicit commit, and thus left the database in an inconsistent state, meaning that when the request was retried the software found the database in a state it wasn&amp;rsquo;t expecting and thus couldn&amp;rsquo;t process the request even though the irrelevant temporary error had now been fixed. So the request got retried indefinitely, and the result was that a lot of orphan invoices were created in the database, which wouldn&amp;rsquo;t have been a problem but invoice numbers were then consumed by these unused invoices, and Austrian law dictates that invoice numbers must be sequential, i.e. the numbering system shouldn&amp;rsquo;t have huge holes in it. Or, as in our case, a number of huge holes, as the system was up and running for other requests during this bug (a feature, that one faulty request shouldn&amp;rsquo;t take the whole system down), so other invoices did get correctly generated at the time, and their invoice numbers were then small islands in the sea of unused/invalid invoice numbers produced by the bug.)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 07 May 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/mysql-lock-tables-does-an-implicit-commit/</guid></item><item><title>“Free” DBA_HIST AWR views in 11g…</title><link>https://tanelpoder.com/2009/05/06/free-dba_hist-awr-views-in-11g/</link><description>&lt;p&gt;I just noticed this in 11g Licensing doc ( &lt;a href="http://download.oracle.com/docs/cd/B28359_01/license.111/b28287/options.htm#sthref69"&gt;http://download.oracle.com/docs/cd/B28359_01/license.111/b28287/options.htm#sthref69&lt;/a&gt; ):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All data dictionary views beginning with the prefix DBA_HIST_ are part of this pack, along with their underlying tables.&lt;strong&gt;The only exception are the views:&lt;/strong&gt; DBA_HIST_SNAPSHOT, DBA_HIST_DATABASE_INSTANCE, DBA_HIST_SNAP_ERROR, DBA_HIST_SEG_STAT, DBA_HIST_SEG_STAT_OBJ, and DBA_HIST_UNDOSTAT. &lt;strong&gt;They can be used without the Diagnostic Pack license.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This exception is not present in 10.2 license guide, so before 11g you can query V$SEGMENT_STATISTICS and V$UNDOSTAT’s history “for free” :)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 06 May 2009 18:36:12 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/05/06/free-dba_hist-awr-views-in-11g/</guid></item><item><title>Java really delivers "write once, run anywhere"</title><link>https://www.databasesandlife.com/java-really-delivers-write-once-run-anywhere/</link><description>&lt;p&gt;Java&amp;rsquo;s slogan was &amp;ldquo;write once, run anywhere&amp;rdquo;. They received a certain amount of criticism but I have to say that compared to other programming languages it&amp;rsquo;s really true. You can use it for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Background jobs (without user-interface)&lt;/li&gt;
&lt;li&gt;Server-side web applications (many web servers &amp;amp; web frameworks available)&lt;/li&gt;
&lt;li&gt;In the web browser (applets)&lt;/li&gt;
&lt;li&gt;In the web browser (translation from Java to Javascript by &lt;a href="http://code.google.com/webtoolkit/" rel="noopener noreferrer" target="_blank"&gt;GWT&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;On the desktop (using platform-independent Swing, or with native Apple UI using Cocoa)&lt;/li&gt;
&lt;li&gt;On some mobile phones (J2ME, Google Android) – although I haven&amp;rsquo;t tested how good that really works?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Writing the previous version of a certain application website in Perl, there was no easy way to give the customer a &amp;ldquo;tool&amp;rdquo; to test out new versions of the configuration file. These files would normally be installed on the server, were multiple megabytes in size, and the Perl would parse and use them. For testing, it was not ideal to have to upload potential new files to the test server, due to their size.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 06 May 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/java-really-delivers-write-once-run-anywhere/</guid></item><item><title>mercurial usefull stuff</title><link>https://blog.nobugware.com/post/2009/05/01/mercurial-usefull-stuff/</link><description>Using mercurial for the beginner may sounds scarry here are fast tips
Edit ~/.hgrc
This is a Mercurial configuration file. [ui] username = Your Name
#enable ssh compression ssh = ssh -C
[extensions]
enable hg convert to import you old svn repository hgext.convert=
#enable hg glog command hgext.graphlog =
enable color diff, need mercurial &amp;gt;=1.1 color=
enable visual filemerge on OsX [merge-tools] filemerge.executable=opendiff filemerge.args=$other $local -ancestor $base -merge $output filemerge.gui=True</description><author>Fabrice Aneche</author><pubDate>Sat, 02 May 2009 06:31:25 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/05/01/mercurial-usefull-stuff/</guid></item><item><title>I have been troubleshooting since I was a kid! :)</title><link>https://tanelpoder.com/2009/05/01/i-have-been-troubleshooting-since-i-was-a-kid/</link><description>&lt;p&gt;People sometimes ask how come I know so much about Oracle (and some Unix) internals and how do I have such a passion for these things.&lt;/p&gt;
&lt;p&gt;Also, another thing you may have noticed is that for some reason a large amount of hardcore computer hackers, low level troubleshooters and various internals experts happen to come from Russia.&lt;/p&gt;
&lt;p&gt;And I can answer why this is so!&lt;/p&gt;
&lt;p&gt;A little bit of history: I am an Estonian, was born in Estonia and lived over 20 of my first years there. From 1940 to 1991 &lt;a href="http://en.wikipedia.org/wiki/Estonian_Soviet_Socialist_Republic"&gt;Estonia was occupied by Soviet Union&lt;/a&gt; (excluding a few years during World War II when we were &lt;a href="http://en.wikipedia.org/wiki/Occupation_of_Estonia_by_Nazi_Germany"&gt;occupied by German forces&lt;/a&gt;).&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 01 May 2009 16:02:57 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/05/01/i-have-been-troubleshooting-since-i-was-a-kid/</guid></item><item><title>South Pole Videos</title><link>https://johnj.com/posts/pole-videos/</link><description>&lt;p&gt;
For your enjoyment: YouTube videos from the last two trips to
Antarctica.&lt;/p&gt;
&lt;p&gt;


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


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


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


&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Fri, 01 May 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/pole-videos/</guid></item><item><title>Tunes</title><link>https://mattkeeter.com/projects/tunes</link><description>Command-line iTunes interface</description><author>Matt Keeter</author><pubDate>Fri, 01 May 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://mattkeeter.com/projects/tunes</guid></item><item><title>I redesigned the website of the first company I ever worked for: www.aaa-plus.com</title><link>https://www.databasesandlife.com/www-aaa-plus-com/</link><description>&lt;p&gt;&lt;a href="http://web.archive.org/web/20001204172400/www.aaa-plus.com/" rel="noopener noreferrer" target="_blank"&gt;&lt;img align="left" border="0" height="137" src="https://www.databasesandlife.com/20090428-aaa-plus.png" style="padding-right: 10px; padding-top: 3px;" width="191" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks the the internet archive I found one of the first (or one of the only?) websites I designed i.e. I did the graphics, did the &amp;ldquo;implementation&amp;rdquo; using a tool which produced HTML, etc. (Although the company logo etc already existed, I didn&amp;rsquo;t write the texts..)&lt;/p&gt;
&lt;p&gt;This was for AAA+ which was the first company I worked for in my life, which was also the company I worked for just after coming to Vienna, so has a lot of associations of newness in my life.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 28 Apr 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/www-aaa-plus-com/</guid></item><item><title>How to zip a directory in python</title><link>https://peterlyons.com/problog/2009/04/zip-dir-python/</link><description>&lt;p&gt;I came across this problem at work and also over on &lt;a href="http://stackoverflow.com/questions/458436/adding-folders-to-a-zip-file-using-python/792199#792199"&gt;this www.stackoverflow.com thread&lt;/a&gt;. You have a directory and you want to recursively zip it up. Simple, right? The equivalent of the unix command "zip myDir.zip myDir". Should be like 5 lines of code? Python even has a built in zipfile module, sweet! Well, as is often the case (see urllib and friends), python's "batteries included" slogan is more like "enough batteries for 36 seconds included". Anyway, it's more like 23 lines of functional code, which is still pretty good, but I would have expected the zipfile module to have this included and not have to use os.walk() to do this.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;#!/usr/bin/python
# -*- coding: utf-8 -*-
"""This is a sample function for zipping an entire directory into a zipfile"""

#This seems to work OK creating zip files on both windows and linux. The output
#files seem to extract properly on windows (built-in Compressed Folders feature,
#WinZip, and 7-Zip) and linux. However, empty directories in a zip file appear
#to be a thorny issue. The solution below seems to work but the output of
#"zipinfo" on linux is concerning. Also the directory permissions are not set
#correctly for empty directories in the zip archive. This appears to require
#some more in depth research.

#I got some info from:
#http://www.velocityreviews.com/forums/t318840-add-empty-directory-using-zipfile.html
#http://mail.python.org/pipermail/python-list/2006-January/535240.html
import os
import zipfile

def zipdir(dirPath=None, zipFilePath=None, includeDirInZip=True):
    """Create a zip archive from a directory.

    Note that this function is designed to put files in the zip archive with
    either no parent directory or just one parent directory, so it will trim any
    leading directories in the filesystem paths and not include them inside the
    zip archive paths. This is generally the case when you want to just take a
    directory and make it into a zip file that can be extracted in different
    locations. 

    Keyword arguments:

    dirPath -- string path to the directory to archive. This is the only
    required argument. It can be absolute or relative, but only one or zero
    leading directories will be included in the zip archive.

    zipFilePath -- string path to the output zip file. This can be an absolute
    or relative path. If the zip file already exists, it will be updated. If
    not, it will be created. If you want to replace it from scratch, delete it
    prior to calling this function. (default is computed as dirPath + ".zip")

    includeDirInZip -- boolean indicating whether the top level directory should
    be included in the archive or omitted. (default True)

"""
    if not zipFilePath:
        zipFilePath = dirPath + ".zip"
    if not os.path.isdir(dirPath):
        raise OSError("dirPath argument must point to a directory. "
            "'%s' does not." % dirPath)
    parentDir, dirToZip = os.path.split(dirPath)
    #Little nested function to prepare the proper archive path
    def trimPath(path):
        archivePath = path.replace(parentDir, "", 1)
        if parentDir:
            archivePath = archivePath.replace(os.path.sep, "", 1)
        if not includeDirInZip:
            archivePath = archivePath.replace(dirToZip + os.path.sep, "", 1)
        return os.path.normcase(archivePath)

    outFile = zipfile.ZipFile(zipFilePath, "w",
        compression=zipfile.ZIP_DEFLATED)
    for (archiveDirPath, dirNames, fileNames) in os.walk(dirPath):
        for fileName in fileNames:
            filePath = os.path.join(archiveDirPath, fileName)
            outFile.write(filePath, trimPath(filePath))
        #Make sure we get empty directories as well
        if not fileNames and not dirNames:
            zipInfo = zipfile.ZipInfo(trimPath(archiveDirPath) + "/")
            #some web sites suggest doing
            #zipInfo.external_attr = 16
            #or
            #zipInfo.external_attr = 48
            #Here to allow for inserting an empty directory.  Still TBD/TODO.
            outFile.writestr(zipInfo, "")
    outFile.close()
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Here's some samples of how you use this:&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;zipdir("foo") #Just give it a dir and get a .zip file
zipdir("foo", "foo2.zip") #Get a .zip file with a specific file name
zipdir("foo", "foo3nodir.zip", False) #Omit the top level directory
zipdir("../test1/foo", "foo4nopardirs.zip", False) #exclude some leading dirs
zipdir("../test1/foo", "foo5pardir.zip") #Include some leading dirs
&lt;/pre&gt;
&lt;/div&gt;</description><author>Pete's Points</author><pubDate>Mon, 27 Apr 2009 13:04:03 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2009/04/zip-dir-python/</guid></item><item><title>Gedanken zu User Interfaces</title><link>https://bastibe.de/2009-04-25-gedanken-zu-user-interfaces.html</link><description>&lt;p&gt;Jeder kennt dieses Fenster:&lt;/p&gt;
&lt;p&gt;&lt;img alt="delete_file" src="http://bastibe.de/static/2009-04/delete_file.png" /&gt;&lt;/p&gt;
&lt;p&gt;Dieses Fenster ist eine ziemlich schlechte Idee, denn jeder geübte Benutzer hat irgendwann gelernt, dass die Aktion &amp;quot;Dateien Löschen&amp;quot; aus drei Gesten besteht: (1) Dateien auswählen, (2) Die Löschaktion einleiten, (3) Den Löschdialog bestätigen. Leider hat man schon vor mehr als zwanzig Jahren nachgewiesen, dass solche zusammengehörigen Gesten von den Benutzern als einzelne &amp;quot;Datei-Löschen&amp;quot; Geste abstrahiert werden. Man kennt das vom Tippen: Man tippt Worte nicht, indem man einzelne Buchstaben aneinander hängt, sondern man tippt Worte fast immer am Stück; Hat man erst einmal angefangen, ein falsches Wort zu tippen, kann man damit nicht aufhören, bis das gesamte Wort getippt ist. Auf ähnliche Weise ist es dem Benutzer auch nicht möglich, auf den Löschdialog sinnvoll zu reagieren, da das Bestätigen der Sicherheitsfrage vollkommen automatisiert ist und daher nicht einmal verhindert werden könnte, wenn man wollte.
Die Alternative ist ein alter Bekannter: Undo. Statt den Benutzer im Vorfeld zu fragen, ob er die Datei wirklich löschen möchte (was er durch Einleiten der Löschaktion bereits bejaht hat) gibt man ihm die Möglichkeit, die Aktion im Nachhinein wieder rückgängig zu machen. Das ist wesentlich effektiver und kommt ohne nerviger Dialogbox aus. Übrigens funktioniert Dateiaktion-Undo bereits heute in allen Betriebssystem außer Linux, jedoch ohne Menüicon und zumeist nur für die letzte Aktion. Wäre es nicht schön, wenn dies noch weiter ausgebaut würde?&lt;/p&gt;
&lt;p&gt;Noch ein gefährlicher Dialog:&lt;/p&gt;
&lt;p&gt;&lt;img alt="ja_nein_abbrechen" src="http://bastibe.de/static/2009-04/ja_nein_abbrechen.png" /&gt;&lt;/p&gt;
&lt;p&gt;Das ist ebenfalls ein alter Bekannter, der immer dann erscheint, wenn man ein Programm schließen will, welches noch ungesichte Änderungen enthält: Abgesehen von dem offensichtlichen Problem, dass &amp;quot;Abbrechen&amp;quot; keinen wirklichen Sinn ergibt (Was abbrechen? Das Programm?) erfordert diese Frage jedes Mal das komplette Lesen der Meldung, bis man entschlüsseln kann, was &amp;quot;Ja&amp;quot; und &amp;quot;Nein&amp;quot; in diesem Kontext bedeuten. Um das noch einmal zu verdeutlichen, hier ein besonders schlimmes Beispiel:&lt;/p&gt;
&lt;p&gt;&lt;img alt="bad_gui" src="http://bastibe.de/static/2009-04/bad_gui.png" /&gt;&lt;/p&gt;
&lt;p&gt;Es leuchtet ein, dass hier ein eindeutigerer Dialog wesentlich sinnvoller wäre, bei dem sofort ersichtlich ist, was welcher Button tun wird: (Merke: Auf Buttons gehören immer Verben)&lt;/p&gt;
&lt;p&gt;http://bastibe.de/static/2009-04/speichern_windows.png]]
&lt;img alt="speichern_mac" src="http://bastibe.de/static/2009-04/speichern_mac.png" /&gt;&lt;/p&gt;
&lt;p&gt;Aber warum eigentlich überhaupt speichern? Warum muss ich mich persönlich darum kümmern, meine Arbeit zu speichern? Ich dachte, ich würde mit einer Datei arbeiten -- aber wenn diese Datei nicht geändert wird, wenn ich nicht zuerst &amp;quot;Speichern&amp;quot; anklicke, habe ich wohl eigentlich doch nicht mit dieser Datei, sondern mit einer heimlichen Kopie gearbeitet. Wäre es nicht viel sinnvoller, immer automatisch zu speichern, und statt des &amp;quot;Speichern&amp;quot;-Buttons eine &amp;quot;auf Urzustand zurücksetzen&amp;quot;-Funktion bereitzustellen? Ich bin mir auf jeden Fall sicher, dass man den &amp;quot;Undo all changes&amp;quot;-Button wesentlich seltener bräuchte als den &amp;quot;Speichern&amp;quot;-Button, denn wenn der Benutzer nicht vorgehabt hätte, neuen Text in eine Datei zu schreiben, dann hätte er keinen neuen Text in die Datei geschrieben. Hat er dennoch &amp;quot;versehentlich&amp;quot; Text eingegeben, ist das ein klarer &amp;quot;Benutzerfehler&amp;quot;, also der logische Einsatzzweck für Undo.&lt;/p&gt;
&lt;p&gt;Das sind nur zwei Beispiele, wie man intelligente Undo-Mechanismen sinnvoll einsetzen könnte, um das Arbeiten am Computer angenehmer zu gestalten. Ich wünschte, mehr Leute würden sich mit diesen Dingen auseinander setzen...&lt;/p&gt;</description><author>bastibe.de</author><pubDate>Sat, 25 Apr 2009 17:15:00 GMT</pubDate><guid isPermaLink="true">https://bastibe.de/2009-04-25-gedanken-zu-user-interfaces.html</guid></item><item><title>Adiós Gloria</title><link>https://danielpecos.com/2009/04/24/adios-gloria/</link><description>&lt;p&gt;Me ha costado bastante escribir este post, pero finalmente creo que el recuerdo lo merece.&lt;/p&gt;
&lt;img alt="Gloria Martínez" class="size-full" height="243" src="https://danielpecos.com/assets/2009/04/gloria.jpg" title="Gloria Martínez" width="194" /&gt;
&lt;p&gt;Como homenaje, se están recogiendo firmas para dar su nombre a una de las aulas del ESTCE: &lt;a href="http://homenajeagloria.uji.es/"&gt;http://homenajeagloria.uji.es/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;El pasado 14 de abril de 2009 falleció nuestra compañera y amiga Gloria Martínez. Gloria fue una de las profesoras encargadas de poner en marcha en 1991, fecha de su creación, los estudios de informática en la Universidad Jaume I. Desde entonces ha estado involucrada, muy activamente, en todos los aspectos tanto organizativos como docentes de dichos estudios. También fue una de las personas más destacadas en muchas de las actividades extraacadémicas de esta Universidad como son, por ejemplo, las jornadas iParty, o el grupo de Amnistía Internacional de la UJI. Además, también destacó a nivel nacional como impulsora de la Asociación de Enseñantes Universitarios de Informática (AENUI) de la cual era Coordinadora en el momento de su fallecimiento.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Muchas de las personas que tuvimos relación directa con Gloria, tanto estudiantes como profesores y amigos, consideramos que ha dejado una gran huella allí por donde ha pasado y desearíamos que su memoria no se olvidase fácilmente en el lugar al que dedicó gran parte de su energía. Para ello, todas las personas abajo firmantes, solicitamos que se dé su nombre a una de las aulas de la ESTCE donde ella desarrolló su actividad docente.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Gloria, gracias por enseñarme como lo hiciste y ser como fuiste. Tus clases son de de los mejores recuerdos que mantengo de la universidad. Gracias.&lt;/p&gt;
&lt;p&gt;(Si alguien quiere saber más sobre cómo era ella, aquí dejo la dirección de su blog donde posteaba con frecuencia: &lt;a href="http://servidora.blogspot.com/"&gt;http://servidora.blogspot.com/&lt;/a&gt;)&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Fri, 24 Apr 2009 20:48:48 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2009/04/24/adios-gloria/</guid></item><item><title>Tracing Oracle SQL plan execution with DTrace</title><link>https://tanelpoder.com/2009/04/24/tracing-oracle-sql-plan-execution-with-dtrace/</link><description>&lt;p&gt;SQL is a declarative language – in other words you just declare &lt;strong&gt;what&lt;/strong&gt; needs to be done and Oracle takes care of the part &lt;strong&gt;how&lt;/strong&gt; it’s done.&lt;/p&gt;
&lt;p&gt;However there’s nothing declarative about the actual SQL execution when it happens. &lt;strong&gt;SQL plan is just a tree of kernel rowsource functions executed in a specific order&lt;/strong&gt; (defined in child cursor’s sql area).&lt;/p&gt;
&lt;p&gt;The root of SQL plan is where the fetch function (opifch2 for example) gets the rows for passing back to the user (or PL/SQL engine).&lt;/p&gt;
&lt;p&gt;The branches are operations like joins, union etc, which don’t have access to any data themselves and can just call other functions recursively to get rows&lt;/p&gt;
&lt;p&gt;The leaves are the execution plan operations without any children, they call data layer to acces actual datablocks.&lt;/p&gt;
&lt;p&gt;The first execution plan line (with lowest ID) without any children is the one where data access starts, that’s the place where first logical IO happens.&lt;/p&gt;
&lt;p&gt;A commented exec plan is below:&lt;/p&gt;
&lt;pre&gt;SQL&gt; select count(*) from all_users;

  COUNT(*)
----------
        35

SQL&gt; @x

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  b2zqhgr5tzbpk, child number 0
-------------------------------------
select count(*) from all_users

Plan hash value: 3268326079

--------------------------------------------------------------------------
| Id  | Operation            | Name  | E-Rows |  OMem |  1Mem | Used-Mem |
--------------------------------------------------------------------------
|   1 |  SORT AGGREGATE      |       |      1 |       |       |          | &lt;b&gt;&amp;lt;- ROOT&lt;/b&gt;
|*  2 |   HASH JOIN          |       |     35 |  1517K|  1517K|  637K (0)|   &lt;b&gt;&amp;lt;- BRANCH&lt;/b&gt;
|*  3 |    HASH JOIN         |       |     35 |  1593K|  1593K| 1361K (0)|     &lt;b&gt;&amp;lt;- BRANCH&lt;/b&gt;
|   4 |     TABLE ACCESS FULL| TS$   |     13 |       |       |          |       &lt;b&gt;&amp;lt;- LEAF&lt;/b&gt;
|*  5 |     TABLE ACCESS FULL| USER$ |     35 |       |       |          |       &lt;b&gt;&amp;lt;- LEAF&lt;/b&gt;
|   6 |    TABLE ACCESS FULL | TS$   |     13 |       |       |          |     &lt;b&gt;&amp;lt;- LEAF&lt;/b&gt;
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("U"."TEMPTS#"="TTS"."TS#")
   3 - access("U"."DATATS#"="DTS"."TS#")
   5 - filter("U"."TYPE#"=1)

&lt;/pre&gt;
&lt;p&gt;I have written about how to map execution plan lines back to kernel functions here:&lt;/p&gt;
&lt;p&gt;&amp;lt;/2008/06/15/advanced-oracle-troubleshooting-guide-part-6-understanding-oracle-execution-plans-with-os_explain/&amp;gt;&lt;/p&gt;
&lt;p&gt;The above approach is based on pstack, mostly useful for demonstrations but has helped me to diagnose one spinning condition in an execution plan once (that’s the whole reason I came up with this technique).&lt;/p&gt;
&lt;p&gt;As I said above, SQL execution just means that the kernel’s rowsource functions are executed in a loop with order and hierarchy specified in the child cursor’s execution plan.&lt;/p&gt;
&lt;p&gt;So, if you want to learn and really understand the sequence of SQL plan execution – it’s dead easy with DTrace. Here’s what happens when you fetch from the above execution plan:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 24 Apr 2009 09:11:48 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/04/24/tracing-oracle-sql-plan-execution-with-dtrace/</guid></item><item><title>Jane Eyre as an Aarne-Thompson Type 425C Fairy Tale</title><link>https://www.davidschlachter.com/writings/janeeyre</link><description>Essay arguing against Jane Eyre as a ‘fairy tale gone wrong.’</description><author>David Schlachter</author><pubDate>Mon, 20 Apr 2009 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/janeeyre</guid></item><item><title>Seminar feedback and pictures from Singapore</title><link>https://tanelpoder.com/2009/04/20/seminar-feedback-and-pictures-from-singapore/</link><description>&lt;p&gt;I’ve been busy with a series of seminars, so haven’t managed to blog much…&lt;/p&gt;
&lt;p&gt;Karl Arao has posted some feedback from my Singapore seminar and also the pictures we took with attendees. By the way, he has other good Oracle stuff in his blog so &lt;a href="http://karlarao.wordpress.com/2009/04/20/advanced-oracle-troubleshooting-by-tanel-poder-in-singapore/"&gt;check it out here&lt;/a&gt;.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 20 Apr 2009 13:54:43 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/04/20/seminar-feedback-and-pictures-from-singapore/</guid></item><item><title>Find shell commands with which</title><link>https://caiustheory.com/find-shell-commands-with-which/</link><description>&lt;p&gt;So I have this command in my $PATH, &lt;code&gt;apachectl&lt;/code&gt;. Because I&amp;rsquo;m on a mac and I&amp;rsquo;ve installed apache2 through &lt;a href="http://macports.org/"&gt;MacPorts&lt;/a&gt;, the command that gets found first is my macports install in &lt;code&gt;/opt&lt;/code&gt;. Up until now I&amp;rsquo;ve always known that &lt;code&gt;which apachectl&lt;/code&gt; will find that location, but to find any other locations of &lt;code&gt;apachectl&lt;/code&gt; I&amp;rsquo;d usually use &lt;code&gt;locate&lt;/code&gt; and &lt;code&gt;egrep&lt;/code&gt; together.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s my original workflow, lets find the location of the &lt;code&gt;apachectl&lt;/code&gt; being called when I don&amp;rsquo;t specify a path.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Julius:~ caius$ which apachectl
/opt/local/apache2/bin/apachectl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Simple enough. Now lets figure out what other locations there&amp;rsquo;s an &lt;code&gt;apachectl&lt;/code&gt; installed at.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Julius:~ caius$ locate apachectl | egrep &amp;quot;\/apachectl$&amp;quot;
/opt/local/apache2/bin/apachectl
/opt/local/var/macports/software/apache2/2.2.11_0+darwin_9/opt/local/apache2/bin/apachectl
/usr/sbin/apachectl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Right, so now I know where else a command exists in the filesystem called &lt;code&gt;apachectl&lt;/code&gt;, but I don&amp;rsquo;t know if any of those is in my $PATH, or what order they come in when searching through my $PATH. In this (old) workflow I&amp;rsquo;d have compared them to my $PATH manually as there&amp;rsquo;s so few of them.&lt;/p&gt;
&lt;p&gt;So I noticed &lt;a href="http://awhitebox.com"&gt;Ali&lt;/a&gt; googling for the &lt;code&gt;which&lt;/code&gt; man page on IRC, and &lt;em&gt;(quite stupidly)&lt;/em&gt; poked fun at him for doing so. I then swallowed my ego and actually followed the link to the man page, and boy was I glad I did. Just shows with even a fairly simple command like &lt;code&gt;which&lt;/code&gt;, you sure don&amp;rsquo;t know everything!&lt;/p&gt;
&lt;p&gt;What I discovered was that &lt;code&gt;which&lt;/code&gt; has a single flag you can pass it, &lt;code&gt;-a&lt;/code&gt;. From the &lt;a href="https://www.freebsd.org/cgi/man.cgi?query=which&amp;amp;format=html"&gt;man page&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-a print all matching pathnames of each argument
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Right. So that &lt;code&gt;locate | grep&lt;/code&gt; command plus manually figuring out what is in my $PATH is really hard work then. &lt;code&gt;which -a&lt;/code&gt; should give us the same results, but a lot faster and with a lot less manual thought.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Julius:~ caius$ which -a apachectl
/opt/local/apache2/bin/apachectl
/usr/sbin/apachectl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And hey presto, yet another useful bit of bash knowledge for me, thanks to &lt;a href="http://awhitebox.com"&gt;Ali&lt;/a&gt; not being afraid to &lt;!-- raw HTML omitted --&gt;RTFM&lt;!-- raw HTML omitted --&gt;!&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sun, 19 Apr 2009 18:02:04 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/find-shell-commands-with-which/</guid></item><item><title>Tagged File System</title><link>https://bastibe.de/2009-04-19-tagged-file-system.html</link><description>&lt;p&gt;Ein großes Problem bei der Benutzung von Computern ist, dass unerfahrene Benutzer oftmals kein Verständnis für Ordnerstrukturen haben. Das ist im Grunde auch klar, denn die Ordner-Metapher legt nahe, dass sich Ordner auf dem Computer wie echte Aktenordner verhalten, also dass jeder Ordner mehrere Dateien, jedoch nicht andere Ordner enthalten kann. Ganz im Gegenteil dazu basiert aber eine normale Verzeichnisstruktur meist aus vielen, tief ineinander geschachtelten Ordnern. Von einem Usablitity-Standpunkt aus ist daher der Begriff &amp;quot;Ordner&amp;quot; wahrscheinlich schlecht gewählt. Vielleicht würde es schon reichen, den älteren Namen &amp;quot;Verzeichnis&amp;quot; wieder einzuführen. (Dann bräuchten wir nur noch ein passendes Piktogramm für &amp;quot;Verzeichnis&amp;quot;...)&lt;/p&gt;
&lt;p&gt;&lt;img alt="standard_finder_small" src="http://bastibe.de/static/2009-04/standard_finder_small.png" /&gt;&lt;/p&gt;
&lt;p&gt;Es wäre daher wünschenswert, eine einfacher zu verstehende Alternative zu Ordnerhierarchien zu haben. Die gibt es auch schon, in Form der bekannten Verzeichnisse &amp;quot;Meine Bilder&amp;quot;, &amp;quot;Meine Dokumente&amp;quot;, etc.
Diese Ordner wollen den Benutzer mit einfachen Piktogrammen und klaren Namen dazu animieren, einen natürlichen Ort für seine Dateien zu wählen und so ein wenig Ordnung zu schaffen. Tatsächlich ist dieses Konzept einer Tag-Struktur schon relativ ähnlich, da auch hier nicht davon ausgegangen wird, dass sich der Benutzer selbst um eine tief geschachtelte Orderhierarchie kümmert, sondern nur wenige, einfach zu verstehende Markierungsmöglichkeiten (&amp;quot;Bilder&amp;quot;, &amp;quot;Dokumente&amp;quot;) geboten werden.&lt;/p&gt;
&lt;p&gt;Ein echtes Tag-basiertes System könnte vollkommen ohne Verzeichnisse auskommen, wobei man dann eben beim Speichern einer Datei nicht mehr aus einer hierarchischen Liste von Ordnern den Speicherort auswählen würde, sondern von einer flachen Liste von Tags. Die Usability-Kosten davon wären vernachlässigbar.&lt;/p&gt;
&lt;p&gt;&lt;img alt="tagged_finder_small" src="http://bastibe.de/static/2009-04/tagged_finder_small.png" /&gt;&lt;/p&gt;
&lt;p&gt;Ähnlich würde das Finden von Dateien funktionieren: Statt eine hierarchische Liste von Ordnern nacheinander anzuklicken, würde man eine flache Liste von Tags nacheinander anklicken, jedoch mit dem Bonus, dass man die gesuchte Datei nicht erst bei Anklicken aller Tags, sondern mit großer Wahrscheinlichkeit schon nach ein oder zwei Tags gefunden hätte.&lt;/p&gt;
&lt;p&gt;Ein Problem würde jedoch mit Projekten entstehen, die aus mehreren Dateien bestehen. Hier müsste man sicher stellen, dass sie im Dateisystem nur als einzelne große Projektdatei auftauchen und nicht jede einzelne Unterdatei gelistet wird. Das ließe sich zum Beispiel durch &amp;quot;Bundles&amp;quot; lösen, wie sie heute schon in OSX vorkommen (Ordner mit definierter Namesendung und Inhalt werden wie Dateien behandelt) oder einfach durch einen speziellen Tag, der die einzelnen Dateien vor der normalen Suche versteckt.
Dieses Konzept wird übrigens heute schon vielfach verwendet, so ist etwa eine aktuelle Word-Datei nur eine ZIP-Datei, die eine definierte Verzeichnisstruktur mit allen Bildern, dem Text (als XML), einer Vorschau-Grafik etc. enthält.&lt;/p&gt;
&lt;p&gt;&lt;img alt="bundles_small" src="http://bastibe.de/static/2009-04/bundles_small.png" /&gt;&lt;/p&gt;
&lt;p&gt;Ich glaube, dass man mit solch einem Tag-basierten Dateisystem deutlich einfacher arbeiten könnte als mit den heute üblichen Verzeichnisstrukturen. Tja, jetzt fehlt nur noch eine innovative Firma, die sich um die Umsetzung kümmert...&lt;/p&gt;</description><author>bastibe.de</author><pubDate>Sun, 19 Apr 2009 12:41:00 GMT</pubDate><guid isPermaLink="true">https://bastibe.de/2009-04-19-tagged-file-system.html</guid></item><item><title>Thoughts on Scrum</title><link>https://peterlyons.com/problog/2009/04/thoughts-on-scrum/</link><description>&lt;p&gt;So I had a chance to work in the &lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;Scrum&lt;/a&gt; methodology for about six months recently. I thought I'd write up some of my thoughts on the experience and the process. Please note that first, this is my first experience working in the Scrum process. I am sure as I use it more these opinions will change. Second, these are strictly my personal thoughts and opinions and in no way represent the experience of my team or anyone else. Third, my project had a specific set of tasks and particulars. On a different project, with more sprints or shorter tasks or other relevant variations, I might have drawn (and may well draw in the future) different conclusions.&lt;/p&gt;
&lt;p&gt;Overall, agile and Scrum are a vast improvement over the &lt;a href="http://en.wikipedia.org/wiki/Waterfall_model"&gt;waterfall model&lt;/a&gt; traditionally used at large companies. Some of the specifics benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Far less time wasted doing detailed design and estimates for huge amounts of work that will take a long time to build, or very often might not get built at all&lt;/li&gt;
&lt;li&gt;Overall a very steady and metered workload. We did hit a few days of mad dash toward the end of one or two sprints preparing for the demo, but much more stable than the wild variances and unpredictability of waterfall&lt;/li&gt;
&lt;li&gt;The focus on build and test automation really does enable better agility in the code and prevent regressions&lt;/li&gt;
&lt;li&gt;Having something demoable every month is just all around good for all parties involved. I think perhaps this is the single most important piece of the methodology. Ignore this and I bet a substantial amount of the benefit of Scrum would be lost.&lt;/li&gt;
&lt;li&gt;Similar to demoable, the notion of "potentially shippable product" really rings true for me and forces you to deal with the issues that often lurk in the shadows in the waterfall model only to jump out at the last minute: installation, upgrade, documentation, fit and finish, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the remainder of this will mostly comment on things I found to be problematic or confusing, but I want it to be clear that I am a huge proponent of agile and Scrum and this is not meant to be an argument that the status quo is better. Quite the contrary.&lt;/p&gt;
&lt;h3 id="the-backlog-and-user-stories"&gt;The Backlog and User Stories&lt;/h3&gt;
&lt;p&gt;I want to opine a bit about this notion of "User Stories". Conceptually, this feels like a perfectly healthy way to constantly remind the team to be focused on the important things that will be valuable to the end users. I think this works best for user interfaces and web development where the ratio of engineering effort to visible, tangible change in the end user interface or experience is high. However, I think in many other areas of software development, such as embedded systems, and in our case complex enterprise software, one user story can generate a boatload of tasks and there end up being a lot of backlog items that are just engineering internal stepping stones to functionality. In our team, we were able to bridge this gap and refer to the work items in the backlog just as general "backlog items", but I still felt a bit guilty adding more raw engineering items to the backlog even though it would be a bit of a stretch to tie them closely to a user story. I think we managed to get beyond this eventually and I don't think we strayed off into the woods of unimportant engineering diversions. However, in many if not most backlog items, we were not able to apply the "As a $USER_ROLE, I want to $ACTION so I can $BENEFIT" user story template.&lt;/p&gt;
&lt;p&gt;I was just browsing around &lt;a href="http://www.openagile.com"&gt;www.openagile.com&lt;/a&gt; and noticed they call the backlog the "Work Queue". I like this name better because it more easily allows the notion of "anything that requires work" can go in there and I dislike the word "backlog" because it connotes a buildup of work debt that for me has negative motivational effects.&lt;/p&gt;
&lt;p&gt;Secondly, I found some problems trying to implement this idea that a user story should fit on a "story card" the size of an index card and be fleshed out through face to face conversation. The software I develop at work tends to have a high complexity level and attention to detail. It's more complex than web development. Our work items often can't be clearly expressed with something straightforward like "As a shopper, I want to see the total cost of the items in my shopping cart in the page header". The problem with discussion is A) our team was in three cities with no more than two people in any single location B) we wanted something in writing that could be referred to over and over again throughout and after the sprint and C) no one could remember the details otherwise. Due to C), if you asked the product owner (1/2 me) to clarify a user story through conversation on sprint day 2, 12, and 16, you were liable to get three variations. Our stories ended up being usually at least a few paragraphs worth of detail plus a smattering of acceptance tests, and I think that is OK and worked better for us.&lt;/p&gt;
&lt;p&gt;Also, it turns out that populating and maintaining the product backlog is actually a large amount of work. Keeping the backlog items detailed enough, in the right order, with good acceptance tests takes an awful lot of time. Normally the product owner is not on the scrum team. However, at my company we're not adopting that aspect at this time (for several reasons), and in this project myself and one other scrum team member acted as the product owner role. Basically after working hard to get the sprint review demo up and working, my co-product-owner and I would have about 2 hours Friday afternoon while we were completely fried and 1 hour Monday morning to try to whip the backlog into shape for the next sprint planning meeting Monday morning. In retrospect, we should have allocated about two full days per sprint just for care and feeding of the product backlog. For the early sprints, this number might be larger - like a week, and then as the effort congeals, the amount of time the product owner needs to allocate to backlog care and feeding will probably grow shorter, unless a major change of requirements comes down the pike.&lt;/p&gt;
&lt;p&gt;One final point about the backlog or work queue. After several sprints, we ended up having a fairly enormous work queue with hundreds of items. This became really unwieldy to deal with as a flat list ordered by priority. We ended up wanting to leave the items in the sprint ordered by priority, and about a sprint or two's worth of work items ordered by priority in the backlog, but for all the stuff further down the road, it was much easier to group those into folders based on functionality. I guess each product owner's mileage may vary here, but my point is do whatever it is you need to do as a product owner to be able to comprehend and manipulate your work queue with facility.&lt;/p&gt;
&lt;h4 id="user-stories-and-product-backlog-summary-and-suggestions"&gt;User Stories and Product Backlog summary and suggestions:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use the terms "Work Queue" and "Work Item" instead&lt;/li&gt;
&lt;li&gt;Don't feel obligated to use the "As an X, I want to Y, so I can Z" template if it is unnatural (But do stick with it when it is appropriate)&lt;/li&gt;
&lt;li&gt;Put how ever much detail is needed into your Work Items&lt;/li&gt;
&lt;li&gt;Allocate sufficient Product Owner time to keep the work queue healthy&lt;/li&gt;
&lt;li&gt;Do what's needed to organize large work queues for easy manipulation by the product owner&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="sprint-planning-estimation-and-time-tracking"&gt;Sprint Planning, Estimation, and Time Tracking&lt;/h3&gt;
&lt;p&gt;In terms of planning and estimating, even with the shorter four week sprints, there are still some difficulties built into the Scrum process in my experience. We used story points, a somewhat abstract relative unit of measurement designed to express relative difficulties between two stories, not necessarily any absolute measure of time, effort, or difficulty. For me personally, this just does not feel natural or come easily. First, I don't think about estimates in relative comparison normally. I don't think task A is easy, and task B is four times as hard as task A. As a general rule, I think most people don't think accurately in terms of multiplicative values. Conceptualizing the idea that 13 story points is 6.5 times more effort than 2 story points doesn't come naturally for me. Given any two stories, I can tell you which one is harder, and I could probably use that basic operation to sort a list of tasks by difficulty, but computing the relative sizes of two along the Fibonacci scale is awkward for me. Secondly, the seemingly arbitrary and perhaps a bit weird use of the Fibonacci sequence just sticks out a bit to me as obtuse. Here's my suggested improvements. When it comes to story points, I really believe you need three and only three values: small, medium, large. Fibonacci gives us 1 2 3 5 8 13 21, but 1s and 2s were not particularly common in our backlog, and when we saw a 13 we generally panicked and broke it into smaller pieces. That's what I suggest. If you have three or four stories that are truly super easy (1 or 2 in Fibonacci story points), just stick them all into one story and call it small. If you have something that seems very hard, like it's going to take one developer half the sprint to do it, break it up into a large and a few mediums. I think the "small, medium, large" terminology has another benefit of being obvious even when discussing with someone non-technical or not familiar with Scrum or Story Points. No explanation is required. Story Points using Fibonacci are subtle enough to require explanation, and perhaps they don't add enough value to justify their subtlety.&lt;/p&gt;
&lt;p&gt;OK, so now onto the sprint planning meeting. The default scrum schedule has a single marathon sprint planning meeting at the beginning of each sprint. For our team of five developers with four week sprints, we are looking to estimate somewhere around 600 hours worth of tasks ranging in granularity from 4-30 hours. It's just too much to focus on in a single session (again, my opinion). After two and a half hours of this, I'm bleary-eyed and fried and unable to motivate myself to do the kind of careful thinking required to make the task lists complete and accurate. I start falling into wanting to list the same three tasks for every story: 1. Figure it out 2. Code it 3. Test it. My suggestion is that this be done for one hour a week as many as four times during the sprint if needed (probably 3 of these will get the job done) just to break it up into manageable chunks.&lt;/p&gt;
&lt;p&gt;Now, another point on the sprint planning meetings. Our goal was to take user stories that had story points and acceptance criteria and define a full set of tasks and estimates for five developer-months worth of time in a single session, and then try not to have to add/remove/change during the sprint. (Note, the try not to have to add/remove/change is my own understanding, although my editor pointed out that Scrum itself has no such restriction and allows for task adjustments - focusing only on remaining work. However, it seems the goal is to define the tasks to whatever degree possible at the beginning or we wouldn't bother doing it in the first place, but then adjustments are accomodated). In any case, I wonder whether this is a realistic, achievable goal. Or let me say that in my experience at least about 10% churn in the tasks as development progresses (regardless of what overall methodology I am working within) seems to be my limit and I can't get it more accurate than that up front. So if the team is OK with somewhere around 10% task churn mid-sprint, then all is well.&lt;/p&gt;
&lt;p&gt;When it comes to estimating in hours an individual task in the backlog, our team was developing a new product from scratch with a team of all highly experienced engineers. So we actually ended up having pretty good interchangeability between developers where several different people could complete a task and generally take about the same amount of time to do it. However, when working on an big existing code base, it can be an order of magnitude difference in the estimate between when someone who has already learned a complex subsystem and implemented a similar change does a task verses someone else doing it for the first time. I think if we want real accuracy we need some way to model this more accurately. I'm not sure how best to do this. Maybe one task for learning curve that gets skipped if it's not needed because the person who completes the task didn't need it? I don't have a good suggestion to improve this yet. Also, along similar lines, in general I always get nervous when one person (or a team) creates estimates for work that will be completed by another person. I think there's just a lot of risk there. Again, I don't have an alternative to propose at this time.&lt;/p&gt;
&lt;p&gt;With regard to ordering the work queue items in the queue, and thus determining which ones get into the sprint, I think in general the scrum notion that the product owner does this and it's based on business value to the product owner is reasonable and beneficial for the most part. However, we also tried to adhere to this order for the order in which items were implemented during the sprint, and I think in many cases this didn't work out as well as it could have. Even in the backlog, I feel that a certain amount of the time, a logical or technical dependency will suggest a different backlog item order than strict product owner importance. But for now I'm OK with the product owner importance ordering for the backlog. However, inside the sprint, I think it might work out better to allow the scrum team a certain amount of discretion and control of the order of implementation on any technical or logistical grounds they feel will help. Within a sprint, we bumped up against a fair number of interdependencies where two people would need to heavily edit the same source code file on the same day, or one person was blocking waiting for another person to complete some code needed to build their feature. I can understand that taking the most important item and implementing it last is probably not acceptable, but I think some well-reasoned adjustment should be allowed. Ultimately, I think more stories will get completed due to the efficiency gains. I think a good guideline would be just to discuss these proposed changes to implementation order with the product owner during the daily Scrum call, and based on the status of the burn down chart and how things seem to be going, the product owner may permit or veto a re-ordering.&lt;/p&gt;
&lt;h4 id="sprint-planning-estimation-and-time-tracking-summary-and-suggestions"&gt;Sprint Planning, Estimation, and Time Tracking summary and suggestions:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use small, medium, large instead of Fibonacci story points&lt;/li&gt;
&lt;li&gt;Divide the sprint planning across several meetings throughout the sprint, never exceeding the motivation/attention span threshold for this somewhat tedious endeavor&lt;/li&gt;
&lt;li&gt;Define criteria under which it is OK for developers to add/remove/change tasks during the sprint&lt;/li&gt;
&lt;li&gt;May need some way to estimate tasks differently depending on who implements them&lt;/li&gt;
&lt;li&gt;Within a single sprint, team should be allowed to make implementation order changes that will help with efficiency with consent of the product owner&lt;/li&gt;
&lt;/ul&gt;</description><author>Pete's Points</author><pubDate>Fri, 17 Apr 2009 11:15:07 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2009/04/thoughts-on-scrum/</guid></item><item><title>The price of Jabeh</title><link>https://arashpayan.com/blog/2009/04/16/the-price-of-jabeh/</link><description>I&amp;rsquo;ve received a few emails about the price of Jabeh on the app store, so here&amp;rsquo;s my reply to all of them. :-)
I understand that Jabeh is more expensive than the alternatives out there, but I think the quality of the app and the puzzles more than make up for the difference. The quality of the programming, music and graphics speak for themselves, so I&amp;rsquo;ll leave that be. With respect to the puzzles, the puzzles in the other apps are very poorly made (probably generated from a poor algorithm), and as a result they&amp;rsquo;re just not that fun to play.</description><author>Arash Payan</author><pubDate>Fri, 17 Apr 2009 00:39:00 GMT</pubDate><guid isPermaLink="true">https://arashpayan.com/blog/2009/04/16/the-price-of-jabeh/</guid></item><item><title>Great news people.. I had almost given up on getting any spam....</title><link>https://arnorhs.dev/posts/2009-04-16/great-news-people-i-had-almost-given-up-on-getting-any-spam/</link><description>![](https://30.media.tumblr.com/BkkpWzjVDmcc4tce9aoYipp3o1_500.jpg)  
  

Great news people.. I had almost given up on getting any spam. Thought that the spammers would be afraid of anyt...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Thu, 16 Apr 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2009-04-16/great-news-people-i-had-almost-given-up-on-getting-any-spam/</guid></item><item><title>Anatomy of an AS/400</title><link>https://jasoneckert.github.io/myblog/anatomy-of-an-as400/</link><description>&lt;p&gt;During my spring cleaning, I ended up getting rid of my AS/400 model 9404-D10 from 1991.&lt;/p&gt;
&lt;p&gt;Since the power supply is dead in it, I decided to disassemble and photograph the inside of this amazing machine.  AS/400s are well known for their legendary uptimes, and were the “jewel” of IBM in the late 1980s to 1990s.  In 1993, when IBM was close to splitting up their divisions into smaller companies, Bill Gates said that “the only part of IBM that Microsoft would be interested in was the AS/400 division.”  At the time, many of Microsoft&amp;rsquo;s internal systems ran on the AS/400 platform.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Tue, 14 Apr 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/anatomy-of-an-as400/</guid></item><item><title>Validating Data with Regular Expressions in Ruby</title><link>https://caiustheory.com/validating-data-with-regular-expressions-in-ruby/</link><description>&lt;p&gt;I happened to be sent a link to the &lt;a href="https://www.owasp.org/index.php/Main_Page"&gt;OWASP&lt;/a&gt; paper on &lt;a href="https://www.owasp.org/images/8/89/Rails_Security_2.pdf"&gt;Rails Security&lt;/a&gt; recently and started reading it. Partway in there&amp;rsquo;s a section on Regular Expressions, which opens with the following line:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A common pitfall in Ruby&amp;rsquo;s regular expressions is to match the string&amp;rsquo;s beginning and end by &lt;code&gt;^&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt;, instead of &lt;code&gt;\A&lt;/code&gt; and &lt;code&gt;\z&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now I&amp;rsquo;ve never used &lt;code&gt;\A&lt;/code&gt; and &lt;code&gt;\z&lt;/code&gt; in my regular expressions to validate data, I&amp;rsquo;ve only ever used &lt;code&gt;^&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt; assuming they matched the start and end of the string. This becomes an issue with validating data in rails, because &lt;code&gt;%0A&lt;/code&gt; (&lt;code&gt;\n&lt;/code&gt; URL encoded) is decoded by rails before passing the string to your model to validate.&lt;/p&gt;
&lt;h2 id="testing-our-expectations"&gt;Testing our expectations&lt;/h2&gt;
&lt;p&gt;Lets say we want to validate the string as a username for our app. A username is 5 characters long and consists only of lowercase letters.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;regex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^[a-z]{5}$/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;First we make sure it matches the data we want it to:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;"caius"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Excellent, that validated. Now we&amp;rsquo;ll try a shorter string, which we expect to fail.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;"cai"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once more, it behaves how we expected it to. The shorter string was rejected as we wanted it to be. Now, what happens if we test a string with a newline character in it? We&amp;rsquo;ll make sure the data before the &lt;code&gt;\n&lt;/code&gt; is valid, and then add some more data after the newline.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;"caius&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;foo"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Uh oh! That validated and would&amp;rsquo;ve been saved as a username?!&lt;/p&gt;
&lt;p&gt;Lets have a look at exactly what&amp;rsquo;s happening there, the &lt;code&gt;$&lt;/code&gt; matches the &lt;code&gt;\n&lt;/code&gt; character, so the regex is only matching the first 5 characters of the string, and just ignores anything after the &lt;code&gt;\n&lt;/code&gt;. As it turns out, this is exactly what we&amp;rsquo;ve asked the regex to match, but we didn&amp;rsquo;t want this behaviour.&lt;/p&gt;
&lt;p&gt;Now you might be thinking, &amp;ldquo;So what? someone can have a username with a newline in it.&amp;rdquo; For starters this will probably display weirdly anywhere you use their username, but more importantly it opens your application to an injection attack. Suppose they took advantage of this by setting their username to include some javascript on the page which stole your login cookie and sent it to them. You view their account in the admin section and oh no! They can login as your admin account and do what they want.&lt;/p&gt;
&lt;p&gt;Simple example of this is just having it output an alert dialog. &lt;em&gt;(This is actually the code I&amp;rsquo;ll use to test an application as its not malicious, but blindingly obvious if the javascript is executed or not.)&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;"caius&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;script&amp;gt;alert('hello')&amp;lt;/script&amp;gt;"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;regex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ok, so that was the result we were expecting this time, although it&amp;rsquo;s still not the outcome we wanted. Anytime their username is viewed (providing you aren&amp;rsquo;t escaping the data to HTML entities) you&amp;rsquo;ll see the following:&lt;/p&gt;
&lt;p&gt;&lt;img alt="javascript alert dialog" src="http://caius.name/images/qs/javascript-alert-dialog.png" /&gt;&lt;/p&gt;
&lt;h2 id="the-solution"&gt;The Solution&lt;/h2&gt;
&lt;p&gt;Having realised from our testing above that ^$ matches the beginning/end of a &lt;em&gt;line&lt;/em&gt; in ruby not the beginning and end of a &lt;em&gt;string&lt;/em&gt;, I hear you cry, &amp;ldquo;How do we make sure we&amp;rsquo;re matching the entire string?!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The answer is pretty simple. Just swap out &lt;code&gt;^$&lt;/code&gt; for &lt;code&gt;\A\z&lt;/code&gt;. Lets go ahead and try this with the same data as we have above, but with the modified regular expression.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;new_regex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/\A[a-z]{5}\z/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;"caius"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_regex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s a good start, the valid string still matches.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;"cai"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_regex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Looks like it&amp;rsquo;s going well, invalid string is invalid.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;"caius&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;foo"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_regex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Oh Excellent! It&amp;rsquo;s validating this one correctly now.&lt;/p&gt;
&lt;p&gt;And just for consistency, lets test it with a more likely attack string.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;"caius&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;script&amp;gt;alert('hello')&amp;lt;/script&amp;gt;"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_regex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Fantastic! We&amp;rsquo;ve fixed the security hole in our validation of the user&amp;rsquo;s username.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;If you want to actually run the code above you&amp;rsquo;ll need the following at the start of the ruby script to patch the validate method into String.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;validate&lt;/span&gt; &lt;span class="n"&gt;regex&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;regex&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;nil?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/em&gt; I had &lt;code&gt;\Z&lt;/code&gt; in the &lt;code&gt;new_regex&lt;/code&gt; rather than the &lt;code&gt;\z&lt;/code&gt; it should&amp;rsquo;ve been. Thanks &lt;a href="http://ciaranwal.sh/"&gt;Ciarán&lt;/a&gt;.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sat, 11 Apr 2009 15:41:48 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/validating-data-with-regular-expressions-in-ruby/</guid></item><item><title>Tail calls, @tailrec and trampolines</title><link>https://rd.nz/2009/04/tail-calls-tailrec-and-trampolines.html</link><description>Recursion without overflow</description><author>Rich Dougherty</author><pubDate>Sun, 05 Apr 2009 04:22:00 GMT</pubDate><guid isPermaLink="true">https://rd.nz/2009/04/tail-calls-tailrec-and-trampolines.html</guid></item><item><title>Posing Rigs</title><link>https://johnj.com/posts/posing-rigs/</link><description>&lt;p&gt;
Been following along with &lt;a href="http://www.giantmonster.tv/giant/?p%3D425#content"&gt;Justin Chin&lt;/a&gt; about how to create posing rigs
with SketchUp. Whereas he is using it to pose detailed 3D models (with
an eye to making a comic and/or film using SketchUp), my interest
relates more to orienting figures in space for paintings — placing the
masses, in perspective. So far it seems promising, though I have yet
to carry it through to a real painting.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/3guys.jpg"&gt;&lt;img class="resize" src="https://johnj.com/3guys_hu_a29d2ebf67ba48f6.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Posing rig example
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Though the tools are contemporary, the approach
dates at least to the 16th Century:&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/cambiaso.jpg"&gt;&lt;img class="resize" src="https://johnj.com/cambiaso_hu_bdc958d40bc7d1e5.jpg" style="width: 400px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Drawing by Luca Cambiaso
&lt;/figcaption&gt;
&lt;/figure&gt;</description><author>John Jacobsen</author><pubDate>Sun, 05 Apr 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/posing-rigs/</guid></item><item><title>EMERGENCY - "This book has the slight possibility of maybe helping you to save your life one day."</title><link>https://liza.io/emergency-this-book-has-the-slight-possibility-of-maybe-helping-you-to-save-your-life-one-day/</link><description>&lt;p&gt;I&amp;rsquo;m at C&amp;rsquo;s house, waiting for him to get back from work and doing a bit  of work on other projects. I am also reading &lt;strong&gt;Emergency&lt;/strong&gt; by Neil Strauss. Its catchy tagline is &amp;ldquo;This Book will Save your Life&amp;rdquo; is really very&amp;hellip; optimistic.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sat, 04 Apr 2009 08:46:09 GMT</pubDate><guid isPermaLink="true">https://liza.io/emergency-this-book-has-the-slight-possibility-of-maybe-helping-you-to-save-your-life-one-day/</guid></item><item><title>Per-CPU performance statistics are useless</title><link>https://www.databasesandlife.com/per-cpu-performance-statistics-are-useless/</link><description>&lt;p&gt;Windows, Linux and OS X offer the ability to view the utilization of each CPU/core in the system. This is completely useless. On all these operating systems, tasks get switched from one core to another on a regular basis. (I don&amp;rsquo;t know why this happens, but I suppose there is no reason for it not to happen.)&lt;/p&gt;
&lt;p&gt;Here is my &lt;strong&gt;CPU-bound single-threaded&lt;/strong&gt; program running on a dual-core computer.&lt;/p&gt;
&lt;div style="padding-top: 50px; padding-bottom: 50px; text-align: center;"&gt; &lt;img height="118" src="https://www.databasesandlife.com/20090401-task-mangaer-individual-cores.png" width="317" /&gt; &lt;/div&gt;
&lt;p&gt;I suppose all one can really say is that if one has N cores and the average CPU% usage (over all cores) is approximately 100/N then probably one is running a program which can&amp;rsquo;t take advantage of multiple cores.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 01 Apr 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/per-cpu-performance-statistics-are-useless/</guid></item><item><title>The death of SGI</title><link>https://jasoneckert.github.io/myblog/the-death-of-sgi/</link><description>&lt;p&gt;&lt;img alt="SGI comic" src="sgicomic.jpg#right" title="SGI comic" /&gt;&lt;/p&gt;
&lt;p&gt;Today is definitely a sad day - SGI announced their bankruptcy.&lt;/p&gt;
&lt;p&gt;SGI was once a great company - in the 1990s, they made the best computers ever, such as the Indigo2, O2, and Octane. The cases and designs looked awesome, and they had amazingly fast 64-bit MIPS RISC CPUs and stellar video cards! Plus, they made an excellent graphical UNIX operating system: IRIX.&lt;/p&gt;
&lt;p&gt;Although I am a Mac OS X UNIX user now, IRIX will always be my favourite UNIX. The comic shown here from UserFriendly.org captures it perfectly.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Wed, 01 Apr 2009 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/the-death-of-sgi/</guid></item><item><title>Es geht um Tabs</title><link>https://bastibe.de/2009-03-31-es-geht-um-tabs.html</link><description>&lt;p&gt;Tabs sind kaputt. Tabs waren noch nie eine gute Idee. Tabs werden dafür benutzt, um in einem Programm mehrere Fensterflächen voll Inhalt in nur einem Fenster darzustellen. Speziell zu diesem Zweck entwarf man in grauer Vorzeit eine neue Klasse von Programmen namens Fenstermanager. Fenstermanager erlauben es, mehrere Fenster gleichzeitig darzustellen, gerne auch nebeneinander, hintereinander oder übereinander. Kennt jeder. Und Tabs sind eine Krücke, die genau dieses Prinzip unterlaufen, denn sie organisieren Fenster ineinander.&lt;/p&gt;
&lt;p&gt;Aber es ist ja nicht nur das. Wir kennen Tabs schon lange in ganz verschiedenen Formen:&lt;/p&gt;
&lt;p&gt;&lt;img alt="tabs_firefox_preferences" src="http://bastibe.de/static/2009-03/tabs_firefox_preferences.png" /&gt;
&lt;img alt="tabs_osx" src="http://bastibe.de/static/2009-03/tabs_osx.png" /&gt;
&lt;img alt="tabs_windows" src="http://bastibe.de/static/2009-03/tabs_windows.png" /&gt;&lt;/p&gt;
&lt;p&gt;All diesen Formen gemein ist, dass sie wenigstens einen Rahmen bilden, der andeutet, welcher Teil des Fensters sich ändern wird, wenn man einen anderen Tab öffnet. Die Ausnahme: Browser.&lt;/p&gt;
&lt;p&gt;&lt;img alt="tabs_ie8" src="http://bastibe.de/static/2009-03/tabs_ie8.png" /&gt;
&lt;img alt="tabs_firefox" src="http://bastibe.de/static/2009-03/tabs_firefox.png" /&gt;&lt;/p&gt;
&lt;p&gt;Wo hat ein Browser seine Tabs? zwischen Adressleiste und Webseiteninhalt. Bei Firefox (besondere Perversion) sind die Tabs sogar so dargestellt, als würden sie nur die Adresszeile ändern (oben befestigte Reiter), ganz im Gegensatz dazu ändern sie aber sowohl die Adresszeile als auch -viel wichtiger- den Webseiteninhalt. Wenn überhaupt, dann sollten sich die Tabs also am oberen Bildschirmrand befinden, so dass man mit ihnen wenigstens konsistent den kompletten Fensterinhalt ändert. Immerhin hier sieht man bereits Licht: Google Chrome und Safari 4 funktionieren bereits so:&lt;/p&gt;
&lt;p&gt;&lt;img alt="tabs_chrome" src="http://bastibe.de/static/2009-03/tabs_chrome.png" /&gt;
&lt;img alt="tabs_safari_windows" src="http://bastibe.de/static/2009-03/tabs_safari_windows.png" /&gt;
&lt;img alt="tabs_safari_osx" src="http://bastibe.de/static/2009-03/tabs_safari_osx.png" /&gt;&lt;/p&gt;
&lt;p&gt;Die Lösung von Safari hat noch ein paar Probleme: Wo verschiebt man Tabs? (Ungeschickt: an dem kleinen Handle am rechten Tabgreifer-Rand), Wieso haben die Tabs keine Favicons? Aber nicht verzagen: Noch ist Safari 4 lediglich eine Beta. Gut hingegen fände ich es, wenn dieses Tabbed-Fenster-Interface nicht nur für Safari, sondern für jedes andere Programm auch verwendbar wäre, also als Feature des Fenstermanagers implementiert würde. Man müsste daran noch ein wenig feilen, aber es würde Einiges sehr viel übersichtlicher gestalten. Snow Leopard anyone?&lt;/p&gt;
&lt;p&gt;Weitere gute Ideen rund um Tabs, sortiert nach Browser:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/windows/internet-explorer/default.aspx"&gt;Microsoft Internet Explorer 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tabs werden nach Farben sortiert, je nach dem von welchem Tab aus sie geöffnet wurden&lt;/li&gt;
&lt;li&gt;Im neuen Fenstermanager von Windows 7 werden alle Tabs als eigene Fenster aufgeführt&lt;/li&gt;
&lt;li&gt;Jeder Tab läuft in seinem eigenen Prozess. Bringt aber nix, weil wenn einer abstürzt nimmt er trotzdem den ganzen Browser mit. Ist aber auch noch nur Beta!
&lt;img alt="tabs_ie8_goodness_small" src="http://bastibe.de/static/2009-03/tabs_ie8_goodness_small.png" /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mozilla-europe.org/de/firefox/"&gt;Firefox 3&lt;/a&gt; Preview&lt;/li&gt;
&lt;li&gt;Tabs sollen über ein neuartiges Interface beim Wechsel als Miniaturen dargestellt werden, so dass man einfacher zwischen ihnen wechseln kann&lt;/li&gt;
&lt;li&gt;Viele andere nette Vorschläge rund um diese Idee gibts hier: &lt;a href="http://www.azarask.in/blog/post/new-tab-iterations/"&gt;Aza Raskins Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.apple.com/safari/"&gt;Safari 4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Die Tableiste nimmt keinen eigenen Platz auf dem Bildschirm ein&lt;/li&gt;
&lt;li&gt;Tabs sind am richtigen Ort (oben)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.google.com/chrome"&gt;Google Chrome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tabs sind am richtigen Ort (oben) aber es gibt dennoch eine klassische Titelleiste des Fensters (im Gegensatz zu Safari 4)&lt;/li&gt;
&lt;li&gt;Jeder Tab läuft in einem eigenen Prozess, daher können einzelne Tabs abstürzen ohne den Browser mitzunehmen.&lt;/li&gt;
&lt;li&gt;Jeder Tab läuft in seiner eigenen Sandbox, was es Angreifern wesentlich erschwert, den Browser hochzunehmen.
&lt;img alt="tabs_chrome_goodness" src="http://bastibe.de/static/2009-03/tabs_chrome_goodness.png" /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fazit: Es gibt noch viel zu tun, aber anscheinend ergibt sich langsam aber sicher ein Konsens, dass etwas mit Tabs getan werden muss. Es bleibt spannend.&lt;/p&gt;</description><author>bastibe.de</author><pubDate>Tue, 31 Mar 2009 23:09:00 GMT</pubDate><guid isPermaLink="true">https://bastibe.de/2009-03-31-es-geht-um-tabs.html</guid></item><item><title>Web 2.0 mortuus est, vivat Web 3.14159...</title><link>https://bastian.rieck.me/blog/2009/web_2_0_mortuus_est_vivat_web_3_14159/</link><description>&lt;p&gt;Tired of all the fuss about Web 2.0, I decided to &lt;em&gt;proudly announce&lt;/em&gt; Web 3.1459&amp;hellip;, also known as Web Pi or Web π. Web 3.14159&amp;hellip; is clearly superior to Web 2.0 for many reasons (i.e. because I say so).&lt;/p&gt;
&lt;p&gt;More &lt;a href="http://web3.14159.annwfn.net"&gt;information about Web 3.14159&amp;hellip;&lt;/a&gt; is available on a site that does &lt;em&gt;not&lt;/em&gt; use JavaScript or Flash, but simply delivers its content.&lt;/p&gt;
&lt;p&gt;If &lt;em&gt;you&lt;/em&gt; want to show your support for Web 3.14159&amp;hellip;, simply download one of the graphical logos (or design your own) and let your visitors know how &lt;em&gt;hip&lt;/em&gt; you are. Domain owners might also create an appropriate subdomain and host some information about Web 3.14159&amp;hellip; there.&lt;/p&gt;
&lt;p&gt;If you like this idea, spread it around the intertubes and link directly to &lt;a href="http://web3.14159.annwfn.net"&gt;http://web3.14159.annwfn.net&lt;/a&gt;.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Mon, 30 Mar 2009 21:50:44 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2009/web_2_0_mortuus_est_vivat_web_3_14159/</guid></item><item><title>Mirrors Edge</title><link>https://bastibe.de/2009-03-29-mirrors-edge.html</link><description>&lt;p&gt;&lt;img alt="mirrors_edge" src="static/2009-03/mirrors_edge.png" /&gt;&lt;/p&gt;
&lt;p&gt;Ich habe am Wochenende, wie in Twitter schon verkündet, Mirror’s Edge (durch-) gespielt. Ganz kurz: Mirror’s Edge ist ein Videospiel für PC/XBOX360/PS3, im Endeffekt ein Platformer aus der Ego-Perspektive, zwar mit der Möglichkeit, Waffen aufzunehmen, aber mit dem klaren Fokus auf Rennen, genauer: Parkours, dem modernen Hindernislauf, hier mit dem Extratwist: auf Hochhausdächern.&lt;/p&gt;
&lt;p&gt;Es wurde schon viel gesagt über dieses Spiel. Müde Story, schlechte Charactermodelle, schlechte Shooter-Elemente, unübersichtliche Atmosphäre, kurze Spieldauer, um nur einige der üblichen Kritikpunkte zu nennen.&lt;/p&gt;
&lt;p&gt;&lt;img alt="mirrors_edge_jump" src="static/2009-03/mirrors_edge_jump.png" /&gt;&lt;/p&gt;
&lt;p&gt;Ich sage: Alles Popauswurf. Was Mirror’s Edge versucht, ist die Direktheit und Intimität der Egoperspektive mit dem Flow und der Geschwindigkeit eines modernen Platformers zu verbinden. Faith, der Hauptcharakter ist eine kleine “Eurasierin” (Zitat der Entwickler), deren Eltern in einem Widerstandskampf… Bla, bla, bla.
Es geht um Flow, es geht darum, mit blitzschnellen Reflexen und akrobatischem Geschick einen Weg über die Dächer einer Großstadt zu finden. Es geht darum, nicht stehen zu bleiben, nicht zu zögern. Es geht um Geschwindigkeit und Freiheit, über Straßenschluchten zu springen, zwischen Klimaanlagen und Baugerüsten zu sprinten und immer schneller, immer weiter, den Großstadtlärm hinter sich zu lassen. Nur begleitet von Faiths immer wieder ins Bild ragenden Armen und Beinen, ihrem schnellen Atem, dem Rhythmus ihrer Schritte. Und ja, man stirbt häufig, wenn man sich bei einem Sprung verschätzt oder es doch nicht schafft, den Jägern zu entkommen. Aber um so größer ist die Befriedigung einen komplizierten Run endlich zu schaffen und mit einem perfekten Sprung über eine Häuserschlucht die Polizei hinter sich zu lassen.&lt;/p&gt;
&lt;p&gt;Mirror’s Edge perfektioniert den Flow, das Gefühl der Freiheit und der Geschwindigkeit. Klar, dass da die Ego-Shooter-Mechanik auf der Strecke bleibt, aber Faith ist auch keine Kämpferin, sondern selbsterklärter Runner. Sicher, die Story ist ein wenig lahm, aber wir reden hier über ein Computerspiel: Die Story hat allein das Ziel, die einzelnen Schauplätze miteinander zu verbinden, und das gelingt ihr. Charakterentwicklung kennt das Spiel nicht, allein der Spieler wird besser. Und auch das ist gut so, denn in den späteren Leveln ist der Schwierigkeitsgrad nicht von schlechten Eltern. Aber Checkpoints sind häufig und fair verteilt, so dass dies selten ein Problem wird.&lt;/p&gt;
&lt;p&gt;Ach ja, und der Sound ist genial, selten habe ich mich so sehr in eine Spielfigur hineinversetzt gefühlt wie in Faith. Und die Grafik… Ich könnte hier viel schreiben; Ich glaube schlicht, dass die aktuelle Konsolengeneration im Grunde ein Niveau erreicht hat, auf dem weitere Verbesserungen keine große Rolle mehr spielen. Mirror’s Edge, mit seiner gleißend-Weiß-plus-Farbe Ästhetik zeigt hier eine Welt, wie man sie noch nie gesehen hat, in der Farbe nicht nur als Stilmittel, sondern auch als Wegweiser und tatsächlich Spielhilfe eingesetzt wird: Rot ist, wo es weiter geht. Diese Ästhetik ist schwer in Worte zu fassen und gibt dem Ganzen eine ganz eigene Freiheit, im starken Kontrast zum “realistisch”-Grau-Braun, dem sich so viele andere Spiele verschrieben haben.&lt;/p&gt;
&lt;p&gt;Und was bleibt unterm Strich? Ich sage: Das Spiel ist es Wert. Es mag seine Mängel haben, aber allein der Mut, einmal etwas Neues zu machen und nicht dem Einheitsbrei ins Land der Realo-Shooter und der digitalen Nebenjobs zu folgen ist der Beachtung Wert. Einmal nicht schießen zu müssen und stumpfen Missionen zu folgen, sondern in einem Spiel Freiheit zu finden, dass ist eine außergewöhnliche Erfahrung. Wer als Spieler etwas Erfrischung sucht, sollte es probieren. Ich finds geil!&lt;/p&gt;
&lt;p&gt;&lt;img alt="mirrors_edge_faith" src="static/2009-03/mirrors_edge_faith.png" /&gt;&lt;/p&gt;</description><author>bastibe.de</author><pubDate>Mon, 30 Mar 2009 01:22:00 GMT</pubDate><guid isPermaLink="true">https://bastibe.de/2009-03-29-mirrors-edge.html</guid></item><item><title>Synchronisieren von Google, Äpfeln, Fenstern und Telefonen</title><link>https://bastibe.de/2009-03-28-synchronisieren-von-google.html</link><description>&lt;p&gt;&lt;img alt="cloud" src="http://bastibe.de/static/2009-03/cloud.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Ich hatte lange Zeit zwei Computer, einen Desktop und einen Laptop, jeweils mit verschiedenen Betriebssystemen und Datensätzen. Um dennoch immer mit den selben Daten arbeiten zu können, verwendete ich eine externe Festplatte. Obwohl sehr low-tech, funktionierte diese Lösung absolut tadellos: Meine Linux-Kisten mounteten die Festplatte automatisch in ihr jeweiliges home-Verzeichnis und so konnte ich auf verschiedenen Computern arbeiten, ohne mich um die Synchronizität der Daten kümmern zu müssen.&lt;/p&gt;
&lt;p&gt;Fast-forward ein Jahr, tausche Linux gegen Apple und finde es jetzt doch sehr anstrengend, immer eine externe Festplatte mit mir herumzuschleppen -- Apple-Snob, der ich bin. Sieht auch unelegant aus, dieses schwarze Kästchen an den hübschen Laptop zu klemmen. Es muss also eine andere Lösung her, um immer auf beiden Rechnern mit aktuellen Dateien arbeiten zu können. Es bietet sich an: MobileMe (damals noch .Mac), genauer, die iDisk, also ein Stück online-Speicher bei Apple, auf dem man von mehreren (Apple-) Rechnern aus arbeiten kann. Das Angebot ist verlockend, aber leider erfüllt MobileMe meine Erwartungen nicht, es gehen Daten verloren und ich ärgere mich, jemals Geld für diesen Dreck ausgegeben zu haben.&lt;/p&gt;
&lt;p&gt;Eine Alternative finde ich in Dropbox, welches die Vision des immer synchronen Datenspeichers &amp;quot;in the cloud&amp;quot; endlich erfüllt, wenn auch als Ordner und nicht als Laufwerk. Inzwischen erbringt auch Syncplicity diese Leistung, wenn auch mit einem eigenen Set an Einschränkungen (Es ist aber noch Beta, also kein Grund zur Sorge).&lt;/p&gt;
&lt;p&gt;Dennoch: ganz zufrieden bin ich nicht, einfach, weil zwei Rechner immer eine gewisse Menge &amp;quot;mental overhead&amp;quot; bedeuten. Allein, nicht immer am selben Gerät zu sitzen stellt einfach eine Irritation dar, die im Grunde nicht nötig ist. Na gut, und dieses neue &amp;quot;Unibody&amp;quot;-MacBook Pro ist einfach sexy. Also, tausche iMac + MacBook gegen MacBook Pro. Das löst -logisch- auch alle Synchronizitätsprobleme.&lt;/p&gt;
&lt;p&gt;Aber ich wäre nicht der Sohn meines Vaters, wenn ich nicht immer noch mehr technischen Schnickschnack haben müsste, enter: the iPhone. Dank Apple und iTunes ist es natürlich kein Problem, Kalender, Email, Kontakte und Musik immer synchronisiert zu halten; Kabel reinstecken, iTunes machen lassen und fertig.
Perfektioniert wird das alles aber erst durch Beihilfe von Google, welches durch ActiveSync (sprich: Exchange) nun auch alle meine Kontakte, Kalendereinträge, Emails und Dokumente auf allen Geräten zur Verfügung stellt. Dieses Setup ist nun endlich wirklich extrem zufriedenstellend. Es ist zwar ein Haufen Kleinkram, den man durcharbeiten muss, bis man das alles richtig konfiguriert hat, aber hat man das einmal getan funktioniert es wirklich tadellos! Und Syncplicity und Dropbox laufen auf dem Rechner einfach nur noch als Backup weiter.&lt;/p&gt;</description><author>bastibe.de</author><pubDate>Sat, 28 Mar 2009 19:18:00 GMT</pubDate><guid isPermaLink="true">https://bastibe.de/2009-03-28-synchronisieren-von-google.html</guid></item><item><title>Read OS environment variables using DBMS_SYSTEM.GET_ENV()</title><link>https://tanelpoder.com/2009/03/27/read-os-environment-variables-using-dbms_systemget_env/</link><description>&lt;p&gt;Check out this article by Vikram Das about &lt;a href="http://oracleappstechnology.blogspot.com/2009/03/how-to-get-value-of-environment.html"&gt;how to read OS environment variables using PL/SQL&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I did not know that!&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 27 Mar 2009 19:28:58 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/03/27/read-os-environment-variables-using-dbms_systemget_env/</guid></item><item><title>I’m an Oracle ACE Director now :)</title><link>https://tanelpoder.com/2009/03/26/im-an-oracle-ace-director-now/</link><description>&lt;p&gt;Many people have asked me that how come I’m not an Oracle ACE yet. From this week I am an Oracle ACE Director.&lt;/p&gt;
&lt;p&gt;Here’s a link to &lt;a href="http://apex.oracle.com/pls/otn/f?p=19297:4:2696335965620373::NO:4:P4_ID:640"&gt;my profile&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Its pretty big honor to be recognized by Oracle Corp at such high level.&lt;/p&gt;
&lt;p&gt;I started working with Oracle software in 1997 and got really interested in that stuff after realizing how powerful the database was and how complex some internal details could be. Lots of opportunities to learn and learn I did!&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 27 Mar 2009 02:46:45 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/03/26/im-an-oracle-ace-director-now/</guid></item><item><title>On LINQ</title><link>https://boyter.org/2009/03/linq/</link><description>&lt;p&gt;Thought while my code was compiling and being tested I would throw up some thoughts about it. For those who don&amp;rsquo;t know you should probably go and read something else, since what follows is going to be pretty technical.&lt;/p&gt;
&lt;p&gt;So LINQ to SQL. At first I was totally opposed to it. The idea of taking a language that most developers know (SQL) and morphing it into something that .NET can use and slightly resembles SQL didn&amp;rsquo;t really appeal to me. Since I was forced to use it (unless you use entity framework you cant write your own SQL against the database it as far as I can tell). So I didn&amp;rsquo;t like it. Then I had to take some queries I had and write them against a bunch of criteria for a simple search program. It was at this point I saw the light. Dynamic SQL. Yes im sure anyone who has written any sort of web application against a database will come come up with ssomething like the following,&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Thu, 26 Mar 2009 02:07:14 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2009/03/linq/</guid></item><item><title>E Text Editor goes Open Source</title><link>https://bastibe.de/2009-03-24-e-text-editor-goes-open-source.html</link><description>&lt;p&gt;&lt;img alt="e_text_editor" src="http://bastibe.de/static/2009-03/e_text_editor.png" /&gt;&lt;/p&gt;
&lt;p&gt;Als ich heute von der FH nach Hause kam, lag &lt;a href="http://e-texteditor.com/blog/2009/opencompany"&gt;das hier&lt;/a&gt; in meinem Newsreader und ich war, in Ermangelung eines besseren Wortes, geschockt.&lt;/p&gt;
&lt;p&gt;Nur, um es noch einmal zu wiederholen: E, der meiner Meinung nach beste Texteditor der Welt wird Open Source. Das kann man nicht oft genug sagen.&lt;/p&gt;
&lt;p&gt;Warum ist E so fantastisch?
&lt;a href="http://www.e-texteditor.com"&gt;E&lt;/a&gt; ist ein recht neuer, kleiner &lt;a href="http://de.wikipedia.org/wiki/Texteditor"&gt;Texteditor&lt;/a&gt; für Windows. Nein, um ihm Genüge zu tun, muss man E in einem Satz mit &lt;a href="http://de.wikipedia.org/wiki/Emacs"&gt;Emacs&lt;/a&gt;, &lt;a href="http://de.wikipedia.org/wiki/Vim"&gt;Vim&lt;/a&gt; und &lt;a href="http://macromates.com/"&gt;Textmate&lt;/a&gt; nennen, denn wie diese Drei Großen Texteditoren sind auch E keine Grenzen gesetzt, da all seine Funktionalität durch kleine, einfache Skripte entsteht, die von jedem Nutzer beliebig verbessert werden können. Genauer gesagt: E tritt in die direkten Fußstapfen von Textmate, einem Editor für den Mac und ist vollkommen kompatibel mit dessen Erweiterungen, so dass E schon bei seiner Markteinführung auf eine riesige Masse von &lt;a href="http://svn.textmate.org/trunk/Bundles/"&gt;Sprachen, Snippets und Programmen&lt;/a&gt; zurückgreifen konnte, mit der sich jede noch so obskure Textmanipulation bewältigen lässt. Anders als Emacs oder Vim folgt E dabei aber modernen Bedienungs- und Designrichtlinien und fühlt sich genauso flüssig und heimisch an, wie das für eine Windows-Anwendung nur möglich ist.
Seine zweite große, und kaum weniger berauschende Stärke ist sein &lt;a href="http://e-texteditor.com/blog/2006/making-undo-usable"&gt;History-System&lt;/a&gt;. Jeder Benutzer eines Texteditors kennt die Undo-Taste (&lt;a href="http://stackoverflow.com/questions/247568/how-can-i-undo-more-than-a-single-character-in-textmate/248255"&gt;mit Ausnahme von Textmate&lt;/a&gt;. &lt;a href="http://nslog.com/2006/11/08/textmates_undo"&gt;What a shame&lt;/a&gt;.). Undo macht die zuletzt gemachte Änderung rückgängig und ist damit der beste Freund von notirisch fehleranfälligen Menschen. E bringt Undo auf das nächste Level: Denn neben dem normalen Undo-Befehl gibt es noch eine komplette Übersicht aller jemals an einem Dokument gemachten Änderungen, komplett mit verschiedenen Pfaden, die zu verschiedenen Zeiten genommen wurden kompakt und übersichtlich verpackt in einem fantastischen Baumdiagramm.
Dazu kommen ein riesiger Haufen Features, die eigentlich jedes Programm haben sollte, welche man aber nur viel zu selten findet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inkrementielle Suche mit sofortiger Ergebnisvorschau und Unterstützung von Regulären Ausdrücken!&lt;/li&gt;
&lt;li&gt;Direkte Unterstützung von Cygwin für alle möglichen Skriptsprachen!&lt;/li&gt;
&lt;li&gt;Syntax-Highlighting für so ziemlich jede denkbare Sprache!&lt;/li&gt;
&lt;li&gt;Unterstützung für Snippets!&lt;/li&gt;
&lt;li&gt;Multiline-Editing!&lt;/li&gt;
&lt;li&gt;Kontinuierliche Weiterentwicklung des Editors!&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wer mehr wissen will, der surfe nach &lt;a href="http://e-texteditor.com/index.html"&gt;e-texteditor.com&lt;/a&gt; und schaue sich dort den Screencast und den Blog an, lade sich die Demo herunter oder suche im Internet nach Reviews zu E.&lt;/p&gt;
&lt;p&gt;Selbst ich, als eingefleischter Textmate-Benutzer halte E als meinen heimlichen Lieblingseditor, denn schließlich kann er alles, was Textmate kann (und das ist schon enorm gut) und dazu noch eine gute Latte mehr. Wer, wie ich, eigentlich seinen Tag nur mit (a) surfen und (b) tippen verbringt, sollte wirklich darüber nachdenken, ein wenig Geld für einen guten Texteditor auszugeben. Es lohnt sich, und E ist ohne Frage einer der Besten. Und jetzt wird er Open Source. Ich bin begeistert!&lt;/p&gt;</description><author>bastibe.de</author><pubDate>Tue, 24 Mar 2009 17:16:00 GMT</pubDate><guid isPermaLink="true">https://bastibe.de/2009-03-24-e-text-editor-goes-open-source.html</guid></item><item><title>Oracle 11g: Reading alert log via SQL</title><link>https://tanelpoder.com/2009/03/21/oracle-11g-reading-alert-log-via-sql/</link><description>&lt;p&gt;Oracle has done some major improvements in the diagnosability infrastructure in version 11g. Here’s one little detail.&lt;/p&gt;
&lt;p&gt;Before Oracle 11g it is possible to access the alert log via SQL using an external table or a pipelined function which in turn uses utl_file.&lt;/p&gt;
&lt;p&gt;After reading the text you need to parse it to extract the information you need from there.&lt;/p&gt;
&lt;p&gt;Starting from 11g Oracle does all this work for you. There is a fixed table X$DBGALERTEXT, when you query it, Oracle reads the &lt;em&gt;log.xml&lt;/em&gt; from alert directory (which contains all the data what alert.log does), parses it and returns the details back as rows:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; select &lt;strong&gt;message_text&lt;/strong&gt; from &lt;strong&gt;X$DBGALERTEXT&lt;/strong&gt; where rownum &amp;lt;= 20;

MESSAGE_TEXT
-----------------------------------------------------------------------------------------------------------------
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Shared memory segment for instance monitoring created
Picked latch-free SCN scheme 2
Using LOG_ARCHIVE_DEST_10 parameter default value as USE_DB_RECOVERY_FILE_DEST
Autotune of undo retention is turned on.
IMODE=BR
ILAT =18
LICENSE_MAX_USERS = 0
SYS auditing is disabled
Starting up ORACLE RDBMS Version: 11.1.0.7.0.
Using parameter settings in client-side pfile /u01/app/oracle/admin/LIN11G/pfile/init.ora on machine linux03
System parameters with non-default values:
  processes                = 150
  memory_target            = 404M
  control_files            = "/u01/oradata/LIN11G/control01.ctl"
  control_files            = "/u01/oradata/LIN11G/control02.ctl"
  control_files            = "/u01/oradata/LIN11G/control03.ctl"
  db_block_size            = 8192

20 rows selected.

&lt;/pre&gt;
&lt;p&gt;This is the text representation, but you can get individual details from other columns as listed below:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 22 Mar 2009 03:38:15 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/03/21/oracle-11g-reading-alert-log-via-sql/</guid></item><item><title>Another LatchProfX use case</title><link>https://tanelpoder.com/2009/03/20/another-latchprofx-use-case/</link><description>&lt;p&gt;Riyaj Shamsudeen wrote an excellent &lt;a href="http://orainternals.wordpress.com/2009/03/13/dynamic_plan_table-xkqlfxpl-and-extreme-library-cache-latch-contention/"&gt;article&lt;/a&gt; about &lt;em&gt;systematic&lt;/em&gt; latch contention troubleshooting.&lt;/p&gt;
&lt;p&gt;Especially if the latch contention problem is ongoing, looking into system wide stats (like v$latch.sleep columns) is not the best idea in busy systems. This may sometimes lead you to fixing the wrong problem.&lt;/p&gt;
&lt;p&gt;This is because sometimes the latch contention is not caused by some system wide inefficiency but rather by one or few sessions.&lt;/p&gt;
&lt;p&gt;The right approach would be to &lt;em&gt;measure&lt;/em&gt; the following things:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 20 Mar 2009 21:35:41 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/03/20/another-latchprofx-use-case/</guid></item><item><title>Western Digital Festplatten-Umtausch mit Überraschungen</title><link>https://bastibe.de/2009-03-19-western-digital-festplatten-umtausch-mit-uberraschungen.html</link><description>&lt;p&gt;&lt;img alt="festplatte" src="http://bastibe.de/static/2009-03/festplatte.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Ich hatte mir vor einer Weile eine externe Festplatte nur für TimeMachine gekauft. Denn TimeMachine ist super, die einzige Backup-Lösung die ganz bewusst nie in Erscheinung tritt es sei denn man braucht sie. TimeMachine läuft leise und unbeachtet im Hintergrund, und gibt mir dieses flauschige Gefühl von Sicherheit, quasi das unsicht- und spürbare Kondom der Computerwelt (bzw. Apple-Welt).&lt;/p&gt;
&lt;p&gt;...Bis ich einmal den fatalen Fehler beging, meine externe Festplatte HOCHZUHEBEN. Nicht ruckartig, nicht gewaltsam, sondern tatsächlich sehr sanft, aber wohl gerade zu einem ungünstigen Zeitpunkt, denn die Festplatte gab ein leises Klick von sich und hörte auf zu funktionieren.&lt;/p&gt;
&lt;p&gt;Es handelt sich hierbei um eine externe Festplatte der Marke Western Digital MyBook mit 500 Gigabytes, gekauft bei Norskit. Ein Anruf beim Verkäufer ergab, dass dies eine alte Bestellung (weltbewegende 9 Monate) sei und ich daher bei einer anderen Nummer anrufen sollte. Eine sehr freundliche Mitarbeiterin teilte mir dort mit, dass die Firma leider Insolvent sei und ich meine Supportanfrage daher an den Hersteller richten sollte. Und was soll ich sagen? EIN GLÜCK, dass sie das sagte!&lt;/p&gt;
&lt;p&gt;Denn auf der Webseite von Western Digital gibt es nicht nur eine Support-Telefonnummer, sondern gleich ein komplettes austausch-Programm für Festplatten, welches vollkommen automatisiert abläuft: Man gibt die Modellnummer seiner Festplatte und -für Notfälle- seine Email-Adresse an und bekommt sofort eine neue Festplatte zugeschickt, mit der einzigen Auflage, die alte, defekte Platte innerhalb von 30 Tagen einzuschicken. Und tatsächlich wurde die neue Platte prompt am nächsten Tag verschickt und kam heute pünktlich per UPS bei mir an.&lt;/p&gt;
&lt;p&gt;Faszinierend, so wünsche ich mir Kundenservice. Der einzige Wermutstropfen ist, dass Western Digital offenbar nicht sehr überzeugt von der Ausfallsicherheit seiner Festplatten ist, wenn sie so viel Infrastruktur für den einfachen Austausch bereitstellen... Na egal, ich will mal nicht meckern ;-)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Nachschlag:&lt;/em&gt; Es stellt sich heraus, die neue Festplatte unterscheidet sich ein wenig von der alten: Sie ist silber statt schwarz und hat zwei Firewire 800 Anschlüsse anstatt Firewire 400 -- ein Glück, dass auch Kabel mitgeliefert wurden, sonst könnte ich sie jetzt nicht anschließen!&lt;/p&gt;</description><author>bastibe.de</author><pubDate>Thu, 19 Mar 2009 23:17:00 GMT</pubDate><guid isPermaLink="true">https://bastibe.de/2009-03-19-western-digital-festplatten-umtausch-mit-uberraschungen.html</guid></item><item><title>Google Streetview is amazing</title><link>https://www.databasesandlife.com/google-streetview-is-amazing/</link><description>&lt;p&gt;I see why people get a bit upset about the privacy aspects of Google Streetview! On the other hand, it is rather amazing. To sit here in my office in Vienna and be able to walk around where I used to live at Southampton University.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.google.co.uk/maps/@50.9251949,-1.384779,3a,75y,3h,92.64t/data=!3m6!1e1!3m4!1sHp_57q0MlxqJLgbRKW_-wA!2e0!7i13312!8i6656?hl=en" rel="noopener noreferrer" target="_blank"&gt;First house&lt;/a&gt; (where I lived Summer 1996 – Summer 1997)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.google.co.uk/maps/@50.9269467,-1.3879654,3a,75y,135.61h,88.12t/data=!3m6!1e1!3m4!1swTM3gsBmJyvSbkdnb8Wn0g!2e0!7i13312!8i6656?hl=en" rel="noopener noreferrer" target="_blank"&gt;Second house&lt;/a&gt; (where I lived Summer 1997 – Summer 1998)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In comparison to my first house, even the flat I&amp;rsquo;m living in now doesn&amp;rsquo;t look too bad :)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 19 Mar 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/google-streetview-is-amazing/</guid></item><item><title>New OpenGL programs</title><link>https://bastian.rieck.me/blog/2009/new_opengl_programs/</link><description>&lt;p&gt;I finally released some old code I wrote for a University course. You can find
it on my &lt;a href="https://github.com/Pseudomanifold/gl_applications"&gt;GitHub&lt;/a&gt;.
The programs are not really special and well-written (as is mostly the
case when assignments with short deadlines are concerned), but
I polished them a bit, sprinkled some comments over them, and added
a big portion of &lt;em&gt;love&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Something like that, anyway.&lt;/p&gt;
&lt;p&gt;Since it is not explicitly mentioned anywhere, you need the OpenGL and GLUT
libraries in order to compile these programs. It might be necessary to change
the library paths in the Makefile if you are not using FreeBSD, which is,
judging from the server&amp;rsquo;s log files, unfortunately most probable.&lt;/p&gt;
&lt;p&gt;Speaking of operating systems, a fun fact from the log files: Most of my
visitors use Linux &lt;em&gt;or&lt;/em&gt; Sun Solaris. Either that or somebody &lt;em&gt;really&lt;/em&gt; has some
fun faking the user agents.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Wed, 18 Mar 2009 23:57:03 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2009/new_opengl_programs/</guid></item><item><title>Some notes about Xorg 7.4, libxine and CUPS</title><link>https://bastian.rieck.me/blog/2009/some_notes_about_xorg_7_4_libxine_and_cups/</link><description>&lt;p&gt;The last update of my local ports collection was most annoying and unnerving. Here are some notes to dodge three of the bullets.&lt;/p&gt;
&lt;h1 id="xorg-74"&gt;Xorg 7.4&lt;/h1&gt;
&lt;p&gt;Either disable HAL at compile time &lt;em&gt;or&lt;/em&gt; add the following to your &lt;code&gt;xorg.conf&lt;/code&gt; (assuming your keyboard is configured properly etc.):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Option	&amp;quot;AutoAddDevices&amp;quot;	&amp;quot;OFF&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Else, you would have to configure your keyboard settings (such as layout, rules etc.) in some obscure HAL configuration file that is hard to find. And to be frank, I was unwilling to create some XML files in a directory pretty well hidden on my hard disk &lt;em&gt;just&lt;/em&gt; to get my X server to accept input from German keyboards. Seriously, what is wrong with the &lt;code&gt;InputDevice&lt;/code&gt; section in &lt;code&gt;Xorg.conf&lt;/code&gt;?&lt;/p&gt;
&lt;h1 id="libxine"&gt;libxine&lt;/h1&gt;
&lt;p&gt;Don&amp;rsquo;t compile it with &lt;code&gt;pulseaudio&lt;/code&gt; support if you don&amp;rsquo;t need it. I did compile it with that option and my reward was that programs such as &lt;code&gt;Xine&lt;/code&gt; or &lt;code&gt;Amarok&lt;/code&gt; would hang. Using the last of their strength, they would utter cryptic messages on the command-line:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Caps.c: Dropping root privileges.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Since I did not need &lt;code&gt;pulseaudio&lt;/code&gt;, I recompiled libxine, Xine, and Amarok and successfully resurrected them.&lt;/p&gt;
&lt;h1 id="cups"&gt;CUPS&lt;/h1&gt;
&lt;p&gt;Be sure to install &lt;code&gt;print/gutenprint&lt;/code&gt; from the ports collection. Your applications and printers will thank you for it. And as a boon, you will not get any &lt;code&gt;Unsupported format 'application/postscript'&lt;/code&gt; messages because all necessary dependencies will be available.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it. FreeBSD FTW!&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Mon, 16 Mar 2009 21:59:10 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2009/some_notes_about_xorg_7_4_libxine_and_cups/</guid></item><item><title>Debugging und GCC auf Windows</title><link>https://bastibe.de/2009-03-15-debugging-und-gcc-auf-windows.html</link><description>&lt;p&gt;&lt;img alt="code" src="http://bastibe.de/static/2009-03/code.png" /&gt;&lt;/p&gt;
&lt;p&gt;So, jetzt habe ich mein Mex-File zum Einlesen beliebiger Audiodateien endlich lauffähig auf Windows und Mac. Leider werde ich nicht dafür bezahlt, auch noch eine Linux-Version zu bauen, aber falls Interesse besteht, versuche ich mich vielleicht einmal daran.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/State_of_the_Union"&gt;The State of The Union&lt;/a&gt;: Kleine Dateien einlesen, kein Problem. Exotische Formate einlesen, kein Problem. Metadaten auslesen, kein Problem. Dateigröße, Bitrate und Samplerate auslesen, ein kleines Problem, da diese Parameter bei komprimierten Formaten nicht unbedingt fest stehen. Große Dateien einlösen, auf dem Mac kein Problem, auf Windows… nun ja, es dauert. Eine WAV-Datei von 5:30 min einzulesen, dauert mit Windows momentan ca. eine Stunde. Das kann nicht sein, in der Zeit habe ich die Datei dem Programm vorgelesen, wenn es sein muss.&lt;/p&gt;
&lt;p&gt;Also, was ist da faul? Jetzt heißt es debuggen: &lt;a href="http://de.wikipedia.org/wiki/GNU_Debugger"&gt;GDB&lt;/a&gt; ist mein Freund, aber leider spreche ich seine Sprache nicht, also Oldschool-Debugging mit &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdio/printf.html"&gt;printf()&lt;/a&gt; (bzw. &lt;a href="http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/apiref/mexprintf.html"&gt;mexPrintf()&lt;/a&gt;; Aber da &lt;code&gt;#define printf mexPrintf&lt;/code&gt; ist das das selbe). Blöd nur, dass Matlab selbst entscheidet, wann es meine Printfs auf den Bildschirm schreibt und es sich dazu entschlossen hat, dies immer erst nach dem Ausführen der Datei, also erst nachdem es bereits eine Stunde gearbeitet hat, zu tun. Einiges Hirnen später konnte ich Matlab endlich über eine Kombination aus &lt;a href="http://de.wikipedia.org/wiki/Typumwandlung"&gt;Typecasts&lt;/a&gt;, &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdio/sprintf.html"&gt;sprintf&lt;/a&gt; und &lt;a href="http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/apiref/mexwarnmsgtxt.html"&gt;mexWarnMsgTxt&lt;/a&gt; dazu überreden, wenigstens sporadisch ein paar Informationen herauszugeben.&lt;/p&gt;
&lt;p&gt;Das Ergebnis:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Die Datei funktioniert tadellos, ist nur ein wenig langsam (s.o.)&lt;/li&gt;
&lt;li&gt;Wer ist schuld? &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdlib/realloc.html"&gt;Realloc&lt;/a&gt; ist schuld!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Das kam überraschend! Offenbar ist realloc auf dem Mac um mehrere Größenordnungen performanter als auf &lt;a href="http://www.mingw.org/"&gt;MinGW&lt;/a&gt;_Windows, denn die selbe Anwendung, die auf dem Mac ca. eine Sekunde braucht, braucht auf Windows eine Stunde! Und das allein wegen realloc! (Eigentlich: eine halbe Stunde wegen realloc, der Rest ist der Tatsache geschuldet, dass Windows in einer &lt;a href="http://www.vmware.com/de/products/fusion/"&gt;VM&lt;/a&gt; läuft)&lt;/p&gt;
&lt;p&gt;Bei WAV-Dateien werden immer 2048 Samples an einem Stück ausgelesen. Danach verwende ich ein realloc, um meinen haupt-Speicherpuffer um diese Größe zu vergrößern und kopiere die neuen Daten dort hinein. Bei meinen 5:30 min macht das bei einer Samplerate von 44100 kHz und zwei Kanälen ca. 15000 Aufrufe von realloc. Komprimierte Datenformate haben üblicherweise kleinere Frames und damit noch einmal wesentlich mehr realloc-Aufrufe.
Der Plan ist also, jetzt statt häufiger, kleiner realloc-Aufrufe, seltenere, größere Aufrufe zu machen. Zeit für ein paar Experimente:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
  &lt;th&gt;realloc()-Größe&lt;/th&gt;
  &lt;th&gt;realloc()-Aufrufe&lt;/th&gt;
  &lt;th&gt;benötigte   Zeit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
  &lt;td&gt;2^11 =    2048&lt;/td&gt;
  &lt;td&gt;15000&lt;/td&gt;
  &lt;td&gt;~1 h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;2^16 =   65536&lt;/td&gt;
  &lt;td&gt;470&lt;/td&gt;
  &lt;td&gt;~2 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;2^17 =  131072&lt;/td&gt;
  &lt;td&gt;240&lt;/td&gt;
  &lt;td&gt;~1 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;2^18 =  262144&lt;/td&gt;
  &lt;td&gt;120&lt;/td&gt;
  &lt;td&gt;30 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;2^19 =  524288&lt;/td&gt;
  &lt;td&gt;60&lt;/td&gt;
  &lt;td&gt;18 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;2^20 = 1048576&lt;/td&gt;
  &lt;td&gt;30&lt;/td&gt;
  &lt;td&gt;10.5 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;2^21 = 2097152&lt;/td&gt;
  &lt;td&gt;15&lt;/td&gt;
  &lt;td&gt;7.3 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;2^22 = 4194304&lt;/td&gt;
  &lt;td&gt;7&lt;/td&gt;
  &lt;td&gt;5.1 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;2^23 = 8388608&lt;/td&gt;
  &lt;td&gt;3&lt;/td&gt;
  &lt;td&gt;4.2 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Das Spannende ist: Ich ändere durch meine Methodik praktisch nichts außer der Anzahl und Größe der realloc-Aufrufe, aber man erkennt einen eindeutigen Zusammenhang zwischen Performance und Anzahl der Aufrufe, ergo ist realloc der alleinige Schuldige für mein Performanceproblem auf Windows.&lt;/p&gt;
&lt;p&gt;An dieser Stelle fiel mir ein, dass ich bereits an früherer Stelle einmal die gesamte Länge des Audio-Streams anhand der Metadaten geschätzt hatte. Durch eine somit vorgenommene Prä-Allokation des gesamten Speichers lässt sie die Laufzeit weiter auf 2.2 s drücken. Das ist immernoch nicht einmal halb so schnell wie auf OSX (0.9 s), aber das mag auch an der virtuellen Maschine liegen.&lt;/p&gt;
&lt;p&gt;Mehr als diesen anecdotal Evidence kann ich nicht anbieten, aber ich bin mir sicher, dass ich ab jetzt die Finger von inkrementiellen Speichervergrößerungen auf MinGW/Windows lassen werde. Ist das in MSVC ähnlich schlimm, oder habe ich da etwa einen Bug entdeckt?&lt;/p&gt;</description><author>bastibe.de</author><pubDate>Sun, 15 Mar 2009 17:10:00 GMT</pubDate><guid isPermaLink="true">https://bastibe.de/2009-03-15-debugging-und-gcc-auf-windows.html</guid></item><item><title>Goto in Scala</title><link>https://rd.nz/2009/03/goto-in-scala.html</link><author>Rich Dougherty</author><pubDate>Sun, 15 Mar 2009 07:11:00 GMT</pubDate><guid isPermaLink="true">https://rd.nz/2009/03/goto-in-scala.html</guid></item><item><title>Code Conventions</title><link>https://peterlyons.com/problog/2009/03/code-conventions/</link><description>&lt;p&gt;Here's a link to &lt;a href="https://peterlyons.com/code_conventions"&gt;my article on code conventions&lt;/a&gt;. Feel free to post comments here.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Sun, 15 Mar 2009 05:06:23 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2009/03/code-conventions/</guid></item><item><title>How to run two wordpress blogs on one web site</title><link>https://peterlyons.com/problog/2009/03/how-to-run-two-wordpress-blogs-on-one-web-site/</link><description>&lt;p&gt;There is ample detailed information out there on installing wordpress. However, I wanted to just provide a small supplement about setting up two distinct wordpress blogs within a single apache2 web site. The system I am using is Ubuntu Linux 8.10, but other than the package installation, the configuration steps should be the same on other linux distributions.&lt;/p&gt;
&lt;p&gt;As a first step, read through the &lt;a href="http://codex.wordpress.org/Getting_Started_with_WordPress#Installation"&gt;Wordpress Installation Instructions&lt;/a&gt;. You will find them to be thorough and clear. The starting point for my setup is that I already had a web site up and running under apache2. I just wanted to add the Wordpress (and underlying MySQL database) setup and have two separate blogs with separate themes and content.&lt;/p&gt;
&lt;p&gt;So here's my starting setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 8.10 on an amd64 system&lt;/li&gt;
&lt;li&gt;apache2 already installed and working&lt;/li&gt;
&lt;li&gt;static content for the web site deployed in &lt;code&gt;/var/www/example.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;MySQL and Wordpress are not yet installed&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="install-wordpress-and-mysql"&gt;Install wordpress and mysql&lt;/h4&gt;
&lt;p&gt;First let's install wordpress and mysql. I'll do this on the command line using the &lt;code&gt;apt-get&lt;/code&gt; program, but you can &lt;a href="https://help.ubuntu.com/8.10/add-applications/C/advanced.html"&gt;use one of the graphical options as well&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;sudo apt-get install wordpress virtual-mysql-server&lt;/pre&gt;
&lt;p&gt;You should see a bunch of packages that will get installed and press &lt;code&gt;y&lt;/code&gt; to proceed. The MySQL install will prompt you to create a new mysql root account password, so go ahead and do that.&lt;/p&gt;
&lt;h4 id="set-up-the-wordpress-databases"&gt;Set up the wordpress databases&lt;/h4&gt;
&lt;p&gt;OK, so let's say we are going to call our blogs blog1 and blog2. We need to create mysql databases for them. Note that you may see tutorials telling you you can store the data for two separate blogs in one database. While true, two databases is a much cleaner way to go. End users shouldn't be going around making up database table names. So, we are going to use the mysql command line tools to do this. Again, the wordpress docs here are fine and describe graphical alternatives as well. Let's connect to mysql (use the password you created above) as root and create the databases. We'll call them blog1 and blog2 and we'll also set up user accounts inside mysql that wordpress will use to access the databases. Again for simplicity, we'll also call the user accounts blog1 and blog2. Replace "MakeUpPassword" with your own chosen password.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;mysql -u root -p
create database blog1;
GRANT ALL PRIVILEGES ON blog1.* TO "blog1"@"localhost" IDENTIFIED BY "MakeUpPassword";
flush privileges;
create database blog2;
GRANT ALL PRIVILEGES ON blog2.* TO "blog2"@"localhost" IDENTIFIED BY "MakeUpPassword";
flush privileges;
quit;
&lt;/pre&gt;
&lt;/div&gt;
&lt;h4 id="install-wordpress-files-and-configure-db-access"&gt;Install wordpress files and configure DB access&lt;/h4&gt;
&lt;p&gt;OK, when we installed wordpress above, Ubuntu put a copy of the wordpress PHP files into &lt;code&gt;/usr/share/wordpress&lt;/code&gt;, so now we're going to make 2 copies, one for each blog, underneath our web site's document root. Note that since these are two blogs in the same web site, we don't want either blog to be the top level home page of the site, so each gets its own separate subdirectory.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;sudo mkdir -p /var/www/example.com/blog1 /var/www/example.com/blog2
sudo cp -r /usr/share/wordpress/* /var/www/example.com/blog1
sudo cp -r /usr/share/wordpress/* /var/www/example.com/blog2
sudo chown -R www-data:www-data /var/www/example.com/blog*
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now I should note that Debian/Ubuntu has a customized wordpress configuration. Often, these are well crafted by the experts and will save you a lot of time and hassle if you follow the patterns they suggest. In this case, I don't think their setup exactly matches my goal of two different blogs under one web site, so I am bypassing their pattern and doing my own simple alternative. So what happens is that by default the file &lt;code&gt;/usr/share/wordpress/wp-config.php is a symbolic link to /etc/wordpress/wp-config.php&lt;/code&gt;, and when we copied these files, that symlink was copied too, which means if we aren't careful both of our blogs will point at the same database, making them one blog instead of two! So we do the following:&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;sudo rm /var/www/example.com/blog*/wp-config.php
sudo cp /usr/share/wordpress/wp-config-sample.php /var/www/example.com/blog1/wp-config.php
sudo cp /usr/share/wordpress/wp-config-sample.php /var/www/example.com/blog2/wp-config.php
sudo chown -R www-data:www-data /var/www/example.com/blog*
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;OK, now each blog has it's own separate copy of wp-config.php. Go ahead and edit those files to point blog1 at the blog1 database and blog2 at the blog2 database using vi or your text editor of choice. When done, they should look as follows:&lt;/p&gt;
&lt;pre&gt;/var/www/example.com/blog1/wp-config.php&lt;/pre&gt;
&lt;div class="code"&gt;
&lt;pre&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;pre&gt;/var/www/example.com/blog2/wp-config.php&lt;/pre&gt;
&lt;div class="code"&gt;
&lt;pre&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;h4 id="permalinks"&gt;Permalinks&lt;/h4&gt;
&lt;p&gt;OK, now let's make sure we have mod_rewrite enabled for wordpress permalinks, then we restart apache2 to get our new software and config to take effect. We'll also make sure we have a writeable .htaccess file so wordpress can set it up for us.&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;sudo a2enmod rewrite
sudo apache2ctl restart
sudo touch /var/www/example.com/blog1/.htaccess
sudo touch /var/www/example.com/blog2/.htaccess
sudo chown www-data:www-data /var/www/example.com/blog*/.htaccess
sudo chmod 644 /var/www/example.com/blog*/.htaccess
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Almost done, we can now point a web browser to &lt;a href="http://localhost/blog1/wp-admin/install.php"&gt;http://localhost/blog1/wp-admin/install.php&lt;/a&gt; and fill out that form and launch the wordpress self-install. Repeat the process for blog2 at &lt;a href="http://localhost/blog2/wp-admin/install.php"&gt;http://localhost/blog2/wp-admin/install.php&lt;/a&gt;. Now, this is going to set up the blog in the database and create the admin user with a default password. If your computer has a mail transport agent running, you should get the email with the default password. If not, you won't, which is what happened to me, so we can just set the admin password to one of our choosing. First, we need to know the MD5 checksum of our chosen password. You can use &lt;a href="http://epleweb.com/md5/"&gt;this online form&lt;/a&gt; to get the MD5 of your password, but sending your password to some random web site in clear text is too insecure for me. Therefore, if you have python, you can use this little python one-liner to do it. This will securely prompt you for your password and print out the corresponding MD5. Nothing is sent over the network. You will end up with a 32-character hex string. Use this instead of the For details from wordpress, read &lt;a href="http://codex.wordpress.org/Resetting_Your_Password"&gt;resetting your password&lt;/a&gt; in the wordpress online docs. The cheat sheet is below.&lt;/p&gt;
&lt;pre&gt;python -c "import getpass,md5;m=md5.new();m.update(getpass.getpass());print m.hexdigest()"&lt;/pre&gt;
&lt;p&gt;OK, so let's set this password into mysql so we can start managing our blog&lt;/p&gt;
&lt;div class="code"&gt;
&lt;pre&gt;mysql -u root -p
use blog1;
update wp_users set user_pass="useyour32charhexstringmd5here" where user_nicename="admin";
use blog2;
update wp_users set user_pass="useyour32charhexstringmd5here" where user_nicename="admin";
quit;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;OK, you are good to go to &lt;a href="http://localhost/blog1"&gt;http://localhost/blog1&lt;/a&gt;, log in as admin, and start managing your blog. You can go in and set up custom pretty permalinks in the admin section and when you save, wordpress should be able to write the rewrite settings to the .htaccess file we set up for you. Good luck and happy blogging!&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Sun, 15 Mar 2009 04:57:53 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2009/03/how-to-run-two-wordpress-blogs-on-one-web-site/</guid></item><item><title>Music subscription and Rhapsody</title><link>https://peterlyons.com/problog/2009/03/music-subscription-and-rhapsody/</link><description>&lt;p&gt;Flat fee music subscription service has changed my life. I wish there was some less dramatic way to put it, but it's the honest truth. I don't remember exactly when, but somewhere in late 2006 probably, after reading &lt;a href="http://www.joelonsoftware.com/items/2006/11/10.html"&gt;this Joel on Software - The infinite music collection&lt;/a&gt; article, I was intrigued by the idea and did a little shopping. I know I looked at Napster, Virgin, Yahoo, and Rhapsody at least. I think I initially went with Rhapsody because of the Sonos integration. I experimented for a bit listening on the computer and then I think that Christmas I asked for a basic set of Sonos gear, which was and still is exorbitantly priced.&lt;/p&gt;
&lt;p&gt;OK, so first some comments on the whole notion of subscription music service. It's amazing. For someone like me with a voracious appetite for new music cultivated spending long hours every week in the fantastic &lt;a href="http://www.oberlin.edu/library/con/"&gt;Oberlin Conservatory Music Library&lt;/a&gt;, it was complete drooling brain-fry. It was a bit overwhelming at first. There were numerous aspects of this arrangement that were just awesome. Obviously, the size of the library is number one. Having extremely ecclectic and somewhat obscure taste in music, I was worried that it would be basically a top-40 archive that I would quickly grow bored with. This was not the case. The collection of jazz, classical, and less main stream stuff was really quite good. Now, every CD in my personal library is not available, but the service library as a whole is so infinitely broad and compelling that I don't care that much.&lt;/p&gt;
&lt;p&gt;Secondly, there is the complete removal of the financial penalty for exploring. Before I expound on this let me just state that I listen to whole albums in totality in order. Fuck shuffle. Fuck 30 second previews. I usually listen to complete albums start to finish numerous times before I decide how I feel about them. In addition, when checking out a new artist, I actually prefer to listen to all the albums in chronological order. Sometimes I'll scan a "best of" to see if it's worth my time, but usually I go straight for the debut album. For years, I would gather suggestions from peers, and then go plunk down $17 for a CD. No more. Now I can try relentlessly at full speed for a flat fee. This is fantastic and significant. Now I can actually listen to artists I know I don't care for, if only to better understand what it is about them that I don't like.&lt;/p&gt;
&lt;p&gt;Third, in the jazz and classical genres, musicians are vastly more prolific compared to their pop/rock peers. Go try to get the complete recordings of Miles Davis. Be sure to bring like $1500. With a flat fee subscription, I can go and listen to LOTS of music by folks I like. One of the first things that got me completely hooked on this was listening to a 10-disc set of Steve Reich: Works 1965-1995. This retails at &lt;a href="http://www.amazon.com/Steve-Reich-1965-1995/dp/B000005J4P/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=music&amp;amp;qid=1236457622&amp;amp;sr=8-1"&gt;amazon.com for $99.98&lt;/a&gt;. So the trade-off for this ONE collection is own this collection forever or get over six months access to millions of songs online.&lt;/p&gt;
&lt;p&gt;Fourth, you can compare recordings to your heart's content. I have a physical copy of the venerable &lt;a href="http://www.amazon.com/Bela-Bartok-Quartets-Emerson-Quartet/dp/B000001G9O/ref=sr_1_1?ie=UTF8&amp;amp;s=music&amp;amp;qid=1236532264&amp;amp;sr=1-1"&gt;Emerson String Quartet's recording of the six Bela Bartok String Quartets&lt;/a&gt;. Currently going for $22 on amazon. It is a cherished record in my collection. However, the chances of me buying another recording of this work are slim to none, even though I would love to hear various interpretations. Rhapsody has no less than ten complete recordings of these works available! When it comes to jazz and you want to learn a new song, Rhapsody is going to give you about thirty recordings to choose from. No better way to truly absorb the song's full meaning from the repertoire by listening to numerous different recordings.&lt;/p&gt;
&lt;p&gt;Fifth, there is no personal music library management. I've spent hours and hours labeling my CD collection (over 800 discs), ripping them, fixing the cddb track metadata, transferring stuff to portable devices, re-transfering it when it gets corrupted, etc. Then there's the idea that I have to keep this all backed up. I have so far ripped about 30 GB of music and don't really want to deal with backing that up. With a subscription, all the music is just instantly there. It's all indexed and searchable. The track metadata is correct. I don't have to personally back it all up.&lt;/p&gt;
&lt;p&gt;Sixth, it works with portable players in a reasonable way. I think for the next Christmas I asked for the &lt;a href="http://reviews.cnet.com/mp3-players/sandisk-sansa-e280r-rhapsody/4505-6490_7-32102346.html"&gt;SanDisk Sansa e280R portable MP3 player&lt;/a&gt; that is integrated with Rhapsody. You can download tracks to the device and as long as you connect it once a month to verify your subscription is active, you are good to go. It works pretty well and doesn't really add any hassle. I'll be posting another entry soon about the various devices (basically all bad) I have used with Rhapsody and how they work.&lt;/p&gt;
&lt;p&gt;So I'm totally hooked on this model of flat fee all you can eat subscription music. I was initially concerned that streaming this in real time would not work, but honestly there have been almost no glitches. Either the service is working or it isn't, but it doesn't do any buffering interrupting the song or anything like that, which would be a complete deal-breaker. To try to listen to this much music on &lt;a href="http://www.itunes.com"&gt;iTunes&lt;/a&gt; would cost me hundreds of dollars a month.&lt;/p&gt;
&lt;p&gt;So, let's look at some of the cons. There are no linear notes. I do miss that. I also miss detailed personnel listings per track. However, when I really am interested in that, the info is usually available online if I can remember to go look it up. As of now, in order for this to work, it relies on Plays For Sure Digital Right Management (DRM) scheme. Generally I am against DRM, but if it is required in order for the music industry to be willing to make a subscription service available, so be it.&lt;/p&gt;
&lt;p&gt;OK, so that is mostly focussing on the subscription model in the abstract. Let's talk about the Rhapsody service in particular. After a few years of using it, overall I'd probably give it about 7 out of 10. It's good, but it has some annoyances. On the plus side, the web based Rhapsody online product, which was formerly a proprietary plug-in that gave me a few hassles on Linux, is now entirely standard flash based app. In general it works great on linux however my new laptop I installed 64 bit Ubuntu and the rhapsody flash app won't log in currently. I'll be contacting support (sigh) to yell at them to make it work.&lt;/p&gt;
&lt;p&gt;So some of the annoyances include inability to re-order tracks in your queue/playlist. You can append to the end of it and delete items, but you can't reorder. Again, since I generally listen to whole albums it doesn't bother me much, but sometimes it can be a real pain. Also, their web site used to have a frigging NORMAL LOGIN HTML FORM, thus I could save my credentials in my browser and not be bothered with it. Now the flash app itself prompts for credentials which means I have to re-type my password a few times a day. I asked support to make it go back to the old way but you can guess how that went.&lt;/p&gt;
&lt;p&gt;Reliability and bill payment have been good. The Windows application that I need to use to actually transfer music to a portable player is decent. It's better than the flash app, but still a bit cumbersome. It's got a web browser pane embedded in it, which has all the annoyances of a web browser, but not all the screen components and tools to properly manage it. Here they have a proper playlist editor window. Ideally I would be able to transfer to my portable from a linux application, but I have realistic expectations here. It ain't going to happen.&lt;/p&gt;
&lt;p&gt;Rhapsody has user and celebrity playlists, both of which are a great way to explore and check out new stuff.&lt;/p&gt;
&lt;p&gt;So if you are a big music fan, and still haven't tried a subscription service, give it a shot. I can never go back. Look for more posts soon about my experierces with music player devices over the years.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Sun, 15 Mar 2009 04:54:03 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2009/03/music-subscription-and-rhapsody/</guid></item><item><title>Announcing Pete's Points</title><link>https://peterlyons.com/problog/2009/03/announcing-petes-points/</link><description>&lt;p&gt;I have decided to start a "professional" blog. I use the word "professional" only in the sense of "not personal". I will post about software engineering, computers, consumer electronics, and music technology primarily. I hope you enjoy it and look forward to any conversations this generates.&lt;/p&gt;</description><author>Pete's Points</author><pubDate>Sun, 15 Mar 2009 04:53:24 GMT</pubDate><guid isPermaLink="true">https://peterlyons.com/problog/2009/03/announcing-petes-points/</guid></item><item><title>Get a Mac</title><link>https://bastibe.de/2009-03-14-get-a-mac.html</link><description>&lt;p&gt;&lt;img alt="osx" src="http://bastibe.de/static/2009-03/osx.png" /&gt;&lt;/p&gt;
&lt;p&gt;Bei meinem üblichen, Samstagmorgendlichen, bettlägrigen Web-Rundgang habe ich heute drei sehr nette Artikel von David Alison gefunden, einem Windows-Programmierer und selbsternanntem Microsoft-Fanboy, der sich einen Mac zulegt und unverhofft glücklich damit wird. So glücklich sogar, dass er inzwischen mehr oder weniger ein Mac-only-User geworden ist.&lt;/p&gt;
&lt;p&gt;Ziemlich genau wie ihm ging es mir auch.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Teil 1: &lt;a href="http://www.davidalison.com/2008/02/hardcore-windows-guy-switches-to-mac.html"&gt;A hardcore Windows guy gets a Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Teil 2: &lt;a href="http://www.davidalison.com/2008/04/mac-after-two-months-of-mac-heres-why-i.html"&gt;After two months of Mac, here's why I switched&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Teil 3: &lt;a href="http://www.davidalison.com/2009/03/switching-from-windows-to-mac-one-year.html"&gt;Switching from Windows to Mac - One Year Later&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wens interessiert: Das ist eine sehr hübsche Einführung darin, warum Macs toll sind. Viel besser als alles, was ich dazu schreiben würde oder &lt;a href="http://www.meinstudi.de/basti/?p=49"&gt;bereits&lt;/a&gt; &lt;a href="http://www.meinstudi.de/basti/?p=4"&gt;getan&lt;/a&gt; &lt;a href="http://www.meinstudi.de/basti/?p=24"&gt;habe&lt;/a&gt;.&lt;/p&gt;</description><author>bastibe.de</author><pubDate>Sat, 14 Mar 2009 12:24:00 GMT</pubDate><guid isPermaLink="true">https://bastibe.de/2009-03-14-get-a-mac.html</guid></item><item><title>The real history of Oracle database revealed!</title><link>https://tanelpoder.com/2009/03/14/the-real-history-of-oracle-database-revealed/</link><description>&lt;p&gt;Anyone who’s looked into Oracle X$ tables, knows that their names are really complicated and quite unreadable (and non-pronouncable), such X$KZSRT, X$KCPXPL, X$KQFSZ and so on.&lt;/p&gt;
&lt;p&gt;A few years ago at some conference someone came up with a thought that the reason why Oracle has so unreadable names for its X$ tables is that the leading edge database source code was actually stolen in the 80’s from a Soviet Union intelligence agency.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 14 Mar 2009 07:36:40 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/03/14/the-real-history-of-oracle-database-revealed/</guid></item><item><title>Kompilieren auf Windows</title><link>https://bastibe.de/2009-03-12-kompilieren-auf-windows.html</link><description>&lt;p&gt;&lt;img alt="open_source_rules" src="http://bastibe.de/static/2009-03/open_source_rules.png" /&gt;&lt;/p&gt;
&lt;p&gt;Seit einigen Wochen arbeite ich an einem kleinen Projekt: Eine Matlab-Funktion, die, ähnlich wie die standard-Funktion &lt;a href="http://www.mathworks.com/access/helpdesk_r13/help/techdoc/ref/wavread.html"&gt;wavread()&lt;/a&gt;, Audiodateien einlesen kann. Aber nicht irgendwelche Audiofiles, sondern ALLE MÖGLICHEN Audiofiles. Wie geht das? Jeder kennt &lt;a href="http://www.videolan.org/vlc/"&gt;VLC&lt;/a&gt;, den Video-Player, der so ziemlich jedes Video öffnen kann, das man ihm vorsetzt, selbst wenn man überhaupt keine Codecs installiert hat. VLC basiert auf &lt;a href="http://de.wikipedia.org/wiki/FFmpeg"&gt;FFmpeg&lt;/a&gt;, einem Open-Source Programm, welches Funktionen bereit stellt, um eben alle möglichen Mediendaten zu öffnen.&lt;/p&gt;
&lt;p&gt;Und da FFmpeg freie Software ist, kann man sie auch für andere Dinge verwenden, etwa, um mit Matlab Audiodateien zu öffnen. Fehlt noch eine Verbindung zwischen Matlab und den FFmpeg-C-Bibliotheken, und die gibt es in Form von &lt;a href="http://www.mathworks.com/support/tech-notes/1600/1605.html#intro"&gt;Mex&lt;/a&gt;, der C-Schnittstelle von Matlab. Feine Sache, zwar hat es eine Weile gedauert, bis ich mich in libavformat und libavcodec eingearbeitet hatte (die beiden wichtigsten FFmpeg-Bibliotheken), aber im Endeffekt lief das alles sehr schmerzfrei -- und das, obwohl ich bisher Mex-Kompilieren mit Matlab immer als eine grausige Beschäftigung in Erinnerung hatte, gespickt von kryptischen Kompiler-Fehlern und hässlichen Notlösungen.&lt;/p&gt;
&lt;p&gt;Bumms, Zack, kaum hatte ich mich versehen, hatte ich ein lauffähiges, tadellos funktionierendes &lt;a href="http://en.wikipedia.org/wiki/MATLAB#Calling_C_and_Fortran_functions"&gt;Mex-File&lt;/a&gt; auf meinem Mac liegen. Damit hatte ich nicht gerechnet. Also sofort die momentane Euphorie ausnutzen und weiter zu Schritt 2, das Ganze nochmal auf Windows. Meine Probleme, Windows so einzurichten, dass ich endlich Kompilieren kann, &lt;a href="http://www.daskrachen.com/2009/03/great-scott.html"&gt;hatte ich ja schon berichtet&lt;/a&gt;. Ich hatte also Visual Studio 2005 installiert, um Matlab zufrieden zu stellen und einen anständigen Kompiler auf dem System zu haben. Aber war ja klar, MSVC macht wieder sein eigenes Ding und nichts ist mit Standardkonformität und Trallalla: Keine &lt;a href="http://de.wikipedia.org/wiki/C99#C99"&gt;C99&lt;/a&gt;-Unterstützung, also keine Variablendeklarationen mitten im Code und keine stdint.h oder inttype.h. Ein Glück, es gibt wieder ein wenig mehr Free Software, die wenigstens &lt;a href="http://code.google.com/p/msinttypes/"&gt;letztere Lücke schließt&lt;/a&gt;. Dennoch; Ich bekomme mein mex-File nicht zum Laufen. Es ist wie verflucht, kaum setze ich mich an eine Windows-Maschine zum Programmieren, fällt meine Produktivität auf das Niveau eines Backsteins.&lt;/p&gt;
&lt;p&gt;Enter &lt;a href="http://sourceforge.net/projects/gnumex"&gt;gnumex&lt;/a&gt;, noch ein weiteres Stück FOSS, das es ermöglicht, GCC als Mex-Kompiler zu verwenden, AUF WINDOWS. Um die Dinge zu vereinfachen, verwendete ich die &lt;a href="http://www.mingw.org/"&gt;MinGW&lt;/a&gt;-Variante und kaum war diese Hürde genommen... lief alles. Einfach so. Wahrscheinlich bin ich ein Dickschädel und habe einfach nicht die Geistesschärfe, mit Windows-Kompilern zu arbeiten, aber mir scheint, alles was ich diesbezüglich anfasse und das nicht GCC heißt ist zum Scheitern verurteilt. Ein Glück, dass es die vielen klugen Jungen und Mädchen gibt, die so wunderbare freie Software schreiben, die mir das Leben so viel einfacher macht!&lt;/p&gt;
&lt;p&gt;Eine Fortsetzung kommt noch...&lt;/p&gt;</description><author>bastibe.de</author><pubDate>Thu, 12 Mar 2009 19:14:00 GMT</pubDate><guid isPermaLink="true">https://bastibe.de/2009-03-12-kompilieren-auf-windows.html</guid></item><item><title>A better NSLog</title><link>https://blog.nobugware.com/post/2009/03/11/better-nslog/</link><description>When debugging, I often found that NSLog is really boring, here is an attempt to make it nicer:
`
NSLog(@&amp;quot;mycar: %@&amp;quot;,myCar); NSLog(@&amp;quot; I'M HERE &amp;quot;); `
NSLog doesn&amp;rsquo;t tell you where the call was made (which file or which method), so you end with a lot of:
2009-03-11 22:30:53.789 ObjCTest[1565:10b] mycar: Porsche
2009-03-11 22:30:53.791 ObjCTest[1565:10b] I&amp;rsquo;M HERE
A better NSLog could tell us:
2009-03-11 22:32:25.823 ObjCTest[1581:10b] Car.m:32 -[Car init] I&amp;rsquo;M HERE AND I KNOW WHERE I AM</description><author>Fabrice Aneche</author><pubDate>Thu, 12 Mar 2009 04:44:11 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/03/11/better-nslog/</guid></item><item><title>"Ask Tom" Oracle Seminar in Prague</title><link>https://www.databasesandlife.com/ask-tom-oracle-seminar-in-prague/</link><description>&lt;p&gt;Today and tomorrow I am at an &lt;a href="http://www.oracle.com/global/cz/education/eblast/cz_two_day_training_ask_tom_live_ol.html" rel="noopener noreferrer" target="_blank"&gt;Ask Tom Live Seminar in Prague&lt;/a&gt;. Tom Kyte works for Oracle and has written many books on Oracle. For me he&amp;rsquo;s a bit of a &amp;ldquo;star&amp;rdquo;, so when I heard he was talking in Europe, I had to come. (But is that wrong? Normal people are in to stars like Robbie Williams surely, not Oracle experts.)&lt;/p&gt;
&lt;p&gt;Wow there is so much I don&amp;rsquo;t know about Oracle evidently. I mean the solutions that he is presenting concerning Oracle 11g, are solutions to problems in features I&amp;rsquo;ve never used, such as partitioning, etc.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 10 Mar 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/ask-tom-oracle-seminar-in-prague/</guid></item><item><title>Longboard</title><link>https://mattkeeter.com/projects/longboard</link><description>Homemade transportation</description><author>Matt Keeter</author><pubDate>Mon, 09 Mar 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://mattkeeter.com/projects/longboard</guid></item><item><title>10 years of UserFriendly.org</title><link>https://jasoneckert.github.io/myblog/10-years-of-userfriendly/</link><description>&lt;p&gt;&lt;img alt="UserFriendly book" src="userfriendly.jpg#right" title="UserFriendly book" /&gt;&lt;/p&gt;
&lt;p&gt;I haven’t blogged for a while.&lt;/p&gt;
&lt;p&gt;This is partly because my daughter and I have been enjoying some major events in Toronto (Ontario Science Centre, ROM, shopping, more shopping, etc.), and not much has happened in the Geek world aside from the new Apple hardware updates and Firefox achieving 100% market share in Antarctica.&lt;/p&gt;
&lt;p&gt;However, the main reason I haven’t blogged is that I have been engrossed with reading the 10th Anniversary book from UserFriendly.org (over 1000 pages).&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sun, 08 Mar 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/10-years-of-userfriendly/</guid></item><item><title>Oracle, Timesten and PL/SQL support</title><link>https://tanelpoder.com/2009/03/06/oracle-timesten-and-plsql-support/</link><description>&lt;p&gt;I thought to post about another new interest of mine, TimestTen, as I’ve worked with it in past and I have become a fan of it, especially after Oracle bought the company.&lt;/p&gt;
&lt;p&gt;Oracle has announced that TimesTen in-memory database will support PL/SQL in the upcoming release. That’s in 11gR2, where TimesTen is named the “in-memory database cache”.&lt;/p&gt;
&lt;p&gt;I’m happy to see the deep level of integration Oracle is doing with it. It looks like both classic Oracle RDBMS and the TimesTen based code will have a (partially) shared PL/SQL code base.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 07 Mar 2009 03:09:56 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/03/06/oracle-timesten-and-plsql-support/</guid></item><item><title>Vom Sinn und Unsinn, ein Cross-Platform-Compiling-Matlab-System aufzubauen</title><link>https://bastibe.de/2009-03-05-great-scott.html</link><description>&lt;p&gt;&lt;img alt="bitte_warten" src="http://bastibe.de/static/2009-03/bitte_warten.png" /&gt;&lt;/p&gt;
&lt;p&gt;Mal wieder: Ich schreibe ein Stück Software für meinen Nebenjob bei meinem Signalverarbeitung-Prof. Diesmal geht es darum, beliebige Audio-Files in Matlab einlesen zu können. Perfekt geeignet ist dafür die selbe Bibliothek, die auch von VLC verwendet wird, libavcodec/libavformat. Das ist eine normale C-Bibliothek, es braucht also nur noch ein kleines mex-File, um ihre Funktionalität für Matlab zur Verfügung zu stellen. Klappt auch wunderbar. Auf dem Mac.&lt;/p&gt;
&lt;p&gt;Schritt zwei ist dann, das Ganze auf Windows und Linux zum Laufen zu bringen. Eigentlich kein Problem, denn ich habe keine wilden Dinge getan und die Libraries selbst sind wunderbar Cross-Platform, es gibt sie sogar schon vorkompiliert für praktisch jedes denkbare Betriebssystem.&lt;/p&gt;
&lt;p&gt;Also, was brauche ich? Zwei Dinge: Matlab und einen C-Compiler (der mitgelieferte LLC-Compiler macht mein Hirn bluten). Matlab zu installieren ist meiner Erfahrung nach schmerzhaft. Bigtime. Nicht, weil Matlab schwer zu installieren wäre, sondern, weil Mathworks nur zwei Installationen pro Schachtel erlaubt, was für meine drei Betriebssysteme zu gewissen Problemen führt. Außerdem müsste ich meine eine Lizenz erst für die Windows-installation umschreiben lassen, und... ach, Schmerzen. Offenbar habe ich die Jungs dort aber schon derart häufig mit Lizenzanfragen genervt, dass sie mich einfach als hoffnungslos aufgegeben haben, denn dieses Mal musste ich keine neue Lizenz erstellen lassen, sondern einfach installieren, Passwort eingeben, und los. Mein Account meldet jetzt, dass ich fünf gleichzeitige Installationen hätte (von zwei erlaubten). Mir solls Recht sein.&lt;/p&gt;
&lt;p&gt;Außerdem: ein aktuelles Linux muss her. VMWare sei Dank, lauert im Linux-Installieren nicht mehr der Schrecken, im Zweifelsfall den kompletten Festplatteninhalt zu verlieren, sondern nur noch, an akuter Progressbar-itis zu ersticken. War ja klar, dass Autoupdate sich diesen Nachmittag aussucht, um meine Ubuntu-VM hoffnungslos zu zerstören. Also, neues Ubuntu heruntergeladen, neu installiert, neu Updates aufgespielt, zwei Stunden Lifetime verloren. Immerhin: es hat fehlerfrei funktioniert, das ist was Neues. Matlab hinterher, VMWare Tools dazu, fertig ist die Development-Kiste. Jetzt fehlt nur noch eine Verbindung zu meinem Development-Verzeichnis, damit ich auf meine Dateien zugreifen kann. Fehlanzeige. Dukommsthiernichrein. Na Toll.&lt;/p&gt;
&lt;p&gt;&lt;img alt="upgradepatch" src="http://bastibe.de/static/2009-03/upgradepatch.png" /&gt;&lt;/p&gt;
&lt;p&gt;Also weiter zu Windows. Frühere Versuche ergaben bereits, dass ich Matlab nicht dazu bewegen kann, (a) GCC als Compiler zu nehmen oder (b) das bereits installierte Microsoft Visual Studio C++ .Net Professional Directors Cut Special Edition 2008 Ultimate zu verwenden. Nähere Nachforschungen zeigen: Zu neu, Kennternich. Geht nur bis MSVC Jahrgang 2005. Also: Neues MSVC deinstallieren, Altes installieren. ich freue mich immer darauf, MSVC zu deinstallieren, denn es besteht lediglich aus kompakten 12 Programmen, die sich zwar alle auf einem Haufen Installieren- jedoch nicht De-Installieren lassen. Immerhin ist es dank MSDNAA-Membership nicht schwer, an die alten Versionen heranzukommen. Und klar, die Systemsteuerung lässt einen auch immer nur ein Programm auf einmal deinstallieren. Multitasking ist nicht. Dank Syncplicity kann Windows die Zwischenzeit immerhin dazu verwenden, all meine Development-Files auf den Rechner zu laden. Yay!
Das Schöne an Fortschrittsbalken ist ja, sie zeigen Fortschritt. Damit haben sie einen klaren Vorteil gegenüber etwa Dachbalken oder den Bittewartenpunktpunktpunkt-Balken, die die Microsoft SQL Server 2008-Deinstallation stolz herumzeigt. Die fühlt sich wohl sehr wichtig, denn sie rödelt eine starke halbe Stunde im Bitte-Warten-Modus herum. So mag ich Deinstallationen.&lt;/p&gt;
&lt;p&gt;To be continued...&lt;/p&gt;</description><author>bastibe.de</author><pubDate>Thu, 05 Mar 2009 15:55:00 GMT</pubDate><guid isPermaLink="true">https://bastibe.de/2009-03-05-great-scott.html</guid></item><item><title>The full power of Oracle’s diagnostic events, part 1: Syntax for KSD debug event handling</title><link>https://tanelpoder.com/2009/03/03/the-full-power-of-oracles-diagnostic-events-part-1-syntax-for-ksd-debug-event-handling/</link><description>&lt;p&gt;There’s a recent &lt;a href="http://www.freelists.org/post/oracle-l/determining-bind-values-in-deadlock-situations,9"&gt;thread&lt;/a&gt; in Oracle-L about deadlocks and a recommendation to dump various instance information when the deadlock happens. A deadlock trace dumps some useful things automatically, but sometimes you want more, especially in RAC environment.&lt;/p&gt;
&lt;p&gt;So is it possible to make Oracle dump additional things when the deadlock event happens? Yes it is and it’s doable with Oracle diagnostic event handling infrastructure.&lt;/p&gt;
&lt;p&gt;First I’ll take a step back and explain, what this command below means:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; &lt;strong&gt;alter session set events '10046 trace name context forever, level 12';&lt;/strong&gt;

Session altered.

&lt;/pre&gt;
&lt;p&gt;Of course you know what it does, it enables extended SQL trace. But why such cumbersome syntax?&lt;/p&gt;
&lt;p&gt;This syntax actually reveals some of the power of KSD diagnostic event syntax (KSD=kernel service debug):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10046&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first word in event string (the 10046) specifies the &lt;strong&gt;&lt;em&gt;when&lt;/em&gt;&lt;/strong&gt; some action should be taken.&lt;/p&gt;
&lt;p&gt;And everything after that (trace name context forever, level 12) &lt;strong&gt;&lt;em&gt;is&lt;/em&gt;&lt;/strong&gt; that action.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;trace&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first word in action (trace) specifies what type of action Oracle needs to take if that event (10046) occurs. By “event occurs” I mean that let say an Oracle parsing function calls ksdpec() function with 10046 as parameter, which in turn may recursively call some action set for that event and then returns that event level (12) back to the caller. Its up to the caller to act on that returned value, in 10046 case some ksd* tracing function is called then.&lt;/p&gt;
&lt;p&gt;In event syntax, “trace” is most generic action, which is used for tracing, behavior changing and Oracle dumps. In this post I will concentrate on the “trace” action as it’s most common one to use.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;name&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The “name” specifies that the name of what to dump/trace will follow. The “name” is always present when “trace” option is used (as far as I know).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;context&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now the next keyword (context) is the one where you can define whether you want Oracle to dump something when the event is hit or just do context specific trace. If you replace the “context” with “errorstack” for example, you wouldn’t get SQL trace output, but rather an Oracle errorstack dump whenever event 10046 is hit.&lt;/p&gt;
&lt;p&gt;You can use “oradebug dumplist” to find all the possible dump commands what you can set as actions for an event.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;forever&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The next keyword (forever) is actually an &lt;em&gt;option&lt;/em&gt; to the action, not an action keyword itself. Forever means that keep invoking the action when the 10046 event is hit, forever (or until explicitly disabled). If we don’t specify forever, then the action would be invoked only once and the event will disable itself after that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;level 12&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The “level 12” is also just another option to the action, specifying that the value for that event handler in given session should be 12. This means that whenever some Oracle function is checking whether that event is set, they will be returned value 12, the calling function interprets the value and acts appropriately (traces both binds and waits in our case).&lt;/p&gt;
&lt;p&gt;As both the “forever” and “level 12” are just options for the same action, separated by commas, we can replace their order like that:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 04 Mar 2009 02:21:01 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/03/03/the-full-power-of-oracles-diagnostic-events-part-1-syntax-for-ksd-debug-event-handling/</guid></item><item><title>"v" command in "less"</title><link>https://www.databasesandlife.com/v-command-in-less/</link><description>&lt;p&gt;Cool, just discovered: if you&amp;rsquo;re using the (UNIX command-line program) &amp;ldquo;less&amp;rdquo; to view a file, you can hit the &amp;ldquo;v&amp;rdquo; character to open the file in &amp;ldquo;vi&amp;rdquo;!&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 04 Mar 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/v-command-in-less/</guid></item><item><title>Metric</title><link>https://johnj.com/posts/metric/</link><description>&lt;p&gt;
Being a geek, I’ve always liked the word 'metric.’ A metric is a
number or other quantitative object (physicists like 'metric tensors’)
which measures something.&lt;/p&gt;
&lt;p&gt;
I have three paintings drying right now (i.e., too wet to work into
without screwing up areas). A thought occurred to me as I was
thinking about what to work on next, that the number of drying
paintings could be a metric of how artistically busy you happen to be
at the moment. Call that number of drying paintings the 'D-number.’
If I start working on another, it would make a 'D-number’ of four. A
moderately busy period, by my standards.&lt;/p&gt;
&lt;p&gt;
I wonder what my highest D-number has been. Seven? Surely not ten.&lt;/p&gt;
&lt;p&gt;
I like working on lots of pieces at once. When you get bored or
stuck, just pick up another. It’s especially nice if your paintings take a long
time to finish, because you might be in the wrong mood for one particular painting, 
but in the right mood for another. If you glaze a lot, you have to wait for
layers to dry (I don’t use resins because of the fumes), which artificially 
inflates your D-number.&lt;/p&gt;
&lt;p&gt;
Other painters just pick up a panel and don’t touch anything else
until it’s done. Their D-numbers are always equal to one (that is, if
they paint in oils — acrylic painting makes your D-number usually zero,
due to the quick drying times).&lt;/p&gt;
&lt;p&gt;
Then there is the U-number — the number of paintings which are
unfinished, kicking around the studio, that you hope to get around to
sometime. Mine’s probably about 15 or 20. A recent goal of mine is
to make U=0, though probably that’s a fool’s hope.&lt;/p&gt;
&lt;p&gt;
Finally, there is the I-number, which counts the paintings you plan to
do next, or sometime soon, or in a future lifetime. As Van Gogh quoted to
Emile Bernard, “the most beautiful pictures are those one dreams about
when smoking pipes in bed, but which one will never paint.”
I like to keep my I-number as high as possible — it means I’m feeling
especially inspired.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Mon, 02 Mar 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/metric/</guid></item><item><title>Snow Day March 2009</title><link>https://solomon.io/snow-day-march-2009/</link><description>We had a strange late snow this year. We took the trucks (and Frank’s Mercedes) to Auburn beach.</description><author>Sam Solomon</author><pubDate>Sun, 01 Mar 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/snow-day-march-2009/</guid></item><item><title>Understanding the ZFS tuning</title><link>https://blog.nobugware.com/post/2009/02/26/understanding-zfs-tuning/</link><description>ZFS is all about performance (many levels of caching, pre-fetch, &amp;hellip;) and memory consumption :-)
Here are my last links about ZFS [internals](http://src.opensolaris.org/source/xref/onnv/onnv- gate/usr/src/cmd/mdb/common/modules/zfs/zfs.c#333), it&amp;rsquo;s worth a read if you plan to use ZFS on large productions :
The slides of Adam Leventhal&amp;rsquo;s talk for the OpenSolaris Storage Summit : ZFS, Cache, and Flash
c0t0d0s0.org : a very good explanation of the ARC cache : most recently used pages, most frequently used pages and their ghosts lists Some insight into the read cache of ZFS - or: The ARC and the writing side</description><author>Fabrice Aneche</author><pubDate>Thu, 26 Feb 2009 17:37:40 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/02/26/understanding-zfs-tuning/</guid></item><item><title>Jabeh: Puzzle Game for iPhone and iPod Touch</title><link>https://arashpayan.com/blog/2009/02/25/jabeh-puzzle-game-for-iphone-and-ipod-touch/</link><description>The project that I&amp;rsquo;ve been working on for the past couple months has finally come to fruition, and is available for purchase on the iTunes App Store.
Jabeh is a puzzle game where you search for 12 hidden stones on a board. Arrows on the board point in the direction of one or more stones, and the column and row numbers show how many stones are in the respective column and row.</description><author>Arash Payan</author><pubDate>Thu, 26 Feb 2009 02:30:00 GMT</pubDate><guid isPermaLink="true">https://arashpayan.com/blog/2009/02/25/jabeh-puzzle-game-for-iphone-and-ipod-touch/</guid></item><item><title>60000 bind variables?! Maybe it’s time to use a temporary table instead…</title><link>https://tanelpoder.com/2009/02/25/60000-bind-variables-maybe-its-time-to-use-a-temporary-table-instead/</link><description>&lt;p&gt;I just noticed a bug 8277300 filed in Metalink with following description:&lt;/p&gt;
&lt;pre&gt;ORA-7445[XTYQBCB] OCCURS DURING EXECUTING SQL THAT USES &lt;strong&gt;60000 BIND VARIABLES&lt;/strong&gt;.&lt;/pre&gt;
&lt;p&gt;Wow! That’s about 100 times more bind variables in a single query than what I’ve seen in past. And I thought that query was bad!!! :)&lt;/p&gt;
&lt;p&gt;I suspect this is a massive IN list passed to a query. Maybe it’s time to use a temporary table or a collection for passing in the IN values instead?&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 25 Feb 2009 08:58:59 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/02/25/60000-bind-variables-maybe-its-time-to-use-a-temporary-table-instead/</guid></item><item><title>Safari 4 Hidden Preferences</title><link>https://caiustheory.com/safari-4-hidden-preferences/</link><description>&lt;p&gt;&lt;strong&gt;Updated 2009-06-09:&lt;/strong&gt; This post is for the Safari 4 &lt;strong&gt;beta&lt;/strong&gt; and will not work with the new Safari 4 released yesterday at the WWDC keynote. I&amp;rsquo;ve had a look through that release and can&amp;rsquo;t see any way to revert the address bar, etc sorry.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Having a quick poke through the new Safari binary yields the following strings:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ strings /Applications/Safari.app/Contents/MacOS/Safari | grep DebugSafari4
DebugSafari4TabBarIsOnTop
DebugSafari4IncludeToolbarRedesign
DebugSafari4IncludeFancyURLCompletionList
DebugSafari4IncludeGoogleSuggest
DebugSafari4LoadProgressStyle
DebugSafari4IncludeFlowViewInBookmarksView
DebugSafari4TopSitesZoomToPageAnimationDimsSnapshot
DebugSafari4IncludeTopSites
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;NB: Run these commands in Terminal.app and then you need to restart Safari for them to take effect.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="debugsafari4tabbarisontop"&gt;DebugSafari4TabBarIsOnTop&lt;/h3&gt;
&lt;p&gt;This moves the tab bar back where you expect it to be:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ defaults write com.apple.Safari DebugSafari4TabBarIsOnTop -bool NO
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="debugsafari4includetoolbarredesign-and-debugsafari4loadprogressstyle"&gt;DebugSafari4IncludeToolbarRedesign and DebugSafari4LoadProgressStyle&lt;/h3&gt;
&lt;p&gt;When both set to NO it restores the blue loading bar behind the URL. &lt;em&gt;Also puts a page loading spinner in the tab itself, which looks odd with the new tabs.&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ defaults write com.apple.Safari DebugSafari4IncludeToolbarRedesign -bool NO
$ defaults write com.apple.Safari DebugSafari4LoadProgressStyle -bool NO
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="debugsafari4includefancyurlcompletionlist"&gt;DebugSafari4IncludeFancyURLCompletionList&lt;/h3&gt;
&lt;p&gt;Switches off the new URL autocomplete menu and goes back to the original one.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ defaults write com.apple.Safari DebugSafari4IncludeFancyURLCompletionList -bool NO
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="debugsafari4includegooglesuggest"&gt;DebugSafari4IncludeGoogleSuggest&lt;/h3&gt;
&lt;p&gt;Turns off the new Google suggest menu.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ defaults write com.apple.Safari DebugSafari4IncludeGoogleSuggest -bool NO
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="debugsafari4includeflowviewinbookmarksview"&gt;DebugSafari4IncludeFlowViewInBookmarksView&lt;/h3&gt;
&lt;p&gt;Removes CoverFlow from the Bookmarks view entirely. (&lt;a href="http://twitter.com/iacas/status/1245800183"&gt;Credit&lt;/a&gt; to &lt;a href="http://nslog.com/"&gt;Erik&lt;/a&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ defaults write com.apple.Safari DebugSafari4IncludeFlowViewInBookmarksView -bool NO
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="debugsafari4topsiteszoomtopageanimationdimssnapshot"&gt;DebugSafari4TopSitesZoomToPageAnimationDimsSnapshot&lt;/h3&gt;
&lt;p&gt;Disables the dimming when you click on a Top Site and it scales the screenshot up to fill the screen.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ defaults write com.apple.Safari DebugSafari4TopSitesZoomToPageAnimationDimsSnapshot -bool NO
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="debugsafari4includetopsites"&gt;DebugSafari4IncludeTopSites&lt;/h3&gt;
&lt;p&gt;Disables Top Sites feature completely.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ defaults write com.apple.Safari DebugSafari4IncludeTopSites -bool NO
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="undoing-changes"&gt;Undoing changes&lt;/h2&gt;
&lt;p&gt;Just run the defaults command with the &lt;code&gt;delete&lt;/code&gt; flag for the appropriate key you wish to delete.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ defaults delete com.apple.Safari &amp;lt;key&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;NB: Don&amp;rsquo;t include the &lt;code&gt;-bool NO&lt;/code&gt; at the end, it just requires the key (eg: &amp;ldquo;DebugSafari4IncludeGoogleSuggest&amp;rdquo;)&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="update-2009-02-26"&gt;Update 2009-02-26&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://swedishcampground.com/safari-4-hidden-preferences#comment-3265"&gt;Jools points out in the comments&lt;/a&gt; how to reset the recent searches in the google search box.&lt;/p&gt;
&lt;h3 id="update-2009-05-26"&gt;Update 2009-05-26&lt;/h3&gt;
&lt;p&gt;Lowell&amp;rsquo;s kindly created a Mac OS X application to edit these settings without using Terminal. &lt;a href="http://github.com/cocoastep/tweaky"&gt;http://github.com/cocoastep/tweaky&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="update-2010-11-18"&gt;Update 2010-11-18&lt;/h3&gt;
&lt;p&gt;Patric has kindly &lt;a href="http://www.movavi.com/opensource/safari-4-hidden-preferences-be"&gt;translated this post into Belorussian&lt;/a&gt; and posted it on his site.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Tue, 24 Feb 2009 18:11:05 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/safari-4-hidden-preferences/</guid></item><item><title>Delimited continuations in Scala</title><link>https://rd.nz/2009/02/delimited-continuations-in-scala_24.html</link><author>Rich Dougherty</author><pubDate>Tue, 24 Feb 2009 07:24:00 GMT</pubDate><guid isPermaLink="true">https://rd.nz/2009/02/delimited-continuations-in-scala_24.html</guid></item><item><title>SQL_ID is just a fancy representation of hash value</title><link>https://tanelpoder.com/2009/02/22/sql_id-is-just-a-fancy-representation-of-hash-value/</link><description>&lt;p&gt;…Or in other words, how to translate SQL_ID to a hash value :)&lt;/p&gt;
&lt;p&gt;I once wrote a script to demo this in my &lt;a href="https://tanelpoder.com/seminar/"&gt;Advanced Oracle Troubleshooting&lt;/a&gt; class.&lt;/p&gt;
&lt;p&gt;Check this, I’ll run a query and then check what is its SQL_ID and HASH_VALUE from V$SQL:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; &lt;strong&gt;select * from dual&lt;/strong&gt;;

D
-
X

SQL&amp;gt; select sql_id, hash_value from v$sql
  2  where sql_text = '&lt;strong&gt;select * from dual&lt;/strong&gt;';

SQL_ID        HASH_VALUE
------------- ----------
&lt;strong&gt;&lt;strong&gt;a5ks9fhw2v9s1  942515969&lt;/strong&gt;
&lt;/strong&gt;

&lt;/pre&gt;
&lt;p&gt;So, V$SQL reports the real SQL_ID and HASH_VALUE above.&lt;/p&gt;
&lt;p&gt;Now lets use my &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/i2h.sql"&gt;i2h.sql&lt;/a&gt; script ( i2h stands for: sql Id to Hash value ):&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; @&lt;strong&gt;i2h a5ks9fhw2v9s1&lt;/strong&gt;

SQL_ID        HASH_VALUE
------------- ----------
a5ks9fhw2v9s1  &lt;strong&gt;942515969&lt;/strong&gt;

&lt;/pre&gt;
&lt;p&gt;It works! :)&lt;/p&gt;
&lt;p&gt;The code itself is simple (and you can download the script from &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/i2h.sql"&gt;here&lt;/a&gt;)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 22 Feb 2009 23:02:12 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/02/22/sql_id-is-just-a-fancy-representation-of-hash-value/</guid></item><item><title>Career move</title><link>/post/career-move/</link><description>&lt;p&gt;Today is is my last day as an Oracle employee.&lt;/p&gt;
&lt;p&gt;&amp;quot;Fired? Lay offs?&amp;quot; No, I decided to leave.&lt;/p&gt;
&lt;p&gt;&amp;quot;What happened?&amp;quot; Nothing, really. I was working with nice people, in a good environment, doing interesting work, getting a good salary. I was comfortable.&lt;/p&gt;
&lt;p&gt;&amp;quot;So? Why are you leaving?&amp;quot; A deal popped up that allows me go independent and
try something different. Actually, I'm teaming up with a &lt;a href="http://www.linkedin.com/in/carloslatugaye"&gt;good
friend&lt;/a&gt; to build
&lt;a href="http://code54.com"&gt;Code54&lt;/a&gt;. We always dreamed about creating our own little
software company, and this is an interesting opportunity to give it a shot.&lt;/p&gt;
&lt;p&gt;&amp;quot;You must be crazy! Do it during this economic crisis?!&amp;quot; No doubt. I hope we can
make it work on our favor. If I wait for the &amp;quot;ideal&amp;quot; time, I might never get to
do it. I was too comfortable at Oracle, but comfort is not what I'm after right
now.&lt;/p&gt;
&lt;p&gt;This was not an easy decision. I've been working at Fuego/BEA/Oracle for over 10
years. I lived all kind of experiences from being a troubled 11-employee
start-up to joining the Oracle empire. Thanks everyone!&lt;/p&gt;
&lt;p&gt;Stay tuned: In a few months I'll either be hiring or looking for a job again!&lt;/p&gt;</description><author>Neuroning</author><pubDate>Sun, 22 Feb 2009 15:58:00 GMT</pubDate><guid isPermaLink="true">/post/career-move/</guid></item><item><title>Cuba</title><link>https://johnj.com/posts/cuba/</link><description>&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3774.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3774_hu_f541479ec82dc304.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Cuba Street Fair, Wellington
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
At the end of a few days here in Wellington, I am flying home today.&lt;/p&gt;
&lt;p&gt;
This is one of my favorite cities in the world. It has been fabulous
to see Neil and Amelia again, to go shopping (the US dollar is finally
stronger after several years in the gutter), to go to art galleries
and to walk up and down &lt;a href="http://en.wikipedia.org/wiki/Cuba_Street,_Wellington"&gt;Cuba Street&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
Yesterday we braved the crowds at the Cuba Street Carnival, then came
home and made dinner for some of N&amp;amp;A’s friends, including &lt;a href="https://en.wikipedia.org/wiki/S%C3%A9raphine_Pick"&gt;one of my
favorite New Zealand painters&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
Friday, I met Amelia’s mum and dad and uncle. Uncle lives in US and
goes to McMurdo every year to lead expeditions on Mt. Erebus. Dad is
an amazing architect. They have a full acre quite close to Wellington,
with a garden full to bursting with strawberries and corn, and
chickens aka 'chooks’ (your Kiwi word of the day). Mom, sure wish you
could have seen their garden.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3778.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3778_hu_20dfef97ff48ab74.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Cuba St. Store Display
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3796.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3796_hu_cbcd545fcc549b21.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Cuba St. Carnival Garlic Seller
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3777.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3777_hu_d3753c24a2690bf0.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Cuba St. Carnival Vendors
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3684.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3684_hu_bc91ca359931f221.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Cuba St. Doorway
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3678.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3678_hu_1426f716364c0ec0.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Cuba St. Doorway
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3675.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3675_hu_d63a49fc97f6b70d.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Olive Cafe
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3752.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3752_hu_3032b97ddf5d60dc.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Wellington Alcove
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3733.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3733_hu_92204599a0551f58.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Minty Chook
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3819.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3819_hu_df4cd72673df1452.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Neil and Amelia
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
&lt;a href="./galleries/postpole09/index.html"&gt;More pictures&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
Every year at the end of my South Pole trip, primed by a bit of rest
following weeks of unceasing mental effort, and stimulated by the
intoxicating beauty of this country, I get inspired to put more effort
into my art. This year has been no exception and I’m excited to get
back into the studio.&lt;/p&gt;
&lt;p&gt;
This will be my last post of the year on this blog, but I will
continue blogging on my art blog as time and energy allow. Thanks to
everyone who followed along.&lt;/p&gt;
&lt;p&gt;
Peace!&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Sun, 22 Feb 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/cuba/</guid></item><item><title>Virtualbox NAT ssh to guest</title><link>https://blog.nobugware.com/post/2009/02/17/virtualbox-nat-ssh-guest/</link><description>In NAT mode (the default one), virtualbox does not give you the possibility to directly connect to your guest os.
Here is how to configure your Virtualbox to simply ssh myguest
For example my guest is called &amp;ldquo;Solaris10u6&amp;rdquo;, configured to used e1000 card, the default in solaris configuration, (The host os is a Mac).
Type this command in terminal:
`VBoxManage setextradata Solaris10u6 &amp;ldquo;VBoxInternal/Devices/e1000/0/LUN#0/Config/ssh/Protocol&amp;rdquo; TCP
VBoxManage setextradata Solaris10u6 &amp;ldquo;VBoxInternal/Devices/e1000/0/LUN#0/Config/ssh/GuestPort&amp;rdquo; 22
VBoxManage setextradata Solaris10u6 &amp;ldquo;VBoxInternal/Devices/e1000/0/LUN#0/Config/ssh/HostPort&amp;rdquo; 2222 `</description><author>Fabrice Aneche</author><pubDate>Tue, 17 Feb 2009 17:35:49 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/02/17/virtualbox-nat-ssh-guest/</guid></item><item><title>Klingon programming proverb</title><link>https://www.databasesandlife.com/klingon-programming-proverb/</link><description>&lt;p&gt;From the &lt;a href="http://search.cpan.org/~pjf/autodie/lib/autodie.pm" rel="noopener noreferrer" target="_blank"&gt;autodie manual&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It is better to die() than to return() in failure.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;  — Klingon programming proverb.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(&amp;ldquo;die&amp;rdquo; in perl is like throwing an exception.)&lt;/p&gt;
&lt;p&gt;(via &lt;a href="http://www.perl-magazin.de/" rel="noopener noreferrer" target="_blank"&gt;$foo magazin&lt;/a&gt;)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 17 Feb 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/klingon-programming-proverb/</guid></item><item><title>Wickets</title><link>https://johnj.com/posts/wickets/</link><description>&lt;p&gt;





&lt;a href="https://johnj.com/IMG_2964.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2964_hu_b463273201261ba7.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
Monday morning and Jan, Timo and I are on the Northbound train from
Christchurch to Picton. Outside, greens and browns of grasses, dry
scrub, and trees blur together with grey skies, rain and the dun coats
of sheep. It always seems to rain during my train trips here. It’s
hard to believe that just Friday morning we were at the South Pole.&lt;/p&gt;
&lt;p&gt;





&lt;a href="https://johnj.com/IMG_2983.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2983_hu_ab1f7a0f93895b82.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
Thursday night, having Bag Dragged and then sweated in the sauna
('Epic’ was how colleague Stephanie described that last, crowded,
lengthy steam-bath — with multiple trips outside to Destination Zulu
to photograph the steam rising off our bodies, trips which were
surprisingly pleasant despite the 260 degree Fahrenheit temperature
transitions involved), the younger crowd stayed up partying all night,
while comparatively 'old’ folks like myself turned in for a few hours
of sleep. Friday 'dawned’ (not a word which applies literally at South
Pole for more than one long week per year) abruptly, with the
announcement of the early off-deck of our plane from McMurdo… an
announcement which I missed somehow, but caught on the online
'scroll.’ Given that the flight was going to arrive, and therefore
leave, early, I spent a few minutes tracking everyone down so that
nobody would miss the flight.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2704.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2704_hu_4cc558a45ea742b1.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Anna at Bag Drag
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2720.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2720_hu_214a6abd26cb8686.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Waiting for the flight
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
The last few summer flights from Pole are somewhat bittersweet for all
concerned. The winter folks are glad to have the Station to themselves
at last, but of course it marks the beginning of eight and a half
months of isolation. The Summer crew eagerly await oxygen, moisture,
'freshies,’ night, family, vacation and sleep. But many of us will
never return to the Pole.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2734.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2734_hu_49ca06996ef5e74d.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Erik documents the departure
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2747.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2747_hu_ec0bde9646ffb65c.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Boarding the flight North
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Winter-overs Camille and Erik came out to say goodbye to the last ten
or so of us 'Cubers to leave. The flight came and we huddled around in
the -50F air like a bunch of penguins until we were signaled to
approach the plane. Awash in the deafening roar of the props near the
nose of the aircraft, I turned and waved to Erik and saw his wave in
response. Then it was climb the stairway, stuff myself and my bags
into the nearest available seat, and buckle in. There actually weren’t
enough seats for the available passengers, so Stephanie, who got on
last, was pulled aside and got to experience take-off from South Pole
with the flight crew in the cockpit. After takeoff the pilots
pressurized the cabin to more atmospheres than I’d had since Jan. 20.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2766.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2766_hu_1869405dcfe9532e.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Timo takes one last picture of the South Pole
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2811.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2811_hu_71bf1a622d53b37b.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
LC-130 Flight Deck
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2815.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2815_hu_cb651599d60d411f.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Stephanie and Anna
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
We arrived at the Pegasus ice runway to overcast weather, with Castle
Rock and Ob. Hill barely visible, Mt. Erebus not at all. The Herc
disgorged us and our bags and immediately took to the air again to
land at Williams field, a mere handful of miles away. We had our
choice of rattling around on the ice outside (the weather was
certainly warmer than Pole, with Real Snow™ but rather windy) or the
'pax terminal,’ a grungy orange box on skis, big enough to hold fifty
or so people. After taking the obligatory photos of the various
firefighting vehicles nearby, we packed inside and settled in for the
two hour wait for the C-17 from Christchurch.&lt;/p&gt;
&lt;p&gt;
We debated whether we could feel the difference in the
altitude. Stephanie was the only one who said she felt nothing at
all. I could, as usual: I find the sensation of returning to sea level
to be a vertiginous cross between a caffeine dose, a feeling of having
come in from the rain and changed clothes, and, paradoxically, being
so relaxed I feel like taking a nap (though that last part could have
more to do with shifting from night shift to days in less than 48
hours).&lt;/p&gt;
&lt;p&gt;
To kill time we set up my laptop and fired up The Incredibles (with
subtitles, because of the noise of other people talking), the audience
eventually expanding to include a couple of non-Cubers. The C-17
arrived just after Helen and the kids were shot down in their aircraft
and 'paddled’ to shore. The plane’s arrival meant we all felt we had
to suit up and watch the unloading and loading of cargo despite the
fact that it clearly would be a full hour before we were waved onto
the plane.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2940.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2940_hu_da93be8ac01d5e47.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Waiting to board the C-17
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
At some point each of us started to remember that it doesn’t have to
be -50F to feel extremely cold (it was probably about 20F but much
more humid than at Pole). But soon enough we were packing into the
C-17. Just before I entered the plane, I turned around and took what
may have been my last look at Antarctica: a panorama of whites and
subtle, pale grays… a few distant mountains shrouded by low-hanging
clouds, outcroppings of rock, and a handful of human artifacts out on
the airfield. Not much to look at, but special somehow in some way I
have never quite been able to articulate.&lt;/p&gt;
&lt;p&gt;
One’s first look at Antarctica is thrilling: here you are in a place
most people will never see except in pictures or on film or TV. It is
an otherworldly place whose few native inhabitants, while familiar
through media and popular culture, are quite alien up
close. (Penguins, for example, are somehow much odder 'in the flesh’
than one would expect). The people, too, tend to be a breed apart
somehow. Many of them young, most of them white and lower to middle
class, they come from all over the world but often hail from the US
Midwest or mountain states; are often better educated than their
on-Ice job descriptions would suggest; and have robust senses of humor
and very tight social ties with one another. 'Repeat offenders’ such
as myself tend to be both specialists who have niched themselves so
tightly into their work that they are hard to replace, and people who
cherish the sense of community that exists on the Ice. In addition to
the colleagues you know and don’t get to see except on the Ice, it is
somehow reassuring to see all those other familiar faces season after
season, even when you don’t know their names. One feels like one is
part of something, though it is hard to say what that something
is. Surely, we are there to do or to support science… but there are
geopolitical angles as well, a fact which adds a slight tinge of
artificiality to the whole enterprise. And then there is the fact that
one reason we are there is … because it is there. Antarctica is a
mountain to be climbed, a planet to visit, a river to cross.&lt;/p&gt;
&lt;p&gt;
In November, an expeditioner named &lt;a href="https://en.wikipedia.org/wiki/Todd_Carmichael#Adventure_Travel"&gt;Todd Carmichael&lt;/a&gt; set off from a
coastal location called Hercules Inlet and broke the world’s speed
record for unassisted traverse to the Pole. His ski bindings broke
soon after beginning his trip, so he proceeded the rest of the way on
foot. By the time he reached the Pole he was so disoriented that he
talked to his sled and had trouble finding the station even when it
was right in front of him. A colleague interviewed him on video while
he was recovering in the medical clinic at the Pole. At the other end
of what had turned out to be a near-death experience, Carmichael
talked about endurance not just as a means to reach a goal but as a
value in itself. “Hard things are good for you too.” That value
resonates for me, and I suspect it does as well for other travellers
to the Ice.&lt;/p&gt;
&lt;p&gt;
Sometimes, after sweating through my daily session in the station’s
gym, I’d step directly outside into the cold air on the upper level
deck outside the Station. With nothing on but running shoes, shorts
and a t-shirt, someone who is warmed up can last up to a minute or two
outside without even getting particularly cold. It’s enough time to
reestablish the sense of where you are: the incredible brightness; the
view of the experimental buildings in the Dark Sector; the crossing
beacon for the skiway; a thousand half-buried flags indicating buried
cables, buildings, fuel lines; the view, off to one’s left, of Summer
Camp and the cargo berms. The cold so sharp it makes your lungs ache
to take a deep breath. A momentary flash of the South Pole, of the
diamond-crisp beauty of the place, the infinitely flat wisps of clouds
on the rim of the sky at the very edge of the world. No longer novel,
Antarctica, but personal, and deadly, and dear.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2943.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2943_hu_ac0a287c1cef5a36.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Boarding the last flight
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
The C-17 flight back to New Zealand seemed short thanks to my having
slept, sitting up, through most of it… waking often, sore, desperately
wishing for a bed, and then falling unconscious again. By the time I
woke completely we were readying for our descent into
Christchurch. People stripped out of their gear and emerged as
individuals, with long hair, piercings, tattoos, shorts, sandals. You
have to go through customs again before they’ll let you back into New
Zealand. The customs officials ask, “Did you fly to the Ice from
Christchurch?” Not being Todd Carmichael, the answer, of course, is
always yes. Night time, humidity, wait for a shuttle, then back at the
Devon, were the beckoning of the bed trumps even that first, long
shower.&lt;/p&gt;
&lt;p&gt;
The weekend was spent shopping for gifts from home, delighting in real
food (bananas, beer, fish, salads, Banoffee Pie from the Dux again!)
and, Sunday, watching a four hour cricket match at a park on the
outskirts of town. Stephanie and Suruj, both colleagues from
Canterbury University in Christchurch, were there to teach the rules
and the finer points of strategy and culture (trivia question: Who
played the first international cricket game? Answer: the United States
vs. Canada). I would always rather watch a sporting match in person
than on TV, and would rather play than watch. Suruj presciently
obliged by bringing a cricket bat and ball: at half time we took to
the field with about a thousand underage Kiwis and he taught us how to
bowl and to bat.&lt;/p&gt;
&lt;p&gt;
Now it is Tuesday and I am perched in the top floor of a house looking
out over the Queen Charlotte Sound, about twenty minutes by boat from
Picton. My gracious hosts at the Fern Ridge Homestay are Nicki and
Neil. I spent the morning walking a four-hour portion of the Queen
Charlotte Track, similar to what I did last year. Nicki took me by
boat to Torea Bay and picked me up at Mistletoe Bay. As I walked along
the Track, cicadas as large as small hummingbirds thudded against my
hat, their collective cries throughout the bush loud enough to drown
out a C-130. I also passed a six hundred year old rimu tree, a
specimen of the kind that used to cover much of New Zealand, a tree
similar in size, age and kind to the redwoods of California. On our
way back, after picking me up, Nicki stopped the boat in a small
harbor along the way to feed breadcrumbs to the herring and mackerel,
which swarmed so thick to the food that I could feel their slimy,
wriggling bodies as I swept my hand through the water.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3102.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3102_hu_edf6f53c3b5b094a.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Queen Charlotte Sound
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3127.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3127_hu_7d4c767e34f8c226.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
View from Queen Charlotte Track
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3135.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3135_hu_67b0e10b78abab12.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
View from Queen Charlotte Track
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3139.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3139_hu_824baa707802ab96.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
View from Queen Charlotte Track
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3225.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3225_hu_28bb523c18087f3d.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Fern Ridge still life
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
I have another night here and another day on the Sounds; then a night
in Picton, after which I take the ferry to Wellington to see Neil and
Amelia. The it’s back to winter in Chicago, which will hopefully be
almost over. I am looking forward to seeing Eden, family, friends, to
being in my studio, and to being in one place again for awhile.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_3226.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3226_hu_85a01b7469ac786a.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Night view from Fern Ridge Homestay
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
&lt;a href="./galleries/pole09/index.html"&gt;More pictures, from the Pole&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href="./galleries/postpole09/index.html"&gt;More pictures, Post Pole&lt;/a&gt;&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Mon, 16 Feb 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/wickets/</guid></item><item><title>Safe</title><link>https://johnj.com/posts/safe/</link><description>&lt;p&gt;
Just a quick one-liner to let everyone know I’m safely in New Zealand
enjoying oxygen- and moisture-rich air. Will post photos and more
details tomorrow or as time allows.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Sun, 15 Feb 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/safe/</guid></item><item><title>CoMO Twestival</title><link>https://james-carr.org/posts/twestival/</link><description>This Thursday I attended a Twestival organized by jenleereeves and finally got to meet up with a ton of local “tweeters” I’ve followed for quite a while as well as meet several for the first time. In addition to finally meeting face to face, we also bid on auction items for charity:water. Good times plus helping support a good cause.
I have to say it was a really awesome experience… an interesting mix of local tech heads, photographers, journalists, and new media enthusiasts.</description><author>James Carr</author><pubDate>Sun, 15 Feb 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://james-carr.org/posts/twestival/</guid></item><item><title>Performance Visualization, Capacity planning and Hotsos Symposium</title><link>https://tanelpoder.com/2009/02/14/performance-visualization-capacity-planning-and-hotsos-symposium/</link><description>&lt;p&gt;I have slowly moved towards performance visualization and system capacity planning world. Or at least this is my main focus (in addition to deep Oracle internals of course ;)&lt;/p&gt;
&lt;p&gt;I’ve published an easy Oracle performance visualization tool, which is based on Excel and can visualize the resultset of any SQL query. It’s called PerfSheet (and I’ve blogged about it &lt;a href="https://tanelpoder.com/2008/12/28/performance-visualization-made-easy-perfsheet-20-beta/"&gt;here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Last December I spoke at CMG Conference in Las Vegas about a new method for visualizing database-wide performance while still being able to see session level performance profile. Having session level performance overview is important when diagnosing performance problems which only some users of the whole system are experiencing.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 14 Feb 2009 23:29:06 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/02/14/performance-visualization-capacity-planning-and-hotsos-symposium/</guid></item><item><title>Happy Epoch Day!</title><link>https://jasoneckert.github.io/myblog/happy-epoch-day/</link><description>&lt;p&gt;&lt;img alt="Epoch1" src="epoch1.png#right" title="Epoch1" /&gt;&lt;/p&gt;
&lt;p&gt;Today is a special day in the I-don’t-have-a-life-and-can-prove-it-mathematically geek world&amp;hellip;..for today, the epoch will be 1234567890 at precisely 6:31pm (and 30 seconds) Eastern time.&lt;/p&gt;
&lt;p&gt;UNIX (including Mac OS X) and Linux systems use an internal time called the epoch - it is the number of seconds since January 1st, 1970 (the “birth” of UNIX).  This is also why UNIX and Linux geeks weren’t too concerned that their OS was going to blow up at Y2K, since the time would simply be 946684800.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Fri, 13 Feb 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/happy-epoch-day/</guid></item><item><title>Running SAP GUI for Java under FreeBSD</title><link>https://bastian.rieck.me/blog/2009/running_sap_gui_for_java_under_freebsd/</link><description>&lt;p&gt;SAP GUI for Java is SAP&amp;rsquo;s GUI solution for customers that do &lt;em&gt;not&lt;/em&gt; use Microsoft Windows or that do not want to use SAP GUI for Windows for some reason. Officially, it is only supported on the following platforms (I have excluded the various flavours of Windows and several other systems. For a full list, see the &lt;a href="https://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/208be3bf-ebf4-2a10-3aa1-c42e9bb5beed"&gt;official SAP document&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mac OS X 10.4, 10.5&lt;/li&gt;
&lt;li&gt;SuSE 10.1, SuSE Linux Enterprise Desktop 10&lt;/li&gt;
&lt;li&gt;RedHat Enterprise Linux 4, 5&lt;/li&gt;
&lt;li&gt;Fedora 7, 8, 9&lt;/li&gt;
&lt;li&gt;Open SuSE 10.2, 10.3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What a shame: FreeBSD is not mentioned. The following steps will show you how to install and use SAP GUI for Java under FreeBSD. Why would you want to do that, anyway? One simple, convincing, and perfectly logical reason: Because we can.&lt;/p&gt;
&lt;p&gt;The usual disclaimer: Until Tartarus freezes over, don&amp;rsquo;t expect any support from SAP for that.&lt;/p&gt;
&lt;p&gt;That being said, the program actually &lt;em&gt;works&lt;/em&gt;. I have tested some transactions (see the screenshots later) and encountered no errors. YMMV.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;: You need a working FreeBSD system (I did this with FreeBSD 7.1), the usual X11 ports and a SUN JRE from &lt;code&gt;/usr/ports/java/linux-sun-jre16&lt;/code&gt;. I am also assuming that the Linux ABI support is available and works. If you need help with these steps, the &lt;a href="http://www.freebsd.org/doc/en/books/handbook/linuxemu.html"&gt;appropriate handbook section&lt;/a&gt; might help. Grab &lt;a href="ftp://ftp.sap.com/pub/sapgui/java"&gt;SAP GUI for Java&lt;/a&gt; (choose the Linux version, for example &lt;code&gt;PlatinGUI-Linux-710r7.jar&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;: &lt;code&gt;cd&lt;/code&gt; to the directory where the installer is located. Use the JRE to start the installation process by executing the following command in a terminal (change the filename if necessary):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/usr/local/linux-sun-jre1.6.0/bin/java -jar PlatinGUI-Linux-710r7.jar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Choose any installation directory and proceed with the install process. When it has finished, check your selected directory for the folder &lt;code&gt;SAPClients&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;After the installation&lt;/strong&gt;: Open the file &lt;code&gt;SAPClients/SAPGUI7.10rev7/bin/guilogon&lt;/code&gt; in a text editor of your choice. Change all references of &lt;code&gt;/usr/bin/test&lt;/code&gt; to &lt;code&gt;/bin/test&lt;/code&gt;. Finally, set the &lt;code&gt;PLATIN_JAVA&lt;/code&gt; variable to your JRE. For example, with &lt;code&gt;tcsh&lt;/code&gt; you would to the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;setenv PLATIN_JAVA /usr/local/linux-sun-jre1.6.0/bin/java
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&amp;rsquo;s it. You can now run SAP GUI for Java and work with your SAP system. If you don&amp;rsquo;t have one, you might want to download &lt;a href="http://www.sap.com/minisap"&gt;a MiniSAP system&lt;/a&gt; for Linux or Windows. Trying to install &lt;em&gt;this&lt;/em&gt; under FreeBSD is another story&amp;hellip;&lt;/p&gt;
&lt;p&gt;Finally, some nice screenshots with FreeBSD 7.1, XFCE, and SAP GUI for Java 7.10rev7:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bastian.rieck.me/images/sap_sbwp.png"&gt;Fun with transaction SBWP&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bastian.rieck.me/images/sap_about.png"&gt; The &amp;ldquo;About&amp;rdquo; dialog&lt;/a&gt;. Note how the OS is declared to be Linux. Nice, is it not?&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bastian.rieck.me/images/sap_transparency.png"&gt;XFCE&amp;rsquo;s transparency effects also work&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Thu, 12 Feb 2009 22:15:07 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2009/running_sap_gui_for_java_under_freebsd/</guid></item><item><title>Broken Glasses</title><link>https://johnj.com/posts/broken-glasses/</link><description>&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2684.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2684_hu_782936056cd3dadb.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
South Pole Telescope
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Less than 30 hours to go before we leave, and time is whipping by so
fast my ears are starting to ring. As always, the last few days are
the big crunch time due to the fact that we have to wait for our holes
to freeze completely before turning on new strings.&lt;/p&gt;
&lt;p&gt;
Just a few hours ago we ran the first successful test with all 59
deployed strings. It was very touch and go for awhile since several
things didn’t work properly at first, but now it looks good and it’s a
big relief – the climax of the third act.&lt;/p&gt;
&lt;p&gt;
As our test was running, we traipsed out in -50F (-75F windchill) to
the Dark Sector for a tour of the South Pole Telescope. IceCube and
SPT are the 'big two’ at South Pole and it was very cool to see the
other one. Like IceCube, SPT is a simple device by the standards of
modern physics (compared with detectors at CERN’s Large Hadron
Collider, for example) but the SPT folks are doing very exciting,
fundamental physics, using galactic clusters to probe the role of Dark
Energy in the evolution of the Universe. (Not only is the science
exciting, but their device makes a cool sound while it’s running,
unlike the IceCube counting house which just sounds like any old data
center.)&lt;/p&gt;
&lt;p&gt;
Back in the station and running our final tests now. There is enough
time to finish our tests, sleep a bit, pack and get out of here —
barely. A great season, though. If it’s the last time I come here I
will feel good about it, even though I haven’t gotten out of doors
much, at least in comparison with my earlier seasons.&lt;/p&gt;
&lt;p&gt;
The biggest technical glitch of the summer seems to have been the
breaking of my glasses this morning out at SPT. I have a spare pair,
but they are too geeky even for me. But, if looking like an uber-geek
is the sacrifice to be paid for getting 19 new IceCube strings
commissioned and running, I guess I’m willing to pay it.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2535.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2535_hu_8fccc915084ecdef.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Home Sweet Home
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2559.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2559_hu_4bfad506ff09258a.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Heading out to SPT
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2576.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2576_hu_fddb50e533bfdc6b.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Tilo
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2584.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2584_hu_2f7d35eae01d5081.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
SPT and the Dark Sector Lab
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2586.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2586_hu_44a3bfe6cd22f37b.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Martin A. Pomerantz Observatory
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2610.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2610_hu_9e4ef69a2b9ca03e.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Timo and Tilo during the tour
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2617.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2617_hu_5cb8642005792a3e.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Doin’ the SPT Shuffle
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2632.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2632_hu_54967720d7a4ba41.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
The Roof Opens
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2667.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2667_hu_1deaa042ecf03c03.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Winter-over Erik Descends from the roof of the DSL
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2694.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2694_hu_906a19f32eed91c4.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Night shift on top of the Dark Sector Lab
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2487_2.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2487_2_hu_feb0e7dd7cc84ab.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Night shift at the South Pole.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
&lt;a href="./galleries/pole09/index.html"&gt;More pictures&lt;/a&gt;&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Thu, 12 Feb 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/broken-glasses/</guid></item><item><title>LATE : un nouveau scheduler MapReduce</title><link>https://blog.nobugware.com/post/2009/02/09/late-un-nouveau-scheduler-mapreduce/</link><description>[Improving MapReduce Performance in Heterogeneous Environments](http://www.use nix.com/events/osdi08/tech/full_papers/zaharia/zaharia_html/index.html)
&amp;quot; MapReduce is emerging as an important programming model for large-scale data-parallel applications such as web indexing, data mining, and scientific simulation. Hadoop is an open-source implementation of MapReduce enjoying wide adoption and is often used for short jobs where low response time is critical. Hadoop&amp;rsquo;s performance is closely tied to its task scheduler, which implicitly assumes that cluster nodes are homogeneous and tasks make progress linearly, and uses these assumptions to decide when to speculatively re-execute tasks that appear to be stragglers.</description><author>Fabrice Aneche</author><pubDate>Mon, 09 Feb 2009 20:51:46 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/02/09/late-un-nouveau-scheduler-mapreduce/</guid></item><item><title>"Annotations" That Only Appear When a Unit Test Fails</title><link>https://www.databasesandlife.com/annotating-things-mid-unit-test/</link><description>&lt;p&gt;I use &lt;a href="http://www.junit.org/" rel="noopener noreferrer" target="_blank"&gt;JUnit&lt;/a&gt;, &lt;a href="http://www.phpunit.de/manual/current/en/index.html" rel="noopener noreferrer" target="_blank"&gt;PHPUnit&lt;/a&gt; and &lt;a href="http://search.cpan.org/~mcast/Test-Unit-0.25/lib/Test/Unit.pm" rel="noopener noreferrer" target="_blank"&gt;Perl&amp;rsquo;s Test::Unit&lt;/a&gt;. Perl&amp;rsquo;s version has a very cool feature. You can call annotate(string) at any point during the test, and this text will get recorded, and only outputted in the case of the test&amp;rsquo;s failure. &lt;/p&gt;
&lt;pre&gt;sub test_foo {
   my $self = shift;
   my $value = setup_something();
&lt;strong&gt;   $self-&amp;gt;annotate("value = $value n");&lt;/strong&gt;
   $self-&amp;gt;assert_equals(12, do_something($value));
}
&lt;/pre&gt;
&lt;p&gt;So you can just log arbitrary stuff during the test, and it will be output when you need it (when the test fails), but won&amp;rsquo;t clutter up the test output (when the test succeeds).&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 09 Feb 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/annotating-things-mid-unit-test/</guid></item><item><title>When was a table last changed?</title><link>https://tanelpoder.com/2009/02/07/when-was-a-table-last-changed/</link><description>&lt;p&gt;I frequently get a question about how to find out when was a table last modified. I’m talking about table data, not table structure, the latter would be detectable from dba_objects.last_ddl_time.&lt;/p&gt;
&lt;p&gt;Unless you have some table level DML auditing already turned on, then as one option you could use LogMiner and “just” work through the redo/archivelogs in the range of interest with it. This could be very time consuming (especially if the last change was done a while back), so here’s another option for getting last table modification info very easily, however it comes with some restrictions.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/lastchanged.sql"&gt;https://github.com/tanelpoder/tpt-oracle/blob/master/lastchanged.sql&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(read instructions and limitations from the script header).&lt;/p&gt;
&lt;p&gt;The idea is following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Oracle has an ORA_ROWSCN pseudocolumn which reports the last known change time for a row in a table. The “time” shows a commit SCN number of last transaction modifying the row, not a real timestamp though. It is important to note that unless the ROWDEPENDECIES are enabled, then the last SCN is known only at data block level, not row level, rowscn’s for all rows in a block would report whatever SCN is in the last change SCN in block header.&lt;/li&gt;
&lt;li&gt;SCN is ever-increasing internal “time” used by Oracle recovery and transaction layers and it is possible to map this to real time with reasonable accuracy using few Oracle’s tables which store SCN to wallclock time mappings. My script reports the time &lt;em&gt;range&lt;/em&gt; in which the last change to datablock/row occurred so you’ll know how accurate it is.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;I use sys.smon\_scn\_time and v$log_history views for SCN to real time mapping. So my script reports two times, first one may be more accurate, second one has longer history on the other hand.You can use whatever other datasource for doing this mapping, as long as it has SCNs and corresponding timestamps in it. For example, if you have **_log\_checkpoints\_to_alert_** parameter set to true, you can grep the SCN/timestamp pairs out with command like this:&amp;lt;/p&amp;gt; 
&amp;lt;pre&amp;gt;cat alert_win10g.log | egrep -e &amp;quot;^Beginning.*checkpoint|[[:alpha:]]{3} [[:alpha:]]{3} [[:digit:]]{2} &amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Here are few usage examples.&lt;/p&gt;
&lt;p&gt;First I’ll check some data which was probably last changed a long time ago:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; @lastchanged sys.obj$ name='DBMS_STANDARD'

-- LastChanged.sql v1.0 by Tanel Poder (  )

Running this query:

.   select MAX(ora_rowscn)
.   from sys.obj$
.   where name='DBMS_STANDARD';

DATA_SOURCE       LAST_CHANGED
----------------- -------------------------------------------------------
sys.smon_scn_time Before  2008-12-31 16:05:25 (earlier than 21 days ago)
v$log_history     Before  2008-10-27 03:58:16 (earlier than 86 days ago)

2 rows analyzed.

&lt;/pre&gt;
&lt;p&gt;As both sys.smon_scn_time and v$log_history don’t have records dating back to that old time when the database was created (when DBMS_STANDARD and other object records in that datablock were created), they just show that the change happened &lt;em&gt;before&lt;/em&gt; the oldest SCN to time mapping they have.&lt;/p&gt;
&lt;p&gt;Here’s a check on a regular table, but we are only interested in rows/datablocks where the “sal” column is bigger than 1000:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 08 Feb 2009 02:32:09 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/02/07/when-was-a-table-last-changed/</guid></item><item><title>End of the Second Act</title><link>https://johnj.com/posts/end-of-the-second-act/</link><description>&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2388.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2388_hu_a62ad5f9a0de7304.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Station as seen through the window of IceCube's Ford "Gran Neutrino" truck
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Almost exactly one week to go, for me. It is sort of the end of the
second act, when you think you know what is going to happen, but
surprises can still occur, and the final conflict has yet to sort
itself out.&lt;/p&gt;
&lt;p&gt;
Things are going smoothly enough that we (the night crew) were able to
watch “The Big Lebowski” in the B1 lounge after midnight. Those who
got up early were able to see the Super Bowl (at breakfast, I caught
the amazing play just before half-time, which was enough football for
me, and got to watch all the Springsteen-style Americana with my
German, Dutch and New Zealand colleagues). I cannot actually remember
the last time I saw a Super Bowl in the US… but they are entertaining
to see here, because of all the Armed Forces Network commercials in
between plays, tempting people to reinlist. Hmmm…. Army, Navy or
Marines? So many choices….&lt;/p&gt;
&lt;p&gt;
Actually, it really is like being on a very roomy and safe aircraft
carrier in some ways. I haven’t been outside except to poke my head
out on the upper deck for a couple of days. When planes land here,
comms broadcasts the announcement that “the aircraft is on-deck.” And
then there are the two-minute 'Navy’ showers, which I am actually
feeling used to. Though I could get used to a hot bath pretty
quickly. Fortunately nobody is shooting at us, the pay is better (for
some of us, anyways), we don’t have to salute, and, for us summer
folks, the tour of duty is mercifully short.&lt;/p&gt;
&lt;p&gt;
Though at times uncomfortable and stressful, this trip has been quite
vivid in a way, with almost a sort of real-time nostalgic feel to
it. I feel peaceful about the likelihood that it’s the last time I’ll
be here, and I find myself noticing the texture of the station floor,
the views out the windows, the galley food, the unwashed heads of
hair, the grumbling in my stomach and the smiles in the hallways of
people I’ve seen year after year, whose names I have never learned.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Fri, 06 Feb 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/end-of-the-second-act/</guid></item><item><title>Pigs and Fish</title><link>https://johnj.com/posts/pigs-and-fish/</link><description>&lt;p&gt;
There is a short list of adventures one can have in the US Antarctic
program. You can experience landing in the cockpit of a C-130 (done
it). You can fly over the crater of Mt. Erebus (done it). You can go
to 'Happy Camper’ school and learn how to sleep in your own snow- or
ice-shelter (never done it). Here at Pole you can ski out to the 'Love
Shack’ a few miles from the Station (never done it). You can do an
outdoor hot tub in -30F and feel your hair freeze solid (done it). One
thing I’d never done until tonight was go down into the utility
tunnels underneath the station. I’ll let the pictures tell most of the
story, including the temperature (-60F). It was really cool! (And
cold.) Afterwards we had a sauna, followed by the Midrats Season
Finale with Filet Mignon, seafood skewers, stuffed portabella
mushrooms, sushi, chocalate chip cookie chocolate sandwiches, and
upside down peach cherry pie.&lt;/p&gt;
&lt;p&gt;
Life isn’t all bad at the South Pole.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2401.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2401_hu_2cb219902f4d231e.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Suiting up to hit the tunnels
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2410.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2410_hu_4cc4a0c6c489626e.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Tunnel crew
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2414.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2414_hu_c3837b585b8d38ba.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
I wish I owned this sign
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2418.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2418_hu_42526fda1fae3825.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
A half-mile long tunnel 60 feet below the snow surface
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2421.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2421_hu_3d69727ffaeeff41.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Dead end
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2427.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2427_hu_f0943422599a7601.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Stephanie &amp;amp;co.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2430.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2430_hu_353b40a155b13a59.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Timo Griesel
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2437.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2437_hu_1fe38e2425061f58.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Deep Enough
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2454.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2454_hu_9e9a6e586962e582.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Jan Luneman
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2458.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2458_hu_ad22642b1fded3dd.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Pig shrine (yes, it’s a real pig’s head)
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2460.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2460_hu_2916ed64f5c0f3da.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
-60 F
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_7475.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_7475_hu_53cd7ef8fbf01044.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
17-year-old sturgeon with caviar: gift of the Russian base (I seem to have lost the hi-res version of this picture :-( )
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Yesterday I headed out to the IceCube Laboratory (ICL) with Thorsten
from LBNL to debug a nasty little low-level problem. We made some
progress and I took some more pictures in and around the ICL:&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2361.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2361_hu_243b352dbf6830b7.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Back of 'DOM Hubs’ where strings are plugged into the computers, for which I had the privilege of writing a device driver
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2366.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2366_hu_6f57a1c4ea6bf19f.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Winterized 'Seasonal Equipment Site’ (Drill Camp)
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2368.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2368_hu_449570ec9bc8aad9.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Cable conduits into IceCube Laboratory
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2370.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2370_hu_4ca7149236036b11.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Our neighbor: the South Pole Telescope (whose principle investigator lives near me in Hyde Park)
&lt;/figcaption&gt;
&lt;/figure&gt;</description><author>John Jacobsen</author><pubDate>Wed, 04 Feb 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/pigs-and-fish/</guid></item><item><title>Why Subversion is better than Git</title><link>https://www.databasesandlife.com/why-subversion-is-better-than-git/</link><description>&lt;p&gt;A while back I had to make a decision, as the most senior developer on a team, if we should stick with the &lt;a href="http://git-scm.com/" rel="noopener noreferrer" target="_blank"&gt;Git version control system&lt;/a&gt;. Git is extremely popular these days in the open source community. It was developed by Linus Torvalds to manage the Linux source code. And everyone wants to be as cool as Linus.&lt;/p&gt;
&lt;p&gt;But hold on. Linux is not your average project. Certainly not the average project I work on. Linux is programmed by thousands of developers all over the world, with a hierarchy of committers and reviewers. Linux has a large volume of code. People using and making modifications to the source code are programmers, who can handle complex concepts who know why merge conflicts occur and when to use feature branches, release branches, etc.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 03 Feb 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/why-subversion-is-better-than-git/</guid></item><item><title>My First Ever Global Game Jam</title><link>https://liza.io/my-first-ever-global-game-jam/</link><description>&lt;p&gt;For the past three days I&amp;rsquo;ve been participating in &lt;strong&gt;Global Game Jam&lt;/strong&gt; - an annual event where people interested in game development get together for 48 hours and make games fitting into a specfied theme in teams. This is the first time I&amp;rsquo;ve participated (local Game Jams are run regularly in Perth) and I wasn&amp;rsquo;t sure if I&amp;rsquo;d be useful at anything.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sun, 01 Feb 2009 11:26:32 GMT</pubDate><guid isPermaLink="true">https://liza.io/my-first-ever-global-game-jam/</guid></item><item><title>Migrating Rubygems to Ruby 1.9.x</title><link>https://caiustheory.com/migrating-rubygems-to-ruby-19x/</link><description>&lt;p&gt;So I just installed ruby 1.9.1 through &lt;a href="http://macports.org/"&gt;MacPorts&lt;/a&gt; and wanted to easily migrate my rubygems across from 1.8 to see which ones would fail to install.&lt;/p&gt;
&lt;p&gt;Thought about it for a while, then came up with the following bash one-liner to do it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gem list &lt;span class="p"&gt;|&lt;/span&gt; grep &lt;span class="s2"&gt;"("&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; awk &lt;span class="s1"&gt;'{ print $1 }'&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; xargs -L &lt;span class="m"&gt;1&lt;/span&gt; gem1.9 install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;NB:&lt;/strong&gt; Installing Ruby 1.9.1 through macports &lt;code&gt;sudo port install ruby19&lt;/code&gt; means I get &lt;code&gt;ruby1.9&lt;/code&gt;, &lt;code&gt;gem1.9&lt;/code&gt; and &lt;code&gt;rake1.9&lt;/code&gt; installed alongside my usual 1.8 &lt;code&gt;ruby&lt;/code&gt;, &lt;code&gt;gem&lt;/code&gt; and &lt;code&gt;rake&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That grabs the list of installed gems from &lt;code&gt;gem&lt;/code&gt;, searches for lines containing &amp;ldquo;(&amp;rdquo; so it only grabs the gem names, spits out the first section of the line, which is the name of the gem, and finally calls &lt;code&gt;gem1.9 install&lt;/code&gt; for each line via &lt;code&gt;xargs -L 1&lt;/code&gt;. Make sure to run it as root or prefix &lt;code&gt;gem1.9&lt;/code&gt; with &lt;code&gt;sudo&lt;/code&gt;. &lt;em&gt;(Or let it install in your home folder, but I hate that.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;From my quick run of the above snippet, 75% of my gems installed &lt;em&gt;(73 out of 98)&lt;/em&gt; and the other few that failed to install were ones like &lt;a href="http://github.com/why/hpricot/tree/master"&gt;Hpricot&lt;/a&gt; that require native extensions compiling. You can see the entire list of failures and successes of the gems in &lt;a href="http://pastie.textmate.org/pastes/376136"&gt;this pastie&lt;/a&gt;&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sat, 31 Jan 2009 22:29:57 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/migrating-rubygems-to-ruby-19x/</guid></item><item><title>Last Arrivals</title><link>https://johnj.com/posts/last-arrivals/</link><description>&lt;p&gt;
Timo and Jan arrived from Mainz today — the last arrivals for IceCube
this season. They are working on a system within IceCube to detect
stars which explode in or near our galaxy. Our nightshift roster is
now complete.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2288.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2288_hu_59f475c963735669.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Night shift serenade
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2299.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2299_hu_4065f87d7e06367b.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
The flight arrives
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2311.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2311_hu_5142a5bdec04599b.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
OK, you can stop taxiing now (IceCube Laboratory in the background)
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2346.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2346_hu_f4560f2999dd43ea.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Passengers from the Plane
&lt;/figcaption&gt;
&lt;/figure&gt;</description><author>John Jacobsen</author><pubDate>Sat, 31 Jan 2009 09:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/last-arrivals/</guid></item><item><title>View Raw Source</title><link>https://caiustheory.com/view-raw-source/</link><description>&lt;p&gt;So I write this blog using &lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt; because I&amp;rsquo;m a human and writing &lt;code&gt;stuff &amp;lt;strong&amp;gt;with&amp;lt;/strong&amp;gt; tags&lt;/code&gt; is just &lt;strong&gt;WRONG&lt;/strong&gt;. Thankfully, &lt;a href="http://daringfireball.net/"&gt;Gruber&lt;/a&gt; solved this problem by writing markdown.&lt;/p&gt;
&lt;p&gt;Now on the &lt;a href="http://daringfireball.net/projects/markdown/"&gt;markdown page&lt;/a&gt; he says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The best way to get a feel for Markdown’s formatting syntax is simply to look at a Markdown-formatted document. For example, you can view the Markdown source for the article text on this page here: &lt;a href="http://daringfireball.net/projects/markdown/index.text"&gt;http://daringfireball.net/projects/markdown/index.text&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;(You can use this ‘.text’ suffix trick to view the Markdown source for the content of each of the pages in this section, e.g. the Syntax and License pages.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And ever since I noticed that I&amp;rsquo;ve always read his articles using the &amp;lsquo;.text&amp;rsquo; trick. One of the plugins I&amp;rsquo;ve been meaning to write for &lt;a href="http://habariproject.org/"&gt;habari&lt;/a&gt; is one that replicates this &amp;lsquo;.text&amp;rsquo; behaviour. So tonight I decided to try and write it, started picking through the &lt;a href="http://wiki.habariproject.org/en/Creating_A_Plugin"&gt;Plugin documentation&lt;/a&gt; in preparation. Got a bit stuck with it as I&amp;rsquo;ve been out of the habari development loop for a few months, popped into &lt;a href="irc://irc.freenode.net/#habari"&gt;#habari&lt;/a&gt; and asked if I was thinking along the right lines.&lt;/p&gt;
&lt;p&gt;Few minutes later &lt;a href="http://asymptomatic.net/"&gt;Owen&lt;/a&gt; pops up and sends me a link to &lt;a href="http://pastoid.com/bn5"&gt;plaintext.plugin.php&lt;/a&gt;, which does exactly what I was trying to do! Couple of tweaks later (switching it to &amp;lsquo;.text&amp;rsquo; instead of &amp;lsquo;.md&amp;rsquo;) and its installed and working on this blog. Feel free to view the &lt;a href="http://caiustheory.com/view-raw-source.text"&gt;raw source&lt;/a&gt; of this post. Or any other post on this site.&lt;/p&gt;
&lt;h3 id="updated-2009-01-31"&gt;Updated 2009-01-31&lt;/h3&gt;
&lt;p&gt;Added to the habari-extras repo as the &lt;a href="http://pastoid.com/bn5"&gt;Plaintext&lt;/a&gt; plugin.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sat, 31 Jan 2009 03:54:57 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/view-raw-source/</guid></item><item><title>Lily White</title><link>https://johnj.com/posts/lily-white/</link><description>&lt;p&gt;
Followup to yesterday’s post: then there are the times when you are
quietly pedaling the stationary bike in the gym while your iPod plays
your favorite audiobook, and a couple of lily-white guys
(did I mention it’s mostly lily-white guys here?) come in and crank up some
of the more vulgar and un-musical hip-hop on the gym stereo.&lt;/p&gt;
&lt;p&gt;
This is a place of compromises.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Sat, 31 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/lily-white/</guid></item><item><title>This is my Compiler</title><link>https://caiustheory.com/this-is-my-compiler/</link><description>&lt;p&gt;As some friday fun in &lt;a href="http://twitter.com/geekupirc"&gt;#geekup&lt;/a&gt; we ended up converting the &lt;a href="http://usmilitary.about.com/od/marines/l/blriflecreed.htm"&gt;US Marines Creed&lt;/a&gt; to a geekier version.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This is my compiler.&lt;br /&gt;
There are many like it, but this one is MINE.&lt;br /&gt;
My compiler is my best friend. It is my life.&lt;br /&gt;
I must master it as I must master my life.&lt;br /&gt;
My compiler without me is useless. Without my compiler, I am useless.&lt;br /&gt;
I must run my compiler true.&lt;br /&gt;
I must run faster than my bug who is trying to kill me.&lt;br /&gt;
I must squash him before he squashes me. I will&amp;hellip;&lt;br /&gt;
My compiler and myself know that what counts in war is not the warnings we squash,&lt;br /&gt;
the builds we create, nor the optimisations we make.&lt;br /&gt;
We know it is the build errors fixed that count. We will fix&amp;hellip;&lt;br /&gt;
My compiler is human, even as I, because it is my life.&lt;br /&gt;
Thus, I will learn it as a brother.&lt;br /&gt;
I will learn its weaknesses, its strengths, its output, its code,&lt;br /&gt;
its quirks, and its errors.&lt;br /&gt;
I will ever guard it against the ravages of virii and disk failures.&lt;br /&gt;
I will keep my compiler clean and ready, even as I am clean and ready.&lt;br /&gt;
We will become part of each other. We will&amp;hellip;&lt;br /&gt;
Before Assembler I swear this creed.&lt;br /&gt;
My compiler and myself are the defenders of good code.&lt;br /&gt;
We are the masters of our bugs.&lt;br /&gt;
We are the saviors of our code.&lt;br /&gt;
So be it, until code is compiling and there are no bugs, but compiled code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And then &lt;a href="http://jamx.org/"&gt;jamx&lt;/a&gt; jumped in with the &lt;a href="http://en.wikipedia.org/wiki/Lord's_Prayer#English_versions"&gt;Lords Prayer&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Our Compiler, who art in memory. GNU be thy name.&lt;br /&gt;
Thy source code come, thy will be done.&lt;br /&gt;
On script as it is in memory.&lt;br /&gt;
Give us this day our daily data, and forgive us our segfaults as we forgive those who segfault against us.&lt;br /&gt;
And lead us not into /dev/null but deliver us from M$,&lt;br /&gt;
for thine is the domain, the cpu and the peeps.&lt;br /&gt;
for (x=0; x&amp;lt;2; x++){ x=0; }&lt;br /&gt;
Amen&lt;/p&gt;
&lt;/blockquote&gt;</description><author>Caius Theory</author><pubDate>Fri, 30 Jan 2009 14:18:56 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/this-is-my-compiler/</guid></item><item><title>In a Dry and Waterless Place</title><link>https://johnj.com/posts/in-a-dry-and-waterless-place/</link><description>&lt;p&gt;
I’ve had some of my most intense music experiences in this place,
often while working out. (Anyone else had similar experiences at high
altitude?)&lt;/p&gt;
&lt;p&gt;
Just got back from my daily workout in the darkened aerie above the
gymnasium where they were playing the U2 concert film “Live in Paris:
The Joshua Tree.” Songs from &lt;em&gt;The Unforgettable Fire&lt;/em&gt; taking me straight
back to freshman year, 1985: friendships and first loves… my
incense-filled room across the street from the hospital where I was
born; learning to program on a 256k IBM PCjr… taking my first steps on
the long, strange trajectory that lead me to this work, in this place.&lt;/p&gt;
&lt;p&gt;
Music has the power to reach across time and space, to cement and
trigger memory and to connect people, all in ways that film,
literature and visual art cannot. I wonder if Bono &amp;amp; co. could have
imagined during their concert in 1988 that their music would fuel the
workouts of a few South Polies twenty years later. That’s the way it
works, I guess… most of the time we swim in a sea of ignorance about
the effects we have on each other and the world.&lt;/p&gt;
&lt;p&gt;
Time for a 20 second shower before today’s first meetings.&lt;/p&gt;
&lt;p&gt;
And who are you that reads this? In what day / year / millenium? And
in what strange place?&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Fri, 30 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/in-a-dry-and-waterless-place/</guid></item><item><title>Immortality</title><link>https://johnj.com/posts/immortality/</link><description>&lt;p&gt;
Despite the morning’s wind and low visibility, colleague Joanna just
arrived from Berkeley hand-carrying some cables and a special surprise
from Jerry at LBNL, carefully packaged in anti-static plastic and
bubble wrap.&lt;/p&gt;
&lt;p&gt;
It’s the printed circuit board from one of our Digital Optical
Modules, one which failed visual inspection and is therefore scrap for
engineering purposes. I.e., a nice, flat, attractive paperweight. I’m
touched, particularly because it has my name etched on it along with
those of several of my current and former LBNL colleagues, and because
I have just been told that all the the DOMs deployed in IceCube are
thus enscribed.&lt;/p&gt;
&lt;p&gt;
Though it’s not quite a burial fit for a king (not to mention the fact
that I’m still alive and kicking), our names entombed inside the polar
ice cap will endure for many millennia, far beyond the current age of
the Pyramids of the pharaohs. When some future civilization visits the
barren ruins of earth and goes prospecting for technological artifacts
in the polar ice, they will find the sigils which make up our names
and wonder at their significance. Or, in a hundred thousand years,
when the flowing river of ice finally reaches the ocean, they may rust
free of their mutual tethers and drift the ocean currents… five
thousand messages in spherical glass bottles to be found by whatever
forms of life might remain to roam the seas or shores of future Earth.&lt;/p&gt;
&lt;p&gt;
Thanks Jerry and Joanna.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Thu, 29 Jan 2009 09:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/immortality/</guid></item><item><title>Routine</title><link>https://johnj.com/posts/routine/</link><description>&lt;p&gt;





&lt;a href="https://johnj.com/IMG_2270.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2270_hu_d356fb14d39d0ff8.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
It’s 10:05 AM and getting close to bed time. The weather today is
strange – quite warm (almost minus 10F) but with 21 knot winds, making
the wind chill about 50 below. The snow is blowing high and visibility
is poor at times. But it’s quite beautiful.&lt;/p&gt;
&lt;p&gt;
Life is settling down into a routine, of sorts. Wake up as late as
possible, usually before dinner. Clean up room, go to gym, meditate,
have breakfast. Start work when satellite rises around 11:30 PM. Work
until mid-morning, and then wind down until I have to do it again.&lt;/p&gt;
&lt;p&gt;
Most of the other late-season 'Cubers are on night shift. Our 'days’
consist of testing new pieces of the detector and new bits of code,
troubleshooting, adding features, all somewhat endlessly. We have
regular consultations with colleagues up North via phone meetings and
instant messaging; and a daily 8 AM face-to-face meeting here just to
check in and make sure everyone has what they need to get things
done. There are a lot of things happening at once and it turns out I
have to orchestrate and schedule quite a bit. But, so far it’s going
ok. We have tested an additional 9 strings combined with the 40 we ran
throughout 2008. If we can get the remaining 10 more strings added in
and calibrated, that will be a good start to the winter season. In
addition, the experiment control software I wrote throughout 2008 is
starting to come together and be fully operational here.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2215.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2215_hu_c743ee93428c0639.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
IceCube Laboratory
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
One strange feature about being here is that current and past summer
seasons blend together into a sort of day-lit constancy, where the
real world up North seems not exactly unreal, but somehow parallel and
separate in both space and time. The sameness of the surroundings, the
work, and, to some extent, the people (many of the denizens here are
'repeat offenders’ like me) all contribute to this. Lots of people
have a summer home… mine seems to be a January slot in a late-season
population of 250 or so people dreaming of Christchurch and points
beyond. Part of the strange timelessness of this place is also the
absence of people who have been here before, never to return, and
whose spirits somehow knock about the place still.  What part of me
will be left behind when I get on that northbound plane for the last
time?&lt;/p&gt;
&lt;p&gt;





&lt;a href="https://johnj.com/IMG_2161.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2161_hu_817b9c81c33d8e68.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
Last night I dreamt a great rainstorm fell here. It was delightful at
first, but quickly turned terrifying because everything started to
melt and submerge. I knew that when the cold came back everything
would be frozen in place. I have no idea what that means, but images
of liquid water are powerful in a place where showers are tightly
rationed and the daily per-person water consumption is flashed up on
the video scroll in the galley.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Thu, 29 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/routine/</guid></item><item><title>How will a Athlon 64 PC with 512 of ram hold up as a home server?</title><link>https://boyter.org/2009/01/athlon-64-pc-512-ram-hold-home-server/</link><description>&lt;p&gt;This post was taken from a &lt;a href="http://www.mahalo.com/answers/how-will-a-athlon-64-pc-with-512-of-ram-hold-up-as-a-home-server-whats-the-best-setup-read-details"&gt;Mahalo Answers Question&lt;/a&gt; I answered.  I thought rather then risk Mahalo going away (since Jason Calacanis has said hes working on something else) I thought I would copy it here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;How will a Athlon 64 PC with 512 of ram hold up as a home server. Whats the best setup… read details. I want to setup a drag and drop file server as well as a voip server like teamspeak. Also have a low user website. What OS should I use and how do I make it also a web server.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Wed, 28 Jan 2009 03:21:59 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2009/01/athlon-64-pc-512-ram-hold-home-server/</guid></item><item><title>Xcode raccourcis important</title><link>https://blog.nobugware.com/post/2009/01/27/xcode-raccourcis-important/</link><description>Pour changer le nom MyCompanyName dans votre source code: defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions '{ORGANIZATIONNAME = &amp;quot;Nobugware&amp;quot;; }'
⌘[ et ⌘] pour indenter a droite ou a gauche
⌃/ pour passer d&amp;rsquo;un champ a l&amp;rsquo;autre quand xcode vous propose la completion d&amp;rsquo;une methode avec plusieurs arguments (⌃⇧/ clavier fr)
⌥⌘↑ (alt shift curseur haut) passe du fichier .m au .h
⌘⇧D Open Quickly, permet d&amp;rsquo;ouvrir un popup de rechercher pour ouvrir rapidement un fichier</description><author>Fabrice Aneche</author><pubDate>Wed, 28 Jan 2009 02:34:27 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/01/27/xcode-raccourcis-important/</guid></item><item><title>Tourists</title><link>https://johnj.com/posts/tourists/</link><description>&lt;p&gt;





&lt;a href="https://johnj.com/IMG_2196.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2196_hu_2123cbdbf5966002.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
In the next few days, the last few 'Cubers are arriving on Station to
help us with end-of-season commissioning of the new strings. Many more
IceCube people are leaving, however… most of them drillers. It will be
nice to be here when things are a bit quieter. The winter-overs are
already talking about how great it will be when we summer folk are
gone.&lt;/p&gt;
&lt;p&gt;
Some people pay a fair chunk of change to fly here for an hour or two,
look around, and leave. Tourists, we call them. Others fly in for
McMurdo ('sleigh rides’) to see the place, or to work for a day. Still
others ski here from various points remote, and camp a few hundred
yards from the Station (I’ve already given a few impromptu tours to
various frost-bitten groups). Those of us here for the Summer are
called 'tourists’ by the winter crew.&lt;/p&gt;
&lt;p&gt;
Of course, everyone is a tourist in Antarctica. Despite what repeat
winter-overs may sometimes feel, there are no true Antarcticans. We
are as much visitors here as we would be to Mars. Take away the
airplanes, and we all perish.&lt;/p&gt;
&lt;p&gt;
I have posted a video of the last string deployment.&lt;/p&gt;
&lt;p&gt;


&lt;/p&gt;
&lt;p&gt;
Meanwhile, a group of five or so of us are up all night, every night,
fussing with software to read out the newly-deployed strings as they
freeze in. We still have two weeks but it will go very quickly, and we
tourists will redeploy to various points North.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Wed, 28 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/tourists/</guid></item><item><title>Primary keys only need to be unique; there's many characteristics they often have but don't need to have</title><link>https://www.databasesandlife.com/what-you-cant-deduce-by-looking-at-primary-keys/</link><description>&lt;p&gt;There is often a misunderstanding about primary keys in database tables. Primary keys identify rows uniquely, so the &lt;strong&gt;only&lt;/strong&gt; property they have to obey is they &lt;strong&gt;must be unique&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Primary keys don&amp;rsquo;t have to be numbers. But if they are, here are a few properties these numbers &lt;strong&gt;don&amp;rsquo;t&lt;/strong&gt; have to have:&lt;/p&gt;
&lt;ol class="tight"&gt;
  &lt;li&gt;
    Numerical PKs don't indicate ordering, i.e. which row was inserted first.
  &lt;/li&gt;
  &lt;li&gt;
    Looking at the highest PK value doesn't indicate the number of rows created (cardinality).
  &lt;/li&gt;
  &lt;li&gt;
    There are not guaranteed not to be "holes" in the numerical sequence: e.g. row 11 and row 13 exist, but row 12 doesn't.
  &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In addition to PKs not having to have these properties, there are good reasons why auto-generated PKs actually don&amp;rsquo;t have them practice.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 28 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/what-you-cant-deduce-by-looking-at-primary-keys/</guid></item><item><title>Dr. Johnson’s Dictionary Blog</title><link>https://www.keithrpetersen.com/blog/dr-johnsons-dictionary-blog/</link><description>&lt;p&gt;The Beineke Rare Book &amp;amp; Manuscript Library at Yale is &lt;a href="http://drjohnsonsdictionary.wordpress.com/2008/12/"&gt;blogging a word a day&lt;/a&gt; from Samuel Johnson’s seminal &lt;em&gt;A Dictionary of the English Language&lt;/em&gt;. Their selections are so far tending toward the obscure (i.e. &lt;a href="http://drjohnsonsdictionary.wordpress.com/2009/01/17/bandog-ns/" title="Haven't dropped this in conversation lately."&gt;&lt;em&gt;bandog&lt;/em&gt;&lt;/a&gt;), and include great photos of the book and many handwritten additions and corrections. I wonder how many of these words were actually in common usage in 1755, especially those where Shakespeare is given as the only reference. It’s a lexical cabinet of curiosities.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.keithrpetersen.com/blog/dr-johnsons-dictionary-blog/"&gt;Read More&lt;/a&gt;&lt;/p&gt;</description><author>Blog - Keith R. Petersen</author><pubDate>Wed, 28 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.keithrpetersen.com/blog/dr-johnsons-dictionary-blog/</guid></item><item><title>BlackBerry then and now</title><link>https://jasoneckert.github.io/myblog/blackberry-then-and-now/</link><description>&lt;p&gt;&lt;img alt="BlackBerry 950 and 8830" src="bb.png#center" title="BlackBerry 950 and 8830" /&gt;&lt;/p&gt;
&lt;p&gt;You know - most technologies change drastically over time.  As a result, I got my hands on an old BlackBerry 950 model from 1998 (the 850/950 series were the original BlackBerry smartphones on the 800/900 MHz Mobitex networks, respectively).&lt;/p&gt;
&lt;p&gt;The problem is this:  It really hasn’t changed that much.  Aside from the color and graphics, the BlackBerry 950 running BlackBerry Device Software 2.5 had pretty much the same applications and functionality as the BlackBerry 8830 running BlackBerry Device Software 4.5!&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Wed, 28 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/blackberry-then-and-now/</guid></item><item><title>A Place Online</title><link>https://solomon.io/a-place-online/</link><description>Thought I would set up a site to share things online. I don’t really know what exactly this will be other than a place to publish articles. Maybe some photos?</description><author>Sam Solomon</author><pubDate>Tue, 27 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://solomon.io/a-place-online/</guid></item><item><title>Probably a mistake</title><link>https://arnorhs.dev/posts/2009-01-27/probably-a-mistake/</link><description>I think my previous excitement was unfounded … probably was just some guy playing around, not a real bot… But I’m patient.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Tue, 27 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2009-01-27/probably-a-mistake/</guid></item><item><title>First post</title><link>https://arnorhs.dev/posts/2009-01-26/first-post/</link><description>Great news people.. We have the first set of spam in the house… Now we’re finally in “business” :-)</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Mon, 26 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2009-01-26/first-post/</guid></item><item><title>"holy jizz batman fhawvfgvohWweg Submitted 26. January, 2009 @ 11:03:52"</title><link>https://arnorhs.dev/posts/2009-01-26/holy-jizz-batmanfhawvfgvohwwegsubmitted-26-january-2009-110352/</link><description>“holy jizz batman  
fhawvfgvohWweg  
Submitted 26. January, 2009 @ 11:03:52”  
  
\- _Spambotlove.com :-)_</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Mon, 26 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2009-01-26/holy-jizz-batmanfhawvfgvohwwegsubmitted-26-january-2009-110352/</guid></item><item><title>Unicode characters in file names</title><link>https://www.databasesandlife.com/unicode-characters-in-file-names/</link><description>&lt;p&gt;It&amp;rsquo;s amazing that the following all works:&lt;/p&gt;
&lt;ul class="tight"&gt;
  &lt;li&gt;
    Using my terminal program (&lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/"&gt;PuTTY&lt;/a&gt; on Windows, set to UTF-8) connected to a Linux computer (terminal settings set to UTF-8), created a file whose name had various Unicode characters
  &lt;/li&gt;
  &lt;li&gt;
    The shell allowed me to type those characters (vi )
  &lt;/li&gt;
  &lt;li&gt;
    The standard programs such as "ls", "cat", "vi" seemed to be able to handle these file names
  &lt;/li&gt;
  &lt;li&gt;
    I checked the file into the &lt;a href="http://subversion.tigris.org/"&gt;Subversion version control system&lt;/a&gt; – it worked [1]
  &lt;/li&gt;
  &lt;li&gt;
    On Windows (XP, NTFS) I checked the file out using Tortoise SVN, it worked.
  &lt;/li&gt;
  &lt;li&gt;
    Windows Explorer showed the file having the Unicode characters in its file name.
  &lt;/li&gt;
  &lt;li&gt;
    I opened the file in Windows Notepad, it opened the file and displayed the name correctly in the title bar
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That means, for my uses, I can absolutely use Unicode characters in file names. That&amp;rsquo;s a cool situation.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 26 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/unicode-characters-in-file-names/</guid></item><item><title>Basic functionality</title><link>https://arnorhs.dev/posts/2009-01-25/basic-functionality/</link><description>Ok. Now we have the basic functionality of posting and reading from forms ready. I tried to keep the form very simple so any spambot should be able to submit into it.

So far there are no ent...</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sun, 25 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2009-01-25/basic-functionality/</guid></item><item><title>Tumblr blog up</title><link>https://arnorhs.dev/posts/2009-01-24/tumblr-blog-up/</link><description>I’m setting up the Tumblr blog. Will be using that for all blog posts and information about the website’s progress.</description><author>arnorhs blog - arnorhs.dev</author><pubDate>Sat, 24 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://arnorhs.dev/posts/2009-01-24/tumblr-blog-up/</guid></item><item><title>Multipart cursor subexecution and PRECOMPUTE_SUBQUERY hint</title><link>https://tanelpoder.com/2009/01/23/multipart-cursor-subexecution-and-precompute_subquery-hint/</link><description>&lt;p&gt;There was a question about PRECOMPUTE_SUBQUERY hint in an &lt;a href="http://forums.oracle.com/forums/thread.jspa?messageID=3232057&amp;#038;tstart=0"&gt;Oracle Forums thread&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here I will post the answer I gave there and also elaborate it more as it explains a little known interesting fact about Oracle cursor management. Also it allows me to introduce few advanced Oracle troubleshooting scripts by example. This is a fairly long post, but if you are interested in some Oracle cursor management and SQL execution internals, keep on reading ;)&lt;/p&gt;
&lt;p&gt;Consider the following test case with two tables, T1 and T2:&lt;/p&gt;
&lt;pre&gt;SQL&gt; create table t1 as select rownum a from dual connect by level &lt; 10;
&lt;p&gt;Table created.&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; create table t2 as select rownum&lt;b&gt;+10&lt;/b&gt; b from dual connect by level &amp;lt; 10;&lt;/p&gt;
&lt;p&gt;Table created.&lt;/p&gt;
&lt;p&gt;SQL&amp;gt;
SQL&amp;gt; select * from t1;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;     A
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;     1
     2
     3
     4
     5
     6
     7
     8
     9
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;9 rows selected.&lt;/p&gt;
&lt;p&gt;SQL&amp;gt;
SQL&amp;gt; select * from t2;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;     B
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;    11
    12
    13
    14
    15
    16
    17
    18
    19
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;9 rows selected.&lt;/p&gt;
&lt;p&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Now lets run a query with a simple subquery in it:&lt;/p&gt;
&lt;pre&gt;SQL&gt; select a
  2  from   t1
  3  where  a in (select b from t2);
&lt;p&gt;no rows selected&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; select * from table(dbms_xplan.display_cursor(null,null,&amp;lsquo;ALLSTATS LAST&amp;rsquo;));&lt;/p&gt;
&lt;h2 id="plan_table_output"&gt;PLAN_TABLE_OUTPUT&lt;/h2&gt;
&lt;h2 id="sql_id--aucw6byq3d5q8-child-number-0"&gt;SQL_ID  aucw6byq3d5q8, child number 0&lt;/h2&gt;
&lt;p&gt;select a from   t1 where  a in (select b from t2)&lt;/p&gt;
&lt;p&gt;Plan hash value: 561629455&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="-id---operation------------name------e-rows---omem---1mem--used-mem-"&gt;| Id  | Operation           | Name     | E-Rows |  OMem |  1Mem | Used-Mem |&lt;/h2&gt;
&lt;h2 id="---4-----table-access-full-t2-------------9-------------------------"&gt;|   0 | SELECT STATEMENT    |          |        |       |       |          |
|*  1 |  HASH JOIN SEMI     |          |      1 |  1066K|  1066K| 1056K (0)|
|   2 |   TABLE ACCESS FULL | T1       |      9 |       |       |          |
|   3 |   VIEW              | VW_NSO_1 |      9 |       |       |          |
|   4 |    TABLE ACCESS FULL| T2       |      9 |       |       |          |&lt;/h2&gt;
&lt;h2 id="predicate-information-identified-by-operation-id"&gt;Predicate Information (identified by operation id):&lt;/h2&gt;
&lt;p&gt;1 - access(&amp;ldquo;A&amp;rdquo;=&amp;ldquo;B&amp;rdquo;)&lt;/p&gt;
&lt;p&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Note that a hash semijoin was performed which semijoined two of its child rowsources with join condition &amp;#8220;A=B&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Now lets run exactly the same query with PRECOMPUTE_SUBQUERY hint in subquery block:&lt;/p&gt;
&lt;pre&gt;SQL&gt; select a
  2  from   t1
  3  where  a in (select /*+ PRECOMPUTE_SUBQUERY */b from t2);
&lt;p&gt;no rows selected&lt;/p&gt;
&lt;p&gt;SQL&amp;gt;
SQL&amp;gt; select * from table(dbms_xplan.display_cursor(null,null,&amp;lsquo;ALLSTATS LAST&amp;rsquo;));&lt;/p&gt;
&lt;h2 id="plan_table_output-1"&gt;PLAN_TABLE_OUTPUT&lt;/h2&gt;
&lt;h2 id="sql_id--fvnqhjkcjnybx-child-number-0"&gt;SQL_ID  fvnqhjkcjnybx, child number 0&lt;/h2&gt;
&lt;p&gt;select a from   t1 where  a in (select /*+ PRECOMPUTE_SUBQUERY */b from
t2)&lt;/p&gt;
&lt;p&gt;Plan hash value: 3617692013&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id="-id---operation----------name--e-rows-"&gt;| Id  | Operation         | Name | E-Rows |&lt;/h2&gt;
&lt;h2 id="--1---table-access-full-t1---------5-"&gt;|   0 | SELECT STATEMENT  |      |        |
|*  1 |  TABLE ACCESS FULL| T1   |      5 |&lt;/h2&gt;
&lt;h2 id="predicate-information-identified-by-operation-id-1"&gt;Predicate Information (identified by operation id):&lt;/h2&gt;
&lt;p&gt;1 - filter((&amp;ldquo;A&amp;rdquo;=11 OR &amp;ldquo;A&amp;rdquo;=12 OR &amp;ldquo;A&amp;rdquo;=13 OR &amp;ldquo;A&amp;rdquo;=14 OR &amp;ldquo;A&amp;rdquo;=15 OR &amp;ldquo;A&amp;rdquo;=16
OR &amp;ldquo;A&amp;rdquo;=17 OR &amp;ldquo;A&amp;rdquo;=18 OR &amp;ldquo;A&amp;rdquo;=19))&lt;/p&gt;
&lt;p&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;See what happened! The join is gone and it looks like table T2 is not accessed at all (as there is only one TABLE ACCESS rowsource which reads from table T1 ).&lt;/p&gt;
&lt;p&gt;However, there has appeared a filter condition which has all the values from T2 in it! How are these values retrieved?&lt;/p&gt;
&lt;p&gt;A simple sql_trace reveals this:&lt;/p&gt;
&lt;p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 23 Jan 2009 23:38:11 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/01/23/multipart-cursor-subexecution-and-precompute_subquery-hint/</guid></item><item><title>An Email Address Field Should Be Called "email address" (Not "email")</title><link>https://www.databasesandlife.com/an-email-address-field-should-not-be-called-email/</link><description>&lt;p&gt;Naming is extremely important in software development. Any software that deals with emails probably also deals with email addresses. Emails and email addresses are two completely different types of objects, with a completely different set of attributes, and a completely different set of actions which one can perform on them. Even if your application only deals with the one or the other type, it would be unwise to confuse them.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 23 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/an-email-address-field-should-not-be-called-email/</guid></item><item><title>Identifying shared memory segment users using lsof</title><link>https://tanelpoder.com/2009/01/22/identifying-shared-memory-segment-users-using-lsof/</link><description>&lt;p&gt;Lsof (list open files) is a really useful tool for troubleshooting open file decriptors which prevent a deleted file from being released or a shared memory segment from being removed.&lt;/p&gt;
&lt;p&gt;Here’s a little situation on Linux where an Oracle shared memory segment was not released as someone was still using it.&lt;/p&gt;
&lt;pre&gt;$ ipcs -ma

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
&lt;b&gt;0x00000000 393216     oracle    640        289406976  1          dest
&lt;/b&gt;0xbfb94e30 425985     oracle    640        289406976  18
0x3cf13430 557058     oracle    660        423624704  22

------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0xe2260ff0 1409024    oracle    640        154
0x9df96b74 1671169    oracle    660        154

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

&lt;/pre&gt;
&lt;p&gt;The bold line should have disappeared after instance shutdown, but it didn’t. From “natcch” (number of attached processes) column I see there is still some process using the shared memory segment. Thus the segment was not released and even &lt;strong&gt;ipcrm&lt;/strong&gt; command did not remove it (just like with normal files if someone has them open).&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 22 Jan 2009 14:42:45 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/01/22/identifying-shared-memory-segment-users-using-lsof/</guid></item><item><title>Passing Notes</title><link>https://johnj.com/posts/passing-notes/</link><description>&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2268.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2268_hu_3b1591e26a8e108a.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
My room in the A4 wing of the Elevated Station
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Been here about 58 hours so far and the reason I am counting in hours
instead of days is that my sense of days is pretty shot. I have a
screwy sleep routine: 10 hours awake, 3 hours asleep. Lather, rinse
repeat. I am trying to be up at night (we keep New Zealand time here)
for the satellite hours but usually that entails a long nap in the
middle, which curtails my sleep during the day. I’ll figure it out.&lt;/p&gt;
&lt;p&gt;
Despite the goofy schedule and the altitude, last night I felt well
enough to walk with Dave out to drill camp and watch the nineteenth
and final IceCube string deployment. Being outside reminded me of how
beautiful it is here and how hard that is to see until you are
actually out in it, seeing the changing sky, the sastrugi, the myriad
structures scattered about the snow, structures which do not qualify
as architecture but are solely and completely engineering.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2213.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2213_hu_36591abb61557eb2.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Ryan takes a well depth measurement during deployment.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Seeing the last deployment was a real pleasure, partly because I
didn’t have to work it — I was a tourist, a real treat after having
worked on perhaps a dozen or so deployments myself. It was also sweet
because the drilling and deployment went so well this year… and also
bittersweet, perhaps, because it was the last deployment I’m likely to
see. I took photos and some video which I will post as soon as I can.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2217.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2217_hu_67a4cc6b02174d47.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Heading back from the Dark Sector
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Around midnight we decided to head back. A bunch of the drillers were
driving back in the “Ford Gran Neutrino” (the modified van which
IceCube uses to shuttle back and forth to the Dark Sector), and Dave
and I squeezed in. After we crossed the skiway, the van stopped and
the drillers started discussing the expedition which was camped near
the station. A small handful of jacked-up and modified Toyota trucks
have driven here from a Russian base in support of a ski race across
Antarctica. It was decided to pay the campers a visit, so we drove the
van over there and piled out, admired their trucks, and started
talking with a member of the expedition.&lt;/p&gt;
&lt;p&gt;
Apparently about 300 people have skied, walked, or driven to South
Pole this Summer. These people live in a sort of parallel universe
which is disconnected with that of the station. They are allowed a cup
of coffee inside and not much else; and few people walk over to their
makeshift camps near the Pole marker. So it was a treat to talk to
this fellow who has had a pretty different experience in
Antarctica. After a few minutes of conversation he pointed to Sven and
said, “Hey, you’re Sven!” Then he handed him a note written on a scrap
of paper from a case of beer. It was given to him by a member of yet
another expedition which he encountered during his trip, to give to
Sven at the South Pole! We all laughed. Even though it is nearly as
empty as Mars (i.e. nearly zero people per square kilometer),
Antarctica is a small place!&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2242.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2242_hu_77c6e08a1e8e4a27.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Sven greets an expeditioner
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
After delicious burgers at Midrats, we started work. There is ever so
much to do and I am starting to get acclimated enough to be able to
focus on it. The task at hand is to connect the nineteen new IceCube
strings to the rest of the detector, and to calibrate them to prepare
for the new physics run starting April 1. Also to carry out a variety
of software upgrades and make sure everything works correctly. Also,
to report progress to the north and to coordinate all the activities
to minimize conflicts.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2263.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2263_hu_37710f15bc9b153.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Watching the Obama Inauguration
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
This evening, after another short sleep, we watched highlights of the
Obama inauguration, hand-carried on a DVD on today’s flight. (The CBS
news clips carried over the Armed Forces network carried the word
“Live!” at lower right, which was certainly ironic in this setting,
days after the fact.) It was pretty amazing to see our Hyde Park
neighbor take the oath for the Oval Office.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2265.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2265_hu_b7c010359fab1612.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
A solemn moment
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Now for a first foray to the gym, and to start into work again.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Thu, 22 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/passing-notes/</guid></item><item><title>Install Mysql Gem on Leopard</title><link>https://caiustheory.com/install-mysql-gem-on-leopard/</link><description>&lt;p&gt;So, I keep having to reinstall mysql5 and rubygems from time to time for various reasons. I always install mysql5 through &lt;a href="http://macports.org/"&gt;MacPorts&lt;/a&gt; as a dependency for the php5 port (along with various other bits for the LA*P stack).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo port install php5 +mysql5 +pear +readline +sockets +apache2 +sqlite
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once this is installed then I have &lt;code&gt;mysql&lt;/code&gt; and can setup my databases, etc.&lt;/p&gt;
&lt;p&gt;Ignoring the rest of the LAMP stack, I then need to connect Ruby to the Mysql I just installed through MacPorts. Its quite simple to do, once you know the right argument to pass to it. The easiest way is to just tell it where the &lt;code&gt;mysql5_conf&lt;/code&gt; file is and let it figure out the rest for itself.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo gem install mysql -- --with-mysql-config&lt;span class="o"&gt;=&lt;/span&gt;/opt/local/bin/mysql_config5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hopefully this will save me 10 minutes of googling next time I need to do this!&lt;/p&gt;
&lt;h3 id="update-2009-01-21"&gt;Update 2009-01-21&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m an idiot and typed the &lt;code&gt;gem install&lt;/code&gt; command by hand, and ended up with &lt;code&gt;--with-mysql-conf&lt;/code&gt; instead of &lt;code&gt;--with-mysql-config&lt;/code&gt;. Updated now.&lt;/p&gt;
&lt;h3 id="update-2009-10-19"&gt;Update 2009-10-19&lt;/h3&gt;
&lt;p&gt;On Snow Leopard I needed to tell rubygems to install the gem as a 64-bit binary. Hattip to &lt;a href="http://www.schmidp.com/2009/06/14/rubyrails-and-mysql-on-snow-leopard-10a380/comment-page-1/"&gt;Philipp&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo env &lt;span class="nv"&gt;ARCHFLAGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-arch x86_64"&lt;/span&gt; gem install mysql -- &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --with-mysql-config&lt;span class="o"&gt;=&lt;/span&gt;/opt/local/bin/mysql_config5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><author>Caius Theory</author><pubDate>Wed, 21 Jan 2009 19:09:41 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/install-mysql-gem-on-leopard/</guid></item><item><title>Reliable latch waits and a new blog</title><link>https://tanelpoder.com/2009/01/20/reliable-latch-waits-and-a-new-blog/</link><description>&lt;p&gt;Here&amp;rsquo;s a link to Alex Fatkulin&amp;rsquo;s blog if you haven&amp;rsquo;t seen it already: &lt;a href="http://afatkulin.blogspot.com/"&gt;http://afatkulin.blogspot.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;He has some good Oracle internals information in there, I also like his research style.&lt;/p&gt;
&lt;p&gt;Alex just blogged about &lt;a href="http://afatkulin.blogspot.com/2009/01/longhold-latch-waits-on-linux.html"&gt;a finding&lt;/a&gt; (on Oracle 11g on Linux) that when Oracle process doesn&amp;rsquo;t get a latch after spinning, it goes to sleep using &lt;strong&gt;semop()&lt;/strong&gt; system call, which never wakes up unless this semaphore is posted by another process. From past versions we remember that Oracle processes go to sleep for a short period of time, wake up, try to get the latch and sleep again for a longer period of time if unsuccessful (up to _max_exponential_sleep centiseconds). This kind of sleeping with timeout is done using sem&lt;strong&gt;timed&lt;/strong&gt;op() syscall on Linux.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 20 Jan 2009 11:12:16 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/01/20/reliable-latch-waits-and-a-new-blog/</guid></item><item><title>Translation</title><link>https://johnj.com/posts/translation/</link><description>&lt;p&gt;
10:07 PM New Zealand Daylight Time and I am well-socketed into my room
in the station at the South Pole, watching videos, napping when I can,
drinking as much water as I can stomach and waiting for my body’s
chemistry to adjust to a physiological altitude of… let me check…
10,455 feet (the local air density here depends on the weather, and is
displayed continuously on the monitors and the local Web site).&lt;/p&gt;
&lt;p&gt;
To kill time while I acclimate, I just watched “Lost in Translation”
which, with its parables of jet lag and alienation, seem somehow
appropriate even for this very different destination. “Translation” in
physics means moving from one place to another. I have definitely
undergone some serious translation.&lt;/p&gt;
&lt;p&gt;
My stay in McMurdo was very short for a southbound trip — less than
twelve hours. Which suited me fine. We arrived after 10PM, fairly
exhausted from the long and crowded flight, had the usual (relatively
extraneous) briefing, and then immediately bag-dragged for the Pole
flight. The weather was pleasant and sunny, with a small stream of
water flowing downhill past the Movement Control Center (MCC) where we
weighed in.&lt;/p&gt;
&lt;p&gt;
After a brief midrats (midnight meal) we turned in for a few hours of
sleep in the dorms. Then we trudged back up the hill at 0645h to the
MCC for transportation to Williams Field our flight South. The air had
chilled quite a bit during the 'night’ and the stream had frozen.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2034.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2034_hu_f7721650399ba8ed.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Willi Field Air Control Structures
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2036.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2036_hu_4c72190d862e60e2.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Main Street at Willi Field
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Today’s flight was quite a bit easier than yesterday’s. Two of the Air
Guard loadmasters hung out and chatted with us in the airfield cafe
while we waited for our plane to be readied, and then rode out in the
van with us. There was no briefing, just 'get in and go.’ There were
only 7 passengers this time, so there was room to spread out after
take-off (I even got to lie down for awhile).&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2055.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2055_hu_ca122e794826ea5f.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Our ride
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
The scenery was lovely, as in previous years, but another veteran and
I compared notes and we were certain that today’s flight took a
different route up to the Polar Plateau than in the past. (I think
it’s fun to be able to know the route well enough to be able to tell
the difference with no map and no human landmarks.) Low clouds
obscured some of the terrain which made it both harder to see anything
and more beautiful, as sky and ice merged into one milky mixture
punctuated by craggy, chocolate-colored rock.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2128.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2128_hu_f8ef80ff698eeb78.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Watching the Scenery
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;





&lt;a href="https://johnj.com/IMG_2102.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2102_hu_f20df15d13791ae4.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;

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





&lt;a href="https://johnj.com/IMG_2078.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2078_hu_5d916ccbceb57957.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;

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





&lt;a href="https://johnj.com/IMG_2099.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2099_hu_124a8936ace8fe55.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;

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





&lt;a href="https://johnj.com/IMG_2070.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2070_hu_b16921d3be813566.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
Before we knew it the plane began its landing approach and we suited
up, goggles, balaclavas, neck gaiters, boots, glove liners, mittens,
fleece, and Big Reds (the ubiquitous parkas). Always a student of
economy of means, I enjoyed watching the senior loadmaster giving the
order to his subordinate across the plane to put on her gloves, by
wagging his leg at her and raising one (gloved) hand.&lt;/p&gt;
&lt;p&gt;
And then we were down, out, breathing those first breaths of cold,
rarefied air (an experience I will miss, assuming this is my last
trip) and looking out at the minimal snowscape punctuated by the
hyper-functional structures of South Pole Station.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2149.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2149_hu_e78d27977e03681e.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Our flight
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2150.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2150_hu_38b2f58a1386c094.jpg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Arrival at South Pole
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_1603_2.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_1603_2_hu_b98135f6a08a2fb5.jpg" style="width: 400px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Yours truly arriving – Photo by Mark Krasberg
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Mark and Dave came out in the -21F cold to meet us, which is always
such a nice thing — to come to the end of the Earth, and see friends
and colleagues, familiar faces, to have someone carry your carry-on
while you suck your first breaths of high-altitude air, to make your
way to your room and start the slow process of unpacking and settling
in. I am here until February 13… long enough that I have to think of
it as home-away-from-home. After seven times already it should be
pretty easy.&lt;/p&gt;
&lt;p&gt;
I will post more drawings and photos soon, and will back-populate some
of the posts with pictures, so check back for updates.&lt;/p&gt;
&lt;p&gt;
Soon the satellite will be up!&lt;/p&gt;
&lt;p&gt;
&lt;a href="./galleries/topole/index.html"&gt;More pictures from the flight to the Pole&lt;/a&gt;&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Tue, 20 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/translation/</guid></item><item><title>32-bit AS numbers introduce a new BGP flaw.</title><link>https://rob.sh/post/175/</link><description>&lt;p&gt;Last Friday, &lt;a href="http://www.andyd.net"&gt;Andy Davidson&lt;/a&gt;, Jonathan Oddy, and I pushed out &lt;a href="http://www.merit.edu/mail.archives/nanog/msg14345.html"&gt;some research&lt;/a&gt; that has some quite worrying repercussions. Whilst I&amp;rsquo;ve heard from a lot of people privately about this matter, there&amp;rsquo;s a big flaw here, and as Andy &lt;a href="http://www.andyd.net/index.php/2009/01/17/asn32-asn4-internet-broken/"&gt;posted on his blog&lt;/a&gt; (which is much more informative than mine, I think!), this is a big problem.&lt;br /&gt;&lt;br /&gt;
The reason, I think, that we&amp;rsquo;re getting limited public discussion of this exploit (I hesitate to call it an exploit, it&amp;rsquo;s a flaw really, because it&amp;rsquo;s actually a result of the RFC that the problem exists), is because the implementations of 4-byte AS support that are out there already are generally not standards compliant. Let&amp;rsquo;s run down the list:&lt;/p&gt;</description><author>rob.sh</author><pubDate>Mon, 19 Jan 2009 22:23:59 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/175/</guid></item><item><title>Dungeons &amp;amp; Delectibles</title><link>https://benovermyer.com/blog/2009/01/dungeons-and-delectibles/</link><description>&lt;p&gt;Food and the culture surrounding it is probably one of the things least thought about when game designers sit down to create a fictional world. Off the top of my head, I can only think of one popular fantasy world that ever dove into this oft-neglected cultural facet – that of Krynn, the setting of Dragonlance. Even then, it wasn't until deep into the product run that recipes of Krynn started popping up. Food and culinary culture don't serve much purpose in a game, generally. It's hard to write a compelling adventure centering around an exquisite (or godawful) dish. With that said, it &lt;em&gt;is&lt;/em&gt; possible – imagine the players being charged by a royal chef (whom they owe a favor to) to collect exotic ingredients for a culinary masterpiece. Perhaps one of those ingredients is meat from some dangerous beast…. even a dragon, if the chef is eccentric enough.&lt;/p&gt;
&lt;p&gt;More than that, though, food can provide an occasional dressing for a dungeon or tavern that really helps ground the players in the setting. For example, the smell of heavily roasted meat sizzling over a campfire in the wilderness could draw the players into an ambush, or perhaps into an encounter with an NPC they will later find invaluable. Beverages, too, can help set a mood. A fine, aged wine from the personal stores of a wealthy merchant could be just as welcome a reward for a job well done as a pouch of gold coins… or maybe a thick local brew could provide the players with some unplanned-for entertainment. So the next time you're designing a dungeon for your players, or perhaps a level or map for a computer game, try including a bit of flavor in the way of culinary culture. You might be surprised by the emotional reaction you get.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Fri, 16 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2009/01/dungeons-and-delectibles/</guid></item><item><title>On App Store Download Statistics</title><link>https://arashpayan.com/blog/2009/01/15/on-app-store-download-statistics/</link><description>It seems that nobody wants to release statistics about how their apps are doing on the iTunes App Store, yet a lot of people want to know how well various apps are doing. I&amp;rsquo;ve seen a couple of examples of income and download numbers, but I&amp;rsquo;d still like to see more. So, I&amp;rsquo;m putting my money where my mouth is and publishing the download statistics for my first app, Prayer Book.</description><author>Arash Payan</author><pubDate>Thu, 15 Jan 2009 11:31:00 GMT</pubDate><guid isPermaLink="true">https://arashpayan.com/blog/2009/01/15/on-app-store-download-statistics/</guid></item><item><title>APXML: NSXMLDocument 'substitute' for iPhone/iPod Touch</title><link>https://arashpayan.com/blog/2009/01/14/apxml-nsxmldocument-substitute-for-iphoneipod-touch/</link><description>After spending some time working on Jabeh, my latest creation for iPhone/iPod Touch, I&amp;rsquo;m taking some time to dump a little learned knowledge into my blog.
In my first app, my XML needs weren&amp;rsquo;t that great, so putting up with the lack of NSXMLDocument in the iPhone SDK was not a big deal. However, in Jabeh I was changing the XML format so often and using so much of it for my network communication creating delegates for NSXMLParser quickly became a huge time sink.</description><author>Arash Payan</author><pubDate>Thu, 15 Jan 2009 06:04:00 GMT</pubDate><guid isPermaLink="true">https://arashpayan.com/blog/2009/01/14/apxml-nsxmldocument-substitute-for-iphoneipod-touch/</guid></item><item><title>Fare Forward</title><link>https://www.keithrpetersen.com/blog/fare-forward/</link><description>&lt;p&gt;In the January/February 2009 edition of Books and Culture I read a review of Thomas Howard’s &lt;em&gt;&lt;a href="http://www.amazon.com/Dove-Descending-Quartets-Sapientia-Classics/dp/1586170406/"&gt;Dove Descending: A Journey into T.S. Eliot’s Four Quartets&lt;/a&gt;&lt;/em&gt;. (I would link to the review but it isn’t on the B&amp;amp;C web site yet. UPDATE: The article has been posted: &lt;a href="https://www.booksandculture.com/articles/2009/janfeb/15.41.html"&gt;Rest for the Weary&lt;/a&gt;.) This motivated me to dust off (literally) my copy of Eliot’s &lt;em&gt;Selected Poems&lt;/em&gt;, which doesn’t contain “Four Quartets” but has the Ariel Poems, his first published as a Christian. One of these, “&lt;a href="http://theundercroft.blogspot.com/2007/03/animula-i-ssues-from-hand-of-god-simple.html"&gt;Animula&lt;/a&gt;,” stimulated enough thought to be worth writing down.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.keithrpetersen.com/blog/fare-forward/"&gt;Read More&lt;/a&gt;&lt;/p&gt;</description><author>Blog - Keith R. Petersen</author><pubDate>Wed, 14 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.keithrpetersen.com/blog/fare-forward/</guid></item><item><title>2009: Odisea con el funcionariado</title><link>https://danielpecos.com/2009/01/13/2009-odisea-con-el-funcionariado/</link><description>&lt;p&gt;Tiemblo cada vez que tengo que tratar con un funcionario, es como si te echaran una maldición:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;De entrada tienes pocas esperanzas de poder hacer el trámite a la primera, sin que te toque volver n-mil veces a tratar con el/la individu@ en cuestión.&lt;/li&gt;
&lt;li&gt;Una vez te decides a intentarlo, siempre te queda la duda de si ir al edificio público en el que ejerce su profesión o si acudir directamente a la cafetería de al lado (lo cual me hace reflexionar si su profesión es aquella por la que recibe un sueldo, o la que ejerce donde pasa la mayor parte de su jornada laboral… puede ser un tema de reflexión bastante interesante).&lt;/li&gt;
&lt;li&gt;Por último, si has tenido suerte, los astros se encuentran en la conjunción adecuada y encuentras al funcionario en su sitio, tienes que poner la sonrisa más agradable para que el/la personaje, con su cara de estreñido (o de “deja de joderme, que yo a ti no te voy a buscar a tu trabajo y me pongo a darte por el culo”), se digne a darte un trato poco despreciable y a conseguir un mínimo de información, que con suerte, puede llegar a ser hasta útil (porque hay veces que se contradicen, o mejor aún, se dedican a pasarse la pelota, osea tú, de unos a otros).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Posibles motivos de que esta gente se comporte de este modo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Porque no les gusta lo que hacen: pues tuvieron que estudiar bastante tiempo y disputárselo entre muchos para conseguir lo que tienen, por lo que estoy más que seguro que conocían lo que se iban a encontrar (tal vez, con toda la idea, de tocarse las pelotas durante los restos).&lt;/li&gt;
&lt;li&gt;Porque el sentimiento de seguridad y de ser intocables en el trabajo les hace descuidarlo: poco más que decir, si no rindes cuentas a nadie y tampoco te motiva lo que haces, es obvio que cada vez lo vas a hacer peor y con menos ganas (siempre existe la posibilidad de que se dejen el trabajo, pero también existe la posibilidad de que llueva hacia arriba).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Concretando, todo esto se solucionaría &lt;strong&gt;eliminando la permanencia asegurada de un funcionario en su puesto de trabajo&lt;/strong&gt; e implantando unos controles y seguimientos de los rendimientos de su trabajo. ¿Por qué no se hace? Pues porque seguramente lo tendría que tramitar un funcionario y es probable que se le fundieran los sesos al intentar averiguar qué impresos son necesarios.&lt;/p&gt;
&lt;p&gt;Como bien dice mi padre, un funcionario es alguien que hace un esfuerzo en un momento de su vida y se pasa el resto de ella descansando. O como dice un amigo funcionario, que entran a las 8 al puesto de trabajo, pero trabajar nunca se sabe a qué hora se comienza (igualito que en mi empresa 🙁 )&lt;/p&gt;
&lt;p&gt;Y es que francamente, ¿quién no ha pensado que la tarea que realizan 5 funcionarios administrativos la podrían hacer perfectamente 1, como mucho 2, personas trabajadoras como cualquiera? Da la sensación que cuando entran les hacen un test de aptitud y a los que lo superan les rechazan para el puesto (de hecho, el amigo que he comentado justo antes, fue acusado de trepa por sus compañeros funcionarios porque rendía demasiado 😮 !?!?!?!?! 😮 ).&lt;/p&gt;
&lt;p&gt;Nota: he intentado referirme concretamente a funcionarios de caracter administrativo, de los que te atienden tras un mostrador o mesa, aunque, por sorprendente que parezca, estoy convencido que hay funcionarios de gran calidad tanto personal como profesional, por lo que tampoco es correcto generalizar.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Tue, 13 Jan 2009 20:46:31 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2009/01/13/2009-odisea-con-el-funcionariado/</guid></item><item><title>Happy new year</title><link>https://blog.nobugware.com/post/2009/01/05/happy-new-year/</link><description>新年快乐 كل عام وأنتم بخير שנה טובה
Un moyen comme un autre de tester l&amp;rsquo;utf8 ;)</description><author>Fabrice Aneche</author><pubDate>Mon, 05 Jan 2009 16:04:59 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2009/01/05/happy-new-year/</guid></item><item><title>GTranslate</title><link>https://caiustheory.com/gtranslate/</link><description>&lt;p&gt;I finally wrapped up some code I&amp;rsquo;ve been meaning to write for a while, its a wrapper for the &lt;a href="http://translate.google.com/"&gt;Google Translate API&lt;/a&gt;. Its also the first serious time I&amp;rsquo;ve used &lt;code&gt;method_missing&lt;/code&gt; in a class, in this case its to add methods for translating between all the various languages.&lt;/p&gt;
&lt;p&gt;Its fairly simple to use, there is an &lt;a href="http://github.com/caius/gtranslate/tree/master/examples.rb"&gt;examples.rb&lt;/a&gt; included with it, but the basic usage is just this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Convert from english to french&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;Google&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Translate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;english_to_french&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;"Hello"&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; "Bonjour"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# There is also a short(er)-hand version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;Google&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Tr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;en_to_fr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;"Hello"&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As per usual with all my code its available on my &lt;a href="http://github.com/caius/"&gt;github account&lt;/a&gt;, as the &lt;a href="http://github.com/caius/gtranslate/"&gt;GTranslate&lt;/a&gt; project. I&amp;rsquo;ll throw some specs together for it and package it up as a gem soon.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sun, 04 Jan 2009 11:40:59 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/gtranslate/</guid></item><item><title>Oracle memory troubleshooting, Part 1: Heapdump Analyzer</title><link>https://tanelpoder.com/2009/01/02/oracle-memory-troubleshooting-part-1-heapdump-analyzer/</link><description>&lt;p&gt;When troubleshooting Oracle process memory issues like ORA-4030’s or just excessive memory usage, you may want to get a detailed breakdown of PGA, UGA and Call heaps to see which component in there is the largest one.&lt;/p&gt;
&lt;p&gt;The same goes for shared pool memory issues and ORA-4031’s – sometimes you need to dump the shared pool heap metadata for understanding what kind of allocations take most of space in there.&lt;/p&gt;
&lt;p&gt;The heap dumping can be done using a HEAPDUMP event, see &lt;a href="http://www.juliandyke.com/Diagnostics/Dumps/Dumps.php" rel="noopener" target="_blank"&gt;&lt;a href="http://www.juliandyke.com/Diagnostics/Dumps/Dumps.php"&gt;http://www.juliandyke.com/Diagnostics/Dumps/Dumps.php&lt;/a&gt;&lt;/a&gt; for syntax.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NB!&lt;/strong&gt; Note that when dumping SGA heaps (like shared, large, java and streams pools), your process holds shared pool latches for the entire dump duration so this should be used only as a last resort in busy production instances. Dumping a big shared pool could hang your instance for quite some time. Dumping private process heaps is safer as that way only the target process is affected.&lt;/p&gt;
&lt;p&gt;The heapdump output file structure is actually very simple, all you need to look at is the HEAP DUMP header to see in which heap the following chunks of memory belong (as there may be multiple heaps dumped into a single tracefile).&lt;/p&gt;
&lt;pre&gt;HEAP DUMP heap name="&lt;strong&gt;sga heap(1,1)&lt;/strong&gt;"  desc=04EA22D0
 extent sz=0xfc4 alt=108 het=32767 rec=9 flg=-125 opc=0
 parent=00000000 owner=00000000 nex=00000000 xsz=0x400000
EXTENT 0 addr=20800000
  &lt;strong&gt;Chunk 20800038 sz=   374904    free      "               "&lt;/strong&gt;
  Chunk 2085b8b0 sz=      540    recreate  "KGL handles    "  latch=00000000
  Chunk 2085bacc sz=      540    recreate  "KGL handles    "  latch=00000000
  Chunk 2085bce8 sz=     1036    freeable  "parameter table"
  Chunk 2085c0f4 sz=     1036    freeable  "parameter table"
  Chunk 2085c500 sz=     1036    freeable  "parameter table"
  Chunk 2085c90c sz=     1036    freeable  "parameter table"
  Chunk 2085cd18 sz=     1036    freeable  "parameter table"
  Chunk 2085d124 sz=      228    recreate  "KGL handles    "  latch=00000000
  Chunk 2085d208 sz=      228    recreate  "KGL handles    "  latch=00000000
  Chunk 2085d2ec sz=      228    recreate  "KGL handles    "  latch=00000000
  Chunk 2085d3d0 sz=      228    recreate  "KGL handles    "  latch=00000000
  Chunk 2085d4b4 sz=      228    recreate  "KGL handles    "  latch=00000000
  Chunk 2085d598 sz=      540    recreate  "KQR PO         "  latch=2734AA00
  Chunk 2085d7b4 sz=      540    recreate  "KQR PO         "  latch=2734AA00
  Chunk 2085d9d0 sz=      228    recreate  "KGL handles    "  latch=00000000
...
&lt;/pre&gt;
&lt;p&gt;The first list of chunks after HEAP DUMP (the list above) is the list of all chunks in the heap. There are more lists such as freelists and LRU lists in a regular heap, but lets ignore those for now, I’ll write more about heaps in an upcoming post.&lt;/p&gt;
&lt;p&gt;After identifying heap name from HEAP DUMP line, you can see all individual chunks from the “Chunk” lines. The second column after Chunk shows the start address of a chunk, &lt;em&gt;sz=&lt;/em&gt; means chunk size, the next column shows the type of a chunk (free, freeable, recreate, perm, R-free, R-freeable).&lt;/p&gt;
&lt;p&gt;The next column is important one for troublehsooting, it shows the reason why a chunk was allocated (such &lt;em&gt;KGL handles&lt;/em&gt; for library cache handles, &lt;em&gt;KGR PO&lt;/em&gt; for dictionary cache parent objects etc). Every chunk in a heap has a fixed 16 byte area in the chunk header which stores the allocation reason (comment) of a chunk. Whenever a client layer (calling a kghal* chunk allocation function) allocates heap memory, it needs to pass in a comment up to 16 bytes and it’s stored in the newly allocated chunk header.&lt;/p&gt;
&lt;p&gt;This is a trivial technique for troubleshooting memory leaks and other memory allocation problems. When having memory issues you can just dump all the heap’s chunks sizes and aggregate these by allocation reason/comment. That would show you the biggest heap occupier and give further hints where to look next.&lt;/p&gt;
&lt;p&gt;As there can be lots of chunks in large heaps, aggregating the data manually would be time consuming (and boring). Here’s a little shell script which can summarize Oracle heapdump output tracefile contents for you:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 02 Jan 2009 13:55:36 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2009/01/02/oracle-memory-troubleshooting-part-1-heapdump-analyzer/</guid></item><item><title>Google Books</title><link>http://blog.danieljanus.pl/google-books/</link><description>&lt;div&gt;&lt;p&gt;Yesterday, upon a midnight dreary, while I pondered, weak and weary, over &lt;a href="http://mitpress.mit.edu/algorithms/"&gt;a renowned volume of the olden lore&lt;/a&gt; (and specifically, upon one of the problems contained in the Polish translation of the first edition), I suddenly felt a need to consult the original version, to check whether there are no mistranslations or unincluded corrections for my copy. So I headed for &lt;a href="http://books.google.com/"&gt;Google Book Search&lt;/a&gt;, and apart from finding what I needed, I followed a link that sounded interesting. Quoth the link, &lt;a href="http://books.google.com/googlebooks/agreement/"&gt;“Groundbreaking Agreement”&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Basically, what it all boils to is two pieces of news — you guessed it, a good one and a bad one. The good news is that Google have come to agreement with several major U.S. publishers that will allow them to provide online access to digitized copies of out-of-print but still copyrighted books. &lt;em&gt;Lots&lt;/em&gt; of books, and even though the service is not going to be free, that means all this richness will be at the fingertips — no more need to travel half the world to the Library of Congress to get one of the rare copies we’re after. Sounds cool, huh? Well, here comes the bad news: it will only be available to U.S. citizens.&lt;/p&gt;&lt;p&gt;Or will it?&lt;/p&gt;&lt;p&gt;I wonder how are they going to check for this precondition. IP-based geolocalization springs to mind. And unless they blacklist some IPs or restrict the credit cards used for payment, all I will need is some proxy on some server physically in the U.S. Say, a shell account on someone’s Linux box. I remember reading a Polish blog post about gaining access to American-exclusive content of some website (&lt;a href="http://last.fm"&gt;last.fm&lt;/a&gt; I believe it was) in a similar way. Hmm, hmm. We will see.&lt;/p&gt;&lt;p&gt;So, anyone got a shell account to spare?&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Fri, 02 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/google-books/</guid></item><item><title>2009 Predictions</title><link>https://justingarrison.com/blog/2009-01-01-2009-predictions/</link><description>I have never done this before but I thought I would take a swing and making some predictions</description><author>Justin Garrison's Homepage</author><pubDate>Thu, 01 Jan 2009 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2009-01-01-2009-predictions/</guid></item><item><title>The Shell Meme</title><link>https://caiustheory.com/the-shell-meme/</link><description>&lt;p&gt;I ran across &lt;a href="http://lstoll.net/2008/04/shell-meme/"&gt;The Shell Meme&lt;/a&gt; on &lt;a href="http://lstoll.net/"&gt;Lincoln Stoll&amp;rsquo;s&lt;/a&gt; blog, and figured I&amp;rsquo;d, uh, &lt;em&gt;borrow&lt;/em&gt; it.&lt;/p&gt;
&lt;p&gt;Run this command in a new shell:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;history&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; awk &lt;span class="s1"&gt;'{ a[$2]++ } END { for(i in a){printf "%5d\t%s\n ",a[i],i} }'&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; sort -rn &lt;span class="p"&gt;|&lt;/span&gt; head
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I get this as the output&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;379 git
221 cd
181 ssh
77 sudo
69 ruby
66 ls
34 rake
33 m
32 bb
31 m.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;bb&lt;/code&gt; changes directory straight into my &lt;a href="http://www.brightbox.co.uk/"&gt;BrightBox&lt;/a&gt; source directory. &lt;code&gt;m&lt;/code&gt; and &lt;code&gt;m.&lt;/code&gt; are &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt; alias&amp;rsquo;s to open files or directories in TextMate for editing.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Tue, 30 Dec 2008 20:29:35 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/the-shell-meme/</guid></item><item><title>More Di2 Stuff</title><link>https://rob.sh/post/174/</link><description>&lt;p&gt;Following getting my roadbike back out for the first time in a while (been really busy since moving to Ealing!) I figured I&amp;rsquo;d look at if there&amp;rsquo;s anything more about Di2 floating around. It seems the more I see of this system, the more I want it. Perhaps Orca with Di2 is something for 2009?&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;center&gt;&lt;/center&gt;
&lt;br /&gt;&lt;br /&gt;
I've also started tracking my rides (mostly fixed, mostly to and from work at the moment) &lt;a href="https://rob.sh/gps/"&gt;on this site&lt;/a&gt;, if there's any interest, I was pondering publishing the code/a webapp to upload other people's rides. I find that MotionBased is really tedious! Comments/emails welcome on this subject.</description><author>rob.sh</author><pubDate>Sun, 28 Dec 2008 23:45:18 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/174/</guid></item><item><title>Performance Visualization made easy – PerfSheet 2.0 beta</title><link>https://tanelpoder.com/2008/12/28/performance-visualization-made-easy-perfsheet-20-beta/</link><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;/strong&gt; Luca Canali has written a newer version of Perfsheet (PerfSheet v4) and you can download it &lt;a href="http://externaltable.blogspot.ch/2013/02/awr-analytics-and-oracle-performance.html" target="_blank"&gt;here&lt;/a&gt;. I am not updating/maintaining the old versions anymore (and Perfsheet v3 is only tested on up to Excel 2007) so I’d recommend to check out Luca’s PerfSheet v4.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Hi all,&lt;/p&gt;
&lt;p&gt;I have been extremely busy over last couple of months, that’s why there haven’t been any blog entries (no, I haven’t ran out of good ideas ;-)&lt;/p&gt;
&lt;p&gt;I just managed to find some time on a day-time 9-hour flight from Shanghai to Finland, thus here’s a blog entry about something what I had wanted to write about for long time… I’m talking about the PerfSheet tool I wrote a year ago and have been showing at few conferences already. It has been a great time saver for me over this year when working through performance data for troubleshooting or capacity planning tasks.&lt;/p&gt;
&lt;p&gt;If you don’t want to read further through my comments, just download PerfSheet from &amp;lt;/files/PerfSheet.zip&amp;gt; and see how it works yourself!&lt;/p&gt;
&lt;p&gt;For others, let me give some history first:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 28 Dec 2008 17:19:36 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/12/28/performance-visualization-made-easy-perfsheet-20-beta/</guid></item><item><title>Battlestar Galactica is the Awesomest Thing Ever!</title><link>https://liza.io/battlestar-galactica-is-the-awesomest-thing-ever/</link><description>&lt;p&gt;C and I have been watching Battlestar Galactica. It&amp;rsquo;s something I&amp;rsquo;ve wanted to watch back in the U.S. on the Sci-Fi channel, but somehow always skipped over it because I couldn&amp;rsquo;t be bothered or couldn&amp;rsquo;t get into the storyline.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Sat, 27 Dec 2008 05:46:00 GMT</pubDate><guid isPermaLink="true">https://liza.io/battlestar-galactica-is-the-awesomest-thing-ever/</guid></item><item><title>Sending Array elements as individual arguments in Ruby</title><link>https://caiustheory.com/sending-array-elements-as-individual-arguments-in-ruby/</link><description>&lt;p&gt;Lets imagine we&amp;rsquo;ve got an array of strings, and we want to print it out as a list of strings using printf. &lt;em&gt;(If you&amp;rsquo;re complaining about my logic here, hold fire for just a second good sir/madam.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So we start off with the array of strings, and then pass it to printf with the right amount of &lt;code&gt;%s&lt;/code&gt;&amp;rsquo;s in the format string:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"one"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"two"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"three"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s2"&gt;"%s, %s, %s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ~&amp;gt; -:3:in `printf': too few arguments (ArgumentError)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ~&amp;gt; from -:3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Oh whoops, we&amp;rsquo;ve actually only passed &lt;code&gt;&amp;quot;%s, %s, %s&amp;quot;, [&amp;quot;one&amp;quot;, &amp;quot;two&amp;quot;, &amp;quot;three&amp;quot;]&lt;/code&gt; to printf. So of course it whinges about not getting enough arguments. Now how do we fix this, how &lt;strong&gt;do&lt;/strong&gt; we pass an array with each element a seperate argument to a method?&lt;/p&gt;
&lt;p&gt;We use the &lt;code&gt;*&lt;/code&gt; of course! Just prefix the variable name with &lt;code&gt;*&lt;/code&gt; and the method is passed each element as separate arguments, rather than the whole array as one arguement.&lt;/p&gt;
&lt;p&gt;Going back to our &lt;code&gt;printf&lt;/code&gt; example above, we simply insert one character &lt;em&gt;(the lowly &lt;code&gt;*&lt;/code&gt;)&lt;/em&gt; and end up with a string being outputted.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s2"&gt;"%s, %s, %s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; one, two, three&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now I realise this is a partially stupid example, but it serves to explain the point I wanted to make. If you were complaining about my choice of printf earlier, here is the way I think most rubyists would solve this problem instead.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"one"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"two"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"three"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; one two three&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And if I wanted to be slightly cleverer with the &lt;code&gt;printf&lt;/code&gt; version, and print out an array containing an unknown number of strings, but of a set width, then I could do the following. &lt;em&gt;(NB: This is actually how I ran into this problem.)&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"one"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"two"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"three"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"%6s"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; one two three&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And that is where the lowly &lt;code&gt;*&lt;/code&gt; comes in.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Fri, 26 Dec 2008 09:25:15 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/sending-array-elements-as-individual-arguments-in-ruby/</guid></item><item><title>Merry Testing</title><link>https://caiustheory.com/merry-testing/</link><description>&lt;p&gt;Just a few examples of the same test written in a few languages. Its testing setting the date on an object that is created in the tests&amp;rsquo; setup method already. These fall under the unit testing, rather than full-stack testing.&lt;/p&gt;
&lt;h3 id="testing-in-objc-with-ocunithttpwwwsentechsoftwareocunit"&gt;Testing in ObjC with &lt;a href="http://www.sente.ch/software/ocunit/"&gt;OCUnit&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-objc"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Add a date and time
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;testSettingDate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;NSDate&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;theDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSDate&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;STAssertNoThrow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;calc&lt;/span&gt; &lt;span class="nl"&gt;setDate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;theDate&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;@"Shouldn't raise an exception"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// And it should match when pulled out as well
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="n"&gt;STAssertEqualObjects&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;calc&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;theDate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;@"%@ should match %@"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;calc&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;theDate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="testing-in-ruby-using-rspechttprspecinfo"&gt;Testing in Ruby using &lt;a href="http://rspec.info/"&gt;RSpec&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;it&lt;/span&gt; &lt;span class="s2"&gt;"should set the date successfully"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;the_date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Date&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="vi"&gt;@calc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;the_date&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# And it should match when pulled out as well&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="vi"&gt;@calc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;should&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;the_date&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="testing-in-ruby-using-testunithttpwwwruby-docorgstdliblibdoctestunitrdocclassestestunithtml"&gt;Testing in Ruby using &lt;a href="http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/classes/Test/Unit.html"&gt;Test::Unit&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_setting_date&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;the_date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Date&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="vi"&gt;@calc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;the_date&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# And it should match when pulled out as well&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;assert_equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@calc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;the_date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="testing-in-php-using-phpunithttpphpunit"&gt;Testing in PHP using &lt;a href="http://phpun.it/"&gt;PHPUnit&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;testSettingDate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$calc&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$date&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# And it should match when pulled out as well
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$calc&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$date&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><author>Caius Theory</author><pubDate>Thu, 25 Dec 2008 17:01:54 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/merry-testing/</guid></item><item><title>NSThread iPhone Template</title><link>https://blog.nobugware.com/post/2008/12/22/nsthread-iphone-template/</link><description>This is firstly a reminder for myself, here is a great example how to fire up a thread to perform long operation on iphone, without blocking reactivity.
Stanford CS 193P iPhone application programming is still the best place to find optimised example that works.
All this examples was taken from this courses, see chap 10 &amp;amp; 11 about TableView optimisation
`
// LetsMakeAThreadAppDelegate.m // LetsMakeAThread // // Created by Evan Doll on 10/27/08.</description><author>Fabrice Aneche</author><pubDate>Mon, 22 Dec 2008 20:42:12 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2008/12/22/nsthread-iphone-template/</guid></item><item><title>Think Visibility: An Online Marketing Conference</title><link>https://caiustheory.com/think-visibility-an-online-marketing-conference/</link><description>&lt;p&gt;Now I&amp;rsquo;m not one for blogging about events usually—if I&amp;rsquo;m attending one then I&amp;rsquo;ll just talk about it on &lt;a href="http://twitter.com/caius"&gt;twitter&lt;/a&gt; quite a bit beforehand. However, seeing as this one is being organised by my housemate and I like to keep him in a good mood so he doesn&amp;rsquo;t do something daft like change the locks, I figured I&amp;rsquo;d blog about this one. &lt;em&gt;(Also its really rather a good idea, I&amp;rsquo;ll be paying to attend and think he&amp;rsquo;s bloody mad to organise a conference!)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The conference is &lt;a href="http://www.thinkvisibility.com/"&gt;Think Visibility&lt;/a&gt;, which is a&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;one-day mini conference with a focus on the areas of web development and marketing which are usually left behind in the creation process: SEO, PPC, Monetisation, Blogging, Accessibility and Usability.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;a href="http://www.thinkvisibility.com/speakers.html"&gt;speaker line-up&lt;/a&gt; has rather a lot of big names in it if you follow the SEO/Online marketing world, and its only £30 to turn up for the day and listen to them speak. Oh, and theres an afterparty with free drinks &lt;em&gt;(Sponsor permitting)&lt;/em&gt; where you can get drunk with your hero&amp;rsquo;s. (Or something.)&lt;/p&gt;
&lt;p&gt;Me, I&amp;rsquo;m attending simply because up until a year or so ago I thought SEO was a complete heap of crap, but having known &lt;a href="http://www.thehodge.co.uk/"&gt;Dom&lt;/a&gt; for a while, and worked for an SEO agency, I&amp;rsquo;m starting to appreciate that there is an art to it, and it is a much needed skill to run a successful website.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sat, 20 Dec 2008 15:48:05 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/think-visibility-an-online-marketing-conference/</guid></item><item><title>anti-procrastination.el</title><link>http://blog.danieljanus.pl/fighting-procrastination/</link><description>&lt;div&gt;&lt;p&gt;Fighting procrastination has been my major concern these days. I’ve devised a number of experimental tools to help me with that. One of them is called &lt;a href="http://bach.ipipan.waw.pl/~nathell/projects/snafu.php"&gt;snafu&lt;/a&gt; and can generate reports of your activity throughout the whole day of work. It’s in a preliminary state, but works (at least since I’ve found and fixed a long-standing bug in it which would cause it to barf every now and then), and I already have a number of ideas for its further expansion.&lt;/p&gt;&lt;p&gt;Reports alone, however, do not quite muster enough motivation for work. I’m doing most of my editing/programming work in Emacs, so yesterday I grabbed the Emacs Lisp manual and came up with a couple of extra lines at the end of my &lt;code&gt;.emacs&lt;/code&gt;.&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs lisp"&gt;&lt;span class="hljs-comment"&gt;;;; Written by Daniel Janus, 2008/12/18.&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;;; This snippet is placed into the public domain.  Feel free&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;;; to use it in any way you wish.  I am not responsible for&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;;; any damage resulting from its usage.&lt;/span&gt;

(&lt;span class="hljs-name"&gt;defvar&lt;/span&gt; store-last-modification-time &lt;span class="hljs-literal"&gt;t&lt;/span&gt;)
(&lt;span class="hljs-name"&gt;defvar&lt;/span&gt; last-modification-time &lt;span class="hljs-literal"&gt;nil&lt;/span&gt;)
(&lt;span class="hljs-name"&gt;defun&lt;/span&gt; mark-last-modification-time (&lt;span class="hljs-name"&gt;beg&lt;/span&gt; end len)
  (&lt;span class="hljs-name"&gt;let&lt;/span&gt; ((&lt;span class="hljs-name"&gt;b1&lt;/span&gt; (&lt;span class="hljs-name"&gt;substring&lt;/span&gt; (&lt;span class="hljs-name"&gt;buffer-name&lt;/span&gt; (&lt;span class="hljs-name"&gt;current-buffer&lt;/span&gt;)) &lt;span class="hljs-number"&gt;0&lt;/span&gt; &lt;span class="hljs-number"&gt;1&lt;/span&gt;)))
    (&lt;span class="hljs-name"&gt;when&lt;/span&gt; (&lt;span class="hljs-name"&gt;and&lt;/span&gt; store-last-modification-time
               (&lt;span class="hljs-name"&gt;not&lt;/span&gt; (&lt;span class="hljs-name"&gt;string=&lt;/span&gt; b1 &lt;span class="hljs-string"&gt;&amp;quot; &amp;quot;&lt;/span&gt;))
               (&lt;span class="hljs-name"&gt;not&lt;/span&gt; (&lt;span class="hljs-name"&gt;string=&lt;/span&gt; b1 &lt;span class="hljs-string"&gt;&amp;quot;*&amp;quot;&lt;/span&gt;)))
      (&lt;span class="hljs-name"&gt;setq&lt;/span&gt; last-modification-time (&lt;span class="hljs-name"&gt;current-time&lt;/span&gt;)))))
(&lt;span class="hljs-name"&gt;add-hook&lt;/span&gt; &amp;#x27;after-change-functions &amp;#x27;mark-last-modification-time)
(&lt;span class="hljs-name"&gt;defun&lt;/span&gt; write-lmt ()
  (&lt;span class="hljs-name"&gt;setq&lt;/span&gt; store-last-modification-time &lt;span class="hljs-literal"&gt;nil&lt;/span&gt;)
  (&lt;span class="hljs-name"&gt;when&lt;/span&gt; last-modification-time
    (&lt;span class="hljs-name"&gt;with-temp-file&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;/tmp/emacs-lmt&amp;quot;&lt;/span&gt;
      (&lt;span class="hljs-name"&gt;multiple-value-bind&lt;/span&gt; (&lt;span class="hljs-name"&gt;a&lt;/span&gt; b c) last-modification-time
        (&lt;span class="hljs-name"&gt;princ&lt;/span&gt; a (&lt;span class="hljs-name"&gt;current-buffer&lt;/span&gt;))
        (&lt;span class="hljs-name"&gt;terpri&lt;/span&gt; (&lt;span class="hljs-name"&gt;current-buffer&lt;/span&gt;))
        (&lt;span class="hljs-name"&gt;princ&lt;/span&gt; b (&lt;span class="hljs-name"&gt;current-buffer&lt;/span&gt;)))))
  (&lt;span class="hljs-name"&gt;setq&lt;/span&gt; store-last-modification-time &lt;span class="hljs-literal"&gt;t&lt;/span&gt;))
(&lt;span class="hljs-name"&gt;run-at-time&lt;/span&gt; &lt;span class="hljs-literal"&gt;nil&lt;/span&gt; &lt;span class="hljs-number"&gt;1&lt;/span&gt; &amp;#x27;write-lmt)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Every second (to change that to every 10 seconds, change the &lt;code&gt;1&lt;/code&gt; to &lt;code&gt;10&lt;/code&gt; in the last line) it creates a file named &lt;code&gt;/tmp/emacs-lmt&lt;/code&gt; which contains the time of last modification of any non-system buffer.&lt;/p&gt;&lt;p&gt;That’s all there is to it, at least on the Emacs side. The other part is a simple shell script, which uses &lt;a href="http://www.mplayerhq.hu/"&gt;MPlayer&lt;/a&gt; to display a nag-screen for five seconds, and then give me some time to start doing anything useful before nagging me again:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs bash"&gt;&lt;span class="hljs-meta"&gt;#!/bin/bash&lt;/span&gt;
TIMEOUT=300
&lt;span class="hljs-keyword"&gt;while&lt;/span&gt; &lt;span class="hljs-literal"&gt;true&lt;/span&gt;; &lt;span class="hljs-keyword"&gt;do&lt;/span&gt;
   &lt;span class="hljs-built_in"&gt;cat&lt;/span&gt; /tmp/emacs-lmt | (
      &lt;span class="hljs-built_in"&gt;read&lt;/span&gt; a; &lt;span class="hljs-built_in"&gt;read&lt;/span&gt; b;
      c=&lt;span class="hljs-string"&gt;&amp;quot;`date +%s`&amp;quot;&lt;/span&gt;;
      &lt;span class="hljs-built_in"&gt;let&lt;/span&gt; x=c-65536*a-b;
      &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; &lt;span class="hljs-built_in"&gt;test&lt;/span&gt; &lt;span class="hljs-variable"&gt;$x&lt;/span&gt; -gt &lt;span class="hljs-variable"&gt;$TIMEOUT&lt;/span&gt;;
          &lt;span class="hljs-keyword"&gt;then&lt;/span&gt; mplayer -fs &lt;span class="hljs-variable"&gt;$HOME&lt;/span&gt;/p.avi;
               &lt;span class="hljs-built_in"&gt;sleep&lt;/span&gt; 15;
      &lt;span class="hljs-keyword"&gt;fi&lt;/span&gt;)
   &lt;span class="hljs-built_in"&gt;sleep&lt;/span&gt; 1
&lt;span class="hljs-keyword"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The nag-screen in my case is an animation which I’ve created using MEncoder from a single frame which looks &lt;a href="http://bach.ipipan.waw.pl/~nathell/procrastination.png"&gt;like this&lt;/a&gt;. Beware the expletives! (This is one of the few cases I find their usage justified, as the strong message bites the conscience more strongly.)&lt;/p&gt;&lt;p&gt;I’ve only been testing this setup for one day, but so far it’s working flawlessly: I got more done yesterday than for the two previous days combined, and that’s excluding the hour or so that took me to write these snippets.&lt;/p&gt;&lt;p&gt;If anyone else happens to give it a try, I’d love to hear any comments.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Thu, 18 Dec 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/fighting-procrastination/</guid></item><item><title>Fix Mail.app crashing after 10.5.6 upgrade</title><link>https://caiustheory.com/fix-mailapp-crashing-after-1056-upgrade/</link><description>&lt;p&gt;When you upgrade to Mac OS 10.5.6, Mail.app might start crashing a few seconds after starting due to the GPG Bundle.&lt;/p&gt;
&lt;p&gt;The solution is to grab the updated version of the &lt;a href="http://www.sente.ch/software/GPGMail/English.lproj/GPGMail.html"&gt;GPG bundle&lt;/a&gt; – &lt;a href="http://www.sente.ch/pub/beta/GPGMail_d55_Leopard.dmg"&gt;GPGMail_d55_Leopard.dmg&lt;/a&gt;&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Wed, 17 Dec 2008 15:58:04 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/fix-mailapp-crashing-after-1056-upgrade/</guid></item><item><title>Un peu de statistiques</title><link>https://blog.nobugware.com/post/2008/12/16/un-peu-de-statistiques/</link><description>Comment lisez vous ce blog ?
Pour le feed RSS:
18 29 a lire ce blog dans Google Reader 2 dans Bloglines 5 a lire le RSS via un browser Pour le site web sur un an 30 410 visites, soit une centaine de visite par jour, 80% des lecteurs ne viennent qu&amp;rsquo;une fois.
Un page rank de 3: 75% du traffic pour le site web vient de Google.
20% etant en rapport avec les mots clefs symbian ou s60 4 % avec PS3 2 % avec Django Ce qui ne reflete pas du tout le contenu de ce site (voir nuage de tag)</description><author>Fabrice Aneche</author><pubDate>Wed, 17 Dec 2008 03:25:33 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2008/12/16/un-peu-de-statistiques/</guid></item><item><title>Quick Picture of Yourself</title><link>https://caiustheory.com/quick-picture-of-yourself/</link><description>&lt;p&gt;Theres a meme going round the &lt;a href="http://www.google.com/search?q=Take+a+picture+of+yourself+right+now"&gt;blogosphere&lt;/a&gt;/&lt;a href="http://search.twitter.com/search?q=Take+a+picture+of+yourself+right+now"&gt;twitterverse&lt;/a&gt; recently, so I figured I&amp;rsquo;d jump on it because there aren&amp;rsquo;t any pictures of me on this blog yet. And there aren&amp;rsquo;t that many in my &lt;a href="http://flickr.com/photos/caius/"&gt;flickr&lt;/a&gt; photostream either actually.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Picture of Caius" src="http://caius.name/images/qs/Me.png" title="Caius Durling" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="http://caius.name/images/qs/Me.png"&gt;Fullsize Picture&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="instructions"&gt;Instructions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Take a picture of yourself right now.&lt;/li&gt;
&lt;li&gt;Don’t change your clothes, don’t fix your hair… just take a picture.&lt;/li&gt;
&lt;li&gt;Post that picture with NO editing.&lt;/li&gt;
&lt;li&gt;Post these instructions with your picture.&lt;/li&gt;
&lt;/ol&gt;</description><author>Caius Theory</author><pubDate>Tue, 16 Dec 2008 20:12:53 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/quick-picture-of-yourself/</guid></item><item><title>I created the Internet</title><link>https://jasoneckert.github.io/myblog/i-created-the-internet/</link><description>&lt;p&gt;&lt;img alt="The Internet" src="theinternet.jpg#center" title="The Internet" /&gt;&lt;/p&gt;
&lt;p&gt;Complete with blinking light! It&amp;rsquo;s amazing what you can make with a soldering iron and the spare electrical parts you have in your basement.&lt;/p&gt;
&lt;p&gt;If you are wondering what the heck I am talking about, just watch the BBC sitcom “The IT Crowd” Series 3 Episode 4.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Tue, 16 Dec 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/i-created-the-internet/</guid></item><item><title>Les applications essentielles pour Mac</title><link>https://blog.nobugware.com/post/2008/12/14/les-applications-essentielles-pour-mac/</link><description>Voici la liste des applications indispensables pour votre Mac, la plupart sont gratuites, les applications payantes sont signalées par €€€.
Nouvelle liste !
Après une installation ou une réinstallation de votre Mac, vous trouverez cette liste peut être aussi utile que moi.
Firefox Le browser web libre et gratuit
OpenOffice 3 Enfin une alternative viable et gratuite à Microsoft Office, associé aux templates
VLC Le player vidéo multiformat
[Windows Media Components for QuickTime](http://www.</description><author>Fabrice Aneche</author><pubDate>Mon, 15 Dec 2008 01:29:16 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2008/12/14/les-applications-essentielles-pour-mac/</guid></item><item><title>Installing Ubuntu on an iMac G3</title><link>https://caiustheory.com/installing-ubuntu-on-an-imac-g3/</link><description>&lt;p&gt;I decided to install ubuntu onto my iMac G3&lt;!-- raw HTML omitted --&gt;450Mhz G3, 768mb ram, 20GB Hard Drive&lt;!-- raw HTML omitted --&gt; to play around with. Only problem was it would boot so far, then just stop at a black screen. In googling the fix, the blog post that contains the fix is &lt;em&gt;slightly&lt;/em&gt; outdated and 100% 404.&lt;/p&gt;
&lt;p&gt;Here is the fix, updated for Ubuntu 6.10 Desktop PPC:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;When the screen goes black, drop to the console&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; Control - Option - F2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;(if you need to log in use the name ubuntu to log in.)&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; $ sudo nano /etc/X11/xorg.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change the frequencies in monitor section as follows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; Section “Monitor”
Identifier “Generic Monitor”
Option “DPMS”
HorizSync 60-60
VertRefresh 43-117
EndSection
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;After the changes then type &lt;code&gt;control-o&lt;/code&gt;, &lt;code&gt;return&lt;/code&gt; (to accept the filename), then &lt;code&gt;control-x&lt;/code&gt; (save and exit nano)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restart X by running the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; sudo killall gdm &amp;amp;&amp;amp; sudo /etc/init.d/gdm start
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;</description><author>Caius Theory</author><pubDate>Tue, 09 Dec 2008 10:51:48 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/installing-ubuntu-on-an-imac-g3/</guid></item><item><title>CrackBerry Book</title><link>https://jasoneckert.github.io/myblog/crackberry-book/</link><description>&lt;p&gt;&lt;img alt="CrackBerry book" src="crackberrybook.jpg#right" title="CrackBerry book" /&gt;&lt;/p&gt;
&lt;p&gt;Yes, I am definitely a CrackBerry user.&lt;/p&gt;
&lt;p&gt;As a result, when I saw a new book on Amazon called &lt;em&gt;&lt;strong&gt;CrackBerry: True Tales of BlackBerry Use and Abuse&lt;/strong&gt;&lt;/em&gt;, I simply had to order it and pay the inflated shipping and US exchange rate to have it delivered to Canada. And I am glad I did - it was a hilarious read, and I must admit that I can relate well to the crazy stories within.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Mon, 08 Dec 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/crackberry-book/</guid></item><item><title>About</title><link>https://caiustheory.com/about/</link><description>&lt;h2 id="the-domain-name"&gt;The Domain Name&lt;/h2&gt;
&lt;p&gt;This blog used to be located at &lt;a href="http://swedishcampground.com/"&gt;SwedishCampground.com&lt;/a&gt;, but I ended up with a better use for that name, so this got sidelined over here. I bought &lt;a href="http://caiustheory.com/"&gt;CaiusTheory.com&lt;/a&gt; after having someone mention it to me in parody of Chaos Theory, and decided it was fairly apt for my musings and technical waffling.&lt;/p&gt;
&lt;h2 id="the-author"&gt;The Author&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m a:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mac User&lt;/li&gt;
&lt;li&gt;Developer at &lt;a href="http://freeagent.com/"&gt;FreeAgent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://twitter.com/caius"&gt;Twitter Addict&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Find out more about me over on my &lt;a href="http://caius.name/"&gt;profile site&lt;/a&gt;.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sun, 07 Dec 2008 06:09:28 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/about/</guid></item><item><title>Python 3.0 is out</title><link>https://blog.nobugware.com/post/2008/12/04/python-30-out/</link><description>Python 3.0 is here.
Guido and others released Python 3.0, a major &amp;ldquo;backward&amp;rdquo; incompatible python release.
It was a necessary choice to remove many old libraries, rework the std library, and change some behaviour.
You can see it all in What&amp;rsquo;s new in Python 3.0.
The most visible change is maybe the print statement, print is now a function:
print &amp;ldquo;toto&amp;rdquo;
becomes
print(&amp;quot;toto&amp;quot;) The % operator whis is supplented by the format() method:</description><author>Fabrice Aneche</author><pubDate>Thu, 04 Dec 2008 16:08:35 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2008/12/04/python-30-out/</guid></item><item><title>Apprendre à coder pour l'iphone avec l'universite de Stanford</title><link>https://blog.nobugware.com/post/2008/12/04/apprendre-coder-pour-liphone-avec-luniversite-de-stanford/</link><description>Tous les cours, tous les slides, tous les exemples en lignes, sont forts ces californiens.
[le cours Iphone development](http://www.stanford.edu/class/cs193p/cgi- bin/index.php) ainsi que le cours sur cocoa:
Je vous remet mon article sur [apprendre objective C](/post/2008/10/20/iphone- sdk-exemple-de-code-et-documentation).</description><author>Fabrice Aneche</author><pubDate>Thu, 04 Dec 2008 15:17:43 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2008/12/04/apprendre-coder-pour-liphone-avec-luniversite-de-stanford/</guid></item><item><title>Gentoo bref récap des commandes de gestion de paquets</title><link>https://blog.nobugware.com/post/2008/12/03/gentoo-bref-recap-des-commandes-de-gestion-de-paquets/</link><description>Avant toute chose installer l&amp;rsquo;outil gentoolkit
emerge -av gentoolkit
Ces nouvelles commandes vont vous permettre de:
A quel port appartient un binaire:
equery belongs cjpeg [ Searching for file(s) cjpeg in *... ] media-libs/jpeg-6b-r8 (/usr/bin/cjpeg) Quels sont les dependances d&amp;rsquo;un port:
equery depends gd [ Searching for packages depending on gd... ] dev-lang/php-5.2.6-r7 (gd-external? media-libs/gd) Quels sont les fichiers installes par un package:
equery files less [ Searching for packages matching less.</description><author>Fabrice Aneche</author><pubDate>Wed, 03 Dec 2008 16:32:54 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2008/12/03/gentoo-bref-recap-des-commandes-de-gestion-de-paquets/</guid></item><item><title>Probleme d'affichage avec man</title><link>https://blog.nobugware.com/post/2008/12/03/probleme-daffichage-avec-man/</link><description>Parfois sous linux, souvent sur gentoo les man affichent des caracteres comme ceux ci:
LESS(1) LESS(1)
ESC[1mNAMEESC[0m
less - opposite of more
ESC[1mSYNOPSISESC[0m
ESC[1mless -?ESC[0m
ESC[1mless &amp;ndash;helpESC[0m
La solution la plus simple consiste a changer la variable PAGER de votre environnement:
export PAGER=&amp;quot;less -r&amp;quot;</description><author>Fabrice Aneche</author><pubDate>Wed, 03 Dec 2008 16:25:54 GMT</pubDate><guid isPermaLink="true">https://blog.nobugware.com/post/2008/12/03/probleme-daffichage-avec-man/</guid></item><item><title>Gouache, and a new system for conquering the world</title><link>https://johnj.com/posts/gouache-and-a-new-system/</link><description>&lt;p&gt;





&lt;a href="https://johnj.com/gouache-redux.png"&gt;&lt;img class="resize" src="https://johnj.com/gouache-redux_hu_65eb4be3e6e0498a.png" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
Here’s my new system for conquering the world. It will solve all my
problems, at least the artistic ones.&lt;/p&gt;
&lt;p&gt;
Ingredients:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sketchbook&lt;/li&gt;
&lt;li&gt;pencils of various hardness/thickness/sharpness&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;white gouache paint&lt;/strong&gt;, water and brushes&lt;/li&gt;
&lt;li&gt;Uni-ball micro pen&lt;/li&gt;
&lt;li&gt;Mitsubishi 0.28 micro pen&lt;/li&gt;
&lt;li&gt;2-3 &lt;a href="http://gurneyjourney.blogspot.com/2008/06/water-soluble-pencil.html"&gt;Kuretake brush pens&lt;/a&gt; filled with black ink, and diluted ink&lt;/li&gt;
&lt;li&gt;Kneadable erasers&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dickblick.com/zz215/54/"&gt;Helix battery-powered electric eraser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Presto correction pen&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dickblick.com/zz103/16/"&gt;My standard sketchbook&lt;/a&gt; (I go through several of these a year).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The system is simple. With this extremely portable set of tools I can
capture and &lt;em&gt;eliminate&lt;/em&gt; ideas freely and quickly and iterate until I
have a drawing that is worth making a painting of (or at least not
want to rip out of the sketchbook and toss into the fireplace).&lt;/p&gt;
&lt;p&gt;
In the past, what was missing was the 'iteration’ part, especially
while working in ink. Although I sometimes lay in material in pencil
before going to ink, I find that I 'think better’ in ink much of the
time… also, pencil drawings tend to get muddy if erased too much.&lt;/p&gt;
&lt;p&gt;
The gouache solves that by allowing you to quickly obliterate a part
of the drawing. And, unlike acrylic or white-out types of liquid, it
is easy to erase and takes graphite and brushed ink nicely.&lt;/p&gt;
&lt;p&gt;
I guess I’ve steered clear of gouache and watercolor because I like
the rich, layered textures of oil and acrylic. But I know that comic
book inkers use gouache frequently, and I’ve had fun playing with it
today.&lt;/p&gt;
&lt;p&gt;
Yesterday, at the &lt;a href="http://chicagohistory.org/"&gt;Chicago History Museum&lt;/a&gt;, I saw an aerial rendering of
the 1933 World’s Fair, likely done completely in gouache. Perhaps
72“x30”, it was my favorite thing out of few thousand artifacts there
— utterly photographic from far away, delightfully graphic when viewed
close up.&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_20161217_0002sm.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_20161217_0002sm_hu_ebcde5751e707c86.jpg" style="width: 400px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Recent drawing: gouache, ink and graphite.
&lt;/figcaption&gt;
&lt;/figure&gt;</description><author>John Jacobsen</author><pubDate>Sun, 30 Nov 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/gouache-and-a-new-system/</guid></item><item><title>OSCommerce: A Lesson in Unmaintainable Code?</title><link>https://james-carr.org/posts/oscommerce/</link><description>I’ll let you in on a dirty secret: my first paid programming task was to make custom modifications to an oscommerce shopping cart. I cut my teeth on PHP that weekend and learned through trial by fire how much good, clean code (with no global variables!) matters, and how much it really SUCKS when everything is in the global scope. I always died a little inside each time I had to make a modification… I once started refactoring the code on the side but gave up after a month.</description><author>James Carr</author><pubDate>Sun, 30 Nov 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://james-carr.org/posts/oscommerce/</guid></item><item><title>When work just feels right</title><link>https://caiustheory.com/when-work-just-feels-right/</link><description>&lt;p&gt;Much like &lt;a href="http://www.3hv.co.uk/" title="3hv"&gt;Rahoul&amp;rsquo;s&lt;/a&gt; post on &lt;a href="http://www.3hv.co.uk/blog/2008/10/16/working-for-brightbox/" title="Working for Brightbox"&gt;knowing you&amp;rsquo;re on the right path&lt;/a&gt;, I had that moment this morning whilst we were discussing a future feature for our control panel.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;john&lt;/strong&gt;: will I be able to superpoke our customers?&lt;br /&gt;
&lt;strong&gt;john&lt;/strong&gt;: is that in the spec?&lt;br /&gt;
&lt;strong&gt;Jeremy&lt;/strong&gt;: &amp;ldquo;John made server10 a zombie&amp;rdquo;&lt;br /&gt;
&lt;strong&gt;Caius&lt;/strong&gt;: &amp;ldquo;server10 zombified server9&amp;rdquo;&lt;br /&gt;
&lt;strong&gt;Jeremy&lt;/strong&gt;: &amp;ldquo;David has poked server19 19234 times&amp;rdquo;&lt;br /&gt;
&lt;strong&gt;john&lt;/strong&gt;: server16 messaged David &amp;ldquo;My disk is filling up and I have files I need to put somewhere, please help!&amp;rdquo;&lt;br /&gt;
&lt;strong&gt;Caius&lt;/strong&gt;: &amp;ldquo;Rahoul ended his friendship with server15&amp;rdquo;&lt;br /&gt;
&lt;strong&gt;David&lt;/strong&gt;: &amp;ldquo;server02 is now married to server05&amp;rdquo;&lt;br /&gt;
&lt;strong&gt;Rahoul&lt;/strong&gt;: server10 has sent you 12 videos of a fat man eating a cake&lt;br /&gt;
&lt;strong&gt;David&lt;/strong&gt;: server11 joined the group &amp;ldquo;KVM ftw&amp;rdquo;&lt;br /&gt;
&lt;strong&gt;Caius&lt;/strong&gt;: &amp;ldquo;server16 threw a sheep at server15&amp;rdquo;&lt;br /&gt;
&lt;strong&gt;john&lt;/strong&gt;: server03 joined the group &amp;ldquo;Centos sucks!&amp;rdquo;&lt;br /&gt;
&lt;strong&gt;Caius&lt;/strong&gt;: &amp;ldquo;server15 sent an emergency broadcast: physical movement detected&amp;rdquo;&lt;br /&gt;
&lt;strong&gt;john&lt;/strong&gt;: storage03 has logged off&lt;br /&gt;
&lt;strong&gt;Caius&lt;/strong&gt;: &amp;ldquo;x13 flew to the moon 0 times&amp;rdquo;&lt;br /&gt;
&lt;strong&gt;john&lt;/strong&gt;: disk5 in storage02 is now a zombie&lt;br /&gt;
&lt;strong&gt;Jeremy&lt;/strong&gt;: disk4 in storage02 is now a zombie&lt;br /&gt;
&lt;strong&gt;Jeremy&lt;/strong&gt;: disk3 in storage02 is now a zombie&lt;br /&gt;
&lt;strong&gt;Jeremy&lt;/strong&gt;: disk2 in storage02 is now a zombie&lt;br /&gt;
&lt;strong&gt;john&lt;/strong&gt;: storage02 was sold on ebay by Jeremy&lt;br /&gt;
&lt;strong&gt;Caius&lt;/strong&gt;: &amp;ldquo;john was sold on brightbox marketplace by storage5&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;(In case you don&amp;rsquo;t know, I work for &lt;a href="http://www.brightbox.co.uk/"&gt;Brightbox&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Fri, 21 Nov 2008 13:51:08 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/when-work-just-feels-right/</guid></item><item><title>Solved: Jetty "null127.0.0.1" error</title><link>https://www.databasesandlife.com/jetty-null127001-error/</link><description>&lt;p&gt;I have just spent an hour debugging the following problem. Suddenly my Jetty Java web server didn&amp;rsquo;t work any more. Starting it claimed:&lt;/p&gt;
&lt;pre&gt;Starting Jetty: OK
&lt;/pre&gt;
&lt;p&gt;Yet connecting to the port (telnet localhost 8080) showed that the port was not open. Looking in the logfile (/var/log/jetty6) showed the following error:&lt;/p&gt;
&lt;pre&gt;2008-11-20 12:08:47.477::WARN:
  failed SelectChannelConnector@null127.0.0.1:8080
...
Caused by: java.nio.channels.UnresolvedAddressException
&lt;/pre&gt;
&lt;p&gt;That meant that the web server was unable to open the socket on port 8080.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 20 Nov 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/jetty-null127001-error/</guid></item><item><title>Ingeniero informático, to be or not to be?</title><link>https://danielpecos.com/2008/11/11/ingeniero-informatico-to-be-or-not-to-be/</link><description>&lt;p&gt;Desde hace un par de semanas está circulando una &lt;a href="http://www.huelgainformatica.es/" target="_blank"&gt;convocatoria de huelga&lt;/a&gt; para los ingenieros informáticos. Según comentan en la web, esta huelga se debe a la exclusión de las titulaciones de Informática de las propuestas de en las que se proponen los títulos habilitados para ejercer distintas profesiones. Concretamente se atribuyen a la Ingeniería en Telecomunicaciones muchas (por no decir prácticamente todas) las funciones que ejerce un Ingeniero Informático. Según comentan en dicha web, el Ministerio de Educación justifica esta decisión argumentando que:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“La informática se trata de una materia transversal, por lo que no puede concentrarse en una titulación concreta”&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;La cuestión es que se está levantando mucho revuelo (en parte con razón) y está ciruclando mucha rumorología que hace poco bien. Como bien explica Enrique Barreiro (profesor de Ingeniería Informática en la Universidad de Vigo) en &lt;a href="http://enriquebarreiro.blogspot.com/2008/11/qu-pasa-con-la-ingeniera-informtica.html" target="_blank"&gt;esta web&lt;/a&gt;, hay dos problemas que se están mezclando en toda esta rumorología:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El diseño de los nuevos títulos adaptados al Espacio Europeo de Educación Superior, y&lt;/li&gt;
&lt;li&gt;La regulación de la profesión (que se nos asignen las atribuciones que ejerzamos).&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="text-align: center;"&gt;
  &lt;em&gt;(En &lt;a href="https://danielpecos.com/assets/2008/11/comic_huelga.png"&gt;esta imagen&lt;/a&gt; tenéis un resumen light de lo que comentan)&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;Dos problemas diferentes pero relacionados, y es que al parecer la adaptación no se ha llevado a cabo para el proceso de Bolonia debido a que la informática no es una profesión regulada. Entonces, ¿por qué no se regula la profesión de informática? Básicamente porque les resulta caro a los empresarios. Y es que ahora mismo el intrusismo laboral de nuestro sector es común, y lo peor, ampliamente aceptado por todos nosotros. ¿Os imagináis a un chaval que se haya leido un libro de arquitectura proyectando edificios? Claro que sí, por poder claro que puede y seguro que hay algún genio que es capaz de hacerlo, pero ¿se lo construirían sin una firma de un arquitecto? Claramente no.&lt;/p&gt;
&lt;p&gt;En informática no es raro encontrar químicos, telecos, matemáticos, físicos, aficionados o cualquier otra cosa. Seguramente sean perfectamente capaces de realizar el trabajo que realizan, gracias a la experiencia adquirida y la formación no homologada que hayan recibido, pero esto sería impensable en otros sectores como Derecho, Industriales o Medicina (por capaz que fueras de desarrollar la tarea).&lt;/p&gt;
&lt;p&gt;En resumen, mi inquietud personal es: &lt;strong&gt;¿Por qué se me considera menos ingeniero que a un industrial?&lt;/strong&gt; La respuesta es sencilla: &lt;strong&gt;por que no nos hacemos valer&lt;/strong&gt;, triste pero cierto. No tenemos conciencia de grupo, somos individualistas por lo que &lt;strong&gt;nuestro poder sindical es nulo&lt;/strong&gt;. Además, por lo mismo, no tenemos un Colegio Oficial que defienda la profesión, al contrario de como ocurre con otras profesiones.&lt;/p&gt;
&lt;p&gt;En fin como buen informático no me queda otra que la resignación (o hablando claro, bajarme los pantalones y que me hagan lo que quieran que yo seguiré tragando lo que me toque)… Triste pero como no lo hagas, a la puta calle que seguro que hay otro informático detrás de ti (aunque tampoco es necesario que sea informático) que por menos dinero que lo que tu pides, tiene los pantalones más abajo.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Tue, 11 Nov 2008 13:13:46 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2008/11/11/ingeniero-informatico-to-be-or-not-to-be/</guid></item><item><title>Adding a remote to existing git repo</title><link>https://caiustheory.com/adding-a-remote-to-existing-git-repo/</link><description>&lt;p&gt;Usually for me this happens when I have an existing project and I setup a &lt;a href="http://github.com/"&gt;github&lt;/a&gt; repo for it. As part of the setup for the github project, it gives you the commands to run to add the github repo as a remote to my local git repo.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd existing_git_repo
git remote add origin git@github.com:caius/foo.git
git push origin master
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The problem then is you&amp;rsquo;ve added the remote account, but the local master branch isn&amp;rsquo;t tracking the remote master branch, so when you try and just &lt;code&gt;git pull&lt;/code&gt; it will fail with a message telling you to set the remote refs up.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either. Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull &amp;lt;repository&amp;gt; &amp;lt;refspec&amp;gt;').
See git-pull(1) for details on the refspec.
If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:
branch.master.remote = &amp;lt;nickname&amp;gt;
branch.master.merge = &amp;lt;remote-ref&amp;gt;
remote.&amp;lt;nickname&amp;gt;.url = &amp;lt;url&amp;gt;
remote.&amp;lt;nickname&amp;gt;.fetch = &amp;lt;refspec&amp;gt;
See git-config(1) for details.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The answer is to do what it says funnily enough, and add the remote refs tracking to the config file. The easiest way I&amp;rsquo;ve found of doing this is to edit &lt;code&gt;.git/config&lt;/code&gt; and add the following at the bottom of it.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[branch "master"]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;remote&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;origin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; merge = refs/heads/master&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Remember to change the branch or remote names if you need to.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;ve added that to the config you can run &lt;code&gt;git pull&lt;/code&gt; on the master branch and it&amp;rsquo;ll do the usual automagical thing and pull the remote master branch changes into the local one!&lt;/p&gt;
&lt;h4 id="updated-2008-11-09"&gt;Updated 2008-11-09&lt;/h4&gt;
&lt;p&gt;See CiarÃƒÂ¡n&amp;rsquo;s comment below for an all-inclusive command to do the above.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sun, 09 Nov 2008 20:32:55 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/adding-a-remote-to-existing-git-repo/</guid></item><item><title>Removing non-existent source from rubygems</title><link>https://caiustheory.com/removing-non-existant-source-from-rubygems/</link><description>&lt;p&gt;I just came to move some ruby scripts onto my mac mini, and to do so I needed to install a couple of gems. Now I realised I hadn&amp;rsquo;t installed or updated rubygems on the machine for a while, so I figured it was best to update &lt;code&gt;gem&lt;/code&gt; before installing the gems I wanted. Easier said than done.&lt;/p&gt;
&lt;p&gt;At some point in the past I had added &lt;code&gt;http://gems.datamapper.org&lt;/code&gt; as a source to rubygems. Since then the datamapper project has discontinued using this gem source to serve up gems, so I was getting the following output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mm:daemons caius$ sudo gem update --system
Updating installed gems
Bulk updating Gem source index for: http://gems.rubyforge.org/
ERROR: While executing gem ... (Gem::RemoteSourceException)
HTTP Response 404 fetching http://gems.datamapper.org/yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Eeek! I can&amp;rsquo;t update because the source no longer exists. So I figured I&amp;rsquo;d remove the source before updating, that should work right? Wrong. It updates the sources before removing the source from the config it would appear.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mm:daemons caius$ sudo gem sources
** CURRENT SOURCES ***
http://gems.rubyforge.org
http://gems.datamapper.org
mm:daemons caius$ sudo gem sources -r http://gems.datamapper.org
Bulk updating Gem source index for: http://gems.rubyforge.org/
ERROR: While executing gem ... (Gem::RemoteSourceException)
HTTP Response 404 fetching http://gems.datamapper.org/yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Oh balls. So how do I remove the source without updating it first. I need to update it to remove it, but to remove it I need to update from it. Gotta love catch 22s!&lt;/p&gt;
&lt;p&gt;I remembered that &lt;code&gt;gem install&lt;/code&gt; has an option not to update sources, &lt;code&gt;--no-update-sources&lt;/code&gt;. So I figured thats gotta work when removing a source as well, but it doesn&amp;rsquo;t.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mm:daemons caius$ sudo gem sources -r http://gems.datamapper.org --no-update-sources
ERROR: While executing gem ... (OptionParser::InvalidOption)
invalid option: --no-update-sources
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Oh crap. Now what do I do? Take my usual tactic and google for a hint of course! I&amp;rsquo;d considered trying to find where the gem config was and remove the source by hand, but I figured that wouldn&amp;rsquo;t be that simple. After hitting a couple of sites that weren&amp;rsquo;t relevant I ended up &lt;a href="http://jaigouk.blogspot.com/2008/07/404-fetching-httpgemsdatamapperorgyaml.html"&gt;on the edge of complexity&lt;/a&gt; where he mentions the command &lt;code&gt;nano ~/.gemrc&lt;/code&gt;. Which made me wonder if that file contains the sources.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mm:daemons caius$ cat ~/.gemrc
---
:update_sources: true
:verbose: true
:bulk_threshold: 1000
:sources:
- http://gems.rubyforge.org
- http://gems.datamapper.org
:backtrace: false
:benchmark: false
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;All I needed to do was remove the &lt;code&gt;- http://gems.datamapper.org&lt;/code&gt; line and &lt;em&gt;poof&lt;/em&gt;, &lt;code&gt;gem&lt;/code&gt; was working again. One quick &lt;code&gt;gem update --system&lt;/code&gt; later and I was upgraded from gem 1.1.1 to 1.3.1 and installing the gems I needed.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Fri, 07 Nov 2008 08:08:28 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/removing-non-existant-source-from-rubygems/</guid></item><item><title>Setting up git with rails apps</title><link>https://caiustheory.com/setting-up-git-with-rails-apps/</link><description>&lt;p&gt;When I create a new rails app, I&amp;rsquo;m constantly going back to another project and stealing the &lt;code&gt;.gitignore&lt;/code&gt; file from it to make sure that git doesn&amp;rsquo;t know about certain files rails either updates frequently, or stores machine-specific data in. The latter is generally just &lt;code&gt;config/database.yml&lt;/code&gt;, because I develop alongside my colleagues at &lt;a href="http://brightbox.co.uk/" title="Brightbox - Serious Rails Hosting"&gt;Brightbox&lt;/a&gt; and we deploy via &lt;a href="http://www.capify.org/"&gt;capistrano&lt;/a&gt;, we always put the &lt;code&gt;database.yml&lt;/code&gt; file in the shared directory on the server, so we each have our own version with our local credentials in it locally. And thus we don&amp;rsquo;t want it to be tracked by git.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what I&amp;rsquo;ve collated from various sources over the few weeks I&amp;rsquo;ve been using git + rails everyday.&lt;/p&gt;
&lt;h4 id="gitignore"&gt;.gitignore&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;config/database.yml
log/*.log
tmp/*
# OS X only
.DS_Store
**/.DS_Store
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then to make sure &lt;code&gt;log/&lt;/code&gt; and &lt;code&gt;tmp/&lt;/code&gt; are tracked, convention is to add a blank &lt;code&gt;.gitkeep&lt;/code&gt; file in them.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;touch log/.gitkeep
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;touch tmp/.gitkeep
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><author>Caius Theory</author><pubDate>Thu, 06 Nov 2008 15:03:02 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/setting-up-git-with-rails-apps/</guid></item><item><title>Takeaways for a startup</title><link>/2008/11/04/Takeaways-for-a-startup/</link><description>&lt;p&gt;I&amp;rsquo;ve learned a great deal since being out in the valley, first, is the confirmation that I do love the atmosphere. Second that I really miss the fall, but more importantly I&amp;rsquo;ve learned a lot that I feel is useful in a startup environment. The startup environment and business model is a very unique one, especially in recent years. It seems to not require a business model to get someone just to give you $10 million and hope you come out with one at some point. And in some cases it works, I mean it did for google, but well the failure stories are a lot more abudant than the success ones.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a quick run down of how I think one can build a successful startup in any economy, and why I feel our current state is prime for someone following these steps.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Have a business model. Yeah, it&amp;rsquo;s less glamorous that a facebook that has millions of people log on to it each hour. Take for example the guys at 37 signals, they&amp;rsquo;re probably happy to get a million uniques in a month, or perhaps even a year. But per employee, per their cost, their revenues are at least 10x if not 100x of facebook&amp;rsquo;s. And they most likely see that in revenue per employee as well. Why is this the case? Simple put, they have a business model. They have some product they build and people want it, not want it in the sense that they will spend hours of time aimlessly using it if its free and convenient. It accomplishes some actual goal, and saves people time and makes their lives easier. Oh and something I&amp;rsquo;ve probably said too many times on here, but ad&amp;rsquo;s isn&amp;rsquo;t a business model, unless your specifically an ad company.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get competent employees, I want to even take this a step further and say to get employees that believe in the technology but also in the business. Its one thing when your at a large company to have someone that&amp;rsquo;s extremely specialized. But at a startup everyone wears a variety of hats. Your secretary could land a big lead on a sale, your intern developer could come up with your future marketing slogan, and because of this everyone you bring on board needs to be fully on board with every aspect of your business. If you&amp;rsquo;re growing slower than you hoped it&amp;rsquo;s fine, and worth it to be short rather than over inflated.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Part of the reason you&amp;rsquo;d rather be short than inflated is you don&amp;rsquo;t want to take on capital. To quote someone else I&amp;rsquo;ve recently come into contact with, &amp;lsquo;you want to get off the tit as fast as possible&amp;rsquo;. To give a little more explanation, most startups take sizable investments from VC&amp;rsquo;s or other parties to get going. The problem here is that you then have to answer to them, if you&amp;rsquo;re the one with the idea, with the vision, why would you want to give up any control of that. And the fact is you shouldn&amp;rsquo;t, going back to point 1 and 2, if you have the business model it shouldn&amp;rsquo;t be long before you see revenue, and if all your employees believe in the company, they wont expect a high cushy salary, they&amp;rsquo;ll take ownership in the company as part of their compensation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Keep your employees happy, the easiest way to do this is pizza and beer. It&amp;rsquo;s simple, but works. If you have happy employees enjoying what they do they&amp;rsquo;ll work harder and longer. The smaller you are the more poisonous it is to have employees that don&amp;rsquo;t fit in and embrace your culture. Sure diversity can be a good thing, and you do need some balance of it. But more than that you don&amp;rsquo;t want to ruin the atmosphere and comraderier that comes along with a startup. In addition to keeping your employees happy those small things help, pizza and beer for 20 to get an extra hour of work and the intangibles of helping build relationships that allow them to work better is far cheaper than paying them extra dollars to work late.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don&amp;rsquo;t overspend, this may seem in contrast to 4, and often times poeple go with one extreme or the other. Pizza and beer makes sense, Lobster lunches do not, I don&amp;rsquo;t care if you are google, they still don&amp;rsquo;t make sense. If you are doing extremely well and want to give back to employees give it with cash, they&amp;rsquo;ll appreciate it more. Bsimilar search for John McCain shows a normal pro-McCainut order in lunches every day and pool tables are no necessary expenses.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If there&amp;rsquo;s enough response I&amp;rsquo;ll follow up with some of the more tangible ways of making this happen, but for now, enjoy these big picture take aways.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Wed, 05 Nov 2008 05:19:30 GMT</pubDate><guid isPermaLink="true">/2008/11/04/Takeaways-for-a-startup/</guid></item><item><title>Spanning Sync</title><link>https://caiustheory.com/spanning-sync/</link><description>&lt;p&gt;So for &lt;a href="http://www.brightbox.co.uk" title="Brightbox - Serious rails hosting"&gt;work&lt;/a&gt; I have to subscribe to a shared google calendar the company uses. Annoyingly this can&amp;rsquo;t be through my Google Apps account though, it has to be through my normal google account.&lt;/p&gt;
&lt;p&gt;Also annoying is the fact google doesn&amp;rsquo;t let me subscribe to my shared calendars without making them 100% public. Which means the shared private calendar work uses would have to be a &lt;em&gt;public&lt;/em&gt; shared calendar, which is obviously not going to happen. (Can&amp;rsquo;t have everyone knowing when the secret drinking parties are!)&lt;/p&gt;
&lt;p&gt;Thankfully, there is already a solution out there to this problem, and it comes in the form of a Preference Pane called &lt;a href="http://spanningsync.com/" title="Spanning Sync"&gt;SpanningSync&lt;/a&gt; that syncs iCal to Google Calendar. All you need to do is install the prefpane and enter your google email/password (which is then safely secured in your keychain I believe.)&lt;/p&gt;
&lt;p&gt;What it does is stick an icon in the menubar, and then at a pre-defined (and customisable) interval, sync any new changes between the local iCal calendar and the remote shared calendar in your google acccount.&lt;/p&gt;
&lt;p&gt;Spanning Sync is only $25 to register for the year, but you can save yourself $5 by entering &lt;strong&gt;6EMQAC&lt;/strong&gt; as the spanning sync coupon code, or &lt;a href="http://spanningsync.com/?r=6EMQAC"&gt;clicking here&lt;/a&gt;&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Mon, 03 Nov 2008 13:40:04 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/spanning-sync/</guid></item><item><title>All the bubbles haven't burst yet</title><link>/2008/11/03/All-the-bubbles-havent-burst-yet/</link><description>&lt;p&gt;As I watch the news and posts roll in each day with new layoffs in the valley, ranging from large corporations such as HP and EA, down to the small guys such as seesmic, imeem, searchme, and zillow to name only a few, there still seems to be a demand for &lt;!-- raw HTML omitted --&gt;certain job skills&lt;!-- raw HTML omitted --&gt;. While as I look down the list some of these I dont feel are any longer demanded skills, and others will soon be there. In part I want to call attention to facebook first. While everyone and their brother, when launching a website wants to build a facebook app to deliver some of their content on to facebook, the time and effort put into this is no where near the return. The market has become so flooded the penetration you will get is quite trivial. Futhermore cpm&amp;rsquo;s have already plummeted for advertising on facebook, ranging in some cases around .10-.15.&lt;/p&gt;
&lt;p&gt;Meanwhile iphone developers are still rushing to get their idea into the app store. While a decent idea, and I more than support new applications, so that I can use them on my phone, a 10 million person marketplace is still extremely small, especially if you&amp;rsquo;re not a mainstream application. It used to be that one million users on your website was the golden point in social networks when you could really go for significant funding, or you could start talking a selling price. But thats not the case anymore, much less to reach that on the iphone you would have to be somewhere between the top 10 and top 25 elite apps. &lt;/p&gt;
&lt;p&gt;So sure, you might not have that many users that download your app right? But theres ad revenue possibilities. Well that works right now, the iphone is seeing insane cpm&amp;rsquo;s in some cases as high as $50. This is simply not sustainable. While some claim that mobile advertising is the holy grail of ad&amp;rsquo;s, that only works if you can capture user intent, which in contrast isn&amp;rsquo;t so simple. It works for search, because well when I&amp;rsquo;m searching for something that usually captures my intent, not so for when I&amp;rsquo;m using my phone. I strongly suspect that as these new hot markets calm down, companies will do proper analysis of ROI and no longer want many of these niche skills.&lt;/p&gt;
&lt;p&gt;In these cases I think there&amp;rsquo;s going to be able more smaller bubbles bursting and a lot more niche developers searching for something more than developing the occasional website for the store down the street.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Mon, 03 Nov 2008 10:51:54 GMT</pubDate><guid isPermaLink="true">/2008/11/03/All-the-bubbles-havent-burst-yet/</guid></item><item><title>Create a blank rails app including plugins</title><link>https://caiustheory.com/create-a-blank-rails-app-including-plugins/</link><description>&lt;p&gt;When I create a rails app from scratch I like to include certain plugins to help me write the app, such as the &lt;em&gt;Rspec&lt;/em&gt; testing framework instead of the built-in &lt;em&gt;Test::Unit&lt;/em&gt; and &lt;em&gt;jQuery&lt;/em&gt; instead of &lt;em&gt;prototype&lt;/em&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://rspec.info/"&gt;Rspec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://github.com/rahoulb/rspec-rails/wikis"&gt;Rspec-rails&lt;/a&gt; &lt;em&gt;(NB: I use &lt;a href="http://3hv.co.uk"&gt;rahoul&lt;/a&gt;&amp;rsquo;s fork of rspec-rails)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://github.com/aslakhellesoy/cucumber/wikis"&gt;Cucumber&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://github.com/brynary/webrat/wikis"&gt;Webrat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ennerchi.com/projects/jrails"&gt;jRails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://plugins.code.lukeredpath.co.uk/browser/demeters_revenge/trunk"&gt;Demeters Revenge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And here are the commands in the order I run them to create the blank app.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Create the rails app
cd ~/Sites/apps/
rails myapp
cd myapp
# Setup a git repo
git init
# Add all files and make the initial import
git add .
git commit -m &amp;quot;Initial Import&amp;quot;
# Add the plugins as git submodules
git submodule add git://github.com/dchelimsky/rspec.git vendor/plugins/rspec
git submodule add git://github.com/rahoulb/rspec-rails.git vendor/plugins/rspec-rails
git submodule add git://github.com/aslakhellesoy/cucumber.git vendor/plugins/cucumber
git submodule add git://github.com/brynary/webrat.git vendor/plugins/webrat
git submodule add git://github.com/caius/demeters_revenge.git vendor/plugins/demeters_revenge
# Commit the changes
git ci -am &amp;quot;Adding all needed submodules&amp;quot;
# Replace TestUnit with rspec
git rm -r test/
ruby script/generate rspec
# Replace stories with cucumber features
rm -rf stories/
ruby script/generate cucumber
# Add the changes to git
git add .
git ci -m &amp;quot;Committing initial rspec/cucumber files&amp;quot;
# Install jRails, we have to install it using script/plugin
# Remove existing javascript files
git rm public/javascripts/*
mkdir public/javascripts
# Add jrails
ruby script/plugin install http://ennerchi.googlecode.com/svn/trunk/plugins/jrails
git add vendor/plugins/jrails/ public/javascripts
git ci -m &amp;quot;Adding jRails to replace Prototype&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And now you have a blank app waiting for you to write using features for full stack testing, and rspec for testing model and controller code.&lt;/p&gt;
&lt;h4 id="updated-2008-11-04"&gt;Updated 2008-11-04&lt;/h4&gt;
&lt;p&gt;Added demeters revenge and jRails plugins.&lt;/p&gt;
&lt;h4 id="update-2008-11-05"&gt;Update 2008-11-05&lt;/h4&gt;
&lt;p&gt;I&amp;rsquo;ve also blogged the &lt;a href="http://swedishcampground.com/setting-up-git-with-rails-apps"&gt;.gitignore&lt;/a&gt; file I use with rails apps as well. Usually add it into my apps before running &lt;code&gt;git init&lt;/code&gt;&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Mon, 03 Nov 2008 08:48:27 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/create-a-blank-rails-app-including-plugins/</guid></item><item><title>A little oradebug enhancement in Oracle 11g</title><link>https://tanelpoder.com/2008/11/03/little-oradebug-enhancement-in-oracle-11g/</link><description>&lt;p&gt;There’s a command called: ORADEBUG SETORAPNAME in 11g.&lt;/p&gt;
&lt;p&gt;It allows you to attach to a named background process as shown below, so you don’t need to figure out what’s the PID or SPID of the target process.&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; oradebug setorapname &lt;b&gt;dbw0&lt;/b&gt;
Oracle pid: 9, Unix process pid: 5506, image: oracle@linux03 (DBW0)
SQL&amp;gt;
SQL&amp;gt; oradebug setorapname &lt;b&gt;pmon&lt;/b&gt;
Oracle pid: 2, Unix process pid: 5490, image: oracle@linux03 (PMON)
SQL&amp;gt;

&lt;/pre&gt;
&lt;p&gt;Even though you probably don’t want to mess around with background processes in production DBs, in demos and just Oracle research it can help you save couple of seconds every now and then.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 02 Nov 2008 20:47:27 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/11/03/little-oradebug-enhancement-in-oracle-11g/</guid></item><item><title>Advanced Oracle Troubleshooting Guide, Part 9 – Process stack profiling from sqlplus using OStackProf</title><link>https://tanelpoder.com/2008/10/31/advanced-oracle-troubleshooting-guide-part-9-process-stack-profiling-from-sqlplus-using-ostackprof/</link><description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update&lt;/strong&gt;: I wrote a Python-based &lt;a href="https://tanelpoder.com/posts/advanced-oracle-troubleshooting-guide-part-13-ostackprof-for-linux-macosx-clients/"&gt;OStackProf stack trace summarizer&lt;/a&gt; that works on MacOS and Linux/Unix clients too (possibly even on Windows client if you have Python installed).&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have mentioned ORADEBUG SHORT_STACK command in my blog posts before – it’s an easy way to get and see target processes stack backtrace directly in sqlplus. No need to log on to the Unix/Windows server and use OS tools for extracting the stack.&lt;/p&gt;
&lt;p&gt;I have also written few tools which allow you to post-process stack traces taken using OS tools (like pstack) for better readability or performance profiling. For example os_explain and DStackProf – the DTrace stack profiler and function call aggregator.&lt;/p&gt;
&lt;p&gt;Now I will introduce OStackProf which combines the ORADEBUG SHORT_STACK with a client side post-processing script for easy stack profiling directly from SQLPLUS – no need to log on to the server host at all!&lt;/p&gt;
&lt;p&gt;I have demonstrated this script at conferences for couple of months now with a promise to blog about it “soon”, but it’s only now that I finally have a chance to write a blog entry about it (I have couple of hours left on a flight to help a client in London). Sorry to keep you waiting ;-)&lt;/p&gt;
&lt;p&gt;So, this is what you see when you run oradebug short_stack on a process:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; &lt;strong&gt;oradebug setospid 32200&lt;/strong&gt;
Oracle pid: 2, Unix process pid: 32200, image: oracle@linux03 (PMON)
SQL&amp;gt;
SQL&amp;gt; &lt;strong&gt;oradebug short_stack&lt;/strong&gt;
&amp;lt;-ksedsts()+275&amp;lt;-ksdxfstk()+22&amp;lt;-ksdxcb()+1599&amp;lt;-&lt;strong&gt;sspuser()&lt;/strong&gt;+102&amp;lt;-&lt;strong&gt;__kernel_vsyscall()&lt;/strong&gt;+2&amp;lt;-ntevpque()+89&amp;lt;-ntevqone()+34&amp;lt;-nsevwait()+10098&amp;lt;-ksnwait()+72&amp;lt;-ksliwat()+7249&amp;lt;-kslwaitctx()+135&amp;lt;-ksuclnwt()+249&amp;lt;-ksucln()+509&amp;lt;-ksbrdp()+1258&amp;lt;-opirip()+548&amp;lt;-opidrv()+500&amp;lt;-sou2o()+71&amp;lt;-opimai_real()+238&amp;lt;-ssthrdmain()+142&amp;lt;-main()+116&amp;lt;-__libc_start_main()+220&amp;lt;-_start()+33
SQL&amp;gt;

&lt;/pre&gt;
&lt;p&gt;This is a stack trace, the leftmost function is where the execution currently was at the moment of taking the stack backtrace, the one to the right from it is the caller of the left function and so on. All the way to the right you see the “bottom” functions of a stack, like C main() function and also _start() which is Linux OS process loader helper function.&lt;/p&gt;
&lt;p&gt;Note the two bold functions. Oradebug short_stack works the way that whenever it needs to let target process know about a debugger request, it sends a SIGUSR2 signal to it. sspuser() is the signal handler for SIGUSR2 and its task is to see what debug function to call. So, the sspuser() function and anything to the left from it is actually the codepath for processing the oradebug request, so we can ignore that for troubleshooting purposes (this also evidences that oradebug short_stack and dump errorstack as matter of fact do stray Oracle from its normal execution path – OS tools don’t do that, they just suspend the process and read what’s needed from process stack frames and mapped executable symbol sections).&lt;/p&gt;
&lt;p&gt;So, the real “business” function the target was in, was __kernel_vsyscall() which in Linux means the process was doing some sort of syscall. I’m not going further in explaining the interpretation of function names here as I’ve done it in my previous AOT posts (and will continue so in the future).&lt;/p&gt;
&lt;p&gt;I will continue on stack profiling topics. Taking only single stack backtrace can be helpful in cases when the target process is completely stuck, but if you want to diagnose the cause for just bad performance, then you need to take multiple stack backtraces, aggregate them and see into which execution “branch” of the codepath do the most stack samples fall in (as DStackProf does for example). Of course you would do this only after you’ve exhausted the step 1 and 2 in normal Oracle troubleshooting process (1. Look into wait interface data for the session, 2. Look into v$sesstat counters for the session).&lt;/p&gt;
&lt;p&gt;Manually aggregating the stack traces is time consuming, error prone and did I mention boring, so now I finally introduce OStackProf v1.00!&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 31 Oct 2008 03:02:17 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/10/31/advanced-oracle-troubleshooting-guide-part-9-process-stack-profiling-from-sqlplus-using-ostackprof/</guid></item><item><title>Removing BGP from a VRF under 12.2(33)SRC2</title><link>https://rob.sh/post/34/</link><description>&lt;p&gt;I had a bit of a weird problem last night &amp;ndash; when trying to remove BGP from a VRF on a 7600 running 12.2(33)SRC2, I tried:&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
ar01.tn5(config)#router bgp 65302
ar01.tn5(config-router)#no address-family ipv4 vrf SRC2-TEST
ar01.tn5(config-router)#exit
ar01.tn5(config)#exit
&lt;/pre&gt;&lt;br /&gt;
&lt;p&gt;One would expect that this would stop BGP redistributing the VRF routes for the VRF SRC2-TEST. In fact, what happens is that the VRF starts reporting &amp;lsquo;debugging-style&amp;rsquo; messages:&lt;/p&gt;
&lt;pre&gt;
ar01.tn5#sh run vrf SRC2-TEST
Building configuration...

% Topology SRC2-TEST::VPNv4 Unicast::base is currently being deconfigured.
% Topology SRC2-TEST::VPNv4 Unicast::base is currently being deconfigured.
% Topology SRC2-TEST::VPNv4 Unicast::base is currently being deconfigured.
% BGP context has not been initialized properly.
% Topology SRC2-TEST::VPNv4 Unicast::base is currently being deconfigured.
% BGP context not been initialized properly.
% Topology SRC2-TEST::VPNv4 Unicast::base is currently being deconfigured.
% Topology SRC2-TEST::VPNv4 Unicast::base is currently being deconfigured.
Current configuration : 340 bytes
ip vrf SRC2-TEST
 description :c=CORE:x=rjs test for ar01.tn5 issues:
 rd 5413:1020
 export map EXPORT-MAP-SRC2-TEST
 route-target export 5413:1020
 route-target import 5413:1022
!
!
ip route vrf SRC2-TEST 10.0.0.0 255.255.255.0 Null0
!
router bgp 65302
 !
 address-family ipv4 vrf SRC2-TEST
  redistribute static
 exit-address-family
end
&lt;/pre&gt;&lt;br /&gt;
&lt;p&gt;And you then can&amp;rsquo;t get rid of the BGP from the VRF. It turns out the fix for this is to remove the VRF itself &amp;ndash; or, rather than removing the address-family itself, remove the contents of the address family. I&amp;rsquo;m not entirely sure that this is designed behaviour &amp;ndash; and I couldn&amp;rsquo;t seem to find any further results for it. I guess it needs to be put into TAC as another Cisco weird.&lt;/p&gt;</description><author>rob.sh</author><pubDate>Fri, 24 Oct 2008 20:04:59 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/34/</guid></item><item><title>Automatic reconnect from Hibernate to MySQL</title><link>https://www.databasesandlife.com/automatic-reconnect-from-hibernate-to-mysql/</link><description>&lt;p&gt;Yesterday I spent the entire day getting the following amazing state-of-the-art not-ever-done-before feature to work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Executing a SQL statement from my program&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because, as everyone knows, I don&amp;rsquo;t suffer from &lt;a href="https://www.databasesandlife.com/not-invented-here-syndrome/"&gt;NIHS&lt;/a&gt;, I used standard object-relational mapping software &lt;a href="https://www.hibernate.org/" rel="noopener noreferrer" target="_blank"&gt;Hibernate&lt;/a&gt;, with a standard programming language Java, using the standard web-application server Tomcat, and now I am using the standard &amp;ldquo;connection pooling&amp;rdquo; software &lt;a href="https://www.mchange.com/projects/c3p0/index.html" rel="noopener noreferrer" target="_blank"&gt;C3P0&lt;/a&gt; (which I didn&amp;rsquo;t know I needed to execute a SQL statement, see below..)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 24 Oct 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/automatic-reconnect-from-hibernate-to-mysql/</guid></item><item><title>Transportable tablespaces and ROWID uniqueness</title><link>https://tanelpoder.com/2008/10/21/transportable-tablespaces-and-rowid-uniqueness/</link><description>&lt;p&gt;I recently saw a fellow OakTable member mentioning a section in &lt;a href="http://download.oracle.com/docs/cd/B10500_01/server.920/a96521/tspaces.htm#5951"&gt;Oracle documentation&lt;/a&gt; where it’s said that:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“When a database contains tablespaces that have been plugged in (from other databases), the ROWIDs in that database are no longer unique. A ROWID is guaranteed unique only within a table.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It’s a well known fact that the old Oracle7 style restricted rowids (which contained only File#, block# and row#) may not be unique in Oracle8+ databases which can have 1022 datafiles &lt;em&gt;per tablespace&lt;/em&gt; not per database as previously. That’s why the 10-byte extended rowids were introduced, which also included the data object ID of a segment inside the rowid.&lt;/p&gt;
&lt;p&gt;So if you have a global (partitioned) index on a partitioned table, the new extended rowids are used in it. With help of data dictionary cache this allows Oracle to quickly figure out in which tablespace the referenced segment resides and then use old fashioned relative-file#, block# and row# lookup on it.&lt;/p&gt;
&lt;p&gt;Note that with local indexes and non-partitioned tables the rowids stored in indexes are old 6-byte restricted rowids. They have 4 bytes for data block address consisting of 10bits for file# and 22bits for block#. The other 2 bytes specify the row# in block.&lt;/p&gt;
&lt;p&gt;The 10-byte extended rowids used to be unique within a database, until the transportable tablespaces came into play. Why is that – it’s because how transportable tablespaces work.&lt;/p&gt;
&lt;p&gt;The idea behind TTS’es is that one should be able to copy (large) tablespaces around at file level, very fast, without much pre- or post-processing. So when we copy an 1TB TTS around, we don’t want to start scanning through it after plug-in to make ROWIDs in indexes and chained row forward pointers to somehow “make them right”. Thus, when plugging in a TTS, we need to keep all low-level row addressing structures untouched. This means that file#, block# and row# parts in index leaves and chained row pointers need to stay as they are. This means that DBAs (data block addresses in ASSM blocks need to stay as they are).&lt;/p&gt;
&lt;p&gt;Also, as every segment data block holds a data object ID in it (which is also part of extended rowid as I mentioned), we can’t change this either, as otherwise we would need to scan through all tables/indexes in that tablespace again.&lt;/p&gt;
&lt;p&gt;Thus, if all components of extended ROWID of an imported TTS need to stay as they are, there is theoretical and practical chance of ROWID collision within a database (note that I said within a &lt;em&gt;database&lt;/em&gt;, not &lt;em&gt;table&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;A test case for demonstrating this is quite simple:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 21 Oct 2008 04:25:29 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/10/21/transportable-tablespaces-and-rowid-uniqueness/</guid></item><item><title>Keyboards</title><link>https://caiustheory.com/keyboards/</link><description>&lt;p&gt;Back in the day I swapped the keys on my 12&amp;quot; powerbook keyboard around to read &lt;code&gt;macgenius&lt;/code&gt; across the middle row.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/caius/2941719496/"&gt;&lt;img alt="Powerbook Keyboard" src="http://farm4.static.flickr.com/3213/2941719496_caf2a6a813_m.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I unearthed the picture, and figured, why not do it to my apple aluminium keyboard? So I found a &lt;a href="http://skeltoac.com/2007/10/22/apple-keyboard-aluminum-keycap-removal/"&gt;tutorial&lt;/a&gt; from some other guy that&amp;rsquo;d done it, and dug out my penknife.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/caius/2938651260/"&gt;&lt;img alt="External Keyboard" src="http://farm4.static.flickr.com/3243/2938651260_915f42d92d_m.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After that I decided to rearrange the macbook internal keyboard as well. First I googled around to make sure lifting the keys was the same as doing it on the external keyboard (which it appeared to be), then I went ahead and rearranged them as well.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/caius/2940872039/"&gt;&lt;img alt="Internal Keyboard &amp;ndash; Macgenius" src="http://farm4.static.flickr.com/3214/2940872039_164ee672ef_m.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So whilst I was wondering what to do about it, my mother emailed me and suggested using &lt;code&gt;ontherails&lt;/code&gt; instead of &lt;code&gt;macgenius&lt;/code&gt;. So I did, and now the top row reads &lt;code&gt;ontherails&lt;/code&gt; on the macbooks&amp;rsquo; internal keyboard.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/caius/2941726222/"&gt;&lt;img alt="Internal Keyboard &amp;ndash; Ontherails" src="http://farm4.static.flickr.com/3146/2941726222_67b2405a89_m.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All pictures are licenced under &lt;a href="http://creativecommons.org/licenses/by/2.0/deed.en_GB"&gt;Creative Commons Attribution 2.0 Generic licence&lt;/a&gt; and the above pictures, plus some &lt;em&gt;in progress&lt;/em&gt; shots, are available in my &lt;a href="http://www.flickr.com/photos/caius/sets/72157608015895484/"&gt;Keyboard Modifications&lt;/a&gt; flickr set.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Tue, 14 Oct 2008 16:59:01 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/keyboards/</guid></item><item><title>Building the RIPEDB server</title><link>https://rob.sh/post/31/</link><description>&lt;p&gt;It took me a few hours over the course of this week to build the RIPE whois server for some internal projects &amp;ndash; given that there seems to be a very limited amount of documentation for the build process, and threads on mailing lists, I&amp;rsquo;m going to post this here. I hope that it gets picked up by Google.
&lt;br /&gt;&lt;br /&gt;
The first problem that is encountered is that the libtool that is included with the whois server does not support &amp;lsquo;modern&amp;rsquo; tags, such as &amp;ndash;tag=CC. This looks to be because the included libtool is somewhat dated. This can be easily fixed by using the system libtool:
&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Wed, 08 Oct 2008 15:03:52 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/31/</guid></item><item><title>mysqli_affected_rows gotcha</title><link>https://www.databasesandlife.com/mysqli_affected_rows/</link><description>&lt;p&gt;Recently I programmed the following screen in PHP:&lt;/p&gt;
&lt;ul class="tight"&gt;
  &lt;li&gt;
    The user logs in
  &lt;/li&gt;
  &lt;li&gt;
    The user has a subscription
  &lt;/li&gt;
  &lt;li&gt;
    The subscription has a number of states ("terminate", "auto-extend", ..)
  &lt;/li&gt;
  &lt;li&gt;
    There is a screen allowing the user to change this state
  &lt;/li&gt;
  &lt;li&gt;
    The screen is a set of radio buttons – each radio button relates to one state
  &lt;/li&gt;
  &lt;li&gt;
    The user clicks on the radio-button representing the state they wish, clicks "ok", and the new state gets saved to the database
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Not rocket science eh? Well, unbelievably my implementation of the above had a bug. How on earth was that possible?&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 08 Oct 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/mysqli_affected_rows/</guid></item><item><title>War Games shell scripting fun</title><link>https://jasoneckert.github.io/myblog/war-games-shell-scripting-fun/</link><description>&lt;p&gt;&lt;img alt="War Games" src="wargames.png#right" title="War Games" /&gt;&lt;/p&gt;
&lt;p&gt;While my daughter and I sat across from each other in Starbucks drinking coffee and PIN messaging each other in Leetspeak using our BlackBerries (yes, I realize how drastically nerdy this is), the thought occurred to us that a simple shell script could easily be used to simulate the War Operation Plan Response (WOPR) supercomputer from the movie War Games (1983).&lt;/p&gt;
&lt;p&gt;Anyways, we analyzed the frame-by-frame output from the movie and recreated the output on the Sun Enterprise 450 in my classroom running Red Hat Linux.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Mon, 06 Oct 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/war-games-shell-scripting-fun/</guid></item><item><title>Prayer Book for iPhone and iPod Touch</title><link>https://arashpayan.com/blog/2008/10/02/prayer-book-for-iphone-and-ipod-touch/</link><description>My first iPhone app has just been posted to the iTunes app store. It&amp;rsquo;s called Prayer Book and it contains 231 English prayers from the Writings of the Bahá&amp;rsquo;í Faith. They&amp;rsquo;re organized by categories and you can bookmark your favorite prayers for easy access as well. I&amp;rsquo;ll be updating the program over time with new features and prayer translations, and eventually I&amp;rsquo;d like to have all the Writings of the Bahá&amp;rsquo;í Faith in there.</description><author>Arash Payan</author><pubDate>Fri, 03 Oct 2008 09:46:00 GMT</pubDate><guid isPermaLink="true">https://arashpayan.com/blog/2008/10/02/prayer-book-for-iphone-and-ipod-touch/</guid></item><item><title>Site Updates</title><link>https://rob.sh/post/30/</link><description>&lt;p&gt;Not that I am expecting a large number of people to have anything to say about what I post on this site - but I just added a comments system using the Django FreeComment system. The contrib comments module seems to have a load of features - and did just about everything I was hoping of it! There&amp;rsquo;s an &lt;a href="http://code.djangoproject.com/wiki/UsingFreeComment"&gt;excellent tutorial&lt;/a&gt; on the &lt;a href="http://code.djangoproject.com/wiki/"&gt;Django wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;
Feel free to tell me I&amp;rsquo;m posting rubbish at any time :-)&lt;/p&gt;</description><author>rob.sh</author><pubDate>Wed, 01 Oct 2008 22:26:45 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/30/</guid></item><item><title>comphom: A program to compute homology groups</title><link>https://bastian.rieck.me/blog/2008/comphom_a_program_to_compute_homology_groups/</link><description>&lt;p&gt;I released a program that should have been added to this site quite some time ago: &lt;strong&gt;comphom&lt;/strong&gt;. It is a simple demo application that computes homology groups from simplicial triangulations.&lt;/p&gt;
&lt;p&gt;People who have not yet heard anything about topology might not enjoy this as much as I do. Anyway, if you happen to stumble over any triangulation (such as those given by F. Lutz on his &lt;a href="http://www.math.tu-berlin.de/diskregeom/stellar"&gt;Manifold Page&lt;/a&gt;), comphom will compute the homology groups and write them to a file.&lt;/p&gt;
&lt;p&gt;The program is available on &lt;a href="https://github.com/Pseudomanifold/CompHom"&gt;my GitHub page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Let me outline how to use the program (the program package contains a README which is slightly more precise):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compile the program via &lt;code&gt;make&lt;/code&gt;. The Makefile should work for any POSIX-compatible operating system.&lt;/li&gt;
&lt;li&gt;Download a triangulation from the &lt;a href="https://page.math.tu-berlin.de/~lutz/stellar"&gt;Manifold Page&lt;/a&gt; (use the outdated lexicographic format).&lt;/li&gt;
&lt;li&gt;Use the Perl script lex_convert.pl to convert the files into the format comphom understands: &lt;code&gt;perl lex_convert.pl --input &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Start comphom: &lt;code&gt;comphom --input &amp;lt;file&amp;gt;.ct [--output &amp;lt;file&amp;gt;.out]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is also possible to compute homology groups for arbitrary triangulations. Just see the README for more information.&lt;/p&gt;
&lt;p&gt;As always, I am grateful for any feedback about this particular project. Contact details are &lt;a href="https://bastian.rieck.me/about"&gt;available elsewhere on this site&lt;/a&gt; (you can also find contact details in the source code).&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Wed, 01 Oct 2008 19:37:02 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2008/comphom_a_program_to_compute_homology_groups/</guid></item><item><title>IPv6 - It *Doesn't* Just Work.</title><link>https://rob.sh/post/29/</link><description>&lt;p&gt;I was reading &lt;a href="http://blog.nominet.org.uk/tech/2008/09/09/ipv6-it-just-works/"&gt;an entry&lt;/a&gt; posted by Brett Carr on &lt;a href="http://blog.nominet.org.uk/tech/"&gt;Nominet&amp;rsquo;s techblog&lt;/a&gt; today entitled &amp;ldquo;ipv6 It just works&amp;rdquo;. Unfortunately, for IPv6, and for the sentiment behind this message (IPv6 can be run pretty easily!), in my experience, IPv6 - it doesn&amp;rsquo;t just work! &lt;br /&gt;&lt;br /&gt;
It&amp;rsquo;s easy to dismiss the previous sentence, given that many networks aren&amp;rsquo;t designed to run IPv6, and there&amp;rsquo;s kit out there that&amp;rsquo;s just not IPv6-capable yet. When building the AS29636 network, we specified that IPv6-capability was one of the things that would be a requirement of the kit that was going into the new network, not just something that we&amp;rsquo;d like to have. We work to a similar specification at my current employer, - which ensures that we can deploy IPv6 within a pre-agreed timeframe once we have some commercial drive for it (either from customers, or for business continuity reasons). I think that this is the best way for a SP network to be a the moment - there&amp;rsquo;s no revenue in having IPv6 deployed (generally), but there might be lost revenue when a customer comes to your network with IPv6 as a requirement in their RFQ&amp;hellip;&lt;br /&gt;&lt;br /&gt;
Returning to the reason that I  started writing this post - the problems for IPv6 deployment don&amp;rsquo;t just come from the fact that your hardware doesn&amp;rsquo;t necessarily support it, and it isn&amp;rsquo;t just that running IPv6 on your kit might have financial implications for the software licensing that you&amp;rsquo;re going to be deploying (the arbitrary Cisco requirement for advipservices for IPv6 is a completely separate post). There are going to be issues where you don&amp;rsquo;t necessarily expect them - which can be hard to debug, where IPv6 &amp;ldquo;should just work&amp;rdquo;, it doesn&amp;rsquo;t.&lt;br /&gt;&lt;br /&gt;
Without mentioning any specifics of a case that was brought to my attention in the last couple of weeks - a customer was having problems getting IPv6 traffic flowing across a layer 2 ethernet circuit. The expectation of this circuit that you can put ethernet frames onto it (and it doesn&amp;rsquo;t really matter what the ethertype is, just that they&amp;rsquo;re valid ethernet frames) - and they are going to be punted down the link, to whatever you terminate the L2 circuit on. With IPv4, this not working would be a disastrous failure - the product just wouldn&amp;rsquo;t be working. However, this particular circuit was not passing frames that contained IPv6 packets. As it turns out, the carrier&amp;rsquo;s equipment in the path contained a firmware bug that was causing the frames containing IPv6-packets to be dropped - and hence, no neighbour-discovery, and no traffic flow between the two ends of the circuit.&lt;br /&gt;&lt;br /&gt;
This is just one isolated case - but the question is, where else in your network do you have a problem like this one? How much kit that may, right now, be considered something that shouldn&amp;rsquo;t be interfering anywhere above L2, is going to exhibit this type of problem? How much load is this going to cause your NOC? How much time liasing with circuit suppliers, and telcos is going to be spent actually deploying IPv6 on your network? I think these questions are starting to form a basis of why SPs should be startng to roll out IPv6 onto your network &lt;i&gt;now&lt;/i&gt;. The lack of transition plan from IPv4 to IPv6, and the fact that IPv6 hasn&amp;rsquo;t had widespread deployment testing across many platforms and transmission media mean that deploying IPv6 in a rush across your network isn&amp;rsquo;t necessarily going to be as easy as you&amp;rsquo;ve thought.&lt;br /&gt;&lt;br /&gt;
Whilst I applaud the fact that Nominet are ensuring that they&amp;rsquo;re going to be ready to run the UK ccTLD with IPv6 nameservers, and that their infrastructure is ready - I don&amp;rsquo;t think that IPv6 is going to be quite as easy to deploy as Brett found in his blog post.&lt;/p&gt;</description><author>rob.sh</author><pubDate>Tue, 30 Sep 2008 09:13:15 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/29/</guid></item><item><title>GDD MAD 2008… ¡Estuve allí!</title><link>https://danielpecos.com/2008/09/28/gdd-mad-2008-estuve-alli/</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/dpecos/2890140334/"&gt;&lt;img alt="1003" class="alignleft" height="340" src="https://danielpecos.com/assets/2008/09/2890140334_d25df7b543.jpg" style="margin: 10px 30px;" width="227" /&gt;&lt;/a&gt;{.tt-flickr.tt-flickr-Medium}&lt;/p&gt;
&lt;p&gt;Fue un día agotador, pero valió la pena. Mucha gente, mucho nivel (no tanto en los talleres, pero bueno) y muy buen ambiente. No voy a hacer más resumenes acerca del evento (ya he leído unos cuantos en un rato), simplemente recomendar que si tenéis la posibilidad de asistir al GDD MAD 2009 no dejéis pasar la oportunidad.&lt;/p&gt;
&lt;p&gt;Temas principales sobre los que se hablaron:&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Android (tema estrella sin duda)&lt;/li&gt;
&lt;li&gt;Chrome&lt;/li&gt;
&lt;li&gt;AppEngine&lt;/li&gt;
&lt;li&gt;Gears&lt;/li&gt;
&lt;li&gt;Opensocial&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A continuación os dejo un enlace al &lt;a href="http://www.flickr.com/photos/dpecos/sets/72157607516896979/"&gt;álbum en flickr&lt;/a&gt; con las fotos que tomé.&lt;/p&gt;
&lt;p&gt;¡Un saludo!&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Sun, 28 Sep 2008 12:32:01 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2008/09/28/gdd-mad-2008-estuve-alli/</guid></item><item><title>The immensely powerful tool</title><link>http://blog.danieljanus.pl/immensely-powerful-tool/</link><description>&lt;div&gt;&lt;p&gt;A pen and a sheet of paper are simple utilities; but there lies vast and sheer power in them that I was not aware of. Up until now. So what can they be used for that one might possibly not realize?&lt;/p&gt;&lt;p&gt;Short answer: serializing the stream of consciousness.&lt;/p&gt;&lt;p&gt;Yes, it’s simple, and you may laugh at me now. I myself am a little amazed why I haven’t noticed this before. But this answer lends itself to another question: what good is this serialization, and what exactly do I mean by it, anyway? And the answer to &lt;em&gt;that&lt;/em&gt; is a little longer. So here goes.&lt;/p&gt;&lt;p&gt;I’m one of the people who tend to have problems with concentrating when thinking, especially when thinking hard. This is not to say that I am not capable of thinking hard: I am, but doing so requires a level of concentration that is tricky for me to exert for a prolonged period. (Unless, of course, I am in the state of absolute fascination, where this is taken care of subconsciously. But that’s another story.) More often than not, a tough problem requiring a significant amount of work just has to be dealt with. And then things start to distract attention. There is an itch to scratch, thoughts are shreds, each one pertaining to a tiny bit of the problem, but intertwined with hundreds of other bits of other problems, forming a dense, tangled web, hard to navigate over, and jumping fast from one to another, it becomes more and more unclear what’s next.&lt;/p&gt;&lt;p&gt;So what can one do? One way is to grab a writing device and just &lt;em&gt;start writing&lt;/em&gt;. Running text is linear in nature, so you end up traversing the thought graph depth-first and writing down each thought as you traverse its node. And what’s more, translating ideas to written language &lt;em&gt;slows you down&lt;/em&gt;, which is a &lt;a href="http://www.catb.org/jargon/html/G/Good-Thing.html"&gt;Good Thing&lt;/a&gt; because it makes you see your way through the graph more consciously. It might take you longer to walk from point A to point B than to drive there by car, but definitely you will see more of the landscape as you go. Arriving at the final destination, or simply putting down the pen because enough thoughts have been collected and serialized (there’s never really any end of the stream), makes you end up with a half-product: an unsmithed lump of ore out of which you can forge ingots.&lt;/p&gt;&lt;p&gt;But why a pen and paper, as opposed to, say, a text editor? I think any writing utensil would work to some extent, but for me this seems to be the best option, for several reasons. First of all, I can type on the keyboard much faster than I can write legibly by hand, so this further slows down the pace (which is a Good Thing as we have observed already).&lt;/p&gt;&lt;p&gt;Second, there is something magical in handwriting which a text editor will never be able to achieve: it’s hard to describe. But the net effect is a very evident focus on Here and Now, the pen moving across the paper, the sheet filling up with more and more lines of script. This environment is naturally single-tasked: no Alt-Tab to press to switch to another terminal, no blinking icon of an instant-messaging program (unless a phone happens to ring). This causes synergy with the concentration caused by serializing thoughts.&lt;/p&gt;&lt;p&gt;If you have never tried this approach, feel free to do so. Although I cannot guarantee it will work for you, it certainly does work for me.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Tue, 23 Sep 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/immensely-powerful-tool/</guid></item><item><title>Data Mining</title><link>https://boyter.org/2008/09/data-mining/</link><description>&lt;p&gt;So a quick update. I spent 2 hours or so yesterday working on the netflix data mining. I basically just tidied it up and started testing. I was almost finished and was about to post a blog with results, but decided I wasn&amp;rsquo;t happy with the results. It turned out there was a bug but that my code which worked out how related users are wasn&amp;rsquo;t as effective as I thought it would be. See I used the vector space index to calculate how similar users are. The catch being is that it found the users almost 100% similar in almost all cases. I was wondering about this and then realised it was working correctly, and my assumption on how it would work was wrong.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Mon, 22 Sep 2008 03:10:25 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2008/09/data-mining/</guid></item><item><title>Generating Password Protected ZIP Files using PHP</title><link>https://thomashunter.name/posts/2008-09-20-generating-password-protected-zip-files-using-php</link><author>Thomas Hunter II</author><pubDate>Sat, 20 Sep 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2008-09-20-generating-password-protected-zip-files-using-php</guid></item><item><title>Selling my Renault Spider</title><link>https://www.databasesandlife.com/goodbye-spider/</link><description>&lt;p&gt;Today I sold my car to a guy from France.&lt;/p&gt;
&lt;div&gt;

















&lt;div class="fancybox fancybox-single"&gt;
  &lt;a href="https://www.databasesandlife.com/20080603-renault-spider.jpg"&gt;
	&lt;img alt="" src="https://www.databasesandlife.com/20080603-renault-spider.jpg" /&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;He took a plane to Vienna yesterday, this morning we met, he looked at the car, we took the contract to a notary office, we paid in his cash into my bank, then took my number plates to a insurance company who canceled my insurance (even though it was with a different company), and gave us temporary number plates (precondition was the contract had to be notarized).&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 18 Sep 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/goodbye-spider/</guid></item><item><title>Google Chrome UI niceties</title><link>https://www.databasesandlife.com/google-chrome-ui-niceties/</link><description>&lt;p&gt;So everyone in the &amp;ldquo;blogosphere&amp;rdquo; is going on about &lt;a href="http://www.google.com/chrome" rel="noopener noreferrer" target="_blank"&gt;Google Chrome&lt;/a&gt;. From one day to the next, a bunch of personal blogs written by random people I don&amp;rsquo;t know which I for some reason subscribed to all suddenly had 1 new entry – subject &amp;ldquo;I like Chrome&amp;rdquo;. A bit like a few days before when Mozilla released some new feature and exactly the same thing happened. And now if I write about Chrome I am one of them as well&amp;hellip;.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 15 Sep 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/google-chrome-ui-niceties/</guid></item><item><title>Why I'm excited about Di2.</title><link>https://rob.sh/post/28/</link><description>&lt;p&gt;There&amp;rsquo;s a &lt;a href="http://www.wired.com/gadgets/miscellaneous/news/2008/07/shimano"&gt;bunch&lt;/a&gt; of &lt;a href="http://www.cyclingnews.com/tech.php?id=tech/2008/features/shimano_dura-ace_di208"&gt;stuff&lt;/a&gt; online about the Shimano Dura-Ace Di2. And there&amp;rsquo;s a lot of comment online, people saying that they feel electronic-shift is unnecessary, and over-complicated.
&lt;br /&gt;&lt;br /&gt;
I&amp;rsquo;m mostly interested in why &lt;i&gt;I&lt;/i&gt; might want to ride Di2, and I think there&amp;rsquo;s a bunch of reasons that I would want to, despite all the negative comments that are flying around! So, the big thing that I see as an advantage in the system is the fact that it adjusts on a per-shift basis, this is really handy for those of us that really just want to ride our bikes! Sure, I don&amp;rsquo;t mind cleaning, and tuning my bike, but there&amp;rsquo;s some periods when I just want to be riding it, it&amp;rsquo;s what I love, it&amp;rsquo;s why I own the bike - so to me, if I get auto-adjustment that means that every shift that I&amp;rsquo;m doing is accurate, between the times that I either tune my bike up myself, or get it looked over then this sounds great! Cable-stretch is pretty annoying sometimes, and does mean that I end up having some rides where my gears might feel a bit squidgy, or over-tight. This is a problem that could be solved by tuning my bike more often, of course, but really - I just want to ride.
&lt;br /&gt;&lt;br /&gt;
&lt;a href="http://lowtechtimes.com/2008/08/12/bicycle-news-full-electronic-shifting-is-unnecessary-and-expensive/"&gt;Someone commenting on WIRED&lt;/a&gt; has some different thoughts to me - feeling that the battery, and motors are prone to failure - of course they are, everything is. Gear cables snap now already, and derailleurs get worn, and bent. However, I guess with cable systems, I can bend my derailleur back and adjust the tension myself to ride home - the question here is, will Di2 be this flexible? I can get over it if not, because, how often does this really happen (only once, for me)? The battery life of the system shouldn&amp;rsquo;t be difficult to get right - it should last for a while, and I don&amp;rsquo;t mind carrying a spare battery, I carry spare tubes already.
&lt;br /&gt;&lt;br /&gt;
There are limitations, sure - however, there are limitations of everything. But, I quite fancy it. �1600 for a groupset isn&amp;rsquo;t what I&amp;rsquo;m going to be spending just yet - but once we&amp;rsquo;re down a bit to more suitable price, then I&amp;rsquo;d really like to give it a go. Maybe on a &amp;lsquo;09 Orbea Orca - the shape is just bang on:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Mon, 15 Sep 2008 00:03:12 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/28/</guid></item><item><title>Intermedia Writing Systems, revised 3rd edition</title><link>https://mbutler.org/intermedia-writing-systems-revised-3rd-edition/</link><description>Intermedia Writing Systems, revised 3rd edition is a textbook I wrote for a theoretical class at a hypothetical school. It was staple bound and printed as a zine that I distributed to various shops. Here is a beast fable from the book: The Platypus and the Chimaera Once upon a time there was a platypus [&amp;#8230;]</description><author>mbutler</author><pubDate>Sat, 13 Sep 2008 16:38:29 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/intermedia-writing-systems-revised-3rd-edition/</guid></item><item><title>Ads is not a business model</title><link>/2008/09/13/Ads-is-not-a-business-model/</link><description>&lt;p&gt;I recently attended part of the recent Techcrunch 50 conference, and when I wasn&amp;rsquo;t there I was watching much of it online. For probably 80% of the companies when it came time to ask about their business model, they said ads. Then they talked about cause they have all of this great information about the user they can advertise better than they used to. The problem is they&amp;rsquo;re forgetting all about user intent. This is why ads on facebook simply arent working, with some CPM&amp;rsquo;s being as low as .05. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Ads work on search because users are looking for something, and if you place an ad for it they&amp;rsquo;re fine with it, because they didn&amp;rsquo;t want to stay on the search page. When a user goes to facebook they want to stay on facebook, not leave. When a user is in an application they want to stay in the application, as long as the site or application is a destination or resides on a destination it will not make great revenue from traditional ads. Yeah, theres oppportunities for newer creative advertising, but this form of ad&amp;rsquo;s will not provide the same revenue &lt;!-- raw HTML omitted --&gt;yet &lt;!-- raw HTML omitted --&gt;as others. If you&amp;rsquo;re launching a product or site, actually consider how your worth making money, just saying ads in most cases is not a business model.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Sat, 13 Sep 2008 13:10:15 GMT</pubDate><guid isPermaLink="true">/2008/09/13/Ads-is-not-a-business-model/</guid></item><item><title>GnuCash and the Euro currency symbol</title><link>https://bastian.rieck.me/blog/2008/gnucash_and_the_euro_currency_symbol/</link><description>&lt;p&gt;Having used &lt;a href="http://www.gnucash.org"&gt;GnuCash&lt;/a&gt; for a long time, I was quite
startled when the € symbol was not displayed properly anymore (after a &lt;code&gt;make buildworld&lt;/code&gt; odyssey). Instead, all I got was &amp;ldquo;Eu&amp;rdquo;. Ironically, every other
currency seemed to work properly.&lt;/p&gt;
&lt;p&gt;A vicious attack on the currency of many countries? Probably led by a cabal
trying to undermine the world&amp;rsquo;s economics?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Just a glitch in the locale settings: Changing the second line in
&lt;code&gt;/usr/share/locale/de_DE.UTF-8/LC_MONETARY&lt;/code&gt; to &amp;ldquo;€&amp;rdquo; brought the currency back.
Keep in mind that you might have other locale settings; find them out by
entering &lt;code&gt;locale&lt;/code&gt; in your terminal and change the appropriate file.&lt;/p&gt;
&lt;p&gt;Back to managing money. By the way, did you know that Thursdays are really,
really bad? According to GnuCash, these are the days where I tend to spend more
money than usual. Interesting.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Thu, 11 Sep 2008 18:08:20 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2008/gnucash_and_the_euro_currency_symbol/</guid></item><item><title>databases&amp;amp;life awards for NIHS syndrome</title><link>https://www.databasesandlife.com/not-invented-here-syndrome/</link><description>&lt;p&gt;Sometimes I am accused of suffering from the &amp;ldquo;Not Invented Here Syndrome&amp;rdquo;. It has been suggested I would rather program something myself than take an already existing e.g. open source solution to the problem and integrate it with the product being developed.&lt;/p&gt;
&lt;p&gt;I mean that&amp;rsquo;s clearly a blanket statement. The right solution differs from project to project. (But, for sure, when making such a decision, one must not forget about the cost of integrating external software, especially down the line for maintenance, if the number of technologies and languages have increased by the new software&amp;rsquo;s addition, hindering code reuse.)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 11 Sep 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/not-invented-here-syndrome/</guid></item><item><title>UTF-8 and FreeBSD</title><link>https://bastian.rieck.me/blog/2008/utf-8_and_freebsd/</link><description>&lt;p&gt;Unicode is really nice: Less meddling with codepages, less display problems
etc. Here are some notes explaining how to enable this functionality for
FreeBSD.&lt;/p&gt;
&lt;p&gt;On my system, two steps were required. Step one involved changing &lt;code&gt;.login_conf&lt;/code&gt;
(in my home directory). I added the following lines:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;me:\
	:charset=UTF-8:\
	:lang=de_DE.UTF-8:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After logging off and on again, locale settings should work properly. Step two
involved changing &lt;code&gt;.gvimrc&lt;/code&gt; in my home directory because the fonts listed there
had the wrong charset. Instead of &lt;code&gt;ISO8859-15&lt;/code&gt; I used &lt;code&gt;ISO10646-1&lt;/code&gt;. This
convinced vim to work properly, too.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Filenames:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For those of you who do have files with filenames in the &amp;ldquo;old encoding&amp;rdquo; the tool &lt;code&gt;convmv&lt;/code&gt; might prove invaluable. FreeBSD users get it from &lt;code&gt;/usr/ports/converters/convmv&lt;/code&gt; and might want to take a look at the &lt;a href="http://www.j3e.de/linux/convmv/man/"&gt;man page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There is only one drawback: Unfortunately, if you are trying to use the console
(without X running), things might get ugly. Apart from that problem (which can
be fixed by temporarily resetting the input locale), all things &amp;ldquo;just work&amp;rdquo;.
&lt;a href="http://xkcd.com/462"&gt;My, my. Isn&amp;rsquo;t that something?&lt;/a&gt;&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Tue, 09 Sep 2008 17:22:45 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2008/utf-8_and_freebsd/</guid></item><item><title>Learning to let go</title><link>https://benovermyer.com/blog/2008/09/learning-to-let-go/</link><description>&lt;p&gt;Two months later, I'm no longer playing Age of Conan or Star Wars Galaxies. Several months ago, I posted on the RPG.net forum asking for advice on what MMORPG to try. I was bored, and posted a list of the MMORPGs I had played and decided I didn't like. It was very lengthy, being at least two dozen entries long.&lt;/p&gt;
&lt;p&gt;One of the replies I received was something to the effect of “you obviously don't enjoy MMOs, so quit trying and find something else.” At the time, I brushed it off as a snide remark.&lt;/p&gt;
&lt;p&gt;Now, though, after playing World of Warcraft again for the past few weeks, I've come to realize there was some truth in that statement. It wasn't that I don't enjoy MMORPGs, but rather, that I wasn't playing them for the right reasons.&lt;/p&gt;
&lt;p&gt;I was trying MMO after MMO in an attempt to recover the same feeling I had when I first played Star Wars: Galaxies. I erroneously believed that if I could just find an MMO with a good feature set that closely matched SWG's, I would relive those days.&lt;/p&gt;
&lt;p&gt;Now, though, I'm playing WoW and actually enjoying it. Why? Because I'm doing the two things I haven't done since the Old Days of SWG - I'm A) talking and questing with other players because of a shared interest, and B) I'm judging WoW on its own merits, rather than compared to any other game. Specifically, I'm enjoying just questing and not worrying about grinding to maximum level.&lt;/p&gt;
&lt;p&gt;Now, my acquisition of Spore two days ago has eaten significantly into my free time. It's a fantastic game, and everything I'd hoped for when I first learned about it two years ago. Not since Galaxies had I had so much anticipation for a game. However, despite this, it's so different from MMORPGs or FPSes - both intensely multiplayer experiences - that I doubt I'll play it as anything more than an occasional curiosity.&lt;/p&gt;
&lt;p&gt;At the end of the day, it seems that what I really want out of an MMO is to have fun with others. Ironic, that.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Tue, 09 Sep 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/09/learning-to-let-go/</guid></item><item><title>Rollapaluza Best</title><link>https://rob.sh/post/27/</link><description>&lt;p&gt;As mentioned previously, my new Rollapaluza best time. Not really posted for that reason, but mainly due to test out the new IXUS 960IS I have been given!&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;center&gt;&lt;img alt="Rollapaluza - IXUS 960" src="https://cdn.rob.sh/img/rollapaluza-2216.jpg" /&gt;&lt;/center&gt;</description><author>rob.sh</author><pubDate>Mon, 08 Sep 2008 03:00:21 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/27/</guid></item><item><title>VLDB 2008 proceedings, Oracle optimizer plan stability, adaptive cursor sharing and SecureFiles</title><link>https://tanelpoder.com/2008/09/05/vldb-2008-proceedings-oracle-optimizer-plan-stability-adaptive-cursor-sharing-and-securefiles/</link><description>&lt;p&gt;If you’re interested in leading edge database research (as of 2008 :), the VLDB 2008 proceedings are publicly available now.&lt;/p&gt;
&lt;p&gt;Here are direct links to some Oracle-specific ones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.vldb.org/pvldb/1/1454170.pdf" target="_blank"&gt;Oracle SecureFiles System&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vldb.org/pvldb/1/1454175.pdf" target="_blank"&gt;Optimizer Plan Change Management: Improved Stability and Performance in Oracle 11g&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vldb.org/pvldb/1/1454178.pdf" target="_blank"&gt;Closing The Query Processing Loop in Oracle 11g&lt;/a&gt; &lt;em&gt;(this one is about adaptive cursor sharing)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enjoy! :)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 05 Sep 2008 15:11:45 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/09/05/vldb-2008-proceedings-oracle-optimizer-plan-stability-adaptive-cursor-sharing-and-securefiles/</guid></item><item><title>Google did something right . . . . Finally</title><link>/2008/09/04/Google-did-something-right-.-.-.-.-Finally/</link><description>&lt;p&gt;Forget the benchmarks, forget whether its truly faster or slower, forget whether the market share is 30% for non-IE browsers (though is this only for US or internationally). Google Chrome evolution or revolution, whatever you want to call it, it makes me actually want to stay in the browser. I just want plugins, that function as well as the browser alone does. Yeah theres rendering problems, and some oddities, but the browser as a whole is smooth. I actually feel thus far its the best of IE and safari melded together. The only problem I see right now is the lack of plugins, which my guess is will come VERY SOON. Meanwhile firefox when having the plugins I want enabled can be sluggish, if Chrome plugins are of equivilant quality then I can&amp;rsquo;t see how the browser wouldn&amp;rsquo;t be at LEAST as smooth.&lt;/p&gt;
&lt;p&gt;Chrome really is a win for Google, whether they can monetize it or not. It helps them to keep people off the desktop and in the browser. I could go on for hours about bad moves they&amp;rsquo;ve made, such as picasa, but Chrome was actually a good one.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 05 Sep 2008 03:21:56 GMT</pubDate><guid isPermaLink="true">/2008/09/04/Google-did-something-right-.-.-.-.-Finally/</guid></item><item><title>¿Look &amp;amp; Feel? ¿Qué es eso?</title><link>https://danielpecos.com/2008/09/03/look-and-feel-que-es-eso/</link><description>&lt;p style="text-align: center;"&gt;
  &lt;a href="https://danielpecos.com/assets/2008/09/bordesventan_winxp.png"&gt;&lt;img alt="L&amp;amp;F de varias aplicaciones en WinXP" class="alignnone size-full" height="172" src="https://danielpecos.com/assets/2008/09/bordesventan_winxp.png" title="bordesventan_winxp" width="500" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  Éste es el aspecto de varias aplicaciones ejecutándose en Windows XP. Como se puede ver en la imagen últimamente las empresas optan por una diferenciación en cuanto a aspecto de la ventana (Look &amp; Feel), perdiéndose la integración a la que estábamos habituados con el sistema operativo. De hecho, en la captura de pantalla, la única aplicación que mantiene el L&amp;amp;F de Windows XP es el Explorador de Ficheros.
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  Y tú qué opinas acerca de ésto: ¿es bueno? ¿es malo? ¿te la suda?
&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Wed, 03 Sep 2008 11:43:30 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2008/09/03/look-and-feel-que-es-eso/</guid></item><item><title>Google anuncia Chrome</title><link>https://danielpecos.com/2008/09/02/google-anuncia-chrome/</link><description>&lt;p&gt;Tras varios años de rumorología acerca de si Google iba a publicar un navegador web propio o no, finalmente se ha aclarado: su nombre es Chrome. Será un proyecto opensource basado en WebKit de Apple (el motor de renderizado de Safari) y según comentan, incluye un motor Javascript escrito desde cero, con el fin de mejorar el desempeño tanto en tiempo de ejecución como en consumo de memoria, con respecto a los navegadores que actualmente hay en el mercado. Otras características que incorpora son la navegación anónima, un sistema “Speed Dial” como el de Opera o una barra de autocompletado basada en el buscador.&lt;/p&gt;
&lt;p&gt;¿Qué es lo que pretende Google con esto? Según ellos, aportan innovación de cara al usuario, aunque personalmente lo que quieren conseguir es convertir al navegador en un sistema operativo (bueno, a lo mejor es un poco exagerado, pero sí en una fuente completa de aplicaciones), ya que supongo que uno de sus puntos fuertes será el poder ser ejecutado sin barra de herramientas ni menús, al estilo de Prism de Mozilla, consiguiendo que las aplicaciones web tengan un aspecto de aplicación de escritorio. Además, con la inclusión de Gears en Chrome, se ofrece la posibilidad de que las aplicaciones web almacenen datos en el propio navegador, abriendo un gran abanico de posibilidades para la tecnología web.&lt;/p&gt;
&lt;p&gt;Como nota curiosa, comentar que Google ha utilizado su estilo característico en la publicación de Chrome utilizando &lt;a href="http://www.google.com/googlebooks/chrome/"&gt;viñetas de cómic&lt;/a&gt; para ello.&lt;/p&gt;
&lt;p&gt;Habrá que ver cómo afecta esto a los otros grandes navegadores y que implicaciones creará en el desarrollo de aplicaciones web. Renovarse o morir…&lt;/p&gt;
&lt;p&gt;&lt;a href="http://estilohacker.com/foro/dev-null/topic45.html"&gt;Enlace a noticia en EstiloHacker.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;ACTUALIZACIÓN (02/09/2008 @ 23:05):&lt;/span&gt; El &lt;a href="http://www.google.com/chrome"&gt;sitio&lt;/a&gt;{.postlink} ya está disponible… ¡a bajar!&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Tue, 02 Sep 2008 08:49:09 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2008/09/02/google-anuncia-chrome/</guid></item><item><title>MySQL Fulltext Search Ignored Words</title><link>https://thomashunter.name/posts/2008-09-02-mysql-fulltext-search-ignored-words</link><author>Thomas Hunter II</author><pubDate>Tue, 02 Sep 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2008-09-02-mysql-fulltext-search-ignored-words</guid></item><item><title>Oracle hidden costs revealed, Part2 – Using DTrace to find why writes in SYSTEM tablespace are slower than in others</title><link>https://tanelpoder.com/2008/09/02/oracle-hidden-costs-revealed-part2-using-dtrace-to-find-why-writes-in-system-tablespace-are-slower-than-in-others/</link><description>&lt;p&gt;_I have written two posts in one, about a performance issue with writes in system tablespace and introduction of a little DTrace stack sampling script.&lt;/p&gt;
&lt;p&gt;_&lt;/p&gt;
&lt;p&gt;Have you noticed that DML on tables residing in SYSTEM tablespace is slower than tables in other tablespaces?&lt;/p&gt;
&lt;p&gt;Here’s an example, I’ll create two similar tables, one in USERS tablespace, other in SYSTEM, and inset into the first one (Oracle 10.2.0.3 on Solaris x64):&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; create table &lt;strong&gt;t1&lt;/strong&gt;(a int) tablespace &lt;strong&gt;USERS&lt;/strong&gt;;

Table created.

SQL&amp;gt; create table &lt;strong&gt;t2&lt;/strong&gt;(a int) tablespace &lt;strong&gt;SYSTEM&lt;/strong&gt;;

Table created.

SQL&amp;gt; exec for i in 1..100000 loop insert into &lt;strong&gt;t1&lt;/strong&gt; values(i); end loop;

PL/SQL procedure successfully completed.

Elapsed: 00:00:&lt;strong&gt;03.09&lt;/strong&gt;

&lt;/pre&gt;
&lt;p&gt;Insert into table in USERS tablespace took 3 seconds.&lt;/p&gt;
&lt;p&gt;Ok, let’s commit and flush dirty buffers that they wouldn’t get on the way of next insert.&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; commit;

Commit complete.

Elapsed: 00:00:00.02

SQL&amp;gt; alter system checkpoint; &lt;em&gt;-- checkpointing to flush dirty buffers from previous inserts&lt;/em&gt;

System altered.

Elapsed: 00:00:01.34
SQL&amp;gt;

&lt;/pre&gt;
&lt;p&gt;And now to the insert into the SYSTEM tablespace table:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; exec for i in 1..100000 loop insert into &lt;strong&gt;t2&lt;/strong&gt; values(i); end loop;

PL/SQL procedure successfully completed.

Elapsed: 00:00:&lt;strong&gt;08.98&lt;/strong&gt;
SQL&amp;gt;

&lt;/pre&gt;
&lt;p&gt;What?! The same insert took 3 times longer, almost 9 seconds?&lt;/p&gt;
&lt;p&gt;Fine! Let’s troubleshoot it!&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 01 Sep 2008 20:16:50 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/09/02/oracle-hidden-costs-revealed-part2-using-dtrace-to-find-why-writes-in-system-tablespace-are-slower-than-in-others/</guid></item><item><title>Practical API Design</title><link>/post/practical-api-design/</link><description>&lt;p&gt;I wrote about &lt;a href="../on-api-design-guidelines"&gt;API design guidelines&lt;/a&gt; before, collecting links, resources, papers and hoping someone would write a book on the subject.&lt;/p&gt;
&lt;p&gt;The wait is over! Jaroslav Toulash published a book on &lt;a href="http://www.amazon.com/gp/product/1430209739?ie=UTF8&amp;amp;tag=neuroning-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1430209739"&gt;Practical API Design&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Take a look at the book's &lt;a href="http://apidesign.org"&gt;accompanying website&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p&gt;I'm waiting for my copy.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Sun, 31 Aug 2008 21:14:00 GMT</pubDate><guid isPermaLink="true">/post/practical-api-design/</guid></item><item><title>Being an employee</title><link>/2008/08/29/Being-an-employee/</link><description>&lt;p&gt;As I currently work at a startup I have a small stake in the company. When talking with one friend of something I have been working with someone with on the side, the question came up over if this was a conflict of interest. I was actually quite shocked to hear the question at first, not only did I expect them to do likewise, as I know many that do. The full on conflict of interest statement just shocked me. Being at a startup it does make it slightly more of an interesting statement, but I received similar comments sometimes at my former Fortune 100 employer. I&amp;rsquo;ll start with that place and then migrate to the startup environment.&lt;/p&gt;
&lt;p&gt;I could not disagree more being an employee at some place, and working on additional things being a conflict of interest. In short you are an employee, not property, your best interests lie with yourself. Sure its great if you believe in the company and what they do, but in our generation you are not attached for life to the company you work for. The company has claim on what you do between 8-5 with regards to work, sure if you do things that may damange a company brand or your effectiveness to do business its fair for them not to retain you, but simply doing additional work in your spare time? Hardly!&lt;/p&gt;
&lt;p&gt;Now as we move on to the startup atmosphere, where it&amp;rsquo;s pretty standard that when becoming employed you receive some amount of equity in the company. In most cases with not being a founder this stake is of relatively small size. Sure you could consider Google where I believe it was over 400 employees that were made millionaires by their IPO, but these situations are very rare. The equity receive normally vessts over a period of time, and from my perception is simply equivilant to a portion of your pay no more no less. Sure it does make you feel more of a sense of ownership, but does not extend to the full extent of the business owning you.&lt;/p&gt;
&lt;p&gt;As an employee you&amp;rsquo;re being paid to perform a job, they don&amp;rsquo;t have full claim to what you do on your time.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Sat, 30 Aug 2008 03:44:19 GMT</pubDate><guid isPermaLink="true">/2008/08/29/Being-an-employee/</guid></item><item><title>Flexible sampling of any V$ or X$ view with sample.sql</title><link>https://tanelpoder.com/2008/08/26/flexible-sampling-of-any-v-or-x-view-with-samplesql/</link><description>&lt;p&gt;In recent past I’ve blogged few scripts which use specially crafted ordered nested loop for sampling contents of V$ and X$ views fast, with plain SQL.&lt;/p&gt;
&lt;p&gt;If you haven’t read them yet, here are the links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tanelpoder.com/2008/06/06/advanced-oracle-troubleshooting-guide-part-5-sampling-v-stuff-with-waitprof-really-fast-using-sql/" target="_blank"&gt;WaitProf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tanelpoder.com/2008/07/09/advanced-oracle-troubleshooting-guide-part-7-sampling-latch-holder-statistics-using-latchprof/" target="_blank"&gt;LatchProf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tanelpoder.com/2008/07/23/advanced-oracle-troubleshooting-guide-part-8-even-more-detailed-latch-troubleshooting-using-latchprofx/" target="_blank"&gt;LatchProfX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wrote the above scripts having special purposes in mind (e.g. profile session waits or latching activity).&lt;/p&gt;
&lt;p&gt;Now I introduce a simple but powerful sqlplus script for ad-hoc sampling of any V$ view. It’s called…. (drumroll) …. &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/sample.sql" target="_blank"&gt;sample.sql&lt;/a&gt; :)&lt;/p&gt;
&lt;p&gt;When you look into it, the script is actually very simple. It’s just using power of sqlplus substitution variables, I can pass the sampled column and table names and sampling conditions in to the script dynamically.&lt;/p&gt;
&lt;p&gt;The basic syntax is:&lt;/p&gt;
&lt;pre&gt;@sample column_name table_name filter_condition num_samples&lt;/pre&gt;
&lt;p&gt;For example, let say I have a session which executes lots of SQL statements in a loop and I want to have a quick overview of what’s the TOP SQL statement for a session &lt;em&gt;right now&lt;/em&gt;.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 26 Aug 2008 13:35:00 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/08/26/flexible-sampling-of-any-v-or-x-view-with-samplesql/</guid></item><item><title>1st Shoreditch Invitational Bike Polo</title><link>https://rob.sh/post/26/</link><description>&lt;p&gt;A week or so ago, I spent a very enjoyable day watching some great bike polo - again with my camera. &lt;a href="https://rob.sh/gallery/shoreditch-bike-polo/"&gt;Enjoy the photos!&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;center&gt;&lt;a href="https://rob.sh/gallery/shoreditch-bike-polo/"&gt;&lt;img src="https://cdn.rob.sh/img/postimg/shoreditchbikepolo.jpg" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;
I also managed to knock my Rollapaluza quick-rollers PB down to 22.16s :-D</description><author>rob.sh</author><pubDate>Mon, 25 Aug 2008 22:50:34 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/26/</guid></item><item><title>A Lesson from the Wal-Mart Model</title><link>/2008/08/19/A-Lesson-from-the-Wal-Mart-Model/</link><description>&lt;p&gt;Many people criticize Wal-Mart for the way they run their business. I personally find no problems with it, as their goal is simply to make prices competitive. If you care about the other details then either A. shop else where or B. donate to those causes you feel should be supported with the money you save. While sure some of these qualms may be justified I&amp;rsquo;d like to hint at another thought, of why people don&amp;rsquo;t take advantage of the same approaches.&lt;/p&gt;
&lt;p&gt;You see I recently started using a service, which I&amp;rsquo;d prefer not to disclose yet that gives me access to completing very monotonous and tedious tasks for very low price. Indeed there is some overhead involved but once you learn to manage it effectively, and that is the key to do it effectively. Because in reality anyone can manage, but the vast majority over manage things, rather than giving them just the right amount of attention. But back to the primary point, the idea of taking tasks that you normally wouldn&amp;rsquo;t do because of their tedious low value nature and getting those completed for a very low cost can become extremely valuable for you. When you start to think out if you had more time to do those tasks hundreds of things probably come to mind, so I&amp;rsquo;ve encourage everyone to explore the low cost options for work/support and try to leverage them to your advantage&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Tue, 19 Aug 2008 13:43:42 GMT</pubDate><guid isPermaLink="true">/2008/08/19/A-Lesson-from-the-Wal-Mart-Model/</guid></item><item><title>Case study on some rowcache internals, cached non-existent objects and a describe bug</title><link>https://tanelpoder.com/2008/08/18/case-study-on-some-rowcache-internals-cached-non-existent-objects-and-a-describe-bug/</link><description>&lt;p&gt;I got a question regarding Metalink note 296235.1 about a describe bug which causes objects to “disappear” when they are described when database is not open.&lt;/p&gt;
&lt;p&gt;It was an interesting case involving a bug, so I wrote a quite long analysis with test cases today. However when posting the entry to wordpress, it managed to completely mess up the formatting. After wasting half an hour trying to get the formatting correct I gave up and saved the article into a PDF instead.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 18 Aug 2008 15:37:20 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/08/18/case-study-on-some-rowcache-internals-cached-non-existent-objects-and-a-describe-bug/</guid></item><item><title>Why Qik Matters</title><link>/2008/08/14/Why-Qik-Matters/</link><description>&lt;p&gt;Live video streaming from your phone might just seem like another form of lifecasting, a video form of twitter, or even a mobile version of ustream.com or justin.tv, but it really is far more than that. A few people have taken these mobile streaming services such as Qik, Flixwagon, and Kyte and really used them to their fullest capacity. Sure you can go to an extreme like Robert Scoble, but admittedly most of his content from Qik can be pretty good.&lt;/p&gt;
&lt;p&gt;The real thing about mobile video streaming is something that some people have mentioned about twitter. Twitter often breaks the news, or has more information about breaking news than anywhere else. As much as anything thing else it allows for quick live footage of events. Whether its breaking news or an impromptu interview that someone happens to come across. Those willing to embrace this new form of potential reporting, and sacrifice expensive editing and high end video equipment will come away with more interesting pieces and find a rapidly growing following of consumers that tune in.&lt;/p&gt;
&lt;p&gt;Mobile video streaming is far far bigger than ustream and justin.tv. It&amp;rsquo;s about more than showing the day to day happenings of your life whenever you want, and more about continuous access to news and happenings.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 15 Aug 2008 03:15:34 GMT</pubDate><guid isPermaLink="true">/2008/08/14/Why-Qik-Matters/</guid></item><item><title>Why does even a small difference in SQL text cause a hard parse?</title><link>https://tanelpoder.com/2008/08/15/why-does-even-a-small-difference-in-sql-text-cause-a-hard-parse/</link><description>&lt;p&gt;I just replied to an Oracle Forum &lt;a href="http://forums.oracle.com/forums/thread.jspa?messageID=2706348" target="_blank"&gt;Thread&lt;/a&gt; about why does even a small difference in SQL statement text cause it to be hard parsed and loaded as a different cursor. The reason is actually very simple – and I’m posting it into my blog too:&lt;/p&gt;
&lt;p&gt;—&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The reason why a statement with even a minor difference in text is parsed as a separate cursor is due how Oracle looks up statements from library cache.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 14 Aug 2008 21:45:52 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/08/15/why-does-even-a-small-difference-in-sql-text-cause-a-hard-parse/</guid></item><item><title>Script: Display valid values for multioption parameters (including hidden parameters)</title><link>https://tanelpoder.com/2008/08/13/script-display-valid-values-for-multioption-parameters-including-hidden-parameters/</link><description>&lt;p&gt;I wrote a little script &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/pvalid.sql" target="_blank"&gt;pvalid.sql&lt;/a&gt; for listing valid values for multioption parameters (the ones which are not string, number or boolean type, but accept a parameter from predetermined list, like optimizer_mode which can have values of ALL_ROWS, FIRST_ROWS, CHOOSE, FIRST_ROWS_1, etc).&lt;/p&gt;
&lt;p&gt;The script accepts a (part of) Oracle parameter name as first argument, for example the following output is from Oracle 10.2.0.3 database:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; &lt;b&gt;@pvalid lock&lt;/b&gt;

  PAR# PARAMETER                                          VALUE                          DEFAULT
------ -------------------------------------------------- ------------------------------ -------
   374 _db_block_cache_protect                            FALSE                          DEFAULT
       _db_block_cache_protect                            LOW
       _db_block_cache_protect                            MEDIUM
       _db_block_cache_protect                            TRUE

   376 db_block_checksum                                  TRUE                           DEFAULT
       db_block_checksum                                  FALSE
       db_block_checksum                                  FULL
       db_block_checksum                                  OFF
       db_block_checksum                                  TYPICAL

   696 _row_locking                                       ALWAYS
       _row_locking                                       ALWAYS
       _row_locking                                       DEFAULT
       _row_locking                                       DEFAULT
       _row_locking                                       INTENT
       _row_locking                                       INTENT

   756 db_block_checking                                  FALSE                          DEFAULT
       db_block_checking                                  FULL
       db_block_checking                                  LOW
       db_block_checking                                  MEDIUM
       db_block_checking                                  OFF
       db_block_checking                                  TRUE

   851 _plsql_anon_block_code_type                        INTERPRETED                    DEFAULT
       _plsql_anon_block_code_type                        NATIVE


23 rows selected.

SQL&amp;gt;

&lt;/pre&gt;
&lt;p&gt;Or:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 12 Aug 2008 21:16:58 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/08/13/script-display-valid-values-for-multioption-parameters-including-hidden-parameters/</guid></item><item><title>Don't Do It Yourself</title><link>/2008/08/09/Dont-Do-It-Yourself/</link><description>&lt;p&gt;So traditionally I&amp;rsquo;ve been a very do it yourself person. I wanted to be the person that didn&amp;rsquo;t have to rely on anyone, and thus far it&amp;rsquo;s worked pretty well. I can handle my day to day chores, as well as do my job, and most any side project of venture I take on I feel like I can accomplish pretty well. However, I recently asked my question if that was the best approach. While it&amp;rsquo;s good to be self reliant, the people at the top seldom do everything on their own. If I take notice of where I spend my time, most of it is on tasks that produce very very little value. Meanwhile there&amp;rsquo;s other tasks where I only have time to spend a few hours a week that produce much larger value.&lt;/p&gt;
&lt;p&gt;On this point what I&amp;rsquo;m looking into is outsourcing many of these tasks. While it will take additional time to manage that process and delegate the tasks I believe I&amp;rsquo;m currently at a break even point where it makes sense. From there it can only go uphill and not down. I&amp;rsquo;ll likely post again in a few weeks after I&amp;rsquo;ve seen how this is progressed, but it seems those that are accomplishing a lot, in large part its because others do so much for them.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Sun, 10 Aug 2008 02:08:32 GMT</pubDate><guid isPermaLink="true">/2008/08/09/Dont-Do-It-Yourself/</guid></item><item><title>Rollapaluza XI</title><link>https://rob.sh/post/25/</link><description>&lt;p&gt;More cycling event photos - a bunch of images from the &lt;a href="http://www.rollapaluza.com"&gt;Rollapaluza XI&lt;/a&gt; race last night at the Kingpin Suite in Bloomsbury. Lycra skinsuits meets cycling campaigns meets drunken cyclists. Beer, rollers and endorphins - what more do you need? (Click the image for the &lt;a href="https://rob.sh/gallery/rollapaluza-xi/"&gt;full gallery&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;center&gt;&lt;a href="https://rob.sh/gallery/rollapaluza-xi/"&gt;&lt;img src="https://cdn.rob.sh/img/postimg/rollapaluza-blog-title-img.jpg" style="border: none;" /&gt;&lt;/a&gt;&lt;/center&gt;
&lt;br /&gt;&lt;br /&gt;</description><author>rob.sh</author><pubDate>Sat, 09 Aug 2008 15:33:51 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/25/</guid></item><item><title>Who said Common Lisp programs cannot be small?</title><link>http://blog.danieljanus.pl/small-lisp/</link><description>&lt;div&gt;&lt;p&gt;So, how much disk space does your average CL image eat up? A hundred megs? Fifty? Twenty? Five, perhaps, if you’re using LispWorks with a tree-shaker? Well then, how about this?&lt;/p&gt;&lt;pre&gt;&lt;code&gt;[nathell@chamsin salza2-2.0.4]$ ./cl-gzip closures.lisp test.gz
[nathell@chamsin salza2-2.0.4]$ gunzip test
[nathell@chamsin salza2-2.0.4]$ diff closures.lisp test
[nathell@chamsin salza2-2.0.4]$ ls -l cl-gzip
-rwxr-xr-x 1 nathell nathell 386356 2008-08-09 11:08 cl-gzip
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That’s right. A standalone executable of a mini-gzip, written in Common Lisp, taking up &lt;em&gt;under 400K!&lt;/em&gt; And it only depends on glibc and GMP, which are available by default on pretty much every Linux installation. (This is on a 32-bit x86 machine, by the way).&lt;/p&gt;&lt;p&gt;I used the most recent version of &lt;a href="http://ecls.sourceforge.net/"&gt;ECL&lt;/a&gt; for compiling this tiny example. The key to the size was configuring ECL with &lt;code&gt;--disable-shared --enable-static CFLAGS="-Os -ffunction-sections -fdata-sections" LDFLAGS="-Wl,-gc-sections"&lt;/code&gt;. This essentially gives you a poor man’s tree shaker for free at a linker level. And ECL in itself produces comparatively tiny code.&lt;/p&gt;&lt;p&gt;I built this example from &lt;a href="http://www.xach.com/lisp/salza2"&gt;Salza2&lt;/a&gt;’s source by loading the following code snippet:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs lisp"&gt;(&lt;span class="hljs-name"&gt;defvar&lt;/span&gt; salza
  &amp;#x27;(&lt;span class="hljs-string"&gt;&amp;quot;package&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;reset&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;specials&amp;quot;&lt;/span&gt;
    &lt;span class="hljs-string"&gt;&amp;quot;types&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;checksum&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;adler32&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;crc32&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;chains&amp;quot;&lt;/span&gt;
    &lt;span class="hljs-string"&gt;&amp;quot;bitstream&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;matches&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;compress&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;huffman&amp;quot;&lt;/span&gt;
    &lt;span class="hljs-string"&gt;&amp;quot;closures&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;compressor&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;utilities&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;zlib&amp;quot;&lt;/span&gt;
    &lt;span class="hljs-string"&gt;&amp;quot;gzip&amp;quot;&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;))

(&lt;span class="hljs-name"&gt;defvar&lt;/span&gt; salza2
  (&lt;span class="hljs-name"&gt;mapcar&lt;/span&gt; (&lt;span class="hljs-name"&gt;lambda&lt;/span&gt; (&lt;span class="hljs-name"&gt;x&lt;/span&gt;) (&lt;span class="hljs-name"&gt;format&lt;/span&gt; &lt;span class="hljs-literal"&gt;nil&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;~A.lisp&amp;quot;&lt;/span&gt; x))
          salza))

(&lt;span class="hljs-name"&gt;defvar&lt;/span&gt; salza3
  (&lt;span class="hljs-name"&gt;mapcar&lt;/span&gt; (&lt;span class="hljs-name"&gt;lambda&lt;/span&gt; (&lt;span class="hljs-name"&gt;x&lt;/span&gt;) (&lt;span class="hljs-name"&gt;format&lt;/span&gt; &lt;span class="hljs-literal"&gt;nil&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;~A.o&amp;quot;&lt;/span&gt; x))
          salza))

(&lt;span class="hljs-name"&gt;defun&lt;/span&gt; build-cl-gzip ()
  (&lt;span class="hljs-name"&gt;dolist&lt;/span&gt; (&lt;span class="hljs-name"&gt;x&lt;/span&gt; salza2)
          (&lt;span class="hljs-name"&gt;load&lt;/span&gt; x)
          (&lt;span class="hljs-name"&gt;compile-file&lt;/span&gt; x &lt;span class="hljs-symbol"&gt;:system-p&lt;/span&gt; &lt;span class="hljs-literal"&gt;t&lt;/span&gt;))
  (&lt;span class="hljs-name"&gt;c&lt;/span&gt;&lt;span class="hljs-symbol"&gt;:build-program&lt;/span&gt;
   &lt;span class="hljs-string"&gt;&amp;quot;cl-gzip&amp;quot;&lt;/span&gt;
   &lt;span class="hljs-symbol"&gt;:lisp-files&lt;/span&gt; salza3
   &lt;span class="hljs-symbol"&gt;:epilogue-code&lt;/span&gt;
     &amp;#x27;(progn
       (in-package :salza2)
       (gzip-file (second (si::command-args))
                  (third (si::command-args))))))

(&lt;span class="hljs-name"&gt;build-cl-gzip&lt;/span&gt;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(Sadly enough, there’s no ASDF in here. I have yet to figure out how to leverage ASDF to build small binaries in this constrained environment.)&lt;/p&gt;&lt;p&gt;This gave me a standalone executable 1.2 meg in size. I then proceeded to compress it with &lt;a href="http://upx.sourceforge.net/"&gt;UPX&lt;/a&gt; (with arguments &lt;code&gt;--best --crp-ms=999999&lt;/code&gt;) and got the final result. How cool is that?&lt;/p&gt;&lt;p&gt;I am actively looking for a new job. If you happen to like my writings and think I might be just the right man for the team you’re building up, please feel free to consult my &lt;a href="http://bach.ipipan.waw.pl/~nathell/cv-en.pdf"&gt;résumé&lt;/a&gt; or pass it on.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Update 2010-Jan-17&lt;/em&gt;: the above paragraph is no longer valid.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Sat, 09 Aug 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/small-lisp/</guid></item><item><title>Fotoviewr</title><link>/2008/08/08/Fotoviewr/</link><description>&lt;p&gt;In the coming weeks I&amp;rsquo;m going to be working with a friend to help his venture in a new partnership that someone has approached him about. This partnership is rather large and I&amp;rsquo;m not at liberty to disclose details yet, and while this is indeed great news for the site, the great news for users is the site is already fully available.&lt;/p&gt;
&lt;p&gt;In short &lt;!-- raw HTML omitted --&gt;fotoviewr&lt;!-- raw HTML omitted --&gt; is one half of an online photo album, it doesn&amp;rsquo;t store your photos for you, but allows you to take your existing photos from &lt;!-- raw HTML omitted --&gt;flickr&lt;!-- raw HTML omitted --&gt; or &lt;!-- raw HTML omitted --&gt;smugmug&lt;!-- raw HTML omitted --&gt; (with other support coming soon) and instantly put them into a visually appealing gallery. To me the nicest thing about it is the variety. I&amp;rsquo;ve used piclens before, and while I love piclens to scroll through 1000&amp;rsquo;s of pictures quickly, that seems to be the extent to which I use it. I can&amp;rsquo;t use piclens to show off my photo&amp;rsquo;s to friends or family. While browsing through a standard flickr page isn&amp;rsquo;t a bad experience, it isn&amp;rsquo;t a good one. &lt;!-- raw HTML omitted --&gt;Fotoviewr&lt;!-- raw HTML omitted --&gt; really does seem to deliver the other piece of what is missing from online photo sites.&lt;/p&gt;
&lt;p&gt;Check out a few of the sample&amp;rsquo;s below, I&amp;rsquo;ve taken a few of my personal pictures from the past 4th of July and put them into a few of his views that are available. All-in-all this took me a fraction of the time it took to type this post, which is how more things should be online, simple.&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Sat, 09 Aug 2008 00:34:49 GMT</pubDate><guid isPermaLink="true">/2008/08/08/Fotoviewr/</guid></item><item><title>How Ebay Missed the Boat</title><link>/2008/08/08/How-Ebay-Missed-the-Boat/</link><description>&lt;p&gt;At a conversation today we got into a discussion about how ebay can compete with amazon. Which alone is enough content for an entire post, as they really aren&amp;rsquo;t playing the same game so not really competing. Instead I&amp;rsquo;d like to talk about where the conversation progressed to. To me the most interesting thing about ebay isn&amp;rsquo;t how they won the long tail, or how users are unhappy with the increasing costs placed on them. Instead its more at the level of where they really lost out.&lt;/p&gt;
&lt;p&gt;You see, ebay had a devoted following back around 2000. Millions of people would visit their site, buy items, focus on their feedback rating, often spending time in the same category. While at the time most of this was indeed innovative, they stopped there. If they had only taken it a step futher and exposed the final piece of the puzzle by allowing users to interact with each other. If they had developed a network of users that could communicate with each other, that shared interests based on product categories, they could have easily been one of the largest early social networking sites out there. As facebook initially exploded as a social network for college students, and other more recent ones focusing on younger crowds, meanwhile you have linkedin to as a professional network. Ebay could have very much been the network for collectors, or anyone purchasing similar items. Not only would have this increased user engagement, it would have driven more sales.&lt;/p&gt;
&lt;p&gt;Take for example if I&amp;rsquo;m a fan of a particular brand of jeans. I may be very proud of the brand I&amp;rsquo;ve found, but recently discovered some that were newer and more hip. Well I&amp;rsquo;m going to be a bit more hesitant to share that with my friends I hang out with as I want to be the one that&amp;rsquo;s hip versus everyone else having them as well. However if I have a similar community that I connect with online, I can share this information, build a repoire with them, and still maintain my step ahead of friends. It allows your users to become you product recommendation engine versus the Amazon approach of through a lot of machine learning at the problem.&lt;/p&gt;
&lt;p&gt;And the most unfortunate part of it all, I&amp;rsquo;m not sure ebay even realizes they missed the boat.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 08 Aug 2008 10:05:21 GMT</pubDate><guid isPermaLink="true">/2008/08/08/How-Ebay-Missed-the-Boat/</guid></item><item><title>The simplest query for checking what’s happening in a database</title><link>https://tanelpoder.com/2008/08/07/the-simplest-query-for-checking-whats-happening-in-a-database/</link><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;/strong&gt; If you are able to download &amp;amp; run scripts, it&amp;rsquo;s probably better to use my &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/snapper.sql"&gt;Snapper&lt;/a&gt; and &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/ash/ashtop.sql"&gt;@ashtop.sql&lt;/a&gt; tools for performance analysis. Neither of these scripts require any installation, Ashtop requires Diagnostics Pack (as it uses ASH), Snapper doesn&amp;rsquo;t even need that - it can also run on Standard Edition! Search for them in my blog, or check an intro video in my &lt;a href="https://www.youtube.com/watch?v=qQZmH6YvSjo"&gt;YouTube channel&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;When someone asks you to take a quick look into database performance and for whatever reason you can’t run your usual scripts or performance tools on there, ), then what query would you run first?&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 06 Aug 2008 19:30:43 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/08/07/the-simplest-query-for-checking-whats-happening-in-a-database/</guid></item><item><title>How to please your IT department</title><link>https://jasoneckert.github.io/myblog/how-to-please-your-it-dept/</link><description>&lt;p&gt;&lt;img alt="IT dept" src="itdept.jpg#right" title="IT dept" /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;When you call us to have your computer moved, be sure to leave it buried under half a ton of postcards, baby pictures, stuffed animals, dried flowers, bowling trophies and children’s art. We don’t have a life, and we find it deeply moving to catch a fleeting glimpse of yours.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don’t write anything down. Ever. We can play back the error messages from here.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When an IT person says he’s coming right over, go for coffee. That way you won’t be there when we need your password. It’s nothing for us to remember 700 screen saver passwords.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Mon, 04 Aug 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/how-to-please-your-it-dept/</guid></item><item><title>Library cache latches gone in Oracle 11g</title><link>https://tanelpoder.com/2008/08/03/library-cache-latches-gone-in-oracle-11g/</link><description>&lt;p&gt;In Oracle 11g even more library cache operations have been changed to use KGX mutexes instead of latches.&lt;/p&gt;
&lt;p&gt;In Oracle 10.2.0.2+ the &lt;em&gt;library cache pin&lt;/em&gt; latch usage was replaced with mutexes whenever &lt;em&gt;_kks_use_mutex_pin&lt;/em&gt; was true, also few other things like V$SQLSTATS arrays and parent cursor examination were protected by mutexes. However the traversing of library cache hash chains (the right child cursor lookup using kksfbc()) was still protected by library cache latches which could become a problem with frequent soft parsing combined with too little cursor cache and long library cache hash chains (remember, the library cache latches were always taken exclusively even for plain hash chain scanning).&lt;/p&gt;
&lt;p&gt;In 11g all library cache related latches except “library cache load lock” are gone and corresponding operations are protected by mutexes instead. The “library cache” latches have been replaced by “Library Cache” mutexes for example.&lt;/p&gt;
&lt;p&gt;Here are couple queries which illustrate the change.&lt;/p&gt;
&lt;p&gt;**Executed on 10.2.0.3:&lt;/p&gt;
&lt;p&gt;**&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; select name from &lt;b&gt;v$latch&lt;/b&gt; where lower(name) like '%library%';

NAME
--------------------------------------------------
&lt;b&gt;library cache pin allocation
library cache lock allocation
library cache hash chains
library cache lock
library cache
library cache pin
&lt;/b&gt;library cache load lock

7 rows selected.

SQL&amp;gt; select name from &lt;b&gt;v$event_name&lt;/b&gt; where name like '%library%';

NAME
----------------------------------------------------------------
&lt;b&gt;latch: library cache
latch: library cache lock
latch: library cache pin
&lt;/b&gt;library cache pin
library cache lock
library cache load lock
library cache revalidation
library cache shutdown

8 rows selected.

&lt;/pre&gt;
&lt;p&gt;Same queries &lt;strong&gt;executed on 11.1.0.6&lt;/strong&gt; and the bold lines above are gone:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 02 Aug 2008 22:54:34 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/08/03/library-cache-latches-gone-in-oracle-11g/</guid></item><item><title>Grass Track Racing</title><link>https://rob.sh/post/24/</link><description>&lt;p&gt;A couple of Sundays ago I went up to watch the grass track racing in Hackey, arranged by Hackney CC - finally got a moment to upload the photos! Full gallery is &lt;a href="https://rob.sh/gallery/grass-track-2008/"&gt;here&lt;/a&gt;, selected others below!&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;center&gt;&lt;img alt="Jim!" src="https://cdn.rob.sh/img/postimg/grass_track4266.jpg" /&gt; &lt;img src="https://cdn.rob.sh/img/postimg/grass_track4359.jpg" /&gt;&lt;/center&gt;</description><author>rob.sh</author><pubDate>Sat, 02 Aug 2008 02:19:23 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/24/</guid></item><item><title>Handy vim tip</title><link>https://rob.sh/post/23/</link><description>&lt;p&gt;I&amp;rsquo;ve been working on a number of bits of code recently, and have found that it&amp;rsquo;s not entirely practical to check into RCS or SVN for every change that I&amp;rsquo;ve made. I really like to work by committing when I&amp;rsquo;ve finished adding a feature to a script, or a project. Hence, I&amp;rsquo;ve been using the vim &amp;ldquo;set backup&amp;rdquo; option. However, this has some limitations, and hence I decided to have a look at what .vimrc could do for me.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Fri, 01 Aug 2008 19:48:00 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/23/</guid></item><item><title>Alistapart Survey</title><link>https://caiustheory.com/alistapart-survey/</link><description>&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Tue, 29 Jul 2008 17:47:24 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/alistapart-survey/</guid></item><item><title>Geometric vs supersampling polygon rendering</title><link>https://www.databasesandlife.com/geometric-vs-supersampling-polygon-rendering/</link><description>&lt;p&gt;A reader wrote to me with the following question. It&amp;rsquo;s a topic I used to wonder about a lot too.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&amp;rsquo;m trying to write a 2D fillAntiAliasedTriangle() method in Java and trying to understand why everyone is using supersampling (that is, rendering at a higher resolution and then scaling down a grid of NxN subpixels into one pixel) rather than computing everything geometrically? (Say, your line cuts a triangle off a pixel to half its area, then have that pixel be colored at 50% the color intensity)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 29 Jul 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/geometric-vs-supersampling-polygon-rendering/</guid></item><item><title>T-Zones on iPhone 2.0</title><link>https://arashpayan.com/blog/2008/07/26/t-zones-on-iphone-20/</link><description>If you&amp;rsquo;re trying to get T-Zones working on the iPhone 2.0 software, you don&amp;rsquo;t need to follow the old manual way of doing it. Just go into Cydia and search for TZones Hack and install the BigBoss tweak that comes up. Restart your phone, and you&amp;rsquo;re good to go.
As usual, the YouTube app still won&amp;rsquo;t work with this hack.</description><author>Arash Payan</author><pubDate>Sat, 26 Jul 2008 23:04:00 GMT</pubDate><guid isPermaLink="true">https://arashpayan.com/blog/2008/07/26/t-zones-on-iphone-20/</guid></item><item><title>How social networking advertising should work</title><link>/2008/07/22/How-social-networking-advertising-should-work/</link><description>&lt;p&gt;Social advertising is a very different than traditional web advertising. The thing about social media advertisers, is users aren&amp;rsquo;t looking for a product. They&amp;rsquo;re already engaged in some activity, and don&amp;rsquo;t necessarily want to be drawn away from that. But that does not mean there isn&amp;rsquo;t value in it, it&amp;rsquo;s just a different form of value than search advertising.&lt;/p&gt;
&lt;p&gt;When a user is searching from google, they are actually looking for something. They&amp;rsquo;re often looking for products, which is why advertising in its current form works great on search. It&amp;rsquo;s logical if a user is searching for shampoo, that proctor and gamble would want to pay to have their products show up on the right. This is vastly different from when I&amp;rsquo;m playing a racing game on facebook, and Ford shows me a commercial for their product, they&amp;rsquo;re not the same thing.&lt;/p&gt;
&lt;p&gt;However there is still HUGE value in social advertising. Since you know so much more about a user you can target them even better, I can know, age, gender, music/movie preferenes, interests, hobbies, among many other things. Where this can help is branding, if there is a car game, and you can present a solid brand in places throughout that game I become brand loyal without realizing it. I don&amp;rsquo;t become disengaged, but I do take notice of it. It&amp;rsquo;s much like the branding that takes place in movies, or console games, with large negotiated contracts, however it needs to occur on a micro-level.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Wed, 23 Jul 2008 04:10:12 GMT</pubDate><guid isPermaLink="true">/2008/07/22/How-social-networking-advertising-should-work/</guid></item><item><title>Advanced Oracle Troubleshooting Guide, Part 8: Even more detailed latch troubleshooting using LatchProfX</title><link>https://tanelpoder.com/2008/07/23/advanced-oracle-troubleshooting-guide-part-8-even-more-detailed-latch-troubleshooting-using-latchprofx/</link><description>&lt;p&gt;In my last &lt;a href="https://tanelpoder.com/2008/07/09/advanced-oracle-troubleshooting-guide-part-7-sampling-latch-holder-statistics-using-latchprof/" target="_blank"&gt;AOT post&lt;/a&gt; I published my &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/latchprof.sql" target="_blank"&gt;LatchProf&lt;/a&gt; script which is able to sample detailed latchholder data from V$LATCHHOLDER.&lt;/p&gt;
&lt;p&gt;Latchprof allows you to drill down into your latching problems at session level (which V$LATCH, V$LATCH_PARENT and V$LATCH_CHILDREN can’t do). It allows you to get valuable details about individual sessions who are holding a latch the most, therefore &lt;em&gt;likely&lt;/em&gt; contributing to the latch contention problem the most.&lt;/p&gt;
&lt;p&gt;However after you have discovered the troublemaking session, then what next? One way forward is looking into V$SESSTAT counters using &lt;a href="https://tanelpoder.com/2013/02/18/snapper-v4-02-and-the-snapper-launch-party-video/" target="_blank"&gt;Snapper&lt;/a&gt; tool. Depending on what latch is the problematic one, you would look for different stats like various buffer get stats for cache buffers chains latches and parsing/executing stats when looking into library cache latches. However if those stats look “normal”, is there any other way do drill down further?&lt;/p&gt;
&lt;p&gt;Yeah, there is and lets look into it!&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 22 Jul 2008 19:58:23 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/07/23/advanced-oracle-troubleshooting-guide-part-8-even-more-detailed-latch-troubleshooting-using-latchprofx/</guid></item><item><title>Crazy algorithm for displaying text size value</title><link>https://www.databasesandlife.com/crazy-algorithm-inkscape-average-font-size/</link><description>&lt;p&gt;Anyone who has written any graphics or text manipulation software will know the following problem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each character or object has a particular style, for example the size of the writing, the thickness of the stroke, etc.&lt;/li&gt;
&lt;li&gt;There is some user interface element e.g. a dialog or rollup where the user can view and edit the attribute of the currently selected object&lt;/li&gt;
&lt;li&gt;The user may select multiple objects&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And there we have it: the user selects two pieces of text, one is 12pt, the other 18pt, and opens the &amp;ldquo;font size&amp;rdquo; dialog. What size is it to display? There are a number of solutions to this problem, none particularly elegant:&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 18 Jul 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/crazy-algorithm-inkscape-average-font-size/</guid></item><item><title>Cappies 2007-2008 Season Shirt</title><link>http://www.cafepress.com/m5oxR6NhoD</link><description>Shirt featuring the names of the schools and shows of the 07/08 Canada’s Capital Cappies Season! Shows listed in chronological order. Plain colours make this shirt ideal for tie dyeing!</description><author>David Schlachter</author><pubDate>Thu, 17 Jul 2008 20:00:00 GMT</pubDate><guid isPermaLink="true">http://www.cafepress.com/m5oxR6NhoD</guid></item><item><title>Microsoft vs. Apple</title><link>/2008/07/16/Microsoft-vs.-Apple/</link><description>&lt;p&gt;I find it extremely amusing that Microsoft and Apple are in many senses the very same company, at least in their actions, yet people feel very different about the two. For the average person they aren&amp;rsquo;t really a fan of Microsoft, and many love Apple. While I&amp;rsquo;m not really suggesting anyone should love Microsoft, why are people such Apple fanboys. Apple makes the same bad moves as Microsoft, they control their software and limit functionality in order to drive sales in the future.&lt;/p&gt;
&lt;p&gt;For example with the iPhone, by disabling video streaming they are simply leaving something to be supported for next year. There&amp;rsquo;s now doubt that the phone is fully capable, especially with 3g, as qik is already supporting it. However they are having to jump through hoops to do it, when Apple could have simply enabled it in the SDK, and yet they didn&amp;rsquo;t. It&amp;rsquo;s unfortunate for AT&amp;amp;T in the process as well, because as people are die hard Apple fans, they feel Apple can do no wrong. This wasn&amp;rsquo;t quite the case in recent days, first with the launch of the iPhone 3g, there were many many bricked iPhones for that morning. Almost every complaint I saw on twitter drawed attention to AT&amp;amp;T screwing it up. However, from a source very close to the issue, the problem was entirely on Apple&amp;rsquo;s end, as they had tested for only a fraction of the traffic they got that day, and were not able to scale up new machines nearly fast enough.&lt;/p&gt;
&lt;p&gt;Now Apple woes seem to continue as with &lt;!-- raw HTML omitted --&gt;MobileMe&lt;!-- raw HTML omitted --&gt;. For all the fan boys out there, and while I agree they make a good product, they should still be help to the same regard of anyone else that makes a product, and be complained to when they screw up. Apple has indeed done a great job with marketing and a reasonable job with products, however they keep a strong reign on applications, which is why I like the applications that are on OSX, but hate that its sucha  smaller number.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not saying love Microsoft, or even hate Apple. But people judge them on their actions, and while they drive the boundaries, theres still no hard in calling them out when they hold back just for more revenue.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Wed, 16 Jul 2008 10:19:48 GMT</pubDate><guid isPermaLink="true">/2008/07/16/Microsoft-vs.-Apple/</guid></item><item><title>Closed database and WITH subquery</title><link>https://tanelpoder.com/2008/07/14/closed-database-and-with-subquery/</link><description>&lt;p&gt;Here’s an interesting issue I found when running a query using WITH subquery factoring when database was not open (it was in NOMOUNT mode in current case).&lt;/p&gt;
&lt;p&gt;As you probably know you can query DUAL table when database is not open, but in this case the actual query is made against X$DUAL as seen below:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; select * from dual;

ADDR           INDX    INST_ID DUM
-------- ---------- ---------- ---
051ED14C          0          1 X

SQL&amp;gt;

&lt;/pre&gt;
&lt;p&gt;When you have above fields when querying from DUAL then you know your database is probably not open.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 14 Jul 2008 14:17:07 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/07/14/closed-database-and-with-subquery/</guid></item><item><title>Facebook apps worth using</title><link>/2008/07/12/Facebook-apps-worth-using/</link><description>&lt;p&gt;Facebook applications to check out,&lt;/p&gt;
&lt;p&gt;Windows:
&lt;!-- raw HTML omitted --&gt;Digsby&lt;!-- raw HTML omitted --&gt; - Facebook Im on your desktop
&lt;!-- raw HTML omitted --&gt;Fonebook&lt;!-- raw HTML omitted --&gt; - sync outlook and facebook
&lt;!-- raw HTML omitted --&gt;iDeskbook&lt;!-- raw HTML omitted --&gt; - Browse facebook on the desktop
&lt;!-- raw HTML omitted --&gt;Photosaver&lt;!-- raw HTML omitted --&gt; - Friends photos as your screensaver&lt;/p&gt;
&lt;p&gt;OSx:
&lt;!-- raw HTML omitted --&gt;Friend Photos Screensaver&lt;!-- raw HTML omitted --&gt; - Friend&amp;rsquo;s photos as your screensaver
&lt;!-- raw HTML omitted --&gt;Facebook exporter for iphoto&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;Adium&lt;!-- raw HTML omitted --&gt; - Chat with facebook support
&lt;!-- raw HTML omitted --&gt;Photobook&lt;!-- raw HTML omitted --&gt; - Miss your camera at an event, just steal your friends album
&lt;!-- raw HTML omitted --&gt;EventSync&lt;!-- raw HTML omitted --&gt; - Sync event calendar with iCal&lt;/p&gt;
&lt;p&gt;Web:
&lt;!-- raw HTML omitted --&gt;Wordpress fotobook&lt;!-- raw HTML omitted --&gt; - Facebook albums inside your wordpress blog&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Sun, 13 Jul 2008 05:30:15 GMT</pubDate><guid isPermaLink="true">/2008/07/12/Facebook-apps-worth-using/</guid></item><item><title>How to do an out-of-office auto reply</title><link>https://jasoneckert.github.io/myblog/how-to-do-an-out-of-office-autoreply/</link><description>&lt;p&gt;&lt;img alt="Algonquin" src="algonquin.png#right" title="Algonquin" /&gt;&lt;/p&gt;
&lt;p&gt;I haven’t posted for a while simply because I just got back from vacation today rejuvenated.   In IT, you either take vacation or spend tons of $$ on therapy and alcohol.  I prefer the vacation :-)&lt;/p&gt;
&lt;p&gt;People still email me during my vacation, but I have an Outlook autoreply email configured to let them know that I won’t be replying anytime soon (it’s your basic “leave me alone because I am on vacation” email).  Here is my Outlook autoreply email from this year:&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sat, 12 Jul 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/how-to-do-an-out-of-office-autoreply/</guid></item><item><title>Conversation aggregators vs. social network aggegators</title><link>/2008/07/10/Conversation-aggregators-vs.-social-network-aggegators/</link><description>&lt;p&gt;I recently posted about web 2.5, and since that time have been diving into two sites that attempt to do this. The first is &lt;!-- raw HTML omitted --&gt;friendfeed&lt;!-- raw HTML omitted --&gt;, I&amp;rsquo;ve commented about it before. It&amp;rsquo;s overall a great site, however the community is still growing on it, and most of my personal friends are not on there, only those that I follow and interact with in a tech or professional community. And there&amp;rsquo;s the ability to go through and create an imaginary personality for friends, but for me that could take days, and while its still tempting I can&amp;rsquo;t quite commit that strongly. Yeah friend feed is great, but I find myself using it more for having a conversation with whoever is there, rather than using it to follow individual people.&lt;/p&gt;
&lt;p&gt;With the emergence of rooms in &lt;!-- raw HTML omitted --&gt;friendfeed&lt;!-- raw HTML omitted --&gt; it seems they realize its more about being able to have a conversation around a similar topic than it is to track individual people.&lt;/p&gt;
&lt;p&gt;However it seems that &lt;!-- raw HTML omitted --&gt;socialthing&lt;!-- raw HTML omitted --&gt;, which I recently got access to, thanks &lt;!-- raw HTML omitted --&gt;socialthing&lt;!-- raw HTML omitted --&gt; team, is a slightly better aggregator at least for my demographic. Friendfeed works well for those that use blogs, google reader, photo albums and the like. But friendfeed is seriously lacking on the facebook front, meanwhile socialthing is accomplishing this very well. While I&amp;rsquo;m not sure which one I&amp;rsquo;ll be engaged more in, in the coming weeks though I imagine it will depend on the purpose.&lt;/p&gt;
&lt;p&gt;Friendfeed works for following information about tech, news, or similar broad topics. Socialthing works for keeping up with friends, when they&amp;rsquo;ve uploaded pictures from last friday night, or when that girl you have a crush on in high school breaks up with a long-term boyfriend and needs a rebound, and the like. I&amp;rsquo;m not sure how friendfeed would work if they did just enable the same time of features for facebook, I imagine it might not catch as right now its about conversations more than it is a singular feed. Socialthing has a chance to win this one, but you really need to have more than 10 services you connect to.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 11 Jul 2008 04:44:02 GMT</pubDate><guid isPermaLink="true">/2008/07/10/Conversation-aggregators-vs.-social-network-aggegators/</guid></item><item><title>The problem with facebook's platform, is the problem isn't the platform</title><link>/2008/07/08/The-problem-with-facebooks-platform-is-the-problem-isnt-the-platform/</link><description>&lt;p&gt;Facebook&amp;rsquo;s development platform just over a year ago seemed like a genius idea, with an almost infinite amount of potential. While it&amp;rsquo;s still a very hot topic, and most sites these days when they lauch attempt to have a facebook version of their site or service available at almost at the same time. However, I believe we are already over the peak of this, as more controls are being put in place to slow viral growth, and users are spending less time on the site and engaged in the applications.&lt;/p&gt;
&lt;p&gt;My problem though is not with the slowing rate of engagement in applications developed on the facebook platform, but rather on what are the primary applications. Facebook seems to have done a very good job of keeping users to stay within the confines of the site, rather than simply using it as a utility. For most facebook is their personal planner for events, their personal datebook for friends/contacts, their online photo album, their email/messaging system, and more for some. And while it&amp;rsquo;s fine and dandy for some of these things, facebook is not the best endpoint to interact with when getting things to and from facebook.&lt;/p&gt;
&lt;p&gt;Take for example the facebook chat. This is a great utility to be able to talk with friends that I may not have spoken with in years, my AIM list has around 200 users, meanwhile my facebook has over 500. No I do not wish to speak to all of these all the time, but in the rare occasion that I do it&amp;rsquo;s convenient. However IM chat within a browser just doesn&amp;rsquo;t do it for me, not on facebook, or meebo for that matter. The nice fact is that there is a solution and more being developed. Personally if I&amp;rsquo;m at home I use adium (Mac only) for my instant messaging which supports facebook. If I&amp;rsquo;m on a windows machine I use digsby to chat with my facebook friends and monitor what friends are doing. While digsby isn&amp;rsquo;t a perfect solution, I strongly prefer it to the other option of chatting within the browser.&lt;/p&gt;
&lt;p&gt;What about pictures, that&amp;rsquo;s probably the single busiest activity outside of updating status. Here I know of multiple friends that have attempted to use the site&amp;rsquo;s interface for uploading pictures, only to have completed in double the time expected with much much more frustration than anticipated. Meanwhile, I simple select the photos I want to upload in iPhoto (there are options for mac and pc here), select export, click facebook, and off they go. This is the way it should be, I can do likewise for smugmug, flickr, etc.&lt;/p&gt;
&lt;p&gt;Facebook has done a reasonable job at giving developers access to to facebook to allow them to build reasonable applications. While there&amp;rsquo;s a lot of junk out there, there is also some reasonable applications to really make facebook a reasonable utility. The problem lies that these seem to be hidden gems, whether its facebook or some third party, someone needs to start bringing these to the attention of others. Unless facebook transitions to themselves as strictly a utility and differentiates themselves on the quality of service the utility gives, and less on their UI and stronghold of data, they will be in for a world of hurt in a few years.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Wed, 09 Jul 2008 01:42:46 GMT</pubDate><guid isPermaLink="true">/2008/07/08/The-problem-with-facebooks-platform-is-the-problem-isnt-the-platform/</guid></item><item><title>Advanced Oracle Troubleshooting Guide, Part 7: Sampling latch holder statistics using LatchProf</title><link>https://tanelpoder.com/2008/07/09/advanced-oracle-troubleshooting-guide-part-7-sampling-latch-holder-statistics-using-latchprof/</link><description>&lt;p&gt;I have been too busy since getting back from vacation, thus no posts for a while. But I hope the waiting was worthwhile as I present you &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/latchprof.sql" target="_blank"&gt;LatchProf&lt;/a&gt;, a tool for digging in to latch contention problems – using plain SQL and sqlplus!&lt;/p&gt;
&lt;p&gt;As, I’m still busy, I make it short.&lt;/p&gt;
&lt;p&gt;LatchProf is a script similar to &lt;a href="https://tanelpoder.com/2008/06/06/advanced-oracle-troubleshooting-guide-part-5-sampling-v-stuff-with-waitprof-really-fast-using-sql/" target="_blank"&gt;WaitProf&lt;/a&gt;, only it samples latch holder statistics from V$LATCHHOLDER. As V$LATCHHOLDER contains a SID column (with session ID of a latch holder) it becomes possible to find who is hitting a latch the most (a way to prove that crappy monitoring tools which constantly scan through V$SQL DO cause library cache latch contention themselves).&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 08 Jul 2008 14:54:10 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/07/09/advanced-oracle-troubleshooting-guide-part-7-sampling-latch-holder-statistics-using-latchprof/</guid></item><item><title>Web 2.5</title><link>/2008/07/03/Web-2.5/</link><description>&lt;p&gt;I&amp;rsquo;ve talked about web 2.0, talked about web 3.0, but today realized theres still a middle ground we have to reach in between the two. It&amp;rsquo;s quite a pain that I really have no idea when my friends do certain things online. While some use facebook for absolutely everything, this is most certainly NOT the best option. Throwing your data into their walled garden is one thing, but for this to be the one and only place you store your online data is quite stupid. Facebook will only open up when they&amp;rsquo;re absolutely forced to, and may not even open up then. To migrate &amp;rsquo;notes&amp;rsquo; or rather blog posts out of facebook, or all of your pictures, or you&amp;rsquo;re messages can be an absolute pain. Why not use a service built for just those things, such as a wordpress blog, or flickr/picasa, or twitter/jaiku? Well most people don&amp;rsquo;t because of the simplicity of facebook being the central place for your data and your friend&amp;rsquo;s data.&lt;/p&gt;
&lt;p&gt;Well there is a solution to it, though it&amp;rsquo;s not ideal yet, it will soon hit a tipping point of when it will be the solution. Well first I guess I should clearly layout the problem:&lt;/p&gt;
&lt;p&gt;web 2.0 - the dynamic web emerged, users started publishing content
&amp;hellip;. Mass amounts of data, problems getting to it all &amp;hellip;..&lt;/p&gt;
&lt;p&gt;thus in the future we have&amp;hellip;
web 2.5 - content aggregation became nessecary, via friend feed&lt;/p&gt;
&lt;p&gt;and eventually&amp;hellip;
web 3.0 - the semantic web, services understand you and your needs and provide content around context&lt;/p&gt;
&lt;p&gt;In short this is a small plug for friendfeed, but if anyone else knows of a better service to in essence create a feed of you, please send them this way. I&amp;rsquo;ll be posting a full review on friendfeed soon, but for the time being just want to point out the value in such a service. Right now I post on multiple sites, I twitter, I blog, I use facebook, I use smugmug, I use picasa, I use last.fm, I use ilike, I use librarything, I use tumblr, I use google talk, among others. While personally I might be a little more invested than most, still the point remains that a lot of people are on more than one of these services. While I know them and follow them on the ones I know about, chances are I will never see their flickr accounts, or last.fm accounts. While some people worry about privacy and this being a stalker&amp;rsquo;s nightmare, I really don&amp;rsquo;t see it making things that much easier. Much less, most people are making a pretty big assumption assuming that they&amp;rsquo;re worth being stalked. I personally hope I could have a stalker come out of such, as it would give me a definifitive answer that someone actually reads and find me interesting. I just hope she&amp;rsquo;s 5'6&amp;quot;, and a blonde bombshell, but then again I&amp;rsquo;ll take whatever stalkers I can get.&lt;/p&gt;
&lt;p&gt;But the point remains that before we get to web 3.0 and the ability to deliver content based on context, we need to aggregate the content. Sites like friendfeed (and eventually socialthing) are a reasonable first step.&lt;/p&gt;
&lt;p&gt;Check out my friendfeed at: &lt;!-- raw HTML omitted --&gt;&lt;a href="https://www.friendfeed.com/craig081785"&gt;www.friendfeed.com/craig081785&lt;/a&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 04 Jul 2008 05:03:41 GMT</pubDate><guid isPermaLink="true">/2008/07/03/Web-2.5/</guid></item><item><title>Age of Conan</title><link>https://benovermyer.com/blog/2008/07/age-of-conan/</link><description>&lt;p&gt;So I purchased Age of Conan, despite the numerous reviews saying that the game is heavily broken.&lt;/p&gt;
&lt;p&gt;So far, it's not bad. I haven't reached the magical level 20 yet, where according to reviews all content dries up and disappears. I hear that crafting is completely broken and unusable. However, for the time being, I'm enjoying beating the snot out of lots of things…and I especially like switching between solo-instance and multiplayer-open areas. I look forward to the PvP.&lt;/p&gt;
&lt;p&gt;I'm also subscribed now to EverQuest II. EQ2 ran a promotion where I was given two months access to the game, with a trial of all released expansions and adventure packs to date. The kicker, and what made me subscribe again, is that I get to KEEP all those things if I subscribed within the trial period. I'll maintain my subscription for awhile and probably cancel it later, but at least I'll have gotten all that extra content…for only the price of a single month's subscription.&lt;/p&gt;
&lt;p&gt;In Star Wars Galaxies, the Fifth Anniversary event is going on. I acquired the items, but I'm slightly irritated at the way the badge and title for the event are being handed out. Only 24 players - one for every hour - each day are given the Hero of Empire Day reward, and the event only lasts until July 22nd, so a large majority of players will never receive it despite trying for it. I suppose this gives some value to the reward, then, for being scarce. I think a quest would have been a better dispersal mechanism, though.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Tue, 01 Jul 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/07/age-of-conan/</guid></item><item><title>SkillsUSA 2008 Nationals</title><link>https://www.mikekasberg.com/blog/2008/06/30/skillsusa-2008-nationals.html</link><description>&lt;p&gt;Nathan Witt and I &lt;a href="https://www.skillsusa-register.org/rpts/eventmedalists.aspx"&gt;won the bronze medal&lt;/a&gt; at SkillsUSA Nationals for 3D Animation in 2008. The challenge was to create an animation that modeled a given picture of a warehouse and showed something that couldn’t be seen in the original photo. See some of our renderings below.&lt;/p&gt;

&lt;p&gt;&lt;img alt="SkillsUSA Still Render" src="https://www.mikekasberg.com/images/SkillsUSA/Team29Still10.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img alt="SkillsUSA Still Render" src="https://www.mikekasberg.com/images/SkillsUSA/Team29Still5.jpg" /&gt;&lt;/p&gt;</description><author>Mike Kasberg's Blog</author><pubDate>Tue, 01 Jul 2008 01:08:10 GMT</pubDate><guid isPermaLink="true">https://www.mikekasberg.com/blog/2008/06/30/skillsusa-2008-nationals.html</guid></item><item><title>A Generation</title><link>/2008/06/29/A-Generation/</link><description>&lt;p&gt;I&amp;rsquo;ve written many posts here about business, technology, and the like. The reason I&amp;rsquo;ve been so delayed in updating, in addition to the busyness of life, is because this post has been brewing in my head for quite some time. I just haven&amp;rsquo;t been able to sit down and actually compose it until now for some reason.&lt;/p&gt;
&lt;p&gt;So many of my posts have been about the web and how things will change in the future. Well while in this post it is still strongly related I want to talk a bit more about the social aspect. Of how I feel the next generation will insight change in much of the world because of the web. With the web and all of its utilities, youtube, aim, twitter, email, people no longer feel they&amp;rsquo;re separated by thousands of miles. Also its allowed any old joe to take on the form of publisher. I&amp;rsquo;ll concede that my generation watches more television than any generation prior, that sex and STD&amp;rsquo;s are at a higher rate than ever before. But in large part I believe the whole of the generation is following and simply consuming then information put out by the generation ahead of them.&lt;/p&gt;
&lt;p&gt;BUT, there is a small group within the generation that cares about change. That small group is now able to gather mass following, to cause others to thing, and to actually make a difference. This generation seems to have done this through simply expressing themselves. To them its not about making money, or having a cult following, its about personal expression.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a few examples of what I mean about people expressing themselves:&lt;/p&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;wefeelfine.org&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;Kiva.org&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Mon, 30 Jun 2008 04:51:47 GMT</pubDate><guid isPermaLink="true">/2008/06/29/A-Generation/</guid></item><item><title>Bill Gates steps down today</title><link>https://jasoneckert.github.io/myblog/bill-gates-steps-down-today/</link><description>&lt;p&gt;&lt;img alt="Bill Gates" src="billgates.png#right" title="Bill Gates" /&gt;&lt;/p&gt;
&lt;p&gt;Today is Bill Gates’ last day at the helm of the largest software company in history: Microsoft.   Bill, thanks for creating and running a company that has transformed the industry like no other - I wish you the best!&lt;/p&gt;
&lt;p&gt;Although I am not a huge fan of proprietary software today or some of the things that Microsoft has done (e.g. FUD) and is currently doing (e.g. Vista), I have always had a large amount of respect for Microsoft’s role in industry - in the early 1990’s, I really wanted to work for Microsoft like everyone else, and I was an early Windows advocate.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Mon, 30 Jun 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/bill-gates-steps-down-today/</guid></item><item><title>Big crash.</title><link>https://rob.sh/post/22/</link><description>&lt;p&gt;Don&amp;rsquo;t swerve when people pass too close. There are many parked cars.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;center&gt;
&lt;a href="https://cdn.rob.sh/img/iro_framedamage.jpg"&gt;&lt;img src="https://cdn.rob.sh/img/iro_framedamage_thumb.jpg" /&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;br /&gt;&lt;br /&gt;
I sustained broken teeth and ripped muscles.&lt;br /&gt;&lt;br /&gt;
I now have this:&lt;br /&gt;&lt;br /&gt;
&lt;center&gt;&lt;img src="https://cdn.rob.sh/img/bob_jackson.jpg" /&gt;&lt;/center&gt;</description><author>rob.sh</author><pubDate>Fri, 27 Jun 2008 19:26:36 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/22/</guid></item><item><title>You win some, you lose some, you talk some</title><link>http://blog.danieljanus.pl/you-win-some/</link><description>&lt;div&gt;&lt;p&gt;After my &lt;a href="http://blog.danieljanus.pl/im-not-playing-this-stupid-game-anymore.html"&gt;shameful performance&lt;/a&gt; in the previous tournament, this weekend saw my greatest achievement in tournament Scrabble to date: that of advancing to the quarterfinals of the Cup of Poland. For the record, &lt;a href="http://www.pfs.org.pl/turnieje/2008/w080622.txt"&gt;here&lt;/a&gt; are the final standings. In the quarterfinal, I lost both games to Tomasz Zwoliński (the former Champion of Poland), who went on to win the Cup.&lt;/p&gt;&lt;p&gt;On Thursday, I will be delivering a presentation about the dark side of programming: error handling and how to cope up with Murphy’s law. The talk will last around 30 minutes and be held within &lt;a href="http://aulapolska.pl/"&gt;TechAula&lt;/a&gt;, a place to hear about exciting and revolutionary technologies in software engineering. Feel invited to register and show up.&lt;/p&gt;&lt;p&gt;(Postscriptum 11 July: By public demand, the slides from my talk are now &lt;a href="http://danieljanus.pl/2008-aula-errorhandling.pdf"&gt;available for download&lt;/a&gt;.)&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Mon, 23 Jun 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/you-win-some/</guid></item><item><title>cl-morfeusz: A ninety minutes’ hack</title><link>http://blog.danieljanus.pl/cl-morfeusz/</link><description>&lt;div&gt;&lt;p&gt;Here’s what I came up with today, after no more than 90 minutes of coding (complete with comments and all):&lt;/p&gt;&lt;pre&gt;&lt;code&gt;MORFEUSZ&gt; (morfeusz-analyse "zażółć gęślą jaźń")
((0 1 "zażółć" "zażółcić" "impt:sg:sec:perf")
 (1 2 "gęślą" "gęśl" "subst:sg:inst:f")
 (2 3 "jaźń" "jaźń" "subst:sg:nom.acc:f"))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is &lt;a href="http://danieljanus.pl/code/morfeusz.lisp"&gt;cl-morfeusz&lt;/a&gt; in action, a Common Lisp interface to &lt;a href="http://nlp.ipipan.waw.pl/~wolinski/morfeusz/"&gt;Morfeusz&lt;/a&gt;, the morphological analyser for Polish.&lt;/p&gt;&lt;p&gt;It’s a single Lisp file, so there’s no ASDF system definition or asdf-installability for now. I’m not putting it under version control, either. Or, should I say, not yet. When I get around to it, I plan to write a simple parser and write a Polish-language version of &lt;a href="http://en.wikipedia.org/wiki/Colossal_Cave_Adventure"&gt;the text adventure that started it all&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Meanwhile, you may use cl-morfeusz for anything you wish (of course, as long as you comply with Morfeusz’s license). Have fun!&lt;/p&gt;&lt;p&gt;&lt;em&gt;Update 2010-Jan-17&lt;/em&gt;: With the advent of UTF-8 support in CFFI, the ugly workarounds in the code are probably no longer necessary; I don’t have time to check it right now, though.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Mon, 23 Jun 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/cl-morfeusz/</guid></item><item><title>Another use case for WaitProf – diagnosing “events in waitclass Other”</title><link>https://tanelpoder.com/2008/06/21/another-use-case-for-waitprof-diagnosing-events-in-waitclass-other/</link><description>&lt;p&gt;I recently diagnosed a performance issue where the “events in waitclass Other” occasionally took significant part of the session’s response time. For example Snapper (which reads wait event data from V$SESSION_EVENT) reported that during measuring 39.9% of the response time was spent on “events in waitclass Other”.&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; @sn 1 119

-- Session Snapper v1.07 by Tanel Poder (  )

---------------------------------------------------------------------------------------------------------------------------------------------
HEAD,     SID, SNAPSHOT START   ,  SECONDS, TYPE, STATISTIC                               ,         DELTA,  DELTA/SEC,     HDELTA, HDELTA/SEC
---------------------------------------------------------------------------------------------------------------------------------------------
DATA,     119, 20080621 05:22:05,        1, STAT, session logical reads                   ,         18284,      18284,     18.28k,     18.28k
DATA,     119, 20080621 05:22:05,        1, STAT, consistent gets                         ,         15301,      15301,      15.3k,      15.3k
DATA,     119, 20080621 05:22:05,        1, STAT, consistent gets from cache              ,         15228,      15228,     15.23k,     15.23k
DATA,     119, 20080621 05:22:05,        1, STAT, consistent gets from cache (fastpath)   ,         15136,      15136,     15.14k,     15.14k
DATA,     119, 20080621 05:22:05,        1, STAT, calls to get snapshot scn: kcmgss       ,            89,         89,         89,         89
DATA,     119, 20080621 05:22:05,        1, STAT, no work - consistent read gets          ,         14883,      14883,     14.88k,     14.88k
DATA,     119, 20080621 05:22:05,        1, STAT, table scans (short tables)              ,            21,         21,         21,         21
DATA,     119, 20080621 05:22:05,        1, STAT, table scan rows gotten                  ,       1429227,    1429227,      1.43M,      1.43M
DATA,     119, 20080621 05:22:05,        1, STAT, table scan blocks gotten                ,         17440,      17440,     17.44k,     17.44k
&lt;b&gt;DATA,     119, 20080621 05:22:05,        1, WAIT, events in waitclass Other               ,        399831,     399831,   399.83ms,   399.83ms
&lt;/b&gt;--  End of snap 1

&lt;/pre&gt;
&lt;p&gt;From Oracle 10g Oracle has consolidated lots of the events into “events in waitclass Other”. This is because saving all 900+ wait event stats for every session (in V$SESSION_EVENT array) would waste too much memory with giving little benefit (normally there’s only a handful of troublemaking events anyway). Therefore makes sense to aggregate the least likely happening events under some common category. Looks like Oracle kernel coders have set a threshold in event number above which all events are grouped under the “other” waitclass.&lt;/p&gt;
&lt;p&gt;See below, this is from 11g:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 20 Jun 2008 19:46:47 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/06/21/another-use-case-for-waitprof-diagnosing-events-in-waitclass-other/</guid></item><item><title>The site that gets it right</title><link>/2008/06/19/The-site-that-gets-it-right/</link><description>&lt;p&gt;This week I want to talk about one of the hands-down best sites on the internet. Mint.com, in case you haven&amp;rsquo;t heard about Mint yet, it&amp;rsquo;s like Quicken or Microsoft Money just online. You create an account on the website, login, add your account information. From there mint connects to each of your accounts, pulls down your transaction history, automatically categorizes your spending into categories, and then will send you alerts for budgets or other settings via text or email. Oh, and best of all since it knows where you&amp;rsquo;re spending your money, it tells you how you can save.&lt;/p&gt;
&lt;p&gt;So since mint sounds great and wonderful, and it indeed is, I&amp;rsquo;m going to jump straight in and start addressing issues people may already have about this kind of site. The first is security, why would I give all of my account information away to a single place so someone could walk in and take every penny I have? Well first account information is hashed, it&amp;rsquo;s not just sitting in some text file on some desktop, its quite secure. Next, well mint gives you warnings right? So if someone goes and buys a car with you&amp;rsquo;re credit card you&amp;rsquo;ll get a text message about it. Now I may be missing something, but my bank has never offered me that kind of service. Oh and best of all, just because you put your account information, you still have the normal security backing of your bank and liability.&lt;/p&gt;
&lt;p&gt;Worried about a company having so much information on you? What if I told you in a matter of minutes if I know you&amp;rsquo;re name I could likely have your past 3 residences, phone numbers, and other information. Or for that matter if you&amp;rsquo;re concerned with a company having that information, do you pay cash for everything. Because if you don&amp;rsquo;t the credit card companies have just as much information, and they and other companies often sell this information. Mint.com &lt;!-- raw HTML omitted --&gt;promises not to do such&lt;!-- raw HTML omitted --&gt;. So if your argument is that you don&amp;rsquo;t want people to know that much information about you, its a very valid one, but hypocritical if you don&amp;rsquo;t always use cash which, which in ways can still be traceable.&lt;/p&gt;
&lt;p&gt;Finally I just want to highlight my favorite thing about mint.com. They get web 3.0, sure they have a rich interface, decent categorization, and good alerts. But best of all, they know where I spend my money, they know generic stuff about me, but because of that they can recommend to me ways I can actually save money. Now it may be just me, but I&amp;rsquo;m pretty sure everyone out there would like to save money. So its great to show ways that I truly can save money, not typical propaganda that is a waste of time for me.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 20 Jun 2008 03:17:55 GMT</pubDate><guid isPermaLink="true">/2008/06/19/The-site-that-gets-it-right/</guid></item><item><title>Killing an Oracle process from inside Oracle</title><link>https://tanelpoder.com/2008/06/19/killing-an-oracle-process-from-inside-oracle/</link><description>&lt;p&gt;I had a following situation few days ago – I was running a CREATE TABLE AS SELECT over a heterogenous services dblink. However I cancelled this command via pressing CTRL+C twice in Windows sqlplus (this actually just kills the client sqlplus and not the call).&lt;/p&gt;
&lt;p&gt;Anyway, when I wanted to drop that table involved, this happened:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; drop table MYTABLE;
drop table MYTABLE
           *
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified

&lt;/pre&gt;
&lt;p&gt;I can’t drop a table as someone is holding a lock on it. Fair enough, this was a dev environment used only by me, so I used DBA_OBJECTS.OBJECT_ID to find out the object ID of that table:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; @o MYTABLE

owner                     object_name                    object_type        CREATED           LAST_DDL_TIME     status           OID      D_OID
------------------------- ------------------------------ ------------------ ----------------- ----------------- --------- ---------- ----------
XYZ_DEV01_OWNER           MYTABLE                        TABLE              20080616 11:08:44 20080616 11:08:44 VALID          &lt;strong&gt;63764&lt;/strong&gt;      63764

&lt;/pre&gt;
&lt;p&gt;…and then I queried what enqueue locks were held on that object:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; select * from v$lock where id1=&lt;strong&gt;63764&lt;/strong&gt;;

ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
40034278 40034290        &lt;strong&gt;130&lt;/strong&gt; TM      63764          0          6          0       2662          0

&lt;/pre&gt;
&lt;p&gt;Ok, I see session 130 holding a TM lock on that table. I queried the corresponding SERIAL# from v$session as well and killed the session:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; alter system kill session '130,8764';
alter system kill session '130,8764'
*
ERROR at line 1:
ORA-00031: session marked for kill

SQL&amp;gt; select * from v$lock where id1=63764;

ADDR     KADDR           SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
40034278 40034290        130 TM      63764          0          6          0       2668          0

&lt;/pre&gt;
&lt;p&gt;After hanging for 60 seconds, my kill command gave up (and marked my session for kill), but my lock was still not released… Now what?&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 19 Jun 2008 14:44:10 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/06/19/killing-an-oracle-process-from-inside-oracle/</guid></item><item><title>Another metapost</title><link>http://blog.danieljanus.pl/another-metapost/</link><description>&lt;div&gt;&lt;p&gt;No, I am not going to write about &lt;a href="http://foundry.supelec.fr/projects/metapost/"&gt;the programming language for generating vector graphics&lt;/a&gt;. This is not a real post, but rather a note to self to write ones on certain topics once I get ready for that. And as for today’s title, I just couldn’t resist the pun. ;-)&lt;/p&gt;&lt;p&gt;I’ve been rewriting the Poliqarp Java (GUI) client for the last two weeks or so. The point is to convert it to use &lt;a href="http://bach.ipipan.waw.pl/~nathell/blog/poliqarp-new-protocol.html"&gt;the new protocol&lt;/a&gt;, and to take the opportunity of turning a messy, kludgey and bit-rotting pile of code into a neatly decoupled, cleanly designed, robust and comprehensible utility. And the further I get, the more I see how much it’s worth it. I strongly believe that at the end of this path, upon remergence with the mainline, Poliqarp will become better than ever before.&lt;/p&gt;&lt;p&gt;Thus, when I have something to show (I hope to deliver a preliminary working version, though not yet feature-complete, within the upcoming week or so), I will probably brag about the design solutions I’ve taken. While I’m at it, I will possibly also write the long-delayed description of the new build system.&lt;/p&gt;&lt;p&gt;If there is anybody out there besides me who actually cares for that, stay tuned!&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Thu, 19 Jun 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/another-metapost/</guid></item><item><title>cursor_space_for_time To Be Deprecated</title><link>https://tanelpoder.com/2008/06/17/cursor_space_for_time-to-be-deprecated/</link><description>&lt;p&gt;If you haven’t seen the Meatlink note 565424.1 in the news yet, cursor_space_for_time parameter will be deprecated in Oracle 10.2.0.5 and 11.1.0.7.&lt;/p&gt;
&lt;p&gt;That’s kind of good news, I hope this will eventually reduce the number of &lt;em&gt;expert&lt;/em&gt; DBAs who set this parameter to true whenever they see any kind of shared pool / library cache latch contention.&lt;/p&gt;
&lt;p&gt;On the other hand, spin_count was made an undocumented parameter long time ago, but is still heavily abused worldwide so I wouldn’t be surprised if the same happens to future _cursor_space_for_time…&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 17 Jun 2008 13:52:55 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/06/17/cursor_space_for_time-to-be-deprecated/</guid></item><item><title>Advanced Oracle Troubleshooting Guide, Part 6: Understanding Oracle execution plans with os_explain</title><link>https://tanelpoder.com/2008/06/15/advanced-oracle-troubleshooting-guide-part-6-understanding-oracle-execution-plans-with-os_explain/</link><description>&lt;p&gt;Get ready for some more adventures in Oracle process stack!&lt;/p&gt;
&lt;p&gt;Before proceeding though, please read &lt;a href="https://tanelpoder.com/2008/06/14/debugger-dangers/" target="_blank"&gt;this post&lt;/a&gt; about safety of different stack sampling approaches.&lt;/p&gt;
&lt;p&gt;I have had few non-trivial Oracle troubleshooting cases, related to query hangs and bad performance, where I’ve wanted to know where exactly in execution plan the current execution is.&lt;/p&gt;
&lt;p&gt;Remember, Oracle is just another program executing instructions clustered in functions on your server, so stack sampling can help out here as well.&lt;/p&gt;
&lt;p&gt;So, I was looking into the following stack trace taken from an Oracle 10.1 database on Solaris SPARC, running a SQL with &lt;a href="https://tanelpoder.com/files/samples/os_explain_plan.txt" target="_blank"&gt;this execution plan&lt;/a&gt;.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 15 Jun 2008 17:40:12 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/06/15/advanced-oracle-troubleshooting-guide-part-6-understanding-oracle-execution-plans-with-os_explain/</guid></item><item><title>Debugger dangers</title><link>https://tanelpoder.com/2008/06/14/debugger-dangers/</link><description>&lt;p&gt;Whenever I deliver training or conference presentations on advanced troubleshooting topics, I usually spend some time demonstrating how to get and interpret Oracle server process stack traces.&lt;/p&gt;
&lt;p&gt;As I’ve mentioned before, stack traces are the ultimate indicators showing where in Oracle kernel (or whatever application) code the execution currently is (or where it was when a crash occurred). This is the reason Oracle Support asks for stack traces whenever there’s a crash or non-trivial hang involved, that’s why Oracle database dumps errorstacks when ORA-600’s and other exceptions occur.&lt;/p&gt;
&lt;p&gt;There are multiple ways for getting stack traces for Oracle, but not all ways are equal. Some give you more contextual info, some less, but what I’m blogging about today is that some ways are less safe than others.&lt;/p&gt;
&lt;p&gt;I was using &lt;strong&gt;pstack&lt;/strong&gt; on Linux for diagnosing an IO related performance issue. I executed a &lt;em&gt;create table as select&lt;/em&gt; statement and ran pstack in a loop for getting stack traces from the running process.&lt;/p&gt;
&lt;p&gt;However in one of the test runs I got following error in my Oracle session:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; create table t as select * from dba_source;
create table t as select * from dba_source
                                *
ERROR at line 1:
ORA-01115: IO error reading block from file 1 (block # 11161)
ORA-01110: data file 1: '/u01/oradata/LIN10G/system01.dbf'
&lt;strong&gt;ORA-27091: unable to queue I/O
ORA-27072: File I/O error
&lt;/strong&gt;Additional information: 3
Additional information: 11145
Additional information: 32768

&lt;/pre&gt;
&lt;p&gt;I suspected that this issue was due Linux pstack, stopped the pstack script and ran my CTAS from &lt;em&gt;the same Oracle session&lt;/em&gt; again:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 14 Jun 2008 14:51:54 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/06/14/debugger-dangers/</guid></item><item><title>Site Review: Friendfeed</title><link>/2008/06/12/Site-Review-Friendfeed/</link><description>&lt;p&gt;There&amp;rsquo;s been a lot of buzz in the valley lately around this very small startup, that has a few pretty heavy hitters. Between the four founders they have worked on nearly all of the Google products so many know and love, with the exception of search. &lt;!-- raw HTML omitted --&gt;Paul Bucheit&lt;!-- raw HTML omitted --&gt;, is even responsible for Google&amp;rsquo;s current motto, &amp;ldquo;don&amp;rsquo;t be evil&amp;rdquo;. These four guys not only are visionaries within the web space, they also know how to deliver a product, having helped build and scale gmail and google maps is indeed a noteworthy accomplishment.&lt;/p&gt;
&lt;p&gt;But what about their current task at hand, to be &lt;!-- raw HTML omitted --&gt;web 3.0&lt;!-- raw HTML omitted --&gt; and r&lt;!-- raw HTML omitted --&gt;educe the noise of all of the web 2.0&lt;!-- raw HTML omitted --&gt; tools out there. Well, first let me summarize what friendfeed does. When you sign up for friendfeed you add your web 2.0 accounts (currently supporting 35), some of note are: facebook, google talk, iLike, digg, twitter, flickr, picasa, youtube, yelp, and others. &lt;!-- raw HTML omitted --&gt;Friendfeed &lt;!-- raw HTML omitted --&gt;then creates a feed of you, so you can send the link to anyone and they can have a single source for updates to all of your web 2.0 interactions. &lt;!-- raw HTML omitted --&gt;Friendfeed &lt;!-- raw HTML omitted --&gt;does do a little more than that though, they attempt to filter out some of the noise by grouping your interactions together. For someone like Robert Scoble that on a given day could post 1000 tweets, you likely don&amp;rsquo;t want to see each one as a single line item. Friendfeed will group these and give you a short preview, then allow you to drill down.&lt;/p&gt;
&lt;p&gt;All-in-all &lt;!-- raw HTML omitted --&gt;friendfeed &lt;!-- raw HTML omitted --&gt;is a reasonable service and will continue to be talked about in the valley for the coming year and then spread elsewhere in the world. However there are some problems with the service. First is the lag time, due to the restrictions of some of the services they connect to, sometimes your feed is twenty minutes behind your original posts/updates. Though this is no fault of their own, but nonetheless something users will not be excited over.&lt;/p&gt;
&lt;p&gt;But more importantly &lt;!-- raw HTML omitted --&gt;friendfeed &lt;!-- raw HTML omitted --&gt;doesn&amp;rsquo;t have a concept of context. This would be my number one complaint that they&amp;rsquo;re not approaching web 3.0 yet. My most likely favorite site (well second to &lt;!-- raw HTML omitted --&gt;twitter&lt;!-- raw HTML omitted --&gt;), which will be reviewed next week, does a great job of understanding you and your context. When it recommends something it&amp;rsquo;s doing based on your history and it&amp;rsquo;s knowledge of you, and its often right. Indeed grouping messages together does have value, but until it can show me the messages I &lt;!-- raw HTML omitted --&gt;want&lt;!-- raw HTML omitted --&gt; to see and hide the ones I do not I won&amp;rsquo;t be amazed.&lt;/p&gt;
&lt;p&gt;Whether or not you should be on it strictly depends on your involvement in web 2.0 sites. If you&amp;rsquo;re on more than 5 of the sites listed in their 35, it may be a worthwhile investment. While it won&amp;rsquo;t make the noise quiet, it will likely reduce it by 10-20%, which is better than nothing.&lt;/p&gt;
&lt;p&gt;Other sites to watch out for (if they ever release): &lt;!-- raw HTML omitted --&gt;socialthing &lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;For those interested, &lt;!-- raw HTML omitted --&gt;my friendfeed&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 13 Jun 2008 09:37:30 GMT</pubDate><guid isPermaLink="true">/2008/06/12/Site-Review-Friendfeed/</guid></item><item><title>"Just-in-time" inserting rows into a database</title><link>https://www.databasesandlife.com/jit-inserting-rows-into-a-db/</link><description>&lt;p&gt;If you&amp;rsquo;re writing software using a database system such as MySQL, your code doesn&amp;rsquo;t have access to all the data at any point in time, you SELECT just the data you need to operate on.&lt;/p&gt;
&lt;p&gt;If you want to do some database-wide operation, you need to ask the database to do it, because you don&amp;rsquo;t have all the rows.&lt;/p&gt;
&lt;p&gt;When you want to enforce uniqueness, for example across a whole table (for example a document name needs to be unique), or across a particular part of a table (for example each user must have documents with unique names), you need to ask the database to do it, because, again, you don&amp;rsquo;t have all the rows.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 13 Jun 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/jit-inserting-rows-into-a-db/</guid></item><item><title>WebTek: Unique constraints and the `alreadyexists` error</title><link>https://www.databasesandlife.com/webtek-unique-constraints-and-the-alreadyexists-error/</link><description>&lt;p&gt;The only way to enforce unique constraints on a database table is by &lt;a href="https://www.databasesandlife.com/unique-constraints"&gt;asking the database to do it&lt;/a&gt;. Create the table, create the unique constraint, do an insert, and parse the error message if the insert failed, to see if it was a unique constraint violation. Any kind of &lt;code&gt;SELECT COUNT(*)&lt;/code&gt; before an insert will not work.&lt;/p&gt;
&lt;p&gt;This is now available automatically from WebTek.&lt;/p&gt;
&lt;p&gt;If the underlying table has any unique constraints, if they are violated, you want to let the user know of this. Unfortunately databases provide unhelpful constraint violation messages such as:&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 13 Jun 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/webtek-unique-constraints-and-the-alreadyexists-error/</guid></item><item><title>Short note on KGX Mutexes</title><link>https://tanelpoder.com/2008/06/12/short-note-on-kgx-mutexes/</link><description>&lt;p&gt;I received a question on what’s the point of the use of Mutexes for Oracle cursors in library cache. For short intro, I’m pasting one of my fairly recent answers in Oracle forums about Oracle mutexes here:&lt;/p&gt;
&lt;p&gt;In Oracle, latches and mutexes are different things and managed using different modules. KSL* modules for latches and KGX* for mutexes.&lt;/p&gt;
&lt;p&gt;General mutex operatins require less CPU instructions than latch operations (as they aren’t as sophisticated as latches and don’t maintain get/miss counts as latches do).&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 12 Jun 2008 18:01:14 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/06/12/short-note-on-kgx-mutexes/</guid></item><item><title>Oracle, Nulls and the empty string</title><link>https://www.databasesandlife.com/oracle-nulls-and-the-empty-string/</link><description>&lt;p class="intro"&gt;Oracle has an unusual feature, which attracts it a lot of criticism. If you try to insert the empty string into a column marked "not null", you get an error. The empty string is treated the same as "null" by Oracle.&lt;/p&gt;
&lt;p&gt;This is different to programming languages (and indeed other databases, at least MySQL), which means one has to be careful not to make a mistake when using a programming language to talk to the database. That it&amp;rsquo;s different from other systems is the main reason for the criticism.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 12 Jun 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/oracle-nulls-and-the-empty-string/</guid></item><item><title>iPhone 1.1</title><link>/2008/06/11/iPhone-1.1/</link><description>&lt;p&gt;So this week they announced what many expected was coming the iPhone 3g. However off the shelf it&amp;rsquo;s still not web  2.0, while a great device its not a web 2.0 device yet. Apple without a doubt understands user experience, but they do not fully grasp web 2.0 yet. Microsoft seems to even have a better understanding with the products they are looking to role out with Mesh and their enterprise social/collaboration tools. Lot&amp;rsquo;s of great applications were highlighted at the keynote, but only one of those talking about publishing content (with the exception of mobileme, which is a paid service). While there&amp;rsquo;s no doubt I will be getting the new iPhone when it is released in July, I will not talk about how it is a great web 2.0 device.&lt;/p&gt;
&lt;p&gt;If the application store is as open as Apple alludes to it being, then I can see how it will quickly become a web 2.0 device. Loopt is likely the strongest contender for helping to build a location based social network, and when they release for the iPhone can turn it into a web 2.0 device. I&amp;rsquo;ll be most anxious to see how the push based services they announced will help to allow developers to turn it into a web 2.0 device as well. If I had to have my application constantly up it just doesn&amp;rsquo;t work out as a full enabler for web 2.0. BUT if you allow notifications to be regularly pushed it just simplifies and increases the regularity of community and people staying in touch.&lt;/p&gt;
&lt;p&gt;The tipping point though for me at least will be if or when Apple finally allows video on the video. No, not playing video, but recording and streaming video. The kind of abilities available on a nokia n95, or available in my apple computer through iChat. When I can pull my phone out of my pocket and display to the world what I&amp;rsquo;m doing or where I&amp;rsquo;m at, you will have a device that allows you to communicate and most of all collaborate like any other before. It doesnt require more power than is already there, in fact I can record video on my jailbroken phone right now. The nokia n95 does a great job of streaming live video to qik, which is how I watched much of the Apple Keynote, it simply takes Apple finally understanding web 2.0 and embracing it.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Wed, 11 Jun 2008 22:54:32 GMT</pubDate><guid isPermaLink="true">/2008/06/11/iPhone-1.1/</guid></item><item><title>How not to be successful in the valley</title><link>/2008/06/10/How-not-to-be-successful-in-the-valley/</link><description>&lt;p&gt;While I may or may not know how to be successful in silicon valley, I feel pretty confident that I can point out a few ways to not be successful in valley terms. What follows is my thoughts on how you can best limit yourself to own, run, or be involved in the entrepreneurial spirit of the valley.&lt;/p&gt;
&lt;p&gt;The first is keeping yourself in a bubble, by not diving into the new technologies, new services, and new age of the web there&amp;rsquo;s little possibility you can be at the next steps of it. While I concede you don&amp;rsquo;t always have to explain it or understand it, you at least need to &lt;!-- raw HTML omitted --&gt;use it&lt;!-- raw HTML omitted --&gt;. The prestigious attitude of standing against something just for the sake of it won&amp;rsquo;t get you very far when people attempt to find you and communicate and can&amp;rsquo;t. There will be few individuals in the future similar to Jobs and Ellison that are a box of mysteries that no one has access to. Instead you will simply filter out noise that is relevant, but regardless your presence will be felt. It&amp;rsquo;s not only about making your life easier with useful tools like mint or dropbox and thinking about the next useful utility, but also about communicating and relating to others. Final thought &amp;hellip; facebook be on it, twitter use it (don&amp;rsquo;t understand it, don&amp;rsquo;t explain it, just use it), friendfeed (jury&amp;rsquo;s out, but you better know what it is).&lt;/p&gt;
&lt;p&gt;The second biggest thing you can do is to be patient. So many seem to sit around, wanting to have their own big thing, but are waiting for that one great idea to come to them. In most cases something probably does, the only problem is they&amp;rsquo;re not seasoned or practiced at building something. Yeah a few get lucky on the first try, but as a whole for those that are successful its due to persistence and not patience. Waiting for the right time in the market, the right time in your life, or just the right idea is wasting time you can&amp;rsquo;t get back. If you truly want to run something, start running something, and when the right idea does finally come along you&amp;rsquo;ll be prepared to build it up and run with it.&lt;/p&gt;
&lt;p&gt;Third thing you can do is not to network. Yeah it&amp;rsquo;s easier than before to build a product and get people to adopt it because of the web, but that doesn&amp;rsquo;t mean you can do it on your own. If you want to have a great idea with a lot of potential go to waste, sit at home on a Friday night, work away alone and you will have no worries about having too much traffic or too many users. Most likely your idea will only appeal to you and miss various features and miss the needs of some of the users that would have been happy to tell you what they wanted.&lt;/p&gt;
&lt;p&gt;Fourth, spend all your time networking. So you go to the events, meet the people, know people to fund you, have a great idea, and finally decide you&amp;rsquo;re going to actually start working on a product. The same night you sit down to code, you read of your product launching with someone else. With less funding, less knowledge, and less experience, all because they&amp;rsquo;ve actually been working on it. It&amp;rsquo;s a fine balance, but err on the side of not having &lt;!-- raw HTML omitted --&gt;every&lt;!-- raw HTML omitted --&gt; connection that you will need for a successful launch, and instead having a working demo or product to show to the connections that you do have.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Wed, 11 Jun 2008 04:48:53 GMT</pubDate><guid isPermaLink="true">/2008/06/10/How-not-to-be-successful-in-the-valley/</guid></item><item><title>Today’s lesson: Mind the symlinks</title><link>http://blog.danieljanus.pl/mind-the-symlinks/</link><description>&lt;div&gt;&lt;p&gt;Probably every day I keep learning new things, without even realizing it most of the time. The vast majority of them are minor or even tiny tidbits of knowledge; but even these might be worth noting down from time to time, especially when they are tiny pitfalls I’d fallen into and spent a couple of minutes getting out. By sharing them, I might hopefully prevent someone else for slipping and falling in.&lt;/p&gt;&lt;p&gt;So here’s a simple Unix question: If you enter a subdirectory of the current directory and back to &lt;code&gt;..&lt;/code&gt;, where will you end up? The most obvious answer is, of course, “in the original directory”, and is mostly correct. But is it always? Let’s see.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;nathell@breeze:~$ pwd
/home/nathell
nathell@breeze:~$ cd foobar
nathell@breeze:~/foobar$ cd ..
nathell@breeze:~$ pwd
/home/nathell
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So the hypothesis seems to be right. But let’s try doing this in Python, just for the heck of it:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;nathell@breeze:~$ python
Python 2.5.2 (r252:60911, Apr 21 2008, 11:12:42)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; import os
&gt;&gt;&gt; print os.getcwd()
/home/nathell
&gt;&gt;&gt; os.chdir("foobar")
&gt;&gt;&gt; os.chdir("..")
&gt;&gt;&gt; print os.getcwd()
/var
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Whoa, hang on! What’s that &lt;code&gt;/var&lt;/code&gt; doing there? Of course the one thing I didn’t tell you is that &lt;code&gt;foobar&lt;/code&gt; is not really a directory, but rather a symlink pointing to one (&lt;code&gt;/var/log&lt;/code&gt; in this case).&lt;/p&gt;&lt;p&gt;The corollary is that the shell builtin &lt;code&gt;cd&lt;/code&gt; is &lt;em&gt;not the same&lt;/em&gt; as Unix &lt;code&gt;chdir()&lt;/code&gt; (it is easily checked that both Perl and C exhibit the same behaviour). In fact, the shell builtin has an oft-forgotten command-line switch, &lt;code&gt;-P&lt;/code&gt;, which causes it to follow physical instead of logical path structure.&lt;/p&gt;&lt;p&gt;On a closing note: I have somewhat neglected the blog throughout the previous month, but I hope to revive it soon. It is not unlikely that such irregularities will recur.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Wed, 11 Jun 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/mind-the-symlinks/</guid></item><item><title>Debian vs. Ubuntu</title><link>https://danielpecos.com/2008/06/10/debian-vs-ubuntu/</link><description>&lt;p style="text-align: center;"&gt;
  &lt;img alt="" class="size-full" height="147" src="https://danielpecos.com/assets/2008/06/debian_vs_ubuntu.jpg" title="Debian vs. Ubuntu" width="325" /&gt;
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  &lt;strong&gt;¡30 minutos!&lt;/strong&gt; Eso es exactamente lo que he tardado en instalar &lt;a href="http://ubuntu.com"&gt;Ubuntu&lt;/a&gt; con incluso más funcionalidades de las que tenía en mi &lt;a href="http://debian.org"&gt;Debian&lt;/a&gt;.
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  ¿Por qué este cambio? Bueno, supongo que la edad tendrá algo que ver y uno ya no tiene tanta paciencia como antes. Y es que en mi humilde opinión, disponer de un sistema &lt;a href="http://debian.org"&gt;Debian&lt;/a&gt; con todo correctamente configurado, resulta una tarea tremendamente tediosa, además de que si deseas estar un poco al día con los programas que tienes instalados, te implica estar en una versión &lt;em&gt;testing&lt;/em&gt; o &lt;em&gt;unstable&lt;/em&gt; de &lt;a href="http://debian.org"&gt;Debian&lt;/a&gt;, con el riesgo que ello conlleva.
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  Concretamente y por poner un ejemplo de lo último que me había ocurrido con mi &lt;a href="http://debian.org"&gt;Debian&lt;/a&gt; &lt;em&gt;sid&lt;/em&gt;: tenía que asistir a unos talleres de programación, y tuve disponible toda la tarde anterio al día en cuestión, por lo que decidí actualizar el sistema.
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  Actualizo, y pierdo el driver propietario de NVidia (que lo instalé yo por mi cuenta ya que &lt;a href="http://debian.org"&gt;Debian&lt;/a&gt; no lo incluye y &lt;em&gt;&lt;a href="http://compiz.org"&gt;Compiz&lt;/a&gt; &lt;/em&gt;es un gustazo del que no se puede prescindir una vez lo pruebas). Total que lo reinstalo y resulta que la versión de &lt;em&gt;gcc &lt;/em&gt;que hay ahora en el sistema es una superior a la que utilicé para compilar el kernel en su día, por lo que no me deja compilar el módulo de nvidia. Solución: recompilar el kernel, y ya de paso, actualizarlo a la última versión disponible, que, casualidades de la vida, da errores de compilación con la versión nueva del &lt;em&gt;gcc&lt;/em&gt;. Mi gozo en un pozo.
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  Opto por downgradear el &lt;em&gt;gcc &lt;/em&gt;a la versión que tenía previamente, y además me quedo con la versión que utilizaba hasta el momento del kernel, pero seguía con el problema del módulo nvidia, por lo que vuelvo a intentar compilar el kernel, pero en este caso sin actualizar las fuentes. Compila todo sin problemas ¡uff!
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  Reinicio, y veo que no tengo conexión inalámbrica. Bueno, no es problema ya que el módulo lo compilo por separado, así que lo hago y lo cargo, pero por lo que sea, no consigo conectar a mi red wifi configurada con WPA (que en su momento ya me costó unas 3 o 4 horas configurar) :'(
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  Finalmente y tras rehacer toda la configuración que ya hice en su día, consigo volver a conectar. ¡Todo listo y actualizado para el taller!
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  Pues bien, llego al taller, me dan la configuración para conectar a la red WPA y no lo consigo, que no cunda el pánico&amp;#8230; Solución tumbar y levantar la interfaz wifi sucesivas veces (como durante unos 30 minutos) hasta que finalmente consigo IP, todo esto sin tocar configuración sino simplemente repitiendo el proceso una y otra vez. A todo esto, los compañeros de mesa arrancan su &lt;a href="http://ubuntu.com"&gt;Ubuntu&lt;/a&gt;, y con un pequeño desplegable seleccionan la red wifi y meten &lt;em&gt;user/password&lt;/em&gt; y a trabajar 😮
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  Sinceramente, situaciones como ésta te hacen plantearte si realmente merece la pena dedicar tantísimo tiempo a la configuración de un ordenador, en detrimento de tiempo de uso. Está claro que no está mal conocer cómo hacer estas cosas a &amp;#8220;&lt;em&gt;bajo nivel&lt;/em&gt;&amp;#8220;, pero llega un punto que resulta excesivo.
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  En resumen, ahora mismo soy un novato total en &lt;a href="http://ubuntu.com"&gt;Ubuntu&lt;/a&gt;, aunque es realmente parecido a &lt;a href="http://debian.org"&gt;Debian&lt;/a&gt;, por lo que no creo que me cueste adaptarme (aún así, si tengo en cuenta todo el tiempo ahorrado en configuraciones, por el mero hecho de haber optado por &lt;a href="http://ubuntu.com"&gt;Ubuntu&lt;/a&gt;, creo que dispongo de tiempo más que de sobra para adaptarme).
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  &lt;small&gt;PD: Soy usuario de &lt;a href="http://debian.org"&gt;Debian&lt;/a&gt; desde hace aproximadamente 8 años (allá por el 2000 instalé mi primera Potato) y por el momento la voy a mantener en mi servidor, que cariño todavía me queda hacia &lt;a href="http://debian.org"&gt;Debian&lt;/a&gt;.&lt;/small&gt;
&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
  ¡Un saludo a todos!
&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Tue, 10 Jun 2008 23:33:04 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2008/06/10/debian-vs-ubuntu/</guid></item><item><title>The value in content as a commodity</title><link>/2008/06/09/The-value-in-content-as-a-commodity/</link><description>&lt;p&gt;There was a recent post over at &lt;!-- raw HTML omitted --&gt;ReadWriteWeb&lt;!-- raw HTML omitted --&gt; about how content is becoming a commodity. I don&amp;rsquo;t believe many people would argue with this. While at first this wasn&amp;rsquo;t something I viewed in a positive light the more I think over it the more I see some value in it. As content does become more and more of a commodity the value in who is publishing or producing that content goes up. Five years ago if someone would have talked about some trade-secret they learned about from Google many people would have perked up and listened. Today however rumors spread faster than ever and before you know it google calendars now predicts when your appointments are, puts them in your calendar, and sends you text messages with directions 30 minutes before each meeting. While this may very well happen some day, I&amp;rsquo;m pretty sure they won&amp;rsquo;t be rolling it out next week.&lt;/p&gt;
&lt;p&gt;Now with so much content being produced and spread all over the place there is still some value in the quality of content (which there always has been). However, now there is much heavier focus on the source it came from. This comes to the principle of branding, and not necessarily like a wal-mart or coke brand, but a personal branding. My guess is that in the future, and by future I mean sooner than later (likely 2-3 years), personal brands as a whole will carry more weight than the companies they work for.&lt;/p&gt;
&lt;p&gt;Take for example &lt;!-- raw HTML omitted --&gt;Digg&lt;!-- raw HTML omitted --&gt;, when &lt;!-- raw HTML omitted --&gt;Digg &lt;!-- raw HTML omitted --&gt;makes some announcement or stance a few people listen and it does get noticed. But this is only when the content or opinion falls within the &lt;!-- raw HTML omitted --&gt;Digg &lt;!-- raw HTML omitted --&gt;world. Meanwhile when &lt;!-- raw HTML omitted --&gt;Kevin Rose&lt;!-- raw HTML omitted --&gt; makes an announcement many more people than just in the realm of &lt;!-- raw HTML omitted --&gt;Digg &lt;!-- raw HTML omitted --&gt;notice. He&amp;rsquo;s a prime example of someone that has built a personal brand, he&amp;rsquo;s name carries weight, and more so than just that of &lt;!-- raw HTML omitted --&gt;Digg&lt;!-- raw HTML omitted --&gt;, &lt;!-- raw HTML omitted --&gt;Pownce&lt;!-- raw HTML omitted --&gt;, or &lt;!-- raw HTML omitted --&gt;Revision3 &lt;!-- raw HTML omitted --&gt;(even though they are nearly one in the same).&lt;/p&gt;
&lt;p&gt;Some might view content becoming a commodity as a bit of a blow. I believe we will see more individuals emerge with an understanding of personal branding in part to help us sort through the content, but also to provide quality content in repeatable manners.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Tue, 10 Jun 2008 05:22:55 GMT</pubDate><guid isPermaLink="true">/2008/06/09/The-value-in-content-as-a-commodity/</guid></item><item><title>Generating lots of rows using connect by – safely!</title><link>https://tanelpoder.com/2008/06/08/generating-lots-of-rows-using-connect-by-safely/</link><description>&lt;p&gt;Every now and then I need to generate a large number of rows into some table.&lt;/p&gt;
&lt;p&gt;Not that I have any personal urge to do so, but you know, this is needed for some test cases and so on ;-)&lt;/p&gt;
&lt;p&gt;It’s quite well known that it’s possible to generate lots of rows using CONNECT BY LEVEL &amp;lt;= #rows syntax.&lt;/p&gt;
&lt;p&gt;However as the CONNECT BY LEVEL syntax is recursive by nature, it will consume more memory the more rows you query in one shot ( I think it was Mark Bobak who once posted this observation to Oracle-L, but I didn’t manage to find that thread anymore ).&lt;/p&gt;
&lt;p&gt;So, here’s a test case:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; select count(r)
  2  from (
  3     select rownum r from dual connect by rownum &amp;lt;= 100000000
  4  )
  5  /
        select rownum r from dual connect by rownum &amp;lt;= 100000000
                             *
ERROR at line 3:
ORA-04030: out of process memory when trying to allocate 44 bytes (kxs-heap-w,cursor work heap)

&lt;/pre&gt;
&lt;p&gt;After running for a while the server process run out of private memory, used for the CONNECT BY cursor work heap.&lt;/p&gt;
&lt;p&gt;Let’s investigate:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 08 Jun 2008 12:06:20 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/06/08/generating-lots-of-rows-using-connect-by-safely/</guid></item><item><title>Nearsighted Business</title><link>/2008/06/05/Nearsighted-Business/</link><description>&lt;p&gt;Adobe&amp;rsquo;s former CEO, Bruce Chizen, when asked &amp;lsquo;What advice do you have for new/young public companies?&amp;rsquo;, gave a response of &amp;lsquo;Go private&amp;rsquo;. While partially a joke he went on to elaborate something that many businesses seem to miss on. The main idea is that businesses are very nearsighted in their focus, they look at quarterly goals and in some cases yearly, but not where they want to be in 10 years. When companies become worried that head count is high they simply freeze hiring across the board without thinking of its ramifications. Good people, well great people are truly hard to find, and when a company enforces a blanket hiring freeze they miss out on those few great people that they truly need to grow. Meanwhile when they decide they have bandwidth for 1000 new employees they open the flood gates and let the first 1000 that can spell their name correctly in, because they can. This short term focus in the long run greatly limits the ability of what a company can achieve.&lt;/p&gt;
&lt;p&gt;In contrast a smaller company that is actually much more at risk of dying seems to have a better understanding of what their approach should be. While they may be understaffed and overworked, they firmly understand that they only have so many funds and therefore make wiser decisions when using them. The characteristics of the larger business and their short sighted focus leads to the cyclical performance that many experience over a few years, rather than a very steady growth they would like to maintain, and often leads to their end. A prime example would be IBM that laid off so many of their more talented people to lower their numbers years ago. As a result they lost their best workers and had many unexperienced individuals in there when they began hiring again. They are still working to catch back up to where they once were in the IT industry&amp;hellip;&lt;/p&gt;
&lt;p&gt;In part I wonder if being a private entity is really the only way to have the long term focus and not worry about quarterly earnings. Personally I have never been privy to this insight and may not be for some time, but I don&amp;rsquo;t foresee shareholders being patient enough to not punish a company if earnings are not so hot for a year or even a few quarters. So there may be nothing a large business can do about it, but I am surprised that more do not try.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 06 Jun 2008 04:26:27 GMT</pubDate><guid isPermaLink="true">/2008/06/05/Nearsighted-Business/</guid></item><item><title>Advanced Oracle Troubleshooting Guide, Part 5: Sampling V$ stuff with WaitProf. Really fast. Using SQL!</title><link>https://tanelpoder.com/2008/06/06/advanced-oracle-troubleshooting-guide-part-5-sampling-v-stuff-with-waitprof-really-fast-using-sql/</link><description>&lt;p&gt;I bet you thought I’ll be writing about direct SGA access?! ;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nope!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Direct SGA access has excellent troubleshooting potential (as long as you know the shared memory data structures), but it has one major drawback – very few companies have such tools already in place in their production systems.&lt;/p&gt;
&lt;p&gt;I have occasionally been called in to solve an urgent performance problem, &lt;strong&gt;happening right now&lt;/strong&gt; and it needs solving immediately! And did I mention, these are critical production systems. Where you can’t just install binary executables freshly downloaded off internet. In fact you would want to diagnose the issue with minimal impact and changes required to those production environments (and that leaves sql tracing out the first round troubleshooting tools for me as well!)&lt;/p&gt;
&lt;p&gt;So, I’ve developed myself a toolset for such purpose, &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/snapper.sql" target="_blank"&gt;Snapper&lt;/a&gt; and &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/sw.sql" target="_blank"&gt;sw.sql&lt;/a&gt; and some process stack reading techniques I already have introduced in my blog.&lt;/p&gt;
&lt;p&gt;Next in line is &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/waitprof.sql" target="_blank"&gt;waitprof.sql&lt;/a&gt; which is a high-frequency V$SESSION_WAIT sampler – implemented in plain SQL (not PL/SQL).&lt;/p&gt;
&lt;p&gt;Waitprof is basically a sampling session wait profiler. It’s like running a select against V$SESSION_WAIT in a very tight loop and aggregating results – but I have used a trick to do all this in plain SQL, which gives me performance advantage over PL/SQL based loops. Waitprof is able to sample V$SESSION_WAIT for a session up to 100 000 times per second!&lt;/p&gt;
&lt;p&gt;This depends on your hardware of course and Oracle version too, but normally you’ll get 50-70kHz sampling rate with it.&lt;/p&gt;
&lt;p&gt;Ok, you want to see an example? ;-)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 05 Jun 2008 20:11:42 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/06/06/advanced-oracle-troubleshooting-guide-part-5-sampling-v-stuff-with-waitprof-really-fast-using-sql/</guid></item><item><title>Blurring the lines, the flip side</title><link>/2008/06/04/Blurring-the-lines-the-flip-side/</link><description>&lt;p&gt;So yesterday I posted around blurring the lines around your personal and professional life. Today I&amp;rsquo;d like to discuss a bit of the opposite of when companies blur the lines. Hopefully you don&amp;rsquo;t, but at first you may think how is this possible. Well first let me highlight some of what many feel are negative pieces, such as when an HR Rep who went to the same university as you looks up your facebook profile. You thinking this is private to friends at school may not regularly monitor the content that goes up there. This specific case is a very interesting one, and for the moment I&amp;rsquo;d like to stay clear of it.&lt;/p&gt;
&lt;p&gt;Instead I&amp;rsquo;d like to focus on some of the areas where businesses undoubtedly should improve, and some notable ones that are doing that very well. I first would like to take (as per my usual) an example from twitter. Twitter is many things for many people, but it is extremely common to find people on twitter ranting about a particular service. While I may complain all I want about &lt;!-- raw HTML omitted --&gt;Comcast &lt;!-- raw HTML omitted --&gt;to my friends, they have little ability to do much to counteract this. But when I do it on &lt;!-- raw HTML omitted --&gt;twitter &lt;!-- raw HTML omitted --&gt;they do, and &lt;!-- raw HTML omitted --&gt;Comcast &lt;!-- raw HTML omitted --&gt;is one example of a company that is taking a very pro-active approach to managing their online presence. I take an example of a few months ago, when internet had been out at Michael Arrington&amp;rsquo;s house, who is the founder of &lt;!-- raw HTML omitted --&gt;TechCrunch&lt;!-- raw HTML omitted --&gt;. He twittered about this outage, and had a personal phone call from an executive in Philadelphia a few hours later. Sure, he&amp;rsquo;s a noticeable guy so they responded to him. To me the attention getter was when someone called comcast&amp;rsquo;s bluff they they only follow the important people, and any old average joe doesn&amp;rsquo;t get a response. That particular average old joe did, saying they make the best effort they can to reach out to everyone (&lt;!-- raw HTML omitted --&gt;HR Block&lt;!-- raw HTML omitted --&gt;, &lt;!-- raw HTML omitted --&gt;Southwest &lt;!-- raw HTML omitted --&gt;are also doing this quite well).&lt;/p&gt;
&lt;p&gt;The other is a little less about blurring the lines, but I still think a great example of a business stepping out of their traditional roles. This one was a story relayed to me by a co-worker. &lt;!-- raw HTML omitted --&gt;Zappos&lt;!-- raw HTML omitted --&gt;, which is an online shoe company primarily, has a great return policy. In any case, if you don&amp;rsquo;t like the shoe after you receive it, just return it, and they&amp;rsquo;ll even pay for the shipping. This specific incident a woman&amp;rsquo;s husband had recently passed away and she was attempting to return the shoes. She gave the reasoning behind it, and the customer service rep proceeded to go an extra step and send flowers to the funeral. While to some this might be offensive, or at the very least outside the bounds of a normal company, it shoes a company actually caring for people, which wasn&amp;rsquo;t their core business. While I won&amp;rsquo;t go into details of how well this turned out for the company, it&amp;rsquo;s a great example of a company blurring the lines.&lt;/p&gt;
&lt;p&gt;In the future I anticipate we will see more and more of companies doing this, actually caring about what someone says/thinks/feels not only about the company, but personally as well. As we get to this it will become less about the buck and more about meeting needs.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 05 Jun 2008 09:23:33 GMT</pubDate><guid isPermaLink="true">/2008/06/04/Blurring-the-lines-the-flip-side/</guid></item><item><title>FileTree update (v1.1)</title><link>https://arashpayan.com/blog/2008/06/04/filetree-update-v11/</link><description>I recently received an email from Ryan McFall that he is using FileTree, and he noticed that the FileTree doesn&amp;rsquo;t actually display everything accurately on Windows. The shortcoming was in the fact that Windows explorer displays all directories first before displaying files in a tree. He fixed the problem, and kindly sent the changes back to me for posting on the website GitHub.
I hope this makes FileTree useful for many more people.</description><author>Arash Payan</author><pubDate>Thu, 05 Jun 2008 07:55:00 GMT</pubDate><guid isPermaLink="true">https://arashpayan.com/blog/2008/06/04/filetree-update-v11/</guid></item><item><title>Mixing personal and professional, Transparency</title><link>/2008/06/04/Mixing-personal-and-professional-Transparency/</link><description>&lt;p&gt;Someone recently commented on by tweeting after having given my two weeks notice to my company, that it may not have been the best idea. So as a result I&amp;rsquo;d like to post my reasoning and thought why I feel it is actually a great idea. Even a month before my giving two weeks notice many knew it was likely going to happen, and I personally hope that this allowed those that may have needed to, to better plan accordingly. This also I believe allows me to be more evaluated on my actual merit in some terms. You see if I made it clear that I might be looking at another opportunity, and was not wanted I believe there may have been good reason hints would have been given that I should look harder and more. Instead in was a reasonable bit of the opposite.&lt;/p&gt;
&lt;p&gt;However the larger point of what I&amp;rsquo;d like to illustrate is that many of those that I work with I view as more than strictly co-workers. It&amp;rsquo;s not uncommon to meet up with them on a Saturday for drinks or to just hang out. Meanwhile I have many friends who I do not talk to on a daily or even weekly basis, yet still like to keep them informed of what I&amp;rsquo;m up to, just as I look to follow how they are. To me twitter and other social tools are this medium. While some may prefer to keep professional and personal strictly separate entities, I have no problem with the two blurring. In fact I believe it adds to what I bring to the table in both contexts. By no means do I live and breath work, but to me my work is not only a job either. There are times after 5 or 6 o&amp;rsquo;clock that I will spend reading about business and technology, in short because they interest me. Though there are times between 8 and 5, that I will have an IM conversation un-work related, or post tweets available to the rest of the world.&lt;/p&gt;
&lt;p&gt;Hopefully some may value this transparency, though if you do not, dont add me on facebook, dont follow me on twitter. You&amp;rsquo;ll still get the formal good-bye email with the rest of the group, however, I wouldn&amp;rsquo;t expect you to get updates in 5 years, though that may be what you hope for. Personally I like to keep in touch with those that I enjoy working with, but also care to know about how they are doing with regards to their personal life. To me blurring the lines makes the relationships deeper and life more rewarding&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Wed, 04 Jun 2008 12:57:16 GMT</pubDate><guid isPermaLink="true">/2008/06/04/Mixing-personal-and-professional-Transparency/</guid></item><item><title>Use fixed-width fonts for data entry fields</title><link>https://www.databasesandlife.com/fixed-width-fonts-for-data-entry/</link><description>&lt;p&gt;I&amp;rsquo;m sure that &lt;a href="http://www.joelonsoftware.com/" rel="noopener noreferrer" target="_blank"&gt;Joel on Software&lt;/a&gt; is well read: his &lt;a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000057.html" rel="noopener noreferrer" target="_blank"&gt;views on user interfaces&lt;/a&gt; are certainly well worth reading.&lt;/p&gt;
&lt;p&gt;But there&amp;rsquo;s a point hidden down at the end of &lt;a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000063.html" rel="noopener noreferrer" target="_blank"&gt;Chapter 7&lt;/a&gt; which is well worth repeating. And that&amp;rsquo;s that using a wide fixed-width font for text entry is much better than a thin proportionally-spaced font.&lt;/p&gt;
&lt;p&gt;Recently I noticed that the invitation panel on Google Spreadsheets, allowing you to type in email addresses of people to invite to collaboratively edit the document, used a fixed-width font. And conveniently they didn&amp;rsquo;t alter their word processing program&amp;rsquo;s similar facility, making it easy to compare the two.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 04 Jun 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/fixed-width-fonts-for-data-entry/</guid></item><item><title>Adobe came to play</title><link>/2008/06/03/Adobe-came-to-play/</link><description>&lt;p&gt;I&amp;rsquo;m pretty sure I&amp;rsquo;ve said it before, but in case I haven&amp;rsquo;t voiced it on here yet, watch out for Adobe. They look like they&amp;rsquo;re firing on all cylinders lately and don&amp;rsquo;t look to be slowing down. At Adobe MAX 2007, I saw a preview of many things that were coming up for them. Though from already having worked with Adobe Flex was a fan, at least of the Flex and AIR products. Adobe now seems to be doing as much to drive adoption of the products as they expect from developers.&lt;/p&gt;
&lt;p&gt;First came the acquisition of Buzzword, which is a Flex based word application. With additional abilities for users to collaborate, which in my opinion were already slightly superior to Google&amp;rsquo;s word equivalent. Then came Adobe Photoshop Express, this was in a sense a lighter version of Adobe Photoshop, only available online and best of all for &lt;!-- raw HTML omitted --&gt;free&lt;!-- raw HTML omitted --&gt;. While impressive in their own rights, they really just did a great job of showcasing the power of flex.&lt;/p&gt;
&lt;p&gt;Now with acrobat.com adobe seems to have hit a home run. While it may only be a landing place for their in house web applications, it&amp;rsquo;s a landing place that points to a lot of great tools. Namely adobe connect, which at least matches if not passes every virtual meeting tool I&amp;rsquo;ve ever used. With well integrated white-boarding, screen sharing, file sharing, web cams, and dial-in support as well, it will surely be my choice for online meetings in the near future. Once the other tools such as buzzword and potentially other applications others such as google and microsoft will have to very much watch out.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Tue, 03 Jun 2008 10:30:10 GMT</pubDate><guid isPermaLink="true">/2008/06/03/Adobe-came-to-play/</guid></item><item><title>Performance Tools Quick Reference Guide</title><link>https://tanelpoder.com/2008/06/03/performance-tools-quick-reference-guide/</link><description>&lt;p&gt;There’s a nice Metalink Note &lt;strong&gt;438452.1&lt;/strong&gt; about various less known Oracle performance tuning utilities.&lt;/p&gt;
&lt;p&gt;If you haven’t heard about things like StackX, LTOM, HangFG, SQLTXPLAIN, OS_Watcher or OPDG then it’s time to check this note out! :)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 02 Jun 2008 21:09:23 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/06/03/performance-tools-quick-reference-guide/</guid></item><item><title>Advanced Oracle Troubleshooting Guide, Part 4: Diagnosing a long parsing issue</title><link>https://tanelpoder.com/2008/06/03/advanced-oracle-troubleshooting-guide-part-4-diagnosing-a-long-parsing-issue/</link><description>&lt;p&gt;There was a recent thread in &lt;a href="http://forums.oracle.com/forums/thread.jspa?threadID=662576&amp;amp;start=0&amp;amp;tstart=0" target="_blank"&gt;Oracle Forums&lt;/a&gt; about a session getting stuck somewhere when a specific SQL was issued. The SQL executed did not return at all unless ORDERED hint was used. Even the EXPLAIN PLAN command (which only parses the statement, doesn’t execute it) did never return.&lt;/p&gt;
&lt;p&gt;Classic tracing + tkprof techniques didn’t show much (just some recursive queries consuming insignificant amounts of time).&lt;/p&gt;
&lt;p&gt;The proven V$SESSION_WAIT sampling technique didn’t reveal anything as it showed the session being constantly on CPU (the wait state = ‘WAITED KNOWN TIME’ which means session is on CPU) and SEQ# didn’t increase (which means that wait state did not change over time).&lt;/p&gt;
&lt;p&gt;Due the symptoms described above I was well prepared to troubleshoot this issue. This looks exactly like one of the troubleshooting use cases I demonstrate in of my &lt;a href="https://tanelpoder.com/seminar/" target="_blank"&gt;Advanced Oracle Troubleshooting class&lt;/a&gt; (nice embedded advertisment, huh? ;)&lt;/p&gt;
&lt;p&gt;In such a case where tracing and V$ views don’t provide any useful information about what the session is doing, I normally look into few stack traces of the server process. In this case I asked the poster to do this and here is the result:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 02 Jun 2008 21:00:38 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/06/03/advanced-oracle-troubleshooting-guide-part-4-diagnosing-a-long-parsing-issue/</guid></item><item><title>Snapper shortcut</title><link>https://tanelpoder.com/2008/06/02/snapper-shortcut/</link><description>&lt;p&gt;I have a (very) small script called &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/sn.sql" target="_blank"&gt;sn.sql&lt;/a&gt; which I use as a wrapper around snapper (maybe I should’ve called it Snapper Wrapper but it’s too long name for the purpose :)&lt;/p&gt;
&lt;p&gt;The idea is to have to type less when running Snapper with default options (take 1 snapshot, output to screen and display Session tats,Wait events and Time model stats).&lt;/p&gt;
&lt;p&gt;Whenever there’s a performance issue with a session I first quickly run &lt;strong&gt;@sn  &lt;/strong&gt;, for example:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 02 Jun 2008 18:05:02 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/06/02/snapper-shortcut/</guid></item><item><title>Changing etiquette?</title><link>/2008/06/02/Changing-etiquette/</link><description>&lt;p&gt;A recent conversation of someone that was offended when the were introduced to someone new, then was not greeted first since they were a female brought what follows to mind. The above is a train of thought that came from a 70 year old military wife. I do not believe this is common practice today and is quite rarely found as the common etiquette, but nonetheless I think what is proper etiquette in business is changing quite rapidly. Though I&amp;rsquo;m not sure if &lt;!-- raw HTML omitted --&gt;all&lt;!-- raw HTML omitted --&gt; of the older ideas and principles have gone away.&lt;/p&gt;
&lt;p&gt;I take as a first example zuckerburg, whom is a notoriously difficult interview. Not because he keeps things hidden, or is sealed tight about the company, but rather that his soft skills are not his strength. His strength is building a web product that millions of people find worthwhile to divulge hours of their day into it.&lt;/p&gt;
&lt;p&gt;Even two years ago when you were disgruntled with a company you may have gotten a few drinks in you and talked to a friend about your displeasure. But it certainly was not made fully public for anyone to see. At best you could only hope you were simply privy to things that would be brought to the publics eye from a larger misdoing either legally or that a mass-crowd found a problem with. But for simply being overworked, underpaid, or in some other odd way mistreated there was no politically correct outlet to speak through.&lt;/p&gt;
&lt;p&gt;However in the past years it has become extremely common for those that are still employed, or were employed to voice their complaints and bring to light the details that were once hidden. I think of Zed Shaw&amp;rsquo;s rant on rails which calls out specific companies, or an older blog the diary of a mac genius, who gave detailed behind the scenes information of an apple customer support genius bar. While I&amp;rsquo;ll concede for the mass majority if it&amp;rsquo;s published it&amp;rsquo;s doesn&amp;rsquo;t mean its consumed, so it&amp;rsquo;s not a dramatic effect on any single business, I still find it hard to believe that this overall shift of users freely publishing is not going to be able to be stopped by companies. As we approach web 3.0 and have a better ability to pull in a larger base of information that&amp;rsquo;s more relevant this information may become more and more helpful to users.&lt;/p&gt;
&lt;p&gt;Regardless of the effects, it seems the standard procedures for what is proper etiquette are changing. Whether its talking about your place of employment, or HR checking out you&amp;rsquo;re facebook profile to see if you&amp;rsquo;d be a risk for the company, the lines are being blurred from both sides and the barriers that once existed are now being torn down.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Mon, 02 Jun 2008 16:16:31 GMT</pubDate><guid isPermaLink="true">/2008/06/02/Changing-etiquette/</guid></item><item><title>Exploring Subjectivity, as Seen in The Curious Incident of the Dog in the Night-Time—Photo Essay [PDF, 1.2 MB]</title><link>https://www.davidschlachter.com/writings/photoessay.pdf</link><description>Photo essay on subjectivity, written as a novel study project. Photos and analysis.</description><author>David Schlachter</author><pubDate>Sat, 31 May 2008 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/photoessay.pdf</guid></item><item><title>Suzuki GSXR</title><link>https://www.mikekasberg.com/blog/2008/05/30/suzuki-gsxr.html</link><description>&lt;p&gt;I created this Suzuki GSXR model using Autodesk Maya as part of the &lt;a href="https://sites.google.com/view/digital-evolutions/main"&gt;Digital Evolutions&lt;/a&gt; 3D modeling &amp;amp; animation program at Smoky Hill High School.&lt;/p&gt;

&lt;div class="text-center"&gt;

&lt;/div&gt;</description><author>Mike Kasberg's Blog</author><pubDate>Sat, 31 May 2008 02:08:10 GMT</pubDate><guid isPermaLink="true">https://www.mikekasberg.com/blog/2008/05/30/suzuki-gsxr.html</guid></item><item><title>Querying the current tracefile name, using SQL – with tracefile_identifier</title><link>https://tanelpoder.com/2008/05/31/querying-the-current-tracefile-name-using-sql-with-tracefile_identifier/</link><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;/strong&gt; In Oracle 11g upwards you can use V$DIAG_INFO for getting your own session’s trace file name too (&lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/diag.sql" target="_blank"&gt;diag.sql&lt;/a&gt; script). But on earlier versions or if you want to see the current tracefile name of another, you still need to use the V$PROCESS approach below. Note that V$PROCESS in 11g (or 11.2?) has a column TRACEFILE that shows the entire path+name of a process tracefile (however there seems to be a bug in 12.1.0.2 where the field is always null).&lt;/em&gt;&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 30 May 2008 20:41:22 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/05/31/querying-the-current-tracefile-name-using-sql-with-tracefile_identifier/</guid></item><item><title>Oracle Troubleshooting with Snapper – detecting who’s causing excessive redo generation</title><link>https://tanelpoder.com/2008/05/30/oracle-troubleshooting-with-snapper-detecting-whos-causing-excessive-redo-generation/</link><description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; As this post was written many years ago, you should check out newer Snapper articles/videos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tanelpoder.com/2013/02/18/snapper-v4-02-and-the-snapper-launch-party-video/" target="_blank"&gt;/2013/02/18/snapper-v4-02-and-the-snapper-launch-party-video/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My friend asked today a question that how to identify why his Oracle 9.2 database has suddenly started generating loads more redo than usual.&lt;/p&gt;
&lt;p&gt;So obviously I recommended him Snapper as first thing, it’s perfect for ad-hoc analysis like that! ( I know I sound biased but if you haven’t used Snapper yet, then now is the time! :)&lt;/p&gt;
&lt;p&gt;So, I asked him to run Snapper on all sessions of the instance with 10 second interval and find the session with highest “redo size” delta figure.&lt;/p&gt;
&lt;p&gt;However as a normal production database has loads of sessions in it and as each session can return tens of statistic rows, then you might need to do some post-processing of output data to get only the “redo size” numbers.&lt;/p&gt;
&lt;p&gt;So I figured that why not do the filtering in Snapper itself, so I made the small additions and released &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/snapper.sql" target="_blank"&gt;Snapper v1.07&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Usage is simple:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; @snapper out,gather=s,&lt;strong&gt;sinclude=%redo_size%&lt;/strong&gt; 10 1 &lt;strong&gt;"select sid from v$session"&lt;/strong&gt;

-- Session Snapper v1.07 by Tanel Poder (  )

---------------------------------------------------------------------------------------------------------------------------------------------
HEAD,     SID, SNAPSHOT START   ,  SECONDS, TYPE, STATISTIC                               ,         DELTA,  DELTA/SEC,     HDELTA, HDELTA/SEC
---------------------------------------------------------------------------------------------------------------------------------------------
DATA,     &lt;strong&gt;129&lt;/strong&gt;, 20080530 09:07:20,       10, STAT, redo size                               ,     180595100,   18059510,     180.6M,     &lt;strong&gt;18.06M&lt;/strong&gt;
DATA,     166, 20080530 09:07:20,       10, STAT, redo size                               ,        790912,      79091,    790.91k,     79.09k
DATA,     167, 20080530 09:07:20,       10, STAT, redo size                               ,        889796,      88980,     889.8k,     88.98k
--  End of snap 1

PL/SQL procedure successfully completed.

&lt;/pre&gt;
&lt;p&gt;And in the result you already see that there is a single session which generates significantly more redo than others (btw this is an artificially generated example). In my friend’s case there also happened to be a single session , scheduled through DBMS_JOB, contributing to most of the redo generation. Once the troublemaker was identified, the problem could be fixed.&lt;/p&gt;
&lt;p&gt;There are few things to note:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 30 May 2008 17:13:38 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/05/30/oracle-troubleshooting-with-snapper-detecting-whos-causing-excessive-redo-generation/</guid></item><item><title>Is web 2.0 more utopian?</title><link>/2008/05/29/Is-web-2.0-more-utopian/</link><description>&lt;p&gt;I recently read an article on Techcrunch on how web 2.0 had undoubtedly made an impact, but had yet to truly make money. From my stance they is really one way to make money on the web, which is through advertising (paid subscription services are dying). This can either be done through a simple banner ad, or something that can more easily be deemed a qualified lead or referral. Ads will always be there, but if web 2.0 is to start making money it must be on improving the measurement and throughput of qualified leads.&lt;/p&gt;
&lt;p&gt;Without going into too much detail on referrals and qualified leads I&amp;rsquo;d like to mention a great example of this, mint.com. Mint offers a great free service of managing your personal finances. Throwing out security and sharing your data (another time another place), they do a great job of categorizing and monitoring your finances. In exchange they have access to your spending history. So you give them your spending history, in exchange that have hundreds of thousands of peoples data, such as what credit card you use, who your cable provider is. With this mint does what I believe is a good job of generating referrals, but telling you how much you can save by switching from Internet provider A at $60 per month to Internet provider B at $30 per month. They&amp;rsquo;re not just giving ads for the sake of it, they&amp;rsquo;re giving me something that I would actually want.&lt;/p&gt;
&lt;p&gt;Does this lead to higher or lower revenue? We&amp;rsquo;ll this I&amp;rsquo;m not sure of, but with regards to advertising, feel this is a more better fit for a user. I only get things that the service provider thinks &lt;!-- raw HTML omitted --&gt;I want &lt;!-- raw HTML omitted --&gt;not what they &lt;!-- raw HTML omitted --&gt;think they can sell me&lt;!-- raw HTML omitted --&gt;. As we reach more of the semantic understanding of the web I believe this will prevail and make web 2.0 more profitable, but it cannot be done with web 2.0 alone.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 30 May 2008 03:36:50 GMT</pubDate><guid isPermaLink="true">/2008/05/29/Is-web-2.0-more-utopian/</guid></item><item><title>Senior Demo Reel</title><link>https://www.mikekasberg.com/blog/2008/05/29/senior-demo-reel.html</link><description>&lt;p&gt;This is my senior demo reel for the &lt;a href="https://sites.google.com/view/digital-evolutions/main"&gt;Digital Evolutions&lt;/a&gt; 3D modeling &amp;amp; animation program at Smoky Hill High School.&lt;/p&gt;

&lt;div class="text-center"&gt;

&lt;/div&gt;</description><author>Mike Kasberg's Blog</author><pubDate>Fri, 30 May 2008 02:08:10 GMT</pubDate><guid isPermaLink="true">https://www.mikekasberg.com/blog/2008/05/29/senior-demo-reel.html</guid></item><item><title>Other Cyclists.</title><link>https://rob.sh/post/21/</link><description>&lt;p&gt;Please make sure you understand hand signals. And don&amp;rsquo;t try and half wheel other people, it causes crashes!&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;center&gt;
&lt;a href="https://cdn.rob.sh/img/bent_chainring.jpg"&gt;&lt;img src="https://cdn.rob.sh/img/bent_chainring_thumb.jpg" /&gt;&lt;/a&gt;&lt;a href="https://cdn.rob.sh/img/chain_damage.jpg"&gt;&lt;img src="https://cdn.rob.sh/img/chain_damage_thumb.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/center&gt;
&lt;br /&gt;
Snapped chain. Bent chainring. Bent crank spider. Bruises. Damn.</description><author>rob.sh</author><pubDate>Tue, 27 May 2008 20:22:24 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/21/</guid></item><item><title>IBM hard drive from 1981</title><link>https://jasoneckert.github.io/myblog/ibm-hard-drive-1981/</link><description>&lt;p&gt;&lt;img alt="3380a" src="3380a.png#right" title="3380a" /&gt;&lt;/p&gt;
&lt;p&gt;This picture is of an IBM Model 3380 Hard Drive from 1981. Because it looks like a nuclear device or jet engine, I was able to convince my neighbour that I was generating my own nuclear power from now on, as well as the people at the Chrysler convention that it was an electric engine for a transport truck (I was passing them when going to a high school tech presentation at Bingemans where I used this as a fun prop). My pranks know no bounds!&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Tue, 27 May 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/ibm-hard-drive-1981/</guid></item><item><title>Back to the World of Warcraft, and...</title><link>https://benovermyer.com/blog/2008/05/back-to-the-world-of-warcraft-and/</link><description>&lt;p&gt;I spent the past month playing World of Warcraft with my fiancée and Star Wars Galaxies with the IA. WoW is actually fun now that I've stopped trying to just gain levels. I think the QuestHelper add-on helps... it makes questing a lot easier, and reduces the amount of down time I have. That, and my fiancee's advice to only do yellow quests and to abandon green ones immediately. However, as of Friday I've started a month-long experiment in fitness and finance, and part of it is the temporary cancellation of both of my MMO subscriptions. Catch you in 30!&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Mon, 26 May 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/05/back-to-the-world-of-warcraft-and/</guid></item><item><title>Performance and Scalalability Improvements in Oracle 10g and 11g</title><link>https://tanelpoder.com/2008/05/25/performance-and-scalalability-improvements-in-oracle-10g-and-11g/</link><description>&lt;p&gt;I have uploaded the slides of my “Performance and Scalalability Improvements in Oracle 10g and 11g” presentation &lt;a href="https://tanelpoder.com/files/Oracle_Performance_Scalability_10g_11g.pdf" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 25 May 2008 15:08:27 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/05/25/performance-and-scalalability-improvements-in-oracle-10g-and-11g/</guid></item><item><title>Using autonomous transactions for sleeping</title><link>https://tanelpoder.com/2008/05/25/using-autonomous-transactions-for-sleeping/</link><description>&lt;p&gt;There was a question in a recent &lt;a href="http://www.freelists.org/archives/oracle-l/05-2008/msg00579.html" target="_blank"&gt;Oracle-L thread&lt;/a&gt; about various uses of autonomous transactions.&lt;/p&gt;
&lt;p&gt;Autonomous transactions can be very useful for a PL/SQL application logging, but sometimes they are also abused to cope with bad application design (like avoiding mutating table errors in triggers etc).&lt;/p&gt;
&lt;p&gt;I’m not going to start on that topic here though, but instead presenting another case where autonomous transactions have helped me to work around a problem. It’s more a hack than a real solution though, but may be useful for someone else too.&lt;/p&gt;
&lt;p&gt;My Snapper tool requires execute rights on DBMS_LOCK in order to sleep between snapshots. Sometimes when troubleshooting an urgent performance issue, I have had access only to some kind of application support account, without permissions to execute DBMS_LOCK.SLEEP. And sometimes it takes too long to get those rights granted by corporate DBAs.&lt;/p&gt;
&lt;p&gt;So one workaround I’ve used so far is creating a fake DBMS_LOCK.SLEEP proc in the local support schema along with one dummy table and use a combination of SELECT FOR UPDATE and autonomous transactions to sleep for short time.&lt;/p&gt;
&lt;p&gt;The code is very simple:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 25 May 2008 12:52:45 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/05/25/using-autonomous-transactions-for-sleeping/</guid></item><item><title>Consuming versus Publishing</title><link>/2008/05/22/Consuming-versus-Publishing/</link><description>&lt;p&gt;I&amp;rsquo;m finding it a growingly interesting balance in consuming versus producing information. I also feel with the increase in availability of information, the barrier to entry in so many areas are shrinking rapidly. I think of some of the areas where the barriers to entry are typically much higher. 15 years ago we would have never seen a 23 year old as the CEO of a company valued at 15 billion dollars. While my vantage point even within the business market is narrow, as I think in relation to technology I still believe it applies across the board. Now it no longer takes 20 years in business , learning from your experiences and mistakes, to have the knowledge and ability to run a large company. In fact, in some cases that may be a hinderance, because you will expect that your previous experiences have prepared you to handle the situation, which you may not view as different. The difference in today&amp;rsquo;s world is that businesses, the ones that will at least be around in 5, 10, and 20 years are the ones that manage to adapt to change extremely quickly.&lt;/p&gt;
&lt;p&gt;But I digress, I&amp;rsquo;m starting to find it increasingly more difficult to determine what the balance is between creating and consuming content. I read on average 200 blog posts per day, while posting an average of two. I see and read an average of 500 tweets per day, while posting an average of 4. I listen to and watch an average of 3 podcasts per day, and publish none. Meanwhile I find myself having a variety of conversations about all the things I read, yet few of these are web communications, or at best over IM. While there should always be a learning curve in getting familiar with an industry space or domain expertise, and what point should it tip so you can become a publisher of content.&lt;/p&gt;
&lt;p&gt;More specifically I&amp;rsquo;m curious what the current actual positions of those are that consume and those that publish both currently and from a long term perspective. You see because I consume content does it make me more likely to take and readily apply that. Or because I am polishing and publishing content does it mean when I interact with others it will be more polished, perhaps allowing me to sell better.&lt;/p&gt;
&lt;p&gt;Really it&amp;rsquo;d be great to get some sort of focus group stats around this. . .
Technorati Tags: &lt;!-- raw HTML omitted --&gt;content&lt;!-- raw HTML omitted --&gt;, &lt;!-- raw HTML omitted --&gt;twitter&lt;!-- raw HTML omitted --&gt;, &lt;!-- raw HTML omitted --&gt;blogs&lt;!-- raw HTML omitted --&gt;, &lt;!-- raw HTML omitted --&gt;publish&lt;!-- raw HTML omitted --&gt;, &lt;!-- raw HTML omitted --&gt;consume&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 23 May 2008 09:16:08 GMT</pubDate><guid isPermaLink="true">/2008/05/22/Consuming-versus-Publishing/</guid></item><item><title>Reduced noise in exchange for transparency</title><link>/2008/05/21/Reduced-noise-in-exchange-for-transparency/</link><description>&lt;p&gt;As I&amp;rsquo;ve become more or less a web 2.0 whore. I&amp;rsquo;ve also had a great interest in web 3.0 and what it will fortell. Most believe natural language and the semantic web will play a large role in that. And while it will that will not be the end result of web 3.0. While web 2.0 included AJAX and Flex, that really doesn&amp;rsquo;t fully encompass what they are. Web 3.0 to sum it up most simply will be about reducing the noise of the web. While I can take very little credit for this idea as I have heard others say the same or at least similar things, there is an interesting side that I believe most have not thought about.&lt;/p&gt;
&lt;p&gt;You see, in order to reduce the noise of the web you have to know about me and what I consider noise. In order for someone to do this we have to be willing to give up information about ourselves, some of which people consider private. I still recall a conversation which I posted on a few days ago about users not wanting to give out their private information. I believe this attitude is very quickly becoming old hat, while there are individuals that will stay this way for several decades as a collective whole it&amp;rsquo;s a fleeting attitude. I think for example of mint.com which I willingly give all of my financial account information to in order for them to simplify my life. Instead of a massive collection of emails and notifications I get summarized views from them. While there still is the chance for noise as I could receive text messages about every transaction that happens, I have the ability now to filter that noise.&lt;/p&gt;
&lt;p&gt;Noise is something that some people love, take scoble for example who loves having hundreds of twitter messages fly across his screen every few minutes. Though for the vast majority to reduce the noise to allow us to accomplish more in a day, but also have more time to enjoy it will be the key to the future of the web.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve talked with some that believe that government policy will come after people start to become too open with their information. My perspective is that as long as there are safeguards around that information then there will be little barriers to users giving it away freely very soon. But in truth only time will tell at how well companies and products can reduce this noise and truly learn about a user, and if there will be regulation preventing such improvements.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 22 May 2008 03:52:52 GMT</pubDate><guid isPermaLink="true">/2008/05/21/Reduced-noise-in-exchange-for-transparency/</guid></item><item><title>The Nostradamus of UNIX</title><link>https://jasoneckert.github.io/myblog/the-nostradamus-of-unix/</link><description>&lt;p&gt;&lt;img alt="Life with UNIX" src="lifewithunix.png#right" title="Life with UNIX" /&gt;&lt;/p&gt;
&lt;p&gt;Every so often I re-read a book that I read years ago to remember what it is about.  Mostly, I re-read sci-fi or notable works such as &lt;em&gt;&lt;strong&gt;Neuromancer&lt;/strong&gt;&lt;/em&gt; (William Gibson) or &lt;em&gt;&lt;strong&gt;The Hitchhiker’s Guide to the Galaxy&lt;/strong&gt;&lt;/em&gt; (Douglas Adams) since those are the types of books that I kept over the years.&lt;/p&gt;
&lt;p&gt;However, I kept a book from 1989 called &lt;em&gt;&lt;strong&gt;Life with UNIX&lt;/strong&gt;&lt;/em&gt; (Don Libes &amp;amp; Sandy Ressler) that I remember using as a good UNIX reference a long time ago.  While browsing the Net, I happened across a recent review of it that said it was “a timeless book on everything UNIX – 90% of it still applies today.”&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 22 May 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/the-nostradamus-of-unix/</guid></item><item><title>Camera Zoom hack</title><link>https://justingarrison.com/blog/2008-05-20-camera-zoom-hack/</link><description>Recently hack a day had a article about enhancing your Canon</description><author>Justin Garrison's Homepage</author><pubDate>Tue, 20 May 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2008-05-20-camera-zoom-hack/</guid></item><item><title>Recently read #1: Akhmatova meets Bashō (Vasil Bykaŭ, “The Wall”)</title><link>http://blog.danieljanus.pl/recently-read-1/</link><description>&lt;div&gt;&lt;p&gt;(Introductory note: This post marks the beginning of a new series on this blog, aptly titled “Recently read.” Every now and then I will try to verbalize afterthoughts inspired by the books I happen to read, and post them here. I hope these recommendations or anti-recommmendations might turn out to be useful for someone.)&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Give me&lt;br /&gt; a kiss to build a dream on,&lt;br /&gt; and my imagination&lt;br /&gt; will thrive upon that kiss;&lt;br /&gt; sweetheart,&lt;br /&gt; I ask no more than this —&lt;br /&gt; a kiss to build a dream on.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Thusly starts the &lt;a href="http://www.youtube.com/watch?v=e3PXiV95kwA"&gt;Fallout 2 intro&lt;/a&gt; — a mini-movie that can be considered a piece of art in its own right. Louis Armstrong sings these words in an abandoned underground cinema, wherein a movie is displayed, touching on nostalgia for pre-War times as well as severe dangers that lurk on the surface of the earth. And then come these words…&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=_mcJAI6oRYY"&gt;“War, war never changes.”&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Just like throughout the entire Fallout saga, these words reverberated in my mind as I read “The Wall,” a collection of short stories by Vasil Bykaŭ, the late Belarussian writer.&lt;/p&gt;&lt;p&gt;For the war indeed does not change. And wherever it appears, it carries around such an amount of destruction and utter wrongness that it is next to unimaginable for a generation grown up in a relatively peaceful place and time such as ours. In fact, even the words “utter wrongness” do not do justice to what was once an unescapable reality. There is only one way to find appropriate words: to show it, show it without overlooking anything, show it dryly and aloofly in all its hideousness.&lt;/p&gt;&lt;p&gt;And Bykaŭ does. There is not a single word of moralizing in these stories. There are no high words, and barely even a human thought beyond fear for life. There is pure depiction; and yet every word in this depiction stands firm and cannot be removed without losing the level of detail called for. This induces associations with Anna Akhmatova and her famous “Requiem,” which begins as follows:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Это было, когда улыбался&lt;br /&gt; только мертвый, спокойствию рад.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;“Это было.” “It happened.” These simple words are immensely powerful. And the same two words, unspoken, echo throughout the entire book. It happened, and it was like this. Nothing more can, or should, be told.&lt;/p&gt;&lt;p&gt;I’ve mentioned the level of detail; this aspect of these stories deserves longer comment. It is imminent that they would not be quite as powerful were it not for the detail. One can almost sense the chill of a dawn rising up above some godforsaken trench somewhere on the battlefront. Or shudder at the cold dampness of the soil inside it. Or smell the stench of decay rising above a corpse shot several days ago. Or feel the almost palpable fear floating in the crossfire of danger, one on the enemy side, the other shaped as one’s own commandment. Or the gloom with which a small group of soldiers sets out to dig their final resting place before committing suicide, lest worse fate befall them.&lt;/p&gt;&lt;p&gt;These stories are almost “haikuistic,” so to speak, in that each one of them resembles a very thinly cut and faithfully portrayed slice of reality from which there is no escape. This shows most strongly in case of the shortest ones, like “The Hill,” which are just several pages long, but it arguably holds even for the longest text in the book, the opening novella, “Love Me, Soldier.” (In which, by the way, Falloutesque associations are particularly strong: imagine a Belarussian sergeant who finds a fellow countrygirl hiding in a village in Austria, at the very end of the war, and falls in love with her. Doesn’t that sound like “a kiss to build a dream on?” Well, in Bykaŭ’s world, good dreams never come true.)&lt;/p&gt;&lt;p&gt;I quoted Akhmatova’s “it happened.” Yet, perhaps, the most striking and saddening impression from “The Wall” as a whole, and one that sets it apart from other war literature, is that this should really read “it still happens.” For the war has ended, but it takes long for a nation to recover from the scars it left; especially the Belarussian nation, who have been held captive by various regimes for too long and have never actually experienced freedom that we take for granted. Once a wound has been healed, it is all too easy to reopen it. And fear for speaking one’s own language remains the same, war or no war.&lt;/p&gt;&lt;p&gt;No wonder Bykaŭ’s writings are still censored in his homeland. Thanks to the Internet, though, &lt;a href="http://kamunikat.org/4108.html"&gt;the full Polish text&lt;/a&gt; of all the stories is available online. Highly recommended.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Mon, 19 May 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/recently-read-1/</guid></item><item><title>Why Twitter matters to you</title><link>/2008/05/18/Why-Twitter-matters-to-you/</link><description>&lt;p&gt;Products Company - For me this may the be most obvious and strongest reason for any of the four groups to begin using Twitter. It&amp;rsquo;s quite simple, people use your product or service, people talk about your product or service, people ARE talking about your product or service on Twitter. Regardless of whether you want it or not, people are going to talk and they&amp;rsquo;ll speak their minds. I don&amp;rsquo;t believe I know of a company that wouldn&amp;rsquo;t want to know what it&amp;rsquo;s consumers are saying about them, much less that wouldn&amp;rsquo;t want to be part of that conversation. But if they really do want to, they have the chance to at least be part of it over twitter if they so choose.&lt;/p&gt;
&lt;p&gt;Enterprise - The enterprise has two main reasons why I feel twitter is of importance. Those were highlighted in a little more detail in a previous post, but to sum them up&amp;hellip; Twitter is an asynchronous IM that you could rollout within an enterprise and have control over. You could own the messages, which allows for companies concerned about data security to feel more at ease. It is a convenient medium to convey status to a team and reduce meetings while increasing knowledge flow.&lt;/p&gt;
&lt;p&gt;Additionally twitter starts to become a place for brainstorming and flushing out ideas. On twitter I follow people with similar interests in similar spaces. As I have a fraction of an idea, or a problem I encounter I post to twitter. Others throw in their opinion and a few hours or days later I have hundreds of thoughts around it, and a hopeful solution or flushed out thought.&lt;/p&gt;
&lt;p&gt;Power user - This is an interesting group, because I feel web 3.0 will change in many ways how this group works. Few users like a lot of noise, few users like to see hundreds of messages fly across their screen each hour, and even fewer are truly productive with this. However, for the time being, there are users that want that noise, and that only seem to become more productive and thrive further with the more they have of it. For those users twitter is a gold mine, you can&amp;rsquo;t find a place where you can get much more unfiltered noise, with the exception of the web as a whole. While in its most raw form twitter is extremely noisy, there are a variety of methods to filter this, which is where twitter seems to become most useful to the rest of the population.&lt;/p&gt;
&lt;p&gt;Consumer - If you haven&amp;rsquo;t fit yourself into any of the above categories then this will be where you fall. If you use facebook, email, or IM to communicate with friends, then twitter will be your friend in coming years. I remember a time where it seemed almost a set time at night I would see my buddy list on AIM start to grow as the usual friends sign on. I wouldn&amp;rsquo;t talk to all each day, but over the period of a week would talk to most on there, get updates on their lives and make distant plans to catch up at some point. As the world seems to spin our lives become more hectic and complicated with each passing day. Some nights I sit at my machine and see only a fraction of people that I&amp;rsquo;ve talked to in over a year on AIM. I debate whether to reach out to them to hear their latest and greatest news, or avoid some of the awkwardness. Though I genuinely do care and would like to know, it&amp;rsquo;s not always a simple and relaxed conversation to feel a part of their life.&lt;/p&gt;
&lt;p&gt;Facebook has done a reasonable job of overcoming this, but facebook has hit the tipping point, where you now seem to know more people on there than you actually do. People spend more time, wasting time than actually reconnecting, and at the end of the day it&amp;rsquo;s originally goal has started to seemingly fade.&lt;/p&gt;
&lt;p&gt;Twitter on the other hang allows me to have conversations with friends over a longer period of time. I don&amp;rsquo;t have to sit and wait for my friend to respond, he gets to it when he can. But for me it still maintains that direct communication path feel like AIM. I can also communicate from one to many people much easier, now instead of sending out an email to all my contacts I post a tweet, then all of my friends get the message. All-in-all what twitter really gives you is a way to still feel close and connected to those people. While a facebook status message may work just the same, it somehow seems to get lost amongst all the noise.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Mon, 19 May 2008 01:57:21 GMT</pubDate><guid isPermaLink="true">/2008/05/18/Why-Twitter-matters-to-you/</guid></item><item><title>IRO Mark V</title><link>https://rob.sh/post/20/</link><description>&lt;p&gt;Figured I hadn&amp;rsquo;t posted a new picture of my bike for a while!&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;center&gt;&lt;a href="https://cdn.rob.sh/img/iro150508.jpg"&gt;&lt;img alt="iro" src="https://cdn.rob.sh/img/iro150508_blog.jpg" /&gt;&lt;/a&gt;&lt;/center&gt;</description><author>rob.sh</author><pubDate>Sat, 17 May 2008 17:49:34 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/20/</guid></item><item><title>Web, Scalability, SAAS</title><link>/2008/05/16/Web-Scalability-SAAS/</link><description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;At the time one startup that would be a prime example of what I&amp;rsquo;m about to detail did not come to mind. Salesforce, salesforce has a respectable feature list, yet is also one of the web companies that has managed to scale well. The interesting thing about web companies is the best ones are the ones that can truly scale to a mass audience. Many can offer an okay service, but scaling that service is a truly difficult task.&lt;/p&gt;
&lt;p&gt;Many would argue that extensive testing and rigorous QA will help to offer enterprise quality software. But to this note I very strongly disagree, in coming years we are going to see more and more of a facebook model. Facebook as they develop code they test against live data, it will be the individuals that coded and perhaps a few others, but is really not much more than a smoke test to make sure things are still working. They then role out the new code and when things break they are ready to fix them. Why does this work? Why are users okay with the site being down at times? Well personally I will settle for more features at a few inconveniences most days of the week. Seldom is software 100% solid, I have even seen bugs in notepad, so as a result you cannot expect software to be perfect.&lt;/p&gt;
&lt;p&gt;Instead with a SAAS, software as a service, model you do not have to worry about software updates. You simple update the site or service, and then you can role out these features more rapidly. Instead of office being a 2-3 year large product update, you push new features to the site at a weekly basis. You also alleviate some of your burden of supporting a variety of installations and versions of your product.&lt;/p&gt;
&lt;p&gt;Because of these points it&amp;rsquo;s more important that we pay attention to these companies that have gotten scalability right. The facebook&amp;rsquo;s, google&amp;rsquo;s, amazon&amp;rsquo;s of the world that can handle millions of hits per second, once enterprises have a firm understanding of this, they can attempt to them build their feature set within a SAAS model. When we get to this point features will be built in faster and software will begin to grow faster than in previous years.&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Sat, 17 May 2008 05:46:45 GMT</pubDate><guid isPermaLink="true">/2008/05/16/Web-Scalability-SAAS/</guid></item><item><title>Bearish on mobile</title><link>/2008/05/16/Bearish-on-mobile/</link><description>&lt;p&gt;I&amp;rsquo;ve heard that mobile devices will be everywhere and will replace computers for what seems like decades, but is probably growing on 6 or 7 years now. The thing is I don&amp;rsquo;t really need a desktop with me every where I go. Seldom am I somewhere and I wish I had access to Microsoft Office or wish I had Eclipse or Visual Studio. While I concede that I occasionally watch youtube on my IPhone, this is far more rare than it is common. Most of the time it&amp;rsquo;s simply for the wow factor that I pull it out and load up the &amp;ldquo;Here comes another bubble&amp;rdquo; video.&lt;/p&gt;
&lt;p&gt;Meanwhile I will admit that I do love certain things about my mobile device. The ability to, within three button clicks, publish a photo to twitter or flickr. Or to quickly to live micro-blogging from an event, or (not I, but others) the ability to stream an interview from my phone and have others text questions to ask. But is this truly what I use on my desktop, yes I have IM and micro-blogging clients, but it&amp;rsquo;s far different. I seem to care more about existing services integrating to support SMS, or mobile applications, than about my mobile device being able to run whatever is on my desktop.&lt;/p&gt;
&lt;p&gt;My primary point here is that I care less about supporting multimedia formats, applications, and power. And more about data and accessibility. Mobile devices are at a point now where I could locate friends, communicate with others, and have access to my small pieces of data I want. We simply need to have the backbone systems support them more.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 16 May 2008 11:05:00 GMT</pubDate><guid isPermaLink="true">/2008/05/16/Bearish-on-mobile/</guid></item><item><title>Large corporations versus startups</title><link>/2008/05/15/Large-corporations-versus-startups/</link><description>&lt;p&gt;After a year of living in Silicon Valley it&amp;rsquo;s hard not to be consumed with the excitement around one startup after the next. The hopes of being the next eBay, Google, or Facebook lie within many of individuals in the area. Some pursue it, some write it off as a distant hope, and still others just want to be a part of them at some point.&lt;/p&gt;
&lt;p&gt;But why would someone just want to be a part of Google 5 years ago? The first thing that comes to mind is money, and while thats nice, I don&amp;rsquo;t believe its at the root of it. There&amp;rsquo;s a vastly different atmosphere at a startup. For one you have a say, right now if I left my company, I&amp;rsquo;d get good-byes from 100 people, be missed by maybe 20, and the other 159,900 would move along as if nothing happened. But if I left a startup the entire company notices, so there is a closer sense of belonging. Still I don&amp;rsquo;t believe this is the heart of it.&lt;/p&gt;
&lt;p&gt;In part if you have the ability to make it at a startup you&amp;rsquo;re of a different breed. If a startup excites you, you&amp;rsquo;re of a different breed. You eat, sleep, breath what you do. In a 160,000 person company I don&amp;rsquo;t believe there&amp;rsquo;s any way 100% of the employees decided it was a dream job, or as a 10 year old, or even at 16 it was what they wanted to do with their life. But the kid that was developing at 12 his own first person shooter game, or at 16 was following the markets and getting a summer job to be able to invest, those are of a different breed. For those, it&amp;rsquo;s not a job, its a portion of who they are. You don&amp;rsquo;t do home and unwind, you go home and read more blogs, dive further into your area of expertise, and work on your own projects that allow you to bring more expertise into the workplace.&lt;/p&gt;
&lt;p&gt;Perhaps this same attitude and drive applies in other industries, though I have the greatest insight into tech/web companies. There was a statement made by Paul Graham of Y Combinator at startup school recently. He said that investors are looking for the type of individuals that don&amp;rsquo;t need them, the type that are going to make it regardless of what everyone else says and who supports them. This is succinctly different than the corporate world, where you have to have validation all across the board to be able to move forward.&lt;/p&gt;
&lt;p&gt;As I write this and contemplate more I believe it becomes even more of a chicken and egg problem. Startups require a certain type of individual, but those individuals are the ones best suited for startups.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 15 May 2008 22:32:00 GMT</pubDate><guid isPermaLink="true">/2008/05/15/Large-corporations-versus-startups/</guid></item><item><title>Rollapaluza</title><link>https://rob.sh/post/19/</link><description>&lt;p&gt;I went to go and do some roller racing earlier this week, at a pub called the Horseshoe in Clerkenwell. The &lt;a href="http://www.rollapaluza.com"&gt;Rollapaluza&lt;/a&gt; guys were being filmed, and running a free-for-all race. First time on the rollers, I managed 23.48s, which turned out (once a couple of people had disappeared) to be good enough to get me to the quarter finals. clefty from LondonFGSS took a few photos, so I figured I&amp;rsquo;d post them here:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Thu, 15 May 2008 20:19:45 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/19/</guid></item><item><title>Twitter will be commonplace in the enterprise</title><link>/2008/05/14/Twitter-will-be-commonplace-in-the-enterprise/</link><description>&lt;p&gt;Twitter is great for a few key reasons, first let me highlight the two &lt;!-- raw HTML omitted --&gt;key&lt;!-- raw HTML omitted --&gt; uses I feel it has in the enterprise.&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 15 May 2008 07:38:41 GMT</pubDate><guid isPermaLink="true">/2008/05/14/Twitter-will-be-commonplace-in-the-enterprise/</guid></item><item><title>Adobe AIR is a game changer, if people would build for it...</title><link>/2008/05/08/Adobe-AIR-is-a-game-changer-if-people-would-build-for-it.../</link><description>&lt;p&gt;Spend five minutes talking to me about technology or business and you&amp;rsquo;ll quickly realize I&amp;rsquo;m a fan of Adobe AIR. Adobe has done a very good job building a cross-platform runtime, and providing tools that make the transition from the web to the desktop quite minimal.&lt;/p&gt;
&lt;p&gt;First to elaborate why I like AIR. For one I&amp;rsquo;m a fan of web 2.0, the sites feel cleaner, smoother, and drive new capabilities. Versus most desktop applications that are starting to feel old, and much like 1990&amp;rsquo;s Java Applets do on the web. With Flex Builder, which is an IDE for developing for flash and/or AIR, I can develop a sweet website, but then quickly port it to the desktop while maintaining a rich web 2.0 feel.&lt;/p&gt;
&lt;p&gt;Second, did I mention it&amp;rsquo;s cross-platform? Windows, OSX, Linux, the application in AIR will look/feel/function the same. So what? This could have been done other ways right? Well here is where I start to place my bets, no one else has really done anything in this area as well as Adobe so far. Also Adobe has made their long term strategy clear, they want to truly become a cross-platform runtime. If you&amp;rsquo;re thinking what other platforms right now, you&amp;rsquo;re not thinking large enough. They want AIR to support mobile phones, set-top boxes, likely even gaming consoles. This means I can look at one application on multiple mediums with an either identical look, of very similar one, with minimal development efforts. This allows a developer to then focus even further on improving functionality.&lt;/p&gt;
&lt;p&gt;Finally, a bit of a rant. Adobe AIR does not have a true competitor, Silverlight is a competitor to flash (not AIR), Google Gears might be the closest thing to it. But, with regard to gears taking a website and making it available offline isn&amp;rsquo;t all AIR can do. AIR has local file access, local access to some devices, which when you&amp;rsquo;re still within a browser you can&amp;rsquo;t do. Oh, and one feature I personally just like is the auto-update ability of applications.&lt;/p&gt;
&lt;p&gt;So&amp;hellip;.. If it&amp;rsquo;s so great, why haven&amp;rsquo;t you heard of it and why aren&amp;rsquo;t you using it? Well the single problem seems to be people building applications on it. I&amp;rsquo;ve seen very few applications that would appeal to mainstream users. I (being an avid fan of AIR and anything web 2.0), will typically use 2 AIR applications per day. One being twhirl, which I use as my primary twitter client. The other tends to vary by needs. However this is contrasted with about 20 applications that I work in over a given day. Most AIR applications thus far are simple, one-off fun applications. Perhaps to really make some penetration there should be some of the following:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Fri, 09 May 2008 02:46:00 GMT</pubDate><guid isPermaLink="true">/2008/05/08/Adobe-AIR-is-a-game-changer-if-people-would-build-for-it.../</guid></item><item><title>Why Google may not exist in 8-10 years</title><link>/2008/05/08/Why-Google-may-not-exist-in-8-10-years/</link><description>&lt;p&gt;As I write this, I write only from my vague knowledge of where revenue&amp;rsquo;s come directly from. However, I do hope to back this up in the future with more numeric backing. My title of the post may be quite strong and negative, but I feel it has reasonable ground to stand on, based on one simple principle. A corporation should stick to and focus on it&amp;rsquo;s core business, and exhausting resources outside it&amp;rsquo;s core business could end up costing them their business.&lt;/p&gt;
&lt;p&gt;As it is, Google&amp;rsquo;s primary revenue comes from advertising, they&amp;rsquo;re the primary source for advertising because of their search engine. While some may say their core business is data, I disagree, as how are they making money off of data. Data simply allows them to better target their ads. With Google&amp;rsquo;s attitude of &amp;ldquo;Do no wrong&amp;rdquo; they are unlikely to profit from the consolidation and sales of such data.&lt;/p&gt;
&lt;p&gt;Meanwhile Google is exhausting their resources with little to show for it. Google over the past 5 years has been hiring some of the top talent within Silicon Valley. Paying good salaries for individuals that are supposed to be some of the best software engineers in the industry. I&amp;rsquo;m not suggesting that the individuals are not sharp, but what has Google truly produced from within it&amp;rsquo;s own walls? Google has bought many of it&amp;rsquo;s out lier products, i.e. Google Earth, Google Spreadsheets, Picasa, and others. First if they are to go into these areas they should strictly focus on acquisitions and have a smaller developer base.&lt;/p&gt;
&lt;p&gt;Though from my perspective Google should not be investing in any of the three products mentioned above. While cool and arguably good products, how does Google plan on making money from these? If they are exhausting resources and effort into these products, at the expense of improving both search and ad&amp;rsquo;s they&amp;rsquo;re not focusing on their core business as they should be&lt;/p&gt;
&lt;p&gt;Finally, if Google is not pouring into these two areas, search and ad&amp;rsquo;s, it only takes being beaten by one to be unseated. As soon as a company is able to do search better, or ad&amp;rsquo;s better Google will lose the majority, if not all of their revenue. While they may be able to stay around after someone else has become a dominant player, it will only be as a very small fraction of what they currently are.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not predicting that Google &lt;!-- raw HTML omitted --&gt;will &lt;!-- raw HTML omitted --&gt;be gone in 8 years, but unless they really start to devote to their core business and quit wasting resources on un-needed areas they will have something to worry about.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 08 May 2008 13:35:00 GMT</pubDate><guid isPermaLink="true">/2008/05/08/Why-Google-may-not-exist-in-8-10-years/</guid></item><item><title>Parallelizing FLAC Encoding</title><link>https://www.akalin.com/parallelizing-flac-encoding</link><description>&lt;p&gt;One thing I noticed ever since getting a multi-core system
was that the reference FLAC encoder is not multi-threaded.  This isn't
a huge problem for most people as you can simply encode multiple files
at the same time but I usually rip my audio CDs into a single audio
file with a cue sheet instead of separate track files and so I am
usually encoding a single large audio file instead of multiple smaller
ones.  Even so, encoding a CD-length audio file takes under a minute
but I thought it would be a fun and useful weekend project to see if I
could parallelize the simpler &lt;a href="http://flac.cvs.sourceforge.net/flac/flac/examples/c/encode/file/main.c?revision=1.2&amp;amp;view=markup"&gt;example encoder&lt;/a&gt;.  The

&lt;a href="http://flac.sourceforge.net/format.html"&gt;format specification&lt;/a&gt; indicates that input blocks are
encoded independently which makes the problem &lt;a href="http://en.wikipedia.org/wiki/Embarrassingly_parallel"&gt;embarassingly
parallel&lt;/a&gt; and trawling through the &lt;a href="http://www.mail-archive.com/flac-dev@xiph.org/msg00724.html"&gt;FLAC
mailing lists&lt;/a&gt; reveals that no one has had the time
nor the inclination to look into it.&lt;/p&gt;

&lt;p&gt;However, I was able to write a multithreaded FLAC encoder that
achieves near-linear speedup with only minor hacks to the libFLAC API.
Here are some encode times on an 8-core 2.8 GHz Xeon 5400 for a 636 MB
wave file (some caveats are discussed below):&lt;/p&gt;

&lt;table class="benchmark-results"&gt;
&lt;tr&gt;
&lt;th&gt;baseline&lt;/th&gt;&lt;td&gt;34.906s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;1 threads&lt;/th&gt;&lt;td&gt;31.424s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;2 threads&lt;/th&gt;&lt;td&gt;16.936s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;4 threads&lt;/th&gt;&lt;td&gt;10.173s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;8 threads&lt;/th&gt;&lt;td&gt;6.808s&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;I took the simple approach of sharding the input file into

&lt;var&gt;n&lt;/var&gt; roughly equal pieces and passing them to &lt;var&gt;n&lt;/var&gt;
encoder threads, assembling the output file from the &lt;var&gt;n&lt;/var&gt;
output buffers.  In general this is not a good way of partitioning the
workload as time is wasted if one shard takes significantly more time
to process but for my use case this isn't a significant problem.&lt;/p&gt;

&lt;div class="p"&gt;The best way to share the input file among the encoding threads is to
map it into memory.  In fact, memory-mapped file I/O has so many
advantages in general that I'm surprised at how little I see it used,
although it does have the disadvantage of requiring a bit more
bookkeeping.  Here is how I use it in my multithreaded encoder
(slightly paraphrased):

&lt;pre class="code-container"&gt;&lt;code class="language-cpp"&gt;#include &amp;lt;fcntl.h&amp;gt; /* open() */
#include &amp;lt;sys/mman.h&amp;gt; /* mmap()/munmap() */
#include &amp;lt;sys/stat.h&amp;gt; /* stat() */
#include &amp;lt;unistd.h&amp;gt; /* close() */

int main(int argc, char *argv[]) {
  int fdin;
  struct stat buf;
  char *bufin;

  fdin = open(argv[1], O_RDONLY);
  fstat(fdin, &amp;amp;buf);
  bufin = mmap(NULL, buf.st_size, PROT_READ, MAP_SHARED, fdin, 0);

  /* The input file (passed in via argv[1]) is now mapped read-only to
     the memory region in bufin up to bufin + buf.st_size. */

  /* Note that you can work directly with the mapped input file
     instead of fread()ing the header into a buffer. */
  if((buf.st_size &amp;lt; WAV_HEADER_SIZE) ||
     memcmp(bufin, "RIFF", 4) ||
     memcmp(bufin+8, "WAVEfmt \020\000\000\000\001\000\002\000", 16) ||
     memcmp(bufin+32, "\004\000\020\000data", 8)) {
    /* Invalid input file: print error and exit. */
  }

  for (i = 0; i &amp;lt; num_threads; ++i) {
    shard_infos[i].bufin = bufin + WAV_HEADER_SIZE + i * bytes_per_thread;
    /* bufsize for the last thread may be slightly larger. */
    shard_infos[i].bufsize = bytes_per_thread;
  }

  /* Spawn encode threads (which calls encode_shard() below) passing
     an element of shard_infos to each. */

  ...

  munmap(bufin, buf.st_size);
  close(fdin);
}

FLAC__bool encode_shard(struct shard_info *shard_info) {
  FLAC__StreamEncoder *encoder = FLAC__stream_encoder_new();

  ...

  /* The input file is paged in lazily as this function accesses
     bufin from shard_info-&gt;bufin. */
  FLAC__stream_encoder_process_interleaved(encoder,
                                           shard_info-&gt;bufin,
                                           shard_info-&gt;bufsize);

  ...

  FLAC__stream_encoder_delete(encoder);
}&lt;/code&gt;&lt;/pre&gt;

However, handling the output file is a bit trickier.  Since the
encoded FLAC data output by the threads vary in size we have to wait
until all encoding threads are done before we know the right offsets
to write the output data.  A convenient and fast way to handle this is
to use asynchronous I/O; we know where to write the output data for a
shard as soon as the encoding thread for all previous shards finish so
we simply wait for the encoding threads in shard order and queue up a
write request after each thread finishes.  Here I use the POSIX
asynchronous I/O API in my multithreaded encoder (again, slightly
paraphrased):

&lt;pre class="code-container"&gt;&lt;code class="language-cpp"&gt;#include &amp;lt;aio.h&amp;gt; /* aio_*() */
#include &amp;lt;pthread.h&amp;gt; /* pthread_*() */
#include &amp;lt;string.h&amp;gt; /* memset() */

int main(int argc, char *argv[]) {
  int fdout;
  pthread_t threads[MAX_THREADS];
  struct aiocb aiocbs[MAX_THREADS];
  unsigned long byte_offset = 0;

  /* mmap input file in. */

  ...

  fdout = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC);

  /* Spawn encode threads passing an element of shard_infos to
     each. */

  ...

  /* Wait for each thread in sequence and queue up output writes. */

  /* We need to zero out any aiocb struct that we use before we fill
     in any members. */
  memset(aiocbs, 0, num_threads * sizeof(*aiocbs));
  for (i = 0; i &amp;lt; num_threads; ++i) {
    pthread_join(threads[i], NULL);
    aiocbs[i].aio_buf = shard_infos[i].bufout;
    aiocbs[i].aio_nbytes = shards_infos[i].bytes_written;
    aiocbs[i].aio_offset = byte_offset;
    aiocbs[i].aio_fildes = fdout;
    aio_write(&amp;amp;aiocbs[i]);
    byte_offset += shard_infos[i].bytes_written;
  }

  /* Wait for all output writes to finish. */

  for (i = 0; i &amp;lt; num_threads; ++i) {
    const struct aiocb *aiocbp = &amp;amp;aiocbs[i];
    aio_suspend(&amp;amp;aiocbp, 1, NULL);
    aio_return(&amp;amp;aiocbs[i]);
  }

  close(fdout);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The POSIX API is a bit unwieldy for this use case; ideally, there
would be a version of &lt;code&gt;aio_suspend()&lt;/code&gt; that would suspend the
calling process until &lt;em&gt;all&lt;/em&gt; of the specified requests have completed.
As it is now the simplest way is to loop through the requests as
above, especially since the maximum number of simultaneous
asynchronous I/O requests is usually quite small (16 on my system).&lt;/p&gt;

&lt;p&gt;Also, I found that the OS X implementation of &lt;code&gt;aio_write()&lt;/code&gt;
did not obey this part of the specified behavior:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;  If O_APPEND is set for aiocbp-&gt;aio_fildes, aio_write() operations append
  to the file in the same order as the calls were made.  If O_APPEND is not
  set for the file descriptor, the write operation will occur at the abso-
  lute position from the beginning of the file plus aiocbp-&gt;aio_offset.&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;but it was just as easy (and clearer) to explicitly set the correct
offset.&lt;/p&gt;

&lt;p&gt;I had to hack up libFLAC a bit to implement my multithreaded encoder.
I exposed the &lt;code&gt;update_metadata_()&lt;/code&gt; to make it easy to write the
correct number of total samples in the metadata field and also to zero
out the min/max framesize fields.  I also exposed the
&lt;code&gt;FLAC__stream_encoder_set_do_md5()&lt;/code&gt; function (which it should
have been in the first place) so that I can turn off the writing of
md5 field in the metadata.  Finally, I added the function
&lt;code&gt;FLAC__stream_encoder_set_current_frame_number()&lt;/code&gt; so that the
correct frame numbers are written at encode time.&lt;/p&gt;

&lt;p&gt;For comparison purposes I turn off md5 calculation in my multithreaded
encoder as well as the baseline one.  Since calling
&lt;code&gt;FLAC__stream_encoder_set_current_frame_number()&lt;/code&gt; causes
crashes with vericiation turned on I also turn that off.  The numbers
above reflect that so they're underestimates of how a production
multithreaded encoder would perform.  However, the essential behavior
of the program shouldn't change much.&lt;/p&gt;

&lt;p&gt;&lt;a href="/parallelizing-flac-encoding-files/patch-libFLAC.in"&gt;Here&lt;/a&gt; is a patch file for the &lt;a href="http://downloads.sourceforge.net/flac/flac-1.2.1.tar.gz?modtime=1189961849&amp;amp;big_mirror=0"&gt;flac 1.2.1
source&lt;/a&gt; that implements the hacks I described
above.  &lt;a href="/parallelizing-flac-encoding-files/mt_encode.c"&gt;Here&lt;/a&gt; is the source for my multithreaded FLAC
encoder.  I've tested it with &lt;code&gt;i686-apple-darwin9-gcc-4.0.1&lt;/code&gt;

and &lt;code&gt;i686-apple-darwin9-gcc-4.2.1&lt;/code&gt; on Mac OS X.  I got the
above numbers compiling
&lt;code&gt;mt_encode.c&lt;/code&gt; with gcc 4.2.1 and the switches &lt;code&gt;-Wall
-Werror -g -O2 -ansi&lt;/code&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Like this post? Subscribe to
  &lt;!-- The image is 256x256, the center of the dot is 189 pixels from the
     top, and the radius of the dot is 24. Therefore, the dot is 43/256 =
     0.16796875 of the image height above the bottom.--&gt;
&lt;a href="feed/atom"&gt;my feed &lt;img alt="RSS icon" src="feed-icon.svg" /&gt;&lt;/a&gt;

  or follow me on
  &lt;a href="https://twitter.com/fakalin"&gt;Twitter &lt;img alt="Twitter icon" src="twitter-icon.svg" /&gt;&lt;/a&gt;.&lt;/p&gt;</description><author>Fred Akalin</author><pubDate>Mon, 05 May 2008 10:00:00 GMT</pubDate><guid isPermaLink="true">https://www.akalin.com/parallelizing-flac-encoding</guid></item><item><title>Inward ripeness</title><link>http://blog.danieljanus.pl/inward-ripeness/</link><description>&lt;div&gt;&lt;blockquote&gt;&lt;p&gt;How soon hath Time, the subtle thief of youth,&lt;br /&gt; Stol’n on his wing my three and twentieth year!&lt;br /&gt; My hasting days fly on with full career,&lt;br /&gt; But my late spring no bud or blossom shew’th.&lt;br /&gt; Perhaps my semblance might deceive the truth&lt;br /&gt; That I to manhood am arrived so near;&lt;br /&gt; And inward ripeness doth much less appear,&lt;br /&gt; That some more timely-happy spirits endu’th.&lt;br /&gt; Yet be it less or more, or soon or slow,&lt;br /&gt; It shall be still in strictest measure ev’n&lt;br /&gt; To that same lot, however mean or high,&lt;br /&gt; Toward which Time leads me, and the will of Heav’n:&lt;br /&gt;   All is, if I have grace to use it so,&lt;br /&gt;   As ever in my great Task-Master’s eye.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;John Milton is said to have composed this sonnet on his twenty-fourth birthday, and his thoughts (including, but not limited to, the criticism of the achievements so far) are very much in line with mine on my very own 24th birthday. One wonders what is the programming equivalent of “Paradise Lost.”&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Mon, 05 May 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/inward-ripeness/</guid></item><item><title>¡Feliz aniversario BASIC!</title><link>https://danielpecos.com/2008/05/02/feliz-aniversario-basic/</link><description>&lt;p&gt;El 1 de Mayo de 1964 se ejecutó el primer programa en BASIC. Los creadores de este lenguaje de programación, los profesores &lt;a href="http://es.wikipedia.org/wiki/John_Kemeny"&gt;John G. Kemeny&lt;/a&gt; y &lt;a href="http://es.wikipedia.org/wiki/Thomas_Eugene_Kurtz"&gt;Thomas E. Kurtz&lt;/a&gt; del Dartmouth College, hace 44 años ejecutaron por primera vez un código escrito en BASIC (&lt;span style="font-style: italic;"&gt;Beginner&amp;rsquo;s All-Purpose Symbolic Instruction Code&lt;/span&gt;).&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;a href="https://danielpecos.com/assets/2008/05/kemeny_and_kurtz.jpg"&gt;&lt;img alt="Los creadores de BASIC" class="alignnone size-medium" height="227" src="https://danielpecos.com/assets/2008/05/kemeny_and_kurtz.jpg" title="John G. Kemeny y Thomas E. Kurtz" width="250" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;La búsqueda de un lenguaje potente y sencillo de usar (por aquellas fechas se solía utilizar Fortran y Algol) comenzó en el año 1956, con el fin de facilitar a sus estudiantes el aprendizaje de los métodos de programación.&lt;/p&gt;
&lt;p&gt;Posteriormente en 1975, &lt;a href="http://es.wikipedia.org/wiki/Paul_Allen"&gt;Paul Allen&lt;/a&gt; y &lt;a href="http://es.wikipedia.org/wiki/Bill_Gates"&gt;Bill Gates&lt;/a&gt; adaptaron este lenguaje a los computadores personales. Como resultado, BASIC fue ampliamente utilizado y evolucionado hasta hoy en día (Visual BASIC .NET).&lt;/p&gt;
&lt;p&gt;Personalmente, éste fue el primer lenguaje que utilicé para desarrollar mi primera aplicación medianamente grande, un tablero de parchís (cuando lo miro hoy en día me da hasta vergüenza. no utilicé ni una sola función y todo el código estaba lleno de GOTOs). Para ello utilicé un intérprete de QuickBasic. Qué tiempos aquellos…&lt;/p&gt;
&lt;p&gt;¡Felicidades BASIC!&lt;/p&gt;
&lt;p&gt;PD: ¿Y tú con qué lenguaje distes tus primeros pasos en el mundo de la programación?&lt;/p&gt;
&lt;p&gt;&lt;small&gt;Fuentes:&lt;/small&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;small&gt;&lt;a href="http://www.wired.com/science/discoveries/news/2008/04/dayintech_0501"&gt;&lt;a href="http://www.wired.com/science/discoveries/news/2008/04/dayintech_0501#"&gt;http://www.wired.com/science/discoveries/news/2008/04/dayintech_0501#&lt;/a&gt;&lt;/a&gt;&lt;/small&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;small&gt;&lt;/small&gt;&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Fri, 02 May 2008 09:29:36 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2008/05/02/feliz-aniversario-basic/</guid></item><item><title>cl-netstrings</title><link>http://blog.danieljanus.pl/cl-netstrings/</link><description>&lt;div&gt;&lt;p&gt;I’ve just packaged up the Common Lisp netstring handling code that I &lt;a href="http://blog.danieljanus.pl/hacking-away-with-json-rpc.html"&gt;wrote a week ago&lt;/a&gt; into a neat library. Unsurprisingly enough, it is called cl-netstrings and has its own &lt;a href="http://github.com/nathell/cl-netstrings"&gt;home on the Web&lt;/a&gt;. It’s even asdf-installable! I wonder whether this one turns out to be useful for anybody besides me…&lt;/p&gt;&lt;p&gt;The other thing I’ve been working on is a new build system for Poliqarp. But that’s the story for another post — most probably I will write about it when it gets out of a state of constant flux.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Update 2010-Jan-17&lt;/em&gt;: cl-netstrings is now hosted on GitHub; I’ve updated the link.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Wed, 30 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/cl-netstrings/</guid></item><item><title>The UNIX way</title><link>https://jasoneckert.github.io/myblog/the-unix-way/</link><description>&lt;p&gt;&lt;img alt="The UNIX way" src="unixway.png#right" title="The UNIX way" /&gt;&lt;/p&gt;
&lt;p&gt;Back in the 1980s, someone started the UNIX-HATERS mailing list as a means of venting UNIX-related frustrations.  In 1994, Simson Garfinkel, Daniel Weise, and Steven Strassmann collected these frustrations and published them in a book called “The UNIX-HATERS Handbook” with extra commentary aimed to portray one view: UNIX sucks. The book itself contains plenty of great information about different technologies such as shell scripting, UNIX commands, email and file systems – it’s too bad that they cast everything in a very negative light.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Tue, 29 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/the-unix-way/</guid></item><item><title>Bread Recipes</title><link>https://rob.sh/post/18/</link><description>&lt;p&gt;I&amp;rsquo;ve been experimenting with home-baked bread of late, and have been trying some recipes that haven&amp;rsquo;t worked out so well. So, now I&amp;rsquo;ve found a good recipe, I figured I&amp;rsquo;d put it somewhere that I can find it.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="https://cdn.rob.sh/img/good_bread_one.jpg"&gt;&lt;img height="200" src="https://cdn.rob.sh/img/good_bread_one_t.jpg" /&gt;&lt;/a&gt;&lt;a href="https://cdn.rob.sh/img/good_bread_two.jpg"&gt;&lt;img height="200" src="https://cdn.rob.sh/img/good_bread_two_t.jpg" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;table border="0" width="100%"&gt;
&lt;tr&gt;&lt;td width="25%"&gt;
&lt;b&gt;Simple Wholemeal Loaf&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
500g wholemeal bread flour&lt;br /&gt;
7g sachet dried yeast&lt;br /&gt;
1.5 tsp salt&lt;br /&gt;
175 ml tepid milk&lt;br /&gt;
175 ml tepid water&lt;br /&gt;
&lt;/td&gt;&lt;td&gt;
&lt;ol&gt;
 &lt;li&gt;Mix together the flour, yeast and salt, and add the milk and water. Mix to form a soft dough, adding a little more water if it seems too dry.&lt;/li&gt;
&lt;li&gt;Lightly flour a surface, and turn the dough out onto it. Knead for ~10 minutes until the dough is smooth, and elastic.&lt;/li&gt;
&lt;li&gt;Grease a loaf tin (well!), and pop the dough into it. Cover with a tea-towel, or greased clingfilm, and leave aside for 1-1.5hrs to rise.&lt;/li&gt;
&lt;li&gt;Brush with milk, and dust with flour, then bake in an oven at 220 degrees C, for ~15 minutes until pale golden. Leave to cool.&lt;/li&gt;
&lt;/ol&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
I found that it worked out pretty well, and wasn't too heavy!</description><author>rob.sh</author><pubDate>Mon, 28 Apr 2008 14:34:29 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/18/</guid></item><item><title>Another Concise Code Example</title><link>https://caiustheory.com/another-concise-code-example/</link><description>&lt;p&gt;This is just another example showing how I refactor code down to its bare minimum. The reason why I do this so much (and indeed I think why ruby is so easy to read compared to other languages) is because it makes my code more readable and less of a bugger to pick up after a while.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Page&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kp"&gt;attr_accessor&lt;/span&gt; &lt;span class="ss"&gt;:parent_id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;old_parent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parent?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="no"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parent_id&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="no"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parent_id&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parent?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;old_parent&lt;/code&gt; and &lt;code&gt;parent&lt;/code&gt; return exactly the same, but one is 2 lines compared to 5 and easier to read.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;a href="http://ciaranwal.sh/"&gt;Ciaran&lt;/a&gt; pointed out that the Page.parent method would only ever return false. Added the return statement to it to fix the bug.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sat, 26 Apr 2008 18:54:09 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/another-concise-code-example/</guid></item><item><title>What do I do?</title><link>https://benovermyer.com/blog/2008/04/what-do-i-do/</link><description>&lt;p&gt;Today's post is inspired by a challenge from IttyBiz. The author, Naomi Dunford, reflected on how many readers aren't aware - through no fault of their own - of what we blog writers actually do for a living. So, the challenge was to answer five questions to introduce ourselves (again) to our readers:&lt;/p&gt;
&lt;h1 id="what-s-your-game-what-do-you-do"&gt;What's your game? What do you do?&lt;/h1&gt;
&lt;p&gt;By day, I'm a web developer working for a major government contractor. By night, I'm a freelance web designer, artist, and writer.&lt;/p&gt;
&lt;h1 id="why-do-you-do-it-do-you-love-it-or-do-you-just-have-one-of-those-creepy-knacks"&gt;Why do you do it? Do you love it, or do you just have one of those creepy knacks?&lt;/h1&gt;
&lt;p&gt;I love web design. It's the perfect melding of programming, art, and writing.&lt;/p&gt;
&lt;h1 id="who-are-your-customers-what-kind-of-people-would-need-or-want-what-you-offer"&gt;Who are your customers? What kind of people would need or want what you offer?&lt;/h1&gt;
&lt;p&gt;Most of my clients are game companies. I've done artwork or websites for a fair few people as individual commissions too. Usually, the people interested in my services are those looking for a friendly face and an understanding of the game industry that just isn't there for the majority of web design companies.&lt;/p&gt;
&lt;h1 id="what-s-your-marketing-usp-why-should-i-buy-from-you-instead-of-the-other-losers"&gt;What's your marketing USP? Why should I buy from you instead of the other losers?&lt;/h1&gt;
&lt;p&gt;I don't know what a USP is, but I'll say this - I'm the guy who knows what I'm doing, and I know what my clients are doing too. At the end of the day, I'm a gamer as well as a designer!&lt;/p&gt;
&lt;h1 id="what-s-next-for-you-whats-the-big-plan"&gt;What's next for you? Whats the big plan?&lt;/h1&gt;
&lt;p&gt;Right now, Mana Trance Creative - the name I do business as a freelancer under - is pretty low on my list of priorities. I take a new client once every three months or so, much reduced from when I was just out of college (and unemployed). However, over the next year I'll be slowly building up MTC. My goal is to be self-employed at roughly the same standard of living I have now by December of 2009. So, if any of you reading this needs a website (or art) or knows someone who does, shoot me an email!&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Fri, 25 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/04/what-do-i-do/</guid></item><item><title>Best OS ever</title><link>http://blog.danieljanus.pl/best-os-ever/</link><description>&lt;div&gt;&lt;p&gt;If you are reading this on a box that does not have an impressive amount of RAM (say, 512 MB or less) and is running a fairly recent Linux, then for goodness sake, drop everything you are doing right now and follow the instructions in this entry. I’m going to show you how to make your system use the memory in a more efficient way, &lt;em&gt;yielding an effect almost equivalent to increasing its amount — with no expenses whatsoever!&lt;/em&gt; Sounds good? Read on.&lt;/p&gt;&lt;p&gt;You see, there’s this Linux kernel module for kernels 2.6.17 and up (that’s what the phrase fairly recent in the previous paragraph macroexpands to), called &lt;a href="http://code.google.com/p/compcache"&gt;Compcache&lt;/a&gt;. It works by slicing out a contiguous chunk of your RAM (25% by default, but it’s settable, of course) and setting it up as a swap space with highmost priority. The trick is that pages that are swapped out to this area are compressed using the &lt;a href="http://www.oberhumer.com/opensource/lzo/"&gt;LZO&lt;/a&gt; algorithm, which provides very fast compression/decompression while maintaining a decent compression ratio. In this way, more unused pages can fit in memory, and less of them are swapped out to disk, which can considerably cut down disk swap usage. I’ve enabled it in my system and it doesn’t seem to cause any problems, while providing a visible efficiency boost. Here’s how I did it on a freshly-installed &lt;a href="http://www.ubuntu.com/products/whatisubuntu/804features/"&gt;Ubuntu Hardy&lt;/a&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;I installed the Ubuntu package &lt;code&gt;build-essential&lt;/code&gt;, then downloaded Compcache from its site, extracted it, entered its directory and compiled it by saying make. So far, so easy.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Unfortunately, one cannot say &lt;code&gt;make install&lt;/code&gt; — creating a flexible cross-distro &lt;code&gt;install&lt;/code&gt; target is admittedly hard. So I installed it by hand, ensuring that my system enables it automatically on boot-up.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;I created a directory &lt;code&gt;/lib/modules/2.6.24-16-generic/ubuntu/compcache/&lt;/code&gt; and copied the four kernel modules (&lt;code&gt;compcache.ko&lt;/code&gt;, &lt;code&gt;lzo1x_compress.ko&lt;/code&gt;, &lt;code&gt;lzo1x_decompress.ko&lt;/code&gt;, and &lt;code&gt;tlsf.ko&lt;/code&gt;) created by the compilation to that directory.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Next, I ran &lt;code&gt;depmod -a&lt;/code&gt; to make the modules loadable by &lt;code&gt;modprobe&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;I edited the file &lt;code&gt;/etc/modules&lt;/code&gt; and added a line at the end, containing the single word &lt;code&gt;compcache&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;I copied the shell scripts &lt;code&gt;use_compcache.sh&lt;/code&gt; and &lt;code&gt;unuse_compcache.sh&lt;/code&gt; that come with compcache to &lt;code&gt;/usr/local/bin&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;I created an executable script &lt;code&gt;/etc/init.d/compcache&lt;/code&gt; with the following contents:&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&lt;code class="hljs bash"&gt;&lt;span class="hljs-meta"&gt;#!/bin/sh&lt;/span&gt;
&lt;span class="hljs-keyword"&gt;case&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;&lt;span class="hljs-variable"&gt;$1&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class="hljs-keyword"&gt;in&lt;/span&gt;
  start)
    /usr/local/bin/use_compcache.sh ;;
  stop)
    /usr/local/bin/unuse_compcache.sh ;;
&lt;span class="hljs-keyword"&gt;esac&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;The last step was to create a symlink &lt;code&gt;/etc/rc2.d/S02compcache&lt;/code&gt; pointing to that script.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I then rebooted the system and verified that the new swapspace is in use:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs bash"&gt;nathell@chamsin:~$ &lt;span class="hljs-built_in"&gt;cat&lt;/span&gt; /proc/swaps
Filename        Type        Size    Used    Priority
/dev/sdb2       partition   996020  0       -1
/dev/ramzswap0  partition   128896  111396  100
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;With the final release of Hardy installed on my main box and compcache optimizing its memory usage, I do not hesitate to call this combo the best OS I have ever had installed.&lt;/p&gt;&lt;p&gt;And no, I don’t own a Mac. :-/&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Fri, 25 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/best-os-ever/</guid></item><item><title>What the client wants isn't always what they need</title><link>https://benovermyer.com/blog/2008/04/what-the-client-wants-isnt-always-what-they-need/</link><description>&lt;p&gt;&lt;em&gt;Guest Post by Monica O'Brien of &lt;a href="http://www.twentyset.com/" rel="external"&gt;Twenty Set&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I've recently noticed a trend in software development that is along the lines of "If we build it they will come." This is a problem in any type of product development, but it seems to happen more often in software development because there are fewer entry barriers to start a technology-based company. The problem with "building things" is there are no limits to technology in terms of virtual products. If you can dream it, you can find a way to make it virtual. Which means there are a lot of people trying to make money off of products or enhancements that are missing one thing: a customer need.&lt;/p&gt;
&lt;p&gt;What technology companies need most when developing a new product or enhancing an existing product is marketing research. Unfortunately, research is thought to be costly to be hired out, so many companies do an ad hoc version of marketing research which comes down to implementation managers asking customers what they want and reporting back to the company. This methodology is inherently flawed, however. The first rule of marketing research is you don't ask your customers what they want.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If I'd have asked my customers what they wanted, they would have told me "A faster horse." ~ Henry Ford&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Customers are good at identifying solutions, not needs. In this example the user needs to get to places faster and comes up with a solution based on previous experience. But where's the innovation in something a customer has already experienced? Most customers don't understand technology the way a software developer would, and the solutions a customer presents cannot be new or different because they are solutions someone else has already created.&lt;/p&gt;
&lt;p&gt;A company that uses solutions to determine what to build next will become an aggregator rather than an innovator; and while aggregators can be useful, they are certainly not original, cutting-edge, or exciting. Aggregation leads to other problems, namely complicated or unnecessary functionality. Which is why most software becomes too expensive, too slow, or too buggy. Some advice for companies developing software - if you want to be an industry leader, learn how to extracts needs vs. solutions. There is an entire science built around how to do this, and in my experience people without formal training in marketing research are absolutely horrible at understanding the voice of their customer. So maybe hire someone instead - the cost incurred will return tenfold in profits.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Thu, 24 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/04/what-the-client-wants-isnt-always-what-they-need/</guid></item><item><title>Forgetting</title><link>http://blog.danieljanus.pl/forgetting/</link><description>&lt;div&gt;&lt;p&gt;It has just occurred to me that the best way to throwing things out of one’s mind is to let it be absorbed by something else. I guess this is oft-overlooked fact, even though it seems to be quite obvious. In particular, forcing oneself not to think about something is &lt;em&gt;not&lt;/em&gt; a wise strategy, since it leads to mental strain and thinking more and more, eventually yielding dejectedness that can be hard to get over.&lt;/p&gt;&lt;p&gt;And what could be more absorbing than debugging a &lt;code&gt;SIGSEGV&lt;/code&gt; buried deeply in the innards of some library early in the morning? ;–)&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Thu, 24 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/forgetting/</guid></item><item><title>Hacking away with JSON-RPC</title><link>http://blog.danieljanus.pl/hacking-away-with-json-rpc/</link><description>&lt;div&gt;&lt;p&gt;Let’s try:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs lisp"&gt;(&lt;span class="hljs-name"&gt;let&lt;/span&gt; ((&lt;span class="hljs-name"&gt;s&lt;/span&gt; (&lt;span class="hljs-name"&gt;socket-stream&lt;/span&gt;
          (&lt;span class="hljs-name"&gt;socket-connect&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;localhost&amp;quot;&lt;/span&gt; &lt;span class="hljs-number"&gt;10081&lt;/span&gt;
                          &lt;span class="hljs-symbol"&gt;:element-type&lt;/span&gt; &amp;#x27;(unsigned-byte &lt;span class="hljs-number"&gt;8&lt;/span&gt;)))))
  (&lt;span class="hljs-name"&gt;write-netstring&lt;/span&gt; &lt;span class="hljs-string"&gt;&amp;quot;{\&amp;quot;method\&amp;quot;:\&amp;quot;ping\&amp;quot;,\&amp;quot;params\&amp;quot;:[],\&amp;quot;id\&amp;quot;:1}&amp;quot;&lt;/span&gt; s)
  (&lt;span class="hljs-name"&gt;finish-output&lt;/span&gt; s)
  (&lt;span class="hljs-name"&gt;princ&lt;/span&gt; (&lt;span class="hljs-name"&gt;read-netstring&lt;/span&gt; s))
  (&lt;span class="hljs-name"&gt;close&lt;/span&gt; s))
&lt;span class="hljs-comment"&gt;; { &amp;quot;result&amp;quot;: &amp;quot;pong&amp;quot; }&lt;/span&gt;
&lt;span class="hljs-comment"&gt;; --&amp;gt; T&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Yay! This is Common Lisp talking to a &lt;a href="http://json-rpc.org/"&gt;JSON-RPC&lt;/a&gt; server written in C. This means that I have now the foundations for rewriting Poliqarp on top of JSON-RPC (according to the &lt;a href="http://blog.danieljanus.pl/poliqarp-new-protocol.html"&gt;protocol spec&lt;/a&gt; I have recently posted) up and running, and all that remains is to fill the remainder.&lt;/p&gt;&lt;p&gt;Well, to be honest, this is not exactly JSON-RPC. First off, as you might have noticed, the above snippet of code sends JSON-RPC requests as &lt;a href="http://cr.yp.to/proto/netstrings.txt"&gt;netstrings&lt;/a&gt;. This is actually intentional, and the reasons for adopting this encoding have been described in detail in the spec (it basically boils down to the fact that it greatly simplifies reading from and writing to network, especially in C). I wrote some crude code to handle netstrings in CL — now it occurred to me that it might actually be worthwhile to polish it up a little, write some documentation and put on &lt;a href="http://www.cliki.net/"&gt;CLiki&lt;/a&gt; as an asdf-installable library. I’ll probably get on to this quite soon.&lt;/p&gt;&lt;p&gt;Second, the resulting JSON object does not have all the necessary stuff. It contains the result, but not the error or id (as mandated by the &lt;a href="http://json-rpc.org/wiki/specification"&gt;JSON-RPC spec&lt;/a&gt;). This is actually a deficiency of the &lt;a href="http://www.big-llc.com/software.jsp"&gt;JSON-RPC C library&lt;/a&gt; I’m currently using. It places the burden of constructing objects that are proper JSON-RPC responses on the programmer, instead of doing that itself. This will be easy to sort out, however, because the library is small and adheres to the &lt;a href="http://en.wikipedia.org/wiki/KISS_principle"&gt;KISS principle&lt;/a&gt;. More of a problem is that the licensing of that library is unclear; I emailed the maintainers to explain the status.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Thu, 24 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/hacking-away-with-json-rpc/</guid></item><item><title>bfpp</title><link>https://www.akalin.com/bfpp</link><description>&lt;div class="p"&gt;Okay, I lied; you can't &lt;em&gt;really&lt;/em&gt; embed &lt;a href="http://www.muppetlabs.com/~breadbox/bf/"&gt;brainfuck&lt;/a&gt; in C++
but you can get pretty close.  Here is an example:

&lt;pre class="code-container"&gt;&lt;code class="language-cpp"&gt;#include "bfpp.h"

int main() {
  // Prints out factorial numbers in sequence.  Adapted from
  // http://www.hevanet.com/cristofd/brainfuck/factorial.b .
  bfpp
    * + + + + + + + + + + * * * + * + -- * * * + -- - -- &amp; &amp; &amp; &amp; &amp; -- +
    &amp; &amp; &amp; &amp; &amp; ++ * * -- -- - ++ * -- &amp; &amp; + * + * - ++ &amp; -- * + &amp; - ++ &amp;
    -- * + &amp; - -- * + &amp; - -- * + &amp; - -- * + &amp; - -- * + &amp; - -- * + &amp; - --
    * + &amp; - -- * + &amp; - -- * + &amp; - -- * -- - ++ * * * * + * + &amp; &amp; &amp; &amp; &amp; &amp;
    - -- * + &amp; - ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ * -- &amp; + * - ++ + * *
    * * * ++ &amp; &amp; &amp; &amp; &amp; -- &amp; &amp; &amp; &amp; &amp; ++ * * * * * * * -- * * * * * ++ + +
    -- - &amp; &amp; &amp; &amp; &amp; ++ * * * * * * - ++ + * * * * * ++ &amp; -- * + + &amp; - ++
    &amp; &amp; &amp; &amp; -- &amp; -- * + &amp; - ++ &amp; &amp; &amp; &amp; ++ * * -- - * -- - ++ + + + + + +
    -- &amp; + + + + + + + + * - ++ * * * * ++ &amp; &amp; &amp; &amp; &amp; -- &amp; -- * + * + &amp; &amp;
    - ++ * ! &amp; &amp; &amp; &amp; &amp; ++ * ! * * * * ++ 
  end_bfpp
}&lt;/code&gt;&lt;/pre&gt;

I call this variant &amp;ldquo;bfpp&amp;rdquo; as it has some pretty significant
differences from brainfuck.  First of all, some commands had to be
adapted; although &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;-&lt;/code&gt; remain the same,

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;&amp;lt;&lt;/code&gt; and &lt;code&gt;&amp;gt;&lt;/code&gt; were changed to &lt;code&gt;&amp;amp;&lt;/code&gt; and
    &lt;code&gt;*&lt;/code&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;.&lt;/code&gt; and &lt;code&gt;,&lt;/code&gt; were changed to &lt;code&gt;!&lt;/code&gt; and &lt;code&gt;~&lt;/code&gt;

    (mnemonic: &lt;code&gt;!&lt;/code&gt; contains &lt;code&gt;.&lt;/code&gt; within it and &lt;code&gt;~&lt;/code&gt;
    is kind of like a sideways &lt;code&gt;,&lt;/code&gt;),&lt;/li&gt;
  &lt;li&gt;and &lt;code&gt;[&lt;/code&gt; and &lt;code&gt;]&lt;/code&gt; were changed to &lt;code&gt;--&lt;/code&gt; and

    &lt;code&gt;++&lt;/code&gt; (mnemonic: &lt;code&gt;[&lt;/code&gt; and &lt;code&gt;]&lt;/code&gt; are the most
    complex brainfuck commands [to implement, at least] and so deserve to be mapped to the wider
    and more prominent operators).&lt;/li&gt;
&lt;/ul&gt;

This magic is made possible by the fact that brainfuck has exactly
eight commands and C++ has exactly eight overloadable symbolic unary
operators.  Add some macros to hide the C++ scaffolding behind some
delimiters and you have a convincing illusion of an embedded language.&lt;/div&gt;

&lt;p&gt;&lt;a href="/bfpp-files/bfpp.h"&gt;bfpp.h&lt;/a&gt; implements a simple (&amp;lt;100 lines) bfpp interpreter and
the magic described above, and &lt;a href="/bfpp-files/bf2bfpp.c"&gt;bf2bfpp.c&lt;/a&gt; is a
straightforward translator from brainfuck to bfpp.  Gotta love C++!&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Like this post? Subscribe to
  &lt;!-- The image is 256x256, the center of the dot is 189 pixels from the
     top, and the radius of the dot is 24. Therefore, the dot is 43/256 =
     0.16796875 of the image height above the bottom.--&gt;
&lt;a href="feed/atom"&gt;my feed &lt;img alt="RSS icon" src="feed-icon.svg" /&gt;&lt;/a&gt;

  or follow me on
  &lt;a href="https://twitter.com/fakalin"&gt;Twitter &lt;img alt="Twitter icon" src="twitter-icon.svg" /&gt;&lt;/a&gt;.&lt;/p&gt;</description><author>Fred Akalin</author><pubDate>Wed, 23 Apr 2008 10:00:00 GMT</pubDate><guid isPermaLink="true">https://www.akalin.com/bfpp</guid></item><item><title>The Music Man—Review</title><link>https://www.davidschlachter.com/writings/musicman</link><description>My review of the April 22nd, 2008 performance of Sir Wilfrid Laurier High School’s production of “The Music Man”, for the  Cappies.</description><author>David Schlachter</author><pubDate>Tue, 22 Apr 2008 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/musicman</guid></item><item><title>Earth Day 2008</title><link>https://benovermyer.com/blog/2008/04/earth-day-2008/</link><description>&lt;p&gt;Today is Earth Day. To celebrate, today I'm going to post a short list of some great links in the spirit of the holiday that are relevant to the Millennial. My favorite is the solar-powered iPod, but check them all out!&lt;/p&gt;
&lt;img alt="A photo of a waterfall" class="photo" src="https://benovermyer.com/blog/2008/04/earth-day-2008/waterfall.jpg" /&gt;
&lt;p&gt;&lt;a href="http://www.reegle.info/" rel="external"&gt;Reegle&lt;/a&gt; - A renewable energy search engine that tries to bill itself as Web 2.0. Technologically speaking, it's not particularly advanced - no social media, the web design itself is a little off in places, and it appears to be trying to model itself after Google but doesn't come close. However, as a resource for renewable energy information and news related to that topic, it does a good job. There IS a blog, too, and though it clearly needs an editor, the content is in the right place and well-informed.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ecoworld.com/" rel="external"&gt;EcoWorld&lt;/a&gt; - This site has a wealth of content. Don't let the ugly design put you off - everything is fairly well organized, and there's a few fun things in there, like this biofuel land calculator. I'm no scientist though, so take this - as with all things - with a grain of salt.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ipodjuice.com/solar-powered-ipod-battery-charger.htm" rel="external"&gt;Solar-powered iPod charger&lt;/a&gt; - With this and an iPod Touch or iPhone, you can take your mobile computing into the bush and not worry about powering the thing. Also, because it's solar power, it's greener than the alternative.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.greentechnolog.com/" rel="external"&gt;GreenTechnoLog&lt;/a&gt; - One of the better green tech blogs I've found. Multiple good articles with great information! Dumb Little Man has &lt;a href="http://www.dumblittleman.com/2008/02/turn-green-heres-15-ways-reduce-your.html" rel="external"&gt;an excellent post on reducing your carbon footprint&lt;/a&gt;. I can't recommend this blog enough, and it turns out he had a perfect post for this topic!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://web.archive.org/web/20080225113116/http://greatgreengadgets.com/gadgets/2007/12/17/carnival-of-the-green-108th-edition/" rel="external"&gt;GreatGreenGadgets&lt;/a&gt; has a blog post about... well, a whole lot of green gadgets, tricks, and websites. Lots. Check it out!&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Tue, 22 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/04/earth-day-2008/</guid></item><item><title>ECLM 2008</title><link>http://blog.danieljanus.pl/eclm-2008/</link><description>&lt;div&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;What is there left for me to do in this life&lt;/em&gt;?&lt;br /&gt; &lt;em&gt;Did I achieve what I had set in my sights?&lt;/em&gt;&lt;br /&gt; &lt;em&gt;Am I a happy man, or is this sinking sand?&lt;/em&gt;&lt;br /&gt; &lt;em&gt;Was it all worth it?—was it all worth it?&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: right;"&gt;— Queen&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Gusts of moderate wind are blowing at my face through the open window of a train from Amsterdam to Warsaw as I write these words. The last buildings of Amsterdam have vanished a while ago, giving ground to the damp, low countryside of the Netherlands — not quite fascinating sight to be watching — so I decided to fire up my laptop and write down some impressions while they are sharp and vivid — impressions from the &lt;a href="http://www.weitz.de/eclm2008/"&gt;European Common Lisp Meeting&lt;/a&gt; that was held in Amsterdam yesterday.&lt;/p&gt;&lt;p&gt;I was there with &lt;a href="http://blog.pasternacki.net/"&gt;Maciek&lt;/a&gt; and &lt;a href="http://lisp.jogger.pl/"&gt;Richard&lt;/a&gt;. Amsterdam did not receive us warmly, pouring some mild yet cold rain on us, but our hosts — Lispniks from the Hague, Gabriele and Victor from &lt;a href="http://streamtech.nl/"&gt;Streamtech&lt;/a&gt; — turned out to be really nice guys. I’m not going to go into a very detailed description of the social aspects of our trip, instead focusing on the conference itself. And that is definitely a topic worth talking about for a long time.&lt;/p&gt;&lt;p&gt;The first man to speak was Jeremy Jones of &lt;a href="http://www.clozure.com/"&gt;Clozure Associates&lt;/a&gt;, talking about InspireData and how they did it in Lisp. Although they also seem to be the people behind Clozure CL the implementation of Common Lisp, InspireData, the product their presentation was about, seems to have been written in LispWorks. It is a quite interesting application for browsing datasets in many interesting ways and draw conclusions for them. Jeremy started off with a demonstration presenting the key ideas of InspireData and what it can do, and this almost instantly hooked the attention of most of the gathered Lispers; mine, at least, definitely. First off, it seems to be quite a nice success story of a real-world application of Lisp, well worth learning about and mentioning where it deserves a mention. Second, one of its great features shown by the demo is that one can copy HTML tables from a Web browser and paste them as InspireData datasets. Given that Poliqarp now has statistical features and can export its data to HTML, I wonder whether it is possible to couple it with InspireData to interactively explore linguistic material in an absorbing way. That’s certainly a topic worthy of further research.&lt;/p&gt;&lt;p&gt;And last but not least, Jeremy outlined the points they did wrong and those they got right. Among those latter were two letters that now constitute a huge part of my professional life: &lt;strong&gt;QA&lt;/strong&gt;. He just couldn’t emphasize enough how crucial the fact that they had a serious quality assurance process from the very beginning proved to yield the final quality of the product. That’s the lesson I’m now quickly learning. When I learned that InspireData was mostly tested by hand by a skilled QA team, I felt somewhat proud of being able to automate large parts of the process at Sentivision. I’m very curious where this path will lead me to. Let’s hope for the best!&lt;/p&gt;&lt;p&gt;The next speaker was Nicolas Neuss of University of Karlsruhe, talking about &lt;a href="http://www.femlisp.org/"&gt;Femlisp&lt;/a&gt;, a framework for solving partial differential equations in Common Lisp. I have little to say about this one, since I lack the mathematical background needed to fully comprehend and appreciate the topic; it’s just not my kettle of fish. Undoubtedly, though, Femlisp seems to be filling its niche in a neat way, as the demonstrations showed.&lt;/p&gt;&lt;p&gt;After a coffee break, Stefan Richter came up with the one presentation that I’ve been looking forward to the most; that of using Common Lisp for large, scalable Internet systems. After all the talks were over, Maciek dubbed it a “very nice anti-FUD presentation” and I could not agree more. I didn’t learn many new things from it, but the author clearly knows how to attempt to convince non-Lispers to try out Lisp. The talk started off with outlining the typical designs of Web apps and portals, starting with simple one-server scenarios that don’t scale well and progressing in the direction of more scalable and extensible ones. Stefan then pointed out that in some mainstream languages like Java there exists a mature and proven infrastructure for employing such designs. And then came the key point — &lt;em&gt;that this is the case also for Common Lisp!&lt;/em&gt; All the necessary tools are there, ready to use Right Now and free for the most part; they’re just not as mature in some cases. This is not much of a problem, though, given the incremental nature of Lisp development: any problem at hand is typically fixable much faster than in case of other languages. The only weird thing was that the author advocated using continuation-based Web frameworks (such as &lt;a href="http://common-lisp.net/project/cl-weblocks/"&gt;Weblocks&lt;/a&gt; or &lt;a href="http://common-lisp.net/project/ucw/"&gt;UnCommon Web&lt;/a&gt;) just a couple of minutes after discouraging using sticky sessions.&lt;/p&gt;&lt;p&gt;Next came Killian Sprotte with a speech about &lt;a href="http://www2.siba.fi/PWGL/"&gt;PWGL&lt;/a&gt;, the program for computer-aided music composing. I have very mixed feelings about it. Notice that I didn’t use the word “presentation” — there was no presentation at all. Yes, that’s right. The speaker was just talking and showing off various things in the musical engine. Now, having no presentation accompanying the talk is not necessarily a bad thing in itself; but without one, it’s a little harder to draw attention of the audience and a whole lot easier to deliver a chaotic talk instead of a cleanly-structured and well-organized one. Such was the case with this speech. Some features were shown, but with a fair amount of obscurity and boredom thrown in, leaving me with a rather low overall impression.&lt;/p&gt;&lt;p&gt;As for PWGL itself, some of the ideas employed in it seem a bit peculiar (for want of a better word) to me. As befits a Lisp program, it is an extensible utility that actually allows users to program music just as one programs software. But the way that programming is done… well, think of a graphical editor for Lisp programs. An editor in which to write, say, a factorial function, you right-click an initially blank sheet, select &lt;code&gt;defun&lt;/code&gt; from a pop-up with a complicated set of menus and submenus… and kaboom! up comes a box divided into several sub-boxes. They correspond to — what else they could? — the name of the function, list of arguments, and a body. You can draw boxes representing computations, drag them around and link them with arrows — this is supposed to build complicated expressions out of simpler ones. And there is a huge library of musical tools, all available for the convenience of a programmer. Or, should I say, a composer.&lt;/p&gt;&lt;p&gt;Sounds cool? Maybe — for a newbie. I can’t really say. As someone who has high experience with Lisp and programming in general, I can only speak for myself. And for me all this click-and-drag-programming seems to be an unnecessarily tedious, obscure and error-prone way of doing things. Stuff like score editors, chord editors or various transformations is admittedly cool, but for lower-level matters the kind of visualization PWGL offers (and it obviously has its rough edges) seems to get in the way rather than staying out of it. But perhaps that’s just me?&lt;/p&gt;&lt;p&gt;By the time the fourth talk ended, most Lispers were already hungry, so a lunch break followed. I talked to some guy (I don’t remember his name, alas) who’s working on porting Clozure CL to 64-bit Windows. This is great news — when the port’s complete, it has high chances of becoming the free Common Lisp implementation of choice for many Windows Lisp hackers.&lt;/p&gt;&lt;p&gt;Juan José García-Ripoll then &lt;a href="http://ecls.wiki.sourceforge.net/space/showimage/eclm2008.pdf"&gt;talked&lt;/a&gt; about &lt;a href="http://ecls.sourceforge.net/"&gt;ECL&lt;/a&gt;, another CL implementation that is characterized by a fairly small memory and disk footprint, while still managing to achieve decent performance (via compilation to C) and good standard compliance. It was good to see that ECL is still quite alive and getting better and better with each release. Just for the heck of it, I attempted in the evening to reproduce the problem I had with ECL a while ago on a fresh CVS checkout. I managed to reproduce it (for the curious, it was an issue with ECL failing to build after having been &lt;code&gt;configure&lt;/code&gt;d with the option &lt;code&gt;--disable-shared&lt;/code&gt;). So I reported the bug to Juan, and he promised to look into it within the next days. And I must say that reporting bugs IRL to open source projects’ maintainers is a very nice experience. :-)&lt;/p&gt;&lt;p&gt;And then came a really big surprise, and I mean a &lt;em&gt;nice&lt;/em&gt; surprise. It took the form of Kristofer Kvello of &lt;a href="http://www.selvaag.no/"&gt;Selvaag&lt;/a&gt;, a Norwegian-based house-building company, and his presentation on &lt;a href="http://www.selvaag.no/en/Companies/Selvaagbluethink/aboutus/Sider/default.aspx"&gt;House Designer&lt;/a&gt;, a Common Lisp program for aiding in designing residences, as the name suggests. Yet another example of a success story in an area CL can really excel at. Basically, what House Designer can do is that you give it a &lt;em&gt;sketch&lt;/em&gt;, containing a rough description of the shape of a flat or residence and layout of rooms, and out comes a very detailed project with all sorts of bells and whistles: the program automatically figures out what the number of windows should be and where they should be located, the number and location of electric outlets, the optimal types of walls, layout of water installation and what not. It’s transfixing when you think of the sheer amount of tedious labour it automates, taking into account all of the professional knowledge about designing houses accumulated over years, some parts of which a human can easily omit. And it’s been Lisp all the lifetime of this project, and it’s Lisp all the way down (except for the GUI in Java)! Very, very impressive!&lt;/p&gt;&lt;p&gt;Marc Battyani’s talk about &lt;a href="http://www.hpcplatform.com/"&gt;programming FPGAs in Lisp&lt;/a&gt; probably should not have been stacked so late in the programme. I mean, the topic seems to be quite interesting (though a bit low-level for my interests), but there was something about Marc’s way of talking and showing things that sent me off dozing almost instantaneously. I’d been a bit tired after the many hours of sitting and listening to speeches, especially after having woken up at six o’clock, and so I somewhat regret missing large parts of the talk. It’s nice to know, though, that it is possible to do such things with Lisp. Seems to have a high hack value, as in: “Why do it this way? Because we &lt;em&gt;can&lt;/em&gt;!”&lt;/p&gt;&lt;p&gt;And what better end of a conference could one ask for than a rant by Kenny Tilton? If you have only encountered Kenny on the Usenet (some of the crème de la crème of his postings is &lt;a href="http://www.pasternacki.net/en/ken-tilton-fortunes"&gt;meticulously collected by Maciek&lt;/a&gt;) and think he’s one heck of a freak, you definitely should listen to him live. Here was another talk without slides — just talking and demonstrating stuff — but this time, it was a totally different thing. Kenny sure knows how to attract the attention of the audience and how not to let it loose throughout an hour’s worth of talking. And he changes topics with mastery, using digressions to a great effect to avoid the boredom slipping in, caused by bragging about one thing all the time. There was &lt;a href="http://smuglispweeny.blogspot.com/2008/02/cells-manifesto.html"&gt;Cells&lt;/a&gt; in that talk, there was &lt;a href="http://www.theoryyalgebra.com/"&gt;teaching of algebra&lt;/a&gt;, and there was high-speed driving through the streets of New York. I only hope someone has recorded that to put it online.&lt;/p&gt;&lt;p&gt;So, this was it. There was much talk afterwards, there was much beer, there was much socializing, there was much rejoicing. I saw a real &lt;a href="http://laptop.org/"&gt;XO-1&lt;/a&gt; and played with it for a while, and boy, isn’t it cute! And then we all came back. And here I am, sitting at my desk in Warsaw (it’s the next day already; I really wish my laptop had a better battery), finishing up this longish blog entry and asking myself: was this 50 euro well spent?&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;Yes, it was a worthwhile experience, hahhahahahahhaaaa!&lt;/em&gt;&lt;br /&gt; (evil chuckle à la Kenny)&lt;br /&gt; &lt;em&gt;It was worth it!&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Tue, 22 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/eclm-2008/</guid></item><item><title>Moving to mobile: how to work from any computer</title><link>https://benovermyer.com/blog/2008/04/moving-to-mobile-how-to-work-from-any-computer/</link><description>&lt;p&gt;Lately, working on multiple computers has started to take its toll on my time and productivity. I regularly use my work computer, my laptop, and my home computer, and occasionally use university computers and conference room computers. That's five different machines on a fairly frequent basis. It's hard to keep track of everything - especially if I need a file that's on machine X, or a password that's in the Firefox password manager on machine Y. So, to fix that, I'm going full mobile. I'm moving everything that can be securely moved (i.e., nothing proprietary from work) into the cloud. Here's a few of the things I'm doing to accomplish this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://keepass.info/" rel="external"&gt;KeePass&lt;/a&gt; - I'm moving all my passwords and login names into the freely-available KeePass password manager. It's portable and very secure, as well as able to generate some really nice passwords for you - and all you need to know is one password to unlock the database. No more having to remember dozens of different passwords and logins.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://drive.google.com/" rel="external"&gt;Google Docs&lt;/a&gt; - Documents that I don't use often I'm archiving to DVD. Everything else, which isn't much, I'm moving into Google Docs - both for ease of access and for the unique collaborative quality of document editing in the cloud.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://reader.google.com/" rel="external"&gt;Google Reader&lt;/a&gt; - Though I love the Flock browser's social media functions, I'm moving to just using Google Reader for all my feeds. That way I can keep up without having to worry about logging on the right machine, and feeds that aren't allowed at work - like the Wizards of the Coast feed - I just keep in a separate, closed folder that doesn't trip the firewall.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://notebook.google.com/" rel="external"&gt;Google Notebook&lt;/a&gt; - No need to keep track of all my favorites/bookmarks separately. Notebook does this for me. It even integrates with Firefox with a nifty toolbar.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://portableapps.com/" rel="external"&gt;Portable Apps&lt;/a&gt; - For those times when I really need a specific application, I'll just load up Portable Apps on my flash drive. GAIM, OpenOffice, 7zip, Notepad++, it's all there and all portable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The only applications which I can't transport easily are Photoshop and Star Wars Galaxies, but seeing as Adobe just released a web-based version of Photoshop that's freely available, the former's not going to be a problem. And I really don't need to be playing Galaxies at work, so that's not an issue either, heh. I'm taking my first steps toward being fully mobile. If you have any suggestions for additional ways to do this, let us know in the comments!&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Thu, 17 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/04/moving-to-mobile-how-to-work-from-any-computer/</guid></item><item><title>Opera and libnpp.so</title><link>https://bastian.rieck.me/blog/2008/opera_and_libnpp_so/</link><description>&lt;p&gt;After updating my system to FreeBSD 7.0, I received the following error from Opera:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Opera encountered a problem during plug-in setup.
Plug-ins will not work properly.
Check your installation.

Could not locate plug-in 'libnpp.so'.
This executable is included in the install package.

This executable is included in the install package.

Could not start plug-in executable 'operapluginwrapper'
/usr/local/share/opera/plugins/operapluginwrapper

Plug-in path
(Path can be modified in Preferences dialog)

/usr/local/share/opera/plugins
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Some searching brought me upon a post in the offical Opera forums. For reference purposes, I will archive it here. To solve the problem, follow these steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Close Opera&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use root to edit the file &lt;code&gt;/etc/libmap.conf&lt;/code&gt; (create it if it does not exist)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the following lines:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  [operapluginwrapper]
  libXThrStub.so.6 libXtst.so.6
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After a restart, Opera should work fine now. Apparently, only the wrong library
is used to start the plugin wrapper, the lines above should fix this.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Wed, 16 Apr 2008 23:34:47 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2008/opera_and_libnpp_so/</guid></item><item><title>Do you really need that?</title><link>https://benovermyer.com/blog/2008/04/do-you-really-need-that/</link><description>&lt;img alt="A photo of women shopping" class="photo" src="https://benovermyer.com/blog/2008/04/do-you-really-need-that/girlsshopping.jpg" /&gt;
&lt;p&gt;In the digital age, we are bombarded from all directions with social links, RSS feeds, tweets, and all manner of other social media gizmos. We are constantly plugged into the world of Look What Just Came Out That You Need Now messages from friends and colleagues. Oddly, we never stop to think whether we really need that new gadget. Lately, I've been feeling pressure to buy an iPod Touch. A thousand little voices tell me I need it, I can afford it, what will it hurt to just buy the lowest-storage model… but they rarely, if ever, touch on the most important topic: do I need it? As a web worker and an erstwhile member of the “coworking coffee crowd,” I experience near-continual exposure to the Benefits and Advantages of Switching to Mac. I own a first-gen iPod Nano that I almost never use, and that's about the extent of my Apple-ness. So, one voice is telling me to get the Touch because, hey, it's an upgrade over my ancient Nano.&lt;/p&gt;
&lt;p&gt;Another voice, from the people in the coffee shop, is telling me - sometimes directly, sometimes indirectly - that Apple is what all the Cool Kids have. I try and rationalize it. The iPod Touch can store contacts. It can access the Web via wifi for free. It lets me view the weather forecast wherever I find a hotspot. It plays music - and doesn't need to be connected to my computer to get new songs. It plays video, and if the rumors are true, Quake III Arena. All things that, as a web worker, I Need. …but do I really? Will my life be any more complete after buying a Touch? I tend to think not. After all, most purchases we make in our lifetimes should satisfy a genuine need. Entertainment, personal growth, and other less tangible concepts can easily be obtained through non-material means. Hiking every month, for example, is a lot cheaper than buying a new video game every month... and a lot better for you, too.&lt;/p&gt;
&lt;p&gt;So the next time you're tempted to buy that new gadget that just came out, think long and hard about WHY you need it. The decision may make you a better person. If you have a story about a time when you passed up (or bought!) a gadget you didn't really need, go ahead and share it!&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Wed, 16 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/04/do-you-really-need-that/</guid></item><item><title>Too much data for the browser window? Solution: iframe</title><link>https://www.databasesandlife.com/too-much-data-for-the-browser-window-solution-iframe/</link><description>&lt;p&gt;Recently I was asked to put a &lt;span class="hm" id="misp_compose_1"&gt;webpage&lt;/span&gt; online which contained some navigation and some content. There was more content than could fit the browser on an average screen. So the content looked basically like this:&lt;/p&gt;
&lt;img alt="" height="126" src="https://www.databasesandlife.com/20080416-scrollbar-in-scrollbar-orig.png" width="159" /&gt;
&lt;p&gt;But then I was sent a new version which was cleverer,&lt;/p&gt;
&lt;ul class="tight"&gt;
  &lt;li&gt;
    The content was stored in an &lt;span class="hm" id="misp_compose_2"&gt;iframe&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    There was Javascript which dynamically altered the size of the &lt;span class="hm" id="misp_compose_3"&gt;iframe&lt;/span&gt; to be the size of the monitor resolution (i.e. independent of current browser size)
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result of this complexity was that the &lt;span class="hm" id="misp_compose_4"&gt;iframe&lt;/span&gt; nearly—but not quite—fitted into the browser&amp;rsquo;s content area (assuming you had your browser maximised).&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 16 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/too-much-data-for-the-browser-window-solution-iframe/</guid></item><item><title>Poliqarp’s new protocol</title><link>http://blog.danieljanus.pl/poliqarp-new-protocol/</link><description>&lt;div&gt;&lt;p&gt;The first version of the document I’ve been writing about &lt;a href="http://blog.danieljanus.pl/tex-hackery.html"&gt;a couple of days ago&lt;/a&gt; is now &lt;a href="http://bach.ipipan.waw.pl/~nathell/new-protocol.pdf"&gt;ready for public review&lt;/a&gt;. I’ll be making an initial attempt at the implementation once I return from the &lt;a href="http://weitz.de/eclm2008/"&gt;European Common Lisp Meeting ‘08&lt;/a&gt; and write a report.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Wed, 16 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/poliqarp-new-protocol/</guid></item><item><title>Choice in the workplace? What will they think of next?</title><link>https://benovermyer.com/blog/2008/04/choice-in-the-workplace-what-will-they-think-of-next/</link><description>&lt;p&gt;It seems that lately more companies are veering towards non-uniformity in system design. Employees are allowed to use any computer they want, as long as certain key criteria (e.g., ability to get onto the company intranet) are met. &lt;a href="http://www.cio.com/article/144500/IT_s_Third_Epoch...and_Running_IT_at_Google/2" rel="external"&gt;Google has taken this approach&lt;/a&gt;, and I imagine it'd be a good thing for Gen Y to universally follow Google's lead. With the creep towards distributed computing once again, we could even have “&lt;a href="http://webworkerdaily.com/2008/04/13/time-for-a-portable-dumb-terminal/" rel="external"&gt;mobile dumb terminals&lt;/a&gt;” without too much effort or complication. So, with all that in mind, let's hear what you think about this. Should companies allow their employees to use whatever computer they want?&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Tue, 15 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/04/choice-in-the-workplace-what-will-they-think-of-next/</guid></item><item><title>A Sad Day</title><link>https://rob.sh/post/17/</link><description>&lt;p&gt;At lunchtime today I was told via IRC/e-mail that Chris Orme, of &lt;a href="http://www.datahop.it"&gt;Datahop&lt;/a&gt; passed away after a flight back from a peering conference in Florida. I&amp;rsquo;ve worked with Chris in the past, and despite having some differences of opinion, found him to be a great guy to work with. We had a disagreement about some contractual matters, and Chris was man enough to apologise to me in person at the LONAP 10th Birthday event. I was happy that we&amp;rsquo;d resolved our differences, and we exchanged contact details again. I was looking forward to working with him in the future.&lt;br /&gt;
&lt;br /&gt;
This blog post doesn&amp;rsquo;t really have much relevance to anyone else, other than to say that my thoughts are with Chris&amp;rsquo; family, and his girlfriend, Nat. I&amp;rsquo;m hoping that someone can suggest a cause that Chris cared about, so that donations can be made in his memory.&lt;br /&gt;
&lt;br /&gt;
Rest in peace, Chris.&lt;/p&gt;</description><author>rob.sh</author><pubDate>Mon, 14 Apr 2008 22:06:27 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/17/</guid></item><item><title>I’m not playing this stupid game anymore</title><link>http://blog.danieljanus.pl/im-not-playing-this-stupid-game-anymore/</link><description>&lt;div&gt;&lt;p&gt;Not until the next tournament, that is. My achievements in the 12th Scrabble Championship of Warsaw can be described as “mediocre” at best; four won, one drawn and seven lost games mean that my general rating will drop down by two points or so. Oh well. Everybody knows it’s a stupid game. ;-) At least I’ve managed to get a decent small score, with an average of 377 points per game.&lt;/p&gt;&lt;p&gt;Random resolutions for the indefinite future:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Get a final draft of the C++09 standard when it’s ready and acquaint myself with it as closely as possible. I strongly dislike C++ (and I’m not alone in this — see the &lt;a href="http://yosefk.com/c++fqa/"&gt;Frequently Questioned Answers&lt;/a&gt; about C++ for very detailed criticisms); however, I’ve long wanted to learn that language better just to know all the strengths and weaknesses of the enemy. The ideal moment for this will be when the new standard is out; this will give me the advantage of not having to unlearn the things changed by the standard, while staying on a cutting and competitive edge.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Get a copy of &lt;a href="http://en.wikipedia.org/wiki/Federico_Garc%C3%ADa_Lorca"&gt;Federico García Lorca&lt;/a&gt;’s poems translated into Polish by Jerzy Ficowski. I have only a very vague knowledge of Lorca (just his Romance of the Spanish Civil Guard (&lt;a href="http://www.poesia-inter.net/index214.htm"&gt;Romance de la Guardia Civil Española&lt;/a&gt;)), but I very much like what little I know.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Mon, 14 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/im-not-playing-this-stupid-game-anymore/</guid></item><item><title>The Triangle Factory Fire Project—Review</title><link>https://www.davidschlachter.com/writings/trianglefactory</link><description>My review of the April 9th, 2008 performance of Canterbury High School’s production of “The Triangle Factory Fire Project”, for the  Cappies.</description><author>David Schlachter</author><pubDate>Sat, 12 Apr 2008 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/trianglefactory</guid></item><item><title>You can't work out what the type of data is by looking at the data itself</title><link>https://www.databasesandlife.com/explicit-vs-implicit-data-typing/</link><description>&lt;p&gt;I was reading &lt;a href="http://www.theregister.co.uk/2004/07/16/excel_vanishing_dna/" rel="noopener noreferrer" target="_blank"&gt;this article&lt;/a&gt; about how certain data gets messed up when one imports it into Excel (certain data looks like a date and thus gets converted into one), and it reminded me of a &lt;a href="https://www.databasesandlife.com/transfering-some-hex-sometimes-gets-replaced-by-string-inf-why"&gt;problem&lt;/a&gt; I had when transferring data over an XML protocol from Perl (the SOAP library was inspecting the hex data I was transferring, but a small percentage of hex numbers look like &amp;ldquo;123e123&amp;rdquo;, which looked like a floating point number to the library)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 10 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/explicit-vs-implicit-data-typing/</guid></item><item><title>Recipe for a successful presentation</title><link>http://blog.danieljanus.pl/recipe-for-successful-presentation/</link><description>&lt;div&gt;&lt;p&gt;&lt;a href="http://www.latex-project.org/"&gt;LaTeX&lt;/a&gt; + &lt;a href="http://latex-beamer.sourceforge.net/"&gt;Beamer&lt;/a&gt; (for typesetting the presentation in a visually pleasant, clean, simple and consistent way) + &lt;a href="http://impressive.sourceforge.net/"&gt;KeyJNote&lt;/a&gt; (for presenting it stylishly to the audience) = a recipe for success. In particular, KeyJNote, which I found only yesterday, seems to be a fine and tremendously useful piece of software, despite being very young. The only annoyance I have found in it is that it doesn’t respond to Alt-Tab when in fullscreen mode. On the typographical side, I used the &lt;a href="http://www.cert.fr/dcsd/THESES/sbouveret/francais/LaTeX.html"&gt;progressbar&lt;/a&gt; Beamer theme and the &lt;a href="http://www.nowacki.strefa.pl/torunska-e.html"&gt;Torunian Antiqua&lt;/a&gt; font, both to great effect.&lt;/p&gt;&lt;p&gt;While I’m at this topic, &lt;a href="http://jan.rychter.com/"&gt;Jan Rychter&lt;/a&gt; has recently posted &lt;a href="http://jan.rychter.com/blog/files/sztuka-prezentacji-03-2008.html"&gt;a great guide to giving presentations&lt;/a&gt;, especially short ones. I heartily recommend it to those of you who speak Polish (is there actually any non-Polish-speaking person reading this?)&lt;/p&gt;&lt;p&gt;&lt;em&gt;Update 2010-Jan-17&lt;/em&gt;: KeyJNote is now called &lt;a href="http://impressive.sourceforge.net/"&gt;Impressive&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Thu, 10 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/recipe-for-successful-presentation/</guid></item><item><title>SQL*Net break/reset to client</title><link>https://tanelpoder.com/2008/04/10/sqlnet-breakreset-to-client/</link><description>&lt;p&gt;There was a &lt;a href="http://www.freelists.org/archives/oracle-l/04-2008/msg00250.html" target="_blank"&gt;question&lt;/a&gt; in Oracle-L mailinglist recently, regarding excessive &lt;code&gt;SQL*Net break/reset to client&lt;/code&gt; waiting by a session.&lt;/p&gt;
&lt;p&gt;A quote is below:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We are seeing an insert statement reporting &lt;code&gt;SQL*Net break/reset to client&lt;/code&gt; as over 33% of its time.&lt;/p&gt;
&lt;p&gt;On the face of it this event suggests network issues but nothing else backs this up as the cause.&lt;/p&gt;
&lt;p&gt;So I looked at the Java code in question and a trace of one of the sessions.&lt;/p&gt;
&lt;p&gt;What is happening is that an attempt is made to insert a row, most of the time a duplicate error results, the code catches this exception and does an update.&lt;/p&gt;
&lt;p&gt;I was wondering if its the duplicate error and the exception handling which results in this wait event showing up.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;My answer to that was following:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yes, a &lt;em&gt;SQL*Net break/reset&lt;/em&gt; happens when an error/unhandled exception is raised during a call (which means that the call executed didn&amp;rsquo;t complete normally, thus the call state must be reset).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The approach of &amp;ldquo;insert -&amp;gt; if failed then update&amp;rdquo; is basically what MERGE does.&lt;/p&gt;
&lt;p&gt;You need to change the application to use MERGE command. Alternatively you could use an &amp;ldquo;update -&amp;gt; if no-rows-updated then insert&amp;rdquo; approach, but MERGE makes much more sense nowadays.&lt;/p&gt;
&lt;p&gt;So, these waits aren&amp;rsquo;t really indicating any network bottleneck, but rather just the fact that the client needs to be notified if it&amp;rsquo;s call has failed and Oracle has to clean up after the failed call. Apparently on some (network protocol) architectures or in some scenarios these operations have taken significant time (and may have required a system call), so a kernel developer has decided to wait instrument them.&lt;/p&gt;
&lt;p&gt;In this blog entry I want to share a small test case which illustrates the point. First lets check how many times my session has waited for a &lt;code&gt;SQL*Net break/reset wait&lt;/code&gt; event:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; select event, total_waits from v$session_event where event like '%reset%' and sid = (select sid from v$mystat where rownum = 1);

no rows selected

&lt;/pre&gt;
&lt;p&gt;As V$SESSION_EVENT (like also V$SYSTEM_EVENT) doesn&amp;rsquo;t display events for which nobody has waited yet, I see that my session&amp;rsquo;s wait count for that event is zero.&lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s create an error, but also let&amp;rsquo;s handle it in a PL/SQL exception handler:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 09 Apr 2008 19:50:49 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/04/10/sqlnet-breakreset-to-client/</guid></item><item><title>Fear and aggression; the dark side, are they?</title><link>https://benovermyer.com/blog/2008/04/fear-and-aggression-the-dark-side-are-they/</link><description>&lt;img alt="An image of angry eyes" class="photo" src="https://benovermyer.com/blog/2008/04/fear-and-aggression-the-dark-side-are-they/anger.jpg" /&gt;
&lt;p&gt;Recently I read &lt;a href="http://zakstar.wordpress.com/2008/03/16/doing-the-right-thing-as-a-bystander-to-cruelty/" rel="external"&gt;a blog post&lt;/a&gt; railing against the lack of willingness to stand up for others in modern society. Too often, this observation proves widespread. I myself experienced something similar a long time ago, and regret not acting to this day. Most of this, I speculate, comes from a culture of individualism... and a lack of confrontation. We are sorely lacking in aggressive quality these days. This is not to say we should have more anger and violence; rather, we need to improve everyone's quality of life by introducing a little bit of healthy fear into the mix. For example, I avoid cobras when possible, as they tend to strike fatally when provoked. This is not a crippling fear, but rather a fear that guides my behavior for my (and the cobra's) safety.&lt;/p&gt;
&lt;p&gt;Not all fear is bad, no matter what our illustrious long-lost President said. We must be willing to step in and do what's right, and aggression is necessary for that. Pacifism only works when everyone is pacifist. This isn't just walking around the streets defending little girls from thugs, either - standing up for someone's idea in the office when the office bull-head is beating it down for no good reason is JUST as relevant. So next time you find yourself in a position to save someone, do it. Don't think about it. Just do it.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Wed, 09 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/04/fear-and-aggression-the-dark-side-are-they/</guid></item><item><title>YAVP</title><link>http://blog.danieljanus.pl/yavp/</link><description>&lt;div&gt;&lt;pre&gt;&lt;code&gt;Jezus, the high elven wizard, saved the world with his brave efforts and became a great ruler while saving himself 34 times.
He scored 24999532 points and advanced to level 50.
He survived for 0 years, 123 days, 0 hours, 11 minutes and 39 seconds (176207 turns).
Jezus visited 127 places.
His strength score was modified by +26 during his career.
His learning score was modified by +17 during his career.
His willpower score was modified by +10 during his career.
His dexterity score was modified by +7 during his career.
His toughness score was modified by +25 during his career.
His charisma score was modified by +9 during his career.
His appearance score was modified by +6 during his career.
His mana score was modified by +13 during his career.
His perception score was modified by +15 during his career.
He was unnaturally aged by 76 years.
He was the champion of the arena.
He was a member of the thieves guild.
He made a little water dragon very happy.
He defeated the arch enemy of a mighty karmic wyrm.
He adhered to the principles of the Cat Lord and thus rose to great fame.
He saved Khelavaster from certain death.
He left the Drakalor Chain after completing his quest and became a great leader and famous hero.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Yay! Now that I have finished ADOM for the first time ever, after something like six years of trying, I can finally get back to work with peace of mind. :-)&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Mon, 07 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/yavp/</guid></item><item><title>Ubuntu post-installation tricks</title><link>http://blog.danieljanus.pl/ubuntu-postinstall/</link><description>&lt;div&gt;&lt;p&gt;Yesterday, my level of frustration with my old operating system at work exceeded a critical point, and I installed a fresh daily build of the not-yet-released &lt;a href="https://wiki.ubuntu.com/HardyHeron"&gt;Ubuntu 8.04&lt;/a&gt; in place of it. Then, in addition to usual post-installation chores like setting up mail, hardware, etc., I performed a couple of steps to make the system more pleasurable to use. Here’s what I did, just in case someone finds this useful.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;First, I tweaked the font rendering. This was one area that has long been a PITA for Linux users (at least for me, since 2000 or so), but as far as Ubuntu is concerned, they introduced a change to Freetype somewhere along the way between Feisty and Gutsy which, when set up properly, makes the font rendering on LCD displays far superior for me to that of, say, Windows XP, in particular at small font sizes. The way to enable it is to enable sub-pixel rendering, and set the hinting level to “slight.” This results in a rendering very close to what the author of &lt;a href="http://www.antigrain.com/research/font_rasterization"&gt;Texts Rasterization Exposures&lt;/a&gt; managed to achieve.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;I installed the package &lt;code&gt;msttcorefonts&lt;/code&gt; to get Microsoft’s free-as-in-beer set of core TrueType fonts, including Times New Roman, Arial, Georgia, etc. There are very many sites out there on the Web that were designed with these fonts in mind, and this is one of the few areas Microsoft doesn’t completely suck at.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Next I enabled bitmap fonts. The way to do this is to become root, cd to &lt;code&gt;/etc/fonts/conf.d&lt;/code&gt;, remove the symlink named &lt;code&gt;70-no-bitmaps.conf&lt;/code&gt;, and make a symlink pointing to &lt;code&gt;/etc/fonts/conf.avail/70-yes-bitmaps.conf&lt;/code&gt; instead. This would come in handy in the next step.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Which was installing my favourite console font. Unfortunately, it doesn’t come preinstalled with the Gnome-based Ubuntu, but it was no big deal. The font is named console8x16 and it comes with Kubuntu’s (and KDE’s) default terminal emulator, Konsole. So I downloaded &lt;a href="http://packages.ubuntu.com/hardy/konsole"&gt;an appropriate package&lt;/a&gt; (manually, without the help of APT, because all I wanted was the font, not the package itself). I then installed Midnight Commander (which I use a lot, if only for its great vfs feature, which allows to access, inter alia, Debian/Ubuntu packages as if they were directories), grabbed the file &lt;code&gt;console8x16.pcf.gz&lt;/code&gt;, installed it in &lt;code&gt;/usr/share/fonts/X11/misc&lt;/code&gt;, changed to that directory, ran &lt;code&gt;mkfontdir&lt;/code&gt; and &lt;code&gt;mkfontscale&lt;/code&gt;, logged out and restarted the X server.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The last step was to use this font for Emacs, too. So I installed Emacs, created the file &lt;code&gt;~/.Xdefaults&lt;/code&gt; containing the single line&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Emacs*font: -misc-console-medium-r-normal--16-160-72-72-c-80-iso10646-1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and ran &lt;code&gt;xrdb ~/.Xdefaults&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Then I got round to configuring Emacs itself. But that’s a story for another post.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Mon, 07 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/ubuntu-postinstall/</guid></item><item><title>The TeX Hackery</title><link>http://blog.danieljanus.pl/tex-hackery/</link><description>&lt;div&gt;&lt;p&gt;After a longish while of inactivity, I finally got around to finishing the draft spec of a next-generation protocol for &lt;a href="http://poliqarp.sf.net/"&gt;Poliqarp&lt;/a&gt;, the be-all-end-all corpus concordance tool that I maintain. The spec is being written in LaTeX, and it has a number of subsections that describe particular methods of the protocol. Each one of those is further divided into sub-subsections that describe the method’s signature, purpose, syntax of request, syntax of response, and an optional example. I thought to write a couple of macros to help me separate the document’s logic from details of formatting, so that I could say:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs latex"&gt;&lt;span class="hljs-keyword"&gt;\synopsis&lt;/span&gt;/() -&amp;gt; {version : int; extensions : string*}/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and have it expanded into:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs latex"&gt;&lt;span class="hljs-keyword"&gt;\paragraph&lt;/span&gt;{Synopsis}
&lt;span class="hljs-keyword"&gt;\verb&lt;/span&gt;/&lt;span class="hljs-string"&gt;{version : int; extensions : string*}&lt;/span&gt;/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Being a casual LaTeX user who hardly ever writes his own macros, I first thought to use LaTeX’s command-defining commands, &lt;code&gt;\newcommand&lt;/code&gt; and &lt;code&gt;\renewcommand&lt;/code&gt;. However, I quickly ran into the limitation that the argument of commands defined in such a way can only be delimited by curly braces, which I could not use because they might appear in the argument itself.&lt;/p&gt;&lt;p&gt;I googled around and found that this limitation can be overcome by using &lt;code&gt;\def&lt;/code&gt; instead, which is not a LaTeX macro but rather an incantation of plain TeX, and allows to use arbitrary syntax for delimiting arguments. Having found that, my first shot was:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs latex"&gt;&lt;span class="hljs-keyword"&gt;\def&lt;/span&gt;&lt;span class="hljs-keyword"&gt;\synopsis&lt;/span&gt;/&lt;span class="hljs-params"&gt;#1&lt;/span&gt;/{&lt;span class="hljs-keyword"&gt;\paragraph&lt;/span&gt;{Synopsis}&lt;span class="hljs-keyword"&gt;\verb&lt;/span&gt;/&lt;span class="hljs-string"&gt;#1&lt;/span&gt;/}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;which, obviously enough, turned out not to work, producing errors about &lt;code&gt;\verb&lt;/code&gt; ended by an end-of-line.&lt;/p&gt;&lt;p&gt;“What the heck?” I thought, and resorted to Google again, this time searching for tex macros expanding to verb. This yielded an entry from some TeX FAQ, which basically states that the &lt;code&gt;\verb&lt;/code&gt; is a “fragile” command, and as such it cannot appear in bodies of macros. Ook. So it can’t be done?&lt;/p&gt;&lt;p&gt;“But,” I thought, “TeX is such a flexible and powerful tool, there must be some way around this!” And, as it would turn out, there is. Yet more googling led me to &lt;a href="http://groups.google.pl/group/comp.text.tex/browse_thread/thread/5bca05fb8865a9c2"&gt;this thread&lt;/a&gt; on comp.text.tex, where someone gives the following answer for a similar question:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs latex"&gt;&lt;span class="hljs-keyword"&gt;\def&lt;/span&gt;&lt;span class="hljs-keyword"&gt;\term&lt;/span&gt;&lt;span class="hljs-params"&gt;#&lt;/span&gt;{ &lt;span class="hljs-comment"&gt;%&lt;/span&gt;
   &lt;span class="hljs-keyword"&gt;\afterassignment&lt;/span&gt;&lt;span class="hljs-keyword"&gt;\Term&lt;/span&gt; &lt;span class="hljs-keyword"&gt;\let&lt;/span&gt;&lt;span class="hljs-keyword"&gt;\TErm&lt;/span&gt;= }&lt;span class="hljs-comment"&gt;%&lt;/span&gt;

&lt;span class="hljs-keyword"&gt;\edef&lt;/span&gt;&lt;span class="hljs-keyword"&gt;\Term&lt;/span&gt;{&lt;span class="hljs-keyword"&gt;\noexpand&lt;/span&gt;&lt;span class="hljs-keyword"&gt;\verb&lt;/span&gt; \&lt;span class="hljs-string"&gt;string}}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now this is overkill. Why in the world am I forced to stuff such incomprehensible hackery into my document just to perform a seemingly simple task?! Easy things should be easy — that’s one of the principles of good design.&lt;/p&gt;&lt;p&gt;Reluctantly, I copied it over, and attempted to adjust it to my needs. After a number of initial failed attempts, I thought that I might actually attempt to understand what all these &lt;code&gt;\afterassignment&lt;/code&gt;’s, &lt;code&gt;\noexpand&lt;/code&gt;’s and &lt;code&gt;\edef&lt;/code&gt;’s are for, so I downloaded the &lt;a href="http://www-cs-faculty.stanford.edu/~knuth/abcde.html"&gt;TeXbook&lt;/a&gt; and dived straight in.&lt;/p&gt;&lt;p&gt;I spent another fifteen minutes or so reading bits of it and trying to understand tokens, macros, when they are expanded and when merely carried over, etc. But a sparkle of thought made me replace the whole complicated thingy with a simple snippet that actually worked.&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs latex"&gt;&lt;span class="hljs-keyword"&gt;\def&lt;/span&gt;&lt;span class="hljs-keyword"&gt;\synopsis&lt;/span&gt;{&lt;span class="hljs-keyword"&gt;\paragraph&lt;/span&gt;{Synopsis}&lt;span class="hljs-keyword"&gt;\verb&lt;/span&gt;}&lt;span class="hljs-string"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That’s right. This superficially resembles a C preprocessor macro, and works because I was lucky enough to have &lt;code&gt;\verb&lt;/code&gt; appear last in the definition, thus allowing the “arguments” of &lt;code&gt;\synopsis&lt;/code&gt; to be specified just like arguments to &lt;code&gt;\verb&lt;/code&gt; and fit at exactly right place. I’m almost certain that it does not always work this way, but for now it’ll suffice.&lt;/p&gt;&lt;p&gt;Oh well. TeX is undoubtedly a fine piece of software that provides splendid results if used right. But I can’t get over the impressions that there are a great deal more idiosyncracies like this in it than in, say, Common Lisp, even though the latter’s heritage tracks back to as early as 1958 and is a whopping twenty years longer than TeX’s. (On the side note, as it turns out, someone has already written &lt;a href="http://www3.interscience.wiley.com/cgi-bin/abstract/98518913/ABSTRACT"&gt;a Lisp-based preprocessor for TeX macros&lt;/a&gt;. Gotta check it out someday.)&lt;/p&gt;&lt;p&gt;As for the TeXbook itself: it is a fine piece of documentation that I will definitely have to add to my must-read list, though it admittedly has a math-textbookish feel to it. First, however, I want to finish “Shaman’s Crossing” by Robin Hobb (which I will probably brag about in a separate post once I’m finished with it) and tackle Christian Queinnec’s “Lisp in Small Pieces”.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Sun, 06 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/tex-hackery/</guid></item><item><title>Introduction</title><link>http://blog.danieljanus.pl/introduction/</link><description>&lt;div&gt;&lt;p&gt;So, there. Inspired by the newly-started blogs of some of &lt;a href="http://www.joemonster.org/blog/pietshaq"&gt;my&lt;/a&gt; &lt;a href="http://jan.rychter.com/blog/"&gt;acquaintances&lt;/a&gt;, I had this thought that I might actually have a word or two on a number of subjects, and that it might even be worth sharing. And here I am, typing this introductory entry in my Emacs.&lt;/p&gt;&lt;p&gt;I guess the first thing one usually writes about in a blog is introducing himself to the public, so for those of you who have arrived here through some links on the Web and don’t know me, here goes. I am a 23-year-old (soon to be 24, though) programmer geek, living in Warsaw, Poland. In 2006, I graduated from Warsaw University, where I majored in computer science, and am now working full-time as a senior software engineer at &lt;a href="http://www.sentivision.com/"&gt;Sentivision&lt;/a&gt;. I have a &lt;a href="http://danieljanus.pl/"&gt;homepage&lt;/a&gt; (currently in Polish only, though I probably will translate it to English some day). These days, I tend to use Common Lisp for most of my programming work, though I also occassionally use Python, Ruby, C, Perl, OCaml, Haskell, Java, and a handful of other languages.&lt;/p&gt;&lt;p&gt;This is going to be a blog about my personal interests. This means mostly programming, with a fair share of posts about books, poetry, Scrabble, music, biking, cats, and a bunch of other topics thrown in. The new entries will most likely be added irregularly, whenever I feel like sharing a thought. My mother tongue is Polish, but I will try to maintain this blog in English just to polish up my English writing skills (no pun intended) and for greater worldwide understandability.&lt;/p&gt;&lt;p&gt;As you might have noticed, there is no possibility of leaving comments. This is a side-effect of the fact that this blog is, technically, just a bunch of static HTML pages (automatically generated with Blosxom), and is in line with my idea of blog comments: I view them as a way of providing direct feedback to the author, not as a publically available message board with discussions having a heavy tendency to drift off topic. So, should you like to comment on some post, feel free to drop me an email; I’ll be happy to respond to interesting mails in the blog. I can be contacted at dj at danieljanus dot pl.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Update 2010-Jan-17&lt;/em&gt;: Several things have changed —– in particular, Sentivision doesn’t exist anymore — but I haven’t done any editing in this post other than updating the links.&lt;/p&gt;&lt;/div&gt;</description><author>code · words · emotions: Daniel Janus’s blog</author><pubDate>Fri, 04 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">http://blog.danieljanus.pl/introduction/</guid></item><item><title>Wake up with the sun and regain control of your life</title><link>https://benovermyer.com/blog/2008/04/wake-up-with-the-sun-and-regain-control-of-your-life/</link><description>&lt;img alt="A photo of a sunrise" class="photo" src="https://benovermyer.com/blog/2008/04/wake-up-with-the-sun-and-regain-control-of-your-life/sunrise.jpg" /&gt;
&lt;p&gt;Most people in college and just out of it are night owls. I even know one or two who regularly sleep until noon. This behavior is reinforced by a student culture that emphasizes socializing at night as the highest priority. As a wise man once said, that's no way to go through life, son. I wake up every morning at 6:00 AM on the dot. Sometimes I use my alarm clock. Sometimes I don't. Either way, during winter I'm up before the sun and during summer I wake with the sun. As a result, my days are more productive, more active, and healthier. Ben Franklin had it right when he wrote “early to bed and early to rise makes a man healthy, wealthy, and wise.”&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;More Productive&lt;/strong&gt;. Since I wake up earlier, when fewer people are active, there are fewer distractions. I take a few minutes to just relax and collect my thoughts. Sometimes I'll make a rough plan for the day, though usually I just identify a few key goals I want to accomplish.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;More Active&lt;/strong&gt;. Waking up earlier, for whatever reason, gives me more energy than sleeping late. The difference between sleeping from 12:30-8 and 10:30-6, though both give my optimal 7.5 hours, is remarkable. By waking up before everything starts happening, I'm able to set a plan of attack instead of having to react to all the late-morning stimuli exploding around me. As a result, I don't tire as easily later in the day.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Healthier&lt;/strong&gt;. There are two main health benefits to waking up earlier. First and most obvious is lower stress. I lead a life that is almost completely free from long-lasting distress (as opposed to eustress, or good stress). I'm positive that waking up early helps with that, since as I stated before, I don't have to react to anything right away. I can just chill for a good hour or so. The second health benefit is a greater duration of exposure to sun - one of the few places you can get vitamin D. Vitamin D is your friend. Vitamin D is important. Get more vitamin D. Wake up early!&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="extra-reading"&gt;Extra Reading&lt;/h1&gt;
&lt;p&gt;Here are a few links which go into greater depth on this topic, and which offer some tips as to how to get up earlier painlessly: &lt;a href="http://zenhabits.net/2007/05/10-benefits-of-rising-early-and-how-to-do-it/" rel="external"&gt;Zen Habits - Ten Benefits of Waking Up Early and How to Do It&lt;/a&gt; &lt;a href="http://www.wikihow.com/Wake-Up-Without-an-Alarm-Clock" rel="external"&gt;Wikihow - Wake Up Without an Alarm Clock&lt;/a&gt; &lt;a href="http://www.howtowakeupearly.com/" rel="external"&gt;How to Wake Up Early&lt;/a&gt;&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Thu, 03 Apr 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/04/wake-up-with-the-sun-and-regain-control-of-your-life/</guid></item><item><title>Inaugural Habaricon</title><link>https://caiustheory.com/inaugural-habaricon/</link><description>&lt;p&gt;So I managed to secure a place to &lt;a href="http://habaricon.com/"&gt;HabariCon &amp;lsquo;08&lt;/a&gt;. Not quite sure what to expect, but being able to meet other people in real life and talk about habari &amp;amp; related things all day will be quite cool.&lt;/p&gt;
&lt;p&gt;Expect a round-up post of the &amp;lsquo;con tonight!&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Tue, 01 Apr 2008 10:27:55 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/inaugural-habaricon/</guid></item><item><title>Finally, at long last...</title><link>https://benovermyer.com/blog/2008/03/finally-at-long-last/</link><description>&lt;p&gt;Scin Karetyr, CL90 Commando. Finally. The long grind is over... and I can't help but think, now what? So, let's review those goals:&lt;/p&gt;
&lt;h1 id="goal-update"&gt;Goal Update&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Major Goal #1:&lt;/strong&gt; Hit CL90 with Scin. Done!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Major Goal #2:&lt;/strong&gt; Acquire a Vigo. No progress.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Major Goal #3:&lt;/strong&gt; Imperial Army space wing. No new progress.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minor Goal #1:&lt;/strong&gt; Finish the Rare Weapons Collections. Got two new items for the Rare Melee Weapons III collection.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minor Goal #2:&lt;/strong&gt; Fuura Hengwen, Shipwright. No progress, and I'm seriously considering just staying a Domestics trader.&lt;/p&gt;
&lt;p&gt;So. Now Major Goals #2 and #3 become #1 and #2, and Minor Goal #2 is scrapped in light of the fact that I'm just enjoying Domestics too much. I'll have to work more on my major goals, it seems. I should also mention that I'm working on a machinima movie for my guild, the Imperial Army. That could be considered a Major Project rather than a goal, as it's an ongoing and very long-term process.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Mon, 31 Mar 2008 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/03/finally-at-long-last/</guid></item><item><title>Programming Languages: Is newer always better? (Part 2)</title><link>https://www.databasesandlife.com/programming-languages-is-newer-always-better-part-2/</link><description>&lt;p class="intro"&gt;Let me respond to some of the comments left at &lt;a href="https://www.databasesandlife.com/programming-languages-is-newer-always-better"&gt;Programming Languages: Is newer always better?&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="knowing-whats-going-on"&gt;Knowing what&amp;rsquo;s going on:&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a terrible example. You are really arguing that PHP programmers don&amp;rsquo;t know how their language works while C programmers do. This is a horribly wrong-headed assertion. How about I counter your straw man with one of my own. I know plenty of new (as of the last 5 years) C programmers who have no idea that 0 is equivalent to NULL.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 28 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/programming-languages-is-newer-always-better-part-2/</guid></item><item><title>Once in awhile: a recipe</title><link>https://benovermyer.com/blog/2008/03/once-in-awhile-a-recipe/</link><description>&lt;p&gt;Today, I'm going to do something a little different. I had a post about chivalry and conscience nearly complete, but instead I think I'll present something a little lighter….a recipe, and its origins. Called “Watergate Salad,” it's not really a salad in the traditional sense. Since I'm not feeling too well, my girlfriend made up a batch for me. It's not healthy in any sense, but it does indulge my sweet tooth! Here's the recipe:&lt;/p&gt;
&lt;h1 id="watergate-salad"&gt;Watergate Salad&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;1 can (15.5-20 oz) crushed pineapple&lt;/li&gt;
&lt;li&gt;1⁄2 bag mini-marshmallows&lt;/li&gt;
&lt;li&gt;1⁄2 tub light Cool Whip (or similar)&lt;/li&gt;
&lt;li&gt;1 package instant pistachio pudding (I prefer Jello brand)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Just mix all ingredients together and serve! Must be refrigerated and covered for storage. Watergate salad is a variation on “ambrosia salad,” a dessert dish that appears to have originated sometime during the 19th century in southern America. Some sources place its starting point at somewhere around 1830, although given the wildly divergent recipes floating around both then and now, it's likely that it never had any single inventor or point of origin. Another blogger who has &lt;a href="http://dorcasannettewalker.blogspot.com/2006/12/watergate-salad.html" rel="external"&gt;posted this recipe&lt;/a&gt;, Dorcas Walker, has some more information and, in her comments, some variations you can try. This recipe is great for parties. The next time you drop by &lt;a href="http://sxsw.com/" rel="external"&gt;SXSW&lt;/a&gt;, bring a carload of it and you'll be an instant celebrity!&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Thu, 27 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/03/once-in-awhile-a-recipe/</guid></item><item><title>Programming Languages: Is newer always better?</title><link>https://www.databasesandlife.com/programming-languages-is-newer-always-better/</link><description>&lt;p&gt;I constantly hear the belief that modern programming languages and environment are better than older programming languages. More productive, easier to user, and so on. It would stand to reason: nobody would make a new programming language with worse features than an already existing programming language. Or would they?&lt;/p&gt;
&lt;p&gt;Everyone seems to think that this is fact. But surprisingly it&amp;rsquo;s not. There are many features in older programming languages which are not present in today&amp;rsquo;s languages. I predict these features will be re-invented by the next generation of programming languages authors, and everyone will think they are geniuses for having come up with these ideas. But at the same time those new languages will omit most of the good points of today&amp;rsquo;s languages. This cycle can go on forever.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 26 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/programming-languages-is-newer-always-better/</guid></item><item><title>Forget the rules and tell a story</title><link>https://benovermyer.com/blog/2008/03/forget-the-rules-and-tell-a-story/</link><description>&lt;p&gt;Writing has taken on new meaning as I've gotten a little older and a little wiser.&lt;/p&gt;
&lt;p&gt;Grammar and spelling, in particular, are not the twin unbreakable pillars they once appeared to be when I was in high school or earlier. Reading Tolkien, and considering his status within the literary world, is evidence of that; though his grammar completely defies the Laws of English Class in several ways (particularly in the Silmarillion), he is held up to be one of the greatest writers of fiction.&lt;/p&gt;
&lt;p&gt;Originally, I believed there was only one way to write - the Correct Way, in which the form of the language matched the textbooks perfectly. Now, though, I have come to believe that not only are there multiple ways to write, but different forms of writing must be used in different contexts. The Correct Way is appropriate only in certain situations.&lt;/p&gt;
&lt;p&gt;One of those situations is in business letters, resumés, and other formal career-related communication. The purpose of the language used is to impart a sense of your competence and professionalism. For us twenty-somethings, this is the area that is most often lacking. In college, a scant two years ago, I proofread some classmates' papers in upper division courses and was appalled by the errors in what should have been fundamental form. Run ons, fragments, and similar literary atrocities abounded. This is no way to demonstrate our competence in the workplace, particularly for those of us who work as freelancers outside the relatively safe cubicle world. Our communication style is vital.&lt;/p&gt;
&lt;p&gt;Now, while that professional Correct Way is appropriate and even necessary in the corporate world, it is often inappropriate for the world of fiction and narrative writing. As per Tolkien's example, there is a different kind of focus for narrative form - the telling of the story. Flowery language makes it more difficult to read, certainly, but using unusual words and sentence structures forces our brains to creatively interpret. Once we engage that half of our brain, suddenly these worlds that the authors are weaving for us take on a life of their own.&lt;/p&gt;
&lt;p&gt;This kind of writing is also necessary for our development as individuals, though many people don't allow it to flourish…or even practice it. Flowery writing makes us think and produces new pathways in our still-growing brain patterns, something ever so vital for a twenty-something newly recovering from the culture of university.&lt;/p&gt;
&lt;p&gt;Storytelling is an important skill, and being able to forget the Correct Way for awhile and forge new trails helps us become more rounded people.&lt;/p&gt;
&lt;p&gt;So, the next time you find yourself free for fifteen minutes with nothing in mind to do, grab a sheet of paper or a word processor and tell a story. Forget the grammar…show us your world.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Tue, 25 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/03/forget-the-rules-and-tell-a-story/</guid></item><item><title>Results of the St. Pat's 10 Miler and 5K</title><link>https://blog.tafkas.net/2008/03/23/results-of-the-st.-pats-10-miler-and-5k/</link><description>Recently I ran the St. Pat's 10 Miler in Atlantic City, Nj. It was my first official running event ever and I enjoyed it lot.
Shortly after the race the official results have been posted on the Internet. The data did not only include the number and times of the participants but also gender and age. Looking at the finisher time distribution it shows that most runners finished at around 90 minutes:</description><author>Tafkas Blog</author><pubDate>Sun, 23 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.tafkas.net/2008/03/23/results-of-the-st.-pats-10-miler-and-5k/</guid></item><item><title>Five questions about Digital Freedom for all children</title><link>https://stop.zona-m.net/2008/03/five-questions-about-digital-freedom-for-all-children/</link><description>&lt;p&gt;&lt;em&gt;(historical note: this short interview had been asked by a parenting blog, and should have been published there, to explain why all parents should work to protect their children Digital Freedom. Then that editor changed his mind, so I put it online myself, in March 2008, at digifreedom.net. In the following years, I reorganized my websites several times&amp;hellip; until this piece went offline. I put it back at this new URL, with (almost) all the links updated, in February 2014)&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 22 Mar 2008 16:53:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2008/03/five-questions-about-digital-freedom-for-all-children/</guid></item><item><title>Connect and prosper</title><link>https://benovermyer.com/blog/2008/03/connect-and-prosper/</link><description>&lt;img alt="A photo of some friends smiling" class="photo" src="https://benovermyer.com/blog/2008/03/connect-and-prosper/friends.jpg" /&gt;
&lt;p&gt;Something missing in a lot of big companies - whether office, factory, or what-have-you - is a sense of community and connectedness. There is frequently no connection between You and the Team. In the case of freelancers, it's between You and the Client. What do I mean by connection? I mean empathy. I mean that feeling you get when you really understand someone, and they understand you. There's way too much focus on Lone Wolf, out-for-number-one tactics out there. I recently read &lt;a href="https://www.michaelleestallard.com/wp-content/uploads/connectionculture-ebook.pdf" rel="external"&gt;Connection Culture by Michael Lee Stallard&lt;/a&gt; and found myself nodding at every third paragraph. Michael's research is impeccable and his findings are both simple and profound. He goes into great detail about the hows and whys of connecting at the workplace. His conclusions are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;connections at work make that company a great place to work for, and&lt;/li&gt;
&lt;li&gt;in the case of customers and clients, that company becomes a great one to do business with.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;People are happier when they're connected. Michael doesn't go too much into scale and volume, but he does make notable mention of the fact that big companies that encourage communication and connection do demonstrably better work, backed up by trustworthy data. According to his research and my own personal experiences, people who make connections are happier, healthier, more optimistic, and generally more energetic than those who do not. So. When's the last time you made an effort to make connections in your workplace? Do you know the name of the guy in the cubicle across the way? If not, introduce yourself. Get to know the people you work with, for, and above, and you will find that the rewards greatly outweigh any remotely possible cost to yourself.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Thu, 20 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/03/connect-and-prosper/</guid></item><item><title>Anti-aliased Polygon Filling Algorithm</title><link>https://www.databasesandlife.com/anti-aliased-polygon-filling-algorithm/</link><description>&lt;p&gt;I have always found this an extremely interesting computer science problem, and have written various polygon scanline conversion routines in my life. In January 2002 while at my parents waiting for the work year to start again, I decided to write a new one, this time in Java. (The source code is available on &lt;a href=""&gt;request&lt;/a&gt; to anyone who&amp;rsquo;s interested.)&lt;/p&gt;
&lt;p&gt;These days, no doubt, many polygon fill routines are available open source, and the descriptions of how one should work are also easily available on the web. Not so when I was a child and wanted to write my first one.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 20 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/anti-aliased-polygon-filling-algorithm/</guid></item><item><title>Three lists that will save you time and keep you sane</title><link>https://benovermyer.com/blog/2008/03/three-lists-that-will-save-you-time-and-keep-you-sane/</link><description>&lt;p&gt;In today's online culture of GTD, productivity, time management, and so on, we are focused on getting more done in less time. We are told that quantity is generally preferable to quality. What this mindset doesn't take into account is another important aspect of life - happiness. Too often, I find myself thinking that line from Jurassic Park, “[they] were so preoccupied with whether or not they could, they didn't stop to think if they should.”&lt;/p&gt;
&lt;p&gt;Time is valuable, yes. The most valuable currency in the world. Now think to yourself - do you spend all your money? Do you have a plan for every dime you will ever earn?&lt;/p&gt;
&lt;p&gt;When you get right down to it, you have a finite amount of time available to you during your lifetime. There is no chance you will receive more, but frequent opportunities to get your supply shortened or even cut off permanently. So, you must spend your time wisely…and that includes leaving some flexible time so you can catch a breather and just relax!&lt;/p&gt;
&lt;p&gt;To that end, here's a few lists of things to think about when you plan for the future.&lt;/p&gt;
&lt;h1 id="wants"&gt;Wants&lt;/h1&gt;
&lt;p&gt;One day every week (Sunday works for me), write down a list of three goals you want to accomplish over the next week. These goals don't have to be work-related; rather, they should be things that you really want to do. For example, my weekly list might read:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ride 5 miles on my bike (Biking)&lt;/li&gt;
&lt;li&gt;Draw 5 new illustrations for my game (Art)&lt;/li&gt;
&lt;li&gt;Complete a perfect back-spin kick (Taekwon-do)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="needs"&gt;Needs&lt;/h1&gt;
&lt;p&gt;Your second priority (never, ever your first) should be to make a list of three goals you need to accomplish over the next week. This list is of things that need to get done, but that you don't necessarily enjoy. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pay gas bill (Bills)&lt;/li&gt;
&lt;li&gt;Shovel sidewalk (Chores)&lt;/li&gt;
&lt;li&gt;Turn in P3 report (Work)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="shoulds"&gt;Shoulds&lt;/h1&gt;
&lt;p&gt;Finally, make a list of three goals to meet for the next week that you should accomplish. These can be just about anything. For me, the list might look like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Find a good local dietician (Health)&lt;/li&gt;
&lt;li&gt;Finish my current novel (Reading)&lt;/li&gt;
&lt;li&gt;Spend half an hour learning about leadership (Education)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Keep in mind that all of these things should only make up a PART of your time. The rest can and should be fluid, allowing for sudden shifts in schedule and just plain old relaxation. Personally, I try and incorporate some daily rituals into my life, but that's just what works for me. Experiment to see the best solution for you.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Tue, 18 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/03/three-lists-that-will-save-you-time-and-keep-you-sane/</guid></item><item><title>IFS Fractal Program</title><link>https://www.databasesandlife.com/ifs-fractal-program/</link><description>&lt;p&gt;Looking around my hard disk, I found a program I wrote in December 1997 to demonstrate the capabilities of IFS (Iterated Function Series) using Affine maps.&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;

















&lt;div class="fancybox fancybox-single"&gt;
  &lt;a href="https://www.databasesandlife.com/20080318-fern.png"&gt;
	&lt;img alt="" src="https://www.databasesandlife.com/20080318-fern.png" /&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="description"&gt;Description&lt;/h2&gt;
&lt;p&gt;A shape, an IFS fractal (Iterated Function Series), is defined by a number of transforms. Each one of these transforms map from the whole shape to a smaller self-similar part of it. In an &lt;em&gt;affine&lt;/em&gt; IFS fractal, each one of these transforms is affine.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 17 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/ifs-fractal-program/</guid></item><item><title>ic.ac.uk fetchmailrc Settings</title><link>https://rob.sh/post/16/</link><description>&lt;p&gt;Imperial College are currently implementing changes so that you need to access either POP3 or IMAP with SSL enabled, I figured since they didn&amp;rsquo;t list Fetchmail in their new site, then I&amp;rsquo;d post my configuration (.fetchmailrc) here in case anyone else uses it:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
poll icex.imperial.ac.uk 
    proto pop3 
    user "USERNAME" 
    password "PASSWORD" 
    is "LOCALADDRESS" here 
    ssl 
    sslfingerprint "7D:E8:74:1F:E8:B1:E6:15:A6:0C:02:2B:BA:89:BE:4D"
&lt;/pre&gt;
&lt;br /&gt;
Enjoy.</description><author>rob.sh</author><pubDate>Sat, 15 Mar 2008 20:08:52 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/16/</guid></item><item><title>Maslow’s Hierarchy and Food Complacency</title><link>https://www.davidschlachter.com/writings/maslowfood</link><description>Why don’t we care about food? Complacency?</description><author>David Schlachter</author><pubDate>Fri, 14 Mar 2008 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/maslowfood</guid></item><item><title>The art of eating M&amp;amp;Ms</title><link>https://benovermyer.com/blog/2008/03/the-art-of-eating-mandms/</link><description>&lt;img alt="A bag of M &amp;amp; M candies" class="photo" src="https://benovermyer.com/blog/2008/03/the-art-of-eating-mandms/mnms.jpg" /&gt;
&lt;p&gt;When you rip open a bag of M&amp;amp;Ms, how do you eat 'em? Pop one at a time, rapid-fire? Pour handfuls into your waiting maw? Or do you slide a single one into your mouth, suck on it for awhile, then finally swallow and consider, possibly, having another?&lt;/p&gt;
&lt;p&gt;The way you answer that question could have remarkable ramifications for how you approach life in general. Are you the type of person who consumes new experiences at a phenomenal rate? Do you let everything go by in a rush as you focus on something else? Or, perhaps, do you savor each experience one at a time?&lt;/p&gt;
&lt;p&gt;Interestingly, conventional wisdom might be right for once. Savoring one experience at a time lets you take in more, and more importantly, understand more. I once met a maharaja who visited my cultural anthropology class in New Zealand. He insisted that it would take many years to learn what he was about to try and teach us in an hour. Being young and inexperienced, after the lesson was over I privately scoffed at the seeming simplicity and easiness of the concepts. How could it possibly take years to learn this?&lt;/p&gt;
&lt;p&gt;Now, eight years later, I understand.&lt;/p&gt;
&lt;p&gt;Some things, like the meditative world view the maharaja tried to teach us, are intellectually very easy to disassemble... but very difficult to actually understand. Learning and understanding are two very different, though interrelated, concepts. In order to fully understand a lot of the seemingly simple productivity and personal growth concepts floating around the Web these days, you must experience them over an extended period of time instead of merely seeing them, analyzing them, and casting them aside.&lt;/p&gt;
&lt;p&gt;So the next time you open up a bag of those metaphorical candy-coated chocolates, try savoring them one at a time. You might be surprised at how much more you enjoy them.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Thu, 13 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/03/the-art-of-eating-mandms/</guid></item><item><title>Are you a Mac or a PC?</title><link>https://jasoneckert.github.io/myblog/are-you-a-mac-or-pc/</link><description>&lt;p&gt;&lt;img alt="JoT" src="jot.jpg#right" title="JoT" /&gt;&lt;/p&gt;
&lt;p&gt;If you are ultra-Mac, you prefer to use an aesthetic computer that “just works” - as a result, you are usually sexy, artistic and cool.&lt;/p&gt;
&lt;p&gt;If you are ultra-PC, you prefer to use a clunky un-aesthetic computer that is difficult to use, crashes often, is a virus hell, yet is guaranteed to work with any piece of hardware with a software driver written by a 10-year-old boy in a barn in China - as a result, you are nerdy, cheap and non-cool.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 13 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/are-you-a-mac-or-pc/</guid></item><item><title>Commuting Bike Stolen</title><link>https://rob.sh/post/15/</link><description>&lt;p&gt;My Pinnacle Mean Streak 2.0 was stolen today from outside my flat (Pigott Street, E14). It&amp;rsquo;s a black, rigid mountain bike. The wheels are 26&amp;quot;, WTB rims, Shimano hubs. The groupset is Deore, and it&amp;rsquo;s got mechanical disc brakes.&lt;br /&gt;&lt;br /&gt;
I locked it to a lamp post with a steel D-lock whilst I went upstairs, since my bike was greasy, and needed cleaning. It was nicked in the hour between 19:30 and 20:30.&lt;br /&gt;&lt;br /&gt;
The frame number is &lt;b&gt;1K26102739&lt;/b&gt;. If anyone sees it around, I&amp;rsquo;d really appreciate it if you could let me know via &lt;a href="mailto:rjs@rob.sh"&gt;e-mail&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Wed, 12 Mar 2008 00:19:25 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/15/</guid></item><item><title>Another clash of the generations</title><link>https://benovermyer.com/blog/2008/03/another-clash-of-the-generations/</link><description>&lt;p&gt;Recently, &lt;a href="http://www.thestar.com/News/GTA/article/309855" rel="external"&gt;a student at Ryerson University&lt;/a&gt; in Toronto was charged with over a hundred counts of academic misconduct. His crime? Running a chemistry study group on Facebook. Now, while I'm sure there is more to this story than what the article states, the case seems fairly clear: a professor considers online communities different from offline ones. This is despite the differences being negligible for the purpose it was intended for. Though I graduated university last May (‘07), I still live two blocks from campus. I'm plugged into the college community there, and it's definitely not the pure-offline world that a lot of the older professors seem to think it is. The majority of students at SDSU seem to have a Facebook account at the very least. Even some professors do, though they're almost entirely the younger ones. This is not the first clash between old and new ways of thinking about human interaction, and I guarantee it won't be the last. However, we as young adults need to work with the older generations to demonstrate three things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Technology is not a replacement for traditional forms of communication, it's an enhancement of it.&lt;/li&gt;
&lt;li&gt;The Internet is not lawless, despite it being unregulated. There are rules of behavior online just as there are ones offline.&lt;/li&gt;
&lt;li&gt;Education is more and more becoming inseparable from the Internet, and things such as online study groups are inevitable evolutions of that paradigm.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ranting, raving, and threatening is most definitely NOT the way to prove to the older generations that our way of thinking on this issue is correct. Instead, we need to approach this on their level - and with their tools. We are one society, not two separate ones. Personally, I think Ryerson University's wording of their academic dishonesty policy could use some updating. “Any academic advantage” being made illegal would seem to me to disallow reading textbooks.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Tue, 11 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/03/another-clash-of-the-generations/</guid></item><item><title>Two great comments about Windows</title><link>https://www.databasesandlife.com/two-great-comments-about-windows/</link><description>&lt;p class="intro"&gt;Two great comments from people about their experiences with Windows. I can really sympathize with these people!&lt;/p&gt;
&lt;p&gt;From &lt;a href="http://blog.seattlepi.nwsource.com/microsoft/archives/132891.asp#102626" rel="noopener noreferrer" target="_blank"&gt;http://blog.seattlepi.nwsource.com/microsoft/archives/132891.asp#102626&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Yesterday, it started an update I didn&amp;rsquo;t even want to initiate on shut-down so I had to walk to my car &amp;amp; drive off with this stupid laptop running in my hand to get to work. Is MS trying to get me fired?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From &lt;a href="http://blog.seattlepi.nwsource.com/microsoft/archives/132891.asp#102708" rel="noopener noreferrer" target="_blank"&gt;http://blog.seattlepi.nwsource.com/microsoft/archives/132891.asp#102708&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&amp;rsquo;ve come very close to picking up my Vista computer and throwing it out the window on several occasions. I got so tired of it constantly running something in the background and me not being able to stop it, that I punched the machine the other day. Yes, I know, not terribly intelligent, but man does Vista frustrate me. It hangs all the time, FOR ABSOLUTELY NO REASON. I could go on, let&amp;rsquo;s just say that when using Vista you feel like MS just didn&amp;rsquo;t really care whether or not it works.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 10 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/two-great-comments-about-windows/</guid></item><item><title>sSMTP and gmail</title><link>https://bastian.rieck.me/blog/2008/ssmtp_and_gmail/</link><description>&lt;p&gt;According to its &lt;code&gt;man&lt;/code&gt;-page, ssmtp is a &amp;ldquo;send-only sendmail emulator&amp;rdquo;, hence
allowing your machine to send, say, status reports via mail without the need
for sendmail or any other MTA.&lt;/p&gt;
&lt;p&gt;ssmtp is simple to use, simple to install and works very well. I use it on my
file-server: Without further ado, several scripts and programs (such as
smartmoontools) can now send me their reports directly to a given mail address.&lt;/p&gt;
&lt;p&gt;FreeBSD users just &lt;code&gt;cd&lt;/code&gt; to &lt;code&gt;/usr/ports/mail/ssmtp&lt;/code&gt; and do the usual &lt;code&gt;make install clean&lt;/code&gt;. Afterwards, this is how your &lt;code&gt;ssmtp.conf&lt;/code&gt; (located in
&lt;code&gt;/usr/local/etc/ssmtp/&lt;/code&gt;) should look like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;root=catchall@example.net
mailhub=smtp.gmail.com:587

rewriteDomain=example.net
hostname=mail.example.net

FromLineOverride=YES

UseSTARTTLS=YES
AuthUser=your\_gmail\_account@gmail.com
AuthPass=swordfish
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;No, my password is not &amp;ldquo;swordfish&amp;rdquo;. The above settings work very well for my
gmail account, providing an easy and secure way to get status reports. To let
the script send you mails, just add a &lt;code&gt;MAILTO=me@example.net&lt;/code&gt; statement to your
crontab, for example.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Sun, 09 Mar 2008 22:18:17 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2008/ssmtp_and_gmail/</guid></item><item><title>Growth</title><link>https://mattkeeter.com/projects/growth</link><description>Procedural animation</description><author>Matt Keeter</author><pubDate>Sat, 08 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://mattkeeter.com/projects/growth</guid></item><item><title>A Social Experiment</title><link>https://rob.sh/post/14/</link><description>&lt;p&gt;Let&amp;rsquo;s see how many people read the rubbish I post here.&lt;br /&gt;&lt;br /&gt;
I have &lt;b&gt;40cm&lt;/b&gt; less hair.&lt;br /&gt;&lt;br /&gt;
Update:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;center&gt;&lt;a href="https://cdn.rob.sh/img/newglasses.jpg"&gt;&lt;img height="300" src="https://cdn.rob.sh/img/newglasses.jpg" /&gt;&lt;/a&gt;&lt;a href="https://cdn.rob.sh/img/post_haircut.jpg"&gt;&lt;img height="300" src="https://cdn.rob.sh/img/post_haircut.jpg" /&gt;&lt;/a&gt;&lt;/center&gt;</description><author>rob.sh</author><pubDate>Fri, 07 Mar 2008 16:23:19 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/14/</guid></item><item><title>The workplace? Nah, we need the lifeplace.</title><link>https://benovermyer.com/blog/2008/03/the-workplace-nah-we-need-the-lifeplace/</link><description>&lt;p&gt;Too often I hear people complaining about the workplace or chattering about the differences between the workplace and the home. Many people seem to enjoy making tremendous separations between Work and Play. Wrong, wrong, &lt;em&gt;wrong&lt;/em&gt;. See, life's about three key concepts - Production, Play, and Provision. All three are necessary for all aspects of life, and cutting one out of any part of it makes life less fun, less whole.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Production.&lt;/strong&gt; The art of giving something back to society. If you want your life to mean something, you produce. Writers write, engineers engineer, and artists….art? If you spend a good deal of your life dedicated to one thing, you will become good at that one thing. People who are happy with their jobs almost always have combined their favorite productive activity into their working life.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Play.&lt;/strong&gt; The art of doing something just for the hell of it, with no obvious return. While this doesn't directly create New and Better Stuff for society, it improves you and those around you as a person. It's a social activity. While Me Time has its place and is necessary for mental health, playing with others is a vital aspect of a healthy society and can really be refreshing for the mind, body, and soul. From a working standpoint, it encourages teamwork, communication, and energy, all very important concepts for Good Workers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Provision.&lt;/strong&gt; The art of keeping oneself and one's dear ones alive and happy. Feeding yourself and your kids (if you have them) is only part of the equation. In your working life, the ideal worker is one who cares about his colleagues, his projects, and yes, even his managers. Japan partially got this right in the Old Days before the bubble economy and after the Occupation, where every employee of a company was a member of a “family” of sorts. Caring employees are happy, more productive, and more fun to be around. Think about it. In the perfect job, you'd have fun, have a recurring sense of accomplishment, and be a proud member of The Team, right? Everyone else would think the same too. This is much easier to do with startups, ala Silicon Valley, than it is with larger established companies, but it's still possible. &lt;strong&gt;Be proactive&lt;/strong&gt;, and set up the change. You don't have to fight management to make this happen. Make it all part of your life, who you are, who you will be. Change your workplace into a lifeplace, something that you are happy to include as part of your existence on this Earth. You'll find that everyone is happier, is more productive, and generally better people when it happens.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Thu, 06 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/03/the-workplace-nah-we-need-the-lifeplace/</guid></item><item><title>On leveling and collections in Star Wars Galaxies</title><link>https://benovermyer.com/blog/2008/03/on-leveling-and-collections-in-star-wars-galaxies/</link><description>&lt;p&gt;Recently I hit level 88 with Scin. One of my guildies promptly gave me an AK-Prime rocket launcher, the most powerful Commando weapon in the game, just because he had one lying around. The IA, to put it mildly, rocks. I've taken part in some PvP and instances since then, and I have to say that my damage output has skyrocketed. I've also started learning the ins and outs of Commando tactics, and I may actually be effective in combat in the near future. However, I have made almost zero progress towards level 89. Now that I've gotten the greatest prize of Commando, there is very little motivation for me to continue the painful grind to CL90. I still hold it as a goal, though, and will probably just do the thirty-nine missions it will take to get me there in a four-day grind marathon. Leveling in SWG is not particularly fun. The Collections, however, are awesome. Despite their huge requirements compared to EQ2's collections (completing the Peko Peko kill collection requires defeating 100 peko pekos, 100 giant peko pekos, 50 peko peko albatrosses (not soloable), and 25 peko peko albatross matriarchs (VERY not soloable)), they're a whole lot of fun. If I'm bored or waiting for an instance group to get set up, I'll run around and kill a few dozen critters or NPCs for a kill quest, or search for some of the elusive items for the weapon collections. The rewards are varied and interesting, ranging from titles to new abilities, and it's a blast just finding out what collections are available.&lt;/p&gt;
&lt;h1 id="goal-update"&gt;Goal Update&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Major Goal #1:&lt;/strong&gt; Hit CL90 with Scin. Almost there, only 39 missions to go. &lt;strong&gt;Major Goal #2:&lt;/strong&gt; Acquire a Vigo. No progress at all. &lt;strong&gt;Major Goal #3:&lt;/strong&gt; Imperial Army space wing. Did a brief tour as a gunner on the Titan VI, one of the IA's gunships. &lt;strong&gt;Minor Goal #1:&lt;/strong&gt; Finish the Rare Weapons Collections. No progress. &lt;strong&gt;Minor Goal #2:&lt;/strong&gt; Fuura Hengwen, Shipwright. No progress, and I may end up keeping Fuura as a domestics trader instead. I enjoy the low time sink and bevy of creativity involved in domestics crafting.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Wed, 05 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/03/on-leveling-and-collections-in-star-wars-galaxies/</guid></item><item><title>Get an awesome new hobby to improve and enrich your life!</title><link>https://benovermyer.com/blog/2008/03/get-an-awesome-new-hobby-to-improve-and-enrich-your-life/</link><description>&lt;img alt="A man throwing a shotput" class="photo" src="https://benovermyer.com/blog/2008/03/get-an-awesome-new-hobby-to-improve-and-enrich-your-life/shotput.jpg" /&gt;
&lt;p&gt;Balancing a frugal life with a fun life can be difficult. Many hobbies and forms of entertainment cost money, and some are more expensive than others. Some hobbies - like yachting - are prohibitively expensive for the average joe. Others, like hiking, are practically free in the right circumstances. Choosing fun hobbies that don't hit up the wallet too hard can be a great way to reduce living expenses while still letting you lead the life you want.&lt;/p&gt;
&lt;p&gt;Choosing a new hobby is a simple process, though some of the details can require a lot of thought. Follow the next few steps to gain a new, cheaper, more exciting handle on life!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Consider the cost.&lt;/strong&gt; Cheaper is better, but there are multiple angles to think about. Entry cost is only one part of the equation. There are also incidental costs (like, say, the cost of buying more paintballs), maintenance costs (repairing your hiking boots), and upgrade costs (like getting more involved in the hobby's community). Cost is not necessarily monetary, remember! It can involve significant time and social commitments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Think about your overarching interests.&lt;/strong&gt; Are you a nature lover? An athlete? Do you like making things? How about challenging yourself? Thinking about these things will get your mind working on the possibilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Favor physical activities over sedentary ones.&lt;/strong&gt; Being physically active is much better for you. Mental growth is important too, but if you're used to sitting at home, opt for the physical new hobby over the mental one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Make a list.&lt;/strong&gt; Considering the first three steps, do some research on fun activities that might match your interests. Don't just rely on Google, either; check out the local library and review your options in your home town. Some cities have extensive bike trails, while others might have public tennis courts. See what's available.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Narrow the list.&lt;/strong&gt; Pick two options from it, and try out both. Go with the one that seems more fun to you after a month or so. Enjoy your new hobby! Spend a lot of time with it. Hobbies can stagnate and become boring if you don't engage them often, so try and dedicate specific blocks of time to it every week.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Don't worry about retiring old, expensive hobbies. Just devote a decent chunk of time to your new hobby, and if you enjoy it, you'll find that your other hobbies won't seem as important and will fade in time... along with those expensive side costs that accompanied them!&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Tue, 04 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/03/get-an-awesome-new-hobby-to-improve-and-enrich-your-life/</guid></item><item><title>t-zones on 1.1.4</title><link>https://arashpayan.com/blog/2008/03/02/t-zones-on-114/</link><description>I finally upgraded my iPhone from 1.1.1 to 1.1.4, and after dealing with the Installer.app main script execution failed error (solution here), I began to setup my EDGE access. The steps are mostly the same as before, with the exception of the location of the preferences.plist file. Previously, it was located in the user partition, but now the file is located in:
/Library/Preferences/SystemConfiguration/preferences.plist  In addition to the upgrade, I also took the opportunity to install Telesphoreo/Cydia, which is a port of APT to the iPhone by Jay Freeman.</description><author>Arash Payan</author><pubDate>Mon, 03 Mar 2008 02:46:19 GMT</pubDate><guid isPermaLink="true">https://arashpayan.com/blog/2008/03/02/t-zones-on-114/</guid></item><item><title>XML in the database</title><link>https://www.databasesandlife.com/xml-in-the-database/</link><description>&lt;p&gt;As I do a lot of programming using open source databases, I couldn&amp;rsquo;t help but notice that inclusion of XML in the database seems to be a hot topic. Postgres 8.1 (just released) and MySQL 5.1 (not released yet) will allow XML documents to be stored as the value of cells, and allow those documents to be manipulated and inspected. (Oracle has had this feature since 2001)&lt;/p&gt;
&lt;p&gt;I generally don&amp;rsquo;t like XML (as Robin put it: most formats are designed to be either conveniently readable by humans, or by computer. XML is conveniently readable by neither.)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 03 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/xml-in-the-database/</guid></item><item><title>Django</title><link>https://rob.sh/post/12/</link><description>&lt;p&gt;Since I&amp;rsquo;ve got a few moments, and I&amp;rsquo;ve decided to actually write down some rants rather than deciding that I can&amp;rsquo;t be bothered to - I&amp;rsquo;m going to use some space to single the praises of &lt;a href="http://www.djangoproject.com"&gt;Django&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been using Django for a couple of years now - since around the autumn of 2005, and as such, feel that I&amp;rsquo;ve got a pretty good grasp of how the framework works. I haven&amp;rsquo;t really hacked around that much with the innards of Django (although I did propose a &lt;a href="http://code.djangoproject.com/ticket/1636"&gt;patch&lt;/a&gt;), however, what I really like about this framework isn&amp;rsquo;t particularly the internals, but just the whole philosophy that there seems to be in terms of building a web application.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Sat, 01 Mar 2008 23:11:42 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/12/</guid></item><item><title>BarCamp Manchester</title><link>https://caiustheory.com/barcamp-manchester/</link><description>&lt;p&gt;So I&amp;rsquo;m at BarCamp Manchester for the day. Its great meeting people I already know, and meeting new ones; most impressed by &lt;a href="http://petercooper.co.uk/"&gt;Peter&lt;/a&gt;&amp;rsquo;s ruby shoes.. they glitter!&lt;/p&gt;
&lt;p&gt;So heres a little list of links for the day:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.flickr.com/photos/tags/BarCampManchesterUk/"&gt;http://www.flickr.com/photos/tags/BarCampManchesterUk/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://barcamp.org/BarCampManchesterUk"&gt;http://barcamp.org/BarCampManchesterUk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Caius Theory</author><pubDate>Sat, 01 Mar 2008 13:34:25 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/barcamp-manchester/</guid></item><item><title>Linuxtopia</title><link>https://jasoneckert.github.io/myblog/linuxtopia/</link><description>&lt;p&gt;In the past several months (and year), it seems that Linux is really making its way into the desktop market (up until now, it has ruled the server market).  Every time I pick up a magazine at Chapters or read Google news, there is some new Linux device or technology.  Here are a few that have caught my eye in the past short while:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The rapid development of Compiz (formerly Beryl), which puts shame to all other desktop effects and is extremely easy to use and requires very few hardware resources to run.&lt;/li&gt;
&lt;li&gt;The rapid adoption of Ubuntu Linux on the desktop market as a Windows replacement (I use it every day on my laptop, and it is a great OS).&lt;/li&gt;
&lt;li&gt;Hardware manufacturers pre-installing Linux instead of Windows as an option on laptops and desktops (especially Dell and HP).&lt;/li&gt;
&lt;li&gt;The addition of Linux PCs and mobile devices - e.g.:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="N810" src="n810.jpg#right" title="N810" /&gt;&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sat, 01 Mar 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/linuxtopia/</guid></item><item><title>crontab hacks</title><link>https://rob.sh/post/10/</link><description>&lt;pre tabindex="0"&gt;&lt;code&gt;30 23 28-31 * * [ "`date +%m`" != "`date +%m --date=tomorrow`" ] &amp;amp;&amp;amp; /Users/rjs/bin/monthEnd.py 2&amp;gt;&amp;amp;1 &amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pretty handy for running on the last day of the month - and should work on Linux.&lt;/p&gt;</description><author>rob.sh</author><pubDate>Fri, 29 Feb 2008 16:52:55 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/10/</guid></item><item><title>RFID Presentation</title><link>https://rob.sh/post/9/</link><description>&lt;p&gt;For anyone interested, the slides for my RFID presentation are &lt;a href="https://cdn.rob.sh/files/290207-RFID-Preso.pdf"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Fri, 29 Feb 2008 13:33:30 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/9/</guid></item><item><title>Web workers don't need Stuff.</title><link>https://benovermyer.com/blog/2008/02/web-workers-dont-need-stuff/</link><description>&lt;p&gt;As is frequently the case, a dozen article ideas struck me as I was checking my daily blogs today. One article I read seemed particularly noteworthy - &lt;a href="http://www.getrichslowly.org/blog/2007/08/10/the-tyranny-of-stuff/" rel="external"&gt;the Tyranny of Stuff on Get Rich Slowly&lt;/a&gt;. After reading it, I thought about how much Stuff is appropriate for various kinds of people. Then I thought, how much Stuff do I, a web worker, REALLY need? The technogeek in me cried out “lots of it! Gadgets define me!” The philosophe in me grumbled “I need nothing. Sell! Trash! Throw out!” Then the rational side started to churn. I've always gone through short periods of BUY BUY BUY followed by long stretches of GET RID OF EVERYTHING I OWN. It's a vicious cycle. More than that, though, it's telling of how I view Stuff. Something that few people seem to think about is the exact level of Stuff they need to be happy and productive. Most are content with continually buying more and better Stuff. A rare few find happiness in owning next to nothing. We really need to think about not just what makes us happy, but what makes us happy for the lowest personal cost. That isn't just cost in terms of money, either. Every single interaction we make has a cost of some kind, and this is particularly true of acquiring Stuff. Stuff has multiple costs - the monetary price, the space it takes up, and the time its usage takes away from other things. There are also a bunch of other indirect costs, such as what others think of us for acquiring this Stuff, opportunities lost because of it, and so on. Rarely do we ever consider all of these; most of the time, we are purely focused on the monetary cost. I blame that mostly on our materialistic culture, but the cause isn't important. Only the solution is. So, let's look at exactly what a web worker in general needs to own in terms of Stuff. Obviously, a computer is a necessity. While it's possible to use only public machines in Net cafes and the like, it's not cost-effective by any reckoning. So, that's one item of Stuff that's necessary. Coffee, Mountain Dew, energy drinks - all consumables that really have no lasting positive effect on us. Bad Stuff there. Housing is vital. Renting versus owning is outside the scope of this article. Utilities, obviously, are also vital. Groceries too….though we really don't need to buy that extra yummy snack just because it's on sale. The latest gadget off of ThinkGeek is not vital. In my case especially, we're only likely to use it for a few days or a couple weeks at most before it becomes just another part of the scenery. So, too, with the latest computer games. That's not to say that computer games are bad Stuff, though - just reduce the frequency at which you buy them. One or two a year is plenty. One or two every couple years is better. Cars are very sturdy things. Buying brand new ones is just silly, so if you really must buy a new car, get a used one that's at least three or four years old. If you're going for a hybrid, though, that's a different matter. Do NOT buy a used hybrid right now….the new battery cost will eat you alive. Get a new one if you must have a hybrid or other alternative energy vehicle. Similarly, how many blogs/websites do you REALLY need to read every day? Though they don't have any monetary cost, they DO have associative costs like time and opportunity. Knowledge may be power, but knowledge at the cost of living tends to drag you down in the end. There are hundreds of thousands of other things I could list here, but I'm sure you've already come up with a few of your own. I'd love to hear your thoughts on what you believe is necessary Stuff and what isn't.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Thu, 28 Feb 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/02/web-workers-dont-need-stuff/</guid></item><item><title>No need to support Safari 2 any more</title><link>https://www.databasesandlife.com/no-need-to-support-safari-2-any-more/</link><description>&lt;p&gt;I am probably one of the rare type of Mac owners who did neither of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bought Mac OS X 10.5 (including Safari 3)&lt;/li&gt;
&lt;li&gt;Upgraded to Safari 3 by downloading it for free from Apple&amp;rsquo;s website&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Therefore I was still using Safari 2 on my Mac.&lt;/p&gt;
&lt;p&gt;A few nights ago, Apple&amp;rsquo;s software-update program pushed Safari 3 to my computer.&lt;/p&gt;
&lt;p&gt;Although I could have deselected that download, I assume that the sort of people who would deselect an update that are the sort of people who care about their computer, and those are probably the sort of people who&amp;rsquo;ve already got Safari 3 by one of the above methods.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 28 Feb 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/no-need-to-support-safari-2-any-more/</guid></item><item><title>Monitors, as with everything else, need rebooting sometimes</title><link>https://www.databasesandlife.com/monitor-troubles/</link><description>&lt;p&gt;The monitor I am using at work suddenly went white. I.e. every pixel went white; not black, and not blue. A white screen of death, as it were.&lt;/p&gt;
&lt;p&gt;I was in the middle of programming an algorithm requiring some degree of thought, so I wasn&amp;rsquo;t really up for being interrupted by unreliable technology.&lt;/p&gt;
&lt;p&gt;The monitor a 22&amp;quot; wide-screen flat monitor. My initial suspicion obviously lay with Windows.&lt;/p&gt;
&lt;p&gt;For some reason, some instinct told me to turn the monitor off and on. I pressed the on/off button but amazingly nothing happened, and the &amp;ldquo;on&amp;rdquo; light stayed on. The on/off button is hidden in some inconvenient place, and one can&amp;rsquo;t see it unless one gets up and peers round the side of the monitor. It has no real tactile feedback when pressed, so initially I assumed, when the button did nothing, that I&amp;rsquo;d pressed it wrongly.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 27 Feb 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/monitor-troubles/</guid></item><item><title>SQL For Fun!?</title><link>https://boyter.org/2008/02/sql-fun/</link><description>&lt;p&gt;Well today while pondering things at lunch I was looking into the performance of SQL queries one stood out. That being the performance of getting random rows out of a database.&lt;/p&gt;
&lt;p&gt;Most people who have a basic understanding of MySQL (the database I use at home because its easy to set up, though I am looking at Posgresql) would say oh, to get random rows you do this,&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-sql"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #66d9ef;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #f92672;"&gt;*&lt;/span&gt; &lt;span style="color: #66d9ef;"&gt;FROM&lt;/span&gt; &lt;span style="color: #f92672;"&gt;`&lt;/span&gt;&lt;span style="color: #66d9ef;"&gt;table&lt;/span&gt;&lt;span style="color: #f92672;"&gt;`&lt;/span&gt; &lt;span style="color: #66d9ef;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #66d9ef;"&gt;BY&lt;/span&gt; rand() &lt;span style="color: #66d9ef;"&gt;LIMIT&lt;/span&gt; &lt;span style="color: #ae81ff;"&gt;0&lt;/span&gt;,&lt;span style="color: #ae81ff;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Which isn&amp;rsquo;t very efficient. The reason for this is that behind the scenes the database loads the table into memory, assigns a random number to each row and then sorts on that number. For small stuff its not an issue. However run it on a database with 10,000 rows and it becomes quite slow.&lt;/p&gt;</description><author>Ben E. C. Boyter</author><pubDate>Tue, 26 Feb 2008 02:15:12 GMT</pubDate><guid isPermaLink="true">https://boyter.org/2008/02/sql-fun/</guid></item><item><title>Data Hiding in a Word Document</title><link>https://thomashunter.name/posts/2008-02-25-data-hiding-in-a-word-document</link><author>Thomas Hunter II</author><pubDate>Mon, 25 Feb 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2008-02-25-data-hiding-in-a-word-document</guid></item><item><title>MINA bindings for Scala (updated)</title><link>https://rd.nz/2008/02/mina-bindings-for-scala-updated.html</link><author>Rich Dougherty</author><pubDate>Sun, 24 Feb 2008 11:01:00 GMT</pubDate><guid isPermaLink="true">https://rd.nz/2008/02/mina-bindings-for-scala-updated.html</guid></item><item><title>RFID Basics!</title><link>https://rob.sh/post/8/</link><description>&lt;p&gt;So, at the moment, I&amp;rsquo;m writing a presentation about the operation and the security implications of RFID. During the course of the random searches around the internet, I&amp;rsquo;ve found that there&amp;rsquo;s a lot of really, really cool work going with respect to RFID. Even more great than the output on the subject is who is studying it. Lots of really cool observations are coming out of the open source friendly community - some of the best presentations on the subject are from presentations at &lt;a href="http://events.ccc.de"&gt;CCC&lt;/a&gt;. Along with projects like &lt;a href="http://www.openpcd.org"&gt;OpenPCD&lt;/a&gt;, this output is pretty cool!&lt;br /&gt;
&lt;br /&gt;
However, that&amp;rsquo;s not really the point of this post. During the course of reading around, I&amp;rsquo;ve found that whilst there&amp;rsquo;s a lot of information around - there&amp;rsquo;s also a lot of FUD that surrounds that information. My presentation is trying to give people (with some physics background) a simple idea of what RFID is, and particularly how it works. Given that I&amp;rsquo;ve already done a quick summary of how RFID works, I figured I&amp;rsquo;d blog about it, so that I can add to the mush of material that you just can&amp;rsquo;t reference online.&lt;br /&gt;
&lt;br /&gt;
I&amp;rsquo;ll discuss a high frequency system - since cards such as MIFARE (which e.g. Oyster uses) work at around 13.56MHz. The RFID system consists of two elements - the reader, and the tag. Tags come in a number shapes - active, passive, and semi-passive. Really, it&amp;rsquo;s the passive tags that I&amp;rsquo;m interested in. The image below shows the anatomy of a (simple) passive tag. It&amp;rsquo;s composed of an antenna - running around the card, an IC, and a substrate that they&amp;rsquo;re both attached to.&lt;br /&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Thu, 21 Feb 2008 18:28:50 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/8/</guid></item><item><title>The art of positive deletion</title><link>https://benovermyer.com/blog/2008/02/the-art-of-positive-deletion/</link><description>&lt;p&gt;A very important concept in programming is what we coders call “garbage collection.” Basically, a program is like an old pail of water - if you don't make sure all the holes are filled, that water's gonna go all over the place. It'll get everywhere and make your life miserable. A computer only has so many resources, and holes in a program (e.g. memory leaks) will keep taking up more and more of those resources until there's nothing left. The concept of garbage collection can be applied to life in general, though. I call it “positive deletion,” since what you're doing is eliminating Stuff from your life so the Stuff doesn't clog up the rest of your life. After all, you only have so much Life! Positive deletion is a combination of time management and spatial organization. You need to get rid of things that take up resources as quickly and completely as possible. Parkinson's Law is only too true, so you need to make sure you're only spending as much time on a project - whether personal or for work - as absolutely necessary. Thomas Edison couldn't have invented 1,093 things in his lifetime if he didn't understand this principle. Of course, that doesn't mean pushing out an incomplete finished product. Do what needs to be done, but try and do it in half the time you (or your boss) originally assess it at. If you fail to meet this ambitious goal, then I guarantee you will at least have made it in under the original assessment! There are other task/time management techniques you can use (e.g. &lt;a href="http://www.stevepavlina.com/blog/2007/05/33-rules-to-boost-your-productivity/" rel="external"&gt;batching, worst first, etc.&lt;/a&gt;), but they're out of the scope of this post. Another aspect of positive deletion is the outright culling of unnecessary garbage from your life. For example, how much time do you REALLY need to spend in front of the TV every day? Or the computer? Try out some of the following tips to get rid of the garbage:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sort out your goals.&lt;/strong&gt; Make a list of all of your personal and work-related goals. Categorize them by importance - Vital, High Priority, and Low Priority. Assign due dates to each of them, assuming that you will work on only one goal at a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Knock out the most difficult task first.&lt;/strong&gt; Also known as the Eat a Frog principle, doing this will ensure your day can only get better…and you'll gain self-respect for not procrastinating in the process!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduce your time-wasters.&lt;/strong&gt; If you're a chronic TV-watcher, try dropping an hour off the time you spend watching the tube every day for a month. Next month, another hour. Similarly, if you spend way too much time reading email, try the &lt;a href="http://www.fourhourworkweek.com/blog/2007/03/22/how-to-check-e-mail-twice-a-day-or-once-every-10-days/" rel="external"&gt;Ferriss method of email batching&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plan your day.&lt;/strong&gt; Using Google Calendar, 30 boxes, or another calendar, plan out tomorrow from waking to sleeping. Include half an hour for planning the day after that. Keep doing this for a week. At the end of the week, start planning out the entire week after that, and so on. Most importantly, stick to the plan! While there will inevitably be unforeseen events (such as family emergencies, flat tires, etc.), for the most part the plan'll keep you on track and away from the little time-wasters like neuroticly checking email every ten minutes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set limits.&lt;/strong&gt; Don't just let yourself “work until it's done.” Set a specific stopping time, and stop when you reach it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are many more possibilities here, but those five will be a good starting point for you. There are a great many other blogs dedicated specifically to productivity (&lt;a href="http://www.43folders.com/" rel="external"&gt;43 folders&lt;/a&gt;, &lt;a href="http://www.stevepavlina.com/" rel="external"&gt;Steve Pavlina&lt;/a&gt;, &lt;a href="http://www.lifehack.org/" rel="external"&gt;Lifehack&lt;/a&gt;, etc.) that will expand on the positive deletion principle. For those of you already familiar with productivity optimization, you may be interested to read &lt;a href="http://www.dumblittleman.com/" rel="external"&gt;Dumb Little Man&lt;/a&gt;, as it has some interesting and unique tips that go beyond the usual. In the end, if you can take charge of your life, you'll find that the most valuable currency of all - time - is yours to command. Positive deletion is but one of many tools to help you with that goal. Try it out for a month, and see how it affects your life!&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Wed, 20 Feb 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/02/the-art-of-positive-deletion/</guid></item><item><title>Slowest ever response to a job application?</title><link>https://www.databasesandlife.com/slowest-ever-response-to-a-job-application/</link><description>&lt;p&gt;I suddenly got an email out of the blue today:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dear Sir / Madam:&lt;/p&gt;
&lt;p&gt;We have received your application, an interview will be arranged for shortlisted candidates. Thank you for your interest to join our team!&lt;/p&gt;
&lt;p&gt;Human Resources&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Initially I thought it was spam (although the normally good Gmail spam system hadn&amp;rsquo;t marked it as spam), then I saw the company name, and saw they were based in Macau.&lt;/p&gt;
&lt;p&gt;A quick search for that company&amp;rsquo;s name in my email found one outgoing message to them, applying for a job, dated December 8th, 2006! Today is February 19th, 2008.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 19 Feb 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/slowest-ever-response-to-a-job-application/</guid></item><item><title>Command line tricks: Scripting Languages</title><link>https://caiustheory.com/command-line-tricks--scripting-languages/</link><description>&lt;p&gt;To search your php.ini file quickly and easily with the option to use regular expressions, I tend to drop back to the &lt;!-- raw HTML omitted --&gt;cli&lt;!-- raw HTML omitted --&gt;. The reason for this is I can easily parse the output of &lt;code&gt;phpinfo()&lt;/code&gt; with &lt;code&gt;grep&lt;/code&gt;, and can do various things with the output, could even pass it to a script if I really wanted to.&lt;/p&gt;
&lt;p&gt;Here is the line I use to search &lt;code&gt;phpinfo()&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;?php phpinfo() ?&amp;gt;"&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; php &lt;span class="p"&gt;|&lt;/span&gt; grep -i &lt;span class="nv"&gt;$search_string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It passes the string through the php interpreter and then searches through it with grep.&lt;/p&gt;
&lt;p&gt;You can also do other nifty things with the shell &amp;amp; php + ruby especially (though I imagine python &amp;amp; perl work in the same way.) For instance I wanted to see if the following ruby would return the number of seconds since the &lt;a href="http:/en.wikipedia.org/wiki/Unix_Time"&gt;epoch&lt;/a&gt; till now.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_i&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now I could fire up a PHP page and do something like the following&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"php: "&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"ruby: "&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="sb"&gt;`ruby -e 'print Time.now.to_i'`&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But what if I&amp;rsquo;ve not got a web server with PHP running on the machine I&amp;rsquo;m using? Well then I could drop back to the shell and run it through &lt;code&gt;php&lt;/code&gt; using &lt;code&gt;cat&lt;/code&gt; as a way to insert multiple lines, and it would look like the following&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &lt;span class="s"&gt;&amp;lt;&amp;lt;PHP | php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&amp;lt;?php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; echo "php: " . time() . "\n";
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; echo "ruby: " . `ruby -e 'print Time.now.to_i'` . "\n";
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;PHP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;php: &lt;span class="m"&gt;1203004463&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ruby: &lt;span class="m"&gt;1203004463&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now this works, but why do I want to remember all that php, and seeing as I have to drop back to the shell to access the ruby statement, why not just let the shell do all the work? So after a few seconds thinking, I came up with this&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ruby -e &lt;span class="s1"&gt;'puts "ruby: #{Time.now.to_i}"'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;?php echo "PHP: " . time() . "\n" ?&amp;gt;'&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; php
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This runs the ruby code through &lt;code&gt;ruby&lt;/code&gt; and the php code through &lt;code&gt;php&lt;/code&gt; without dropping back to the shell from within a language interpreter :)&lt;/p&gt;
&lt;h3 id="update"&gt;Update:&lt;/h3&gt;
&lt;p&gt;Fangel pointed out &lt;code&gt;php -r&lt;/code&gt; is the equivilent of &lt;code&gt;ruby -e&lt;/code&gt; so the final commands could just be:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ruby -e &lt;span class="s1"&gt;'puts "ruby: #{Time.now.to_i}"'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt;php -r &lt;span class="s1"&gt;'echo "PHP: ".time()."\n";'&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><author>Caius Theory</author><pubDate>Thu, 14 Feb 2008 18:24:27 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/command-line-tricks--scripting-languages/</guid></item><item><title>Java gotcha: `anArray.hashCode()` isn't deep, but `aList.hashCode()` is</title><link>https://www.databasesandlife.com/java-gotcha-anarrayhashcode-isnt-deep/</link><description>&lt;p&gt;Every Java object has a &lt;code&gt;hashCode()&lt;/code&gt; and an &lt;code&gt;equals(..)&lt;/code&gt; method. These are used to determine where to place an object within a hashing algorithm, and if two objects with the same place in the hashing algorithm actually are the same, respectively. If you want to add objects to a &lt;code&gt;Set&lt;/code&gt;—which stores only unique objects—it uses these methods to determine whether two objects are the same and thus shouldn&amp;rsquo;t both be stored.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 14 Feb 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/java-gotcha-anarrayhashcode-isnt-deep/</guid></item><item><title>Refactoring code logically</title><link>https://caiustheory.com/refactoring-code-logically/</link><description>&lt;p&gt;And now an example of how I write my ruby code and get it down to the bare, readable, minimum code needed. This is real life code taken from a website I&amp;rsquo;m building, but I&amp;rsquo;ve changed the objects to a blog post because more people will relate to that easier.&lt;/p&gt;
&lt;p&gt;The show object has an id passed in using the &lt;code&gt;params&lt;/code&gt; Hash, I want to check if that post exists in the database first. If it does, then render the page, and if it doesn&amp;rsquo;t return a 404 error page.&lt;/p&gt;
&lt;p&gt;So I start off by writing this in &lt;em&gt;longhand&lt;/em&gt; ruby, I&amp;rsquo;m using the &lt;a href="http://merbivore.com/"&gt;merb&lt;/a&gt; framework with &lt;a href="http://datamapper.com/"&gt;DataMapper&lt;/a&gt; ORM by the way.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;show&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="vi"&gt;@post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Post&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;params&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vi"&gt;@post&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;render&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="s2"&gt;"404 - Not found"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now whilst theres nothing wrong with this code, it just doesn&amp;rsquo;t look right to me. There is a big if/else statement in there whilst I&amp;rsquo;m sure there doesn&amp;rsquo;t need to be.&lt;/p&gt;
&lt;p&gt;Now I know if I return at any point in a ruby method, it exits the method at that point. So the first thing to is to refactor the &lt;code&gt;if&lt;/code&gt; test to remove a line of code. I shall assign &lt;code&gt;@post&lt;/code&gt; to the result of the DB as the actual if statement&amp;rsquo;s test.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;show&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Post&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;params&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;render&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="s2"&gt;"404 - Not found"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So thats reading slightly better, and also is a line less of code. Now I wonder if I can use a &lt;code&gt;return true&lt;/code&gt; in there to stop me having to explicitly state an &lt;code&gt;else&lt;/code&gt; clause.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;show&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;post&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;params&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;render&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="s2"&gt;"404 - Not found"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now the eagerest amongst you will be wondering what the advantage of that code is. It doesn&amp;rsquo;t appear any more readable (slightly less in fact as you have to figure out its an implicit else) and is exactly the same amount of lines as the previous example. But what if we change the &lt;code&gt;if&lt;/code&gt; to an &lt;code&gt;if !&lt;/code&gt; and flip the code logic around?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;show&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Post&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;params&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="s2"&gt;"404 - not found"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;render&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now a raise will stop the code executing, and in the real application you would in fact just redirect to your 404 error page. The problem now is the &lt;code&gt;if !&lt;/code&gt; looks ugly and isn&amp;rsquo;t easily readable.&lt;/p&gt;
&lt;p&gt;All &lt;code&gt;unless&lt;/code&gt; does is &lt;code&gt;if !&lt;/code&gt;, that is, if the inverse of the result of the test statement is true, then invoke the block given to it. A quick example for you:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# without unless&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="vi"&gt;@user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;logged_in?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Please login."&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# using unless&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="vi"&gt;@user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;logged_in?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Please login."&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now whilst &lt;code&gt;if !&lt;/code&gt; doesn&amp;rsquo;t seem that bad compared to &lt;code&gt;unless&lt;/code&gt;, the readablility of the code increases. It reads more as a flow of logic, and is quicker for the human brain to walk through (my brain anyway!)&lt;/p&gt;
&lt;p&gt;So using unless we get 4 lines of code that is easily readable.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;show&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Post&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;params&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="s2"&gt;"404 - Not found"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;render&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now what if we go one step further and use the unless shorthand way of testing and exectuting one line of code?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;show&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="s2"&gt;"404 - Not found"&lt;/span&gt; &lt;span class="k"&gt;unless&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Post&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;params&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;render&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And that is generally how I write my code logically. Of course for something simple like this I&amp;rsquo;d probably jump in at the last block having refactored it in my head first, but for more complex things I tend to write them exlicitly and then refactor them down whilst maintaining readability of my code.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Tue, 12 Feb 2008 14:28:38 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/refactoring-code-logically/</guid></item><item><title>The Imperial March</title><link>https://benovermyer.com/blog/2008/02/the-imperial-march/</link><description>&lt;p&gt;I resubbed to Star Wars Galaxies despite discovering the announcement that no further expansions will be produced for it, and despite the gnawing suspicion I have that Bioware and LucasArts are producing a SWG-killer.&lt;/p&gt;
&lt;p&gt;The reason is the Imperial Army.&lt;/p&gt;
&lt;p&gt;This player association has made its home on Chilastra for as long as SWG has existed. They're a great group of people, and I first joined up with them in 2004. I've been forced to take extended hiatuses from SWG for various reasons, but I was always welcomed back into the fold whenever I returned.&lt;/p&gt;
&lt;p&gt;I keep coming back to SWG because of the community. It's a dedicated group of honest, hardworking, and genuinely fun people….and not just the IA, though they're obviously at the top of the heap.&lt;/p&gt;
&lt;p&gt;So then, I'm back. And now, my plans for the future.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Major Goal #1:&lt;/strong&gt; Hit CL90 with Scin. I'm halfway to 88 right now, which is a major milestone. I'll finally be able to wield the lava cannon and hence become roughly on par with the 90-level PvPers. Up to now, I've been relegated mostly to lighting people on fire in PvP and hoping someone else finishes them off before they get me. Hitting CL90 will be the final culmination of a very long and occasionally tedious journey with Scin. Whether I stay Commando or not will depend on how much fun I have as a CL90.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Major Goal #2:&lt;/strong&gt; Acquire a Vigo. The privateer gunship is a very cool-looking boat from the outside, and as a master pilot, it's both a duty and a desire to acquire the most powerful weapon in the privateer arsenal. I intend to make my Vigo into one of the “main characters” in Scin's backstory, and appropriately deck it out with Imperial decorations. Though I'm a privateer, I still need and want to show solidarity with the Empire.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Major Goal #3:&lt;/strong&gt; Establish Scin as a core part of the newly organized space wing of the Imperial Army. It's time to really build the space wing, especially since it is so new, and if I can drive increasingly better performance in space battles I will consider this goal met. It's a tall order, though, as reliant on teamwork as it is. Since Scin is a privateer, he will only be able to act as a crewman on gunships or Decimators in PvP.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minor Goal #1:&lt;/strong&gt; Finish the Rare Weapons Collections. I'm intrigued by them after finding one of the rifle parts behind the Storm Lord's throne. I want to acquire these badges and see what comes of it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minor Goal #2:&lt;/strong&gt; Turn Fuura Hengwen into what Scin used to be - a one-man starship engineering company. Though I don't relish the idea of factory-style production, artisan-style might suit me better. It has in the past.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Tue, 12 Feb 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/02/the-imperial-march/</guid></item><item><title>Creating an Iterator for a streaming JDBC ResultSet in Java</title><link>https://www.databasesandlife.com/creating-an-iterator-for-a-streaming-resultset-in-java/</link><description>&lt;p&gt;The Java &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html" rel="noopener noreferrer" target="_blank"&gt;Iterator&lt;/a&gt; interface requires one implements a &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html#hasNext%28%29" rel="noopener noreferrer" target="_blank"&gt;hasNext&lt;/a&gt; method, to determine if the current item is the last to be iterated over, or not. The &lt;a href="http://www.mysql.com/products/connector/j/" rel="noopener noreferrer" target="_blank"&gt;MySQL driver&lt;/a&gt;&amp;rsquo;s implementation of the JDBC ResultSet object, if one uses streaming mode throws an exception from its &lt;a href="http://java.sun.com/javase/6/docs/api/java/sql/ResultSet.html#isLast%28%29" rel="noopener noreferrer" target="_blank"&gt;isLast&lt;/a&gt; method. (&lt;a href="https://www.databasesandlife.com/reading-row-by-row-into-java-from-mysql/"&gt;Streaming mode&lt;/a&gt; prevents the JVM from running out of memory, which it would do if it tried to fetch all the results at once.)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 11 Feb 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/creating-an-iterator-for-a-streaming-resultset-in-java/</guid></item><item><title>The importance of remembering how to spell your name</title><link>https://www.databasesandlife.com/the-importance-of-remembering-how-to-spell-your-name/</link><description>&lt;p&gt;There was a discussion on &lt;a href="http://slashdot.org/" rel="noopener noreferrer" target="_blank"&gt;Slashdot&lt;/a&gt; about corporate ethics and system administrators reading other people&amp;rsquo;s emails. That reminded me of the following story:&lt;/p&gt;
&lt;p&gt;A friend of a friend was working in IT as a Windows administrator. He was called to fix some boss&amp;rsquo; computer, who then went out to lunch leaving the friend alone with the computer. The friend happened to see a mail on the boss&amp;rsquo; computer that he found interesting, so he &lt;strong&gt;forwarded&lt;/strong&gt; it to himself.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 11 Feb 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/the-importance-of-remembering-how-to-spell-your-name/</guid></item><item><title>SQL*Net message to client vs SQL*Net more data to client</title><link>https://tanelpoder.com/2008/02/10/sqlnet-message-to-client-vs-sqlnet-more-data-to-client/</link><description>&lt;p&gt;After my &lt;a href="https://tanelpoder.com/2008/02/07/sqlnet-message-to-client-wait-gotcha/" target="_blank"&gt;last post about SQL*Net message to client wait event&lt;/a&gt; I had a follow-up question about what&amp;rsquo;s the difference between &lt;code&gt;SQL*Net message to client&lt;/code&gt; and &lt;code&gt;SQL*Net more data to client&lt;/code&gt; wait events. I&amp;rsquo;ll post the answer here:&lt;/p&gt;
&lt;p&gt;The first session data unit (SDU) bufferful of return data is written to TCP socket buffer under &lt;code&gt;SQL*Net message to client&lt;/code&gt; wait event.&lt;/p&gt;
&lt;p&gt;If Oracle needs to return more result data for &lt;strong&gt;a call&lt;/strong&gt; than fits into the &lt;em&gt;first&lt;/em&gt; SDU buffer, then further writes for that call are done under &lt;code&gt;SQL*Net more data to client&lt;/code&gt; event.&lt;/p&gt;
&lt;p&gt;So, whether and how much of the &lt;code&gt;SQL*Net more data to client&lt;/code&gt; vs. &lt;code&gt;SQL*Net message to client&lt;/code&gt; waits you see depends on two things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Amount of data returned to client &lt;em&gt;per call&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Oracle Net SDU size&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A quick test with my &lt;a href="https://tanelpoder.com/2013/02/18/snapper-v4-02-and-the-snapper-launch-party-video/" target="_blank"&gt;Snapper&lt;/a&gt; performance tool illustrates this:&lt;/p&gt;
&lt;p&gt;In one session run following:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; set arraysize 1
SQL&amp;gt;
SQL&amp;gt; select rownum from dba_source;

    ROWNUM
----------
         1
         2
         3
         4
         5
         6
&lt;i&gt;...many rows returned...&lt;/i&gt;
&lt;/pre&gt;
&lt;p&gt;And I measure the waits in the other session:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; @snapper out,gather=w 5 1 141

-- Session Snapper v1.06 by Tanel Poder

---------------------------------------------------------------------------------------------------------------------------------------------
HEAD,     SID, SNAPSHOT START   ,  SECONDS, TYPE, STATISTIC                               ,         DELTA,      D/SEC,     HDELTA,     HD/SEC
---------------------------------------------------------------------------------------------------------------------------------------------
DATA,     141, 20080210 14:59:55,        5, WAIT, SQL*Net message to client               ,          6750,       1350,     6.75ms,     1.35ms
DATA,     141, 20080210 14:59:55,        5, WAIT, SQL*Net message from client             ,       4668258,     933652,      4.67s,   933.65ms
--  End of snap 1

&lt;/pre&gt;
&lt;p&gt;No &lt;code&gt;SQL*Net more data to client&lt;/code&gt; waits show up above, as with &lt;em&gt;arraysize&lt;/em&gt; = 1 setting Oracle fetches only 2 rows at a time. Therefore the returned resultset &lt;em&gt;per fetch call&lt;/em&gt; always fits into the first SDU sized packet. Note that the reason why Oracle fetches 2 rows when arraysize is 1 is due to an OCI optimization which tries to be clever and proactively detect end-of-resultset conditions when fetching a single row - that way there&amp;rsquo;s a chance to automatically cancel a cursor and release its pins without an explicit cursor cancel or close call. This should have positive effect reducing shared pool fragmentation in some cases.&lt;/p&gt;
&lt;p&gt;Anyway, now I&amp;rsquo;ll set the &lt;em&gt;arraysize&lt;/em&gt; to 5000 and run the same SQL again:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 10 Feb 2008 09:35:58 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/02/10/sqlnet-message-to-client-vs-sqlnet-more-data-to-client/</guid></item><item><title>SQL*Net message to client wait isn’t really what it’s thought to be</title><link>https://tanelpoder.com/2008/02/07/sqlnet-message-to-client-wait-gotcha/</link><description>&lt;p&gt;In a recent &lt;a href="http://forums.oracle.com/forums/thread.jspa?messageID=2334002" target="_blank"&gt;Oracle Forum thread&lt;/a&gt; a question came up how to use &lt;strong&gt;SQL*Net message to client&lt;/strong&gt; wait events for measuring network latency between server and client. The answer is that you can’t use it for network latency measurements at all, due to how TCP stack works and how Oracle uses it.&lt;/p&gt;
&lt;p&gt;I’ll paste my answer here too, for people who don’t follow Oracle Forums:&lt;/p&gt;
&lt;p&gt;As I wrote in that reply, “SQL*Net message to client” does NOT measure &lt;strong&gt;network&lt;/strong&gt; latency! It merely measures how long it took to put the response message into TCP send buffer on the server!&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 07 Feb 2008 10:35:47 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/02/07/sqlnet-message-to-client-wait-gotcha/</guid></item><item><title>How to read row-by-row from a large MySQL table into Java, without running out of memory</title><link>https://www.databasesandlife.com/reading-row-by-row-into-java-from-mysql/</link><description>&lt;p&gt;Trying to read a large amount of data from MySQL using Java using one query is not as easy as one might think.&lt;/p&gt;
&lt;p&gt;I want to read the results of the query a chunk at a time. If I read it all at once, the JVM understandably runs out of memory. In this case I am stuffing all the resulting data into a &lt;a href="http://lucene.apache.org/" rel="noopener noreferrer" target="_blank"&gt;Lucene&lt;/a&gt; index, but the same would apply if I was writing the data out to a file, another database, etc.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 07 Feb 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/reading-row-by-row-into-java-from-mysql/</guid></item><item><title>Use datamapper sessions with merb &amp;amp; datamapper</title><link>https://caiustheory.com/use-datamapper-sessions-with-merb-datamapper/</link><description>&lt;h3 id="issue"&gt;Issue&lt;/h3&gt;
&lt;p&gt;Can&amp;rsquo;t use merb sessions with datamapper &amp;amp; mysql, get back an error about needing an id on the text column or something (I had the error a couple of days ago.)&lt;/p&gt;
&lt;h3 id="solution"&gt;Solution&lt;/h3&gt;
&lt;p&gt;I suggest grabbing merb_datamapper svn source to fix this in. To do so make sure you have subversion installed on your machine (I&amp;rsquo;m assuming a Unix based machine here.)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Checkout the source&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; svn co http://svn.devjavu.com/merb/plugins/merb_datamapper
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open up the affected file in your favourite editor &lt;em&gt;(I use TextMate)&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; cd merb_datamapper
mate lib/merb/sessions/data_mapper_session.rb
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Find line 25 that contains&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; `property :session_id, :text, :lazy =&amp;gt; false, :key =&amp;gt; true`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and remove &lt;code&gt;:text, :lazy =&amp;gt; false&lt;/code&gt; to replace it with &lt;code&gt;:string&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; `property :session_id, :string, :key =&amp;gt; true`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save and close the file, thats the editing done. Now to install the gem.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build the gem&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; rake gem
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the gem&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; sudo gem install pkg/merb_datamapper-0.5.gem
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And you&amp;rsquo;re away with the fix installed. Now just run &lt;code&gt;merb&lt;/code&gt; to create your sessions table in the db. Hope this helped!&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Tue, 05 Feb 2008 22:27:31 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/use-datamapper-sessions-with-merb-datamapper/</guid></item><item><title>Which log levels to use when?</title><link>https://www.databasesandlife.com/which-log-levels-to-use-when/</link><description>&lt;p&gt;I&amp;rsquo;m sure there are a lot of opinions in the world about which logger levels to use for which errors. Log levels in the sense of if a text destined for a logfile should be prefixed with &amp;ldquo;Info&amp;rdquo;, &amp;ldquo;Warning&amp;rdquo;, &amp;ldquo;Error&amp;rdquo; etc.&lt;/p&gt;
&lt;p&gt;There is even great debate about which log levels there should be. E.g. should there be a &amp;ldquo;Debug&amp;rdquo; level or a &amp;ldquo;Trace&amp;rdquo; level? Or both? In which case what&amp;rsquo;s the difference?&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 05 Feb 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/which-log-levels-to-use-when/</guid></item><item><title>Oracle hidden costs revealed, part 1 – Does a batch job run faster when executed locally?</title><link>https://tanelpoder.com/2008/02/05/oracle-hidden-costs-revealed-part-1/</link><description>&lt;p&gt;This series is about revealing some Oracle’s internal execution costs and inefficiencies. I will analyze few situations and special cases where you can experience a performance hit where you normally wouldn’t expect to.&lt;/p&gt;
&lt;p&gt;The first topic is about a question I saw in a recent &lt;a href="http://forums.oracle.com/forums/thread.jspa?threadID=605970&amp;amp;tstart=0" target="_blank"&gt;Oracle Forum thread&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The question goes like this: &lt;em&gt;“Is there any benefit if I run long sql queries from the server (by using telnet,etc) or from the remote by sql client.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In order to leave out the network transfer cost of resultset for simplicity, I will rephrase the question like that: &lt;strong&gt;“Do I get better performance when I execute my server-side batch jobs (which don’t return any data to client) locally from the database server versus a remote application server or workstation?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The obvious answer would be &lt;em&gt;“NO, it does not matter where from you execute your batch job, as Oracle is a client server database system. All execution is done locally regardless of the client’s location, thus the performance is the same”&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;While this sounds plausible in theory, there is (at least) one practical issue which can affect Oracle server performance depending on the clients platform and client libaries version.&lt;/p&gt;
&lt;p&gt;It is caused by regular &lt;strong&gt;in-band break checking&lt;/strong&gt; in client server communication channel where &lt;strong&gt;out of band break signalling&lt;/strong&gt; is not available. A test case is below:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 04 Feb 2008 18:09:06 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/02/05/oracle-hidden-costs-revealed-part-1/</guid></item><item><title>Excellent article on Oracle 11g PL/SQL function result cache</title><link>https://tanelpoder.com/2008/02/03/oracle-11g-plsql-function-result-cache/</link><description>&lt;p&gt;I have so far avoided writing such pointer blog posts which only refer you to another article, but I have to do it with &lt;a href="http://www.oracle-developer.net/display.php?id=504" target="_blank"&gt;this one&lt;/a&gt;. Adrian Billington has written an excellent article on performance of Oracle 11g PL/SQL function result cache. His article is a good example of a thorough, well organized and well written technical content. I really enjoyed reading it and thanks to his thoroughness, he has just saved me some precious time doing that research on my own.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 03 Feb 2008 09:39:25 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/02/03/oracle-11g-plsql-function-result-cache/</guid></item><item><title>Why do I love Ruby?</title><link>https://caiustheory.com/why-do-i-love-ruby/</link><description>&lt;p&gt;So mother (who can&amp;rsquo;t program) just posed me the question&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Why is Ruby your favourite programming language?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Me being a show off jumped straight into &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt; and banged out some code in real time to show her. First up, a quick little one-liner of Ruby code to output a String:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# =&amp;gt; "Hello World"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So she goes, &amp;ldquo;Sure, but whats so brilliant about that?&amp;rdquo; So I just decide to reverse the string, have it output in reverse order:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reverse&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# =&amp;gt; "dlroW olleH"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then the next question comes, &amp;ldquo;So what makes that so much easier than in other languages?&amp;rdquo; Well now I was thinking on the spot about which other language I can bang out a quick example in without having to look up too much information. PHP seems the logical choice, being the language I know best behind Ruby.&lt;/p&gt;
&lt;p&gt;Thinking about how to do it in PHP, I can&amp;rsquo;t think of a function to reverse the content of a string, but I know that &lt;code&gt;array_reverse()&lt;/code&gt; exists, so I just split it into an array and reverse that array. Only problem is I can&amp;rsquo;t remember how to split a string by &lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;, I don&amp;rsquo;t think &lt;code&gt;explode( &amp;quot;&amp;quot;, $var )&lt;/code&gt; does the job. So I quickly jump in and write the following code to test my concern.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;explode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;array_reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;implode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$c&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;# =&amp;gt; ERROR
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The reason for the error is because I&amp;rsquo;ve missed a semi colon off the end of line 2, to this I get the response, &amp;ldquo;well thats certainly not as nice as ruby.&amp;rdquo; Just because one little character is missing!&lt;/p&gt;
&lt;p&gt;So I fix the semi colon and run it again, now I get an error complaining about explode not being able to split by a missing delimiter (the empty string - &lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;) So I go hunting through the &lt;a href="http://php.net/"&gt;php.net&lt;/a&gt; docs and find &lt;code&gt;str_split()&lt;/code&gt;, which does exactly what I want it to.&lt;/p&gt;
&lt;p&gt;In replacing &lt;code&gt;explode()&lt;/code&gt; with &lt;code&gt;str_split()&lt;/code&gt; and running it via the &lt;code&gt;php&lt;/code&gt; command line binary, I realise that I haven&amp;rsquo;t got any &lt;code&gt;\n&lt;/code&gt; (newlines) at the end of it, so it doesn&amp;rsquo;t display nicely in the terminal. I thus update the script to the following and show her the result:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;explode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;array_reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;implode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$c&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;# =&amp;gt; "dlroW olleH"
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And so she goes away seeing why I prefer Ruby to other languages for &lt;em&gt;most&lt;/em&gt; programming I do. There are things Ruby fails at (and don&amp;rsquo;t get me started on why rails isn&amp;rsquo;t going to replace php!) and other places where it succeeds very well.&lt;/p&gt;
&lt;p&gt;But each to their own, and my own favourite is Ruby!&lt;/p&gt;
&lt;h3 id="update"&gt;Update&lt;/h3&gt;
&lt;p&gt;As pointed out in the comments, if I had looked a bit further I would&amp;rsquo;ve found &lt;code&gt;strrev()&lt;/code&gt; which does the same as the &lt;code&gt;reverse&lt;/code&gt; method in Ruby. So in fact the final code would be:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reverse&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;vs&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;strrev&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So it turns out this was a bad way to show why I prefer Ruby to PHP code wise to mother, think I might have to just bite the bullet and write about why I prefer &lt;code&gt;object.method&lt;/code&gt; to &lt;code&gt;method( object )&lt;/code&gt;!&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Wed, 30 Jan 2008 16:15:24 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/why-do-i-love-ruby/</guid></item><item><title>Copy/paste between Excel and MSN</title><link>https://www.databasesandlife.com/copypaste-between-excel-and-msn/</link><description>&lt;p&gt;Not even the simplest things work with computers these days.&lt;/p&gt;
&lt;p&gt;I have an Excel sheet and I want to copy a value into an MSN conversation. On Windows. Notice the vendor of all these products.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I copy the cell and in the middle of the sentence I&amp;rsquo;m tying into MSN I press Ctrl-V. MSN hangs for about 5 seconds. Then a notification is sent to the other party that I want to transfer a file, something .tmp.gif, i.e. an &lt;em&gt;bitmap image&lt;/em&gt; of the value I&amp;rsquo;m trying to my sentence. Of course the other party hasn&amp;rsquo;t seen the first part of my sentence yet, as it&amp;rsquo;s still in the message composer and I haven&amp;rsquo;t pressed Return yet, so this file transfer request would come as a bit of a surprise to the other party.&lt;/li&gt;
&lt;li&gt;No problem – I can double-click the cell in Excel to edit it, and copy the characters from the cell, as opposed to copying the cell itself. However, the cell is a formula. That means that when I edit the cell I get text such as =D1+E9 as opposed to the numeric result value which I wanted to paste into the MSN conversation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So what is the solution? As far as I can see I have to have both windows open side-by-side on the screen, and type in the value into the MSN window that Excel is displaying&amp;hellip;.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 30 Jan 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/copypaste-between-excel-and-msn/</guid></item><item><title>Why does my internet router have a "standby" button?</title><link>https://www.databasesandlife.com/useful-standby-button/</link><description>&lt;p&gt;Before I left Vienna, the Internet stopped working in my flat. There were some major electrical engineering works going on in the building, so I assumed this was the cause. Now I&amp;rsquo;ve come back, they&amp;rsquo;ve stopped, but my Internet hasn&amp;rsquo;t started working again.&lt;/p&gt;
&lt;p&gt;The modem, from my ISP Chello, was an &amp;ldquo;ARRIS type&amp;rdquo;, and the &amp;ldquo;online&amp;rdquo; light (light 2 in the following diagram) was permanently flashing.&lt;/p&gt;
&lt;p&gt;What was the modem trying to communicate to me? On the Chello homepage it says one should turn the modem off and on if this happens. Needless to say, by the time I read that helpful advice, I&amp;rsquo;d already done that quite a few times!&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 28 Jan 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/useful-standby-button/</guid></item><item><title>Free software, free world</title><link>https://benovermyer.com/blog/2008/01/free-software-free-world/</link><description>&lt;img alt="A photo of beer and a scholar" class="photo" src="https://benovermyer.com/blog/2008/01/free-software-free-world/free.jpg" /&gt;
&lt;p&gt;The concept of a free world is near and dear to those advocates of FOSS. In recent years free software advocacy has grown in volume if not in momentum. Subscribers to this peculiar philosophy - that all software should be free, open source, and readily available to the public at large - seem to hold certain similarities to other philosophical positions.&lt;/p&gt;
&lt;p&gt;Anarchism, for one. Libertarianism for another. But it goes deeper than those mere labels.&lt;/p&gt;
&lt;p&gt;All software being freely available as a good and desirable trait of a society implies…nay, requires that believers subscribe to the idea that materialism and ownership are inherently negative concepts. In this they resemble some beliefs of a few Native American tribes. &lt;a href="https://web.archive.org/web/20080219130432/http://anthro.palomar.edu/economy/econ_2.htm" rel="external"&gt;Non-market economies&lt;/a&gt; based on concepts of barter and dumb-barter, however, almost always have a concept of ownership behind them even if there is no currency or common value basis for items. In small societies, the materialistic bent of placing value on an item gives way to placing value on the exchange of the item, thereby replacing economic value with social value. In today's anonymous global village, social value is of far less importance, and thus materialism has risen as a natural consequence.&lt;/p&gt;
&lt;p&gt;Interestingly, the FOSS advocacy movement seems to be pushing for a return to social value over material value. Linus Torvalds is considered influential and prestigious for his uncompromising dedication, generosity, and competence. Bill Gates, while similarly intelligent, is reviled for his tremendous wealth and &lt;a href="http://www.atm.damtp.cam.ac.uk/people/mem/papers/LHCE/halloween.html" rel="external"&gt;reputed anti-FOSS tactics&lt;/a&gt;. A developer's prestige in the FOSS community is directly proportional to his or her contributions to the community.&lt;/p&gt;
&lt;p&gt;Now, while this is all well and good and I applaud a return to social value over material value, there is one glaring flaw in the FOSS advocacy philosophy - free software doesn't pay the bills. Some companies get around this by offering services to support their free products, but service isn't particularly time-consuming, thus enabling fewer developers to support a single product and restricting the number of jobs available at a given company. This suggests that the entire software industry is either flawed in its concept or flawed in its execution and &lt;a href="http://www.linux.com/feature/37604" rel="external"&gt;gives rise to questions&lt;/a&gt; regarding the legitimacy and efficiency of the current paradigm.&lt;/p&gt;
&lt;p&gt;For FOSS to become a viable methodology, the software industry must shift from a production-centric environment to a service-centric one. This is not to say that development itself must go by the wayside; rather, services need to be placed higher in priority than development so as to foster an equivalent financial return for developers and still promote the free usage of software. &lt;a href="http://www.census.gov/econ/www/servmenu.html" rel="external"&gt;Service industries&lt;/a&gt; account for 70% of the economic activity in the United States; certainly, by transforming the software industry into such will bring no great harm to the pocketbooks of developers as a whole…but its effects on the individual developer can't be directly determined.&lt;/p&gt;
&lt;p&gt;Personally, I hope that the FOSS philosophy and its focus on social value is a sign of a general disillusionment with materialism in general. Certainly, it can't hurt to help others through ideas such as FOSS. To find out more, check out the &lt;a href="http://www.fsf.org/" rel="external"&gt;Free Software Foundation's website&lt;/a&gt;. Their Resources section is particularly helpful.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Wed, 23 Jan 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/01/free-software-free-world/</guid></item><item><title>Nissan Skyline</title><link>https://www.mikekasberg.com/blog/2008/01/22/nissan-skyline.html</link><description>&lt;p&gt;I created this 3D Nissan Skyline model during my junior year in the &lt;a href="https://sites.google.com/view/digital-evolutions/main"&gt;Digital Evolutions&lt;/a&gt; program at Smoky Hill High School.&lt;/p&gt;

&lt;p&gt;&lt;img alt="Nissan Skyline GTR" src="https://www.mikekasberg.com/images/Render_Good_GTR.png" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img alt="Nissan Skyline GTR Front" src="https://www.mikekasberg.com/images/Render_Good_GTR_Front.png" /&gt;&lt;/p&gt;

&lt;div class="text-center"&gt;

&lt;/div&gt;</description><author>Mike Kasberg's Blog</author><pubDate>Wed, 23 Jan 2008 00:08:10 GMT</pubDate><guid isPermaLink="true">https://www.mikekasberg.com/blog/2008/01/22/nissan-skyline.html</guid></item><item><title>Random unreproducable Tomcat error of the day</title><link>https://www.databasesandlife.com/random-unreproducable-java-error-of-the-day/</link><description>&lt;p&gt;I just tried to start Tomcat and it refused to start because of the following error:&lt;/p&gt;
&lt;pre&gt;log4j:ERROR Error occured while converting date.
java.lang.NullPointerException
  at java.lang.System.arraycopy(Native Method)
  at java.lang.AbstractStringBuilder.getChars
  at java.lang.StringBuffer.getChars
  at org.apache.log4j.helpers.ISO8601DateFormat.format
  at java.text.DateFormat.format
  ...
  at org.apache.log4j.Category.log
  at org.apache.commons.logging.impl.Log4JLogger.error
  ...
  at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt
  at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
  at java.lang.Thread.run
log4j:ERROR Error occured while converting date.
&lt;/pre&gt;
&lt;p&gt;So I just hit started it again, and this time it starts without error.&lt;/p&gt;
&lt;div class="conclusion"&gt;And people trust their mission-critical server architecture to this stuff!&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; Since writing this article
I&amp;rsquo;ve changed to using &lt;a href="http://www.eclipse.org/jetty/" rel="noopener noreferrer" target="_blank"&gt;Jetty&lt;/a&gt; and have left this sort of error behind me&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 21 Jan 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/random-unreproducable-java-error-of-the-day/</guid></item><item><title>Leveraging Web 2.0 for a tabletop gaming company</title><link>https://benovermyer.com/blog/2008/01/leveraging-web-20-for-a-tabletop-gaming-company/</link><description>&lt;p&gt;After the successful launch of the &lt;a href="https://www.silvergryphongames.com" rel="external"&gt;Silver Gryphon Games website&lt;/a&gt;, I began looking around at web technologies and software that we could use to better operate as a decentralized company. These days, it's impractical for an RPG company - especially one as small as SGG - to keep offices and on-site staff. Only a select few of the larger companies do this. For the rest of us, it's mostly a matter of keeping track of freelancers and perhaps one or two local resources. For that, we don't need offices. We don't even need warehouses when we use POD services for printing purposes. That's where Web 2.0 comes in. Recently, we've been using several of Google's tools for communication and collaboration. Gmail and Google Docs have been central to our efforts for awhile now. We are experimenting with Groups as a collaborative medium. It seems to be most useful as a way to communicate with multiple freelancers at the same time, kind of like a super-Wiki. We have yet to leverage Calendar, though I do see that on the horizon. I personally use Blogger for this devlog. Since we began using these tools, our productivity has increased measurably. Even Blogger, which isn't used in the creative process directly, grants a certain measure of accountability that serves as excellent motivation. The one thing we really lack in terms of pre-built solutions is something to handle milestone scheduling and task management. Google doesn't have a tool like this, which makes it a little more difficult to integrate into our workflow. I've been looking at a few options, like Basecamp, but we have yet to select any. It's possible that we'll just use Groups for this purpose. What would be really useful, though, would be an integrated suite that combines all of our needs into one package. These needs can be loosely defined as the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Searchable, indexable, categorized email&lt;/li&gt;
&lt;li&gt;Real-time multi-user text, voice, and video communication&lt;/li&gt;
&lt;li&gt;Quick notes&lt;/li&gt;
&lt;li&gt;Hierarchical roles-based task and project management&lt;/li&gt;
&lt;li&gt;Accounting control and analysis&lt;/li&gt;
&lt;li&gt;Collaborative document editing&lt;/li&gt;
&lt;li&gt;Easy-to-use interfaces for all of the above&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course, there are others, but they're more nebulous or uniquely “RPG.” For example, the ability to playtest online is useful when we need to all hack away at a particular mechanic. For this, online RPG software like the old and obsolete OpenRPG helps but isn't well-suited to either Æther or Eiridia. If anyone knows of any software that can do what we're looking for (that is NOT Lotus Notes or a Microsoft product), let me know. I love Google's tools, but if there's something better out there, that'd be wonderful.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Thu, 17 Jan 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/01/leveraging-web-20-for-a-tabletop-gaming-company/</guid></item><item><title>Bosses used to be called "administrators"</title><link>https://www.databasesandlife.com/bosses-used-to-be-called-administrators/</link><description>&lt;p&gt;I was talking to my father over Christmas and he said that in his career, job titles of bosses had been various things, such as &amp;ldquo;leader of&amp;rdquo;, &amp;ldquo;head of&amp;rdquo;, etc. But he said when he started, they were called &lt;strong&gt;administrators&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I think that&amp;rsquo;s a great name for a boss. It emphasises that the job of the boss is to get out of the way of the employees and let them get on with their jobs. It also emphasises the positive aspects of a boss from the perspective of the employee, i.e. certain things which do not directly relate to the job, yet have to be done—such as coordinating holidays, managing pay, managing the office—should be done by the boss, to let the employee focus even more solely on their area of competence.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 17 Jan 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/bosses-used-to-be-called-administrators/</guid></item><item><title>Oracle eats BEA</title><link>/post/oracle-eats-bea/</link><description>&lt;p&gt;&lt;img alt="Oracle fish eats BEA fish eats Fuego fish" src="/post/oracle-eats-bea/bigfish_eats_smallfish.jpg#float-left" /&gt;
To me, &lt;a href="../bea-systems-acquires-fuego"&gt;BEA was the big fish&lt;/a&gt; not long ago.&lt;/p&gt;
&lt;p&gt;Today, &lt;a href="http://www.oracle.com/corporate/press/2008_jan/bea.html"&gt;BEA is the small one in the mouth of Oracle&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We are in a steep ride, jumping quickly from a start-up to becoming part of BEA and
now of Oracle. I hope we can keep the &amp;quot;small-company&amp;quot; atmosphere here in our division.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Wed, 16 Jan 2008 11:37:00 GMT</pubDate><guid isPermaLink="true">/post/oracle-eats-bea/</guid></item><item><title>Web software front-end test cases</title><link>https://www.databasesandlife.com/web-software-front-end-test-cases/</link><description>&lt;p&gt;Recently I was working on a website which was developed in PHP without a web framework. A lot of things were programmed manually which would normally be taken care of by a web framework (for example things like: in case of an error, the HTML fields on the form are re-populated on the response page).&lt;/p&gt;
&lt;p&gt;So I came up with an extensive set of test cases, and made sure I used them all on every field on every page.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 16 Jan 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/web-software-front-end-test-cases/</guid></item><item><title>Can you write a working SQL statement without using any whitespace?</title><link>https://tanelpoder.com/2008/01/14/can-you-write-a-working-sql-statement-without-using-any-whitespace/</link><description>&lt;p&gt;I read &lt;a href="http://laurentschneider.com/wordpress/2008/01/select-1x-from-t1.html" target="_blank"&gt;this post&lt;/a&gt; by Laurent Schneider yesterday. In the comment section Tom Kyte already explained what the issue was about, but I’ll expand this explanation a little.&lt;/p&gt;
&lt;p&gt;The question was why should the apparently invalid statement below work? I mean there is no such column nor number as “1.x”), yet the statement works ok:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; select 1.x from dual;

         X
----------
         1

&lt;/pre&gt;
&lt;p&gt;The column header gives a good hint what happened above. Oracle has treated the X as the column alias.&lt;/p&gt;
&lt;p&gt;Let’s remove the “x” and see:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; select 1. from dual;

        1.
----------
         1

&lt;/pre&gt;
&lt;p&gt;Now all works as expected, “1.” is treated as number ( 1. = 1.0 )&lt;/p&gt;
&lt;p&gt;But the question remains, how come Oracle splits up the string “1.x” and decides that the “x” is the column and “1.” is the number part – considering that there’s no whitespace between the 1. and x?&lt;/p&gt;
&lt;p&gt;The answer is that apparently the string tokenizer used by Oracle SQL parser is smart enough that it doesn’t rely only on whitespace for recognizing token delimiters. It is also able to use character class analysis for understanding where a literal ends and the next token (like column alias) starts.&lt;/p&gt;
&lt;p&gt;So, it is possible to write valid SQL statements without using any whitespace at all. For example:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 14 Jan 2008 06:42:21 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/01/14/can-you-write-a-working-sql-statement-without-using-any-whitespace/</guid></item><item><title>From Lord of the Rings Online to...</title><link>https://benovermyer.com/blog/2008/01/from-lord-of-the-rings-online-to/</link><description>&lt;p&gt;I canceled my LotRO account, having decided it just wasn't the kind of game experience I'm looking for. While some of the features were interesting and the quest content was phenomenal, other games I've played - like SWG - held my interest for much longer.&lt;/p&gt;
&lt;p&gt;So, I'm playing 8 days of a SWG trial with my old account, and I bought Guild Wars. So far, GW is a lot more fun than when I last played. That 5 minutes at a friend's was nothing compared to my current experience.&lt;/p&gt;
&lt;p&gt;SWG... well, it remains to be seen whether I'll resub or not. I also bought a copy of D&amp;amp;D Online, as it was on sale, but I probably won't install that until I tire of GW.&lt;/p&gt;
&lt;p&gt;More later.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Sun, 13 Jan 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2008/01/from-lord-of-the-rings-online-to/</guid></item><item><title>UK Parking</title><link>https://caiustheory.com/uk-parking/</link><description>&lt;p&gt;So I just saw this in my twitter stream:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://twitter.com/peterc/statuses/590099072"&gt;peterc&lt;/a&gt;: Warning UK drivers.. councils get powers on March 31st to give you parking fines for infractions they see on CCTV!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This indeed sucks. We&amp;rsquo;ll see how successful they are at ticketing people and whether anyone abuses the system&amp;hellip;&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sat, 12 Jan 2008 14:35:01 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/uk-parking/</guid></item><item><title>How to turn into Free Software supporters people who couldn't care less</title><link>https://stop.zona-m.net/2008/01/how-to-turn-into-free-software-supporters-people-who-couldnt-care-less/</link><description>(Historical note: I originally published this on 2008/01/12 at digifreedom.net, the website I set up as an online counterpart to that Family Guide to Digital Freedom which later on became the basis for my basic course. I have moved it here on April 24th, 2012, because I think the advice below it&amp;rsquo;s a perfect complement to something else published on this website in the same month (With leaders like these, Free Software will never win), and because here you can add your comments)</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 12 Jan 2008 07:59:29 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2008/01/how-to-turn-into-free-software-supporters-people-who-couldnt-care-less/</guid></item><item><title>The cycle of programming languages</title><link>https://www.databasesandlife.com/the-cycle-of-programming-languages/</link><description>&lt;p&gt;The following cycle never ceases to amaze me:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;People learning programming find &amp;ldquo;real&amp;rdquo; languages such as C++ or Java filled with too many &amp;ldquo;complex&amp;rdquo; constructs.&lt;/li&gt;
&lt;li&gt;They find or invent languages such as Javascript or PHP or BASIC and think they can get the job done without &amp;ldquo;unnecessary complexity&amp;rdquo;&lt;/li&gt;
&lt;li&gt;As these programmers develop, they develop increasing complex programs, and find that constructs such as classes, inheritance, exceptions, generics/templates, errors upon encountering undefined variables, and static typing help them debug their code and write better code quicker.&lt;/li&gt;
&lt;li&gt;They then add these features to their programming languages and everyone rejoices believing they&amp;rsquo;ve done something new and great.&lt;/li&gt;
&lt;li&gt;Other programmers – just starting out – find the current set of languages to be too complex as they contain features they don&amp;rsquo;t understand they need, such as classes, inheritance, exceptions, etc.: go to step 1.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I mean PHP5 includes features such as &lt;a href="http://www.php.net/manual/en/language.oop5.php" target="_blank"&gt;classes&lt;/a&gt;, &lt;a href="http://www.php.net/exceptions" target="_blank"&gt;exceptions&lt;/a&gt;, and &amp;ldquo;phpdoc&amp;rdquo;, similar to Java. When displaying an uncaught exception, the $ex-&amp;gt;__toString() method even returns a stack backtrace just like Java. (But global errors – which different to exceptions, as they were invented before PHP5 – do not).&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 10 Jan 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/the-cycle-of-programming-languages/</guid></item><item><title>Expensive calculator…</title><link>https://tanelpoder.com/2008/01/09/expensive-calculator/</link><description>&lt;p&gt;Oracle has evolved over time to much more than just a plain relational database. One option is to use Oracle as an expensive calculator.&lt;/p&gt;
&lt;p&gt;When researching or demoing Oracle, it’s quite convenient to do number calculations directly on sqlplus prompt, especially if dealing with internals where lots of stuff is about addresses and offsets shown in hex.&lt;/p&gt;
&lt;p&gt;Here’s the script what I use for such purposes: &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/calc.sql" target="_blank"&gt;&lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/calc.sql"&gt;https://github.com/tanelpoder/tpt-oracle/blob/master/calc.sql&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It usually saves me couple of seconds every calculation as I don’t have to reopen the calc.exe on my Windows box (I immediately stopped using it after I wrote the script).&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 09 Jan 2008 11:53:10 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/01/09/expensive-calculator/</guid></item><item><title>New Year, New Blog (2008)</title><link>https://www.databasesandlife.com/new-year-new-blog/</link><description>&lt;p class="intro"&gt;I shall be blogging here henceforth. I have moved all my old articles over from my previous uboot.com blog.&lt;/p&gt;
&lt;p&gt;The reason for the move was multiple:&lt;/p&gt;
&lt;ul class="tight"&gt;
  &lt;li&gt;
    It's important to use the software you write, to experience its successes and limitations. I am a contractor for &lt;a href="http://www.uboot.com/"&gt;uboot&lt;/a&gt; and have been using their blog; however I am also a contractor for &lt;a href="http://www.easyname.eu/"&gt;easyname&lt;/a&gt; and in December we took the hosting features online we'd been developing in 2006. I'm glad to report they work just great!
  &lt;/li&gt;
  &lt;li&gt;
    I wanted more control over the design. The text was small at the uboot blog and didn't invite reading.
  &lt;/li&gt;
  &lt;li&gt;
    I have discovered hierarchical categories! So one can view just my &lt;a href="https://www.databasesandlife.com/categories/software-architecture"&gt;software design posts&lt;/a&gt; for example. They are cool. Did uboot have them? If so, I never found them.
  &lt;/li&gt;
  &lt;li&gt;
    I wanted a facility for seeing new comments without checking all posts over all pages, and comparing the current number of comments on that post with my memory of the previous number of comments.
  &lt;/li&gt;
  &lt;li&gt;
    Trackback wasn't fully working with uboot. Although I suppose in the time it took me to set up my own blog, I could have repaired the uboot feature!
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It wasn&amp;rsquo;t easy easy as I had hoped to set up this blog. I imagined just FTPing over a WordPress installation and that would be it. While I don&amp;rsquo;t want to sound ungrateful to the open-source programmers who made both the blogging software, and the hosting software possible, there are a sufficient number of small problems – both in implementation and in architecture – with the internet, web servers, web protocols, and in every piece of software, as to make the seemingly simple process of installing some blogging software annoying and time-consuming. I am writing this at the end of the second day of full-time work creating this blog.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 08 Jan 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/new-year-new-blog/</guid></item><item><title>Why does Oracle parameter count change during session lifetime?</title><link>https://tanelpoder.com/2008/01/07/why-does-oracle-parameter-count-change-during-session-lifetime/</link><description>&lt;p&gt;I was once asked a question, why does Oracle change its parameter count during session lifetime?&lt;/p&gt;
&lt;p&gt;The question arose from the following observation that v$parameter shows more parameters after you adjust some hidden parameter value:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt;
SQL&amp;gt; select count(*) from v$parameter;

  COUNT(*)
----------
       &lt;b&gt;288&lt;/b&gt;

SQL&amp;gt;
SQL&amp;gt; alter session set "_complex_view_merging"=false;

Session altered.

SQL&amp;gt; select count(*) from v$parameter;

  COUNT(*)
----------
       &lt;b&gt;289&lt;/b&gt;

&lt;/pre&gt;
&lt;p&gt;Looks like the parameter count was just increased by one!&lt;/p&gt;
&lt;p&gt;“It sure seems like the hidden parameter don’t exist before they are actually modified”:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; show parameter _unnest_subquery   &lt;i&gt;(no rows returned)&lt;/i&gt;
SQL&amp;gt;
SQL&amp;gt;
SQL&amp;gt; alter session set "_unnest_subquery"=false;

Session altered.

SQL&amp;gt;
SQL&amp;gt; show parameter _unnest_subquery

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
_unnest_subquery                     boolean     FALSE
SQL&amp;gt;

&lt;/pre&gt;
&lt;p&gt;So it seems like Oracle was “creating” the hidden parameter when it was modified.&lt;/p&gt;
&lt;p&gt;This is not the reality though. All parameters for session are created during session startup and stored in shared pool.&lt;/p&gt;
&lt;p&gt;The answer lies in the view text of GV$PARAMETER view. This example is from an 11g database, older versions like 9.2 do have less checks in the where clause. Note that the output is manually formatted for better readability:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 07 Jan 2008 13:36:33 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/01/07/why-does-oracle-parameter-count-change-during-session-lifetime/</guid></item><item><title>Published Pictures</title><link>https://caiustheory.com/published-pictures/</link><description>&lt;p&gt;Interesting email arrived in my inbox today. I attended &lt;a href="http://barcamp.org/BarCampLeeds"&gt;BarCamp Leeds&lt;/a&gt; in late 2007 and whilst I was there I happened to take some pictures (as I am apt to do these days.)&lt;/p&gt;
&lt;p&gt;Anyway, I was rather happy to see that at least one picture isn&amp;rsquo;t just stagnating in my &lt;a href="http://flickr.com/photos/caius/"&gt;flickr stream&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi Caius,&lt;/p&gt;
&lt;p&gt;I am delighted to let you know that one of your photos with&lt;br /&gt;
a Creative Commons license has been selected for inclusion&lt;br /&gt;
in the newly released fourth edition of our Schmap Leeds&lt;br /&gt;
Guide:&lt;/p&gt;
&lt;p&gt;Town Hall&lt;br /&gt;
&lt;a href="http://www.schmap.com/leeds/sights_hydepark/p=39139/i=39139_10.jpg"&gt;http://www.schmap.com/leeds/sights_hydepark/p=39139/i=39139_10.jpg&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=""&gt;Original Picture on flickr&lt;/a&gt;&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Sat, 05 Jan 2008 18:08:39 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/published-pictures/</guid></item><item><title>Systematic application troubleshooting in Unix</title><link>https://tanelpoder.com/2008/01/05/systematic-application-troubleshooting-in-unix/</link><description>&lt;p&gt;How many times have you seen a following case, where a user or developer complains that their Oracle session is stuck or running very slowly and the person who starts investigating the issue does following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Checks the database for locks&lt;/li&gt;
&lt;li&gt;Checks free disk space&lt;/li&gt;
&lt;li&gt;Checks alert log&lt;/li&gt;
&lt;li&gt;Goes back to the client saying “we did a healthcheck and everything looks ok” and closes the case or asks the user/developer to contact application support team or tune their SQL&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The point here is that what the heck do the database locks, alert log or disk space have to do with &lt;em&gt;first round session troubleshooting&lt;/em&gt;, when Oracle provides just about everything you need in one simple view?&lt;/p&gt;
&lt;p&gt;Yes, I am talking about sampling V$SESSION_WAIT here. Database locks, free space and potential errors in alert log &lt;em&gt;may&lt;/em&gt; have something to do with your users problems, but not necessarily. As there are many more causes, like network issues etc which could affect your user (and the whole database), it doesn’t make sense to go through all those random “healthchecks” every time you receive a user phone call. Moreover, even if you identify that there is shortage of disk space or there are many database locks – so what? They may not have anything to do with the users problem.&lt;/p&gt;
&lt;p&gt;The issue here is that &lt;em&gt;still&lt;/em&gt; many people do not know about V$SESSION_WAIT which in most cases shows your problem immediately or at least points you to right direction (e.g. there’s no need to check for locks if your session is waiting on “log file switch (archiving needed)” wait – and vice versa). Even if “these people” have heard of V$SESSION_WAIT and may be able to drop this in during their job interview, they may not know how to use it in systematic troubleshooting context. Many hours of service downtime and user frustration would be saved if all DBAs knew this extremely simple concept of looking at V$SESSION_WAIT.&lt;/p&gt;
&lt;p&gt;This blog entry is not about Oracle though, so I will leave this rant for a future blog post.&lt;/p&gt;
&lt;p&gt;This post is about a similar problem in Unix world. Having been involved with resolving some serious production issues lately I have been surprised quite many times by the corporate Unix support people who seem to do behave in similar manner. For example, there is a user calling in saying that their scheduled Unix job, which normally takes 5 minutes, has been running for hours now. The “senior unix support analyst” will do following:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 05 Jan 2008 13:55:59 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2008/01/05/systematic-application-troubleshooting-in-unix/</guid></item><item><title>Twitter Statistics</title><link>https://caiustheory.com/twitter-statistics/</link><description>&lt;p&gt;&lt;a href="http://flickr.com/photo_zoom.gne?id=2157771886&amp;amp;size=o"&gt;&lt;img alt="Twitter Statistics for caius" src="http://farm3.static.flickr.com/2345/2157771886_9e41008ac2_m.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dcortesi.com/2007/12/27/twitter-stats/"&gt;Just&lt;/a&gt; &lt;a href="http://www.flickr.com/photos/gruber/2156085517/"&gt;joining&lt;/a&gt; &lt;a href="http://www.randsinrepose.com/archives/2008/01/01/year_in_twitter.html"&gt;the&lt;/a&gt; &lt;a href="http://kosmar.de/archives/2007/12/29/twitter-statistics/"&gt;band&lt;/a&gt; &lt;a href="http://blog.nordquist.org/?p=2083"&gt;wagon&lt;/a&gt; in posting up my twitter statistics. The skew towards december being the month I twitter most in is because I enabled twitter sms, and ended up replying/updating a lot more often than I expected.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Wed, 02 Jan 2008 09:15:00 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/twitter-statistics/</guid></item><item><title>OS X User has a virus</title><link>https://caiustheory.com/os-x-user-has-a-virus/</link><description>&lt;p&gt;No not my computer, me. I&amp;rsquo;ve managed to pickup an &lt;!-- raw HTML omitted --&gt;acute coryza&lt;!-- raw HTML omitted --&gt; virus. It causes &lt;code&gt;/dev/random&lt;/code&gt; to constantly pass data to &lt;code&gt;/Volumes/nose&lt;/code&gt;. I don&amp;rsquo;t think I got this from reading email, but I&amp;rsquo;m pretty sure it was a windows user who passed it to me.&lt;/p&gt;
&lt;p&gt;If I flush my partitions to disk every now and then I can get by with a clean &lt;code&gt;/Volumes/nose&lt;/code&gt; for a while before &lt;code&gt;/dev/random&lt;/code&gt; starts clogging it up again.&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Wed, 02 Jan 2008 03:15:15 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/os-x-user-has-a-virus/</guid></item><item><title>Netscape RIP 1994-2008</title><link>https://jasoneckert.github.io/myblog/netscape-rip-1994-2008/</link><description>&lt;p&gt;&lt;img alt="Netscape Navigator" src="netscape.jpg#right" title="Netscape Navigator" /&gt;&lt;/p&gt;
&lt;p&gt;When I read my Google news today and found out that AOL is no longer going to develop and support Netscape as of February 2008, the first thing that came to mind was:  What the heck?  I thought Netscape was already dead!&lt;/p&gt;
&lt;p&gt;I always equated Netscape with older systems such as Windows 9x and SCO Unixware 7.1.2 (the only web browser that ran on its crappy GUI).  I haven’t heard  anyone who has used the browser in years.  Everyone I know uses IE, Firefox or Safari.  After AOL bought Netscape, I thought they distributed Netscape for a while and then gave up&amp;hellip;&amp;hellip;.I didn’t think it was still out there.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Wed, 02 Jan 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/netscape-rip-1994-2008/</guid></item><item><title>History of game consoles</title><link>https://jasoneckert.github.io/myblog/history-of-game-consoles/</link><description>&lt;p&gt;&lt;img alt="temps" src="temps.png#right" title="temps" /&gt;&lt;/p&gt;
&lt;p&gt;It is now more than 30 years since the first real game console (the Atari 2600) was released in Canada. Below is a timeline of each major console, the CPU/GPU they used and any other neat stuff.  Basically, you will notice two important trends:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The console manufacturers love to copy each other - up to the mid-1980s, they mostly had MOS 6502-based CPUs - in the late 1980s and early 1990s, they had Motorola 68000-based CPUs - in the mid-1990s to early 2000s they mostly had MIPS-based RISC CPUs - and today they all have PowerPC-based RISC CPUs and complex GPUs.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Tue, 01 Jan 2008 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/history-of-game-consoles/</guid></item><item><title>dSLR Quote</title><link>https://caiustheory.com/dslr-quote/</link><description>&lt;p&gt;I was just talking to &lt;a href="http://keihatsu.org/"&gt;Nadim&lt;/a&gt; about him getting a new camera and then this happened:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nadim: &lt;a href="http://cyraq.deviantart.com/art/Above-the-Clouds-72170767"&gt;http://cyraq.deviantart.com/art/Above-the-Clouds-72170767&lt;/a&gt;&lt;br /&gt;
Nadim: Did you see that?&lt;br /&gt;
Nadim: Taken couple of weeks ago&lt;br /&gt;
Caius: woa&lt;br /&gt;
Caius: and you need a new camera because? :P&lt;br /&gt;
Nadim: I have wet dreams about DSLR&amp;rsquo;s&lt;/p&gt;
&lt;/blockquote&gt;</description><author>Caius Theory</author><pubDate>Mon, 31 Dec 2007 19:25:25 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/dslr-quote/</guid></item><item><title>Quote to see the new year in</title><link>https://caiustheory.com/quote-to-see-the-new-year-in/</link><description>&lt;p&gt;So I&amp;rsquo;m a geek, as my friends are gradually realising more and more. Anyway, I twitter a lot, and occasionally write quotes that need to be saved elsewhere. And what generally makes tweets funnier are other people replying to them.&lt;/p&gt;
&lt;p&gt;A little background information. This had just taken place in #habari (a chat room.)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;h0bbel&amp;gt; ringmaster: i'll show you my winky
* ringmaster runs.
&amp;lt;h0bbel&amp;gt; as jmullan has seen it
&amp;lt;h0bbel&amp;gt; i think
&amp;lt;jmullan&amp;gt; no, I didn't look
&amp;lt;ringmaster&amp;gt; 0_o
&amp;lt;h0bbel&amp;gt; i was kinda drunk at the time
&amp;lt;h0bbel&amp;gt; lol
&amp;lt;jmullan&amp;gt; we were playing &amp;quot;lightsabers&amp;quot; while peeing
&amp;lt;jmullan&amp;gt; not &amp;quot;swords&amp;quot;
&amp;lt;jmullan&amp;gt; I had the yellow saber, h0bbel had the green one
&amp;lt;jmullan&amp;gt; I'm not sure how that worked
&amp;lt;h0bbel&amp;gt; you said you didn't look!
&amp;lt;h0bbel&amp;gt; How did you know it was green?
&amp;lt;jmullan&amp;gt; I just saw the beam, not the handle, if you know what I'm saying
&amp;lt;h0bbel&amp;gt; ehehe
&amp;lt;Caius&amp;gt; xD
&amp;lt;ringmaster&amp;gt; This is all somewhat disturbing.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So in order&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://twitter.com/caius/statuses/549893582"&gt;me&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;man, #habari just wouldn&amp;rsquo;t be the same without the semi-homosexual discussions every now and then&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://twitter.com/caius/statuses/549893582"&gt;me&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Formatting some SQL queries for a fellow dev&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://twitter.com/h0bbel/statuses/549895502"&gt;h0bbel&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://twitter.com/caius/statuses/549893582"&gt;http://twitter.com/caius/st&amp;hellip;&lt;/a&gt; is realy quoteworthy ;-)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://twitter.com/tmertz/statuses/549899752"&gt;Mertz&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;@&lt;a href="http://twitter.com/caius"&gt;caius&lt;/a&gt;, wtf are you doing? put down the computer, take five steps back and go find a new years celebration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://twitter.com/caius/statuses/549903292"&gt;me&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;@&lt;a href="http://twitter.com/tmertz"&gt;tmertz&lt;/a&gt; just hanging in #habari whilst editing some SQL queries @&lt;a href="http://twitter.com/h0bbel"&gt;h0bbel&lt;/a&gt; wrote waiting for 1900GMT to go round my mates and get drunk&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And on the back of that, I&amp;rsquo;d just like to say have a very merry new years eve and just follow your desires onwards in life!&lt;/p&gt;</description><author>Caius Theory</author><pubDate>Mon, 31 Dec 2007 19:11:11 GMT</pubDate><guid isPermaLink="true">https://caiustheory.com/quote-to-see-the-new-year-in/</guid></item><item><title>This was a fun ride.</title><link>https://rob.sh/post/7/</link><description>&lt;div align="center"&gt;&lt;img alt="New Year's Eve Map" src="https://cdn.rob.sh/img/311207map.gif" /&gt;&lt;br /&gt;&lt;div align="right" style="width: 85%;"&gt;&lt;small&gt;&lt;a href="http://maps.google.co.uk/maps?f=d&amp;amp;hl=en&amp;amp;geocode=205776234212040856,51.510150,-0.072890%3B603428264722382812,51.493850,-0.085510%3B10781616225967630858,51.465320,-0.010740%3B17831226875786563443,51.472380,-0.015470%3B1574558542707891041,51.475040,0.009870%3B8053893073551550943,51.492930,-0.047886&amp;amp;time=&amp;amp;date=&amp;amp;ttype=&amp;amp;saddr=e14+7dh&amp;amp;daddr=A1211%2FMansell+St+%4051.510150,+-0.072890+to:Brick+Layers+Arms+%4051.493850,+-0.085510+to:New+Cross,+Lewisham,+London,+United+Kingdom+to:Lewisham+to:New+Eltham+to:Eltham+to:Blackheath,+Greater+London,+United+Kingdom+to:Granville+Park+%4051.465320,+-0.010740+to:A2211%2FLewisham+Rd+%4051.472380,+-0.015470+to:shooters+hill+to:Prince+Charles+Rd+%4051.475040,+0.009870+to:Greenwich+to:A200%2FRotherhithe+Old+Rd+%4051.492930,+-0.047886+to:51.513016,-0.025406&amp;amp;mra=dme&amp;amp;mrcr=12&amp;amp;mrsp=14&amp;amp;sz=13&amp;amp;via=13&amp;amp;dirflg=h&amp;amp;sll=51.474006,-0.033989&amp;amp;sspn=0.08789,0.16531&amp;amp;ie=UTF8&amp;amp;om=1&amp;amp;ll=51.474113,-0.034332&amp;amp;spn=0.205291,0.439453&amp;amp;z=11&amp;amp;source=embed" style="color: #0000FF; text-align: left;"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;</description><author>rob.sh</author><pubDate>Mon, 31 Dec 2007 17:33:56 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/7/</guid></item><item><title>Yuletide in Lord of the Rings Online</title><link>https://benovermyer.com/blog/2007/12/yuletide-in-lord-of-the-rings-online/</link><description>&lt;p&gt;I haven't had a chance to play LotRO much lately because of the holidays, but yesterday I managed to get on for awhile. I trekked from west of Bree to the Shire, partly finishing a quest for Celandine Brandybuck in the process. The Shire is an amazing location and I love exploring it. The sights are fascinating…especially the Hill and the surrounding environs there. The plots of a certain ill-meaning hobbit up that way came to my attention, and of course I did something about it.&lt;/p&gt;
&lt;p&gt;The end result was I finished a level 1 quest chain with a very entertaining storyline and got a Yule Tree yard decoration for my efforts.&lt;/p&gt;
&lt;p&gt;If anyone hasn't done this quest yet, I highly recommend it. Lots of fun!&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Mon, 31 Dec 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/12/yuletide-in-lord-of-the-rings-online/</guid></item><item><title>The end of 2007</title><link>https://jasoneckert.github.io/myblog/the-end-of-2007/</link><description>&lt;p&gt;&lt;img alt="woot" src="woot.png#right" title="woot" /&gt;&lt;/p&gt;
&lt;p&gt;It has truly been an exciting year, and I wish to take a few moments to reflect on some of the most important events of 2007 in geekdom:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Halo 3 being released (I love that game)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Microsoft pissing off millions with Vista&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The death of SCO (may they rot in hell)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apple releasing the iPhone and iPod touch (the next generation interface for everything)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The introduction of the Nokia N810 Internet Tablet running Linux (drool&amp;hellip;.)&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Mon, 31 Dec 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/the-end-of-2007/</guid></item><item><title>Perl version of Snapper</title><link>https://tanelpoder.com/2007/12/28/perl-version-of-snapper/</link><description>&lt;p&gt;&lt;a href="http://www.centrexcc.com/" target="_blank"&gt;Wolfgang Breitling&lt;/a&gt; has written a &lt;a href="http://www.centrexcc.com/scripts.html" target="_blank"&gt;snapper.pl&lt;/a&gt; script – Perl version of my original &lt;a href="https://tanelpoder.com/2013/02/18/snapper-v4-02-and-the-snapper-launch-party-video/" target="_blank"&gt;snapper.sql&lt;/a&gt; one. Check it out!&lt;/p&gt;
&lt;p&gt;As his script doesn’t rely on DBMS_OUTPUT for generating output, you can easily get real time continuous output with his script, without needing to wait until the script finishes or by using somewhat complicated DBMS_SYSTEM.KSDWRT tracefile output.&lt;/p&gt;
&lt;p&gt;Also, as his script doesn’t rely on DBMS_LOCK package for sleeping, so you don’t need rights on it.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 28 Dec 2007 17:44:20 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/12/28/perl-version-of-snapper/</guid></item><item><title>Flowers for Algernon—Review</title><link>https://www.davidschlachter.com/writings/flowersforalgernon</link><description>My review of Immaculata High School’s production, for the  Cappies.</description><author>David Schlachter</author><pubDate>Thu, 27 Dec 2007 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/flowersforalgernon</guid></item><item><title>Sqlplus is my second home, part 5: Reading the name of currently executing script</title><link>https://tanelpoder.com/2007/12/26/sqlplus-is-my-second-home-part-5-reading-the-name-of-currently-executing-script/</link><description>&lt;p&gt;If you need to run and manage loads of sqlplus scripts which call other scripts, which call other scripts etc, then you are probably interested in the sqlplus APPINFO parameter shown below.&lt;/p&gt;
&lt;p&gt;When you issue &lt;strong&gt;SET APPINFO ON&lt;/strong&gt; in sqlplus, this makes sqlplus to automatically call DBMS_APPLICATION_INFO.SET_MODULE and set the MODULE value to sql script name which is currently being executed.&lt;/p&gt;
&lt;p&gt;This allows you to easily pass the current script name info to Oracle, without the need to have a manual call to SET_MODULE in beginning and end of every script (along with some mechanism for storing the previous module).&lt;/p&gt;
&lt;p&gt;A simple example is below. I used two scripts blah.sql and blah2.sql for my test:&lt;/p&gt;
&lt;pre&gt;C:\tmp&gt;type &lt;b&gt;c:\tmp\blah.sql&lt;/b&gt;

select sys_context('USERENV', 'MODULE') from dual;

@@blah2

select sys_context('USERENV', 'MODULE') from dual;

&lt;/code&gt; &lt;code&gt;C:\tmp&gt;type &lt;b&gt;c:\tmp\blah2.sql&lt;/b&gt;

select sys_context('USERENV', 'MODULE') from dual;

&lt;/pre&gt;
&lt;p&gt;So, blah.sql reports the current module, then calls blah2.sql which reports current module and then returns back to blah.sql which returns the current module again.&lt;/p&gt;
&lt;pre&gt;SQL&gt; set appinfo on
SQL&gt;
SQL&gt; @blah
&lt;h2 id="sys_contextuserenvmodule"&gt;SYS_CONTEXT(&amp;lsquo;USERENV&amp;rsquo;,&amp;lsquo;MODULE&amp;rsquo;)&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;01@ blah.sql&lt;/b&gt;&lt;/p&gt;
&lt;h2 id="sys_contextuserenvmodule-1"&gt;SYS_CONTEXT(&amp;lsquo;USERENV&amp;rsquo;,&amp;lsquo;MODULE&amp;rsquo;)&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;02@ blah2.sql&lt;/b&gt;&lt;/p&gt;
&lt;h2 id="sys_contextuserenvmodule-2"&gt;SYS_CONTEXT(&amp;lsquo;USERENV&amp;rsquo;,&amp;lsquo;MODULE&amp;rsquo;)&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;01@ blah.sql&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;SQL&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Looks cool!&lt;/p&gt;
&lt;p&gt;From output above we can see the following things:&lt;/p&gt;
&lt;p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 25 Dec 2007 18:00:35 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/12/26/sqlplus-is-my-second-home-part-5-reading-the-name-of-currently-executing-script/</guid></item><item><title>Minstrels in green linen</title><link>https://benovermyer.com/blog/2007/12/minstrels-in-green-linen/</link><description>&lt;p&gt;My guild, the irreproachable Crescent Order, has seen fit to grace me with a full outfit of custom-crafted light armor and a new cloak. All of it is a verdant hue, with intricate patterns weaved into the cloak. My armor score shot up something like 50 points, heh.&lt;/p&gt;
&lt;p&gt;I didn't get around to composing music as I thought I would. I got distracted by SOE reenabling my Star Wars Galaxies account for a trial week. My greatest accomplishment in either game, though, was reaching 13 with Ceolrigan. I didn't spend a lot of time in-game.&lt;/p&gt;
&lt;p&gt;That said, a quest that was giving me a lot of trouble - defending a hobbit by name of Constable Bolger from waves of attacking bandits - was finally completed last night. Just as I was about to be defeated again by the bandits, a level 28 guardian came by and killed all of them for me. It was a happy moment, heh. He disappeared before I could thank him properly.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Thu, 20 Dec 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/12/minstrels-in-green-linen/</guid></item><item><title>Web standards, browsers, and the future of the web</title><link>https://benovermyer.com/blog/2007/12/web-standards-browsers-and-the-future-of-the-web/</link><description>&lt;p&gt;Recently, the CSS working group and the W3C in general have &lt;a href="https://infrequently.org/2007/12/the-w3c-cannot-save-us/" rel="external"&gt;come under fire&lt;/a&gt; as Opera launches an assault on Microsoft. A counterculture of pro-proprietary technology advocates has risen up against the web standards movement. The web standards crowd has responded with fire and passion, sending up a rallying cry against what they see as &lt;a href="http://shallowthoughts.org/2007/12/17/return-to-the-web-of-the-1990s/trackback/" rel="external"&gt;a return to the browser wars of the ‘90s&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;All of this begs the question - what are we really trying to do with web standards and the Web in general? &lt;a href="http://www.b-list.org/weblog/2007/dec/17/standards/" rel="external"&gt;James Bennett asks the same question&lt;/a&gt;, though more eloquently and with greater background than I present here. The point of the World Wide Web is to provide people with information. It used to be nothing more spectacular than that. The type of information varied - marketing, scientific studies, news, etc. - but it was all information.&lt;/p&gt;
&lt;p&gt;With the advent of RIA technologies and new usage of the Web, though, that's starting to change. People are starting to do more than just research and purchase on the Web. The lines between desktop applications and web pages are blurring. With AIR, Flex, JavaFX, Silverlight, and other possible vehicles for innovative usage of the Web proliferating like mad, we are left with the question - what can't we do with the Web? That question is what drives research and innovation in the Web. It doesn't play as much of a factor, though, in industrial and commercial common usage. For example, when was the last time you overheard any non-developer talking about Web 2.0 or rich internet applications? How many people actually know about and use Google Docs? I'd be willing to wager that not many outside our world do.&lt;/p&gt;
&lt;p&gt;That will change in the future, of course, as clever and useful new technologies frequently are wont to be adopted. However, it seems that we - that is, web developers and other Internet professionals - often confuse research with production. The development of other new technologies, such as &lt;a href="http://pubs.acs.org/cgi-bin/abstract.cgi/nalefd/2007/7/i11/abs/nl070708c.html" rel="external"&gt;integrated graphene circuits&lt;/a&gt;, is kept largely out of the public eye. While not expressly hidden, there is no attempt made to put such bleeding-edge breakthroughs into immediate public usage. Web standards and the development of proprietary Web technology is slightly different, but not much. Web standards are supposedly akin to such things as the &lt;a href="http://www.rgsonline.co.uk/" rel="external"&gt;Railway Group Standards&lt;/a&gt; in that they make the Web easier and “safer” to use and develop for. By taking away the difficulties inherent in producing for multiple different platforms, web standards allow developers to spend their time innovating in more specific ways.&lt;/p&gt;
&lt;p&gt;The problem is that web standards are not keeping up with technological development, and so developers on the cutting edge are not able to utilize new technologies without resorting to proprietary platforms. Many developers give up on web standards so that they can implement the latest and greatest products of the commercial or open source worlds. I personally would love to see XHTML taken beyond its HTML4.01 roots; the &lt;a href="http://www.whatwg.org/" rel="external"&gt;WHATWG&lt;/a&gt; tends to agree with me on this. However, with the current leadership of web standards, that simply isn't possible. We need new standards. The W3C is not keeping up with the pace of development, and therefore should either be revamped or replaced.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Wed, 19 Dec 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/12/web-standards-browsers-and-the-future-of-the-web/</guid></item><item><title>The Lord of the Rings Online: Introducing Ceolrigan</title><link>https://benovermyer.com/blog/2007/12/the-lord-of-the-rings-online-introducing-ceolrigan/</link><description>&lt;p&gt;The first MMORPG I ever played was Everquest I. I bought the game at the insistence of some friends when I was living in New Zealand and loaded it onto my PC. I created my character and started killing bees. And more bees. And more bees.&lt;/p&gt;
&lt;p&gt;It bored the hell out of me. I uninstalled it after a day of playing and gave the game, and my account, to another friend. That “friend” still owes me money (unrelated event), but that's a story for another time.&lt;/p&gt;
&lt;p&gt;Around the same time I read Lord of the Rings cover to cover - 1100 pages - in two weeks. It fundamentally changed how I viewed fantasy. Back to that in a bit.&lt;/p&gt;
&lt;p&gt;In July of 2003, I played my second MMORPG ever: Star Wars Galaxies. I had belonged to a pre-release guild for over a year at that point and was absolutely enthralled by the game for over two years. SWG was different from any other game I'd seen before, and while the grind was still present, it was present in a form that was enjoyable.&lt;/p&gt;
&lt;p&gt;Of course, we all know what happened in 2005 to SWG. It doesn't bear repeating here. I kept playing off and on after that, but eventually (2007) I permanently canceled my account.&lt;/p&gt;
&lt;p&gt;Over the years since 2004, I've been playing various other MMORPGs in an attempt to recapture some of the enjoyment I experienced when first trying SWG. The list is long, and none held my interest for longer than a few months at most. World of Warcraft holds the record for second-longest played MMORPG for me, but I never got beyond level 37 due to the return of the Bees Syndrome.&lt;/p&gt;
&lt;p&gt;Enter Lord of the Rings Online.&lt;/p&gt;
&lt;p&gt;I tried this game out on three separate occasions with three different trial accounts. The first two times, I was very impressed with the graphics and the epic feel of the introductory quest lines, but couldn't get into it for reasons that now escape me. It probably had something to do with time commitments and absence of a guild.&lt;/p&gt;
&lt;p&gt;The third time was different.&lt;/p&gt;
&lt;p&gt;This summer I read most of the Silmarillion. I loved the flowery writing style, the epic tales, and relived the two weeks of Lord of the Rings that I'd experienced years before. This was after the second trial, but before the third, which started a mere week ago.&lt;/p&gt;
&lt;p&gt;My “Third Age” of LOTRO trials finally bore the fruit promised so long ago by the creation of this online Middle Earth. And now, retail copy and subscription firmly in my hands, allow me to introduce the persona that may one day equal Scin Karetyr in my memory:&lt;/p&gt;
&lt;p&gt;Ceolrigan of Rohan, Minstrel and Spider-Foe.&lt;/p&gt;
&lt;p&gt;At time of this writing, Ceolrigan is a level 11 Minstrel dressed in stylish purple and blue garb. Regrettably, his weapon of choice at the moment is a not-particularly-attractive club; as soon as I acquire the necessary bronze, he'll be properly wielding a longsword once again.&lt;/p&gt;
&lt;p&gt;What is so enjoyable about playing Ceolrigan is the musical quality of combat. The various melodies that erupt from his lute during battle lend it a somewhat more fantastical quality than seems usual in MMOs.&lt;/p&gt;
&lt;p&gt;More than that, he is a Historian. I'm a history graduate, so this naturally strikes me as ironic. I have yet to sample crafting in LOTRO, but if it's as enjoyable as combat, then I'll likely spend equal amounts of time doing both. My time as a Doctor, a Shipwright, and an Architect in SWG matched my time spent slaying Rebels and Ewoks. There's nothing quite like a break from battle to make it seem all the more enticing.&lt;/p&gt;
&lt;p&gt;I rejoined one of my old SWG guilds, the Crescent Order, as a member of their Kinship in LOTRO. They're good people, and being in a good guild always makes for a more memorable MMO experience.&lt;/p&gt;
&lt;p&gt;Last night, shortly before logging out of LOTRO for the night I discovered a player neighborhood. Player housing in LOTRO is much different from any other MMO's housing scheme. It seems to combine features of EQ2's instanced housing and SWG's global housing. While the neighborhood is instanced, it contains an entire area with street names and numbers and, apparently, decoratable exteriors and yards. While the price of a house seems very high at my current level, it's going to be one of my main goals to acquire and furnish such a place. I can see many entertaining player events taking place in neighborhoods and look forward to it with great enthusiasm.&lt;/p&gt;
&lt;p&gt;Other than acquiring a house, my main goal in LOTRO is to experience the story. In retrospect, every time I cancel an MMO account, it has been because I had no clear goals. SWG lasted longest, but unfortunately the game simply didn't provide enough incentives anymore to create goals. LOTRO gives me incentives, and it gives me gentle proddings in the general direction of leveling that are unusually well-hidden for an MMO. I actually enjoy leveling for once.&lt;/p&gt;
&lt;p&gt;Over the next few days, weeks, months, and perhaps years I will be updating this blog with the adventures, misadventures, and musings of Ceolrigan of Rohan, as told by his player.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Tue, 18 Dec 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/12/the-lord-of-the-rings-online-introducing-ceolrigan/</guid></item><item><title>T-Mobile must be boycotted</title><link>https://benovermyer.com/blog/2007/12/t-mobile-must-be-boycotted/</link><description>&lt;p&gt;Normally, I don't post more than once a week. However, after reading about &lt;a href="http://blog.wired.com/gadgets/2007/12/t-mobile-attack.html" rel="external"&gt;T-Mobile's assault on Net Neutrality&lt;/a&gt; on Wired, I had to blog about it. T-Mobile wants to tell you what websites you can visit. We should tell T-Mobile what it can do with its Terms of Service….and take our money elsewhere.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Mon, 17 Dec 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/12/t-mobile-must-be-boycotted/</guid></item><item><title>The Somewhat True Tale of Robin Hood—Review</title><link>https://www.davidschlachter.com/writings/sttorh</link><description>My review of South Carleton High School’s production, for the  Cappies.</description><author>David Schlachter</author><pubDate>Wed, 12 Dec 2007 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/sttorh</guid></item><item><title>Domain-name search Firefox feature</title><link>https://www.databasesandlife.com/domain-name-search-firefox-feature/</link><description>&lt;p&gt;&lt;span&gt;Installing &lt;a href="http://mycroft.mozdev.org/download.html?name=easyname.eu&amp;amp;sherlock=yes&amp;amp;opensearch=yes&amp;amp;submitform=Search"&gt;this&lt;/a&gt; into Firefox (takes &amp;lt; 1 minute and doesn&amp;rsquo;t require a download) allows you to check for the availability of domain names straight from the browser.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It was created by my colleague, who works with me at easyname.eu, but it was his idea, and I genuinely think it&amp;rsquo;s a cool feature!&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 12 Dec 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/domain-name-search-firefox-feature/</guid></item><item><title>Unbelievable PHP limitation of the day</title><link>https://www.databasesandlife.com/unbelievable-php-limitation-of-the-day/</link><description>&lt;p&gt;If one defines a class with the member variable:&lt;/p&gt;
&lt;pre&gt;protected static $bytes = 12582912;
&lt;/pre&gt;
&lt;p&gt;then that&amp;rsquo;s fine. However if one defines it as:&lt;/p&gt;
&lt;pre&gt;protected static $bytes  = 12*1024*1024; // 12 MB
&lt;/pre&gt;
&lt;p&gt;then that gives a compile error:&lt;/p&gt;
&lt;pre&gt;Parse error: syntax error, unexpected '*', expecting ',' or ';'
&lt;/pre&gt;
&lt;p&gt;I know of no other language that I&amp;rsquo;ve ever programmed (i.e. including BASIC, and C) where you can write a value, but you can&amp;rsquo;t write an expression.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 10 Dec 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/unbelievable-php-limitation-of-the-day/</guid></item><item><title>Why Jorn Barger is wrong and the rest of the world is right</title><link>https://benovermyer.com/blog/2007/12/why-jorn-barger-is-wrong-and-the-rest-of-the-world-is-right/</link><description>&lt;p&gt;So, as I was browsing the web for a topic for this week's blog post, I came across an article in Wired that really caught my eye. In it, the inventor of blogging, Jorn Barger, talks about &lt;a href="http://www.wired.com/culture/lifestyle/news/2007/12/blog_advice" rel="external"&gt;what blogging should have been&lt;/a&gt; instead of what it has become. He seems to be of the impression that blogs should be, essentially, reports of interesting links the blogger has seen recently. Sorry Jorn, but that's what del.icio.us and digg are for now. Blogs these days frequently come in two flavors - personal diaries and explorations of a particular topic. While links play a major role in most of the latter, they are often completely absent in the former. Blogging has gone beyond its humble origins and developed into something akin to a cross between 18th century coffee houses and digital soap boxes. Blogging is a powerful social medium. It can be a tremendous platform for conversation on just about any topic. My personal favorites, like productivity, fun, and fitness, have endless possibilities for debate, ideas, and plain craziness. It wouldn't be nearly as much fun, though, without the highly social nature of it all. A conversation isn't a conversation if it's a bunch of links.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Fri, 07 Dec 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/12/why-jorn-barger-is-wrong-and-the-rest-of-the-world-is-right/</guid></item><item><title>Fitness full time</title><link>https://benovermyer.com/blog/2007/12/fitness-full-time/</link><description>&lt;img alt="A photo of people flipping into water" class="photo" src="https://benovermyer.com/blog/2007/12/fitness-full-time/crazyflip.jpg" /&gt;
&lt;p&gt;Every day we are inundated with advertisements for Lose Weight Fast diets, exercise regimens, and miracle drugs. Almost all of these products require you to give up a portion of your day to Getting In Shape... or giving up things that you love, like tiramisu. People two hundred years ago didn't worry about such nonsense. People in other developed nations, like England, France, and New Zealand, don't worry about it either. So why are we obsessed with Diets, Exercise, and Drugs? It's all because America has shifted from a society of physical activity to one of mental activity. Now, this is not a bad thing in theory... but in practice, it's the root cause of our national obesity epidemic. So, here's how to get in shape, stay in shape, and actually enjoy it for once. This is targeted primarily towards cubicle zombies, but the philosophy applies to just about everyone. It's pretty easy. The steps are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ramp up the activity&lt;/li&gt;
&lt;li&gt;Choose to avoid one luxury food a week&lt;/li&gt;
&lt;li&gt;Make food your fuel, not your crutch&lt;/li&gt;
&lt;li&gt;Play hard&lt;/li&gt;
&lt;li&gt;Work with your body AND your mind&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="ramp-up-the-activity"&gt;Ramp up the activity.&lt;/h1&gt;
&lt;p&gt;If you're going to get in shape, you can't just sit in a chair all day, then go home and sit in front of the TV or computer screen. Whenever you can, be physically active. Make sure that if you're spending a day at the office, you move. For example, the recommendation From Above is to get up and move around once every hour. That's not enough, and it can be jarring if you're in the middle of a great idea. Instead, try to be active constantly. Push your chair back and forth. Stretch frequently. Stand up and walk around your office or, if you're conveniently located in a tiny cube, get creative with the objects at your disposal. Tape dispensers make interesting free weights, as do textbooks. The key here is to ramp up the activity. If you do nothing else in this list, do this.&lt;/p&gt;
&lt;h1 id="choose-to-avoid-one-luxury-food-a-week"&gt;Choose to avoid one luxury food a week.&lt;/h1&gt;
&lt;p&gt;Anyone who's tried most of the diets out there knows how hard it is to suddenly go without all your favorite foods. So, instead of cutting out everything right away, go gradual. Make a conscious choice to turn down or avoid one luxury food per week. Luxury foods are usually sweets like candy, muffins, and pastries. Foods with high carb counts are good candidates for the chopping block. If you can't just cut something out entirely, try substituting something healthier. Honey makes a good alternative sweetener. My first Chop was to stop buying cappuccinos every morning. Not only did that give me 300 fewer calories a day, it also saved me about $60 a month. The key here is to go gradual. Losing weight fast isn't important. Losing weight permanently is. That said, some people like Tim Ferriss have done &lt;a href="http://www.fourhourworkweek.com/blog/2007/04/06/how-to-lose-20-lbs-of-fat-in-30-days-without-doing-any-exercise/" rel="external"&gt;some amazing things with minimal-effort, fast weight loss&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id="make-food-your-fuel-not-your-crutch"&gt;Make food your fuel, not your crutch.&lt;/h1&gt;
&lt;p&gt;A lot of us enjoy food. It's not just necessary to our survival, it's a social activity. For some, it's a coping mechanism. For others, a passion. Whatever your reason for enjoying food, if you're overweight, you enjoy it just a tad too much. Don't worry, though, because you can still enjoy food and lose weight. All you have to do is make food your fuel, not your crutch. Always eat after being physically active, not before. Eating before you move is like trying to fill a gas tank when it's already full. Some of you might say, “but I'm hungry and tired! I need to eat before I can get active!” First, if you're tired when you get up in the morning, then you definitely need to be more active physically and less active mentally. There has to be a balance there, as with all things. Starting your day with a jog can be inconvenient for some, so try different ways of getting active right away. If you have trouble waking up in the morning, get creative - replace caffeine with dancing. Yes, dancing. You'd be surprised how well dancing wakes you up. Just make sure you warm up those muscles before doing anything too strenuous or you risk injuring yourself, and that doesn't do anyone any good. If you're tired in the afternoon, take a nap. Unless you're starving - and by this I mean your stomach feels like it's stabbing itself to death with a spoon - try and avoid snacking. If you're really hungry, eat fruit. Fruit has natural sugar that will restore some of that lost energy. But always, always, always remember - food is fuel. Fuel must be used, not stored.&lt;/p&gt;
&lt;h1 id="play-hard"&gt;Play hard.&lt;/h1&gt;
&lt;p&gt;Instead of sitting down in front of the computer all night after a tough day of being on the computer at work, take up a sport. You heard me. Go to your city's Parks &amp;amp; Rec department and sign up for one of their clubs. If you're a little too heavy at the moment to do this without hurting yourself, then take up dancing. Dancing is easier to do at home and will burn just as many calories as sports. “But my guild in WoW will be angry! I can't just abandon them!” If your guild demands your constant presence every night, all night, then you should think long and hard about whether they have your best interests at heart. Do they care about you, or that AoE heal you just happen to have? There's nothing wrong with playing video games, just as long as they don't make up the totality of your nightly entertainment. On weekends, take up a project that involves working with your body. Something that involves lifting heavy weight - like, say, helping Habitat for Humanity build houses - can really work wonders. Doing something that ends with a finished product and a continual reminder of progress can do great things for your self-esteem and sense of accomplishment. If you're a code monkey who spends the weekends working on personal coding projects, try the same activities in Ramp up the activity for at home. Since you're in your own space, you can go really nuts.&lt;/p&gt;
&lt;h1 id="work-with-your-body-and-your-mind"&gt;Work with your body AND your mind.&lt;/h1&gt;
&lt;p&gt;If you're too heavy on the mental side of the physical-mental seesaw, you need to work harder on the physical side to balance out the equation. If it's winter and you live in the suburbs or in a small town, try shoveling your neighbors' sidewalks for them. It can be hard work, but it'll be rewarding in both your neighbors' reactions and in the physical results you get. Use that brain of yours to come up with new ways to get your body and your mind working in tandem. Martial arts is a great way to do this. Even yoga at home counts, though the social aspect of training with others can be a wonderful bonus. If you're concentrating hard on developing your body into something you can be proud of, you'll find that your mind will get healthier too. Your concentration, reaction time, creativity, and overall happiness will spike. That ADD you think you have? That's not ADD. It's just a side effect of not being in shape.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Eat well, play hard, and work hard. Do this all the time, and you'll find yourself improving on a daily basis... without really having to think about it too much, or spending hundreds on a silly fad diet. Go do it.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Mon, 03 Dec 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/12/fitness-full-time/</guid></item><item><title>Asterisk on OS X</title><link>https://rob.sh/post/6/</link><description>&lt;p&gt;Last time I tried to run Asterisk on OS X it was on Panther (10.3), and it really failed to work. It seems since I last looked, things have come a long way. When rearranging how my personal VoIP was configured, I was looking for a simple SIP proxy - however, the only one I could find immediately was Java based, and lacking on a few features that I wanted. Hence, I decided to check out if there were any better Asterisk packages available. I found the packages over at &lt;a href="http://www.mezzo.net/asterisk/"&gt;mezzo.net&lt;/a&gt;, and wow. Not only does their Asterisk build work properly (Voicemail, IAX2, and SIP-wise at least), it comes with some really nice modules. For example, the res_bonjour module announces your Asterisk server out over your local LAN as a Bonjour service - definitely useful if you&amp;rsquo;re trying to work out whether there&amp;rsquo;s a facility for VoIP outgoing calls for something like calling out straight from Address Book. However, the best thing here is app_notify.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Sun, 02 Dec 2007 15:19:14 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/6/</guid></item><item><title>Comic Potential—Review</title><link>https://www.davidschlachter.com/writings/comicpotential</link><description>My review of All Saints High School’s production, for the  Cappies.</description><author>David Schlachter</author><pubDate>Sat, 01 Dec 2007 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/comicpotential</guid></item><item><title>Dominos 2: Winter Edition</title><link>https://sam.hooke.me/game/dominos-2-winter-edition/</link><description>&lt;p&gt;&lt;em&gt;Dominos 2: Winter Edition&lt;/em&gt; is a physics based platformer where you play as a little green alien who can roll around and stick to things. In story mode, after your space ship crash lands on earth, navigate the snowy landscape to try and find your way back home, by surfing on dominos, carefully crawling along ceilings, sledding over spikes, and solving fun puzzles.&lt;/p&gt;
&lt;p&gt;Beyond story mode, there is a powerful level editor which gives you the full capability to build your own level with a variety of objects, scenery and terrain types. Included is a level pack with some bonus levels contributed by friends and fans of the game.&lt;/p&gt;</description><author>Sam Hooke</author><pubDate>Sat, 01 Dec 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://sam.hooke.me/game/dominos-2-winter-edition/</guid></item><item><title>Finding the Longest Palindromic Substring in Linear Time</title><link>https://www.akalin.com/longest-palindrome-linear-time</link><description>&lt;p&gt;Another &lt;a href="http://www.reddit.com/r/programming/comments/2dykz/finding_palindromes_repairing_endos_dna_and_the/"&gt;interesting problem&lt;/a&gt; I stumbled across on reddit is
finding the longest substring of a given string that is a palindrome.
I
found &lt;a href="http://johanjeuring.blogspot.com/2007/08/finding-palindromes.html"&gt;the explanation on Johan Jeuring's blog&lt;/a&gt; somewhat
confusing and I had to spend some time poring over the Haskell code
(eventually rewriting it in Python) and walking through examples
before it "clicked."  I haven't found any other explanations of the
same approach so hopefully my explanation below will help the next
person who is curious about this problem.&lt;/p&gt;

&lt;p&gt;Of course, the most naive solution would be to exhaustively examine
all \(n \choose 2\) substrings of the given \(n\)-length string, test each
one if it's a palindrome, and keep track of the longest one seen so
far.  This has complexity \(O(n^3)\), but we can easily do better by
realizing that a palindrome is centered on either a letter (for
odd-length palindromes) or a space between letters (for even-length
palindromes).  Therefore we can examine all \(2n + 1\) possible centers
and find the longest palindrome for that center, keeping track of the
overall longest palindrome.  This has complexity \(O(n^2)\).&lt;/p&gt;

&lt;div class="p"&gt;It is not immediately clear that we can do better but
if we're told that an \(Θ(n)\) algorithm exists we can infer that
the algorithm is most likely structured as an iteration through all
possible centers.  As an off-the-cuff first attempt, we can adapt the
above algorithm by keeping track of the current center and expanding
until we find the longest palindrome around that center, in which case
we then consider the last letter (or space) of that palindrome as the
new center.  The algorithm (which isn't correct) looks like this
informally:

&lt;ol type="1"&gt;
  &lt;li&gt;Set the current center to the first letter.&lt;/li&gt;
  &lt;li&gt;Loop while the current center is valid:
    &lt;ol type="a"&gt;
      &lt;li&gt;Expand to the left and right simultaneously until we find
	the largest palindrome around this center.&lt;/li&gt;
      &lt;li&gt;If the current palindrome is bigger than the stored maximum
	one, store the current one as the maximum one.&lt;/li&gt;
      &lt;li&gt;Set the space following the current palindrome as the
	current center unless the two letters immediately surrounding
	it are different, in which case set the last letter of the
	current palindrome as the current center.&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;Return the stored maximum palindrome.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

&lt;p&gt;This seems to work but it doesn't handle all cases: consider the
string "abababa".  The first non-trivial palindrome we see is "&lt;span class="palind"&gt;a&lt;/span&gt;|bababa", followed by "&lt;span class="palind"&gt;aba&lt;/span&gt;|baba".  Considering the current space as the
center doesn't get us anywhere but considering the preceding letter
(the second 'a') as the center, we can expand to get "&lt;span class="palind"&gt;ababa&lt;/span&gt;|ba".  From this state, considering the
current space again doesn't get us anywhere but considering the preceding
letter as the center, we can expand to get "ab&lt;span class="palind"&gt;ababa&lt;/span&gt;|".  However, this is incorrect as the
longest palindrome is actually the entire string!  We can remedy this
case by changing the algorithm to try and set the new center to be one
before the end of the last palindrome, but it is clear that having a
fixed "lookbehind" doesn't solve the general case and anything more
than that will probably bump us back up to quadratic time.&lt;/p&gt;

&lt;div class="p"&gt;The key question is this: given the state from the example above,
"&lt;span class="palind"&gt;ababa&lt;/span&gt;|ba", what makes the second 'b' so
special that it should be the new center?  To use another example, in
"&lt;span class="palind"&gt;abcbabcba&lt;/span&gt;|bcba", what makes the second
'c' so special that it should be the new center?  Hopefully, the
answer to this question will lead to the answer to the more important
question: once we stop expanding the palindrome around the current
center, how do we pick the next center?  To answer the first question,
first notice that the current palindromes in the above examples
themselves contain smaller non-trivial palindromes: "ababa" contains
"aba" and "abcbabcba" contains "abcba" which also contains "bcb".
Then, notice that if we expand around the "special" letters, we get a
palindrome which shares a right edge with the current palindrome; that
is, &lt;em&gt;the longest palindrome around the special letters are proper
suffixes of the current palindrome&lt;/em&gt;.  With a little thought, we
can then answer the second question: &lt;em&gt;to pick the next center, take
the center of the longest palindromic proper suffix of the current
palindrome&lt;/em&gt;.  Our algorithm then looks like this:

&lt;ol type="1"&gt;
  &lt;li&gt;Set the current center to the first letter.&lt;/li&gt;
  &lt;li&gt;Loop while the current center is valid:
    &lt;ol type="a"&gt;
      &lt;li&gt;Expand to the left and right simultaneously until we find
	the largest palindrome around this center.&lt;/li&gt;
      &lt;li&gt;If the current palindrome is bigger than the stored maximum
	one, store the current one as the maximum one.&lt;/li&gt;
      &lt;li&gt;Find the maximal palindromic proper suffix of the current
	palindrome.&lt;/li&gt;
      &lt;li&gt;Set the center of the suffix from c as the current center
	and start expanding from the suffix as it is palindromic.&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;Return the stored maximum palindrome.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

&lt;p&gt;However, unless step 2c can be done efficiently, it will cause the
algorithm to be superlinear.  Doing step 2c efficiently seems
impossible since we have to examine the entire current palindrome to
find the longest palindromic suffix unless we somehow keep track of
extra state as we progress through the input string.  Notice that the
longest palindromic suffix would by definition also be a palindrome of
the input string so it might suffice to keep track of every palindrome
that we see as we move through the string and hopefully, by the time
we finish expanding around a given center, we would know where all the
palindromes with centers lying to the left of the current one are.
However, if the longest palindromic suffix has a center to the right
of the current center, we would not know about it.  But we also have
at our disposal the very useful fact that &lt;em&gt;a palindromic proper
suffix of a palindrome has a corresponding dual palindromic proper
prefix&lt;/em&gt;.  For example, in one of our examples above, "abcbabcba",
notice that "abcba" appears twice: once as a prefix and once as a
suffix.  Therefore, while we wouldn't know about all the palindromic
suffixes of our current palindrome, we would know about either it or
its dual.&lt;/p&gt;

&lt;p&gt;Another crucial realization is the fact that we don't have to keep
track of all the palindromes we've seen.  To use the example
"abcbabcba" again, we don't really care about "bcb" that much, since
it's already contained in the palindrome "abcba".  In fact, we only
really care about keeping track of the longest palindromes for a given
center or equivalently, the length of the longest palindrome for a
given center.  But this is simply a more general version of our
original problem, which is to find the longest palindrome around
&lt;em&gt;any&lt;/em&gt; center!  Thus, if we can keep track of this state
efficiently, maybe by taking advantage of the properties of
palindromes, we don't have to keep track of the maximal palindrome and
can instead figure it out at the very end.&lt;/p&gt;

&lt;p&gt;Unfortunately, we seem to be back where we started; the second
naive algorithm that we have is simply to loop through all possible
centers and for each one find the longest palindrome around that
center.  But our discussion has led us to a different incremental
formulation: given a current center, the longest palindrome around
that center, and a list of the lengths of the longest palindromes
around the centers to the left of the current center, can we figure
out the new center to consider and extend the list of longest
palindrome lengths up to that center efficiently?  For example, if we
have the state:&lt;/p&gt;

&lt;p&gt;&amp;lt;"ab&lt;span class="palind"&gt;a&lt;/span&gt;ba|??", [0, 1, 0, 3, 0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?]&amp;gt;&lt;/p&gt;

&lt;p&gt;where the highlighted letter is the current center, the vertical line
is our current position, the question marks represent unread
characters or unknown quantities, and the array represents the list
of longest palindrome lengths by center, can we get to the state:&lt;/p&gt;

&lt;p&gt;&amp;lt;"aba&lt;span class="palind"&gt;b&lt;/span&gt;a|??", [0, 1, 0, 3, 0, 5, 0, ?, ?, ?, ?, ?, ?, ?, ?]&amp;gt;&lt;/p&gt;

&lt;p&gt;and then to:&lt;/p&gt;

&lt;p&gt;&amp;lt;"aba&lt;span class="palind"&gt;b&lt;/span&gt;aba|", [0, 1, 0, 3, 0, 5, 0, 7, 0, 5, 0, 3, 0, 1, 0]&amp;gt;&lt;/p&gt;

&lt;p&gt;efficiently?  The crucial thing to notice is that the longest
palindrome lengths array (we'll call it simply the lengths array) in
the final state is palindromic since the original string is
palindromic.  In fact, the lengths array obeys a more general
property: &lt;em&gt;the longest palindrome &lt;var&gt;d&lt;/var&gt; places to the right
of the current center (the &lt;var&gt;d&lt;/var&gt;-right palindrome) is at least
as long as the longest palindrome d places to the left of the current
center (the &lt;var&gt;d&lt;/var&gt;-left palindrome) if the &lt;var&gt;d&lt;/var&gt;-left
palindrome is completely contained in the longest palindrome around
the current center (the center palindrome), and it is of equal length
if the &lt;var&gt;d&lt;/var&gt;-left palindrome is not a prefix of the center
palindrome or if the center palindrome is a suffix of the entire
string&lt;/em&gt;.  This then implies that we can more or less fill in the
values to the right of the current center from the values to the left
of the current center.  For example, from [0, 1, 0, 3, 0, 5, ?, ?, ?,
?, ?, ?, ?, ?, ?] we can get to [0, 1, 0, 3, 0, 5, 0, &amp;ge;3?, 0,
&amp;ge;1?, 0, ?, ?, ?, ?].  This also implies that the first unknown
entry (in this case, &amp;ge;3?) should be the new center because it
means that the center palindrome is not a suffix of the input string
(i.e., we're not done) and that the &lt;var&gt;d&lt;/var&gt;-left palindrome is a
prefix of the center palindrome.&lt;/p&gt;

&lt;div class="p"&gt;From these observations we can construct our final algorithm which
returns the lengths array, and from which it is easy to find the
longest palindromic substring:

&lt;ol type="1"&gt;
  &lt;li&gt;Initialize the lengths array to the number of possible
  centers.&lt;/li&gt;
  &lt;li&gt;Set the current center to the first center.&lt;/li&gt;
  &lt;li&gt;Loop while the current center is valid:
    &lt;ol type="a"&gt;
      &lt;li&gt;Expand to the left and right simultaneously until we find
	the largest palindrome around this center.&lt;/li&gt;
      &lt;li&gt;Fill in the appropriate entry in the longest palindrome
	lengths array.&lt;/li&gt;
      &lt;li&gt;Iterate through the longest palindrome lengths array
	backwards and fill in the corresponding values to the right of
	the entry for the current center until an unknown value (as
	described above) is encountered.&lt;/li&gt;
      &lt;li&gt;set the new center to the index of this unknown value.&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;Return the lengths array.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

&lt;p&gt;Note that at each step of the algorithm we're either incrementing
our current position in the input string or filling in an entry in the
lengths array.  Since the lengths array has size linear in the size of
the input array, the algorithm has worst-case linear running time.
Since given the lengths array we can find and return the longest
palindromic substring in linear time, a linear-time algorithm to find
the longest palindromic substring is the composition of these two
operations.&lt;/p&gt;

&lt;div class="p"&gt;Here is Python code that implements the above algorithm (although
it is closer to Johan Jeuring's Haskell implementation than to the
above description):

&lt;pre class="code-container"&gt;&lt;code class="language-python"&gt;def fastLongestPalindromes(seq):
    """
    Behaves identically to naiveLongestPalindrome (see below), but
    runs in linear time.
    """
    seqLen = len(seq)
    l = []
    i = 0
    palLen = 0
    # Loop invariant: seq[(i - palLen):i] is a palindrome.
    # Loop invariant: len(l) &amp;gt;= 2 * i - palLen. The code path that
    # increments palLen skips the l-filling inner-loop.
    # Loop invariant: len(l) &amp;lt; 2 * i + 1. Any code path that
    # increments i past seqLen - 1 exits the loop early and so skips
    # the l-filling inner loop.
    while i &amp;lt; seqLen:
        # First, see if we can extend the current palindrome.  Note
        # that the center of the palindrome remains fixed.
        if i &amp;gt; palLen and seq[i - palLen - 1] == seq[i]:
            palLen += 2
            i += 1
            continue

        # The current palindrome is as large as it gets, so we append
        # it.
        l.append(palLen)

        # Now to make further progress, we look for a smaller
        # palindrome sharing the right edge with the current
        # palindrome.  If we find one, we can try to expand it and see
        # where that takes us.  At the same time, we can fill the
        # values for l that we neglected during the loop above. We
        # make use of our knowledge of the length of the previous
        # palindrome (palLen) and the fact that the values of l for
        # positions on the right half of the palindrome are closely
        # related to the values of the corresponding positions on the
        # left half of the palindrome.

        # Traverse backwards starting from the second-to-last index up
        # to the edge of the last palindrome.
        s = len(l) - 2
        e = s - palLen
        for j in xrange(s, e, -1):
            # d is the value l[j] must have in order for the
            # palindrome centered there to share the left edge with
            # the last palindrome.  (Drawing it out is helpful to
            # understanding why the - 1 is there.)
            d = j - e - 1

            # We check to see if the palindrome at l[j] shares a left
            # edge with the last palindrome.  If so, the corresponding
            # palindrome on the right half must share the right edge
            # with the last palindrome, and so we have a new value for
            # palLen.
            #
            # An exercise for the reader: in this place in the code you
            # might think that you can replace the == with &amp;gt;= to improve
            # performance.  This does not change the correctness of the
            # algorithm but it does hurt performance, contrary to
            # expectations.  Why?
            if l[j] == d:
                palLen = d
                # We actually want to go to the beginning of the outer
                # loop, but Python doesn't have loop labels.  Instead,
                # we use an else block corresponding to the inner
                # loop, which gets executed only when the for loop
                # exits normally (i.e., not via break).
                break

            # Otherwise, we just copy the value over to the right
            # side.  We have to bound l[i] because palindromes on the
            # left side could extend past the left edge of the last
            # palindrome, whereas their counterparts won't extend past
            # the right edge.
            l.append(min(d, l[j]))
        else:
            # This code is executed in two cases: when the for loop
            # isn't taken at all (palLen == 0) or the inner loop was
            # unable to find a palindrome sharing the left edge with
            # the last palindrome.  In either case, we're free to
            # consider the palindrome centered at seq[i].
            palLen = 1
            i += 1

    # We know from the loop invariant that len(l) &amp;lt; 2 * seqLen + 1, so
    # we must fill in the remaining values of l.

    # Obviously, the last palindrome we're looking at can't grow any
    # more.
    l.append(palLen)

    # Traverse backwards starting from the second-to-last index up
    # until we get l to size 2 * seqLen + 1. We can deduce from the
    # loop invariants we have enough elements.
    lLen = len(l)
    s = lLen - 2
    e = s - (2 * seqLen + 1 - lLen)
    for i in xrange(s, e, -1):
        # The d here uses the same formula as the d in the inner loop
        # above.  (Computes distance to left edge of the last
        # palindrome.)
        d = i - e - 1
        # We bound l[i] with min for the same reason as in the inner
        # loop above.
        l.append(min(d, l[i]))

    return l&lt;/code&gt;&lt;/pre&gt;

And here is a naive quadratic version for comparison:

&lt;pre class="code-container"&gt;&lt;code class="language-python"&gt;def naiveLongestPalindromes(seq):
    """
    Given a sequence seq, returns a list l such that l[2 * i + 1]
    holds the length of the longest palindrome centered at seq[i]
    (which must be odd), l[2 * i] holds the length of the longest
    palindrome centered between seq[i - 1] and seq[i] (which must be
    even), and l[2 * len(seq)] holds the length of the longest
    palindrome centered past the last element of seq (which must be 0,
    as is l[0]).

    The actual palindrome for l[i] is seq[s:(s + l[i])] where s is i
    // 2 - l[i] // 2. (// is integer division.)

    Example:
    naiveLongestPalindrome('ababa') -&gt; [0, 1, 0, 3, 0, 5, 0, 3, 0, 1]
    
    Runs in quadratic time.
    """
    seqLen = len(seq)
    lLen = 2 * seqLen + 1
    l = []

    for i in xrange(lLen):
        # If i is even (i.e., we're on a space), this will produce e
        # == s.  Otherwise, we're on an element and e == s + 1, as a
        # single letter is trivially a palindrome.
        s = i / 2
        e = s + i % 2

        # Loop invariant: seq[s:e] is a palindrome.
        while s &amp;gt; 0 and e &amp;lt; seqLen and seq[s - 1] == seq[e]:
            s -= 1
            e += 1

        l.append(e - s)

    return l&lt;/code&gt;&lt;/pre&gt;

Note that this is not the only efficient solution to this problem;
building a suffix tree is linear in the length of the input string and
you can use one to solve this problem but as Johan also mentions,
that is a much less direct and efficient solution compared to this
one.&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;Like this post? Subscribe to
  &lt;!-- The image is 256x256, the center of the dot is 189 pixels from the
     top, and the radius of the dot is 24. Therefore, the dot is 43/256 =
     0.16796875 of the image height above the bottom.--&gt;
&lt;a href="feed/atom"&gt;my feed &lt;img alt="RSS icon" src="feed-icon.svg" /&gt;&lt;/a&gt;

  or follow me on
  &lt;a href="https://twitter.com/fakalin"&gt;Twitter &lt;img alt="Twitter icon" src="twitter-icon.svg" /&gt;&lt;/a&gt;.&lt;/p&gt;</description><author>Fred Akalin</author><pubDate>Wed, 28 Nov 2007 10:00:00 GMT</pubDate><guid isPermaLink="true">https://www.akalin.com/longest-palindrome-linear-time</guid></item><item><title>iPhone SDK</title><link>https://rob.sh/post/5/</link><description>&lt;p&gt;I finally got myself an iPhone - and am loving it. It&amp;rsquo;s great how I can now sync my calendars, and address book to my phone without having to worry at all about having six clones of each event on my calendar (which of course, makes it rather difficult to tell what I&amp;rsquo;m actually meant to be doing that day). However, a topic that has come up a couple of times in discussion with a few friends is that of the iPhone SDK. I feel that the big question here is, &amp;ldquo;Do Apple have enough incentive to make a fully featured iPhone SDK?&amp;rdquo;.&lt;br /&gt;
&lt;br /&gt;
With a friend moving to work at a VoIP start-up that deals with having a client on mobiles that allows SIP calls to be made, the big discussion we have been having is whether the iPhone SDK will allow a VoIP client to be implemented on it. My initial feeling on this is, no - not initially. It&amp;rsquo;s been documented in a number of places that Apple are taking call revenue from the networks on each iPhone that is sold. If this is true, then it would be against Apple&amp;rsquo;s interest to actually allow a functional SIP implementation make it onto non-hacked iPhones - since they&amp;rsquo;re going to lose money if users start making their calls via SIP rather than via the cell networks (this assumes that Apple get revenue based on all calls - not just based on the actual contract worth).&lt;br /&gt;
&lt;br /&gt;
However, I can&amp;rsquo;t say that I&amp;rsquo;m sure of this - Apple may only be taking their cut from the revenue that is generated from the subscription fee on each iPhone - rather than the additional calls, and in this case, they might feel that allowing users to utilise VoIP when they&amp;rsquo;re in a hotspot area would be another cool feature that the iPhone can offer. They might also feel that a lot of the iPhone users aren&amp;rsquo;t savvy enough to be using SIP very often - I guess something like Skype from hotspots (or iChat for voice, or Google Talk&amp;hellip;) might be more popular with the less tech-savvy userbase. It&amp;rsquo;s hard to call really.&lt;br /&gt;
&lt;br /&gt;
Alternatively, Apple might just wait until the networks stop paying them revenue, and roll the SDK with better network support then, increasing sales on a device that they&amp;rsquo;re no longer making such revenue on.&lt;br /&gt;
&lt;br /&gt;
Either way, the iPhone really just slots in where a phone should, it works with wireless and a mobile-data mechanism without having to think about it at all (although I&amp;rsquo;d like an 802.1X implementation). Calendar data syncs, Mail accounts sync, my Music syncs, my contacts sync - it integrates with my (primarily Apple based) digital life very well.&lt;br /&gt;
&lt;br /&gt;
I&amp;rsquo;m impressed with my iPhone - roll on the SDK so that I can start making it do even funkier things!&lt;/p&gt;</description><author>rob.sh</author><pubDate>Mon, 26 Nov 2007 21:37:15 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/5/</guid></item><item><title>Liberty vs economy: How far can we go?</title><link>https://benovermyer.com/blog/2007/11/liberty-vs-economy-how-far-can-we-go/</link><description>&lt;img alt="A photo of a bunch of pennies" class="photo" src="https://benovermyer.com/blog/2007/11/liberty-vs-economy-how-far-can-we-go/coins.jpg" /&gt;
&lt;p&gt;Freedom. Economics. The two are interconnected on a basic level. Neither can exist while the other languishes.&lt;/p&gt;
&lt;p&gt;This is the basic philosophy of libertarianism or “classical liberalism,” as some put it. Supporters of the Libertarian Party and its relations vary in their interpretation of this philosophy. Some - in fact, from what I have seen, a good many - wish for total absence of government in the field of the economy. That seems to me to be fallacy.&lt;/p&gt;
&lt;p&gt;While the government should not have a strong hand in the economic affairs of its citizens, it should not have no hand at all. Inevitably the government will make mistakes, but that is the nature of human things - we make mistakes, and nothing can change that. The government's hand in the economy is necessary to protect against other human mistakes. While the wisdom of the majority is questionable at times, the process necessary to alter a machine on the scale of the federal government is slow. This allows for “testing periods” that might otherwise be rendered too short by an overzealous legislative process, as is the case in a direct democracy. The rule of the economy by large financial entities - such as corporations - can thus be tempered in its fickle nature by the relatively stable hand of the government.&lt;/p&gt;
&lt;p&gt;By the same token, though, we must be watchful that the government does not take too large an interest in the affairs of business. It is far too easy for large tariffs, taxes, or bureaucratic procedures to stifle innovation or competition which might otherwise be beneficial to the health of our nation's economy.&lt;/p&gt;
&lt;p&gt;When pressed for a vote on a particular example of this clash of liberty versus economy, one must always, without fail, closely examine as many of the major consequences as is feasible before making a determination. Voting on party lines or by rhetoric alone - be it libertarian, neoconservative, or liberal - is to invite disaster on an epic scale. Such, I fear, is the case with our current financial situation in the United States. I imagine that the collapse of the subprime market, the increase in the price of gasoline and its attendant effects, and the subsequent slowing of the American economy can be traced to poor decisions in the balancing act of liberty and economy.&lt;/p&gt;
&lt;p&gt;Sometimes, the liberty of business needs to take a back seat to governmental interference in the machine - and sometimes, the reverse is true.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Mon, 26 Nov 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/11/liberty-vs-economy-how-far-can-we-go/</guid></item><item><title>The Worst High School Play in the World—Review</title><link>https://www.davidschlachter.com/writings/twhspitw</link><description>My review of Cairine Wilson Secondary School’s production, for the  Cappies.</description><author>David Schlachter</author><pubDate>Sat, 24 Nov 2007 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/twhspitw</guid></item><item><title>Linking against GSL With Xcode</title><link>https://rob.sh/post/4/</link><description>&lt;p&gt;Further to the previous comment, you can also link against GSL from within an Xcode project:&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create an Xcode "C++ Tool" project from the command line projects options.&lt;br /&gt;&lt;br /&gt;&lt;img alt="GSL 1" src="https://cdn.rob.sh/img/xcode_gsl_0.png" /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Within the project Ctrl+Click on the project name, and select "Get Info"&lt;br /&gt;&lt;br /&gt;&lt;img alt="GSL 2" src="https://cdn.rob.sh/img/xcode_gsl_1.png" /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Use the Spotlight-esque search at the top of this window to search for Compiler, and select the "Other C++ Flags" text box.&lt;br /&gt;&lt;br /&gt;&lt;img alt="GSL 3" src="https://cdn.rob.sh/img/xcode_gsl_2.png" /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Into the box enter &lt;pre&gt;-I/opt/local/include -L/opt/local/lib -lgsl&lt;/pre&gt; leave the &lt;pre&gt;$(OTHER_CFLAGS)&lt;/pre&gt; existing input there.&lt;br /&gt;&lt;br /&gt;&lt;img alt="GSL 3" src="https://cdn.rob.sh/img/xcode_gsl_3.png" /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/li&gt;
&lt;br /&gt;
You should then be able to use the Build command in Xcode to build the project linked against GSL. This assumes that you install GSL from MacPorts as documented previously.</description><author>rob.sh</author><pubDate>Thu, 22 Nov 2007 18:21:02 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/4/</guid></item><item><title>Vector graphics in the browser</title><link>https://www.databasesandlife.com/vector-graphics-in-the-browser/</link><description>&lt;p&gt;I&amp;rsquo;ve taken a look at the state of vector graphics in the browser.&lt;/p&gt;
&lt;p&gt;Since the beginning of the web, people have been using GIFs to display their headline texts; tables and CSS to do layout; and GIFs for rounded corners etc. A lot of this would become a lot simpler if the browser was able to display vector graphics.&lt;/p&gt;
&lt;p&gt;There are numerous systems for displaying vector graphics but the two I looked at in detail were the &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; tag and DOJO. Initially I realized that the &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; tag could not plot text, and I thought the DOJO system could. But it turns out it can&amp;rsquo;t either. So I concentrated on the &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; tag.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 22 Nov 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/vector-graphics-in-the-browser/</guid></item><item><title>The Amazon Kindle: Friend or foe?</title><link>https://jasoneckert.github.io/myblog/amazon-kindle-friend-or-foe/</link><description>&lt;p&gt;&lt;img alt="Amazon Kindle" src="kindle.png#right" title="Amazon Kindle" /&gt;&lt;/p&gt;
&lt;p&gt;There has been a lot of hype this week about Kindle - Amazon’s eBook reader.&lt;/p&gt;
&lt;p&gt;I have always regarded eBooks (also referred to as Digital Ink) as evil.  They are almost always DRM (Digital Rights Management) protected so that you can’t share information with others and typically require an expensive eBook reader.&lt;/p&gt;
&lt;p&gt;On the other side, the idea of storing my book collection on a nice small aesthetic digital device seems attractive to me as a technophile.  However, the device would need to be as natural to use as a book and would need to allow non-DRM content as well.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 22 Nov 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/amazon-kindle-friend-or-foe/</guid></item><item><title>Second Life, MMORPGs, and conversation</title><link>https://benovermyer.com/blog/2007/11/second-life-mmorpgs-and-conversation/</link><description>&lt;p&gt;So, I reactivated my old Second Life account to do some building work for my dad at Baker College. He's started a virtual space for Baker College in Second Life called Baker Island. It's apparently a research exercise in the vein of human-computer interaction, and I've been tasked with building a café for all the virtually-hungry students that come calling.&lt;/p&gt;
&lt;p&gt;As I wandered around Second Life's many shops and freebie areas looking for resources to help build the café, I noticed an overwhelming number of people running around….but not talking. There was very little chatter in the public chat, and little chatter in the rather large groups I belong to. So, while there is a large number of users in these shopping areas - ostensibly the most populous regions in Second Life - there was almost no social interaction.&lt;/p&gt;
&lt;p&gt;Compare this to World of Warcraft, the largest Western MMORPG in terms of paying subscribers. Everywhere you go, there is inevitably a dearth of conversation. People form groups, raids, and arena teams…not to mention guilds. There is a constant loud presence in larger areas like Orgrimmar and the Crossroads.&lt;/p&gt;
&lt;p&gt;So why does Second Life have so little person-to-person interaction, while World of Warcraft (and other MMORPGs) has so much?&lt;/p&gt;
&lt;p&gt;I've noticed in my many gaming adventures online that the more of a sandbox a virtual world or game is, the less chatter there is. The more there is to do, the more likely it seems that people want to concentrate on doing things rather than talking. EVE: Online is an unusual example - plenty of conversation, but a sandbox environment. This one can be rationalized by pointing out that in EVE there are a large number of activities that are heavy on downtime - travel, for instance. Plenty of time to do nothing but wait and, if there are others around waiting, talk.&lt;/p&gt;
&lt;p&gt;On the other side of things, games like Team Fortress 2 that are filled with highly attention-intensive activities prevent chatter by engaging players constantly. While the number of possible activities doesn't match, say, Second Life, the sheer percentage of the players' brains that must be devoted to normal game activities tends to outweigh the conversational side.&lt;/p&gt;
&lt;p&gt;So, really, could you say that the amount of chatting going on is directly proportional to the boredom factor of the game? It's possible. It's very possible.&lt;/p&gt;
&lt;p&gt;Developers would do well to take note of this fact when designing online games.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Mon, 19 Nov 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/11/second-life-mmorpgs-and-conversation/</guid></item><item><title>`COUNT(*)` vs `COUNT(pk_col)`</title><link>https://www.databasesandlife.com/count-vs-countpk_col/</link><description>&lt;p&gt;A while back I was doing some performance tuning on MySQL 5 for a customer. A SELECT was counting the number of rows in the table. I always use COUNT(*) for that but I know a lot of people, including the customer, use COUNT(pk_col). The query was taking a long time (a few minutes). I analyzed that the problem came from the usage of COUNT(pk_col) instead of COUNT(*). With COUNT(*) it was instantaneous.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 19 Nov 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/count-vs-countpk_col/</guid></item><item><title>Oracle Security, Part 2: Your read only accounts aren’t that read only</title><link>https://tanelpoder.com/2007/11/19/oracle-security-part-2-your-read-only-accounts-arent-that-read-only/</link><description>&lt;p&gt;Couple of years ago an interesting fact floated up in Oracle-L – a regular user with only SELECT privilege on a table can successfully execute a SELECT FOR UPDATE against it, locking all rows and even lock the whole table using LOCK TABLE command. Locking a table in exclusive mode would stall all changes and selects against that table – effectively hanging all applications using that table. Pete Finnigan wrote a review of the issue in &lt;a href="http://www.petefinnigan.com/weblog/archives/00000363.htm" target="_blank"&gt;this blog entry&lt;/a&gt;.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 18 Nov 2007 18:44:56 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/11/19/oracle-security-part-2-your-read-only-accounts-arent-that-read-only/</guid></item><item><title>Linking against GSL on OS X 10.5 Leopard</title><link>https://rob.sh/post/3/</link><description>&lt;p&gt;Since I&amp;rsquo;m taking the Computational Physics module in my third year at IC, we&amp;rsquo;re using some libraries like GSL to provide &amp;ldquo;better-than-default&amp;rdquo; random number generators and such like. It turns out that those of us using a Mac don&amp;rsquo;t get GSL installed by default with Xcode, or under OS X - and unlike Windows and Linux - there&amp;rsquo;s no instructions on the course site. Here&amp;rsquo;s a really quick way to ensure that you can link against it:&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;</description><author>rob.sh</author><pubDate>Thu, 15 Nov 2007 13:22:43 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/3/</guid></item><item><title>Stream of consciousness, part one: the Internet</title><link>https://benovermyer.com/blog/2007/11/stream-of-consciousness-part-one-the-internet/</link><description>&lt;p&gt;What follows is a completely unfiltered and unedited post on the subject of the nature of the Internet. This is the first part of an experiment I'm trying on what is popularly called “stream of consciousness” or “free writing.” Perhaps you will find something interesting and comment-worthy; perhaps not. Such is the nature of an experiment.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;A commentary on programming and the web.&lt;/p&gt;
&lt;p&gt;Java, JavaScript, AJAX, C++, .NET, ASP, all these things are just different languages that achieve roughly the same end. That end is to produce something or to explore something, two verbs with ubiquitous usage throughout history if only in concept.&lt;/p&gt;
&lt;p&gt;The web, or more accurately the internet, is a social medium. Unlike other forms of communication such as artwork or books, the internet is by and large two-way. This has given rise to the concept of Web 2.0. Web 2.0 is something of a misnomer, though - the Web has always wanted to be a vehicle for large scale communication. This blog is an example of that. The earliest versions of the Internet incorporated email and bulletin board systems. Nothing revolutionary in that, either; it just meant faster communication.&lt;/p&gt;
&lt;p&gt;So then, combining the production of stuff - using programming languages - and the distribution of stuff (since distribution is a social action), the Web is nothing more than an extension of the real world. It's not particularly fascinating nor particularly original, but it allows us to interact with more people than might otherwise be possible.&lt;/p&gt;
&lt;p&gt;Something that, then, follows from this is that people will through communication on a larger scale acquire a larger number of experiences and points of view. Through this, more thought is generated, ultimately speeding up the discovery process.&lt;/p&gt;
&lt;p&gt;Interestingly, the Internet can overcome some traditional barriers of communication and thereby promote freedom. Certainly the Internet has been a godsend for the libertarian line of thought. It has also been highly useful to people like those from Myanmar. By the same token though, it has also enabled the more extreme edges of society to have a bigger voice. Disturbing behaviors and lines of thought are present on the Web where they would not be tolerated in more antiquated types of communication and literature, such as libraries.&lt;/p&gt;
&lt;p&gt;Imagine, if the speed and reach of the Internet is what has revolutionized the way society interacts….what would society be like if we were all telepathic?&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Mon, 12 Nov 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/11/stream-of-consciousness-part-one-the-internet/</guid></item><item><title>Anniversary of the World Wide Web</title><link>https://jasoneckert.github.io/myblog/anniversary-of-the-world-wide-web/</link><description>&lt;p&gt;&lt;img alt="web" src="theweb.png#right" title="web" /&gt;&lt;/p&gt;
&lt;p&gt;Do you remember the dawn of the Internet in the mid 1990s?  Everyone was talking about the “Information Superhighway” (a cheesy term for the Internet back then) and how it would change everyone’s life.  Then people starting talking about the World Wide Web (WWW) and email and facebook.&lt;/p&gt;
&lt;p&gt;Still today, many people don’t know how to properly define the World Wide Web and the Internet.  At dinner parties with non-geek friends, I like to bring this up by asking, “So, can anyone here tell me what the Internet and World Wide Web are?”.  People start by blurting out things such as email and text messaging and doing taxes online, and usually someone argues that it is a social phenomenon or something, but eventually people start to realize that they really have no idea what the Internet and World Wide Web actually are.  I can be a bastard sometimes, but it is fun.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Mon, 12 Nov 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/anniversary-of-the-world-wide-web/</guid></item><item><title>Sqlplus is my second home, part 4: Getting sqlplus parameter value into a variable</title><link>https://tanelpoder.com/2007/11/07/sqlplus-is-my-second-home-part-4-getting-sqlplus-parameter-value-into-a-variable/</link><description>&lt;p&gt;I’m having some busy times, so can’t blog anything more serious than another sqlplus trick (which likely has value only to some hardcore sqlplus geeks though).&lt;/p&gt;
&lt;p&gt;Ever wanted to load a sqlplus parameter (like linesize, pagesize or arraysize) into a sqlplus define variable?&lt;/p&gt;
&lt;p&gt;This can sometimes be helpful for customizing your everyday DBA scripts to output (or not output) some columns based on linesize. Or you may want to use the SQL error code somewhere in your script.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 06 Nov 2007 18:22:12 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/11/07/sqlplus-is-my-second-home-part-4-getting-sqlplus-parameter-value-into-a-variable/</guid></item><item><title>Live free. Live open source.</title><link>https://benovermyer.com/blog/2007/11/live-free-live-open-source/</link><description>&lt;p&gt;In today's digital, global community, many of the old rules no longer apply. One of these is the way in which we get access to and use common everyday information and media. The old way was to do things like buy a CD at a music store, check out a book on writing resumes at the public library, or pay someone $60 an hour to teach you how to play guitar.&lt;/p&gt;
&lt;p&gt;The world has changed.&lt;/p&gt;
&lt;p&gt;Now, we download songs through GarageBand, read online resume writing guides found through Google, and learn guitar through instructional videos on YouTube. It's all available freely and instantly, and much of it is open source or public domain. We're in an age of open source living. And it doesn't have to be restricted to purely online things.&lt;/p&gt;
&lt;p&gt;Open source living is using products and services provided in a collaborative, unrestricted way. It's all about freedom of choice and freedom of creativity.&lt;/p&gt;
&lt;p&gt;Some examples of open source living:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;living in 1-month, open lease rental apartments&lt;/li&gt;
&lt;li&gt;using computers with easily replaceable and customizable innards&lt;/li&gt;
&lt;li&gt;having a jam session with a couple local musicians&lt;/li&gt;
&lt;li&gt;choosing open-dialogue farm products over supermarket-bought ones&lt;/li&gt;
&lt;li&gt;writing a book, then making it available to everyone using Creative Commons license - whether free or for profit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;…and so on!&lt;/p&gt;
&lt;p&gt;Besides promoting the free exchange of ideas, open source living is also frequently cheaper and more fun than what I called “lock-in living.” For example, say you buy a voice for a season in an open-dialogue farm. The costs vary but are usually pretty cheap, since these farms are smaller and don't have to worry about specific crop quotas like the big farms do. Since you've got a voice, you can choose one or more products for them to grow, and you get a portion of everything they make for a season.&lt;/p&gt;
&lt;p&gt;Another example is choosing open-license music over licensed music. The artists gain prestige, exposure, and input - and sometimes event gigs - and the consumers enjoy themselves. While open source doesn't mean completely free, it usually provides greater freedom of choice.&lt;/p&gt;
&lt;p&gt;Things that go hand-in-hand with open source living are alternative medicine and alternative energy sources. Solar power and herbal medicines in particular are very “open source” in nature, since instructions and discussions regarding them are easily found online. A Google search for renewable energy will turn up scores of sites about alternative energy sources, and a search for holistic medicine will find you plenty of natural alternatives to the drugs pushed by pharmaceutical companies. Keep in mind, though, that not all medicines are created equal, and you should be very careful about what you do to your body!&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Tue, 06 Nov 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/11/live-free-live-open-source/</guid></item><item><title>MINA bindings for Scala</title><link>https://rd.nz/2007/11/mina-bindings-for-scala.html</link><author>Rich Dougherty</author><pubDate>Mon, 05 Nov 2007 09:34:00 GMT</pubDate><guid isPermaLink="true">https://rd.nz/2007/11/mina-bindings-for-scala.html</guid></item><item><title>New Look</title><link>https://rob.sh/post/1/</link><description>&lt;p&gt;As it turns out - it&amp;rsquo;s pretty easy to code up a very basic blog application and integrate it with your existing flat-file site in Django. In fact, it fits very nicely into the 20 minute gap that you&amp;rsquo;re taking to try and make sure that you can sleep!&lt;br /&gt;
&lt;br /&gt;
There&amp;rsquo;s also some semblance of a design here now.&lt;/p&gt;</description><author>rob.sh</author><pubDate>Thu, 01 Nov 2007 03:17:07 GMT</pubDate><guid isPermaLink="true">https://rob.sh/post/1/</guid></item><item><title>Partisanship is vile. What loss to this country...</title><link>https://benovermyer.com/blog/2007/10/partisanship-is-vile-what-loss-to-this-country/</link><description>&lt;p&gt;Seriously. I see Republicans railing on Democrats and Democrats railing on Republicans. The fighting and partisanship is completely at odds with what our forefathers intended. Benjamin Franklin must be turning in his grave at the extreme partisanship that many Americans today profess.&lt;/p&gt;
&lt;p&gt;I do not belong to a political party. Neither should you. This is not because I am Right and you are Wrong; rather, it is a simple matter of reason. Political parties inherently divide people into differing camps of rhetoric. This is self-evident. Also self-evident is that rhetoric snuffs out free thought and discussion.&lt;/p&gt;
&lt;p&gt;For this reason, every time I see someone who proudly declares that they belong to one party or other, I will shake my head sadly at the sorrow state of our once great nation. Powerful we have become, but divisive and hostile. So sad, and so unnecessary.&lt;/p&gt;
&lt;p&gt;Here are a few action items for you to help improve the political climate of our country:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Print and distribute flyers promoting nonpartisan discussion of an issue important to you.&lt;/li&gt;
&lt;li&gt;Start a discussion club at your local coffee house.&lt;/li&gt;
&lt;li&gt;Unregister yourself as a member of the political party you presently belong to.&lt;/li&gt;
&lt;li&gt;Pick one hot issue and start a blog about it. Discuss all possible repercussions it could have.&lt;/li&gt;
&lt;li&gt;Invite your family and friends to switch parties for a single month and give themselves wholeheartedly to the opposing lines of thought. Don't vote during this experiment though!&lt;/li&gt;
&lt;li&gt;Read one of Benjamin Franklin's works. There are many, and your local library will have at least one.&lt;/li&gt;
&lt;li&gt;Start a newsletter for your town that promotes nonpartisan exploration of issues.&lt;/li&gt;
&lt;/ul&gt;</description><author>Ben Overmyer's Site</author><pubDate>Mon, 29 Oct 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/10/partisanship-is-vile-what-loss-to-this-country/</guid></item><item><title>Thank you, Apple</title><link>https://jasoneckert.github.io/myblog/thankyou-apple/</link><description>&lt;p&gt;&lt;img alt="PowerBookG4" src="powerbook.png#right" title="PowerBookG4" /&gt;&lt;/p&gt;
&lt;p&gt;I installed Macintosh OS X 10.5 Leopard on all my Macs today.  When you upgrade an OS, you always expect to lose some system settings and have some applications that don’t like the new OS.  As a result, I chose to install Leopard on my PowerBook G4 first.  It has tons of software and I customized it to the max, so I naturally expected to spend a while tweaking it after the upgrade to get an idea of what I can expect when I upgrade my other computers.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sat, 27 Oct 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/thankyou-apple/</guid></item><item><title>Sony support: Day 35 (approx)</title><link>https://www.databasesandlife.com/sony-support-day-35-approx/</link><description>&lt;p&gt;I realized I never finished the story about Sony laptop Support.&lt;/p&gt;
&lt;p&gt;The laptop was returned after about 5 weeks, and it did work. In the mean-time some plastic is coming a bit detached around the screen (that was one of the things they replaced), but if you handle it gently, it&amp;rsquo;s OK.&lt;/p&gt;
&lt;p&gt;It was returned to the wrong place. Well I asked them to call me before they returned it, as they picked it up from one of the offices I work in, but I work in lots of different offices so I wasn&amp;rsquo;t sure I was going to be in that particular office whenever they delivered it back. But of course they didn&amp;rsquo;t, I just got an email from the boss of the company in the office they picked it up from, telling me it&amp;rsquo;d arrived back in that one.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 26 Oct 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/sony-support-day-35-approx/</guid></item><item><title>Hyppolyta (or: How to scan your book collection)</title><link>https://bastian.rieck.me/blog/2007/hyppolyta_or_how_to_scan_your_book_collection/</link><description>&lt;p&gt;It started as a simple idea: Use a barcode scanner to sort a collection of
books. Of course, the idea grew and became much more versatile and interesting.&lt;/p&gt;
&lt;p&gt;And now I finally managed to upload all information about a project that has
been on my agenda for several weeks. The program is called &lt;code&gt;Hyppolyta&lt;/code&gt;; it is a
simple Perl script. If you are armed with a barcode scanner and lots of books
(or other items of value that have a barcode), this project could be very
interesting for you.&lt;/p&gt;
&lt;p&gt;You are able to download the program from &lt;a href="https://bastian.rieck.me/blog/2007/hyppolyta/"&gt;its project
page&lt;/a&gt;. The project page also contains a simple
documentation that should be read before using &lt;code&gt;Hyppolyta&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Essentially, the program is finished, but to facilitate things, several
helper/wrapper applications might be added &amp;ldquo;real soon now&amp;rdquo;. It is therefore
advisable to come back for updates.&lt;/p&gt;
&lt;p&gt;You are, as always, encouraged to change the source code if you think some part
should be rewritten. It would be nice, however, if you notified me of changes
so that they are available in the &amp;ldquo;official version&amp;rdquo;, too.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Sun, 21 Oct 2007 15:33:43 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2007/hyppolyta_or_how_to_scan_your_book_collection/</guid></item><item><title>A simple interview question</title><link>https://tanelpoder.com/2007/10/20/a-simple-interview-question/</link><description>&lt;p&gt;Question: How to check instance parameter values in Oracle?&lt;/p&gt;
&lt;p&gt;Answer: &lt;strong&gt;show parameter xyz&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;WRONG!&lt;/p&gt;
&lt;p&gt;Answer: &lt;strong&gt;select value from v$parameter where name = ‘xyz’&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;WRONG!&lt;/p&gt;
&lt;p&gt;These commands show the &lt;em&gt;session&lt;/em&gt; level parameter values, which are separate from &lt;em&gt;instance&lt;/em&gt; level parameters:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; show parameter session_cached_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------------------
session_cached_cursors               integer     20

SQL&amp;gt; select value from v$parameter where name = 'session_cached_cursors';

VALUE
---------------------------------------------------------------------------------
20

&lt;/pre&gt;
&lt;p&gt;V$SYSTEM_PARAMETER is the view which shows instance level parameters (and these are what all new sessions inherit)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Fri, 19 Oct 2007 19:20:28 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/10/20/a-simple-interview-question/</guid></item><item><title>Ontario Linux Fest</title><link>https://jasoneckert.github.io/myblog/ontario-linux-fest/</link><description>&lt;p&gt;&lt;img alt="Linux Fest" src="linuxfest1.png#center" title="Linux Fest" /&gt;&lt;/p&gt;
&lt;p&gt;Yesterday, I teamed up with and old friend of mine (Scott Elliott) and went to the Ontario Linux Fest at the Toronto Congress Centre.  For those who do not know Scott, he is a VMWare guru (you can join his Southwestern Ontario VMWare user’s group @ &lt;a href="https://www.vmware.com"&gt;www.vmware.com&lt;/a&gt;), as well as a master in the 8th layer of the OSI Model (the political layer).  Although he won’t admit it, he knows UNIX very well and is an advocate of the Open Source movement even though he works mainly with Windows.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sun, 14 Oct 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/ontario-linux-fest/</guid></item><item><title>True open source - death of the individual or celebration of individualism?</title><link>https://benovermyer.com/blog/2007/10/true-open-source-death-of-the-individual-or-celebration-of-individualism/</link><description>&lt;p&gt;Many, many people speak glowingly of the benefits of open source software. A growing movement also seeks to make a great many other things “open source” - from the file-sharing freedom fighters at &lt;a href="http://www.freeculture.org/" rel="external"&gt;FreeCulture.Org&lt;/a&gt; to the unusual licensing of the newest editions of &lt;a href="http://www.wizards.com/dnd" rel="external"&gt;Dungeons &amp;amp; Dragons&lt;/a&gt;. Libertarianism and the concept of freely available content appears to be on the rise. However, is this necessarily a good thing? What of individualism and ego, concepts central to Western culture? Before the Internet and the World Wide Web enabled easy, free sharing of information and data, the individual had two primary levels of protection for his works. First was copyright law, which prior to 1976 and the introduction of Fair Use was a strong wall against unlicensed propagation of content. The other was the simple and undeniable fact that content could simply not be transmitted with any reasonable speed or transparency. The &lt;a href="http://www.gseis.ucla.edu/~howard/Papers/copyright99.html" rel="external"&gt;advent of Betamax and the subsequent legal turmoil&lt;/a&gt; ended up making unlicensed (and also, licensed) distribution of content much easier.&lt;/p&gt;
&lt;p&gt;The recent &lt;a href="http://www.washingtonpost.com/wp-dyn/content/article/2007/08/01/AR2007080102398.html" rel="external"&gt;case by Regal Cinemas against Jhannet Sejas&lt;/a&gt; highlights a similar paranoia by an industry juggernaut targeted against a consumer and potential distributor. Ignoring the legal implications of the Regal v. Sejas case (that the possibility of infringement is equal to infringement in the eyes of the law), these kinds of events demonstrate growing pains inherent in the development of an entirely new socioeconomic system. Instead of the traditional producer-distributor-consumer model prevalent throughout the past few hundred years, we are now presented with a direct producer-consumer model - or, in some cases, a consumer-consumer model, whereby the individuality of the producer is apparently cut out of the picture. And that, my friends, is the crux of this post. Does the removal of the producer from the cycle and the distribution and modification by consumers of their works remove the individualism from the quotient? For my part, I say no. In fact, it seems to me that rather than removing individualism, it promotes it - albeit in a slightly different form. After all, the concept of inventor-as-hero is a fallacy, with most inventions actually developing from several different points at several different rates. Ely Whitney, Henry Ford, Thomas Edison, and similar inventors - while important - were not absolutely critical to the development of the technologies they became famous for. They simply became standard bearers. Similarly, the advent of open source society is not going to crush individualism. Rather, it will promote the free exchange of ideas and, thereby, accelerate the process at which these producer-heroes arise. Further, with the free flow of information, their fame will spread far more rapidly than did their cultural predecessors'. Linus Torvalds and Matt Mullenweg are prime examples of this. So lead on, brave open source pioneers, and may your paths be paved with cookies. Yours is the cause of freedom and of the future.&lt;/p&gt;</description><author>Ben Overmyer's Site</author><pubDate>Wed, 10 Oct 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://benovermyer.com/blog/2007/10/true-open-source-death-of-the-individual-or-celebration-of-individualism/</guid></item><item><title>The CD Saga gets worse</title><link>https://www.databasesandlife.com/the-cd-saga-gets-worse/</link><description>&lt;p&gt;On my stereo at home it plays fine (although it &lt;a href="https://www.databasesandlife.com/playing-a-cd-on-a-computer/"&gt;doesn&amp;rsquo;t work on my Windows computer&lt;/a&gt;) but put it into my girlfriend&amp;rsquo;s DVD player and it reports itself to have 17 tracks even though the cover says it only has 15. I hadn&amp;rsquo;t looked closely at the reported track count on the DVD player and just played the disk. After the peaceful ending of the last track on the CD i.e. the 15th, the speakers just erupted in loud white noise. I suppose that was the Windows &amp;ldquo;autorun&amp;rdquo; software being played&amp;hellip;&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Sat, 06 Oct 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/the-cd-saga-gets-worse/</guid></item><item><title>More about Open Source Software and Linux</title><link>https://jasoneckert.github.io/myblog/more-about-open-source-software-and-linux/</link><description>&lt;p&gt;&lt;img alt="Dilbert cartoon" src="dilbert.png#center" title="Dilbert cartoon" /&gt;&lt;/p&gt;
&lt;p&gt;In light of the upcoming Ontario Linux Fest, I decided to use this blog entry to reflect on Open Source Software and Linux.&lt;/p&gt;
&lt;p&gt;Free Software and the Free Software Foundation (FSF) were pioneered by the famous Richard Stallman.  Free Software does not mean “at no monetary cost”&amp;hellip;&amp;hellip;..it means that the source code is free to anyone who wants to use it (source code freedom).  In the words of Stallman, think “free” as in “freedom”, not “free” as in “free beer”.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sat, 06 Oct 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/more-about-open-source-software-and-linux/</guid></item><item><title>Playing a CD on a computer is not as easy as one might imagine</title><link>https://www.databasesandlife.com/playing-a-cd-on-a-computer/</link><description>&lt;p&gt;I&amp;rsquo;m using Windows, and it seems that in one new aspect, I discover that Windows just doesn&amp;rsquo;t work. (Or maybe it&amp;rsquo;s the CD that doesn&amp;rsquo;t work?)&lt;/p&gt;
&lt;p&gt;Ideally I would have put the CD in the computer&amp;rsquo;s drive and it would have just played it. This was Bill Gates&amp;rsquo; vision once. I think prior to Windows 95&amp;rsquo;s launch, he said &amp;ldquo;I imagine a day when you can just put a Beethoven CD in the drive and Windows will play the song&amp;rdquo;. (Although I couldn&amp;rsquo;t find that quite on the Internet so maybe he didn&amp;rsquo;t say that.)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 05 Oct 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/playing-a-cd-on-a-computer/</guid></item><item><title>Help everybody love Free Standards and Free Software!</title><link>https://stop.zona-m.net/2007/10/help-everybody-love-free-standards-and-free-software/</link><description>&lt;p&gt;You will never convince ENOUGH people with the GNU Manifesto.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 02 Oct 2007 21:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/10/help-everybody-love-free-standards-and-free-software/</guid></item><item><title>FileTree version 1.0</title><link>https://arashpayan.com/blog/2007/09/23/filetree-version-10/</link><description>I was coding at work, and I needed a tree view of the file system so user&amp;rsquo;s could select a directory in a utlitiy I was writing. There&amp;rsquo;s nothing in the Java libraries that does that (as of JDK 1.6), so I figured this would be a cool little swing object to develop and make available for others. I finished it about a month ago, but I didn&amp;rsquo;t have time to thoroughly document it and make a page for it on my website until now.</description><author>Arash Payan</author><pubDate>Mon, 24 Sep 2007 08:15:00 GMT</pubDate><guid isPermaLink="true">https://arashpayan.com/blog/2007/09/23/filetree-version-10/</guid></item><item><title>t-zones (a.k.a. $5.99 Internet access) on the iPhone</title><link>https://arashpayan.com/blog/2007/09/17/t-zones-aka-599-internet-access-on-the-iphone/</link><description>UPDATE 3 (May 12, 2009): This tutorial and the two update links below it are outdated. Instead, setting up T-zones is now a super easy 30 second process.
UPDATE 2 (July 26, 2008): There is a much easier way to set up T-Zones now.
UPDATE: After going through my logs I&amp;rsquo;ve noticed that there are a lot of Windows users checking out this guide. So I&amp;rsquo;ve added a step 0 new step 1 to help them out.</description><author>Arash Payan</author><pubDate>Tue, 18 Sep 2007 06:25:00 GMT</pubDate><guid isPermaLink="true">https://arashpayan.com/blog/2007/09/17/t-zones-aka-599-internet-access-on-the-iphone/</guid></item><item><title>In Memoriam Robert Jordan (1948-2007)</title><link>https://bastian.rieck.me/blog/2007/in_memoriam_robert_jordan_1948-2007/</link><description>&lt;p&gt;James Oliver Rigney Jr, better known as Robert Jordan, creator of the &lt;strong&gt;Wheel
of Time&lt;/strong&gt; books, passed away yesterday. My deepest condolences to his family
and close friends.&lt;/p&gt;
&lt;p&gt;Rest in peace, RJ!&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Mon, 17 Sep 2007 20:32:22 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2007/in_memoriam_robert_jordan_1948-2007/</guid></item><item><title>How to resolve SQL object and column names all the way to base tables and columns in Oracle?</title><link>https://tanelpoder.com/2007/09/16/how-to-resolve-sql-object-and-column-names-all-the-way-to-base-tables-and-columns-in-oracle/</link><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;/strong&gt; As this original article is from 2007, there are better options available in the modern times – for example DBMS_UTILITY.EXPAND_SQL_TEXT as explained by Maria Colgan’s blog entry &lt;a href="https://sqlmaria.com/2018/03/13/how-to-determine-which-view-to-use/" rel="noopener" target="_blank"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If you have been involved in tuning SQL code which you have never seen before, you are probably familiar with the challenges of understanding what the code is trying to do. This can be especially time consuming when the SQL references lots of views, which reference views, which reference more views etc. So there may be a large information gap between the SQL statement (like select * from some_crazy_10_level_view) and the actual execution plan (referencing 10s of tables, with evidence of query transformations).&lt;/p&gt;
&lt;p&gt;So unless you see something &lt;em&gt;really&lt;/em&gt; obvious from the execution plan, you need to start mapping the SQL query and view texts back to the physical base tables which Oracle eventually has to access. This can be a tedious and boring (!) process.&lt;/p&gt;
&lt;p&gt;The good news is that in Oracle 10.2+ there’s a hidden parameter that can do this mapping task for us.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update: It looks like 9.2.0.8 patchset also has this parameter (so I guess later patchsets of 10.1.0.x have it as well now)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Let’s see an example:&lt;/p&gt;
&lt;p&gt;I create a view on a view to illustrate the point:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; create view myview as select * from all_users;

View created.

&lt;/pre&gt;
&lt;p&gt;Now let’s set that parameter &lt;strong&gt;_dump_qbc_tree&lt;/strong&gt; to 1 and run a query against the view:&lt;/p&gt;
&lt;pre&gt;SQL&amp;gt; alter session set "_dump_qbc_tree"=1;

Session altered.

SQL&amp;gt; select count(*) from myview;

  COUNT(*)
----------
        31

&lt;/pre&gt;
&lt;p&gt;Now let’s look into the server process tracefile:&lt;/p&gt;
&lt;pre&gt;*** ACTION NAME:() 2007-09-16 12:19:57.500
*** MODULE NAME:(SQL*Plus) 2007-09-16 12:19:57.500
*** SERVICE NAME:(SYS$USERS) 2007-09-16 12:19:57.500
*** SESSION ID:(146.1984) 2007-09-16 12:19:57.500
QCSDMP: -------------------------------------------------------
QCSDMP:  SELECT: (qbc=2B8D1C28)
QCSDMP:    . (COUNT(*)) (opntyp=2 opndty=0)
QCSDMP:  FROM:
QCSDMP:    .MYVIEW
QCSDMP:      VQB:
QCSDMP:        SELECT: (qbc=2B8D163C)
QCSDMP:          .USERNAME
QCSDMP:        FROM:
QCSDMP:          .ALL_USERS
QCSDMP:            VQB:
QCSDMP:              SELECT: (qbc=2B8CAF78)
QCSDMP:                U.NAME (USERNAME)
QCSDMP:              FROM:
QCSDMP:                SYS.TS$ (TTS)
QCSDMP:                SYS.TS$ (DTS)
QCSDMP:                SYS.USER$ (U)

&lt;/pre&gt;
&lt;p&gt;Here it is, the query text generated directly from parse tree, showing the base tables regardless that they had been hidden behind multiple views.&lt;/p&gt;
&lt;p&gt;Also there’s few interesting things to note:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 16 Sep 2007 08:23:08 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/09/16/how-to-resolve-sql-object-and-column-names-all-the-way-to-base-tables-and-columns-in-oracle/</guid></item><item><title>Unprofessional Support in MacHuolto, start of a blog</title><link>https://paul.totterman.name/posts/machuolto/</link><description>&lt;p&gt;First, some background. I have an iBook G4 12&amp;quot; that I bought in August 2005, so
that I would have a handy laptop during my studies. I also bought AppleCare,
because I thought it would be better to pay 300€ extra to be sure that the
laptop would serve me at least three years, instead of the one year default
warranty. Of that decision, I&amp;rsquo;m glad.&lt;/p&gt;</description><author>Paul's page</author><pubDate>Sat, 15 Sep 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://paul.totterman.name/posts/machuolto/</guid></item><item><title>Override configuration programmatically from unit tests</title><link>https://www.databasesandlife.com/unit-testing-and-configuration-files/</link><description>&lt;p&gt;I used to think of a &lt;em&gt;function&lt;/em&gt; as something which would convert some &lt;em&gt;input&lt;/em&gt; value into some &lt;em&gt;output&lt;/em&gt; value (potentially with some side-effects). And thus unit testing a function would involve passing particular inputs into the function and checking that the results were as expected (potentially setting up some database rows or something to test that the side-effects were executed properly).&lt;/p&gt;
&lt;p&gt;But sometimes a function relies on a particular piece of global configuration. That&amp;rsquo;s an input to the function too. For example the tax rate.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Sun, 09 Sep 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/unit-testing-and-configuration-files/</guid></item><item><title>Content-aware image resizing</title><link>/post/content-aware-image-resizing/</link><description>&lt;p&gt;Watch this video demonstrating some cool algorithms for resizing and cropping images. They analyse the content of the image and try to remove/add/stretch/shrink only those areas of the image that are less relevant.&lt;/p&gt;

    &lt;div style="padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
      
    &lt;/div&gt;</description><author>Neuroning</author><pubDate>Thu, 06 Sep 2007 13:16:00 GMT</pubDate><guid isPermaLink="true">/post/content-aware-image-resizing/</guid></item><item><title>Java 5 enums can be compared with ==</title><link>https://www.databasesandlife.com/java-5-enums-can-be-compared-with/</link><description>&lt;p&gt;Java Enum instances are singletons. This seems to be not clearly documented by Sun (at least I found it difficult to find). But it&amp;rsquo;s the case.&lt;/p&gt;
&lt;p&gt;What this means is that it&amp;rsquo;s possible to compare enumerated types by identity, which is cool for readability. (And it means that the switch statement works.)&lt;/p&gt;
&lt;p&gt;You don&amp;rsquo;t have to write this:&lt;/p&gt;
&lt;pre&gt;if (PurchaseState.complete.equals(anItem.getPurchaseState()) { ...
&lt;/pre&gt;
&lt;p&gt;You can write:&lt;/p&gt;
&lt;pre&gt;if (anItem.getPurchaseState() == PurchaseState.complete) { ...
&lt;/pre&gt;
&lt;p&gt;This is documented &lt;a href="http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.9" rel="noopener noreferrer" target="_blank"&gt;here&lt;/a&gt; in the &amp;ldquo;discussion&amp;rdquo; section.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 06 Sep 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/java-5-enums-can-be-compared-with/</guid></item><item><title>Online Mind Mapping</title><link>/post/online-mind-mapping/</link><description>&lt;p&gt;A couple of smart friends of mine are strong advocates of &lt;a href="http://en.wikipedia.org/wiki/Mind_Map"&gt;mind maps&lt;/a&gt;, so much in fact that they had nothing better to do than develop &lt;a href="http://wisemapping.com"&gt;http://wisemapping.com&lt;/a&gt;. It's a pretty impressive online mind-mapping tool with everything you'd expect these days from a &lt;em&gt;web two-oh&lt;/em&gt; application: rich UI, collaboration, tagging, sharing.&lt;/p&gt;
&lt;p&gt;It's still a private beta, with many more features coming.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Thu, 06 Sep 2007 01:06:00 GMT</pubDate><guid isPermaLink="true">/post/online-mind-mapping/</guid></item><item><title>Advanced Oracle Troubleshooting Guide, Part 3: More adventures in process stack</title><link>https://tanelpoder.com/2007/09/06/advanced-oracle-troubleshooting-guide-part-3-more-adventures-in-process-stack/</link><description>&lt;p&gt;…or rather thread stack as nowadays decent operating systems execute threads (or tasks as they’re called in Linux kernel).&lt;/p&gt;
&lt;p&gt;Anyway, stack trace gives you the ultimate truth on what your program is doing, exactly right now. There are couple of but’s like stack corruptions and missing symbol information which may make the traces less useful for us, but for detailed hang &amp;amp; performance troubleshooting the stack traces are a goldmine.&lt;/p&gt;
&lt;p&gt;So, I present another case study – how to diagnose a complete database hang when you can’t even log on to the database.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Wed, 05 Sep 2007 19:50:32 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/09/06/advanced-oracle-troubleshooting-guide-part-3-more-adventures-in-process-stack/</guid></item><item><title>Difference between row-level locking algorithms on Oracle and MySQL InnoDB</title><link>https://www.databasesandlife.com/interesting-oraclemysql-locking-difference/</link><description>&lt;p&gt;I know the rules for Oracle row locking well. A row can be locked for write if one updates it, or if one &amp;ldquo;select for update&amp;quot;s it.&lt;/p&gt;
&lt;ol class="tight"&gt;
  &lt;li&gt;
    create table a (x number); (and equivalent in MySQL for InnoDB)
  &lt;/li&gt;
  &lt;li&gt;
    Session A: insert into a values (9);
  &lt;/li&gt;
  &lt;li&gt;
    Session A: commit;
  &lt;/li&gt;
  &lt;li&gt;
    Session A: start transaction (in MySQL)
  &lt;/li&gt;
  &lt;li&gt;
    Session A: select * from a where x=9 for update;
  &lt;/li&gt;
  &lt;li&gt;
    Session B: start transaction (in MySQL)
  &lt;/li&gt;
  &lt;li&gt;
    Session B: select * from a where x=9 for update;
  &lt;/li&gt;
  &lt;li&gt;
    Session B hangs, waiting for row-level lock to be release from the row by Session A
  &lt;/li&gt;
  &lt;li&gt;
    Session A: update a set x=4;
  &lt;/li&gt;
  &lt;li&gt;
    Session A: commit;
  &lt;/li&gt;
  &lt;li&gt;
    At this point, Session B returns no rows. Lock has been released, and row no longer confirms to where, so is not returned.
  &lt;/li&gt;
  &lt;li&gt;
    Session A: update a set x=5;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is where the difference occurs:&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 05 Sep 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/interesting-oraclemysql-locking-difference/</guid></item><item><title>3-Dimensional Photo Organization</title><link>https://www.databasesandlife.com/3-dimensional-photo-organization/</link><description>&lt;p&gt;I have just viewed some photos on Facebook. They were of a friend&amp;rsquo;s trip to Malaysia.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Facebook has a limit of 60 photos per album; meaning you have to split photos up into albums with names like &amp;ldquo;Malaysia 1&amp;rdquo;, &amp;ldquo;Malaysia 2&amp;rdquo; etc if you want to upload more than 60 photos in total.&lt;/li&gt;
&lt;li&gt;Each album, as is current practice in web design, is divided into pages with &amp;ldquo;page next&amp;rdquo; buttons to get to the next page.&lt;/li&gt;
&lt;li&gt;Each page of each album, as was introduced with windowing systems, has a scroll bar (vertical only, unless one makes the window really small)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;OK now fundamentally a set of photos from a holiday are one-dimensional. I can think of many ways to lay out photos but I&amp;rsquo;m sure these three dimensions would not be the dimensions I would choose.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 03 Sep 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/3-dimensional-photo-organization/</guid></item><item><title>Sqlplus is my second home, part 3: Colored selections in Windows XP command prompt</title><link>https://tanelpoder.com/2007/09/01/sqlplus-is-my-second-home-part-3-colored-selections-in-windows-xp-command-prompt/</link><description>&lt;p&gt;Whenever delivering some Oracle training or running a demo at a conference, I’ve always liked to use the Windows command prompt version of sqlplus.&lt;/p&gt;
&lt;p&gt;One reason of course is its easy command line history navigation capability ( press F7 in cmd.exe after entering few commands to see why ).&lt;/p&gt;
&lt;p&gt;Another reason is that whenever I want to highlight some part of sqlplus output, I can just drag a selection rectangle around that text. In other words I can “mark” the text – drawing the attention there. Of course as the selection rectangle is really meant for copy &amp;amp; paste operations only, it has several limitations. It’s not persistent, whenever I continue typing, the text “marking” will disappear.&lt;/p&gt;
&lt;p&gt;Windows XP has introduced a really cool feature to cmd.exe, which anyone doing presentations involving some command line tool output will appreciate!&lt;/p&gt;
&lt;p&gt;Basically XP allows you to &lt;em&gt;persistently&lt;/em&gt; select and &lt;em&gt;color&lt;/em&gt; command prompt output!&lt;/p&gt;
&lt;p&gt;An example of what I’m talking about is here:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 01 Sep 2007 08:55:23 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/09/01/sqlplus-is-my-second-home-part-3-colored-selections-in-windows-xp-command-prompt/</guid></item><item><title>Sqlplus is my second home, part 2: Running SQL scripts from remote locations using HTTP</title><link>https://tanelpoder.com/2007/08/31/sqlplus-is-my-second-home-part2/</link><description>&lt;p&gt;As you probably already know, the Session Snapper has been designed to be a very easy-to-use performance tool. It is especially useful in database environments where there are no decent performance tools pre-installed and available.&lt;/p&gt;
&lt;p&gt;Snapper doesn’t require any setup, all you need is to log on to the database using sqlplus and download &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/snapper.sql" target="_blank"&gt;snapper.sql&lt;/a&gt; script to your computer.&lt;/p&gt;
&lt;p&gt;Well, actually the second part is not required, as Oracle sqlplus allows you to run scripts from http and ftp locations!&lt;/p&gt;
&lt;pre&gt;C:&amp;gt;sqlplus "sys/oracle@ora92 as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on Thu Aug 30 23:00:10 2007

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production

SQL&amp;gt; &lt;strong&gt;@https://github.com/tanelpoder/tpt-oracle/blob/master/i.sql&lt;/strong&gt;

Tanel's sqlplus http test...
https://github.com/tanelpoder/tpt-oracle/blob/master/i.sql

USER                           SYSDATE
------------------------------ ---------
SYS                            30-AUG-07

NAME
---------
ORA92

INSTANCE_NAME    HOST_NAME
---------------- ----------------------------------------------------------------
ora92            WINDOWS01

You should be *very* sure that noone can change the scripts on the server without your knowing!!!

SQL&amp;gt;

&lt;/pre&gt;
&lt;p&gt;Cool stuff or what? :)&lt;/p&gt;
&lt;p&gt;Let’s see how this relates to everyday DBA life…&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 30 Aug 2007 19:11:20 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/08/31/sqlplus-is-my-second-home-part2/</guid></item><item><title>Operating systems are lazy allocating memory</title><link>https://tanelpoder.com/2007/08/28/operating-systems-are-lazy-allocating-memory/</link><description>&lt;p&gt;There was a discussion about whether Oracle really &lt;strong&gt;allocates&lt;/strong&gt; all memory for SGA immediately on instance startup or not. And further, whether Oracle allocates memory beyond the SGA_TARET if SGA_MAX_SIZE is larger than it.&lt;/p&gt;
&lt;p&gt;It’s worth reading this thread first: &lt;a href="http://forums.oracle.com/forums/thread.jspa?threadID=535400&amp;amp;tstart=0"&gt;http://forums.oracle.com/forums/thread.jspa?threadID=535400&amp;amp;tstart=0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I will paste an edited version of my reply to here as well:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 28 Aug 2007 18:02:24 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/08/28/operating-systems-are-lazy-allocating-memory/</guid></item><item><title>Advanced Oracle Troubleshooting Guide, Part 2: No magic is needed, systematic approach will do</title><link>https://tanelpoder.com/2007/08/27/advanced-oracle-troubleshooting-guide-part-2-no-magic-is-needed-systematic-approach-will-do/</link><description>&lt;p&gt;There are two ways for diagnosing problems:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Checking for the usual suspects and hoping to find a matching one&lt;/li&gt;
&lt;li&gt;Following a systematic approach&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="checking-for-the-usual-suspects-and-hoping-to-find-a-matching-one"&gt;Checking for the usual suspects and hoping to find a matching one&lt;/h4&gt;
&lt;p&gt;The first approach relies on previous experience (both in particular subject area/technology and about the context/environment the problem occurs). For example if a patient comes to doctor complaining about pain in chest, then for doctor (and also for the patient) it would definitely be beneficial to know more relevant info about the patient - the context. If the patient had just fallen off a 10-foot ladder, then it&amp;rsquo;d be more suitable to look for broken ribs. On the other hand, if the patient has been a long-time smoker and was watching TV on a couch when the pain started, then perhaps it&amp;rsquo;d be more suitable to start with an EKG (note that I&amp;rsquo;m not an expert on how human body works, so should anybody complain about any chest pain to you, send them to &lt;em&gt;real&lt;/em&gt; doctor immediately!)&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 26 Aug 2007 20:40:48 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/08/27/advanced-oracle-troubleshooting-guide-part-2-no-magic-is-needed-systematic-approach-will-do/</guid></item><item><title>Oracle Session Snapper, part 2: Getting most out of Snapper</title><link>https://tanelpoder.com/2007/08/26/oracle-session-snapper-part-2-getting-most-out-of-snapper/</link><description>&lt;p&gt;The main design goal of Session Snapper was that it should not require any changes to be made into database.&lt;/p&gt;
&lt;p&gt;And to achieve this goal, I was even willing to sacrifice some functionality.&lt;/p&gt;
&lt;p&gt;So, for example there is no sorting capability in Snapper output. It would have been easy to create an SQL Type to database, use that as session statistics storage and query results out using an order by on statistics delta column – giving you (probably) most significant resource consumers first. But I didn’t do this as it would have violated the no-database-change-whatsoever design goal. (This problem could however be solved using manual sorting in PL/SQL code as done in Adrian Billington’s variation of runstats utility: &lt;a href="http://www.oracle-developer.net/utilities.php" target="_blank" title="http://www.oracle-developer.net/utilities.php"&gt;&lt;a href="http://www.oracle-developer.net/utilities.php"&gt;http://www.oracle-developer.net/utilities.php&lt;/a&gt;&lt;/a&gt; )&lt;/p&gt;
&lt;p&gt;The second design goal was that snapper should work with as little privileges as possible. So far it requires execute access only on DBMS_LOCK, DBMS_OUTPUT and read access on few V$ views.&lt;/p&gt;
&lt;p&gt;However if you run the snapper using “out” option then it will use DBMS_OUTPUT.PUT_LINE for sending data back to the client. Unfortunately the client (SQLPlus in this case) calls DBMS_OUTPUT.GET_LINES to retrieve the output only when the previous database call has finished. Of course this makes sense, because otherwise some asynchronous call capability to Oracle server would be needed, which either has to interrupt the server process somehow for processing the GET_LINES, or another server process should be started for output feed.&lt;/p&gt;
&lt;p&gt;Anyway, we don’t have such functionality in Oracle, so this means that if you run snapper in a loop, you will get the output only when the loop finishes and returns control to sqlplus. This is not good enough for having continuous real-time view of your session(s) performance.&lt;/p&gt;
&lt;p&gt;Those who have looked into the header or sourcecode of my Session Snapper script have seen that if you use “trace” option and tail -f on that tracefile, you can get continuous real-time Snapper output to your screen (in addition to having that info saved in logfile). This functionality uses DBMS_SYSTEM.KSDWRT() procedure though. This means again that in order to get real-time output, you need to either grant execute priv on DBMS_SYSTEM to your monitoring user or run Snapper as SYS. Both those options violate the design goals of Snapper and may be unacceptable in real life production systems.&lt;/p&gt;
&lt;p&gt;So, to combat that, I wrote a script which still gives us real-time Snapper output without need to access DBMS_SYSTEM.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 26 Aug 2007 07:02:36 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/08/26/oracle-session-snapper-part-2-getting-most-out-of-snapper/</guid></item><item><title>Oracle 11g internals part 1: Automatic Memory Management</title><link>https://tanelpoder.com/2007/08/21/oracle-11g-internals-part-1-automatic-memory-management/</link><description>&lt;p&gt;This is my attempt for getting cheap popularity out of recent Oracle 11g release. This is not going to be another Oracle 11g new features list, I’ll be just posting any of my research findings here, in a semi-organized way.&lt;/p&gt;
&lt;p&gt;The first post is is about Automatic Memory Management. AMM manages all SGA + PGA memory together, allowing it to shift memory from SGA to PGAs and vice versa. You only need to set a MEMORY_TARGET (and if you like, MEMORY_MAX_TARGET parameter).&lt;/p&gt;
&lt;p&gt;You can read rest of the general details from documentation, I will talk about how this feature has been implemented on OSD / OS level (or at least how it looks to be implemented).&lt;/p&gt;
&lt;p&gt;When I heard about MEMORY_TARGET , then the first question that came into my mind was that how can Oracle shift shared SGA memory to private PGA memory on Unix? This would mean somehow deallocating space from existing SGA shared memory segment and releasing it for PGA use. To my knowledge the traditional SysV SHM interface is not that flexible that it could downsize and release memory from a single shared memory segment. So I started checking out how Oracle had implemented this.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 20 Aug 2007 21:15:51 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/08/21/oracle-11g-internals-part-1-automatic-memory-management/</guid></item><item><title>Oracle Session Snapper – real-time session-level performance stats for DBAs</title><link>https://tanelpoder.com/2007/08/20/oracle-session-snapper-real-time-session-level-performance-stats-for-dbas/</link><description>&lt;p&gt;A &lt;a href="http://jonathanlewis.wordpress.com/2007/08/09/volatility/" target="_blank" title="post"&gt;post&lt;/a&gt; by Jonathan Lewis inspired me to finally complete my version of the Oracle session performance snapper script, which main characteristics are&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;it reports Oracle session level performance counter and wait information in real time&lt;/li&gt;
&lt;li&gt;it does &lt;strong&gt;NOT&lt;/strong&gt; require any database objects to be created&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you are a DBA or consultant working on ad-hoc performance issues, you will like it!&lt;/p&gt;
&lt;p&gt;Are you familiar with following situation?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(Monday morning)&lt;/p&gt;
&lt;p&gt;Customer: Hey, we need your help! We have serious performance issues in our production environment. It’s a database with x000 online users, several parallel data feeds, continuous batch jobs and reporting going on.&lt;/p&gt;
&lt;p&gt;Users have started experiencing occasional bad performance and some batch jobs as well.&lt;/p&gt;
&lt;p&gt;You: Ok, lets see it. Do you have any performance monitoring tools installed?&lt;/p&gt;
&lt;p&gt;Customer: Yes, we have Xxxxx Xxxxxxxxx installed which shows us a nice green or red light on big screen depending whether there are any problems or not.&lt;/p&gt;
&lt;p&gt;You: What color is it showing now?&lt;/p&gt;
&lt;p&gt;Customer: Green&lt;/p&gt;
&lt;p&gt;You: But you still have the performance problem you described earlier?&lt;/p&gt;
&lt;p&gt;Customer: Yes&lt;/p&gt;
&lt;p&gt;You: Do you have ANY performance monitoring tools installed?&lt;/p&gt;
&lt;p&gt;Customer: Well, we also have a statspack snapshot taken every morning and evening to capture the business workload.&lt;/p&gt;
&lt;p&gt;You: Um… Ok… you know forget about it. Can I create a small package to capture some useful performance info on the problematic sessions?&lt;/p&gt;
&lt;p&gt;Customer: Yes, but we need to put the DDL scripts through the change review board which gathers every Thursday… but we can’t wait that long!&lt;/p&gt;
&lt;p&gt;You: Can we enable tracing?&lt;/p&gt;
&lt;p&gt;Customer: Enabling tracing is a change and all changes must go through review board. Also, we don’t really know which exact sessions are affected, it just happens for seemingly random ones… and we can’t just trace every session, can we?&lt;/p&gt;
&lt;p&gt;You: Ok, give me a sqlplus window and Excel, we’ll figure something out.&lt;/p&gt;
&lt;p&gt;…And now follows a tedious manual SQL execution and copy &amp;amp; paste exercise from various V$ views for getting some &lt;em&gt;meaningful&lt;/em&gt; performance information out of Oracle.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, not anymore, because &lt;a href="https://github.com/tanelpoder/tpt-oracle/blob/master/snapper.sql" target="_blank" title="https://github.com/tanelpoder/tpt-oracle/blob/master/snapper.sql"&gt;The Oracle Session Snapper&lt;/a&gt; is in town!&lt;/p&gt;
&lt;p&gt;If you know vmstat for Unix, you know it reports you various system level statistic counter deltas over a period you choose.&lt;/p&gt;
&lt;p&gt;Well, the Oracle Session Snapper output looks somewhat similar, but it reports you &lt;em&gt;session level&lt;/em&gt; deltas of Oracle v$sesstat counters, wait events and starting from 10g also session time model statistics.&lt;/p&gt;
&lt;p&gt;All info can be reported in real time, without a need for running and timing multiple SQL scripts and manual calculation of deltas.&lt;/p&gt;
&lt;p&gt;And the key unique point of the Session Snapper is – it &lt;strong&gt;does not require creation of any database objects&lt;/strong&gt;, thus no changes in the database at all! Everything is done from within a sqlplus script or anonymous PL/SQL block.&lt;/p&gt;
&lt;p&gt;This means that you will be able to get quick session-level performance snapshots even in heavily change-controlled environments, where no object creation whatsoever is allowed without going through a long process.&lt;/p&gt;
&lt;p&gt;You can read all the usage details from the script header, but here’s one example of its output:&lt;/p&gt;
&lt;pre&gt;Tanel@Sol01&amp;gt; &lt;strong&gt;@snapper out 1 3 475&lt;/strong&gt;

-- Session Snapper v1.03 by Tanel Poder (  )

--------------------------------------------------------------------------------------------------------------------------------------------
--        SID, SNAPSHOT START   , SECONDS  , TYPE, STATISTIC                               ,         DELTA,      D/SEC,     HDELTA,   HD/SEC
--------------------------------------------------------------------------------------------------------------------------------------------
DATA,     475, 20070820 01:17:47,         1, STAT, session logical reads                   ,         88232,      88232,     88.23k    88.23k
DATA,     475, 20070820 01:17:47,         1, STAT, consistent gets                         ,         88233,      88233,     88.23k    88.23k
DATA,     475, 20070820 01:17:47,         1, STAT, consistent gets from cache              ,         88232,      88232,     88.23k    88.23k
DATA,     475, 20070820 01:17:47,         1, STAT, calls to get snapshot scn: kcmgss       ,           556,        556,        556       556
DATA,     475, 20070820 01:17:47,         1, STAT, no work - consistent read gets          ,         87677,      87677,     87.68k    87.68k
DATA,     475, 20070820 01:17:47,         1, STAT, table scans (short tables)              ,           139,        139,        139       139
DATA,     475, 20070820 01:17:47,         1, STAT, table scan rows gotten                  ,       7429598,    7429598,      7.43M     7.43M
DATA,     475, 20070820 01:17:47,         1, STAT, table scan blocks gotten                ,         87676,      87676,     87.68k    87.68k
DATA,     475, 20070820 01:17:47,         1, STAT, buffer is pinned count                  ,           138,        138,        138       138
--  End of snap 1
DATA,     475, 20070820 01:17:48,         1, STAT, session logical reads                   ,         87779,      87779,     87.78k    87.78k
DATA,     475, 20070820 01:17:48,         1, STAT, consistent gets                         ,         87772,      87772,     87.77k    87.77k
DATA,     475, 20070820 01:17:48,         1, STAT, consistent gets from cache              ,         87772,      87772,     87.77k    87.77k
DATA,     475, 20070820 01:17:48,         1, STAT, calls to get snapshot scn: kcmgss       ,           552,        552,        552       552
DATA,     475, 20070820 01:17:48,         1, STAT, no work - consistent read gets          ,         87210,      87210,     87.21k    87.21k
DATA,     475, 20070820 01:17:48,         1, STAT, table scans (short tables)              ,           138,        138,        138       138
DATA,     475, 20070820 01:17:48,         1, STAT, table scan rows gotten                  ,       7389897,    7389897,      7.39M     7.39M
DATA,     475, 20070820 01:17:48,         1, STAT, table scan blocks gotten                ,         87211,      87211,     87.21k    87.21k
DATA,     475, 20070820 01:17:48,         1, STAT, buffer is pinned count                  ,           136,        136,        136       136
--  End of snap 2
DATA,     475, 20070820 01:17:49,         1, STAT, session logical reads                   ,         87580,      87580,     87.58k    87.58k
DATA,     475, 20070820 01:17:49,         1, STAT, consistent gets                         ,         87587,      87587,     87.59k    87.59k
DATA,     475, 20070820 01:17:49,         1, STAT, consistent gets from cache              ,         87587,      87587,     87.59k    87.59k
DATA,     475, 20070820 01:17:49,         1, STAT, calls to get snapshot scn: kcmgss       ,           552,        552,        552       552
DATA,     475, 20070820 01:17:49,         1, STAT, no work - consistent read gets          ,         87046,      87046,     87.05k    87.05k
DATA,     475, 20070820 01:17:49,         1, STAT, table scans (short tables)              ,           138,        138,        138       138
DATA,     475, 20070820 01:17:49,         1, STAT, table scan rows gotten                  ,       7375781,    7375781,      7.38M     7.38M
DATA,     475, 20070820 01:17:49,         1, STAT, table scan blocks gotten                ,         87041,      87041,     87.04k    87.04k
DATA,     475, 20070820 01:17:49,         1, STAT, buffer is pinned count                  ,           137,        137,        137       137
--  End of snap 3

PL/SQL procedure successfully completed.

&lt;/pre&gt;
&lt;p&gt;The output contains 3 x 1 second snapshot of session 475 doing heavy nested looping. Note that even though the CPU time used was not updated, the logical IO counts for that session had still increased.&lt;/p&gt;
&lt;p&gt;So this tool can be very valuable diagnosing what’s going on when the session seems to be 100% on CPU doing &lt;em&gt;something&lt;/em&gt;.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 19 Aug 2007 20:05:41 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/08/20/oracle-session-snapper-real-time-session-level-performance-stats-for-dbas/</guid></item><item><title>The wicked witch is dead</title><link>https://jasoneckert.github.io/myblog/the-wicked-witch-is-dead/</link><description>&lt;p&gt;&lt;img alt="SCO logo" src="scologo.jpg#right" title="SCO logo" /&gt;&lt;/p&gt;
&lt;p&gt;I consider myself to be a very patient person (all things considered) - but one thing that causes me to lose my patience is when I hear of proprietary computer companies that spread FUD (Fear, Uncertainty and Doubt) in order to keep their customers from considering other (and usually much better) technologies.&lt;/p&gt;
&lt;p&gt;While Microsoft has been the main purveyor of FUD since the early 1990s, SCO used FUD in an attempt to downplay the Linux operating system.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sun, 12 Aug 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/the-wicked-witch-is-dead/</guid></item><item><title>Server closet Buddha shrine</title><link>https://jasoneckert.github.io/myblog/server-closet-buddha-shrine/</link><description>&lt;p&gt;&lt;img alt="Buddha shrine" src="buddha.jpg#center" title="Buddha shrine" /&gt;&lt;/p&gt;
&lt;p&gt;For the past 2 years, I have had a Buddha Shrine in the server closet in my office.  I carefully researched proper Buddha Shrine requirements and styles on Google before I chose the above arrangement (Buddha must be elevated and surrounded by objects that represent tokens of life).&lt;/p&gt;
&lt;p&gt;Why did I do this?  Simple.  To speed up our current Internet access and reduce the number of times that we need to reboot/reset classroom routers (when caches fill up, etc.). Since I encourage instructors and TAs to reset their own router as necessary to maintain Internet access, I have made some easy-to-follow instructions and placed them on the wall of the server closet:&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Fri, 10 Aug 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/server-closet-buddha-shrine/</guid></item><item><title>Wie man Replikationsunterbrechung durch Deadlocks bei INSERT INTO … SELECT verhindert</title><link>https://manuel.kiessling.net/2007/08/07/wie-man-replikationsunterbrechung-durch-deadlocks-bei-insert-into-select-verhindert/</link><description>Der My-Hammer Auftragsradar, der unsere Auftragnehmer auf Wunsch regelmässig per E-Mail über neu eingestellte Auktionen anhand einstellbarer Filterkriterien informiert, baut bei jedem Durchlauf eine eigene Suchtabelle auf. Diese wird gefüllt mit einer Untermenge der Daten unserer Haupt-Auktionstabelle, nämlich nur den derzeit laufenden Auktionen.
Die Verwendung von INSERT INTO … SELECT ist hier naheliegend, zum Beispiel so:
INSERT INTO Suchtabelle &amp;nbsp;SELECT a, b, c FROM Auktionstabelle WHERE x = y</description><author>Home on The Log Book of Manuel Kießling</author><pubDate>Tue, 07 Aug 2007 18:13:00 GMT</pubDate><guid isPermaLink="true">https://manuel.kiessling.net/2007/08/07/wie-man-replikationsunterbrechung-durch-deadlocks-bei-insert-into-select-verhindert/</guid></item><item><title>Sqlplus is my second home, Part 1: HTMLizing your sqlplus output</title><link>https://tanelpoder.com/2007/08/07/sqlplus-is-my-second-home-part-1-htmlizing-your-sqlplus-output/</link><description>&lt;p&gt;I have not managed to post anything for a while, but I intend to make it up by starting this series of posts made specially for Oracle enthusiasts, geeks and maniacs among us. Here I plan to post the coolest Oracle stuff I’ve just found out and some of it may actually be useful to you!&lt;/p&gt;
&lt;p&gt;Lets start. This post is about removing the last major problem with sqlplus in everyday database and application administration work.&lt;/p&gt;
&lt;p&gt;I would say the commnd line sqlplus, combined with its script execution and Windows cmd.exe’s command history navigation capabilities, is a very powerful and fast tool for database administration and troubleshooting. This is of course if you use a set of database administration scripts, either downloaded from some reliable source or accumulated over the years of working with Oracle ( you do have such scripts, right? ;-)&lt;/p&gt;
&lt;p&gt;Now to the main weakness of sqlplus: I may have scripts carefully formatted for my screen size, however when adding more columns, I run out of screen width. When working on an application data quality troubleshooting task, I need to run some quick ad-hoc queries. Or run a query which just returns lots of data.&lt;/p&gt;
&lt;p&gt;What usually happens in such cases is illustrated very well with the output of following query:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 07 Aug 2007 17:14:23 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/08/07/sqlplus-is-my-second-home-part-1-htmlizing-your-sqlplus-output/</guid></item><item><title>Useless default documentation dilutes both code and actual documentation</title><link>https://www.databasesandlife.com/insert-documentation-here/</link><description>&lt;p&gt;IDEs can create default code, including default documentation, such as:&lt;/p&gt;
&lt;pre&gt;/**
 * Insert class or interface description here.
 */
&lt;/pre&gt;
&lt;p&gt;It would be great if people would actually write documentation. Even a single sentence to describe what the class is modeling would be helpful if it&amp;rsquo;s not obvious from the name. Or object invariants (e.g. &lt;code&gt;boughtCount &amp;lt;= offeredCount&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;To find a class without documentation is annoying. But to see such an IDE-generated phrase is a slap in the face!&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 07 Aug 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/insert-documentation-here/</guid></item><item><title>Richard Stallman talk at UW</title><link>https://jasoneckert.github.io/myblog/richard-stallman-talk-at-uw/</link><description>&lt;p&gt;&lt;img alt="Richard Stallman talk" src="rmstalk.png#center" title="Richard Stallman talk" /&gt;&lt;/p&gt;
&lt;p&gt;On July 6th, Richard Stallman gave a talk at the University of Waterloo regarding copyright and its evils.  Although slow at the beginning (perhaps because Richard was still finishing his Pepsi and introducing the features of copyright), it turned out to be a powerful and enlightening educational experience.&lt;/p&gt;
&lt;p&gt;I decided not to write a blog about it until I was able to view it again on video after my vacation and make specific notes.  You can download the whole presentation from the University of Waterloo Computer Science Club @ &lt;a href="http://csclub.uwaterloo.ca"&gt;http://csclub.uwaterloo.ca&lt;/a&gt; in OGG format.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sun, 29 Jul 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/richard-stallman-talk-at-uw/</guid></item><item><title>When Marketing chooses the cover</title><link>https://jasoneckert.github.io/myblog/when-marketing-chooses-the-cover/</link><description>&lt;p&gt;&lt;img alt="MacBook on cover" src="macbookcover.png#center" title="MacBook on cover" /&gt;&lt;/p&gt;
&lt;p&gt;I saw this book a short while ago at Chapters (book store chain in Canada).  What caught my eye was the humour on the front cover!&lt;/p&gt;
&lt;p&gt;This book is on how to secure your PC using Computer Associates Internet Security software (with a Windows Vista update!).  However, the laptop that the lady on the cover is using is a MacBook!&lt;/p&gt;
&lt;p&gt;Currently, there are no known viruses or spyware for Macs!  But I definitely agree with the subliminal advertising on the cover of this book: Simple Computer Security&amp;hellip;&amp;hellip;buy a Mac!&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 26 Jul 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/when-marketing-chooses-the-cover/</guid></item><item><title>Copying the contents of one directory into another on Linux: not as easy at it looks!</title><link>https://www.databasesandlife.com/copying-the-contents-of-one-directory-into-another-not-as-easy-at-it-looks/</link><description>&lt;p&gt;Task: You want to copy the contents of one directory into another existing directory. On Linux.&lt;/p&gt;
&lt;p&gt;I.e. if the source directory is &amp;ldquo;x&amp;rdquo; and the destination directory is the already-existing directory &amp;ldquo;y&amp;rdquo;, if there are files &amp;ldquo;x/1&amp;rdquo; and &amp;ldquo;x/2&amp;rdquo; then files &amp;ldquo;y/1&amp;rdquo; and &amp;ldquo;y/2&amp;rdquo; should be created. If &amp;ldquo;x&amp;rdquo; is an empty directory then no files in &amp;ldquo;y&amp;rdquo; should be created.&lt;/p&gt;
&lt;p&gt;Now, this is not as easy as it sounds.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 24 Jul 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/copying-the-contents-of-one-directory-into-another-not-as-easy-at-it-looks/</guid></item><item><title>Netgear WG311T under FreeBSD</title><link>https://bastian.rieck.me/blog/2007/netgear_wg311t_under_freebsd/</link><description>&lt;p&gt;The Netgear WG311T is one of the WLAN cards (802.11b/g) that &amp;ldquo;just works&amp;rdquo; under
FreeBSD. Since it uses the Atheros chipset (see the man page for the &lt;code&gt;ath&lt;/code&gt;
driver for more details), you will experience a plug and play feeling. In all
details:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kldload wlan_tkip
kldload if_ath
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should now get something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ath0: &amp;lt;Atheros 5212&amp;gt; mem 0xfeae0000-0xfeaeffff irq 23 at device 11.0 on pci3
ath0: Ethernet address: 00:11:22:33:44:55
ath0: mac 7.9 phy 4.5 radio 5.6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You are now free to use &lt;code&gt;wpa_supplicant&lt;/code&gt; to connect to your wireless networks.
If only more devices would work like this under FreeBSD&amp;hellip;&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Thu, 19 Jul 2007 15:47:30 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2007/netgear_wg311t_under_freebsd/</guid></item><item><title>Recycelter Artikel: “My-Hammer, das Fernsehen und die Serverlast”</title><link>https://manuel.kiessling.net/2007/07/17/recycelter-artikel-my-hammer-das-fernsehen-und-die-serverlast/</link><description>Vor mittlerweile auch schon wieder einer halben Ewigkeit hatte ich mal eine kurze Artikelserie zum Thema Serverlast-Problemlösungen bei MyHammer online, die ich nun wieder ausgegraben habe. Vieles entspricht gar nicht mehr den aktuell bei MyHammer eingesetzten Lösungen, aber verwahrenswert finde ich den Schrieb allemal. Leider fehlen die Grafiken, vielleicht finde ich die noch mal irgendwo.  Hier der Artikel:  Vergangenen Donnerstag zeigte das ProSieben Magazin Galileo einen ca. 10-minütigen Beitrag über My-Hammer (kurze Infos zur Sendung hier).</description><author>Home on The Log Book of Manuel Kießling</author><pubDate>Tue, 17 Jul 2007 18:13:00 GMT</pubDate><guid isPermaLink="true">https://manuel.kiessling.net/2007/07/17/recycelter-artikel-my-hammer-das-fernsehen-und-die-serverlast/</guid></item><item><title>eMac family photo frame</title><link>https://jasoneckert.github.io/myblog/emac-family-photo-frame/</link><description>&lt;p&gt;&lt;img alt="eMac photo frame" src="emacframe.jpg#center" title="eMac photo frame" /&gt;&lt;/p&gt;
&lt;p&gt;Sometimes, you just do things that bring out the geek within&amp;hellip;&amp;hellip;well&amp;hellip;&amp;hellip;today is one of those days.    Guess what you can do with the front bezel of an Apple eMac?  Make a family photo frame!&lt;/p&gt;
&lt;p&gt;Simply find a piece of glass that is 14”x11” and place it on the inside of the bezel.  Next, place your picture on the glass (preferably with a nice thick matting to add depth) and screw a 15”x12” piece of pressboard into the existing screw holes on the inside of the bezel and you will have a portrait that geeks will immediately notice when they enter your rec room.  I think I will call it the iFrame.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sun, 15 Jul 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/emac-family-photo-frame/</guid></item><item><title>Concorde Fallacy</title><link>https://www.databasesandlife.com/concorde-fallacy/</link><description>&lt;p&gt;This is a good term for a commonplace management error: &lt;a href="http://www.answers.com/topic/concorde-fallacy" rel="noopener noreferrer" target="_blank"&gt;http://www.answers.com/topic/concorde-fallacy&lt;/a&gt;&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 13 Jul 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/concorde-fallacy/</guid></item><item><title>Promoting Privacy</title><link>https://bastian.rieck.me/blog/2007/promoting_privacy/</link><description>&lt;p&gt;I am sure that most of the people actually bothering to read this blog had to explain at some point in their lives to other people why they actually care about encrypting mails or other (sensitive) data. I, for one, mostly respond something like this:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Because I am a really paranoid person. I do not trust a government that is unable to see the point of my personal freedom and my privacy. There are many things that just are not anyone else&amp;rsquo;s business.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Sadly, at this point of the conversation most people stare at me. They utter things like &amp;ldquo;&lt;em&gt;If you have nothing to hide, you have nothing to fear!&lt;/em&gt;&amp;rdquo; or, worse, &amp;ldquo;&lt;em&gt;If you are not doing anything illegal you do not have to bitch about people knowing it!&lt;/em&gt;&amp;rdquo;. (This attitude explains why I don&amp;rsquo;t talk to strangers.)&lt;/p&gt;
&lt;p&gt;Fortunately, two people try to promote the lost art of information protection. One is a professor who has written a rather good article about the faults of the aforementioned arguments. You can find it &lt;a href="http://papers.ssrn.com/sol3/papers.cfm?abstract_id=998565"&gt;at the SSRN&lt;/a&gt; (select &amp;ldquo;anonymous download&amp;rdquo;. It is quite funny that one has to divulge private information for downloading a paper. But then again, life is pretty funny sometimes.). Sadly, it is not technical (i.e. it does not show the layman some ways to protect her/his privacy) but rather a kind of guideline on how to deal with people that do not get the point of privacy. &lt;del&gt;The other person is x127 who has written a German article about &lt;a href="http://www.nic-nac-project.de/~gyneu/blog/?eid=44"&gt;encrypting mails with Mozilla Thunderbird and Enigmail&lt;/a&gt; some time ago.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;Like all good books about mathematics, I leave the details of how to convince people to encrypt, to think, to care etc. as an exercise for the reader&amp;mdash;you.&lt;/p&gt;
&lt;p&gt;Hopefully, with the new (German) laws that are under way, more and more people see the importance of not sharing everything with their governments (with Facebook/StudiVZ, MySpace etc. it is hard enough to remain anonymous, anyway). To quote Thomas Jefferson:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;&lt;strong&gt;I have sworn upon the altar of god eternal hostility against every form of tyranny over the mind of man.&lt;/strong&gt;&amp;rdquo;&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Thu, 12 Jul 2007 15:10:15 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2007/promoting_privacy/</guid></item><item><title>Sony Vaio Support (Day 12)</title><link>https://www.databasesandlife.com/sony-vaio-support-day-12/</link><description>&lt;p&gt;Sony rang on Friday. They wanted to know the guarantee number (the number that I don&amp;rsquo;t have, which should have been on the invoice; the invoice which originated from them, and I&amp;rsquo;ve sent them back twice already).&lt;/p&gt;
&lt;p&gt;I took the opportunity to ask how the repair was going (as their website where you can track the repairs doesn&amp;rsquo;t work). They told me the battery was broken and they had to send off for a new one, which hadn&amp;rsquo;t arrived yet. There are two things wrong with that:&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 11 Jul 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/sony-vaio-support-day-12/</guid></item><item><title>Roughing it on vacation</title><link>https://jasoneckert.github.io/myblog/roughing-it-on-vacation/</link><description>&lt;p&gt;&lt;img alt="Dwight" src="dwight.png#center" title="Dwight" /&gt;&lt;/p&gt;
&lt;p&gt;Yup - it’s vacation time again!  And this next week I plan to do nothing but relax, get a tan, drink “Muskoka Dry Pale Ginger Ale” and read a few books that I haven’t had the time to open yet.  And yes, my daughter is going to swim all week long - that is her in the water with the kids from the cottage next door.&lt;/p&gt;
&lt;p&gt;Now you are probably wondering why I am blogging on my vacation&amp;hellip;&amp;hellip;shouldn’t a vacation be devoid of TV/phones/Internet/computers?  Well, in a way, I am abandoning technology for the whole week - I am writing this blog on a greyscale PowerBook 140 (1992), saving my work in ClarisWorks to a floppy, and transporting it to my current Macintosh when I return via an external USB floppy drive.  How RETRO!  Now that is what I call “roughing it”.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sat, 07 Jul 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/roughing-it-on-vacation/</guid></item><item><title>A Foray into Number Theory with Haskell</title><link>https://www.akalin.com/number-theory-haskell-foray</link><description>&lt;div class="p"&gt;I encountered
&lt;a href="http://programming.reddit.com/info/216p9/comments"&gt;an
interesting problem&lt;/a&gt; on reddit a few days ago which can be
paraphrased as follows:

&lt;blockquote&gt;&lt;p&gt;Find a perfect square \(s\) such that \(1597s + 1\) is also
  perfect square.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/div&gt;

&lt;p&gt;After reading the discussion about implementing a brute-force
algorithm to solve the problem and spending a futile half-hour or so
trying my hand at find a better way, someone noticed that the problem
was an instance
of &lt;a href="http://en.wikipedia.org/wiki/Pell%27s_equation"&gt;Pell's
equation&lt;/a&gt; which is known to have an elegant and fast solution;
indeed, he posted
a &lt;a href="http://programming.reddit.com/info/216p9/comments/c21dpn"&gt;one-liner
in Mathematica&lt;/a&gt; solving the given problem. However, I wanted to try
coding up the solution myself as the Mathematica solution, while
succinct, isn't very enlightening since the heavy lifting is already
done by a built-in function and an arbitrary constant was used for this
particular instance of Pell's equation.&lt;/p&gt;

&lt;p&gt;Pell's equation is simply the
&lt;a href="http://en.wikipedia.org/wiki/Diophantine_equation"&gt;Diophantine
  equation&lt;/a&gt; \(x^2 - dy^2 = 1\) for a given
\(d\)&lt;sup&gt;&lt;a href="#fn1" id="r1"&gt;[1]&lt;/a&gt;&lt;/sup&gt;; being Diophantine means
that all variables involved take on only integer values. (In our
original problem, \(d\) is 1597 and we are asked for \(y^2\).) The
solution involves finding the &lt;em&gt;continued fraction expansion&lt;/em&gt; of
\(\sqrt{d}\), finding the first &lt;em&gt;convergent&lt;/em&gt; of the expansion
that satisfies Pell's equation, and then generating all other
solutions from that
&lt;em&gt;fundamental solution&lt;/em&gt;. We rule out the trivial solution \(x =
1\), \(y = 0\) which also implies that if \(d\) is a perfect square then
there is no solution.&lt;/p&gt;

&lt;p&gt;A continued fraction is an expression of the form:
\[
  x = a_0 + \cfrac{1}{a_1 + \cfrac{1}{a_2 + \cfrac{1}{a_3 + \cfrac{1}{\ddots\,}}}}
\]
where all \(a_i\) are integers and all but the
first one are positive.  The standard math notation for continued
fractions is quite unwieldy so from now on we'll use \(\left \langle
a_0; a_1, a_2, \dotsc \right \rangle\) instead of the above.&lt;/p&gt;

&lt;div class="p"&gt;The theory of continued fractions is a rich and beautiful one but
  for now we'll just state a few facts:

  &lt;ul&gt;
    &lt;li&gt;The continued fraction expansion of a number is (mostly) unique.&lt;/li&gt;
    &lt;li&gt;The continued fraction expansion of a rational number is
      finite.&lt;/li&gt;
    &lt;li&gt;The continued fraction expansion of a irrational number is
      infinite.&lt;/li&gt;
    &lt;li&gt;A &lt;a href="http://en.wikipedia.org/wiki/Quadratic_surd"&gt;quadratic
      surd&lt;/a&gt; is a number of the form \(\frac{a + \sqrt{b}}{c}\)
      where
      \(a\), \(b\), and \(c\) are integers.  Except
      maybe for the first term, the continued fraction expansion of a
      quadratic surd is periodic; that is, it repeats forever after a
      certain number of terms. This applies in particular to the square root
      of an integer.&lt;/li&gt;
    &lt;li&gt;Truncating an infinite continued fraction to get a finite
      continued fraction gives (in some sense) an optimal rational
      approximation to the irrational number represented by the infinite
      continued fraction.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class="p"&gt;Given a quadratic surd it is fairly easy to manipulate it into the
form \(a + \frac{1}{q}\) where \(q\) is another quadratic surd. This fact
can be used to come up with an algorithm to find the continued
fraction expansion of a square
root. Wikipedia &lt;a href="http://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Continued_fraction_expansion"&gt;explains
it pretty well&lt;/a&gt; so I won't go over it, but here is my Haskell
implementation:

&lt;pre class="code-container"&gt;&lt;code class="language-haskell"&gt;sqrt_continued_fraction n = [ a_i | (_, _, a_i) &amp;lt;- mdas ]
    where
      mdas = iterate get_next_triplet (m_0, d_0, a_0)

      m_0 = 0
      d_0 = 1
      a_0 = truncate $ sqrt $ fromIntegral n

      get_next_triplet (m_i, d_i, a_i) = (m_j, d_j, a_j)
          where
            m_j = d_i * a_i - m_i
            d_j = (n - m_j * m_j) `div` d_i
            a_j = (a_0 + m_j) `div` d_j&lt;/code&gt;&lt;/pre&gt;

and here are some examples:

&lt;pre class="code-container"&gt;&lt;code class="language-shell"&gt;Prelude Main&gt; take 20 $ sqrt_continued_fraction 2
[1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]

Prelude Main&gt; take 20 $ sqrt_continued_fraction 103
[10,6,1,2,1,1,9,1,1,2,1,6,20,6,1,2,1,1,9,1]

Prelude Main&gt; take 20 $ sqrt_continued_fraction 36
[6,*** Exception: divide by zero&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;(Note that we're assuming that we won't be called with a perfect
square. Also, do you notice anything interesting about the periodic
portion of the continued fractions, particularly of \(\sqrt{103}\)?)&lt;/p&gt;

&lt;div class="p"&gt;For those who are unfamiliar with Haskell, here's a quick list of key facts:

  &lt;ul&gt;
    &lt;li&gt;The first line takes a list of triplets and forms a list of all
      third elements, which is what we're interested in. (The other two
      elements of the triplet are auxiliary variables used by the
      algorithm.)&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;iterate&lt;/code&gt; is a function which takes in another
      function &lt;code&gt;f&lt;/code&gt;, an initial variable &lt;code&gt;x&lt;/code&gt;, and
      returns the infinite list &lt;code&gt;[ x, f(x), f(f(x)), f(f(f(x))),
  ... ]&lt;/code&gt;.&lt;/li&gt;
    &lt;li&gt;Note that Haskell
      uses &lt;a href="http://en.wikipedia.org/wiki/Lazy_evaluation"&gt;lazy
      evaluation&lt;/a&gt; and so this function does not take an infinite amount
      of time to run; all its elements are evaluated (and memoized) only
      when needed.&lt;/li&gt;
    &lt;li&gt;The rest of the function is a straightforward representation of
      the meat of the algorithm described in the above Wikipedia entry.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;It may not be clear what \(\sqrt{d}\) and its continued fraction
expansion has to do with solving Pell's equation. However, notice that
if \(x\) and \(y\) solve Pell's equation then manipulating Pell's equation
to get \(\sqrt{d}\) on one side reveals that \(\frac{x}{y}\) is a good
approximation of \(\sqrt{n}\). In fact, it is so good that you can prove
that \(\frac{x}{y}\) &lt;em&gt;must&lt;/em&gt; come from truncating the continued
fraction expansion of \(\sqrt{d}\).&lt;/p&gt;

&lt;p&gt;This leads us to the following: if you have an infinite continued
fraction \(\left \langle a_0; a_1, a_2, \dotsc \right \rangle\) you can
truncate it into a finite continued fraction \(\left \langle a_0; a_1,
a_2, \dotsc, a_i \right \rangle\) and simplify it into the rational
number \(\frac{p_i}{q_i}\).  The sequence \(\frac{p_0}{q_0},
\frac{p_1}{q_1}, \frac{p_2}{q_2}, \dotsc\) forms the
&lt;a href="http://en.wikipedia.org/wiki/Convergent_%28continued_fraction%29"&gt;&lt;em&gt;convergents&lt;/em&gt;&lt;/a&gt;
of \(\left \langle a_0; a_1, a_2, \dotsc \right \rangle\) and converges to
its represented irrational number.&lt;/p&gt;

&lt;div class="p"&gt;It turns out you can calculate \(p_{i+1}\) and \(q_{i+1}\)
efficiently from \(p_i\), \(q_i\), \(p_{i-1}\), \(q_{i-1}\), and \(a_{i+1}\)
using
the &lt;a href="http://en.wikipedia.org/wiki/Fundamental_recurrence_formulas"&gt;&lt;em&gt;fundamental
recurrence formulas&lt;/em&gt;&lt;/a&gt; (which can be proved by induction). Here
is my Haskell implementation:

&lt;pre class="code-container"&gt;&lt;code class="language-haskell"&gt;get_convergents (a_0 : a_1 : as) = pqs
    where
      pqs = (p_0, q_0) : (p_1, q_1) :
            zipWith3 get_next_convergent pqs (tail pqs) as

      p_0 = a_0
      q_0 = 1

      p_1 = a_1 * a_0 + 1
      q_1 = a_1

      get_next_convergent (p_i, q_i) (p_j, q_j) a_k = (p_k, q_k)
          where
            p_k = a_k * p_j + p_i
            q_k = a_k * q_j + q_i&lt;/code&gt;&lt;/pre&gt;

and some more examples:

&lt;pre class="code-container"&gt;&lt;code class="language-shell"&gt;Prelude Main&gt; take 8 $ get_convergents $ sqrt_continued_fraction 2
[(1,1),(3,2),(7,5),(17,12),(41,29),(99,70),(239,169),(577,408)]

Prelude Main&gt; take 8 $ get_convergents $ sqrt_continued_fraction 103
[(10,1),(61,6),(71,7),(203,20),(274,27),(477,47),(4567,450),(5044,497)]

Prelude Main&gt; take 8 $ get_convergents $ sqrt_continued_fraction 1597
[(39,1),(40,1),(1039,26),(1079,27),(2118,53),(3197,80),(27694,693),(113973,2852)]

Prelude Main&gt; let divFrac (x, y) = (fromInteger x) / (fromInteger y)

Prelude Main&gt; take 8 $ map divFrac $ get_convergents $ sqrt_continued_fraction 2
[1.0,1.5,1.4,1.4166666666666667,1.4137931034482758,1.4142857142857144,1.4142011834319526,1.4142156862745099]

Prelude Main&gt; take 8 $ map divFrac $ get_convergents $ sqrt_continued_fraction 103
[10.0,10.166666666666666,10.142857142857142,10.15,10.148148148148149,10.148936170212766,10.148888888888889,10.148893360160965]

Prelude Main&gt; take 8 $ map divFrac $ get_convergents $ sqrt_continued_fraction 1597
[39.0,40.0,39.96153846153846,39.96296296296296,39.9622641509434,39.9625,39.96248196248196,39.9624824684432]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="p"&gt;Here are a few more quick facts to help those unfamiliar with
  Haskell:

  &lt;ul&gt;
    &lt;li&gt;The expression &lt;code&gt;a : as&lt;/code&gt; forms a new list from the
      element &lt;code&gt;a&lt;/code&gt; and the existing list &lt;code&gt;as&lt;/code&gt;
      (equivalent to &lt;code&gt;cons&lt;/code&gt; in Lisp).&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;zipWith3&lt;/code&gt; is a function that takes in a
      function &lt;code&gt;f&lt;/code&gt;, three lists &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;b&lt;/code&gt;,
      and &lt;code&gt;c&lt;/code&gt; of the same (possibly infinite)
      length &lt;code&gt;n&lt;/code&gt;, and forms the new list
      &lt;code&gt;[ f(a[0], b[0], c[0]), f(a[1], b[1], c[1]), ..., f(a[n], b[n],
  c[n]) ]&lt;/code&gt;.&lt;/li&gt;
    &lt;li&gt;Note that the result of &lt;code&gt;zipWith3&lt;/code&gt; is part of the
      variable &lt;code&gt;pqs&lt;/code&gt; which itself appears (twice!) in the
      arguments to &lt;code&gt;zipWith3&lt;/code&gt;. This is a Haskell idiom and
      reflects the fact that the recurrence formulas define a convergent
      in terms of its two previous convergents. A simpler example (using
      the Fibonacci sequence) can be found in the
      &lt;a href="http://en.wikipedia.org/wiki/Lazy_evaluation"&gt;Wikipedia
        entry for lazy evaluation&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;Haskell has built-in data types for integers of arbitrary size
      which is necessary as the numerators and denominators of the
      convergents get large quickly. In fact, Haskell has built-in
      data types for rational numbers (represented as fractions) but it
      doesn't help us much here.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class="p"&gt;Since we are guaranteed that some convergent eventually satisfies
  Pell's equation, we can write a simple function to generate all
  convergents, test each one to see if it satisfies Pell's equation,
  and return the first one we see. Here is the Haskell implementation:

&lt;pre class="code-container"&gt;&lt;code class="language-haskell"&gt;get_pell_fundamental_solution n = head $ solutions
    where
      solutions = [ (p, q) | (p, q) &amp;lt;- convergents, p * p - n * q * q == 1 ]

      convergents = get_convergents $ sqrt_continued_fraction n&lt;/code&gt;&lt;/pre&gt;

Note the use of the
  Haskell's &lt;a href="http://en.wikipedia.org/wiki/List_comprehension"&gt;list
  comprehension&lt;/a&gt; syntax, similar to Python, which expresses what I
just described in a matter reminiscent of set notation.&lt;/div&gt;

&lt;div class="p"&gt;Here is the full Haskell program designed so its output may be
  conveniently piped
  to &lt;a href="http://en.wikipedia.org/wiki/Bc_programming_language"&gt;bc&lt;/a&gt;
  for verification:

&lt;pre class="code-container"&gt;&lt;code class="language-haskell"&gt;module Main where

import System (getArgs)

sqrt_continued_fraction :: (Integral a) =&gt; a -&gt; [a]
{- ... the sqrt_continued_fraction function explained above ... -}

get_convergents :: (Integral a) =&gt; [a] -&gt; [(a, a)]
{- ... the get_convergents function explained above ... -}

get_pell_fundamental_solution :: (Integral a) =&gt; a -&gt; (a, a)
{- ... the get_pell_fundamental_solution function explained above ... -}

main :: IO ()
main = do
  args &amp;lt;- System.getArgs
  let d      = (read $ head $ args :: Integer)
      (p, q) = get_pell_fundamental_solution d in
    putStr $ "d = " ++ (show d) ++ "\n" ++
             "p = " ++ (show p) ++ "\n" ++
             "q = " ++ (show q) ++ "\n" ++
             "p^2 - d * q^2 == 1\n"&lt;/code&gt;&lt;/pre&gt;

and here is it in action:

&lt;pre class="code-container"&gt;&lt;code class="language-shell"&gt;$ ./solve_pell 1597
d = 1597
p = 519711527755463096224266385375638449943026746249
q = 13004986088790772250309504643908671520836229100
p^2 - d * q^2 == 1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The solution to the original problem is therefore:&lt;br /&gt;
&lt;strong&gt;5054112910466227478111803017176109047976100000000.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that we've found a method to get &lt;em&gt;a&lt;/em&gt; solution, the
question remains as to whether it's the only one. In fact it is not,
but it is the minimal one, and all other solutions (of which there are
an infinite number) can be generated from this fundamental one with a
simple recurrence relation as described on
the &lt;a href="http://en.wikipedia.org/wiki/Pell%27s_equation#Solution_technique"&gt;Wikipedia
article&lt;/a&gt;. My program above can be easily extended to generate all
solutions instead of just the fundamental one (I'll leave it to the
reader as an exercise).&lt;/p&gt;

&lt;p&gt;One remaining question is the efficiency of this algorithm. For
  simplicity, let's neglect the cost of the arbitrary-precision
  arithmetic involved and assume that the incremental cost of generating
  each term of the continued fraction expansion and the convergents is
  constant. Then the main cost is just how many convergents we have to
  generate before we find one that satisfies Pell's equation. In fact,
  it turns out that this depends on the length of the period of the
  continued fraction expansion of \(\sqrt{d}\), which has a rough upper
  bound of \(O(\ln(d \sqrt{d}))\). Therefore, the cost of solving Pell's
  equation (in terms of how many convergents to generate) for a given
  \(n\)-digit number is \(O(n 2^{n/2})\). This is pretty expensive already,
  although it's still much better than brute-force search (which is on
  the order of exponentiating the above expression). Can we do better?
  Well, sort of; it turns out the length of the answer is of the same
  order as the expression above, so any algorithm that explicitly
  outputs a solution necessarily takes that long. However, if you can
  somehow factor \(d\) into \(s d'\), where \(s\) is a perfect square and \(d'\)
  is &lt;a href="http://en.wikipedia.org/wiki/Squarefree"&gt;squarefree&lt;/a&gt;
  (i.e., not divisible by any perfect square), then you can solve Pell's
  equation for the smaller number \(d'\) and output the solution for \(d'\)
  as the smaller fundamental solution and an expression raised to a
  certain power involving it. Note that in general this involves
  factoring \(d\), another hard problem, but for which there exists tons
  of prior work. An interested reader can peruse the papers
  by &lt;a href="http://www.ams.org/notices/200202/fea-lenstra.pdf"&gt;Lenstra&lt;/a&gt;
  and &lt;a href="http://www.math.nyu.edu/~crorres/Archimedes/Cattle/cattle_vardi.pdf"&gt;Vardi&lt;/a&gt;
  for more details.&lt;/p&gt;

&lt;p&gt;As a final note, one of the things I really like about number
  theory is that investigating such a simple program can lead you down
  surprising avenues of mathematics and computational theory. In fact,
  I've had to omit a lot of things I had planned to say to avoid growing
  this entry to be longer than it already is. Hopefully, this entry
  helps someone else learn more about this interesting corner of number
  theory.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Like this post? Subscribe to
  &lt;!-- The image is 256x256, the center of the dot is 189 pixels from the
     top, and the radius of the dot is 24. Therefore, the dot is 43/256 =
     0.16796875 of the image height above the bottom.--&gt;
&lt;a href="feed/atom"&gt;my feed &lt;img alt="RSS icon" src="feed-icon.svg" /&gt;&lt;/a&gt;

  or follow me on
  &lt;a href="https://twitter.com/fakalin"&gt;Twitter &lt;img alt="Twitter icon" src="twitter-icon.svg" /&gt;&lt;/a&gt;.&lt;/p&gt;


&lt;section class="footnotes"&gt;
  &lt;header&gt;
    &lt;h2&gt;Footnotes&lt;/h2&gt;
  &lt;/header&gt;

  &lt;p id="fn1"&gt;[1] As a rule we'll avoid considering trivial cases and
      re-stating obvious assumptions (like \(d\) having to be a positive
      integer). &lt;a href="#r1"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;</description><author>Fred Akalin</author><pubDate>Fri, 06 Jul 2007 10:00:00 GMT</pubDate><guid isPermaLink="true">https://www.akalin.com/number-theory-haskell-foray</guid></item><item><title>Hibernate, Boolean Fields, and MySQL 5.x</title><link>https://www.databasesandlife.com/hibernate-boolean-fields-mysql-50/</link><description>&lt;p class="intro"&gt;There's a problem persisting boolean fields using Hibernate 3.2.2 to MySQL 5.0, if you allow Hibernate to generate your schema, and you leave Hibernate to generate the schema in the default way. It works fine on MySQL 4.1 and it doesn't matter if you use boolean (primitive) or Boolean (object) types for the fields.&lt;/p&gt;
&lt;p&gt;With a class such as:&lt;/p&gt;
&lt;pre&gt;public class MyObject {
   protected boolean myField;
   public boolean getMyField() { return myField; }
   public void setMyField(boolean x) { myField = x; }
}
&lt;/pre&gt;
&lt;p&gt;And a Hibernate mapping such as:&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 04 Jul 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/hibernate-boolean-fields-mysql-50/</guid></item><item><title>Table of Contents of the Family Guide to Digital Freedom, 2007 Edition</title><link>https://stop.zona-m.net/2007/07/table-of-contents-of-the-family-guide-to-digital-freedom-2007-edition/</link><description>&lt;p&gt;The 2007 edition of the Family Guide to Digital Freedom consists of less than 60 chapters. Almost all of them are very short (the printed version was slightly above 200 pages). Some of the longest chapters have been divided in two parts for this online version.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Mon, 02 Jul 2007 05:59:59 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/table-of-contents-of-the-family-guide-to-digital-freedom-2007-edition/</guid></item><item><title>Generate Javadoc HTML only for public members</title><link>https://www.databasesandlife.com/generate-javadoc-html-only-for-public-members/</link><description>&lt;p&gt;In Java there are the classic four protection levels which members (fields and methods) can have: &lt;code&gt;private&lt;/code&gt;, &lt;code&gt;protected&lt;/code&gt;, package-level and &lt;code&gt;public&lt;/code&gt;. Any member can have Javadoc (including private members). But when one generates the Javadoc, which protected levels should be included?&lt;/p&gt;
&lt;p&gt;Generated Javadoc is used by humans. These humans are probably not you. And thus are probably clients of your classes, either within or outside of your organization. It&amp;rsquo;s possible, although unlikely, that they may be able to access package-level members. It&amp;rsquo;s possible they may need to subclass your class, although in (nearly) all cases I can conceive of, they won&amp;rsquo;t do that without looking at your source code.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 02 Jul 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/generate-javadoc-html-only-for-public-members/</guid></item><item><title>A Potential Future: Dinner talks in 2030</title><link>https://stop.zona-m.net/2007/07/a-potential-future-dinner-talks-in-2030/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/a-potential-future-dinner-talks-in-2030/</guid></item><item><title>Are computers really needed in (basic) education, part 2</title><link>https://stop.zona-m.net/2007/07/are-computers-really-needed-in-basic-education-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/are-computers-really-needed-in-basic-education-part-2/</guid></item><item><title>Are computers really needed in (basic) education?</title><link>https://stop.zona-m.net/2007/07/are-computers-really-needed-in-basic-education/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/are-computers-really-needed-in-basic-education/</guid></item><item><title>Are digital communications safe? Can they be used without hassles?</title><link>https://stop.zona-m.net/2007/07/are-digital-communications-safe-can-they-be-used-without-hassles/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/are-digital-communications-safe-can-they-be-used-without-hassles/</guid></item><item><title>Are digital communications safe? Can they be used without hassles? Part 2</title><link>https://stop.zona-m.net/2007/07/are-digital-communications-safe-can-they-be-used-without-hassles-part-2/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/are-digital-communications-safe-can-they-be-used-without-hassles-part-2/</guid></item><item><title>Are our governments spying on us? How much?</title><link>https://stop.zona-m.net/2007/07/are-our-governments-spying-on-us-how-much/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/are-our-governments-spying-on-us-how-much/</guid></item><item><title>Are our governments spying on us? How much? Part 2</title><link>https://stop.zona-m.net/2007/07/are-our-governments-spying-on-us-how-much-part-2/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;(continues from &lt;a href="https://stop.zona-m.net/2007/07/are-our-governments-spying-on-us-how-much"&gt;here&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="is-it-legal-to-protect-personal-information"&gt;Is it legal to protect personal information?&lt;/h2&gt;
&lt;p&gt;It is possible, in order to keep private any personal files you may have on your computer, to digitally encode them. In some countries, however, &lt;a href="http://news.bbc.co.uk/2/hi/technology/4794383.stm"&gt;you could already be prosecuted if you don&amp;rsquo;t renounce this protection when the Police &amp;ldquo;ask&amp;rdquo; you to do so&lt;/a&gt;.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/are-our-governments-spying-on-us-how-much-part-2/</guid></item><item><title>Are Public Websites Done Right?</title><link>https://stop.zona-m.net/2007/07/are-public-websites-done-right/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/are-public-websites-done-right/</guid></item><item><title>Can freedom of speech and participation be actually practiced?</title><link>https://stop.zona-m.net/2007/07/can-freedom-of-speech-and-participation-be-actually-practiced/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/can-freedom-of-speech-and-participation-be-actually-practiced/</guid></item><item><title>Can freedom of speech and participation be actually practiced? Part 2</title><link>https://stop.zona-m.net/2007/07/can-freedom-of-speech-and-participation-be-actually-practiced-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/can-freedom-of-speech-and-participation-be-actually-practiced-part-2/</guid></item><item><title>Can I Publish My Own Movies?</title><link>https://stop.zona-m.net/2007/07/can-i-publish-my-own-movies/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/can-i-publish-my-own-movies/</guid></item><item><title>Conclusion: act and spread the word</title><link>https://stop.zona-m.net/2007/07/conclusion-act-and-spread-the-word/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/conclusion-act-and-spread-the-word/</guid></item><item><title>Do we still have some privacy, part 2</title><link>https://stop.zona-m.net/2007/07/do-we-still-have-some-privacy-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/do-we-still-have-some-privacy-part-2/</guid></item><item><title>Do we still have some privacy?</title><link>https://stop.zona-m.net/2007/07/do-we-still-have-some-privacy/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/do-we-still-have-some-privacy/</guid></item><item><title>Do We Still Need Papyrus?</title><link>https://stop.zona-m.net/2007/07/do-we-still-need-papyrus/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/do-we-still-need-papyrus/</guid></item><item><title>Does Fighting the Digital Dangers Destroy Jobs?</title><link>https://stop.zona-m.net/2007/07/does-fighting-the-digital-dangers-destroy-jobs/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;h1 id="does-fighting-the-digital-dangers-destroy-jobs"&gt;Does Fighting the Digital Dangers Destroy Jobs?&lt;/h1&gt;
&lt;p&gt;In order to answer this question correctly it is useful to look separately at two quite different worlds. The first is the one which consists of all those who directly make a living &lt;em&gt;today&lt;/em&gt; from the current  situation. Almost all these investors, companies and workers can be divided into two large classes. One is that branch of the Information Technology industry which develops and markets proprietary software. The other is the entertainment industry, or at least that part of it which produces and redistributes movies, music and so on relying heavily on &lt;a href="https://stop.zona-m.net/2007/07/what-is-this-drm-thing-i-keep-hearing-about/"&gt;DRM&lt;/a&gt; and extensions of copyright as broad as possible.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/does-fighting-the-digital-dangers-destroy-jobs/</guid></item><item><title>Does it make sense to buy a computer and not install software on it?</title><link>https://stop.zona-m.net/2007/07/does-it-make-sense-to-buy-a-computer-and-not-install-software-on-it/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/does-it-make-sense-to-buy-a-computer-and-not-install-software-on-it/</guid></item><item><title>Does Software pollute, part 2</title><link>https://stop.zona-m.net/2007/07/does-software-pollute-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/does-software-pollute-2/</guid></item><item><title>Does Software pollute?</title><link>https://stop.zona-m.net/2007/07/does-software-pollute/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/does-software-pollute/</guid></item><item><title>Does software waste energy?</title><link>https://stop.zona-m.net/2007/07/does-software-waste-energy/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/does-software-waste-energy/</guid></item><item><title>Does software waste energy? part 2</title><link>https://stop.zona-m.net/2007/07/does-software-waste-energy-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/does-software-waste-energy-part-2/</guid></item><item><title>How All Internet Users Can Fight The Digital Dangers</title><link>https://stop.zona-m.net/2007/07/how-all-internet-users-can-fight-the-digital-dangers/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/how-all-internet-users-can-fight-the-digital-dangers/</guid></item><item><title>How Can A Parent Fight The Digital Dangers?</title><link>https://stop.zona-m.net/2007/07/how-can-a-parent-fight-the-digital-dangers/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/how-can-a-parent-fight-the-digital-dangers/</guid></item><item><title>How much do we all pay for software, part 2</title><link>https://stop.zona-m.net/2007/07/how-much-do-we-all-pay-for-software-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/how-much-do-we-all-pay-for-software-part-2/</guid></item><item><title>How much do we all pay for software?</title><link>https://stop.zona-m.net/2007/07/how-much-do-we-all-pay-for-software/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/how-much-do-we-all-pay-for-software/</guid></item><item><title>How much of my life is digital, part 2</title><link>https://stop.zona-m.net/2007/07/how-much-of-my-life-is-digital-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/how-much-of-my-life-is-digital-part-2/</guid></item><item><title>How much of my life is digital?</title><link>https://stop.zona-m.net/2007/07/how-much-of-my-life-is-digital/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/how-much-of-my-life-is-digital/</guid></item><item><title>How to recognize a really good ICT School Program, and why</title><link>https://stop.zona-m.net/2007/07/how-to-recognize-a-really-good-ict-school-program-and-why/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Regardless of its actual cost, sending a child to a good school is always a huge investment in the future. The relevance, inside school programs, of Information and Communication Technology (ICT), that is how to correctly use computers or telecommunications devices for fun and profit, is constantly increasing. This is a good and necessary thing, even if often it is done just to be trendy and &lt;a href="https://stop.zona-m.net/2007/07/are-computers-really-needed-in-basic-education/"&gt;some families are getting tired of it&lt;/a&gt;.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/how-to-recognize-a-really-good-ict-school-program-and-why/</guid></item><item><title>How to recognize a really good ICT School Program, and why, part 2</title><link>https://stop.zona-m.net/2007/07/how-to-recognize-a-really-good-ict-school-program-and-why-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/how-to-recognize-a-really-good-ict-school-program-and-why-part-2/</guid></item><item><title>How to tell if all the programs and games inside my PC are legally usable</title><link>https://stop.zona-m.net/2007/07/how-to-tell-if-all-the-programs-and-games-inside-my-pc-are-legally-usable/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/how-to-tell-if-all-the-programs-and-games-inside-my-pc-are-legally-usable/</guid></item><item><title>Ignorance and Lack Of Interest</title><link>https://stop.zona-m.net/2007/07/ignorance-and-lack-of-interest/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/ignorance-and-lack-of-interest/</guid></item><item><title>Is E-Voting a solution? To which problem?</title><link>https://stop.zona-m.net/2007/07/is-e-voting-a-solution-to-which-problem/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt; and an example of the issues presented in my &lt;a href="http://mfioretti.com/courses/online-course-digital-citizens-basics/"&gt;Digital Citizens Basics course&lt;/a&gt;. Please do read its &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;introduction&lt;/a&gt; to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;E-voting is coming, or has already arrived, in my Country. How can I understand if it&amp;rsquo;s implemented properly, without risks of abuse? What is the right way to e-vote?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s start with the real question that almost nobody asks: is e-voting necessary in the first place? Does it really makes any sense at all?&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/is-e-voting-a-solution-to-which-problem/</guid></item><item><title>Is E-Voting a solution? To which problem? Part 2</title><link>https://stop.zona-m.net/2007/07/is-e-voting-a-solution-to-which-problem-part-2/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;(the first parter of this chapter is &lt;a href="https://stop.zona-m.net/2007/07/is-e-voting-a-solution-to-which-problem/"&gt;here&lt;/a&gt;)&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/is-e-voting-a-solution-to-which-problem-part-2/</guid></item><item><title>Is it OK for a School or Charity to accept software donations?</title><link>https://stop.zona-m.net/2007/07/is-it-ok-for-a-school-or-charity-to-accept-software-donations/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/is-it-ok-for-a-school-or-charity-to-accept-software-donations/</guid></item><item><title>Is it technically possible to block or restrict Internet Access?</title><link>https://stop.zona-m.net/2007/07/is-it-technically-possible-to-block-or-restrict-internet-access/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/is-it-technically-possible-to-block-or-restrict-internet-access/</guid></item><item><title>Is that really you?</title><link>https://stop.zona-m.net/2007/07/is-that-really-you/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In a digital world, complete and real anonymity online is a mere illusion unless you take a lot of steps, including several ones which may very likely be illegal or not allowed by the contracts offered by any Internet Access Provider.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/is-that-really-you/</guid></item><item><title>Living among digits and hackers: survival tips</title><link>https://stop.zona-m.net/2007/07/living-among-digits-and-hackers-survival-tips/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/living-among-digits-and-hackers-survival-tips/</guid></item><item><title>Must all software, be free, or all proprietary?</title><link>https://stop.zona-m.net/2007/07/must-all-software-be-free-or-all-proprietary/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/must-all-software-be-free-or-all-proprietary/</guid></item><item><title>Must We All Become Computer Programmers?</title><link>https://stop.zona-m.net/2007/07/must-we-all-become-computer-programmers/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/must-we-all-become-computer-programmers/</guid></item><item><title>My child wants to be a hacker. Should I worry?</title><link>https://stop.zona-m.net/2007/07/my-child-wants-to-be-a-hacker-should-i-worry/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/my-child-wants-to-be-a-hacker-should-i-worry/</guid></item><item><title>My children "share files" with their friends: are they always criminals, part 2</title><link>https://stop.zona-m.net/2007/07/my-children-share-files-with-their-friends-are-they-always-criminals-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/my-children-share-files-with-their-friends-are-they-always-criminals-part-2/</guid></item><item><title>My children "share files" with their friends: are they always criminals?</title><link>https://stop.zona-m.net/2007/07/my-children-share-files-with-their-friends-are-they-always-criminals/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/my-children-share-files-with-their-friends-are-they-always-criminals/</guid></item><item><title>Should all the computers and computer programs of the world be equal?</title><link>https://stop.zona-m.net/2007/07/should-all-the-computers-and-computer-programs-of-the-world-be-equal/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/should-all-the-computers-and-computer-programs-of-the-world-be-equal/</guid></item><item><title>Software and copyright fanatism and opportunism</title><link>https://stop.zona-m.net/2007/07/software-and-copyright-fanatism-and-opportunism/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Is it really needed, to make the world a better place, to make sure that only Free as in Freedom software is allowed to exist? Probably not,&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/software-and-copyright-fanatism-and-opportunism/</guid></item><item><title>Structure Of The Family Guide To Digital Freedom</title><link>https://stop.zona-m.net/2007/07/structure-of-the-family-guide-to-digital-freedom/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/structure-of-the-family-guide-to-digital-freedom/</guid></item><item><title>The causes of the Digital Dangers</title><link>https://stop.zona-m.net/2007/07/the-causes-of-the-digital-dangers/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/the-causes-of-the-digital-dangers/</guid></item><item><title>The Digital Troubles of politicians and the Military</title><link>https://stop.zona-m.net/2007/07/the-digital-troubles-of-politicians-and-the-military/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;What do a UK prime Minister, a US warship and a fighter plane have in common? They all were put in danger, or at least in quite embarrassing situations, because of poor design, use or understanding of software, or at least of the policies that should regulate its use.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/the-digital-troubles-of-politicians-and-the-military/</guid></item><item><title>The need to control the future</title><link>https://stop.zona-m.net/2007/07/the-need-to-control-the-future/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;He who controls the present, controls the past. He who controls the past, controls the future.&amp;rdquo; George Orwell, 1984&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/the-need-to-control-the-future/</guid></item><item><title>The tax on future, alleged guilt</title><link>https://stop.zona-m.net/2007/07/the-tax-on-future-alleged-guilt/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The hidden cost of software on all citizens, including those who don&amp;rsquo;t even use a computer, has been already described at the &lt;a href="https://stop.zona-m.net/2007/07/how-much-do-we-all-pay-for-software/"&gt;beginning of this book&lt;/a&gt;. In addition to all that, there is another tax forced on all students, families, schools and businesses from the entertainment  industry.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/the-tax-on-future-alleged-guilt/</guid></item><item><title>The tax on future, alleged guilt, part 2</title><link>https://stop.zona-m.net/2007/07/the-tax-on-future-alleged-guilt-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/the-tax-on-future-alleged-guilt-part-2/</guid></item><item><title>What are Biometrics and RFID?</title><link>https://stop.zona-m.net/2007/07/what-are-biometrics-and-rfid/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="you-are-a-password-always-the-same"&gt;You are a password. Always the same&lt;/h2&gt;
&lt;p&gt;Originally, biometrics was that branch of science which performed statistical analysis of biological characteristics. Later on, the word started to indicate any technique for identifying people, with a computer, against unique physical characteristics like fingerprints, voice or retina. Sounds cool, uh? Almost too good to be true. In fact, it is too good to be true, unless it&amp;rsquo;s very well thought out and designed, something that could be still impossible to achieve.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-are-biometrics-and-rfid/</guid></item><item><title>What are Biometrics and RFID? Part 2: RFID</title><link>https://stop.zona-m.net/2007/07/what-are-biometrics-and-rfid-part-2-rfid/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-are-biometrics-and-rfid-part-2-rfid/</guid></item><item><title>What Are Other Countries Doing to Fight the Digital Dangers?</title><link>https://stop.zona-m.net/2007/07/what-are-other-countries-doing-to-fight-the-digital-dangers/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-are-other-countries-doing-to-fight-the-digital-dangers/</guid></item><item><title>What are protocols and formats anyways?</title><link>https://stop.zona-m.net/2007/07/what-are-protocols-and-formats-anyways/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-are-protocols-and-formats-anyways/</guid></item><item><title>What Can I Do As A Citizen, part 2</title><link>https://stop.zona-m.net/2007/07/what-can-i-do-as-a-citizen-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-can-i-do-as-a-citizen-part-2/</guid></item><item><title>What Can I Do As A Citizen?</title><link>https://stop.zona-m.net/2007/07/what-can-i-do-as-a-citizen/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As Spiderman would put it, &amp;ldquo;with great power comes great responsibility&amp;rdquo;. This is an age where there is the possibility of improving your life and everybody else&amp;rsquo;s as well, through the better use of computers and digital technologies. In order for this to actually happen, however, it is necessary to act: sometimes with your wallet, sometimes behaving smartly and sometimes demanding laws that protect and stimulate initiative and talent but, above all, fair competition and equal opportunities with access and use of digital technologies.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-can-i-do-as-a-citizen/</guid></item><item><title>What Do I Really Lose Without Net Neutrality?</title><link>https://stop.zona-m.net/2007/07/what-do-i-really-lose-without-net-neutrality/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="how-would-you-like-your-network-sir-smart-or-stupid"&gt;How Would You Like Your Network, Sir? Smart Or Stupid?&lt;/h2&gt;
&lt;p&gt;Net Neutrality is a somewhat misleading definition for the principles that, until today, have de facto ruled Internet based communications: access to the network should be open, at the same conditions, for every legally operating publisher or service provider. In other words, network operators should never block or slow down access to a website depending on the content of that website or who its owners are: the network should also be &lt;em&gt;stupid&lt;/em&gt;, that is unable to distinguish the bits of a movie from those of an email, and move them around all at the same speed, leaving any decision on what to do with them to the user terminals.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-do-i-really-lose-without-net-neutrality/</guid></item><item><title>What in the world is this "source code" anyway?</title><link>https://stop.zona-m.net/2007/07/what-in-the-world-is-this-source-code-anyway/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-in-the-world-is-this-source-code-anyway/</guid></item><item><title>What is "Free Software”? Is it legal?</title><link>https://stop.zona-m.net/2007/07/what-is-free-software-is-it-legal/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You may have heard of something called &amp;ldquo;Free as in Freedom Software&amp;rdquo; which is causing a lot of noise among ICT professionals. Why all this fuss on software given away? Can it be any good?&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-is-free-software-is-it-legal/</guid></item><item><title>What is "Free Software”? Is it legal? Part 2</title><link>https://stop.zona-m.net/2007/07/what-is-free-software-is-it-legal-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-is-free-software-is-it-legal-part-2/</guid></item><item><title>What is Digital Freedom, and why should I care?</title><link>https://stop.zona-m.net/2007/07/what-is-digital-freedom-and-why-should-i-care/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-is-digital-freedom-and-why-should-i-care/</guid></item><item><title>What Is OpenDocument?</title><link>https://stop.zona-m.net/2007/07/what-is-opendocument/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-is-opendocument/</guid></item><item><title>What is this DRM thing I keep hearing about, part 2</title><link>https://stop.zona-m.net/2007/07/what-is-this-drm-thing-i-keep-hearing-about-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-is-this-drm-thing-i-keep-hearing-about-part-2/</guid></item><item><title>What is this DRM thing I keep hearing about?</title><link>https://stop.zona-m.net/2007/07/what-is-this-drm-thing-i-keep-hearing-about/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-is-this-drm-thing-i-keep-hearing-about/</guid></item><item><title>What Is Trusted Computing, part 2</title><link>https://stop.zona-m.net/2007/07/what-is-trusted-computing-part-2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-is-trusted-computing-part-2/</guid></item><item><title>What Is Trusted Computing?</title><link>https://stop.zona-m.net/2007/07/what-is-trusted-computing/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-is-trusted-computing/</guid></item><item><title>What Is Web Usability, And Why Should I Care?</title><link>https://stop.zona-m.net/2007/07/what-is-web-usability-and-why-should-i-care/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-is-web-usability-and-why-should-i-care/</guid></item><item><title>What must be done to protect privacy?</title><link>https://stop.zona-m.net/2007/07/what-must-be-done-to-protect-privacy/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The first and most important thing to do to solve the privacy problems described at the beginning of this book is to not believe that you are immune; the second is to acknowledge the problem without getting hysterical. The third is to implement, or ask that governments implement, the social, technical and legislative solutions described in the rest of this chapter. Many of the right things to do are based on common sense, more than deep technical knowledge, and most of them are valid and do-able even for people who don&amp;rsquo;t own a computer.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/what-must-be-done-to-protect-privacy/</guid></item><item><title>When does Internet Telephony Make Sense?</title><link>https://stop.zona-m.net/2007/07/when-does-internet-telephony-make-sense/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/when-does-internet-telephony-make-sense/</guid></item><item><title>When does Internet Telephony Make Sense? (part 2)</title><link>https://stop.zona-m.net/2007/07/when-does-internet-telephony-make-sensepart2/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/when-does-internet-telephony-make-sensepart2/</guid></item><item><title>When Is Fair Use Fair Enough?</title><link>https://stop.zona-m.net/2007/07/when-is-fair-use-fair-enough/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/when-is-fair-use-fair-enough/</guid></item><item><title>Who owns information, ideas and fun, part 2</title><link>https://stop.zona-m.net/2007/07/who-owns-information-ideas-and-fun-part-2/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;(continues from &lt;a href="http://digifreedom.net/sjklw4/"&gt;here&lt;/a&gt;)&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/who-owns-information-ideas-and-fun-part-2/</guid></item><item><title>Who owns information, ideas and fun?</title><link>https://stop.zona-m.net/2007/07/who-owns-information-ideas-and-fun/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;h1 id="who-owns-information-ideas-and-fun"&gt;Who owns information, ideas and fun?&lt;/h1&gt;
&lt;p&gt;Copyright is the legal right to control or prevent, within certain bounds and for a limited period of time, the distribution of creative works. Copyright can be a great incentive for authors, the fairest way to reward them and, eventually, a great advantage for society as a whole.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/who-owns-information-ideas-and-fun/</guid></item><item><title>Would all the other businesses and jobs suffer be better off without the Digital Dangers?</title><link>https://stop.zona-m.net/2007/07/would-all-the-other-businesses-and-jobs-suffer-be-better-off-without-the-digital-dangers/</link><description>&lt;p&gt;&lt;em&gt;(this page is part of the &lt;a href="https://stop.zona-m.net/2011/03/the-family-guide-to-digital-freedom-2007-edition-is-now-online/"&gt;Family Guide to Digital Freedom, 2007 edition&lt;/a&gt;. Please do read that introduction to know more about the Guide, especially if you mean to comment this page. Thanks)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The second reason to fight Digital Dangers just in order to &lt;em&gt;boost&lt;/em&gt; the (local) economy is to make it much more affordable to start up and run a small business in any field. For an artist, fighting the Digital Dangers makes it much easier to live off the profits of his or her own talent, be they from copyright or other sources, with much more control than is often possible today.&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sun, 01 Jul 2007 15:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2007/07/would-all-the-other-businesses-and-jobs-suffer-be-better-off-without-the-digital-dangers/</guid></item><item><title>iPhone first impressions</title><link>https://jasoneckert.github.io/myblog/iphone-first-impressions/</link><description>&lt;p&gt;&lt;img alt="iPhone" src="iphone.png#center" title="iPhone" /&gt;&lt;/p&gt;
&lt;p&gt;The iPhone went on sale in the US yesterday.  And yes, for the past several months since its introduction, I wanted one badly&amp;hellip;..but after hearing from those who have one, I am not so upset now that the iPhone is not available in Canada until later this year.&lt;/p&gt;
&lt;p&gt;Basically, those who have one say that it “feels like a 1.0 device”, which it is.   It uses the old EDGE service rather than new and fast 3G Mobile service in order to save battery power (Apple rationalizes that most will use the iPhone’s WiFi to browse the Internet instead).  Plus, Flash and Java are not supported on the iPhone (too much processing/bandwidth?). And my biggest problem with the iPhone is that it only has 4 or 8 GB of storage (bad).&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sat, 30 Jun 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/iphone-first-impressions/</guid></item><item><title>Sony Vaio Support (Day 5)</title><link>https://www.databasesandlife.com/sony-vaio-support-day-5/</link><description>&lt;p&gt;After being picked up on Wednesday, I see the computer arrived at the repair place in Germany at about 10am today. (The UPS tracking website works, in contrast to Sony&amp;rsquo;s).&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s 2 days to transport a laptop from the capital of Austria to Germany! That&amp;rsquo;s hardly quick, or the overnight delivery they always advertise on TV!&lt;/p&gt;
&lt;p&gt;So presumably Sony chose to save some money when selecting which UPS delivery speed to use.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 29 Jun 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/sony-vaio-support-day-5/</guid></item><item><title>Sony Vaio Support (Day 2)</title><link>https://www.databasesandlife.com/sony-vaio-support-day-2/</link><description>&lt;p&gt;Tuesday was much better.
The employee from Monday said she&amp;rsquo;d (try to) ring me, even if nothing happened. She did ring me, at about 5pm (which made me a little worried that she wasn&amp;rsquo;t going to call), and said that the laptop could be collected the next day. They hadn&amp;rsquo;t resolved the warranty issue, but they were prepared to accept that I had one (on the grounds of the invoice that I faxed to them, which they sent to me originally confirming my purchase), so were prepared to pick up and repair the laptop for free.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 27 Jun 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/sony-vaio-support-day-2/</guid></item><item><title>Sony Vaio Support (Day 3)</title><link>https://www.databasesandlife.com/sony-vaio-support-day-3/</link><description>&lt;p&gt;It&amp;rsquo;s all gone well. It&amp;rsquo;s 14:43 and the UPS guy has come and collected my notebook.
He didn&amp;rsquo;t seem to have any packaging materials with him (in contrast to what the woman said on the phone). So he took my unscratched laptop and just carried it off without packing it. Presumably he has some packing stuff in his van? Or maybe he&amp;rsquo;ll just not pack it so it gets really scratched? Well, I&amp;rsquo;ll see when I get it back.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 27 Jun 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/sony-vaio-support-day-3/</guid></item><item><title>Sony Vaio Support (Day 1)</title><link>https://www.databasesandlife.com/sony-vaio-support-day-1/</link><description>&lt;p&gt;So my laptop is broken. No problem, when I bought it, about a year and a half ago, I paid about €150 extra to get the warranty extended from 1 year to 3 years, and them pick it up if something goes wrong. I&amp;rsquo;m glad I did that; now it&amp;rsquo;s time to use it.&lt;/p&gt;
&lt;p&gt;Hmm, not as simple to use the warranty as it was to order it, it turns out. (Although, to be honest, ordering it wasn&amp;rsquo;t very easy either.)&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 25 Jun 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/sony-vaio-support-day-1/</guid></item><item><title>Session-level statspack</title><link>https://tanelpoder.com/2007/06/24/session-level-statspack/</link><description>&lt;p&gt;Statspack is a useful tool for easily gathering and reporting some Oracle’s historical workload statistics. However it has its limitations and problems:&lt;/p&gt;
&lt;p&gt;One of them that in past it used to record only Oracle statistics, measured from &lt;em&gt;inside&lt;/em&gt; Oracle. This made Oracle and people using Oracle ignore other crucial statistics like OS workload below Oracle. For example statspack may show you heavy latch contention as the performance problem, while looking at vmstat output one would see that the server just has been heavily overloaded with numerous other jobs (like multiple backup, export and compress jobs overrunning their run-window) and the latch contention is just a symptom of CPU starvation.&lt;/p&gt;
&lt;p&gt;This has been somewhat addressed by adding V$OSSTAT to Oracle 10g and statspack now gathers this info as well. Now we need people to start looking into those stats.&lt;/p&gt;
&lt;p&gt;Another problem with statspack is which is described in Dan Fink’s blog, about cursor-level CPU accounting limitations before 10gR2.&lt;/p&gt;
&lt;p&gt;However neither of those problems are the main limitations of statspack. The main problem is that statspack samples it’s statistic snapshots from &lt;em&gt;system level&lt;/em&gt; views like V$SYSSTAT and V$SYSTEM_EVENT. If every single session in your database is performing exactly the same (kind) of operation, then system level aggregates might be quite OK to get an overview what’s going on in the database. But from the moment you start having different kind of sessions (e.g. OLTP vs batch vs data feed vs report) in your database, then system level aggregates used by statspack do heavily distort what the reality looks like for specific sessions.&lt;/p&gt;
&lt;p&gt;There’s another gotcha – by default statspack excludes the “SQL*Net message from client” wait event from main report section, stating that it is not important to look into &lt;em&gt;idle&lt;/em&gt; events. However by that we will throw away an important piece of information when diagnosing &lt;em&gt;end-to-end&lt;/em&gt; performance, the end user experience. The bad thing is that even if we did include the SQL*Net wait event in our reports (by deleting the corresponding row from STATS$IDLE_EVENT), then we would still have no idea how many of those gazillions of system-wide SQL*Net client wait seconds do belong to our specific session or user.&lt;/p&gt;
&lt;p&gt;Statspack doesn’t measure session-experience, it just gives you a system-wide aggregate, which cannot be translated back to individual session statistics (just as you can not convert a hash value back to original value – most of the information is just lost!).&lt;/p&gt;
&lt;p&gt;How to get session-level detailed overview of database performance, with historical reporting capability then?&lt;/p&gt;
&lt;p&gt;Oracle 10g addresses this partially with ASH and AWR and DBMS_MONITOR’s selective statistic sampling (Search for V$SERV_MOD_ACT_STATS).&lt;/p&gt;
&lt;p&gt;While ASH and AWR are both awesome products, they are not usable in Standard Edition nor before 10g ( you may want to check out Kyle Hailey’s &lt;a href="http://www.perfvision.com/ash.php" target="_blank"&gt;ASH simulator&lt;/a&gt; instead ) and for using them you need to pay a separate license fee.&lt;/p&gt;
&lt;p&gt;So let me introduce my attempt to solve those problems ( NB! Free stuff!!! ;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The poor-man’s version of Automatic Workload Repository: It’s called… um… Semi-Automatic Workload Repository :)&lt;/li&gt;
&lt;li&gt;The clever-man’s addition to statspack, which takes session-level snapshots: In other words, Sesspack.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The idea is very simple, just take snapshots of V$SESSION_EVENT and some V$SESSTAT (and V$SESS_TIME_MODEL in 10g) statistics and store those in a repository just like statspack does. Snapshots are taken using sesspack.snap_&lt;em&gt;xyz&lt;/em&gt; procedures. As a parameter to these procedures I can pass a specific SID, a group of SIDs, a Oracle db username a OS-username or whatever filtering fields can be found from V$SESSION.&lt;/p&gt;
&lt;p&gt;Once you have taken your snapshots when running the workload, you can run a report which calculates statistic and wait event deltas between snapshots and that it.&lt;/p&gt;
&lt;p&gt;A demo?&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sun, 24 Jun 2007 10:23:26 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/06/24/session-level-statspack/</guid></item><item><title>A gotcha with parallel index builds, parallel degree and query plans</title><link>https://tanelpoder.com/2007/06/23/a-gotcha-with-parallel-index-builds-parallel-degree-and-query-plans/</link><description>&lt;p&gt;Reading the &lt;a href="http://jonathanlewis.wordpress.com/2007/06/17/hints-again/" target="_blank"&gt;following article &lt;/a&gt;about PARALLEL hint by Jonathan Lewis made me remember a somewhat related gotcha with parallelism.&lt;/p&gt;
&lt;p&gt;Often when creating (or rebuilding) an index on a large table, doing it with PARALLEL x option makes it go faster – usually in case when your IO subsystem is not the bottleneck &lt;em&gt;and&lt;/em&gt; you have enough spare CPU capacity to throw in.&lt;/p&gt;
&lt;p&gt;A small example below:&lt;/p&gt;
&lt;pre&gt;Tanel@Sol01&amp;gt; create table t1 as select * from all_objects;

Table created.

Tanel@Sol01&amp;gt; create index i1 on t1(object_id);

Index created.

Tanel@Sol01&amp;gt; exec dbms_stats.gather_table_stats(user, 'T1', cascade=&amp;gt;true, no_invalidate=&amp;gt;false);

PL/SQL procedure successfully completed.

&lt;/pre&gt;
&lt;p&gt;Ok, for whatever reason I need to rebuild my index, and for speed I do it in parallel:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Sat, 23 Jun 2007 11:54:10 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/06/23/a-gotcha-with-parallel-index-builds-parallel-degree-and-query-plans/</guid></item><item><title>My version of SQL string to table tokenizer</title><link>https://tanelpoder.com/2007/06/20/my-version-of-sql-string-to-table-tokenizer/</link><description>&lt;p&gt;This one’s a short post on a fairly random topic as unfortunately I don’t have time today to come up with anything deeper :)&lt;/p&gt;
&lt;p&gt;I needed to come up with a delimited string to table tokenizer for an Oracle development project. There are quite a few examples out there how to do that, including Adrian Billington’s &lt;a href="http://www.oracle-developer.net/display.php?id=412" target="_blank" title="www.oracle-developer.net"&gt;&lt;a href="https://www.oracle-developer.net"&gt;www.oracle-developer.net&lt;/a&gt;&lt;/a&gt; and the &lt;a href="http://technology.amis.nl/blog/?p=1631" target="_blank" title="Amis blog entry on SQL string tokenizers"&gt;&lt;a href="http://technology.amis.nl/blog/?p=1631"&gt;http://technology.amis.nl/blog/?p=1631&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So far the simplest solution I had seen was using a bunch of INSTR’s, SUBSTR’s and DECODE’s in a CONNECT BY loop.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Tue, 19 Jun 2007 21:48:10 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/06/20/my-version-of-sql-string-to-table-tokenizer/</guid></item><item><title>Advanced Oracle Troubleshooting Guide: When the wait interface is not enough [part 1]</title><link>https://tanelpoder.com/2007/06/18/advanced-oracle-troubleshooting-guide-when-the-wait-interface-is-not-enough-part-1/</link><description>&lt;p&gt;Welcome to read my first real post on this blog!&lt;/p&gt;
&lt;p&gt;If I ever manage to post any more entries, the type and style of content will be pretty much as this one: Oracle problem diagnosis and troubleshooting techniques with some OS and hardware touch in it. And internals! ;-)&lt;/p&gt;
&lt;p&gt;Nevertheless, I am also a fan of systematic approaches and methods, so I plan to propose some less known OS and Oracle techniques for reducing guesswork in &lt;a href="https://tanelpoder.com/seminar/"&gt;advanced Oracle troubleshooting&lt;/a&gt; even further.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Mon, 18 Jun 2007 16:38:16 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/2007/06/18/advanced-oracle-troubleshooting-guide-when-the-wait-interface-is-not-enough-part-1/</guid></item><item><title>Microsoft Energize IT conference</title><link>https://jasoneckert.github.io/myblog/microsoft-energize-it-conference/</link><description>&lt;p&gt;&lt;img alt="Microsoft stage" src="stage.png#center" title="Microsoft stage" /&gt;&lt;/p&gt;
&lt;p&gt;Today, I attended the Microsoft Energize IT Conference at the Convention Centre in Toronto.  Having been to many Microsoft conferences in the past, I was reluctant to attend since most of them were a biased propaganda show for sales people and managers.&lt;/p&gt;
&lt;p&gt;Energize IT was a typical Microsoft conference: lots of money, free food and swank.  When the keynote presentations started, it looked promising.  The first few speakers emphasized the need for feedback from the audience such that Microsoft can adapt to the changing needs of their customers, as well as the need for a sense of “community” amongst us. And to make things even better, there were power bars at each table in the auditorium for laptop use as well as free wireless access (I brought my laptop and was able to check my emails during the boring parts of the presentation).   From people’s facial expressions and body language, everyone seemed engaged.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sat, 16 Jun 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/microsoft-energize-it-conference/</guid></item><item><title>Paper jams</title><link>https://www.databasesandlife.com/paper-jams/</link><description>&lt;p&gt;Why does my printer always assert it has a paper jam? Why do other (personal) printers actually have paper jams the entire time?&lt;/p&gt;
&lt;p&gt;Most cheap lasers, and now cheap inkjets, seem not to be able to handle paper correctly. More expensive lasers (like at offices) and more expensive inkjets (the one I have at home in Vienna) seem not to have this problem.&lt;/p&gt;
&lt;p&gt;In fact with the ink jet printers, I must observe that the printers are from the same manufacturer and are essentially the same printer (this was not by accident). The difference being the design isn&amp;rsquo;t as nice on the cheap one, it feels cheaper when you open the lid, and it has a single digit LCD display, whereas the expensive one has a colour pixel LCD display which has error messages in a language of the user&amp;rsquo;s choice. But the print quality is the same (according to the specifications and in reality). And the software one installs on ones PC is the same.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 15 Jun 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/paper-jams/</guid></item><item><title>When is a software project done?</title><link>https://www.databasesandlife.com/when-is-a-software-project-done/</link><description>&lt;p&gt;A software project is defined, for the purposes of this blog entry, as a set of people working to produce a new software system, or to modify an existing software system.&lt;/p&gt;
&lt;p&gt;The result (exit condition) of a software project is a set of artifacts and other assertions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Document (or wiki etc) describing what the software should do, i.e. requirements. This will include subtle details, about what the system does, that will not immediately be obvious by looking at the front-end, or reading software design documentation. This should be a complete description, which is useful for the future, not just a &amp;ldquo;delta&amp;rdquo; from the last version.&lt;/li&gt;
&lt;li&gt;Software architecture documentation, in words. Simply looking at 1,000 Javadocs will not enable a new team member to understand the system. Documentation should also include which other options were evaluated and not chosen, and why, to avoid future teams considering the same things.&lt;/li&gt;
&lt;li&gt;(Obviously) the source code for the software. Including the front-end, back-end, any HTML, etc.&lt;/li&gt;
&lt;li&gt;Unit test scripts for all back-end classes needing them.&lt;/li&gt;
&lt;li&gt;Front-end tests. Either a document (simple statements such as &amp;ldquo;Click on Submit without enough money on account. See error message&amp;rdquo;), or configuration of a front-end testing program.&lt;/li&gt;
&lt;li&gt;Performance tests done and the software to perform them, if appropriate.&lt;/li&gt;
&lt;li&gt;Configuration (or creation) of a monitoring system to monitor the system once it&amp;rsquo;s live, if it&amp;rsquo;s a service (e.g. web site).&lt;/li&gt;
&lt;li&gt;Administration system for customer care, if it&amp;rsquo;s a service.&lt;/li&gt;
&lt;li&gt;Management reporting. Especially just after a system goes live, management are always very curious about key statistics, such as number of users, number of items sold etc. That needs to be analyzed in advance and the system in place when the system goes live.&lt;/li&gt;
&lt;li&gt;Class diagrams&lt;/li&gt;
&lt;li&gt;Javadoc to describe the purpose of individual classes and methods (where this is not obvious from the names). For scripting languages: parameter and return types (as this cannot be deduced from the source code).&lt;/li&gt;
&lt;li&gt;If this is not the first version of a system, migration concept including scripts to install software, migrate schema, filesystems containing user data, and anything else.&lt;/li&gt;
&lt;li&gt;System uses appropriately international character set such as UTF-8. (This is not particularly modern, the WinNT team decided to do this &lt;a href="http://en.wikipedia.org/wiki/Windows_NT" rel="noopener noreferrer" target="_blank"&gt;in 1988&lt;/a&gt;.) Java does this out of the box, but it&amp;rsquo;s more than just the programming language. This includes any database, any data stored in flat-files, any APIs (within the system or to/from external systems), and so on.&lt;/li&gt;
&lt;li&gt;All of the above under version control&lt;/li&gt;
&lt;li&gt;Not only the software installed on a live system, but also the existence of test and staging systems. If one uses the live systems for testing, then, once one&amp;rsquo;s gone live, one has no way to fix bugs in a testing environment. And bugs will happen, and they need to be fixed fast, so one had better have thought of this in advance.&lt;/li&gt;
&lt;li&gt;Bug tracking, or wiki system, or some way that the team is trained and rehearsed in using, to track and assign errors as they occur.&lt;/li&gt;
&lt;li&gt;Understood and tested data backup and recovery process. (What happens if the live DB crashes? Better have thought about recovery before that happens.)&lt;/li&gt;
&lt;li&gt;The team must sleep e.g. 2 days before a release. After a release (bug fixing) is the most stressful time of a project and where the team must be at its most alert (as fixing is time-critical). It&amp;rsquo;s important to sleep beforehand, and not e.g. work 7 days a week then in the evening finally release, then go to bed. (You can be certain that 1 hour after you&amp;rsquo;ve gone to sleep the site will be offline due to some problems, and you weren&amp;rsquo;t there to fix them.)&lt;/li&gt;
&lt;/ol&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 29 May 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/when-is-a-software-project-done/</guid></item><item><title>Don't use gettext</title><link>https://www.databasesandlife.com/gettext/</link><description>&lt;p&gt;Working on a PHP project recently, there was the requirement for text localization. The standard way to do this in PHP is to use the standard way to do this in C, which is &lt;a href="http://www.gnu.org/software/gettext/manual/gettext.html" rel="noopener noreferrer" target="_blank"&gt;gettext&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve worked with various translation systems, including one I built myself for uboot, involving a hierarchy of languages going from most specific to most &amp;ldquo;international&amp;rdquo;, and with each string having a hierarchical id such as &amp;ldquo;myprogram.errors.disk-full&amp;rdquo;.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 18 May 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/gettext/</guid></item><item><title>George Wilson—Monologue</title><link>https://www.davidschlachter.com/writings/monologue</link><description>Internal monologue of George Wilson, a character from Fitzgerald’s The Great Gatsby, as he’s walking from The Valley of Ashes to Gatsby.</description><author>David Schlachter</author><pubDate>Mon, 14 May 2007 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/monologue</guid></item><item><title>Making progress with introduction of unit tests to Uboot</title><link>https://www.databasesandlife.com/making-progress-with-introduction-of-unit-tests-to-uboot/</link><description>&lt;p&gt;The old uboot code had, amazingly enough, 21k lines of unit tests. But they were not useful unit tests, as one had to run each program individually, and they each had a bunch of (different) prerequisites, such as account_id 3 existing and having an empty inbox, and so on. And with the older tests, their output would be a bunch of print statements (e.g. insert message; print count of messages), and one would have to compare the printed output with the expected results (which weren&amp;rsquo;t documented anywhere).&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 14 May 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/making-progress-with-introduction-of-unit-tests-to-uboot/</guid></item><item><title>Moving back to Argentina</title><link>/post/moving-back-to-argentina/</link><description>&lt;p&gt;In March, I accepted a new position within BEA, to work for BEA Argentina.&lt;/p&gt;
&lt;p&gt;After more than six years in the U.S., my wife and I were thinking about moving back to
Argentina. We were talking about doing so in 2008. Then, this opportunity
within BEA came across. It was sooner than what we planned, but it was interesting
for me professionally, and BEA was helping with all the relocation needs. So I accepted.&lt;/p&gt;
&lt;p&gt;It all happened (is happening I'd say) pretty quickly. Me and my family arrived at
Argentina a couple of weeks ago, and I started on this new role immediately.&lt;/p&gt;
&lt;p&gt;April was a good exercise on getting things done, both in and out of work. Here's just
a summary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I played the negotiating game before signing the final offer to move to BEA Argentina.&lt;/li&gt;
&lt;li&gt;We did a &amp;quot;virtual&amp;quot; garage-sale on craiglist (sold a grill, furniture, garden tools and
more).&lt;/li&gt;
&lt;li&gt;A strong storm (Texas style) blew several shingles off our roof. We had to get it
fixed quickly before putting the house in the market!.
Some of those asphalt shingles landed on top of my car!, scratching it really bad.
I had to take it to the body shop ASAP before selling it.&lt;/li&gt;
&lt;li&gt;I flew to Boulder, Colorado to get a one day training for &amp;quot;new managers&amp;quot;&lt;/li&gt;
&lt;li&gt;The water heater went nuts. Long story short, I managed to replace the thermostat
and that fixed the problem.&lt;/li&gt;
&lt;li&gt;Worked a lot on reconditioning the house for selling (painting, cleaning, fixing...).&lt;/li&gt;
&lt;li&gt;Had to get a &amp;quot;certificate of residency&amp;quot; from the Argentine consulate in the US (to
avoid paying fees when clearing customs). Sounds simple, but the Argentine consulate
in Houston is the worst and most inefficient public office I've ever seen in the U.S.
or Argentina.&lt;/li&gt;
&lt;li&gt;Sold our house (in less than 2 days!, I cannot imagine how
we would have dealt with it otherwise). If you need a Realtor in Dallas/Plano, I
strongly recommend Alan Bertucci (an ex-Fuego guy who got tired of working with
computers).&lt;/li&gt;
&lt;li&gt;I worked at a customer site for two weeks, which is always more stressful than
working in your office, specially when you are dealing with so much stuff out of work.&lt;/li&gt;
&lt;li&gt;Packed and shipped all our goods. Big help from the relocation company, but
we had to spent two days watching over them, labeling boxes, separating things
for air or sea shipment, writing a detailed inventory. Not to mention that they
made two big holes in a wall (1 day before we had to turn the house over to the new
owners!).&lt;/li&gt;
&lt;li&gt;Closed all accounts (phone, mobiles, electric, water, gas, toll tags, credit cards,
banks, directv, tivo, ... ). This included fighting a few battles, like the one to
prevent Cingular from charging us a hefty early-termination fee.&lt;/li&gt;
&lt;li&gt;Worked on finishing and handing over a couple of internal software projects I was
working on.&lt;/li&gt;
&lt;li&gt;I flew to California (for a day) to meet my new boss.&lt;/li&gt;
&lt;li&gt;I gave a full day training for customer and internal BEA employees.&lt;/li&gt;
&lt;li&gt;We went on a shopping spree:  books, electronics, apparel, and things we knew
was cheaper or easier to get in the U.S.&lt;/li&gt;
&lt;li&gt;Tried to meet and say &amp;quot;bye&amp;quot; to all the good friends I made in the U.S.&lt;/li&gt;
&lt;li&gt;Sold our cars (CarMax doesn't pay very well, but it was convenient).&lt;/li&gt;
&lt;li&gt;Rented a car and lived in a hotel for a few days.&lt;/li&gt;
&lt;li&gt;We picked up our daughter from school and drove straight to the airport. We took
our final flight back to Argentina. A 10-hour trip is never easy with 2 kids;
Pilar (our 1-year-old) made it specially hard this time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That's just the first half. Now in Argentina, we are re-building our lives.&lt;/p&gt;
&lt;p&gt;We are looking for a home, mortgage, school for the kids, car, doctors, we are doing paperwork
to make our kids permanent residents in Argentina, I'm adapting to my new job, and we are
living as guests until we find a home and the shipment with all our goods arrives.&lt;/p&gt;
&lt;p&gt;Luckily, here we get a lot of help from our bigger family. After all, they are pretty
much the only reason why we decided to come back to our home country!&lt;/p&gt;
&lt;p&gt;The dust should settle the next month or so, and we'll feel &amp;quot;at home&amp;quot; again.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Mon, 14 May 2007 02:13:00 GMT</pubDate><guid isPermaLink="true">/post/moving-back-to-argentina/</guid></item><item><title>JavaServerFaces, Spring WebFlow y Struts Tiles, todo en uno</title><link>https://danielpecos.com/2007/05/10/javaserverfaces-spring-webflow-y-struts-tiles-todo-en-uno/</link><description>&lt;p&gt;¿Mezclar la versatilidad de JSF con la definición de flujos de negocio de SWF, todo ello con una estética semejante gracias a Tiles? Pues es posible, aunque resulta realmente tedioso y complicado para aquel que es relativamente nuevo a algunas (más bien todas) de estas tecnologías del mundo Java JEE.&lt;/p&gt;
&lt;p&gt;A esto es a lo que me he dedicado la última semana de trabajo, a intentar comprender el funcionamiento y buscar por Internet la forma de poder conjugar estas tres tecnologías. He conseguido hacerme una idea del complejo funcionamiento de JSF, SWF me ha sorprendido gratamente por la gran potencia que se consigue con tan pocas líneas de código, y Tiles, aunque ni tan avanzado tecnológicamente ni tan sorprendente, ofrece unas posibilidades de diseño visual que unifica toda la aplicación web con tan solo unos poco ficheros.&lt;/p&gt;
&lt;p&gt;Espero poder publicar un tutorial con los pasos a seguir y las aclaraciones necesarias lo antes posible.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://java.sun.com/javaee/javaserverfaces/"&gt;JSF Sun Reference Implementation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://myfaces.apache.org/"&gt;JSF Apache MyFaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.springframework.org/webflow"&gt;Spring WebFlow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://struts.apache.org/1.3.8/struts-tiles/index.html"&gt;Struts Tiles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Thu, 10 May 2007 13:54:42 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2007/05/10/javaserverfaces-spring-webflow-y-struts-tiles-todo-en-uno/</guid></item><item><title>Puzzle: Transfering a hex number. Normally works, but very rarely arrives as the string "INF". Why?</title><link>https://www.databasesandlife.com/transfering-some-hex-sometimes-gets-replaced-by-string-inf-why/</link><description>&lt;p class="intro"&gt;This was never going to work out. Data transfer interface. Our side in Perl and their side in PHP. Both scripting languages (bad) and not even the same scripting language (incompatible badness).&lt;/p&gt;
&lt;p&gt;Over the data transfer interface, we are transferring users. Including a code to enable them to unsubscribe from an email newsletter. The first 7 characters of the code identify the users (digits) and the rest of the code is a hex string containing some security information.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 10 May 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/transfering-some-hex-sometimes-gets-replaced-by-string-inf-why/</guid></item><item><title>Class names repeating information stated in the package name</title><link>https://www.databasesandlife.com/class-names-repeating-information-stated-in-the-package-name/</link><description>&lt;p&gt;Classes in modern programming languages can be arranged in hierarchies, e.g. a perl class might be called &lt;code&gt;Uboot::Message::Mail&lt;/code&gt; or a Java class &lt;code&gt;com.uboot.message.Mail&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In some programming languages (e.g. Perl) one always refers to the class by its full name (such as &lt;code&gt;Uboot::Message::Mail&lt;/code&gt;) and never by its leaf name (e.g. &lt;code&gt;Mail&lt;/code&gt;). For example:&lt;/p&gt;
&lt;pre&gt;use Uboot::Message::Mail;
my $mail = Uboot::Message::Mail-&amp;gt;new();
print "it's a mail" if ($mail-&amp;gt;isa("Uboot::Message::Mail"));
&lt;/pre&gt;
&lt;p&gt;In other langauges (e.g. Java) one almost always refers to classes via their leaf-name, such as:&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Sun, 06 May 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/class-names-repeating-information-stated-in-the-package-name/</guid></item><item><title>Linux thin clients</title><link>https://jasoneckert.github.io/myblog/linux-thin-clients/</link><description>&lt;p&gt;&lt;img alt="SGI O2 running Linux" src="o2linux.jpg#center" title="SGI O2 running Linux" /&gt;&lt;/p&gt;
&lt;p&gt;Jon “maddog” Hall gave a talk about using Linux thin clients (e.g. the Linux Terminal Server Project) to provide Internet and application access to schools, third-world countries and organizations in general.  He specifically noted that thin clients (like the  HP Compaq t5125 which only uses 10 Watts of power compared to the 550 Watts used by most computers) could easily provide low-power, high-performance computing on a large scale.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sat, 05 May 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/linux-thin-clients/</guid></item><item><title>perl switch statement limitation</title><link>https://www.databasesandlife.com/perl-switch-statement-cool-limitation/</link><description>&lt;p&gt;Look at the documentation for the &lt;a href="http://search.cpan.org/~rgarcia/Switch-2.16/Switch.pm#LIMITATIONS" rel="noopener noreferrer" target="_blank"&gt;Perl switch statement&lt;/a&gt;. Look down the bottom at the &amp;ldquo;limitations&amp;rdquo; section. Look at the last limitation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If your source file is longer then 1 million characters and you have a switch statement that crosses the 1 million (or 2 million, etc.) character boundary you will get mysterious errors. The workaround is to use smaller source files.&lt;/p&gt;
&lt;/blockquote&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 02 May 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/perl-switch-statement-cool-limitation/</guid></item><item><title>The immortality of the "vi" editor</title><link>https://www.databasesandlife.com/vi/</link><description>&lt;p&gt;Here I am, programming using &amp;ldquo;vi&amp;rdquo; and, as usual, it&amp;rsquo;s annoying me. Why am I using it?
It&amp;rsquo;s just occurred to me, I remember from my childhood, my father would come home from work and complain about &amp;ldquo;vi&amp;rdquo;.
I wonder if my children will use &amp;ldquo;vi&amp;rdquo;?&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 01 May 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/vi/</guid></item><item><title>GUI Programming: Always perform network requests asynchronously</title><link>https://www.databasesandlife.com/gui-programming-always-perform-network-requests-asynchronously/</link><description>&lt;p&gt;Why does one feel ones so much more in control, when using Firefox, than Internet Explorer?&lt;/p&gt;
&lt;p&gt;When you select a slow link in Internet Explorer, the whole program hangs for about 1-2 seconds. Firefox doesn&amp;rsquo;t. Although 1-2 seconds is hardly a large % of ones life, it makes a big difference to the experience one has when using Firefox.&lt;/p&gt;
&lt;p&gt;Recently I wrote something similar to an IM client (written in Java). It sits on the Windows tray. You can log in, and open a window where you can do various things. The data stored on a website (communication over XML-RPC).&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 23 Apr 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/gui-programming-always-perform-network-requests-asynchronously/</guid></item><item><title>Use exceptions rather than return codes</title><link>https://www.databasesandlife.com/exceptions/</link><description>&lt;p&gt;Exceptions have been around for a long time. There&amp;rsquo;s no reason not to use them.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t want to ever see code such as this ever again.&lt;br style="font-family: courier new,monospace;" /&gt;&lt;/p&gt;
&lt;pre&gt;if ( ! $user) return false;
&lt;/pre&gt;
&lt;p&gt;We all know what happens with such code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nobody checks the return value&lt;/li&gt;
&lt;li&gt;Especially if half the code is written using exceptions, and half using return values, then &lt;span style="font-style: italic;"&gt;definitely &lt;/span&gt;nobody will check the return code&lt;/li&gt;
&lt;li&gt;It breaks the linguistics of the language. A function called &amp;ldquo;getUser&amp;rdquo; should return a User, but a function called &amp;ldquo;deleteFile&amp;rdquo;: why does it return &amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;?&lt;/li&gt;
&lt;li&gt;Where are the log statements, stating why this function returned false? What if the function has multiple places to return false? Then (perhaps) the calling function can print the log &amp;ldquo;function deleteFile returned false&amp;rdquo; but that doesn&amp;rsquo;t tell you which of the multiple places failed.&lt;/li&gt;
&lt;li&gt;What if you want to programmatically check the return result of the function? If all the errors return the same value, there&amp;rsquo;s no way you can programmatically respond to each error differently (as some might be permenant errors such as the file doesn&amp;rsquo;t exist, some might only be temporary errors such as network currently unavailable.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every language in use today, at least in the projects I work on, has ways of handling exceptions.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 20 Apr 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/exceptions/</guid></item><item><title>10 things to do to release working code</title><link>https://www.databasesandlife.com/releasing-working-code/</link><description>&lt;p&gt;I spend a lot of my time getting annoyed by errors in other people&amp;rsquo;s software (e.g. Windows). Errors which, when you see them, you wonder how on earth they could have been overlooked. But recently I released of a piece of software which contained a major bug (it was only a small mistake, but the consequences were big).&lt;/p&gt;
&lt;p&gt;So I set about thinking, what sequences of actions lead, in my experience, to software which works? A lot of these are obvious, yet I&amp;rsquo;ve found myself often enough not following them, due to time or pressure reasons. And the result: is stuff which doesn&amp;rsquo;t work.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 17 Apr 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/releasing-working-code/</guid></item><item><title>Mozilla Thunderbird sucks</title><link>https://www.databasesandlife.com/mozilla-thunderbird-sucks/</link><description>&lt;p&gt;Really, Thunderbird is a terrible mail client. I&amp;rsquo;d been using Outlook for about 5 years when I first tried it, so I thought maybe the reason I didn&amp;rsquo;t like it was simply because it was different, in which case I should continue to use it to get used to it. One year on I still hate it and recently it just ate half my mail. So I&amp;rsquo;m going back to Outlook.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 12 Apr 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/mozilla-thunderbird-sucks/</guid></item><item><title>Task tracking numbers are not a substitute for documentation</title><link>https://www.databasesandlife.com/dont-think-that-task-tracking-numbers-are-a-replacement-for-documentation/</link><description>&lt;p&gt;Do you think this is an appropriate and sufficient documentation for this function?&lt;/p&gt;
&lt;pre&gt;# 3978
#
sub is_contact_in_abook_for_user {
&lt;/pre&gt;
&lt;p&gt;This number refers to the task number in a task/bug tracking system. The idea being, why write documentation, when that would simply duplicate what is already available.&lt;/p&gt;
&lt;p&gt;There are a number of reasons why this sort of documentation is bad, but the main one is that a feature lives on a for a long time, as does reusable code which one creates in order to implement the particular feature. But a task is just a task, once it&amp;rsquo;s done, no one cares about it any more. So if one sees e.g. a class modelling a user exposing methods such &amp;ldquo;fetch by user name&amp;rdquo;, &amp;ldquo;fetch by id&amp;rdquo;, &amp;ldquo;fetch by telephone number&amp;rdquo;, it isn&amp;rsquo;t really helpful to know that the first two were implemented as part of a &amp;ldquo;implement payment&amp;rdquo; feature, and the last for a &amp;ldquo;mobile phone shop&amp;rdquo; feature. There are so many aspects of those features which have nothing to do with a function which can be reused time and time again.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 11 Apr 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/dont-think-that-task-tracking-numbers-are-a-replacement-for-documentation/</guid></item><item><title>From Symbols to Thought</title><link>https://www.davidschlachter.com/writings/writinghistory</link><description>Teenage reflections on childhood experiences with writing.</description><author>David Schlachter</author><pubDate>Mon, 09 Apr 2007 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/writinghistory</guid></item><item><title>It's not acceptable to restart the user's computer, losing their data, without their permission</title><link>https://www.databasesandlife.com/windows-update-restart/</link><description>&lt;p&gt;Windows XP downloads updates for you automatically, then installs them, then asserts your computer has to be restarted. You can click &amp;ldquo;restart later&amp;rdquo; but the assertion is simply repeated later. That&amp;rsquo;s quite annoying, but I suppose one can get used to it.&lt;/p&gt;
&lt;p&gt;But the most outrageous thing is that if you don&amp;rsquo;t click &amp;ldquo;restart later&amp;rdquo; in time, it restarts your computer for you. If you take a short break for the computer – go for a coffee – and come back, you find your computer has no open windows. What about all those websites and documents and other things one was working on? Gone.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 09 Apr 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/windows-update-restart/</guid></item><item><title>Big fish</title><link>https://jasoneckert.github.io/myblog/big-fish/</link><description>&lt;p&gt;&lt;img alt="Pacific Sailfish" src="sailfish.png#center" title="Pacific Sailfish" /&gt;&lt;/p&gt;
&lt;p&gt;Today is a monumental day!  Last month I mounted a 7 &amp;amp; 1/2 foot Pacific Sailfish caught in Puerto Vallarta Mexico in my rec room, but I needed to touch up the dorsal fin (the only part of the fish that is made of wood because it can’t be preserved).  Well, I finally got around to putting the finishing touches on it tonight (the black dots)&amp;hellip;&amp;hellip;..hooray!  I think it looks great!&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Mon, 09 Apr 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/big-fish/</guid></item><item><title>Integrating Dokuwiki and phpBB2</title><link>https://bastian.rieck.me/blog/2007/integrating_dokuwiki_and_phpbb2/</link><description>&lt;p&gt;&lt;a href="http://wiki.splitbrain.org/wiki:dokuwiki"&gt;Dokuwiki&lt;/a&gt; is a nice Wiki system if
you don&amp;rsquo;t need tons of extra features and plugins. If you happen to have a
phpBB2 installation running, too, you can tell Dokuwiki to use this database to
authenticate users. Here&amp;rsquo;s how that works.&lt;/p&gt;
&lt;p&gt;The following changes should be made to your &lt;code&gt;local.php&lt;/code&gt; configuration file.
The might get overwritten if you store them elsewhere. Here is an excerpt from
my configuration file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* you want ACLs and MySQL */
$conf['useacl'] = 1;
$conf['authtype'] = 'mysql';

/* I do not want users to register via Dokuwiki */
$conf['openregister']= 0;

/* check the MD5-hash via MySQL */
$conf['auth']['mysql']['forwardClearPass'] = 1;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Moreover, you have to configure the database connection:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$conf['auth']['mysql']['server']   = 'your server';
$conf['auth']['mysql']['user']     = 'your username';
$conf['auth']['mysql']['password'] = 'your password';
$conf['auth']['mysql']['database'] = 'your database';
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pay special attention to the values of &lt;code&gt;TablesToLock&lt;/code&gt;. If you use a specific table in a query, add this table to the array:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$conf['auth']['mysql']['TablesToLock']= array( &amp;quot;your_table&amp;quot;,
&amp;quot;your_table AS another_table&amp;quot; );
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As a last step, we have to define some queries Dokuwiki uses for certain actions. The names are quite telling, so I will not explain them in great detail.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$conf['auth']['mysql']['checkPass'] =  &amp;quot;SELECT user_password AS login
					FROM forum_users /* change it :-) */
					WHERE
					username='%{user}'
					AND
					user_password=MD5('%{pass}')&amp;quot;;

$conf['auth']['mysql']['getUserInfo'] = &amp;quot;SELECT user_password AS pass,
					 username AS name, user_email
					 AS mail
					 FROM forum_users
					 WHERE
					 username='%{user}'&amp;quot;;

/* this query is from the dokuwiki documentation */
$conf['auth']['mysql']['getGroups']   = &amp;quot;SELECT a.group_name AS `group`
					 FROM forum_groups a,
					 forum_users b,
					 forum_user_group c
					 WHERE b.user_id = c.user_id
					 AND
					 a.group_id = c.group_id
					 AND
					 b.username='%{user}'&amp;quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For all those black hats laughing right now because they see SQL injection
possibilities: Not likely. The strings are escaped by the Dokuwiki
authentication code. However, I would not use that method for any vital
applications. Then again, if they are vital, you&amp;rsquo;d probably be writing your own
wiki anyway&amp;hellip;&lt;/p&gt;
&lt;p&gt;A last remark: There are more options which you could add (searching for users
via the user manager, updating user information etc.). This article show the
absolute minimum you need to supply. To set the proper access rights, just add
the groups you have in your phpBB2 installation to the &lt;code&gt;acl.auth.php&lt;/code&gt; file. I
would advise you to use the built-in group management system of phpBB2 because
you will almost certainly need user groups in your discussion forum, too.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Sun, 01 Apr 2007 22:51:23 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2007/integrating_dokuwiki_and_phpbb2/</guid></item><item><title>On "we don't need these users---let's move them to an archive table!"</title><link>https://www.databasesandlife.com/we-dont-need-these-users-lets-move-them-to-an-archive-table/</link><description>&lt;p&gt;For one of the customers I currently work for, when we first designed the platform in Q1/2000, there was the &amp;ldquo;account&amp;rdquo; table, there we stored our users. There were always various pressures to move &amp;ldquo;inactive&amp;rdquo; users to a separate &amp;ldquo;archive&amp;rdquo; table. I was always against this decision.&lt;/p&gt;
&lt;p&gt;In Q4/2005, during a period of my absence, it was decided to implement this decision. A bunch of users were to be deleted, but &amp;ldquo;not quite&amp;rdquo;, in case we needed their data again. Their data was to be moved from the &amp;ldquo;account&amp;rdquo; table to an &amp;ldquo;account_archive&amp;rdquo; table.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 29 Mar 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/we-dont-need-these-users-lets-move-them-to-an-archive-table/</guid></item><item><title>Databases are fast at INSERTs! 1¼ minutes to insert 1¼ million rows (on a test server!)</title><link>https://www.databasesandlife.com/fast/</link><description>&lt;p&gt;From our Oracle test instance at uboot.com:&lt;/p&gt;
&lt;pre&gt;1360965 rows created.
Elapsed: 00:01:17.90
&lt;/pre&gt;
&lt;p&gt;That&amp;rsquo;s 1¼ minutes to insert (and index) over 1¼ million rows.&lt;/p&gt;
&lt;p&gt;And this is a very old test instance. I think the hardware was last updated 2-3 years ago.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s pretty quick!&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 28 Mar 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/fast/</guid></item><item><title>Mice, along with everything else in life, need reboots these days</title><link>https://www.databasesandlife.com/mouse-reboot/</link><description>&lt;p&gt;I have been using a trusty wireless mouse for about 3 months now. (I didn&amp;rsquo;t want a wireless mouse, but here in Macau, I didn&amp;rsquo;t know what was going on, so I walked into an expensive hardware store—the only hardware store I knew—and they only had wireless mice. Well I thought, it may be twice the price but even twice the price isn&amp;rsquo;t expensive, and I need a mouse&amp;hellip;)&lt;/p&gt;
&lt;p&gt;It suddenly stopped working while I was using it.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 28 Mar 2007 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/mouse-reboot/</guid></item><item><title>Claws-mail and GPG</title><link>https://bastian.rieck.me/blog/2007/claws-mail_and_gpg/</link><description>&lt;p&gt;After the last &lt;code&gt;cvsup&lt;/code&gt; and &lt;code&gt;portupgrade&lt;/code&gt;, &lt;code&gt;sylpheed-claws&lt;/code&gt; was now known as
&lt;code&gt;claws-mail&lt;/code&gt;. Now gpg didn&amp;rsquo;t work anymore. Some googling mentioned that the
program tries to use &lt;code&gt;gpg-agent&lt;/code&gt;. So I changed my configuration accordingly and
installed &lt;code&gt;pinentry-qt&lt;/code&gt;, a graphical passphrase dialog utility.&lt;/p&gt;
&lt;p&gt;This is my &lt;code&gt;gpg-agent.conf&lt;/code&gt;. It belongs in your local &lt;code&gt;.gnupg/&lt;/code&gt;-directory:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pinentry-program /usr/local/bin/pinentry-qt
default-cache-ttl 3600
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You also have to add &lt;code&gt;use-agent&lt;/code&gt; to your local &lt;code&gt;gpg.conf&lt;/code&gt; (probably in
&lt;code&gt;.gnupg/&lt;/code&gt;, too).&lt;/p&gt;
&lt;p&gt;To start the gpg-agent, add ``eval &lt;code&gt;gpg-agent --daemon``` to your &lt;/code&gt;.login`-file
or wherever you need. By now your gpg-support should be functional (again).&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Mon, 26 Mar 2007 01:15:28 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2007/claws-mail_and_gpg/</guid></item><item><title>Always use MySQL's ENUM datatype instead of VARCHAR</title><link>https://www.databasesandlife.com/mysqls-enum-datatype-is-a-good-thing/</link><description>&lt;p&gt;I&amp;rsquo;ve often had discussions with people about whether the &amp;ldquo;enum&amp;rdquo; type in MySQL is a good thing or not. Basically there are two ways to use your database:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;As an unstructured bunch of &amp;ldquo;stuff&amp;rdquo; to store whatever the software needs to persist. Such databases use lots of &amp;ldquo;blob&amp;rdquo; data with serialized objects (it&amp;rsquo;s easy to program), tables with multiple functions (&amp;ldquo;object&amp;rdquo; table with &amp;ldquo;type&amp;rdquo; column), few constraints, and so on.&lt;/li&gt;
&lt;li&gt;As a representation of the data the program is trying to model. Such databases have meaningful column names, two different types of things are two different tables. Adding constraints is easy.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There are good arguments for both. As one is programming in a programming language, whatever is most convenient for that programming language (e.g. serialize a bunch of objects to a blob) means less effort, less code: which means less cost and less bugs. Those are all good things.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 23 Mar 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/mysqls-enum-datatype-is-a-good-thing/</guid></item><item><title>Windows has a limit on the length of file paths</title><link>https://www.databasesandlife.com/windows-path-length-limit/</link><description>&lt;p&gt;While moving a folder, with many subdirectories, to the Recycle Bin under Windows XP:&lt;/p&gt;
&lt;div style="text-align: center; padding-top: 20px; padding-bottom: 20px;"&gt;&lt;img src="https://www.databasesandlife.com/20070320-error.gif" /&gt;&lt;/div&gt;
&lt;p&gt;I wondered if each file that is stored in the recycle bin has a &amp;ldquo;original path&amp;rdquo; attribute, with a max length 256 chars, and that stores the original path like &amp;ldquo;Dir1Dir2Dir3file.txt&amp;rdquo;. Maybe if files are nested too deeply that attribute cannot hold the value?&lt;/p&gt;
&lt;div class="conclusion"&gt;It really seems that Windows does indeed have a path length limit.&lt;/div&gt;
&lt;p&gt;While checking some files into a subversion repository:&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 21 Mar 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/windows-path-length-limit/</guid></item><item><title>Beautiful Kettle</title><link>https://www.databasesandlife.com/beautiful-kettle/</link><description>&lt;p class="intro"&gt;I do really appreciate things that work elegantly.&lt;/p&gt;
&lt;p&gt;My girlfriend insisted we bought the following kettle, on account of its colour.&lt;/p&gt;
&lt;div style="text-align: center; padding-top: 30px; padding-bottom: 30px;"&gt;&lt;img src="https://www.databasesandlife.com/20070320-kettle.jpg" /&gt;&lt;/div&gt;
&lt;p&gt;It was quite an expensive kettle but it did look so good, I thought well, OK.
But with its expense comes more than just its beauty.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;After the water has boiled, to open the spout, to pour the water, there is an extra plastic bit (looking like an ear) which stays cold. Meaning you don&amp;rsquo;t burn your hands or need to use a dish cloth.&lt;/li&gt;
&lt;li&gt;The purple handle is designed in such a way that it too doesn&amp;rsquo;t get hot.&lt;/li&gt;
&lt;li&gt;You can lift the lid of the kettle off without having to move the handle to any special angle (as was the case with the previous kettle)&lt;/li&gt;
&lt;li&gt;The water pours beautifully. No spillage whatsoever.&lt;/li&gt;
&lt;li&gt;Without water, it&amp;rsquo;s light (ideal for the ladies for whom it was presumably designed).&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s the right size. There&amp;rsquo;s no point making a kettle holding only one cup of water but most families don&amp;rsquo;t need industrial sized kettles which can cook 34 cups of water either. This kettle is physically small but can boil 3-4 cups of water.&lt;/li&gt;
&lt;li&gt;The spout is big enough that one can poor water in it, without having to lift the lid off, if that&amp;rsquo;s one&amp;rsquo;s preferred method of filling the kettle (it is mine)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If only all things in life were made as well as this kettle.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 20 Mar 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/beautiful-kettle/</guid></item><item><title>Bottles more than 100% full</title><link>https://www.databasesandlife.com/bottles-more-than-100-full/</link><description>&lt;p&gt;I don&amp;rsquo;t know how they do it, but here in &lt;span class="hm" id="misp_compose_1"&gt;Macau&lt;/span&gt;, one can buy e.g. a 1.5L plastic bottle of a non-fizzy drink such as still water, and instead of having a small space of air at the top, when one opens it&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The line of the water is exactly at the top of the bottle, i.e. one couldn&amp;rsquo;t fill it any more&lt;/li&gt;
&lt;li&gt;Before one gets a chance to observe #1, water has spilt out&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As far as I can see, the above is impossible (as well as unusual, from the perspective of a European). But nevertheless, despite impossibility, it is actually the case.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 15 Mar 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/bottles-more-than-100-full/</guid></item><item><title>Copy/Paste between two rich text editors in web browsers works</title><link>https://www.databasesandlife.com/copypaste-between-two-rich-text-editors-in-web-browsers/</link><description>&lt;p&gt;I don&amp;rsquo;t know on what technology the gmail rich text editor is based, nor the &lt;span class="hm" id="misp_compose_1"&gt;uboot&lt;/span&gt; rich text editor for composing blog posts (although the latter I should know!) but despite having different appearances (fonts etc) and existing in different websites, one can copy/paste formatted data (e.g. lists, bold) from one to the other (at least using &lt;span class="hm" id="misp_compose_3"&gt;Firefox&lt;/span&gt;). The text takes on the appearance of the editor one copies it into.
I don&amp;rsquo;t know how that works, but I think that&amp;rsquo;s quite impressive!&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 15 Mar 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/copypaste-between-two-rich-text-editors-in-web-browsers/</guid></item><item><title>DVD problems</title><link>https://bastian.rieck.me/blog/2007/dvd_problems/</link><description>&lt;p&gt;Whenever I tried watching DVDs using mplayer, FreeBSD reported some strange
problems via &lt;code&gt;xconsole&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;acd0: FAILURE - REPORT\_KEY ILLEGAL REQUEST asc=0x6f ascq=0x04
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I was quite puzzled because - upon closer investigation - some DVDs worked
literally out of the box, while others did not show anything. They just kept
reporting this error. Finally, it dawned on me that the region code was
probably wrong (I got that idea from &lt;a href="http://www.t10.org/drafts.htm"&gt;the T10 drafts
section&lt;/a&gt;). Indeed, in the annex of the &lt;a href="http://www.t10.org/ftp/t10/drafts/mmc3/mmc3r10g.pdf"&gt;MMC-3
draft&lt;/a&gt; were some error
codes:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;asc=6F ascq=04: MEDIA REGION CODE IS MISMATCHED TO LOGICAL UNIT REGION
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Unfortunately, I don&amp;rsquo;t know a way to change the region code from FreeBSD
directly (most tools do not compile because of things that are different under
FreeBSD). So I rebooted with a spare live-CD of Xubuntu and armed my USB stick
with &lt;a href="http://linvdr.org/projects"&gt;regionset&lt;/a&gt; (FWIW, I used the RPM version).&lt;/p&gt;
&lt;p&gt;Some minutes later, everything worked - finally. My dearest thanks to the
Xubuntu and LinVDR team&amp;hellip;&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Wed, 14 Mar 2007 22:37:41 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2007/dvd_problems/</guid></item><item><title>The impossibility of refactoring in a weakly-typed scripting language</title><link>https://www.databasesandlife.com/making-changes-to-a-script/</link><description>&lt;p&gt;I need to change a bunch of functions in a bunch of classes to take a &amp;ldquo;user&amp;rdquo; object as opposed to a &amp;ldquo;user_id&amp;rdquo; number.&lt;/p&gt;
&lt;p&gt;I am using a scripting language. How am i going to do this? I am going to do it the best I can, then compile, but the compiler is not going to find any problem as they are the same &amp;ldquo;type&amp;rdquo; i.e. they are both values.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 07 Mar 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/making-changes-to-a-script/</guid></item><item><title>VCS Commit emails are good!</title><link>https://www.databasesandlife.com/vcs-commit-emails-are-good/</link><description>&lt;p&gt;I am currently working on a small project with one or two other people. We don&amp;rsquo;t sit in the same office (or, right now, on the same continent or in the same timezone).&lt;/p&gt;
&lt;p&gt;Every time something is committed into our version control system (Subversion), everyone on the team gets an email. This lists:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The files which have been changed (or added or deleted)&lt;/li&gt;
&lt;li&gt;The commit log message, i.e. written by the programmer, explaining what the commit represents&lt;/li&gt;
&lt;li&gt;A &amp;ldquo;diff&amp;rdquo; of all the files which have been changed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I read all these emails, and it&amp;rsquo;s really great to get a feeling for what&amp;rsquo;s going on in the project. It&amp;rsquo;s one extra communication medium, on top of the normal email, IM, telephone, wiki, task lists, and so on.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 07 Mar 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/vcs-commit-emails-are-good/</guid></item><item><title>Job advertisement in Macao Daily News</title><link>https://www.databasesandlife.com/job-advertisement/</link><description>&lt;p&gt;The following job advert appears today through Wednesday in the Macao Daily News. This is my first ever advertisement in a newspaper reading back to front!&lt;/p&gt;
&lt;div style="text-align: center; padding-top: 40px;"&gt;
&lt;img src="ad.jpg" /&gt;
&lt;/div&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 05 Mar 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/job-advertisement/</guid></item><item><title>Using UTF-8 and Unicode data with Perl's `MIME::Lite`</title><link>https://www.databasesandlife.com/using-utf-8-and-unicode-data-with-perl-mimelite/</link><description>&lt;p&gt;&lt;code&gt;MIME::Lite&lt;/code&gt; predates Perl 5.8 which supports Unicode and UTF-8. But it&amp;rsquo;s easy to get MIME::Lite to work with Unicode bodies and subjects.&lt;/p&gt;
&lt;p&gt;To attach a plain text part to a message, with a string which contains unicode characters, use:&lt;/p&gt;
&lt;pre&gt;$msg-&amp;gt;attach(
   Type =&amp;gt; 'text/plain; charset=UTF-8',
   Data =&amp;gt; encode("utf8", $utf8string),
);&lt;/pre&gt;
&lt;p&gt;To set the subject of a mail from a string containing unicode characters, use:&lt;/p&gt;
&lt;pre&gt;use MIME::Base64;
my $msg = MIME::Lite-&amp;gt;new(
   ...
   Subject =&amp;gt;   "=?UTF-8?B?" .
      encode_base64(encode("utf8", $subj), "") . "?=",
   ...
);&lt;/pre&gt;
&lt;p&gt;Note that the above methods also work even if the strings do not contain unicode characters, or do not have the UTF-8 bit set.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Tue, 27 Feb 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/using-utf-8-and-unicode-data-with-perl-mimelite/</guid></item><item><title>`CHAR` vs `VARCHAR` (and `VARCHAR2`)</title><link>https://www.databasesandlife.com/char-vs-varchar-and-varchar2/</link><description>&lt;p&gt;A friend just asked me:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I have a DB, informix actually but I think its unimportant. A column is a char(100). I have a string of text in a row in that col. the string is 4 characters long. When I select the char(100) column I get a space padded string of 100 characters with my string at the front. Have you ever seen this?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yep that&amp;rsquo;s normal. A char(100) column is exactly that: 100 characters, no more, no less. So if you put too few characters in the field, rather than giving an error, the db pads the value with spaces.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Fri, 23 Feb 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/char-vs-varchar-and-varchar2/</guid></item><item><title>Violating Java's privacy</title><link>/post/violating-javas-privacy/</link><description>&lt;p&gt;I  found myself in the need to invoke a private method of a Java
class that was out of my control. I really needed it.&lt;/p&gt;
&lt;p&gt;So, I went ahead and &lt;em&gt;violated&lt;/em&gt; the method's privacy declaration via
reflection. You can (under certain circumstances) invoke methods which
are declared as private using the Reflection APIs (&lt;code&gt;java.lang.reflect&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;But before using reflection, I created two classes:&lt;/p&gt;
&lt;!-- ```Java  {linenos=table,hl_lines=[8,"15-17"],linenostart=2} --&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-Java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;method1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Hello World!"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;B&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&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="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;method1&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;They compiled, and &lt;code&gt;java B&lt;/code&gt; said &amp;quot;Hello World!&amp;quot; as expected.&lt;/p&gt;
&lt;p&gt;Then, I made A's method &lt;code&gt;private&lt;/code&gt; and recompiled A. And I run &lt;code&gt;java B&lt;/code&gt; again. Nothing changed. It just worked again.&lt;/p&gt;
&lt;p&gt;That cannot be right. This would mean you can handcraft a class with the
same name and methods as the original one but making everything
&lt;code&gt;public&lt;/code&gt;.  Then you could use this class only at compilation time,
allowing your code to call any method. (Or, one could modify
the Java compiler to ignore access declarations altogether).&lt;/p&gt;
&lt;p&gt;Returning to the reflection APIs for a sec., here's how I called private method
&lt;code&gt;ProcessService.getSession(String)&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-Java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clazz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ProcessService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;Method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clazz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDeclaredMethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"getSession"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setAccessible&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// allow access, as if it were public&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;invoke&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sessionId&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The Java compiler enforces access restrictions at compilation
time. But it's the Security Manager (an object of type
java.lang.SecurityManager) the man on duty at runtime. The above code
works because, by default, the JVM does not use a SecurityManager.&lt;/p&gt;
&lt;p&gt;For the curious, the implementation for method
&amp;quot;setAccessible(boolean)&amp;quot; (part of the JDK) looks like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-Java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setAccessible&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SecurityException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;SecurityManager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getSecurityManager&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;checkPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ACCESS_PERMISSION&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;setAccessible0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It simply asks the current SecurityManager for permission before
actually changing the &amp;quot;accessible&amp;quot; property. In general, before any
&amp;quot;sensitive&amp;quot; operation, the code in the JDK asks the SecurityManager
for permission.&lt;/p&gt;
&lt;p&gt;You enable the default SecurityManager passing
&lt;code&gt;-Djava.security.manager&lt;/code&gt; to the java command. This would make the
first code snipet above to throw an AccessControlException. Both
methods &lt;code&gt;Class.getDeclaredMethod()&lt;/code&gt; and &lt;code&gt;Method.setAccessible()&lt;/code&gt;
are guarded by the SecurityManager.&lt;/p&gt;
&lt;p&gt;To allow the above use of reflection with the SecurityManager enabled,
one must define a security
&lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html"&gt;policy&lt;/a&gt;
for explicitly permitting those operations.&lt;/p&gt;
&lt;p&gt;Anyway, back to my original concern of class B being able to invoke class A's
private method directly. I could try to run it with the
SecurityManager enabled:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ java -Djava.security.manager B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Hello World!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It still works. So, I run the same test but from an applet (a more
restricted container):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.awt.Label&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;java.applet.Applet&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BApplet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Applet&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Label&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;method1&lt;/span&gt;&lt;span class="p"&gt;()));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;applet&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"300"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"300"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"BApplet.class"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;applet&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And now it &lt;em&gt;did&lt;/em&gt; fail, finally:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ appletviewer BApplet.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;java.lang.IllegalAccessError: tried to access method
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;                  A.method1&lt;span class="o"&gt;()&lt;/span&gt;Ljava/lang/String&lt;span class="p"&gt;;&lt;/span&gt; from class BApplet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  at BApplet.start&lt;span class="o"&gt;(&lt;/span&gt;BApplet.java:7&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  at sun.applet.AppletPanel.run&lt;span class="o"&gt;(&lt;/span&gt;AppletPanel.java:414&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  at java.lang.Thread.run&lt;span class="o"&gt;(&lt;/span&gt;Thread.java:595&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For this particular type of runtime checks, the Security Manager is
clearly not involved. Nothing shows up in the StackTrace. It happens
at a lower level, in the JVM itself. Makes sense now: it would be
really inefficient to invoke the SecurityManager for every non-public
method call... (and who'd check the calls to the SecurityManager
itself!?).&lt;/p&gt;
&lt;p&gt;But still, Why does it work with the java command, but fails within an
applet?&lt;/p&gt;
&lt;p&gt;To help with performace, the JVM only enforces these checks on classes
loaded by custom classloaders. Classes loaded by the standard class
loaders (bootstrap, extensions and System) are considered
&lt;em&gt;trusted&lt;/em&gt;. There are &amp;quot;levels&amp;quot; of trust actually, (bootstrap being the
most trusted), but for this particular case, even the System
(classpath) class loader trusted my class.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.artima.com/insidejvm/ed2/"&gt;Inside the JVM&lt;/a&gt; covers the JVM
internals extensively, including &lt;a href="http://www.artima.com/insidejvm/ed2/security.html"&gt;security and class
loaders&lt;/a&gt;.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Tue, 20 Feb 2007 00:49:00 GMT</pubDate><guid isPermaLink="true">/post/violating-javas-privacy/</guid></item><item><title>The Realizations of Self as Seen in “The Cardboard Room”</title><link>https://www.davidschlachter.com/writings/selfrealization</link><description>Looking at interesting topics like hate, fear, and emotions, this was my response that I wrote for my Mid-Year English Exam. I actually put a lot of thought into this, and I suppose it was cathartic in a way.</description><author>David Schlachter</author><pubDate>Mon, 05 Feb 2007 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/selfrealization</guid></item><item><title>Settling In</title><link>https://johnj.com/posts/settling-in/</link><description>&lt;p&gt;
Been here a bit more than 24 hours, and I'm settling in. Mostly I've
been preoccupied with debugging a particularly nasty system error in
our device driver; hopefully I'll have that wrapped up soon and can
join Kael, Keith and Dave in higher-level deployment and testing of
DAQ (the data acquisition software).&lt;/p&gt;
&lt;p&gt;
Once I get acclimated to the altitude I'll be much happier. It's been
hitting a bit harder than last year, though I took the diamox they
encouraged us to take in McMurdo. Unfortunately the diamox makes my
hands and feet and face feel like they're buzzing, which is
irritating. And I'm generally out of breath, and have to pee
constantly (apparently the body adjusts its pH to the new altitude
this way). Out in the Dark Sector (the radio-quiet area where our
experiment is) the facilities consist of a "solar" (i.e., painted
black) toilet; the solar toilet is essentially an otherwise unheated
outhouse with a styrofoam toilet seat built over a half-buried waste
barrel. Ah, the life of luxury.&lt;/p&gt;
&lt;p&gt;
All is pretty good, though, and it's fun to see familiar, sunburnt
faces with unwashed hair (remember, 2 showers per week, 2 minutes
each, folks!), and the same old tracked vehicles and space-age
buildings and the endless horizon and the great big open sky with long
simple cloud shapes a seemingly infinite distance away. I'm settling
in and with any luck we can start to get stuff done quickly.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Tue, 30 Jan 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/settling-in/</guid></item><item><title>Batteries and Sheep</title><link>https://johnj.com/posts/batteries-and-sheep/</link><description>&lt;figure&gt;





&lt;a href="https://johnj.com/john-and-dave-on-anaconda-MTB-path.jpg"&gt;&lt;img class="resize" src="https://johnj.com/john-and-dave-on-anaconda-MTB-path_hu_d59e9c254b974474.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
John and Dave on the Anaconda MTB Path
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Photo courtesy and © Kael Hanson&lt;/p&gt;
&lt;p&gt;
With a day to kill yesterday, Dave, Kael and I put our heads together
with Sandy, our proprietress at the Devon, and decided to rent
bicycles for a trip to the ocean. Sandy said that there were a bunch
of WWII gun batteries worth seeing near the entrance to the harbor
where Lyttleton lies, south of Christchurch. That sounded pretty good
to us. Within 20 minutes the bike rental guy was there, providing us
with mountain bikes, helmets, locks, and a suggested route and we were
off, pedaling furiously first through Christchurch traffic, then up a
fairly wicked mountain grade, past residential zones at first and then
just trees, rocks, wet clouds and, when the clouds parted, amazing
views.&lt;/p&gt;
&lt;p&gt;
&lt;a href="./static/jacobsen_pole07_set1/index.html"&gt;The first photo set for this trip&lt;/a&gt; will tell the story better than any
writing I can come up with - suffice it to say I was pretty astonished
that such rugged beauty lay within a vigorous pedal of
Christchurch. And, that we were all thoroughly wasted after more than
eight hours of biking up and down the mountains south of CHC
(sometimes on paths as challenging as a BMX bike course). At one
point, as we juddered down an especially challenging path, I jokingly
asked Kael if this wasn't one of those team-building exercises to get
us ready for the Pole.&lt;/p&gt;
&lt;p&gt;
Of course, no blog about New Zealand would be complete without a
picture of a sheep:&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/texted_IMG_2761.jpg"&gt;&lt;img class="resize" src="https://johnj.com/texted_IMG_2761_hu_e76cadd7c0ad9806.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
A Sheep
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
The gun emplacements were also amazing. For reference, they are at
Godley Head south and east of Christchurch. We had to get the bikes
back by 1830h so we could only see half of what was there. I've seen
WWII defensive emplacements in southern France, on Corsica, and in
California, and these were much better preserved and much more
extensive than any I'd ever seen. The coolest part was a set of
underground rooms and tunnels, completely dark (Kael's flashlight and
my camera focus-flash kept us oriented). Here's a teaser, but do see
&lt;a href="./static/jacobsen_pole07_set1/index.html"&gt;the complete set&lt;/a&gt;:&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/texted_IMG_2789.jpg"&gt;&lt;img class="resize" src="https://johnj.com/texted_IMG_2789_hu_8ba9e8d3297d2bd5.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Kael descending into a bunker
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Today we get our clothing, if I can actually get my battered carcass
going…. Breakfast may help.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Wed, 24 Jan 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/batteries-and-sheep/</guid></item><item><title>All for McNaught</title><link>https://johnj.com/posts/all-for-mcnaught/</link><description>&lt;p&gt;
Since its swing through &lt;a href="https://simple.wikipedia.org/wiki/Perihelion"&gt;perihelion&lt;/a&gt; a few days ago, we should be able
to see &lt;a href="https://apod.nasa.gov/apod/ap070122.html"&gt;Comet McNaught&lt;/a&gt; from here. Last night, a decent meal of sushi
(punctuated by green tea ice cream to die for), we went looking for
the comet in Hagley Park, a large open area ringed by trees not far
from the Arts Centre and our B&amp;amp;Bs. As the hot winds from the north
buffeted us, we saw Venus, a lovely sunset, and amazing,
hurricane-like clouds of the sort I suppose you only get to see in the
middle of the Pacific Ocean – but no comet. We're going to try again
tonight. No other plans yet.&lt;/p&gt;
&lt;p&gt;
It's strange to have summer, an 80 F January thaw… but nice. I'm
already starting to get used to it, which is a very bad idea.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Tue, 23 Jan 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/all-for-mcnaught/</guid></item><item><title>Descent</title><link>https://johnj.com/posts/descent/</link><description>&lt;figure&gt;





&lt;a href="https://johnj.com/IMG_2680.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_2680_hu_c21c17e2e9ba770a.jpg" style="width: 500px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
Dawn over the Pacific
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;
Dawn over the Pacific, and 30 minutes left in the Big Flight from LA
to Auckland. The first couple of hours were the worst. We had to wait
for luggage at the gate for almost an hour and I was already sore and
restless before we took off. But I managed to distract myself with
"Gravity's Rainbow," songs on the iPod, a decent dinner, a glass of
Australian chardonnay, and, most helpfully, Gregory's suggested
Tylenol PM which put me out while trying to focus on the first few
minutes of "Miami Vice."&lt;/p&gt;
&lt;p&gt;
So the upshot is that I managed to sack out for at least 1/3 of the
flight….&lt;/p&gt;
&lt;p&gt;
… now I'm safe in Christchurch having landed perhaps 30 minutes
ago. Staying at my favorite hotel, the Devon, and not flying until
Thursday. So it's time to relax and enjoy summer for a few days (it
was rainy in Auckland, but it's hot and sunny here).&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Mon, 22 Jan 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/descent/</guid></item><item><title>Giacometti</title><link>https://johnj.com/posts/giacometti/</link><description>&lt;p&gt;
Just got back from a tasty lunch at the Dux De Lux followed by a visit
to the Christchurch Art Gallery, an attractive little museum a block
from the Devon.&lt;/p&gt;
&lt;p&gt;
They had a lovely show of Giacometti prints, drawings and
sculptures. Giacometti and I share a birthday (Oct. 10) and he died
the year I was born (1966). His sculptures are haunting and
deceptively simple-looking - tall and thin figures standing rigidly
erect, features all but obliterated in a field of surface
vibration. But I found his drawings and prints even more
attractive. Very simple subject matter again: a head, a chair, a small
group of figures. But rendered loosely as spare lattices of visceral
response to…. something, seen in the few models he employed over and
over again (his mother, his brother, his wife, his mistress). Made me
want to make etchings again, and lithographs.&lt;/p&gt;
&lt;p&gt;
Also a wonderful set of small rooms filled with drawings and paintings
by the spookily gifted 19th c. New Zealand/Dutch artist Petrus Van Der
Velden - in particular, a series of sketchbooks and studies for a
painting called the Dutch Funeral. Gorgeous drawings à la Rembrandt or
certain 19th c. Russian artists like Ilya Repin, but moodier, darker,
quieter, seemingly obsessed with beauty in death and suffering. Some
of the sketches were tiny, no more than a couple of inches on a side,
brown pages taken from battered sketchbooks… haunting, inspiring,
and very humbling.&lt;/p&gt;
&lt;p&gt;
Tomorrow we have the day off; Wednesday we get our cold weather gear,
and Thursday we fly to McMurdo.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Mon, 22 Jan 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/giacometti/</guid></item><item><title>t=0</title><link>https://johnj.com/posts/t-equals-zero/</link><description>&lt;p&gt;
Under way at last.&lt;/p&gt;
&lt;p&gt;
My flight to LA leaves in 40 minutes - the first of five flights, a
migration of sorts. Flying south for the winter. Well, summer…&lt;/p&gt;
&lt;p&gt;
This is trip number six; as such, what I write about won't be a
complete blow-by-blow as I have done in earlier years &lt;del&gt;(see the links
to previous years on the sidebar)&lt;/del&gt;, but you will get to see the trip
digested through the eyes of an "old hand." To get in the mood, let's
start with a few excerpts from my first trip, ten years ago…&lt;/p&gt;
&lt;blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;
December, 1996.&lt;/p&gt;
&lt;p&gt;
FLYING TO NEW ZEALAND&lt;/p&gt;
&lt;p&gt;
8:47 AM New Zealand time, Aukland airport.&lt;/p&gt;
&lt;p&gt;
New Zealand is cool!!!!&lt;/p&gt;
&lt;p&gt;
Everyone drives on the wrong side of the road. It's green and wet.&lt;/p&gt;
&lt;p&gt;
A cyclone is expected to hit tonight. I totally love this place
already.  Gotta go, we're taking off.&lt;/p&gt;
&lt;p&gt;
[…]&lt;/p&gt;
&lt;p&gt;
I think I have found the one place in the world more beautiful than
Wisconsin. Way better than Hawaii, California, Switzerland… we'll
have to see about France.&lt;/p&gt;
&lt;p&gt;
On the coast near the Aukland airport, tiny green trees stick out of
the shallow water like little puffballs. Everything is green and lush,
a shock after Wisconsin. Apparently it frosts only a few times a year,
and those are the bad winters. Lots of tiny roads and houses scattered
about on irregularly-shaped land. Impending cyclones with 150 km/hr
winds provide added excitement. I believe our aircraft took off just
ahead of the storm.&lt;/p&gt;
&lt;p&gt;
Before takeoff, I thought we had a problem–smoke or steam was
drifting into the cabin above our heads through long slits. No one
else seemed to mind, so this is apparently normal. Maybe they want to
keep people from drying out. I sure could use a hot bath, come to
think of it.&lt;/p&gt;
&lt;p&gt;
Horse racing and cricket figure predominantly in sports news in the
New Zealand Herald.&lt;/p&gt;
&lt;p&gt;
On the airplane telly last night (gotta start talking like the locals)
there was a blurb on some sport that looked like it might be rugby,
but I couldn't tell. It was total mayhem–people running and kicking a
football-like thing, catching it, tossing it around. Pure action but
much more three-dimensional than soccer or football; it looked more
like the pure hand-to-hand combat that all sports must have arisen
from. [It was Australian Rules Football.]&lt;/p&gt;
&lt;p&gt;
Time for the second airplane breakfast of the day. I'm having fun!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;
4:45 PM, Jan 1, 1997, Hotel California, McMurdo Base, Antarctica
Temperature, about 30 degrees F.&lt;/p&gt;
&lt;p&gt;
[…]&lt;/p&gt;
&lt;p&gt;
FLYING TO MCMURDO&lt;/p&gt;
&lt;p&gt;
"Few people have ever seen this," said Neck [our pilot]. I felt amazed
that I had ever doubted that I would want to make this trip.&lt;/p&gt;
&lt;p&gt;
What began as a faint line of mountains gradually became a spectacular
view. As we approached, I studied the approaching topography on the
navigation chart, noticing the special symbol for crashed aircraft,
and finding where one lay on the map not all that far from where we
were flying. But the view soon overwhelmed my interest in the chart. I
took many pictures which I hope will mitigate my inability to describe
the mountains and long, winding glaciers. I [tried to see] the aerial
view with both scientific and artistic eyes. Looking at rivers of ice
and the clouds that flowed around them, I could see that ice and
clouds/air have a lot in common in appearance and underlying
form. Both flow through available channels, though on different
timescales, and reflect the light hitting them with so much purity
that one is not distracted by color, and can appreciate the near-still
dance of pure form.&lt;/p&gt;
&lt;p&gt;
Especially beautiful were the contrasts between the raw, jagged faces
of exposed rock and the breathlessly smooth contours of white, flowing
ice, occasionally ripped in striations caused by sudden shifts of
inclination in flow.&lt;/p&gt;
&lt;p&gt;
[…]&lt;/p&gt;
&lt;p&gt;
We passed close by town before landing on the skiway on the ice sheet
beyond. From the air (and from the ground too), the town itself looks
more like a collection of industrial freight boxes on black dirt and
rock than a real town. It is, however, an actual town, with a peak
summer population of 1200, a post office, a bank, a chapel, bars,
apartments and dorms, laboratories, "roads" (stretches of dirt that
people drive on, as opposed to stretches of dirt people don't drive
on), a hospital, and a power plant. As far as I know, the only thing
McMurdo lacks is a cemetery. None of this is really apparent to the
new observer from the air, cockpit view notwithstanding.&lt;/p&gt;
&lt;p&gt;
We passed the town and the rocky point it is on, and descended to the
runway just behind it. All this while the crew was going through their
landing checklist, acting very efficiently and professionally. I
always like to see people do something they're good at. And it was of
course a tremendous thrill to see the runway rise up to greet the
aircraft with a soft thud. Suddenly we were sliding down the ice,
slowing down with reverse thrust, watching odd, orange tracked
vehicles and equipment slide past. We went to the end of the skiway,
turned 180 degrees, and parked. Not long after, I thanked the crew,
and the other "beakers" [scientists] and I were led out on the ice
towards a van with big tires and high suspension (like most McMurdo
vehicles). It was quite warm, warmer than the Wisconsin I had left
just a few days ago. I looked around. There was a great expanse of
ice, and then mountains across the bay; nearby, the black hills hiding
McMurdo from us jutted into the white plain. A single seagull or skua
stood not far away. I was very excited. I had landed on The Ice.&lt;/p&gt;
&lt;p&gt;
[…]&lt;/p&gt;
&lt;p&gt;
AT THE POLE&lt;/p&gt;
&lt;p&gt;
I dozed and listened to music for a few hours, unpacked a few things,
and pondered my situation while taking several trips in the snow out
to the toilet and shower shack. It was there I met the guy who told me
about the piss cans [makeshift chamber pots]. We also talked about
other things about the Ice in general. I told him my impression of
McMurdo was better because there was scenery there. He replied,
"There's scenery here, too. All you have to do is close your eyes."
Words to live by.&lt;/p&gt;
&lt;p&gt;
There really is no scenery here. It's like being out in the middle of
a frozen lake, except there is no end to it! The dome, various
buildings, odd tracked vehicles known as "sprytes" as well as other
trucks and construction equipment, the runway, and the ceremonial and
true geographic poles, are it. They are within about a mile of each
other. This is a small speck on an immense plain of ice. To think that
Scott and his men made it here on foot boggles the mind. (Amundsen,
who beat Scott by a few weeks, used sled dogs both to move men and
gear, and to feed the men as well towards the end of the
expedition. Amundsen made it back alive. Scott didn't. The station is
named after both of them.)&lt;/p&gt;
&lt;hr /&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Fast-forward to 2007.&lt;/p&gt;
&lt;p&gt;
Airborne now en route to LAX, listening to "Dub Side of the Moon," a
thoroughly postmodern Reggae-Floyd mash-up (thanks, Todd) on the new
red Nano courtesy of Santa Jobs and the Apple-cheeked elves of
Cupertino. Fell asleep already before takeoff, and realized as I awoke
to the trill of the engines that I could happily stay asleep until
magically waking up in my small room in the A wing of the station, go
for a quick jog on the treadmill, take my 2 minute shower, and start
working. Sad, eh? I'm ready to be there before the trip has even
gotten under way. I may think I know what to expect, but I know enough
to know that there can be surprises&lt;sup class="footnote-reference"&gt;&lt;a href="#footnote-1" id="footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt; good and bad when traveling to
the Ice. If nothing worse than previous years occurs, I'll be
perfectly content. Once I get to Christchurch I'll be in good
shape. The concatenated series of three flights (4+13+2 hrs) is the
hardest part of the trip.&lt;/p&gt;
&lt;p&gt;
For newcomers to the blog, the flight sequence is
ORD-&amp;gt;LAX-&amp;gt;CHC-&amp;gt;MCM-&amp;gt;NPX: Chicago to LA to Auckland, NZ to
Christchurch, NZ; get extreme cold weather (ECW) gear, fly to McMurdo
station on the edge of Ross Island, then to South Pole. Acclimate to
the altitude, then accomplish miracles.&lt;/p&gt;
&lt;p&gt;
A suitcase, a small backpack and a manly-purse are my only luggage
items. Packing light is a challenge and a pleasure. Most of the way I
won't have to schlepp the big bag, but a long schlepp it is indeed,
and I know what not to take now. Colleague Bob Morse told me, "all you
really need is a toothbrush and some underwear." He's not far off. A
laptop and a towel are the other necessities, though some people
manage to do without the laptop (how?) and one colleague I know forgot
his towel and had to suffer through until a fellow South-bound
traveler could liberate one from a hotel in Christchurch for him. Some
things I do take I wouldn't have thought of on the first trip: spray
bottle for extra humidity, clothesline for same (most clothes hang dry
in &amp;lt;8 hrs in the driest, highest desert in the world). An extra bag to
store summer clothes and other stuff I won't need in Christchurch, and
for gifts on the way home. Similarly, I give back perhaps 1/3 of the
ECW gear in Christchurch, since I know I won't wear it.&lt;/p&gt;
&lt;p&gt;
As the engines gunned for takeoff from Chicago I thought of the
software tests on "new DAQ" we have been running for the past few
weeks. Three or more of us in separate offices, separate cities,
tethered together by online chat and daily conference calls, putting
the software out on the "runway" (a bunch of networked computers),
giving it lots of gas, and watching with bated breath to see if it
took off. Cheering when it did, sighing when it crashed and burned,
sending us back to the proverbial (digital) drawing board. It's not
exactly the way you build jet engines – thankfully, I thought, as we
soared into the skies above O'Hare.&lt;/p&gt;
&lt;p&gt;
Or is it?&lt;/p&gt;
&lt;p&gt;
A few small personal and work goals for the trip:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Help to achieve and maintain hitherto-unseen stability and elegance
in the data acquisition (DAQ) software;&lt;/li&gt;
&lt;li&gt;Stick to a routine of sleep, meditative stretching, and running that
keeps me healthy and positive. Keep up my running conditioning for
Shamrock Shuffle and '07 Chicago Marathon;&lt;/li&gt;
&lt;li&gt;Maintain good-natured and constructive dialogue with
colleagues. Steer as clear as possible of any of the ugly politics
that tend to crop up during summers at Pole;&lt;/li&gt;
&lt;li&gt;Finish or at least take a good whack at Pynchon's "Gravity's
Rainbow," a brown-paged paperback copy of which I "borrowed" from
the AMANDA lab in MAPO in the Dark Sector at Pole in 1998. I'll be
leaving the book (sans overdue book fines) behind in the library in
the new station. I like Pynchon but have had trouble finishing
anything except "The Crying of Lot 49." But I've beaten Stephenson's
amazing Baroque Cycle (almost 3000 pages) twice now, so I may be
ready for the "'Rainbow," and if I can finish that maybe I'll try
"V" again or his latest brain-bashing brick of a novel;&lt;/li&gt;
&lt;li&gt;Keep moving my drawing forward in bits and pieces. It has been a
real source of pleasure of late to return to drawing. My focus has
been on figurative drawing from life and from imagination, steered
by a measure of storytelling or narrative intent. Originally I was
going to make this a blog of drawings, and I may post some drawings
if they "work," but I'm going to leave it open-ended for the
moment. But I have four sketchbooks and plenty of implements to play
with;&lt;/li&gt;
&lt;li&gt;Get completely caught up on episodes of Battlestar Galactica (my new
favorite guilty pleasure);&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course, the first goal (doing the actual work) will probably take
up 99% of my time and energy.&lt;/p&gt;
&lt;p&gt;
Other differences between this trip and last year:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I'm supposedly lodging in the A wing rather than the B wing of the
station - which may mean a larger, or at least a quieter, room.&lt;/li&gt;
&lt;li&gt;The new gym (and, in fact, the remaining half of the
newly-constructed station) is available.&lt;/li&gt;
&lt;li&gt;I have no management responsibilities, since Kael (IceCube DAQ
software lead) is coming at the same time - whew!&lt;/li&gt;
&lt;li&gt;This trip is shorter by a week - also a good thing. Anything shorter
than three weeks is perhaps not worth the long slog to the
Ice. Anything longer starts to feel too long, though I've done six
weeks and, of course, some people go for a year or more….&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;About this blog: apologies in advance if things are not explained
enough or background details (such as what we're building) go
missing - if people have specific questions, they're more than welcome
to write – I'll try to answer them here. Check out the old blogs too.&lt;/p&gt;
&lt;p&gt;
Later!&lt;/p&gt;
&lt;div class="footnotes"&gt;
&lt;hr class="footnotes-separatator" /&gt;
&lt;div class="footnote-definitions"&gt;
&lt;div class="footnote-definition"&gt;
&lt;sup id="footnote-1"&gt;&lt;a href="#footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;div class="footnote-body"&gt;
&lt;p&gt;Surprises I or other colleagues have experienced en-route:
wandering herds of penguins; tours of Scott's Hutt; unexpected cabin
depressurizations; being invited to sit in the cockpit during
landings; flights "boomeranging" (having to turn back due to weather
or mechanical issues); scenic flights over active volcanoes or through
canyons; and, of course, sitting around Christchurch or McMurdo for
hours to dozens of days, waiting for the weather to clear or for a
needed replacement aircraft part to arrive from somewhere in the US
military's global infrastructure.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Mon, 22 Jan 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/t-equals-zero/</guid></item><item><title>The Big (Really really big...) Picture</title><link>https://johnj.com/posts/the-really-really-big-picture/</link><description>&lt;p&gt;
In case I don't get to it any time soon, Keith has done a decent
enough job &lt;a href="http://ksblog.wordpress.com/2007/01/22/icecube/"&gt;explaining the big picture&lt;/a&gt; of Icecube on &lt;a href="http://ksblog.wordpress.com/"&gt;his blog&lt;/a&gt;.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Mon, 22 Jan 2007 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/the-really-really-big-picture/</guid></item><item><title>History and auto-completion with rlwrap</title><link>/post/history-and-auto-completion-with-rlwrap/</link><description>&lt;p&gt;If you ever used Oracle's &lt;code&gt;sqlplus&lt;/code&gt; you'd agree that it provides an
arcane command-line interface.&lt;/p&gt;
&lt;p&gt;Being a textmode command-line tool is &lt;em&gt;not&lt;/em&gt; what makes it arcane
though. It's that it doesn't offer auto-completion or a
command history. If you made a small mistake when typing a long
statement, you would have to re-enter it all over again.&lt;/p&gt;
&lt;p&gt;Most modern command-line tools (including MySQL and PostgreSQL's
equivalent to Oracle's sqlplus) provide much more powerful interfaces,
just like the bash shell does. They include auto-completion of the
text you are typing (by pressing TAB), access to a history of commands
(up/down arrows, or C-p/C-n), incremental search on the history (C-r),
they remember the history in between invocations and more.
Virtually all these tools use the GNU readline library to provide
these capabilities.&lt;/p&gt;
&lt;p&gt;Unfortunately, not all command-line tools use GNU readline (splplus
being one). Fortunately, there's
&lt;a href="http://utopia.knoware.nl/~hlub/uck/rlwrap/"&gt;rlwrap&lt;/a&gt;. I just
came to know this nice little tool.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;rlwrap&lt;/code&gt; &amp;quot;wraps&amp;quot; any other command-line tool and gives you a readline
interface to it. So, you can invoke &lt;code&gt;rlwrap sqlplus&lt;/code&gt; and you get
sqlplus with the history capabilities of the readline library.&lt;/p&gt;
&lt;p&gt;You may also pass to rlwrap a list of potential words to use for
completion. For example, I also use rlwrap with &lt;code&gt;groovysh&lt;/code&gt; (the Groovy
language shell), so I created a file &amp;quot;~/.groovysh_completions&amp;quot; containing the list of commands groovysh accepts. Now, when I launch groovysh I get command history and specialized auto-completion.&lt;/p&gt;
&lt;p&gt;Now, rlwrap cannot do magic. Being so generic, it cannot do
intelligent context-dependent auto-completion. For instance, PostgreSQL's command-line interface automatically pulls the list of
potential table names after doing &lt;code&gt;SELECT * FROM &amp;lt;TAB&amp;gt;&lt;/code&gt;. rlwrap cannot give this intelligence to sqlplus, but it's still much better than nothing.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Fri, 19 Jan 2007 01:06:00 GMT</pubDate><guid isPermaLink="true">/post/history-and-auto-completion-with-rlwrap/</guid></item><item><title>Smarmy of One</title><link>https://mbutler.org/smarmy-of-one/</link><description>Smarmy Of One by Soviet Shriner</description><author>mbutler</author><pubDate>Wed, 03 Jan 2007 19:47:03 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/smarmy-of-one/</guid></item><item><title>The Portrait of a Madman: Schizophrenia in “The Tell Tale Heart”</title><link>https://www.davidschlachter.com/writings/portrait</link><description>Narrator of ‘The Tell Tale Heart’ as a literary schizophrenic.</description><author>David Schlachter</author><pubDate>Thu, 21 Dec 2006 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/portrait</guid></item><item><title>Standards are less useful in the presence of fools</title><link>https://www.databasesandlife.com/standards-vs-fools/</link><description>&lt;p class="intro"&gt;Standards are quite useless if fools do not adhere to them; unfortunately fools are everywhere. Therefore, one could almost conclude that standards are quite useless.&lt;/p&gt;
&lt;p&gt;Specifically I implemented a data transfer protocol based on GET requests, and as specified in &lt;a href="http://tools.ietf.org/html/rfc3986#section-2.5" rel="noopener noreferrer" target="_blank"&gt;RFC 3986 &amp;ldquo;Uniform Resource Identifier&amp;rdquo; section 2.5&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip; the data should first be encoded as octets according to the UTF-8 character encoding [STD63]; then &amp;hellip;. should be percent-encoded. For example, &amp;hellip; the character LATIN CAPITAL LETTER A WITH GRAVE would be represented as &amp;ldquo;%C3%80&amp;rdquo; &amp;hellip;.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 13 Dec 2006 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/standards-vs-fools/</guid></item><item><title>How to subscribe to blog updates</title><link>https://johnj.com/posts/how-to-subscribe-to-blog-updates/</link><description>&lt;p&gt;
This year I will be posting directly to the blog, rather than sending
out e-mails to everyone like I've done in previous years.&lt;/p&gt;
&lt;p&gt;
The easiest way to get notified of updates is via a &lt;em&gt;news aggregator&lt;/em&gt;. A
news aggregator is similar to your Web browser, but with the added
feature that it lets you know when new posts have appeared. This saves
you the chore of having to check the Websites you are interested in
"by hand." In other words, it's sort of like an e-mail inbox for the
Web.&lt;/p&gt;
&lt;p&gt;
It's a big advantage for the blogger too, because he or she doesn't
have to collect e-mail addresses from everyone or send out daily
e-mails to hundreds of people (this is especially nice when posting
from a remote site like the South Pole). Anyone can subscribe or
unsubscribe at any time without the blogger having to do anything.&lt;/p&gt;
&lt;p&gt;
In order to set up your news aggregator, first you'll have to install
some software. &lt;del&gt;I recommend FeedReader for Windows, and NetNewsWire for
Mac (free version available here)&lt;/del&gt; [Feedly is what I use these days].&lt;/p&gt;
&lt;p&gt;
Once you have your news aggregator installed you "subscribe" to a blog
by giving your news aggregator software the URL for the blog. This
will be something called an "Atom feed" or an "RSS feed." Use &lt;del&gt;this
link&lt;/del&gt; as the feed for this blog (right-click or, on the Mac,
option-click on the link and say "Copy link location" to capture the
URL). The exact method of "subscribing" depends on the software, but
should be fairly obvious once you have the software installed – on
NetNewsWire Lite, I use "File-&amp;gt;New Subscription" and paste the URL in.&lt;/p&gt;
&lt;p&gt;
Many of you already look at blogs - most newspapers have RSS feeds
too. It's a really nice way to get fun stuff off the Web (cuts down on
the advertising, too!).&lt;/p&gt;
&lt;p&gt;
Happy reading!&lt;/p&gt;
&lt;p&gt;
p.s. to colleagues, friends and family - If you have a blog you'd like
me to link to, please drop me a line.&lt;/p&gt;
&lt;p&gt;
Example news aggregator:&lt;/p&gt;
&lt;figure&gt;





&lt;a href="https://johnj.com/rss-example.png"&gt;&lt;img class="resize" src="https://johnj.com/rss-example_hu_77e3b3829812d830.png" style="width: 400px; border: 0px solid black;" /&gt;&lt;/a&gt;


&lt;figcaption&gt;
example news aggregator
&lt;/figcaption&gt;
&lt;/figure&gt;</description><author>John Jacobsen</author><pubDate>Mon, 11 Dec 2006 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/how-to-subscribe-to-blog-updates/</guid></item><item><title>What The Blog is For</title><link>https://johnj.com/posts/what-the-blog-is-for/</link><description>&lt;p&gt;
On my sixth trip to the South Pole, I will try to publish at least one
drawing or photo each day, possibly including some text.&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Sun, 10 Dec 2006 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/what-the-blog-is-for/</guid></item><item><title>IT Crowd Cross-stitch</title><link>https://justingarrison.com/blog/2006-12-02-it-crowd-cross-stitch/</link><description>I have mentioned the IT Crowd before and if you haven’t seen it yet you need to check out</description><author>Justin Garrison's Homepage</author><pubDate>Sat, 02 Dec 2006 02:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2006-12-02-it-crowd-cross-stitch/</guid></item><item><title>The `SUM(col)` of zero rows should zero, but is instead `NULL`</title><link>https://www.databasesandlife.com/the-sumcol-of-zero-rows-is/</link><description>&lt;p&gt;I must admit I get bitten by this regularly.&lt;/p&gt;
&lt;p&gt;The SQL standard states that aggregate functions should return NULL if no rows are processed (with the exception of COUNT).&lt;/p&gt;
&lt;p&gt;This means that computing the SUM of zero rows returns NULL as opposed to 0.&lt;/p&gt;
&lt;p&gt;This goes against mathematical intuition. If I have zero USB sticks, how much data can I store on my USB sticks? The answer is 0 bytes, but modelling USB sticks in a database would return &amp;ldquo;undefined&amp;rdquo; number of bytes can be stored on my zero USB sticks.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Wed, 29 Nov 2006 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/the-sumcol-of-zero-rows-is/</guid></item><item><title>iThink therefore iMac</title><link>https://jasoneckert.github.io/myblog/ithink-therefore-imac/</link><description>&lt;p&gt;&lt;img alt="iMac" src="imac.jpg#center" title="iMac" /&gt;&lt;/p&gt;
&lt;p&gt;The old expression “Mac users usually swear by their computers&amp;hellip;..Windows users typically swear at their computers” got to me last week when my instructor computer’s Windows desktop and applications froze 3 times at the beginning of class.  As a result, my Terminal Services connection (that I use to record daily quiz marks) was destroyed each time.  So I brought an old iMac G3 with OS X Tiger into my classroom this week and put it on a switch box so that I can use it to record marks across Terminal Services (OS X doesn’t crash) while keeping my instructor computer free for classroom use.   On the plus side, it also allows me to demonstrate the portability of the commands that I am teaching in my Linux Administration class next week and it looks good at the front of the room - I was never a big fan of the G3 iMacs when they first came out because they ran OS 9, but I must admit that they are sleek looking computers :)&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Wed, 22 Nov 2006 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/ithink-therefore-imac/</guid></item><item><title>On API Design Guidelines</title><link>/post/on-api-design-guidelines/</link><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/em&gt; Good news! Jaroslav Toulash emailed me that he published a book on &lt;a href="http://www.amazon.com/gp/product/1430209739?ie=UTF8&amp;amp;tag=neuroning-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1430209739"&gt;Practical API Design&lt;/a&gt; !!!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Looks like Brian McAllister may be preparing a talk on &lt;a href="http://kasparov.skife.org/blog/src/talks-i-want-to-give.html"&gt;Designing Elegant APIs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I've been very interested in good API design for a long time. But I could
never find a single book on the subject. Many design and programming books provide good advice and guidelines that are essential for designing good APIs, but none of them tackles the matter directly.&lt;/p&gt;
&lt;p&gt;I reviewed &lt;a href="http://www.pragmaticprogrammer.com/titles/kpiod/index.html"&gt;&amp;quot;Interface Oriented Programming&amp;quot;&lt;/a&gt;
a few months back with disappointment. It may not be a bad
book, but I felt it was quite basic and superficial. May be my
expectations were too high, and too focused on API design.&lt;/p&gt;
&lt;p&gt;Over time, I collected some links on the subject and
&lt;a href="http://kasparov.skife.org/blog/src/api-design-refs.html"&gt;shared some with Brian&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://video.google.com/videoplay?docid=-474821803269194441"&gt;Best Practices in Javascript Library Design&lt;/a&gt; (via &lt;a href="http://www.artima.com/forums/flat.jsp?forum=276&amp;amp;thread=214061"&gt;John Resig on JavaScript API Design&lt;/a&gt;) - A good presentation given by the author of &lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.acmqueue.com/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=488&amp;amp;page=1"&gt;API: Design Matters&lt;/a&gt; - Article by Michi Henning, ZeroC, for ACM Queue magazine.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://lcsd05.cs.tamu.edu/slides/keynote.pdf"&gt;How to Design a Good API and Why it Matters&lt;/a&gt; - Excellent deck from Joshua Bloch. There's also a &lt;a href="http://www.infoq.com/presentations/effective-api-design"&gt;video&lt;/a&gt; of his presentation at JavaPolis 2005.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.artima.com/interfacedesign/"&gt;Interface Design&lt;/a&gt;, Best
Practices in Object-Oriented API Design in Java, by Bill Venners -
This one is a Book in progress!. Unfortunately, the last updates
seem to be from 2002 or so. I'm not sure if the project is still
alive. Anyway, it contains many good articles.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://openide.netbeans.org/tutorial/api-design.html"&gt;How To Design a (module) API&lt;/a&gt; -
A great page on good design practices for writing APIs.  It's tailored for
NetBeans module writers, but is still pretty general and gives very valuable guidelines.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://developers.sun.com/learning/javaoneonline/2006/coreplatform/TS-6218.pdf"&gt;How to Write APIs That Will Stand the Test of Time&lt;/a&gt; -
A session I attended at JavaOne 2006. Presented by Tim Boudreau and
Jaroslav Tulach, members of the NetBeans team. It focuses on API
evolution and compatibility, but also covers usability and other
guidelines. I guess they are the main guys behind NetBeans'
&lt;a href="http://openide.netbeans.org/tutorial/api-design.html"&gt;How To Design a (module) API&lt;/a&gt;
page linked above.&lt;/p&gt;
&lt;p&gt;I had the chance to speak with Jaroslav after his session and
suggested he should write a book on this topic. I emailed him the
references I had, and he said he would try to draft something by
the end of year.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.codeproject.com/gen/design/APIUsabilityArticle.asp"&gt;API Usability&lt;/a&gt; -
Focused on making APIs easy to use. The article applies general
usability principles (commonly used in GUI design) to the design of
APIs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.gotdotnet.com/team/brada/APIUsability.pdf"&gt;Measuring API Usability&lt;/a&gt; -
An interesting article by a usability engineer at Microsoft,
published on Dr. Dobb's. It favors the use of scenario-based design
to achieve usable APIs, and explains the use of their &amp;quot;cognitive
dimensions&amp;quot; framework for measuring API usability. He also &lt;a href="http://blogs.msdn.com/stevencl/"&gt;blogs&lt;/a&gt; about API usability.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/kcwalina/archive/2005/12/20/APIDesignLaws.aspx"&gt;Krzysztof's Laws of API Design&lt;/a&gt; -
From another &lt;a href="http://blogs.msdn.com/kcwalina/default.aspx"&gt;Microsoft blogger&lt;/a&gt; on API design.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.artima.com/forums/flat.jsp?forum=106&amp;amp;thread=142428"&gt;Java API Design Guidelines&lt;/a&gt; - A
good article from a developer who was also surprised by the lack of
a book about API design. He collected some advice and additional
links.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.cafeconleche.org/slides/javapolis/xom/index.html"&gt;XOM Design Principles&lt;/a&gt; - Some design &amp;quot;principles&amp;quot; followed by XOM (an XML parsing library).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.aristeia.com/Papers/IEEE_Software_JulAug_2004.pdf"&gt;The Most Important Design Guideline?&lt;/a&gt; -
A short article by C++ guru Scott Meyers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.martinfowler.com/bliki/HumaneInterface.html"&gt;Humane Interface&lt;/a&gt;,
&lt;a href="http://www.martinfowler.com/bliki/MinimalInterface.html"&gt;Minimal Interface&lt;/a&gt;,
&lt;a href="http://www.martinfowler.com/bliki/DesignedInheritance.html"&gt;Designed Inheritance&lt;/a&gt;,
&lt;a href="http://www.martinfowler.com/bliki/DslBoundary.html"&gt;DSL Boundary&lt;/a&gt;,
&lt;a href="http://www.martinfowler.com/bliki/DuckInterface.html"&gt;Duck Interface&lt;/a&gt;,
&lt;a href="http://www.martinfowler.com/bliki/FluentInterface.html"&gt;Fluent Interface&lt;/a&gt;,
&lt;a href="http://www.martinfowler.com/ieeeSoftware/published.pdf"&gt;Public vs. Published Interfaces&lt;/a&gt; -
Some of the many great writings from Martin Fowler. These selection is
on specific topics that are relevant to API design. Most of them
are quite recent.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.acmqueue.org/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=317"&gt;Programmers are People,  Too&lt;/a&gt; - An article by Ken Arnold for ACM Queue magazine: &amp;quot;Programming language and API designers can learn a lot from the field of human-factors design.&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, let's hope Brian gives his talk at a big conference, signs a
contract with a big publisher and fills the void.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Mon, 20 Nov 2006 00:31:00 GMT</pubDate><guid isPermaLink="true">/post/on-api-design-guidelines/</guid></item><item><title>A done deal.</title><link>https://bastian.rieck.me/blog/2006/a_done_deal/</link><description>&lt;p&gt;My software practical is finished. The task was quite interesting: Develop a
software remote control that allows people to control RCX robots over the local
network (or the Intarweb).&lt;/p&gt;
&lt;p&gt;I did this project with two of my friends: Carlos and
&lt;a href="http://www.lutz-buech.de"&gt;Lutz&lt;/a&gt;. Although we worked hard, it was overall a
very fun experience. Project data is available at the &lt;a href="http://pille.iwr.uni-heidelberg.de/~legofern1"&gt;IWR (Institut für
Wissenschaftliches Rechnen)&lt;/a&gt;.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Sun, 12 Nov 2006 01:10:09 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2006/a_done_deal/</guid></item><item><title>A Free Software Manifesto For All Of Us</title><link>https://stop.zona-m.net/2006/11/a-free-software-manifesto-for-all-of-us/</link><description>&lt;p&gt;&lt;em&gt;(historical note: I first put this online in October 2006, at digifreedom.net. In the following years, I reorganized my websites several times&amp;hellip; until this piece went offline. I put it back at this new URL, with (almost) all the links updated, in December 2013)&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Fri, 10 Nov 2006 12:03:23 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2006/11/a-free-software-manifesto-for-all-of-us/</guid></item><item><title>gmail errors using T-Mobile UMTS card</title><link>https://www.databasesandlife.com/gmail-errors-using-t-mobile-umts-card/</link><description>&lt;p&gt;I started to get errors when using gmail. Gmail is normally very reliable.&lt;/p&gt;
&lt;p&gt;I would enter the URL in Firefox, the white background with &amp;ldquo;Loading&amp;hellip;&amp;rdquo; top-left would appear, then a little later &amp;ldquo;This appears to be taking longer than normal&amp;rdquo; would appear, and that was it.&lt;/p&gt;
&lt;p&gt;It turned out, I only got the errors when using a T-Mobile UMTS card (in Austria). This has an option to &amp;ldquo;compress images&amp;rdquo; which is on by default. This means that JPEGs look nastier (but load faster) than normal. This was somehow corrupting gmail! Go to the URL &amp;ldquo;1.2.3.4&amp;rdquo; to change this. Even once you&amp;rsquo;ve changed it, it &amp;ldquo;forgets&amp;rdquo; you&amp;rsquo;ve changed it, so you&amp;rsquo;ve got to do it once a session. And the browser can cache the downgraded images so you have to clear the browser cache sometimes as well.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Thu, 09 Nov 2006 02:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/gmail-errors-using-t-mobile-umts-card/</guid></item><item><title>Data Recovery with FreeBSD (part 2)</title><link>https://bastian.rieck.me/blog/2006/data_recovery_with_freebsd_part_2/</link><description>&lt;p&gt;Let&amp;rsquo;s continue the analysis of the CF card. I installed the Sleuth Kit to gather more information from the image. The first step was to look for things like passwords and/or login data. &lt;code&gt;dls&lt;/code&gt; (an utility from the Sleuth Kit) is just the right tool for this job:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dls -o 32 -f fat CF.img &amp;gt; CF.dls.img
strings -t d CF.dls.img &amp;gt; CF.str
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now I could grep the unallocated space of the image. Unfortunately, this did
not yield any interesting results except the things I already knew. Using
&lt;code&gt;sigfind&lt;/code&gt; it is possible to manually look for file signatures (as well as file
system signatures), but I recommend a file carver for that job. Of course I
tried it nevertheless and was actually able to recover some .JPEGs, but - alas!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;nothing new was to be discovered.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is when I decided to use &lt;a href="http://foremost.sourceforge.net/"&gt;Foremost&lt;/a&gt;, another file carving utility:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;foremost -t all CF.img -o output/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Using Foremost didn&amp;rsquo;t provide me with any false positives. It found even more files than Scalpel but this is due to the fact that I did not add anything in Scalpel&amp;rsquo;s configuration file. The results:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;13 Excel spreadsheets, including financial data.&lt;/li&gt;
&lt;li&gt;8 PDFs, including application letters.&lt;/li&gt;
&lt;li&gt;18 PNGs. Screenshots of their products (apparently for demo purposes).&lt;/li&gt;
&lt;li&gt;24 Word documents, including letters to customers.&lt;/li&gt;
&lt;li&gt;9 JPGs. Coporate design stuff.&lt;/li&gt;
&lt;li&gt;2 PowerPoint slideshows, dealing with internal stuff such as &amp;ldquo;How can we become better?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Some executables for PocketPC devices. Apparently games.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I found some Excel tables in the unallocated disk space. They seem to be
PocketExcel files and contain the grades of several persons. Apparently one of
the CF card&amp;rsquo;s users was a school-teacher. However, since I am not able to open
these files, I can&amp;rsquo;t be sure. Actually I wanted to try out Autopsy and Lazarus.
But Autopsy is just a front-end for the Sleuth Kit, so I didn&amp;rsquo;t need it.
Lazarus comes with the Coroner&amp;rsquo;s Toolkit
(&lt;a href="http://www.porcupine.org/forensics/tct.html"&gt;TCT&lt;/a&gt;), but Foremost had the
functionality I needed, too. However, they might be worth a look.&lt;/p&gt;
&lt;p&gt;To sum it all up: It was very creepy. If you are one of the humans on this
planet that doesn&amp;rsquo;t encrypt sensitive information&amp;hellip;well&amp;hellip;you should do it
from now on.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Sat, 21 Oct 2006 21:31:40 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2006/data_recovery_with_freebsd_part_2/</guid></item><item><title>Data Recovery with FreeBSD (part 1)</title><link>https://bastian.rieck.me/blog/2006/data_recovery_with_freebsd_part_1/</link><description>&lt;p&gt;Recently, I felt the urge to try out some data recovery tools I might need in the future. Fortunately, there was a CompactFlash card shipped with something I bought on eBay. This would be a safe starting point. I took an image of the card:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dd if=/dev/da0 of=~/tmp/card.img bs=8k
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As a first test I decided to let &lt;a href="http://www.digitalforensicssolutions.com/Scalpel"&gt;Scalpel&lt;/a&gt; take a look at the image. The only configuration one needs is found in &lt;code&gt;scalpel.conf&lt;/code&gt;. Here you may enter the file types / data types you are looking for. I was looking for common file types such as .DOC, .PDF etc.&lt;/p&gt;
&lt;p&gt;Since the card image was only about 32MB, Scalpel finished quite quickly and I could take a look at the booty. It was quite startling: Without any sophisticated tools I was able to recover Microsoft Word documents containing job applications, Microsoft Excel spreadsheets (Scalpel detected them as Word documents, though) containing working hours and payrollls and some internal memos. Apparently, the card had once belonged to a boss of a German enterprise. These guys are doing database applications and (quote) &amp;ldquo;complex, highly dynamical applications&amp;rdquo; - without getting into more detail.&lt;/p&gt;
&lt;p&gt;Well, let&amp;rsquo;s say that security is not what they are very strong at. Just one side note: I won&amp;rsquo;t write the enterprise&amp;rsquo;s name down on this blog. If anyone feels compelled to know it, just contact me. I know that my discovery is not that exciting, but it frightens me when I think about companies &amp;ldquo;releasing&amp;rdquo; private information like this through obvious security leaks&amp;hellip;&lt;/p&gt;
&lt;p&gt;To compare my results, I ran &amp;ldquo;GetDataBack for FAT&amp;rdquo; (a program &lt;a href="http://wiki.marcelkrau.se"&gt;Sven&lt;/a&gt; recommended), which was able to recover the same data. Since this software is very easy to use, every Windows-using newbie might recover sensitive data from media such as CF cards, hard disks etc.&lt;/p&gt;
&lt;p&gt;This is part one of my data recovery adventures. As soon as I have got time, I am going to try out &lt;a href="http://www.sleuthkit.org"&gt;the Sleuth Kit&lt;/a&gt; along with Lazarus or Autopsy.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Sun, 15 Oct 2006 21:00:53 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2006/data_recovery_with_freebsd_part_1/</guid></item><item><title>The lifecycle of the Corpus Chimera</title><link>https://mbutler.org/the-lifecycle-of-the-corpus-chimera/</link><description>The Intermedium of Tissue A variable represents a set of words in a particular order. For example, x might equal the word-set {the quick brown fox jumped over the lazy dog}. Note that the bracket represents the boundary of the word-set and is not included in the set itself. A piece of writing, whether it [&amp;#8230;]</description><author>mbutler</author><pubDate>Tue, 10 Oct 2006 01:04:42 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/the-lifecycle-of-the-corpus-chimera/</guid></item><item><title>WPA with FreeBSD 6.0</title><link>https://bastian.rieck.me/blog/2006/wpa_with_freebsd_6_0/</link><description>&lt;p&gt;My old laptop - an IBM Thinkpad T20 - is broken. May it rest in peace. Now I acquired an IBM Thinkpad R50e, which works perfectly well under FreeBSD. The following text shall guide you through the installation of the wireless networking card. I am assuming that you are using WPA in your W-LAN.&lt;/p&gt;
&lt;p&gt;First of all, you need to install the &lt;code&gt;iwi-firmware-kmod&lt;/code&gt;-port. It&amp;rsquo;s located in &lt;code&gt;net&lt;/code&gt;. Once the installation has finished, add the following lines to &lt;code&gt;/boot/loader.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;iwi_bss_load=&amp;quot;YES&amp;quot;
if_iwi_load=&amp;quot;YES&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If your W-LAN uses does not broadcast its SSID, you should enable the broadcast. Since the &lt;code&gt;iwi&lt;/code&gt;-device has its problems with connecting to these &amp;ldquo;hidden&amp;rdquo; networks, there is no other option available.&lt;/p&gt;
&lt;p&gt;In order to use WPA encryption, you need the &lt;code&gt;wpa_supplicant&lt;/code&gt;. This program handles the authentication process (it&amp;rsquo;s in the base system since 6.0, as far as I know). Edit the following file to suit your settings and save it as &lt;code&gt;/etc/wpa_supplicant.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=1
fast_reauth=1

network={
	ssid=&amp;quot;YourNet&amp;quot;
	proto=WPA
	key_mgmt=WPA-PSK
	psk=&amp;quot;YourPassword&amp;quot;
	priority=1
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This means you are going to use WPA along with a pre shared key. There are other options available; read &lt;code&gt;man wpa_supplicant.conf&lt;/code&gt; if you want to know more.&lt;/p&gt;
&lt;p&gt;To establish the connection, &lt;code&gt;wpa_supplicant&lt;/code&gt; has to be called. After the authentication process is finished, you should be able to assign an IP address to your interface:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wpa_supplicant -iiwi0 -c/etc/wpa_supplicant.conf -B
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;-B&lt;/code&gt;-option lets the program run as a background process. The IP address assignment and the authentication could be placed in a script if you want to do everything automatically.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Sun, 08 Oct 2006 21:05:12 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2006/wpa_with_freebsd_6_0/</guid></item><item><title>Variable Severity Logging</title><link>/post/variable-severity-logging/</link><description>&lt;p&gt;Most software products and logging frameworks produce entries in their
log files with different severity levels (say, from Debug to
Severe). Then, you can configure which level of messages you want the
application to log.&lt;/p&gt;
&lt;p&gt;At development time, you may want all messages to be logged. But once in
production, you normally configure things so that only Warning and
higher messages get logged (for performance, space and other
reasons).&lt;/p&gt;
&lt;p&gt;The problem is that when a Severe message arises you may need more
detailed (Debug level) information in order to understand the actual
cause of the problem. So, a common practice is to increase the logging
level at that point, and wait for the problem to happen again --not very effective.&lt;/p&gt;
&lt;p&gt;This is one of the problems that motivated the guys behind
&lt;a href="http://logbag.com"&gt;LogBag&lt;/a&gt;. The idea they propose is nice and simple:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Make the system write only Warning (and higher) messages to the log, but when such a message is logged, it should also include some lower-severity messages that occurred right before and after this one.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It's one of those good ideas that might seem obvious, but for some
reason nobody thought (or did anything) about before.&lt;/p&gt;
&lt;p&gt;To implement this, the logging system could keep a buffer of the
last N messages generated by the application, and when a Warning (or above)
message comes in, the whole buffer is flushed to disk.  This should
not be too hard to implement, since most logging frameworks already
use some kind of buffering, in a producer-consumer pattern, to improve
concurrency and performance.&lt;/p&gt;
&lt;p&gt;From the LogBag site:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You keep on putting things in a Log bag. Then whether the entire
log bag gets written or not depends on the highest severity level
in the entire bag. So either you write everything or you write
nothing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think it's a nice idea. I bet the technical support guys would like
it too :-).&lt;/p&gt;</description><author>Neuroning</author><pubDate>Sun, 24 Sep 2006 22:21:00 GMT</pubDate><guid isPermaLink="true">/post/variable-severity-logging/</guid></item><item><title>Digitally Free Schools</title><link>https://stop.zona-m.net/2006/09/digitally-free-schools/</link><description>&lt;p&gt;(a piece originally published at Digifreedom.net in 2006/2008, put back online here on 2018/05/17)&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 16 Sep 2006 21:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2006/09/digitally-free-schools/</guid></item><item><title>Seven Things we're tired of hearing from software hackers</title><link>https://stop.zona-m.net/2006/09/seven-things-were-tired-of-hearing-from-software-hackers/</link><description>&lt;p&gt;&lt;em&gt;(historical note: I first put this online in late 2006, at digifreedom.net. In the following years, I reorganized my websites several times&amp;hellip; until this piece went offline. I put it back at this new URL, with (almost) all the links updated, in December 2013)&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 16 Sep 2006 14:20:16 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2006/09/seven-things-were-tired-of-hearing-from-software-hackers/</guid></item><item><title>The last two copyright myths</title><link>https://stop.zona-m.net/2006/09/the-last-two-copyright-myths/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 16 Sep 2006 09:20:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2006/09/the-last-two-copyright-myths/</guid></item><item><title>Myth 5: art can and should go on just with the help of rich patrons, fan donations or government funding</title><link>https://stop.zona-m.net/2006/09/myth-5-art-can-and-should-go-on-just-with-the-help-of-rich-patrons-fan-donations-or-government-funding/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 16 Sep 2006 09:19:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2006/09/myth-5-art-can-and-should-go-on-just-with-the-help-of-rich-patrons-fan-donations-or-government-funding/</guid></item><item><title>Third and fourth copyright myths</title><link>https://stop.zona-m.net/2006/09/third-and-fourth-copyright-myth/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 16 Sep 2006 09:18:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2006/09/third-and-fourth-copyright-myth/</guid></item><item><title>Myth 2: What is good for software is good for every other creative activity</title><link>https://stop.zona-m.net/2006/09/myth-2-what-is-good-for-software-is-good-for-every-other-creative-activity/</link><description/><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 16 Sep 2006 09:17:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2006/09/myth-2-what-is-good-for-software-is-good-for-every-other-creative-activity/</guid></item><item><title>Myth 1: since no "intellectual property" can exist, no right to limit redistribution can exist</title><link>https://stop.zona-m.net/2006/09/since-no-intellectual-property-can-exist-no-right-to-limit-redistribution-can-exist/</link><description>&lt;p&gt;&lt;em&gt;(this page is just one part of my &amp;ldquo;Dangerous Copyright Myths&amp;rdquo; piece. Please also read the &lt;a href="https://stop.zona-m.net/2006/09/some-dangerous-copyright-myths/"&gt;introduction and index&lt;/a&gt; for more context)&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 16 Sep 2006 09:16:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2006/09/since-no-intellectual-property-can-exist-no-right-to-limit-redistribution-can-exist/</guid></item><item><title>Some Dangerous Copyright Myths</title><link>https://stop.zona-m.net/2006/09/some-dangerous-copyright-myths/</link><description>&lt;p&gt;&lt;em&gt;&amp;ldquo;Everything should be made as simple as possible, but not simpler.&amp;rdquo; - A. Einstein&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;BACKGROUND: I originally published this piece at digifreedom.net in September 2006. Later on, for several reasons stopped using that website, so this piece went offline. I put it back online in January 2014, split in several parts for easier reading (the introduction is right below the index):&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Sat, 16 Sep 2006 09:10:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2006/09/some-dangerous-copyright-myths/</guid></item><item><title>¿Por qué sigo con Debian?</title><link>https://danielpecos.com/2006/09/13/por-que-sigo-con-debian/</link><description>&lt;p&gt;La verdad es que ni yo mismo lo sé. Si por lógica fuera, ya haría un tiempo que estaría trabajando con otra distribución más simple y en la que la configuración de los dispositivos no ocupase varios días, realizando cientos de búsquedas por Internet y leyendo varios foros.&lt;/p&gt;
&lt;p&gt;Pero la realidad es que aquí sigo, peleando con el &lt;code&gt;apt-get&lt;/code&gt; y actualizando contra la versión &lt;em&gt;unstable&lt;/em&gt; de esta distribución.&lt;/p&gt;
&lt;center&gt;
  &lt;br /&gt; &lt;a href="http://debian.org"&gt;&lt;img alt="Debian" src="https://danielpecos.com/assets/2006/09/debian-1001.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/center&gt;
&lt;p&gt;Y tampoco será por falta de alternativas: he probado &lt;a href="http://www.opensuse.org/"&gt;OpenSuse&lt;/a&gt;, &lt;a href="http://www.gentoo.org/"&gt;Gentoo&lt;/a&gt;, &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;, y pese a tener muchas ventajas sobre Debian, les faltaba algo… Puede que sea esa sensación de control y orden, o bien un cariño adquirido durante nuestras largas horas de pelea, pero la verdad es que por más que lo intento no soy capaz de dejarla.&lt;/p&gt;
&lt;p&gt;¿Os pasa esto también a vosotros?&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Wed, 13 Sep 2006 16:39:17 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2006/09/13/por-que-sigo-con-debian/</guid></item><item><title>AntDoclet 1.1</title><link>/post/antdoclet-1-1/</link><description>&lt;p&gt;I just released a new version of &lt;a href="http://antdoclet.neuroning.com"&gt;AntDoclet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;No major changes. Now the comments of inherited methods are properly extracted from
the parent class comments.&lt;/p&gt;
&lt;p&gt;Thanks to Daniel Lindner for this fix.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Sat, 22 Jul 2006 19:43:39 GMT</pubDate><guid isPermaLink="true">/post/antdoclet-1-1/</guid></item><item><title>On What BPM Promises</title><link>/post/on-what-bpm-promises/</link><description>&lt;p&gt;Tom Baeyens (from jBPM) wrote an interesting
&lt;a href="http://jboss.org/jbossBlog/blog/tbaeyens/2006/07/05/About_BPM_miracles_and_what_you_can_expect_in_real_life.txt"&gt;article&lt;/a&gt;
about the over-promises of some BPMS (Business Process Management System) vendors.&lt;/p&gt;
&lt;p&gt;His dicussion addresses two points:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;BPM vendors often overpromise by hinting that BPM tools can
unify analysis with implementation&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Lack of integration between processes and plain general purpose
programming language&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;From my experience with Fuego (now BEA AquaLogic BPM) it's safe to say that it doesn't fall in that category.
I don't know what vendors he's referring to because, honestly, I've never spent serious time trying or analyzing other BPM vendor products.&lt;/p&gt;
&lt;h3 id="on-point-1-bpm-over-promises"&gt;On point #1: BPM over-promises&lt;/h3&gt;
&lt;p&gt;Tom is on the camp that any serious BPM development (or any &amp;quot;software
development&amp;quot; for that matter) will always require a developer. He
believes that the case where a Business Analyst defines and deploys a
business process without help from developers is limited to BPM vendor
demos.&lt;/p&gt;
&lt;p&gt;Keith Swenson, on the other side,
&lt;a href="http://kswenson.wordpress.com/2006/07/09/what-bpm-can-learn-from-a-spreadsheet/"&gt;replied&lt;/a&gt;
suggesting that BPM could be like Spreadsheets: many business people
now use Excel to build their own software solutions without help from
developers.&lt;/p&gt;
&lt;p&gt;Both arguments have their merits, and I think reality is somewhere
in between.&lt;/p&gt;
&lt;p&gt;From my experience building BPM solutions for customers, I believe
that the ideal of complete IT independence is not feasible today, nor
in the near future, except for very simple cases. (not only because of technical,
but also &lt;a href="/articles/2006/05/30/project-oriented-it"&gt;cultural reasons&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I'd question that the Spreadsheet example, while interesting, is quite
simplistic. What a business analyst can build with a spreadsheet is a
lot simpler that what you'd normally need a BPM for. For instance, a spreadsheet
&amp;quot;application&amp;quot;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;is a single-user solution&lt;/li&gt;
&lt;li&gt;Has no concurrency&lt;/li&gt;
&lt;li&gt;No security requirements&lt;/li&gt;
&lt;li&gt;No integration with other system (or minimal integration with a database)&lt;/li&gt;
&lt;li&gt;No transactionality&lt;/li&gt;
&lt;li&gt;Does not &amp;quot;expose&amp;quot; functionality to other systems&lt;/li&gt;
&lt;li&gt;No &amp;quot;enterprise&amp;quot; deployment (just run it in your desktop)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Obviously, you can build a single-user, non-transactional,
non-integrated solution with a BPM tool, and yes, a non-developer
could do it. But you'd be falling into the toy-example case that Tom
hates about BPM demos.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;But&lt;/em&gt;, I do believe that with a good BPM tool the level of abstraction
can be raised so that less technical skills are required to build
usable solutions. And, over time, that level will be raised more and
more.  I've seen business people that, after being involved in a
couple of BPM projects, they do more and more by themselves, to the
point of building robust usable prototypes on their own.&lt;/p&gt;
&lt;h3 id="on-point-2-process-and-general-programming-languages"&gt;On point #2: Process and general programming languages&lt;/h3&gt;
&lt;p&gt;With point #2 of Tom's original post, he states that it's critical to
integrate the process model with a general purpose programming language.&lt;/p&gt;
&lt;p&gt;I feel comfortable with that idea, because that's how it's been done
in FuegoBPM (ALBPM) since day one. And although I cannot say it is
&lt;em&gt;the&lt;/em&gt; best approach (since, again, I have no real experience with
other BPM tools), I can testify that it works pretty well in practice.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As a side note, we believe that it is bad practice to overload the
graphical representation with massive amount of decorations to try
and express every little technical detail of the process. But the
most important point is that you can create a common language
between the technical developer, who is responsible for making the
process executable and the business analyst, who is responsible for
communicating the requirements.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I agree with this, and it's important. The graphical process design
should be at a high-level of abstraction, in the business domain
terms, so that anybody can understand and follow the business process
flow.&lt;/p&gt;
&lt;p&gt;I think the value is not on the fact that a Business Analyst can
design an implement a solution on his own. Instead, the value is that
the Business Analyst can build initial designs and prototypes, and
then keep participating on the process design during the whole development
lifecycle, because while developers implement the low-level details,
the graphical model (if done right) is still understandable by
everyone. And, this graphical model is not just documentation, it's
the real thing, executable.&lt;/p&gt;
&lt;p&gt;As a side-effect, BPM is a great tool for facilitating iterative
development, helping to close the communication gap between the
business owners/users and developers, allowing early and continuous
feedback into the development process.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Tue, 11 Jul 2006 16:09:00 GMT</pubDate><guid isPermaLink="true">/post/on-what-bpm-promises/</guid></item><item><title>Summer is here. Finally.</title><link>https://jasoneckert.github.io/myblog/summer-is-here/</link><description>&lt;p&gt;&lt;img alt="vacation" src="macdeer.png#center" title="vacation" /&gt;&lt;/p&gt;
&lt;p&gt;We just got back from vacation this week!  No computers, no telephones, no IM, no text messages, no stress (just the occasional deer, moose or bear). Several years ago, I didn’t take any vacation at all during the year and promptly vowed never to do that again.  In just one week of vacation, you can reduce all of the stress that you worked so hard to build up all year long. Remember that Canadian companies are famous worldwide for overworking their employees and not giving vacation time.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sun, 09 Jul 2006 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/summer-is-here/</guid></item><item><title>PHP Navigation System using Single Entry Point</title><link>https://thomashunter.name/posts/2006-07-03-php-navigation-system-using-single-entry-point</link><author>Thomas Hunter II</author><pubDate>Mon, 03 Jul 2006 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2006-07-03-php-navigation-system-using-single-entry-point</guid></item><item><title>Search Engine Friendly Exit Counter</title><link>https://thomashunter.name/posts/2006-07-02-search-engine-friendly-exit-counter</link><author>Thomas Hunter II</author><pubDate>Sun, 02 Jul 2006 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2006-07-02-search-engine-friendly-exit-counter</guid></item><item><title>Clean user data using PHP and Regular Expressions</title><link>https://thomashunter.name/posts/2006-07-01-clean-user-data-using-php-and-regular-expressions</link><author>Thomas Hunter II</author><pubDate>Sat, 01 Jul 2006 03:00:00 GMT</pubDate><guid isPermaLink="true">https://thomashunter.name/posts/2006-07-01-clean-user-data-using-php-and-regular-expressions</guid></item><item><title>El escritorio del futuro</title><link>https://danielpecos.com/2006/06/23/el-escritorio-del-futuro/</link><description>&lt;p&gt;Ésto me lo acabo de encontrar navegando por internet. La verdad es que es muy impresionante:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Se trata de un sistema semejante a un escritorio físico, de los de verdad. Tendremos una especie de mesa con los documentos, los archivos sobre ella. Con el ratón podremos moverlos de un lado a otro de nuestra mesa virtual, y gracias a diversos gestos, podremos agruparlos, apilarlos, ordenarlos, moverlos, y multitud de opciones de la Vida Real, pero con nuestro ordenador y de un modo virtual.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Este escritorio virtual lo está desarrollando BumpTop, y por ahora es un prototipo que tiene muy, muy buena pinta. Estaremos informados acerca de actualizaciones y nuevos lanzamientos, ya que la cosa parece que va a ser más que sobresaliente.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span class="embed-youtube" style="text-align: center; display: block;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;Fuente: &lt;a&gt;&lt;a href="http://xataka.com/archivos/2006/06/23-lo-que-sera-el-escritorio-del.php"&gt;http://xataka.com/archivos/2006/06/23-lo-que-sera-el-escritorio-del.php&lt;/a&gt;&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;¿Para cuándo lo tendremos en nuestros Linux? Yo me muero de ganas 😉&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Fri, 23 Jun 2006 14:00:41 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2006/06/23/el-escritorio-del-futuro/</guid></item><item><title>Real-world SOA at Amazon</title><link>/post/real-world-soa-at-amazon/</link><description>&lt;p&gt;A &lt;a href="http://www.acmqueue.com/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=388&amp;amp;page=1"&gt;&lt;em&gt;great&lt;/em&gt;
interview&lt;/a&gt;
with Amazon's CTO Werner Vogels appeared in ACM's Queue magazine. A
must read if you care about how to run a modern IT organization.&lt;/p&gt;
&lt;p&gt;The
&lt;a href="http://en.wikipedia.org/wiki/Service-Oriented_Architecture#SOA_definitions"&gt;SOA&lt;/a&gt;
acronym has been abused to the point of becoming a dirty buzzword for
many.  The interview shows how Amazon applies service-orientation
concepts with a very pragmatic approach.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;WV:&lt;/em&gt; ...The services model has been a key enabler in creating
teams that can innovate quickly with a strong customer focus. Each
service has a team associated with it, and that team is completely
responsible for the service from scoping out the functionality, to
architecting it, to building it, and operating it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Excellent!&lt;/em&gt; That's what I ment with
&lt;a href="/articles/2006/05/30/project-oriented-it"&gt;&amp;quot;Project-Oriented-IT&amp;quot;&lt;/a&gt;. I'm
glad Amazon has been doing that successfully.&lt;/p&gt;
&lt;p&gt;Here's why it works:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;WV:&lt;/em&gt; ...Giving developers operational responsibilities has greatly
enhanced the quality of the services, both from a customer and a
technology point of view. The traditional model is that you take
your software to the wall that separates development and operations,
and throw it over and then forget about it. Not at Amazon. You build
it, you run it. This brings developers into contact with the
day-to-day operation of their software. It also brings them into
day-to-day contact with the customer. This customer feedback loop is
essential for improving the quality of the service.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He obviously explained it much better than I did, and with real-world
experience to support it.&lt;/p&gt;
&lt;p&gt;It shows that the cultural and organizational aspect of a SOA
initiative is more important that the technologies used. SOA is not
just about building &amp;quot;software architectures&amp;quot;. If done right, it is a
better way of organizing IT operations.&lt;/p&gt;
&lt;p&gt;You don't even need to standardize on specific technologies/tools to
run an organization with a service model:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;WV:&lt;/em&gt; I think part of the chaotic nature the emerging nature of Amazon's
platform is that there are many tools available, and we try not to
impose too many constraints on our engineers. [...]
Developers are like artists;
they produce their best work if they have the freedom to do so, but
they need good tools. As a result of this principle, we have many
support tools that are of a self-help nature. The support
environment around the service development should never get in the
way of the development itself.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Don't force tools down the developers throat. (Any manager reading?)&lt;/p&gt;</description><author>Neuroning</author><pubDate>Thu, 08 Jun 2006 23:41:00 GMT</pubDate><guid isPermaLink="true">/post/real-world-soa-at-amazon/</guid></item><item><title>Project-Oriented IT</title><link>/post/project-oriented-it/</link><description>&lt;p&gt;Over the last years I had the opportunity to work on projects for
really big companies. My initial observations led me to think that the
bigger the company the more inefficient its IT operations
are. Economies of scale seem to work &lt;em&gt;against&lt;/em&gt; Information Technology
and software: the bigger the company the more inefficient,
bureaucratic and slower it gets.&lt;/p&gt;
&lt;p&gt;But it would be too simplistic to say that it's just the &amp;quot;size&amp;quot; of the
company what makes it inefficient. It's not. There are big companies
that are efficient. True, the bigger the company the harder it gets,
but I think it has more to do with the company's age, culture, and the
simple fact that they are inadequately structured.&lt;/p&gt;
&lt;p&gt;One important problem I've seen in big enterprises is that people are
departmentalized by specific roles (Business Analysts, Software
Engineering, QA, Operations and Support, etc) and they do not
collaborate as they should: they actually fight. They see each other
as the enemy.  Their jobs are so &amp;quot;silo-ed&amp;quot; that it's hard for them to
see the work of others.&lt;/p&gt;
&lt;p&gt;A guy in charge of IT Operations for a huge financial firm described
it to me with examples:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We get a request to put an application into production with little
idea of what it does or how it behaves. The application might have
been in development for over a year, but we (Operations) do not get to
see it until it goes to QA... which is roughly a few weeks before
going to production.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A big problem: developers do not understand how their solutions are
really used in production, and Operations has no input into the
development process. A lot of non-functional requirements that are
essential for keeping Operation costs down may not be taken into
account (like proper logging and monitoring, management of the
dependencies).&lt;/p&gt;
&lt;p&gt;The Business people blame Operations, which in turn blames the
Development team for building unmaintainable software, and the
Developers blame it all back to the Business people who never gave
them the full requirements in the first place, nor enough time to
build it right. But since nobody is responsible for the whole thing,
no one fixes it. And every new project is run in the same way.&lt;/p&gt;
&lt;p&gt;In small companies (think &amp;quot;start-ups&amp;quot;), individuals wear many hats:
from &amp;quot;business analyst&amp;quot; to &amp;quot;operations support&amp;quot;.  They are all
accountable.  I bet they are much more efficient. They may produce
better solutions, in less time, with shorter release cycles, with less
money, leaving happier customers and happier employees.&lt;/p&gt;
&lt;p&gt;If I were a chief, I'd try to use a different approach from that of a
traditional company.&lt;/p&gt;
&lt;p&gt;Instead of having vertical departments in IT
(Development, QA, Operations) I would organize IT &amp;quot;horizontally&amp;quot;, that
is, project-oriented instead of specialty-oriented. The idea would be
to divide the big company into smaller more efficient little
companies.  So, when you identify the need for a new software project
you assign a group consisting of business analysts, developers,
testers, DBAs &lt;em&gt;and operations&lt;/em&gt; people to it. You build a team that is
in charge of the whole life-cycle, including operating and keeping the
solution up and running. Each team is fully responsible for the
solutions they are assigned to, from inception to operations.&lt;/p&gt;
&lt;p&gt;This provides other benefits. It's easier to have shorter release
cycles and do more &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;amp;tag=mypersonalb00-20&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;path=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F0131111558%2Fref%3Dsr_11_1%3F%255Fencoding%3DUTF8"&gt;Agile and Iterative Development&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=mypersonalb00-20&amp;amp;l=ur2&amp;amp;o=1" style="border: none !important; margin: 0px !important;" width="1" /&gt;. In traditional companies it is so
expensive and bureaucratic to move a piece of software into production
that every project tries to include as much functionality as possible
into the next release, encouraging scope-creep, risky big-bang
deployments and delaying the ROI (Return on Investment).&lt;/p&gt;
&lt;p&gt;I shared this simple idea with the same guy I quoted above. He pointed
out that, besides the need for a huge cultural change, it would be
difficult to utilize shared hardware environments.  One answer to that
would be Virtualization technologies, which are becoming increasingly
viable and inexpensive (Xen, UML, VMWare, Bochs,...), giving each team
a set of &amp;quot;virtual&amp;quot; machines to do their Development/QA/Production,
with all the additional advantages of virtualization (saving VM
images, on-the-fly migrations, etc).&lt;/p&gt;
&lt;p&gt;This is just an idea (and surely not original) and may be hard to put
in practice on an already established company. But please let me
believe there &lt;em&gt;is&lt;/em&gt; be a better way to do things.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Wed, 31 May 2006 02:13:00 GMT</pubDate><guid isPermaLink="true">/post/project-oriented-it/</guid></item><item><title>Mundo Java</title><link>https://danielpecos.com/2006/05/30/mundo-java/</link><description>&lt;p&gt;Desde hace cosa de unas semanas, el mundo Java está cambiando notablemente. Por un lado, Sun publicó Java EE 5.0, junto con Sun Application Server 9.0, primera versión estable del proyecto Glassfish, que pretende implementar un Application Server libre para la especificación de JEE 5. En esta nueva versión se ha incluido, a parte de un cambio de la nomeclatura para las versiones, la especificación de EJB 3.0, Java Persistence API, una mejora en el desarrollo de webservices o JSF entre &lt;a href="http://java.sun.com/javaee/sdk/features.jsp"&gt;otras características&lt;/a&gt;.&lt;/p&gt;
&lt;p align="center"&gt;
  &lt;a href="http://java.sun.com/javaee/community/glassfish/"&gt;&lt;img alt="GlassFish Project" id="image60" src="https://danielpecos.com/assets/2006/05/open_projectglassfish1.gif" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Por otra parte, Sun también anunció en la &lt;em&gt;JavaOne 2006&lt;/em&gt; un cambio de licencia de distribución para el JDK y el JRE (&lt;em&gt;DLJ – Distributor License for Java&lt;/em&gt;), a fin de que las distribuciones de Linux que, hasta el momento rechazaban incluirlos en su distribución, cambiaran de parecer, aunque por el momento dicho cambio no está causando los efectos que Sun esperaba. Inicialmente fue RedHat la que mostró sus reticencias, uniéndose posteriormente &lt;a href="http://lists.debian.org/debian-legal/2006/05/msg00086.html"&gt;Debian&lt;/a&gt;, la cual sí que incluyó paquetes para Java en un primer momento en sus versión experimental.&lt;/p&gt;
&lt;p&gt;Lo que sí parece claro es que por fin Sun está redirigiendo su filosofía y se está orientando más hacia el software libre. Según se comenta, no cabe duda de que Java se convierta en un proyecto libre, la cuestión en estos momentos es &lt;strong&gt;cuándo y cómo&lt;/strong&gt;. Ese momento será seguramente uno de los más importantes, si no el que más, en mucho tiempo de la historia de Java.&lt;/p&gt;
&lt;p&gt;Creo que va a ser hora de ponerse en serio con la certificación y volver a los libros, a pesar de la pereza que da el hacerlo. Todo lo bueno requiere un pequeño sacrificio ;).&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Tue, 30 May 2006 15:58:51 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2006/05/30/mundo-java/</guid></item><item><title>The Use of Apprehension for Creating Tension in “To Kill a Mockingbird”</title><link>https://www.davidschlachter.com/writings/mockingbird</link><description>Out-of-place natural events as creating tension in “To Kill A Mockingbird”.</description><author>David Schlachter</author><pubDate>Tue, 23 May 2006 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/mockingbird</guid></item><item><title>Going from FreBSD 5.4 to FreeBSD 6.1</title><link>https://bastian.rieck.me/blog/2006/going_from_frebsd_5_4_to_freebsd_6_1/</link><description>&lt;p&gt;After countless hours of &lt;code&gt;portupgrade&lt;/code&gt; and &lt;code&gt;make buildworld&lt;/code&gt;, my Thinkpad is
now running FreeBSD 6.1. There were no major problems except:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gaim doesn&amp;rsquo;t accept the &lt;code&gt;gaim-latex&lt;/code&gt; anymore. I will have to get the CVS version and adjust it to my needs.&lt;/li&gt;
&lt;li&gt;Opera complains about a missing motifwrapper.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;syscons&lt;/code&gt; is somewhat buggy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At least I have found a solution for the Opera problem. It&amp;rsquo;s right in
&lt;code&gt;pkg-message&lt;/code&gt;. For your convenience, I will post it here. Just add the
following to &lt;code&gt;/etc/libmap.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Opera - Motif
[/usr/X11R6/share/opera/plugins/operamotifwrapper-1]
libXm.so.1              libXm.so.3
libXThrStub.so.6        libXtst.so.6
[/usr/X11R6/share/opera/plugins/operamotifwrapper-2]
libXm.so.2              libXm.so.3
libXThrStub.so.6        libXtst.so.6
[/usr/X11R6/share/opera/plugins/operamotifwrapper-3]
libXThrStub.so.6        libXtst.so.6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Maybe you are lucky and it works&amp;hellip;&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Sun, 21 May 2006 22:54:18 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2006/going_from_frebsd_5_4_to_freebsd_6_1/</guid></item><item><title>Using LaTeX code with Instant Messengers</title><link>https://bastian.rieck.me/blog/2006/using_latex_code_with_instant_messengers/</link><description>&lt;p&gt;Explaining maths via Internet is a lot easier if you are able to display formulas correctly, instead of typing things like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;e^(x + i*y) = e^(x)*(cos(y) + i*sin(y))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Surprisingly, this problem is not quite solved. During my searches I found found the &lt;a href="http://www.student.cs.uwaterloo.ca/~kzorin/texim.php"&gt;TeXIM Plugin&lt;/a&gt;, which should work with Gaim and amsn, thus allowing both Windows, MacOS, Linux and FreeBSD users to chat.&lt;/p&gt;
&lt;p&gt;I, however, tried &lt;a href="http://sourceforge.net/projects/gaim-latex"&gt;gaim-latex&lt;/a&gt;. The version in the ports of FreeBSD didn&amp;rsquo;t work, so I downloaded the release version (0.3) at sourceforge and compiled it (you have to use &lt;code&gt;gmake&lt;/code&gt; instead of the standard FreeBSD &lt;code&gt;make&lt;/code&gt;). The resulting binary &lt;code&gt;LaTeX.so&lt;/code&gt; is to be copied to &lt;code&gt;~/.gaim/plugins&lt;/code&gt;. Then Gaim has to be restarted and told to use this plugin - done.&lt;/p&gt;
&lt;p&gt;There are also a number of other plugins out there, for example a MathMode plugin for Miranda (an ICQ client for Windows). But they don&amp;rsquo;t work like gaim-latex or Kopete&amp;rsquo;s plugin: Instead of typing &lt;code&gt;$$ my Tex code $$&lt;/code&gt; you have to use strings like &lt;code&gt;[MathMode] [/MathMode]&lt;/code&gt; or something like that. There is definitely a need for some standards - or aren&amp;rsquo;t there mathematicians longing for LaTeX conversations (&lt;em&gt;please&lt;/em&gt; note the spelling!)?&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Fri, 12 May 2006 21:21:13 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2006/using_latex_code_with_instant_messengers/</guid></item><item><title>Is 55 the Answer?</title><link>https://justingarrison.com/blog/2006-05-11-is-55-the-answer/</link><description>Experimenting with fuel efficiency at 55 MPH</description><author>Justin Garrison's Homepage</author><pubDate>Thu, 11 May 2006 03:00:00 GMT</pubDate><guid isPermaLink="true">https://justingarrison.com/blog/2006-05-11-is-55-the-answer/</guid></item><item><title>Fortune Teller</title><link>https://mbutler.org/fortune-teller/</link><description>A flash application based on Joan Bunning&amp;#8217;s Learn Tarot online course. Uses the public domain Rider-Waite deck and the Celtic cross spread. Flash is no longer supported in browsers, but the swf file is available here and can mostly be run using Ruffle. Run it here using Ruffle &amp;#8211; don&amp;#8217;t forget to right-click and enter [&amp;#8230;]</description><author>mbutler</author><pubDate>Wed, 10 May 2006 19:54:26 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/fortune-teller/</guid></item><item><title>MMVI vs MDCCVI</title><link>https://www.davidschlachter.com/writings/2006vs1706</link><description>Essay: how life in Quebec today is better than it was three hundred years ago.</description><author>David Schlachter</author><pubDate>Mon, 08 May 2006 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/2006vs1706</guid></item><item><title>To Kill A Mockingbird—Response</title><link>https://www.davidschlachter.com/writings/mockresponse</link><description>Response to “To Kill A Mockingbird”. Features a drawn-out connection to the Iliad.</description><author>David Schlachter</author><pubDate>Thu, 04 May 2006 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/mockresponse</guid></item><item><title>True friends: dd and netcat</title><link>https://bastian.rieck.me/blog/2006/true_friends_dd_and_netcat/</link><description>&lt;p&gt;During my data rescue attempts, I took a backup of the images via network.
Netcat and dd must be combined for this purpose, but it works marvellously.&lt;/p&gt;
&lt;p&gt;The following command has to be issued on the machine where the images are
stored:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dd if=my_image | nc client 1024
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And on the client which stores or writes the image to a disk, you have to call:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nc -l -p 1024 | dd of=my_output
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Just a little trick for those moments where it is easier to use the network
rather than installing new hard disks&amp;hellip;&lt;/p&gt;
&lt;p&gt;Of couse, the commands have to be executed first on the client, then on the
server. I consider my few readers intelligent enough to know this.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Tue, 25 Apr 2006 23:13:41 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2006/true_friends_dd_and_netcat/</guid></item><item><title>Semiprofessional data rescue with Windows and FreeBSD</title><link>https://bastian.rieck.me/blog/2006/semiprofessional_data_rescue_with_windows_and_freebsd/</link><description>&lt;p&gt;Let&amp;rsquo;s keep the introduction short: A stupid person (loosely related to my circle of friends) crashed his hard drive. Because he was not able to shut the PC down properly. Instead he would just &amp;ldquo;pull the plug&amp;rdquo;. Yes. However, an interesting scenario for me: A hard disk with faulty sectors, 2 crashed NTFS partitions. Time for&amp;hellip;&lt;code&gt;dd_rescue&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This little tool works just like &lt;code&gt;dd&lt;/code&gt;, but it won&amp;rsquo;t abort on errors in the input file. In theory, you should be able to read data from defective disks. Yet, this takes very long time, so you should also use &lt;a href="http://www.kalysto.org/utilities/dd_rhelp/index.en.html"&gt;dd_rhelp&lt;/a&gt;. This bash script tries to read the maximum number of valid data before stopping for bad sectors. And best of all: You can stop at any time, try to read the image and let &lt;code&gt;dd_rhelp&lt;/code&gt; continue its work afterwards.&lt;/p&gt;
&lt;p&gt;The syntax is self-explaining if you start &lt;code&gt;dd_rhelp --help&lt;/code&gt;. So let&amp;rsquo;s assume you have got a working copy of the defective hard disk. In my case, there were two NTFS partitions, so I decided to do the actual rescue under Windows. This statement may seem audacious, but it really worked for me.&lt;/p&gt;
&lt;p&gt;First, I obtained a copy of &lt;a href="http://www.runtime.org/gdb.htm"&gt;GetDataBack for NTFS&lt;/a&gt;. This program is a recommendation of &lt;a href="http://wiki.marcelkrau.se/"&gt;Sven&lt;/a&gt;, a friend of mine. If you know any other programs, please mail me. Well, GDB worked flawlessly in this case. However, before I could try the program, I had to mount the image as a Windows drive so that GDB was able to access it. This was done by using &lt;a href="http://www.acc.umu.se/~bosse/"&gt;filedisk&lt;/a&gt;, an excellent driver for Windows that is able to mount images just as you would do it under FreeBSD. These images then appear as normal Windows drives. In my case, direct access was not possible, as the Master File Table (MFT) was corrupted. But GDB was able to recover most of the data anyway - great job.&lt;/p&gt;
&lt;p&gt;So, what is the essence of all this? Well, it demonstrates that FreeBSD in combination with Windows might yield good results. Furthermore, it proves that it&amp;rsquo;s possible to do serious work under Windows (as long as you are using the right software, that is&amp;hellip;). For some people, the &lt;a href="http://users.erols.com/gmgarner/forensics/"&gt;forensic acquisition utilities&lt;/a&gt;, on which I accidentally stumbled, might also be helpful in case of data loss.&lt;/p&gt;
&lt;p&gt;And don&amp;rsquo;t forget: A backup is for life and not just for Christmas.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Mon, 24 Apr 2006 00:54:54 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2006/semiprofessional_data_rescue_with_windows_and_freebsd/</guid></item><item><title>Using vpnc with the University of Heidelberg</title><link>https://bastian.rieck.me/blog/2006/using_vpnc_with_the_university_of_heidelberg/</link><description>&lt;p&gt;Some online services the University of Heidelberg offers are only available if you are a part of their VPN. I don&amp;rsquo;t want to use one of these crappy Cisco-tools, but fortunately there is &lt;a href="http://www.unix-ag.uni-kl.de/~massar/vpnc/"&gt;vpnc&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Assuming the installation worked fine, you just have to enter the information in &lt;code&gt;/usr/local/etc/vpnc.conf&lt;/code&gt;. It looks like that:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;IPSec gateway vpnsrv1.urz.uni-heidelberg.de
IPSec ID tunnel
IPSec secret &amp;quot;group pass&amp;quot;
Xauth username &amp;quot;your login&amp;quot;@uni-heidelberg.de
Xauth password &amp;quot;your pass&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Unfortunately, they don&amp;rsquo;t tell you the group password. But you can &lt;a href="http://www.unix-ag.uni-kl.de/~massar/bin/cisco-decode"&gt;decode&lt;/a&gt; it once you have downloaded the configuration file from the &amp;ldquo;URZ&amp;rdquo; homepage.&lt;/p&gt;
&lt;p&gt;I needn&amp;rsquo;t tell you that the decoder mustn&amp;rsquo;t be used for malicious activity&amp;hellip;so just have fun.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Tue, 18 Apr 2006 23:57:28 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2006/using_vpnc_with_the_university_of_heidelberg/</guid></item><item><title>Hipocresía Total o Semana Santa</title><link>https://danielpecos.com/2006/04/18/hipocresia-total-o-semana-santa/</link><description>&lt;p&gt;Acaba de terminar la semana en el que mucha gente se auto-inflije castigos a fin de contentar o conseguir el favor de la deidad en la que creen. Es curiosa esta tradición y lo mucho que se sigue por los medios de comunicación. Hay gente capaz de hacerse auténticas animaladas, como clavarse unos clavos en pies y manos o flagelarse la espalda (cuanto más sangrienta quede, mayor y mejor es tu fervor religioso).&lt;/p&gt;
&lt;p&gt;Luego, a parte de las lesiones auto-inflijidas existe también la costumbre de cargar a cuestas entre varias personas enormes trozos de madera decorado con costosos vestidos y alguna que otra joya, los cuales representan a su dios (o hijo) local y exhibirlos por su barrio, mientras que el resto del vecindario se dedica a cantar a dichos maderos y a llorarles rogando algún favor.&lt;/p&gt;
&lt;p&gt;Lo curioso de todo esto es que, si no tengo mal entendido, se supone que el dios cristiano es bondadoso, por lo que no parece muy lógico ofrendarle con el sufrimiento propio. Es más, según creo lo que se debe hacer es tener fe y seguir los mandamientos (aunque algunas de las interpretaciones que da la Iglesia de ellos son un poco más que lastimosos), por lo que parece que crear ídolos de madera costosísimos y arrastrarlos delante de todo un gentío emocionado de ver lo gran creyente que eres no va muy en concordancia con compartir los bienes con los pobres, la humildad y el amor al prójimo (no creo que alguien que sea capaz de hacerse &lt;em&gt;eso&lt;/em&gt;, pueda luego ser capaz de tratar medianamente bien a otros).&lt;/p&gt;
&lt;p&gt;Aún así, si al menos la gente que hace todo esto fuera de la misma forma durante el resto del año, pues aún tendría un poco más de sentido (que seguiría siendo bastante incomprensible), pero es que la gran mayoría de la gente luego ni se acuerda de lo religioso que demostraron ser la semana santa anterior. Luego no me extraña que la gente llore cuando da la casualidad de que llueve (que falta hace, por otra parte) el día en el que iban a desfilar, teniendo que suspenderlo. Pobrecillos, les tocará esperar otro año para sacar el madero a ventilar.&lt;/p&gt;
&lt;p&gt;Pero lo que más me intriga de todo es que si se supone que la Santísima Trinidad son Uno solo, ¿cómo se explica que cada barrio tenga su propio Cristo y/o Virgen y que además el propio sea mejor que el ajeno? Toda una curiosidad religiosa 😉&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Tue, 18 Apr 2006 16:44:10 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2006/04/18/hipocresia-total-o-semana-santa/</guid></item><item><title>Bugs in uboot.com BJ</title><link>https://www.databasesandlife.com/bugs/</link><description>&lt;p class="intro"&gt;UPDATE: This is was my first every blog post. We'd just released "uboot BJ", introducing blogging and video galleries to uboot.&lt;/p&gt;
&lt;p&gt;well really a lot of things were far from optimal about the software. lots of bugs but a lot of things which were integration troubles, i.e. one bit of software worked 95% and another software worked 95% and together they worked 0%. today and yesterday sat with smo and went through a whole bunch of software from a whole bunch of people and just hacked away until it worked. now there are last 5 galleries etc on the start page which is quite cool.&lt;/p&gt;</description><author>Databases &amp;amp; Life</author><pubDate>Mon, 03 Apr 2006 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.databasesandlife.com/bugs/</guid></item><item><title>Dominos</title><link>https://sam.hooke.me/game/dominos/</link><description>&lt;p&gt;&lt;em&gt;Dominos&lt;/em&gt; is a physics based platform which requires skill, speed, dexterity and luck to navigate your way to the end of each level. Play as a variety of characters which all handle differently, from the slow and heavy rock to the bouncy banana. Roll, jump, drive and surf your way through 19 crazy levels, from grasslands and caves, through the desert to the city.&lt;/p&gt;
&lt;p&gt;For more physics platformer fun, see the sequel &lt;a href="https://sam.hooke.me/game/dominos-2-winter-edition/"&gt;&lt;em&gt;Dominos 2: Winter Edition&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;</description><author>Sam Hooke</author><pubDate>Sat, 01 Apr 2006 15:00:00 GMT</pubDate><guid isPermaLink="true">https://sam.hooke.me/game/dominos/</guid></item><item><title>Magdalena a la valenciana</title><link>https://danielpecos.com/2006/03/25/magdalena-a-la-valenciana/</link><description>&lt;p&gt;Parece que alguien ha tenido la original idea de que el mejor final para los sensacionales y espectaculares monumentos que son las gaiatas es… ¡¡¡¡el fuego!!!!&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;a href="https://danielpecos.com/assets/2006/03/imgp17381.jpg"&gt;&lt;img alt="" class="aligncenter " height="513" src="https://danielpecos.com/assets/2006/03/imgp17381-768x1024.jpg" title="imgp1738" width="385" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Ahora lo único que queda es que se salve algún &lt;em&gt;ninot&lt;/em&gt; 😉&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Sat, 25 Mar 2006 15:07:45 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2006/03/25/magdalena-a-la-valenciana/</guid></item><item><title>Creating a Subversion repository</title><link>https://bastian.rieck.me/blog/2006/creating_a_subversion_repository/</link><description>&lt;p&gt;I have been busy setting up a server for the last few days. It&amp;rsquo;s running Samba and Subversion so that it can be used as a kind of backup-server for all purposes. Using &lt;code&gt;gmirror (8)&lt;/code&gt;, the server can use two identical hard disks as a Software-RAID (in mirroring mode, of course).&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.onlamp.com/pub/a/bsd/2005/05/12/FreeBSD_Basics.html"&gt;article&lt;/a&gt; by Dru Lavigne at onlamp.com helped me a lot while installing Subversion. All clients use &lt;a href="http://esvn.umputun.com/"&gt;esvn&lt;/a&gt; to access the repository.&lt;/p&gt;
&lt;p&gt;I also tried &lt;a href="http://projects.edgewall.com/trac/"&gt;Trac&lt;/a&gt;, but it is too sophisticated / bloated for a simple backup and revision control server. However, if you are working on a bigger project that has more than one developer Trac will definitely &amp;ldquo;be your friend&amp;rdquo;.&lt;/p&gt;</description><author>Ecce Homology on Bastian Grossenbacher Rieck's personal homepage</author><pubDate>Tue, 14 Mar 2006 02:42:23 GMT</pubDate><guid isPermaLink="true">https://bastian.rieck.me/blog/2006/creating_a_subversion_repository/</guid></item><item><title>BEA Systems acquires Fuego</title><link>/post/bea-systems-acquires-fuego/</link><description>&lt;p&gt;Old news: &lt;a href="http://bea.com/framework.jsp?CNT=pr01642.htm&amp;amp;FP=/content/news_events/press_releases/2006"&gt;BEA Systems acquired Fuego Inc.&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Starting March 1st, virtually all Fuego employees (including myself)
became BEA employees. There are few organizational changes, which
helps minimize disruptions on our productivity and service.&lt;/p&gt;
&lt;p&gt;I've been with Fuego since its early days. I started working for
Fuego's ancestor company,  &lt;a href="http://www.intersoft.com.ar"&gt;InterSoft&lt;/a&gt;,  as a Java/C++ developer in
1997.&lt;/p&gt;
&lt;p&gt;I have different feelings about the acquisition. On the one side I
feel a bit nostalgic: the company I somehow helped build is no
more. But on the other side I'm proud to say Fuego was no &amp;quot;bubble&amp;quot;,
and I'm very positive that BEA's infrastructure and steering will
provide the power to support the crazy growth we are experiencing, and
bring the product to the next level.&lt;/p&gt;
&lt;p&gt;All analysts are talking about BPM systems these days. BPM became a
buzzword in the Enterprise software market.  This is nothing but a
proof of how far ahead the founders of Fuego were (and probably how
clueless some analysts are?): the product itself was started in 1997,
and it was called &lt;em&gt;jBPM&lt;/em&gt; (yes, the same name later taken by the now
JBoss-sponsored &lt;a href="http://www.jboss.com/products/jbpm"&gt;jBPM&lt;/a&gt; project).&lt;/p&gt;
&lt;p&gt;I left Fuego for a job at a dot com in 1999. I returned a year later,
after an invitation to join the new Fuego headquarters in Dallas.&lt;/p&gt;
&lt;p&gt;I arrived in Dallas in Jan 2001, together with 2 other members of the
FuegoBPM development team.  Our objective was kinda the reverse to
that of an off-shoring endeavor: instead of outsourcing software
development and building an off-shore team to lower costs, we had to
bring the technical knowledge to the US operation and build a good
team of technical people to support and implement solutions with the
FuegoBPM product for the US market.&lt;/p&gt;
&lt;p&gt;Here we are five years later. Profitable, with a solid market
position, and busier than ever.&lt;/p&gt;
&lt;p&gt;FuegoBPM is now BEA's AquaLogic BPM Suite, a component of the AquaLogic
Business Service Interaction product line.&lt;/p&gt;
&lt;p&gt;Again, I must congratulate founders Felix and Emilio for such an impressive
vision and execution, and everyone who worked at Fuego and helped it
got this far.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Thu, 09 Mar 2006 01:31:00 GMT</pubDate><guid isPermaLink="true">/post/bea-systems-acquires-fuego/</guid></item><item><title>Reencuentro después de 11 años</title><link>https://danielpecos.com/2006/03/08/reencuentro-despues-de-11-anos/</link><description>&lt;p&gt;Ese es el tiempo que hacía que no nos encontrábamos los compañeros de 8º de EGB del colegio Izquierdo. Sí que me había encontrado con alguno de ellos alguna vez, pero no así como anoche, todos juntos recordando las muchas anécdotas que vivimos durante aquellos años.&lt;/p&gt;
&lt;p&gt;Conforme me acercaba al punto de encuentro, me iba encontrando más y más nervioso, pensando en quién y cómo encontraría y si los reconocería (11 años es muuuucho tiempo), pero cuando llegué allí pude ver que la mayor parte de compañeros y compañeras que había tenido estaban bastante cambiados, pero la mayor parte eran reconocibles. No acudieron algunos de los que me hubiera gustado volver a ver, pero espero que no pase mucho tiempo hasta que me los encuentre por ahí.&lt;/p&gt;
&lt;p&gt;Bueno, tampoco me voy a poner ahora a describir cómo fue la noche. Simplemente quería agradecer a todos los compañeros que siguen ahí a pesar del tiempo y de la distancia su cariño y complicidad.&lt;/p&gt;
&lt;p&gt;Una noche genial. Espero que no tardemos otros 11 años en repetirla.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Wed, 08 Mar 2006 21:51:05 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2006/03/08/reencuentro-despues-de-11-anos/</guid></item><item><title>Airport "Security" Jokes</title><link>/post/airport-security-jokes/</link><description>&lt;p&gt;I'm at the Saint Louis International airport (STL), waiting to board
on my flight back to Dallas.  I have just experienced another
stupidity of the airport (in)security procedures. This post is not about software, but software security
and &amp;quot;physical&amp;quot; security depend on each other.&lt;/p&gt;
&lt;p&gt;It's an American Airlines flight. You can usually do the check-in
procedure online, and print the boarding-pass yourself before heading
to airport. This is a welcomed service, but this time it gave me an
error, something like: &amp;quot;Sorry, you cannot check-in online, please see
an agent at the airport&amp;quot;.&lt;/p&gt;
&lt;p&gt;No big deal. At the airport I used one of the automated kiosks to
print my boarding pass. And it worked, without the need of an
agent.&lt;/p&gt;
&lt;p&gt;I proceeded to security screening. The &lt;a href="http://www.tsa.gov/"&gt;TSA&lt;/a&gt;
officer highlighted a &amp;quot;SSSS&amp;quot; imprint on the lower-right corner of my
boarding-pass and said: &amp;quot;you've been randomly selected for additional
screening, please come this way...&amp;quot;.&lt;/p&gt;
&lt;p&gt;I couldn't believe it!. They randomly selected me for
screening, but they warned me about it in advance!... I mean, now I
(and you) know that if a passenger gets a quadruple-&amp;quot;S&amp;quot; code it means
he/she will get additional screening!&lt;/p&gt;
&lt;p&gt;I asked the TSA guy how could the process be so flawed. He replied that he
understood my concern, but he was not responsible for defining the
process and couldn't give me his opinion. Later, I asked one of the
American Airlines agents:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  agent: &amp;quot;Well, yeah... but most people don't know that the
          SSSS code means they'll be screened.&amp;quot;

     me: &amp;quot;Sure, but most people are not terrorist either. And I bet ALL
          terrorist DO know about this SSSS-joke&amp;quot;

  agent: &amp;quot;yeah, I know... the whole process is so stupid...&amp;quot;.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I'm all for random security screenings and checks, but please, don't
tell the passenger in advance! The random selection should be done
right there, at screening time, and not before.&lt;/p&gt;
&lt;p&gt;What's more, you don't need to go to the airport to know
you have high changes of being picked for additional screening: if the
online check-in refuses to let you in, you will probably get the
infamous quad-S code.&lt;/p&gt;
&lt;p&gt;More stupidity: This actually happened first on my Dallas-to-Saint
Louis segment of a round-trip. Now I'm returning to Dallas, and I got
the exact same thing: no online check-in allowed, got the boarding-pass
with the SSSS code at the kiosk, and was &amp;quot;picked&amp;quot; for additional
screening. Talk about &amp;quot;surprise factor&amp;quot;  :-).&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Later, I googled for &amp;quot;SSSS&amp;quot; and found it stands for &lt;em&gt;Selected for Secondary Security Screening&lt;/em&gt;, and it's nothing new. It's been there for
years, and even the &lt;a href="http://www.doi.gov/"&gt;Department of the Interior&lt;/a&gt;
&lt;a href="http://www.doi.gov/pfm/travel_newsletter/sep_2003.html"&gt;warns&lt;/a&gt; about
it!.&lt;/p&gt;
&lt;p&gt;For those interested in security topics in general (and computer security in
particular) you should subscribe to Bruce Schneier's
&lt;a href="http://www.schneier.com/crypto-gram.html"&gt;newsletter&lt;/a&gt; and/or &lt;a href="http://www.schneier.com/blog/"&gt;blog&lt;/a&gt;.
A simple &lt;a href="http://www.schneier.com/cgi-bin/search/search.pl?Terms=TSA&amp;amp;Realm=blog"&gt;search for TSA&lt;/a&gt;
on his blog finds more than 80 articles about the questionable
effectiveness of the TSA, and the millions of dollars they are
burning.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Tue, 14 Feb 2006 20:53:00 GMT</pubDate><guid isPermaLink="true">/post/airport-security-jokes/</guid></item><item><title>Computer evolution</title><link>https://jasoneckert.github.io/myblog/computer-evolution/</link><description>&lt;p&gt;&lt;img alt="evolution" src="evolution.png#center" title="evolution" /&gt;&lt;/p&gt;
&lt;p&gt;OK - so Apple released the new Intel Macs this month and shocked everyone with their amazing speed improvements.  But what I noticed is that Apple didn’t create a whole new look for them - essentially, the new line is in the same beautiful package as the iMac G5 and PowerBook.  These designs must be very good if Apple is going to stick with them, and as a result, are key turning points in Mac evolution.   Does evolutionary theory apply to computers.  I think so.  As I am sure the famous Richard Dawkins would point out, there must be some point where we could trace the current models of computers back to common motherboard architecture&amp;hellip;.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Fri, 27 Jan 2006 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/computer-evolution/</guid></item><item><title>Irony in Macbeth</title><link>https://www.davidschlachter.com/writings/macirony</link><description>How Shakespeare used irony in Macbeth. Favourite phrase: “relentless sinister determination.”</description><author>David Schlachter</author><pubDate>Fri, 20 Jan 2006 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/macirony</guid></item><item><title>2005 New Year's Eve at London</title><link>https://danielpecos.com/2006/01/10/2005-new-years-eve-at-london/</link><description>&lt;p&gt;¡Feliz año 2006!&lt;/p&gt;
&lt;p&gt;Un poco tarde, pero por fin he terminado la entrada que quería escribir sobre el viaje de nochevieja a Londres :-D. Es un pequeño resumen de lo que hemos hecho durante el viaje:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Día 1&lt;/strong&gt; – &lt;em&gt;28 Diciembre 2005&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Tras levantarnos a las 6 de la mañana, coger el cercanías hasta Valencia, desde allí un autobús hasta Manises, cogiendo un &lt;a href="http://www.flickr.com/photos/dpecos/82057101/in/set-1761440/" target="_blank"&gt;avión hasta Stansted&lt;/a&gt;, y finalmente un de nuevo un autobús hasta Liverpool Station nos encontramos con Yolanda que nos muestra el camino hasta la residencia de estudiantes donde íbamos a pasar los siguientes días de estancia (previa caminata de 20 minutos con trastos en la mano y un autobús). A estas alturas María ya había perdido el saco de dormir y la botella de champán que traíamos desde España 🙁&lt;/p&gt;
&lt;p&gt;Tras haber comido unos macarrones que nos supieron a gloria, fuimos a ver el centro de la ciudad, pasando por Trafalgar Square y Piccaddilli Circus. Impresionante y bonito. Tras entrar en una tienda de juguetes, cuyo nombre no recuerdo, y probarnos una serie de &lt;a href="http://www.flickr.com/photos/dpecos/82061407/in/set-1761440/" target="_blank"&gt;pelucas y artículos de broma&lt;/a&gt;, decidimos volver a la residencia a descansar para poder aprovechar el siguiente día al máximo.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Día 2&lt;/strong&gt; – &lt;em&gt;29 Diciembre 2005&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;El día del Támesis. Después de haber planeado levantarnos relativamente pronto (a las 9 a.m.), no lo hacemos, por lo que salimos de la residencia rumbo al Tate sobre las 11 a.m. Caminamos hasta el Tower of London, castillo que se encuentra a pocos metros del famoso &lt;a href="http://www.flickr.com/photos/dpecos/82063353/in/set-1761440/" target="_blank"&gt;Tower Bridge&lt;/a&gt;, el cual atravesamos, conduciéndonos al linde opuesto del río. Siguiendo el río, encontramos el &lt;a href="http://www.flickr.com/photos/dpecos/82064059/in/set-1761440/" target="_blank"&gt;teatro&lt;/a&gt; donde Shakespeare estrenó sus famosas obras, llegando finalmente al &lt;a href="http://www.flickr.com/photos/dpecos/82064530/in/set-1761440/" target="_blank"&gt;Tate&lt;/a&gt;. Como bien dijo Cris, &lt;em&gt;«tanta diversión me abruma»&lt;/em&gt; 😉&lt;/p&gt;
&lt;p&gt;Después de un par de horas observando las obras expuestas en su interior, decidimos ir rollo guiri total a ver el resto de monumentos y sitios típicos de la ciudad que nos de tiempo. Así pues, vamos en dirección &lt;a href="http://www.flickr.com/photos/dpecos/82066014/in/set-1761440/" target="_blank"&gt;Big Ben&lt;/a&gt;, que se encuentra al lado de Westminister, y justo en frente de &lt;a href="http://www.flickr.com/photos/dpecos/82066425/in/set-1761440/" target="_blank"&gt;The Eye of London&lt;/a&gt;, la noria que construyeron conmemorando el nuevo siglo. La verdad es que fue curioso ver el contraste que se mostraba entre las dos riberas del río.&lt;/p&gt;
&lt;p&gt;A estas horas ya estaba anocheciendo, por lo que fuimos hacia el centro de la ciudad para dar una vuelta por las tiendas más rezagadas en el cierre, pasando previamente por Buckingham Palace ****donde pudimos ver los típicos soldados ingleses de guardia en las puertas.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Día 3&lt;/strong&gt; – &lt;em&gt;30 Diciembre 2005&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Otro día que casi no vimos el Sol :-s, y es que a las 12:30 no es hora para desayunar. Fue un día de relax, para tomar un poco de fuerzas, visto la que se nos venía encima.&lt;/p&gt;
&lt;p&gt;Aún así no lo desaprovechamos del todo ya que a las ocho de la tarde nos &lt;a href="http://www.flickr.com/photos/dpecos/82067642/in/set-1761440/" target="_blank"&gt;fuimos&lt;/a&gt; al centro a ver una actuación de Stomp, el grupo de teatro que crea canciones rítmicas con escobas, mecheros, cubos o a base de arrastrar los pies y dar palmas. Sin palabras. Es increíble la cantidad de curro que debe llevar el coordinar todas las personas que actúan para que suene de esa forma. Os lo recomiendo si alguna vez tenéis la opción de ir a verlos.&lt;/p&gt;
&lt;p align="center" style="text-align: center;"&gt;
  &lt;img alt="Stomp" class="size-full aligncenter" height="230" src="https://danielpecos.com/assets/2006/01/stomp.jpg" width="160" /&gt;
&lt;/p&gt;
&lt;p&gt;Una vez terminada la actuación, nos fuimos de vuelta a la residencia para cenar y arreglarnos para nuestra &lt;a href="http://www.flickr.com/photos/dpecos/84552906/in/set-1761440/" target="_blank"&gt;primera noche de fiesta&lt;/a&gt; por Londres. Estuvimos en una discoteca que le habían recomendado a Gael, un chico francés que también estaba en la residencia, la cual resultó ser un poco decepcionante: música hardcore, ambiente poco respirable y además un rollo muy raro, ya que te cacheaban antes de entrar y después veías cómo los vigilantes se daban vueltas buscando a quien sea con unas linternas con las que te enfocaban a la cara y te dejaban cegado. Un poco extraño.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Día 4&lt;/strong&gt; – &lt;em&gt;31 Diciembre 2005&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nos levantamos relativamente tarde, por lo que solo dio tiempo a ir a comprar para la cena de esa noche. Una vez llegamos con la compra, nos pusimos manos a la obra y preparamos la &lt;a href="http://www.flickr.com/photos/dpecos/82070946/in/set-1761440/" target="_blank"&gt;cena de nochevieja&lt;/a&gt;, que aunque no era muy espectacular, fue la mejor de toda la estancia en Londres (con diferencia!).&lt;/p&gt;
&lt;p&gt;Ya durante la cena empezamos con las risas y cuando nos dimos cuenta ya eran las 23:15, demasiado tarde para que llegáramos a tiempo al Big Ben, por lo que decidimos quedarnos allí y seguir con el cachondeo. Se nos fue el santo al cielo y de repente comenzamos a ver fuegos artificiales por la ventana ¡Eran las 0:05! María, en un alarde de inspiración, saca una sartén y una cuchara y comienza a dar las campanadas con los cuartos incluidos. ¡Impresionante!&lt;/p&gt;
&lt;p&gt;Una vez se nos pasaron las lágrimas de tanto llorar de la risa, fuimos a prepararnos para salir de fiesta. Esa noche iríamos al pub &lt;em&gt;&lt;a href="http://www.flickr.com/photos/dpecos/84560282/in/set-1761440/" target="_blank"&gt;George&lt;/a&gt;&lt;/em&gt; donde había una fiesta privada y nos costó convencer a la portero de que nos dejara pasar, pero al final lo conseguimos. En cuanto al local… una rayada: una mezcla entre gótico, punk, popero… y la música HORRIBLE, pero no pasa nada, por que llevábamos una fiesta que con cualquier cosa nos lo habríamos pasado bien.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Día 5&lt;/strong&gt; – &lt;em&gt;1 Enero 2006&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;El día sin Sol. De este día poco hay que comentar, porque no se hizo prácticamente nada :-S Simplemente dormimos 😎&lt;/p&gt;
&lt;p&gt;Bueno, no todo fue dormir :-P. Cuando descansamos nos fuimos a patinar a una pista de patinaje que había a los pies del Tower of London. Cuando terminamos, nos acercamos a Candem, un barrio de Londres muy peculiar y donde encontramos tiendas y puestos de comida muy diversos.&lt;/p&gt;
&lt;p&gt;La verdad es que una de las cosas que más llaman la atención de Londres es la diferencia que hay entre los barrios, ya que da la impresión de cambiar de ciudad conforme vas caminando por las calles. Es una sensación muy curiosa.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Día 6&lt;/strong&gt; – &lt;em&gt;2 Enero 2006&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Último día completo antes de la vuelta. Éste era nuestro último día que podríamos aprovechar al máximo (también lo era el de María y el de Carol, hasta que decidieron quedarse unos días más :-o). Así que nada más levantarnos fuimos camino de &lt;a href="http://www.flickr.com/photos/dpecos/83374536/in/set-1761440/" target="_blank"&gt;Notting Hill&lt;/a&gt;, donde estuvimos paseando un rato y viendo las tiendas. También estuvimos en la librería que sale en la película con el mismo nombre que la zona.&lt;/p&gt;
&lt;p&gt;Cuando nos cansamos, fuimos hacia el famoso &lt;a href="http://www.flickr.com/photos/dpecos/82075962/in/set-1761440/" target="_blank"&gt;Hyde Park&lt;/a&gt;, un parque gigantesco en pleno corazón de Londres. Allí pudimos ver una estatua dedicada a &lt;a href="http://www.flickr.com/photos/dpecos/82078831/in/set-1761440/" target="_blank"&gt;Peter Pan&lt;/a&gt;, un lago lleno de patos y algún que otro gracioso &lt;a href="http://www.flickr.com/photos/dpecos/82077737/in/set-1761440/" target="_blank"&gt;animalillo&lt;/a&gt;. Nos acercamos hacia una feria de atracciones que habían instalado donde comimos unos &lt;em&gt;hot dog&lt;/em&gt; que nos supieron a gloria.&lt;/p&gt;
&lt;p&gt;Para terminar el día (no sin antes pasar por &lt;a href="http://www.flickr.com/photos/dpecos/82079838/in/set-1761440/" target="_blank"&gt;Harrods&lt;/a&gt;), nos acercamos a un restaurante hindú, donde pudimos degustar la esquisitez de ese tipo de comida (vamos, asqueroso, por decirlo claro). Después de esto, nos fuimos a dormir.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Día 7&lt;/strong&gt; – &lt;em&gt;3 Enero 2006&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;El madrugón. Nos levantamos a las 8 de la mañana y nos vamos Cris, Irene y yo a ver el &lt;a href="http://www.flickr.com/photos/dpecos/82081393/in/set-1761440/" target="_blank"&gt;Tower of London&lt;/a&gt;, no sea cosa que les fuera a dar algo a las pobres chiquillas 😛 La verdad es que no esperaba mucho de él, y el coste de la entrada me parecía un poco alto, pero tras haber entrado, me fui con la sensación de que me faltaba tiempo para verlo todo, y eso que estuvimos desde las 10:30 hasta las 14:00.&lt;/p&gt;
&lt;p&gt;Nos volvimos a la residencia, cogimos las maletas y nos fuimos a Liverpool Station a coger un autobús que nos llevara a Stansted para coger el avión de vuelta. Sinceramente todavía no sé cómo llegamos a cogerlo, porque yo estaba convencido de que no llegabamos.&lt;/p&gt;
&lt;p&gt;Finalmente, y sin problema alguno (salvo algunas turbulencias), &lt;a href="http://www.flickr.com/photos/dpecos/83366445/in/set-1761440/" target="_blank"&gt;llegamos a Manises&lt;/a&gt;, donde nada más bajar nos dieron la bienvenida «a la española», pero esto casi que lo dejo para otra entrada en weblog 😉&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Estoy seguro de que me dejo cosas, pero ya me ha quedado un poco largo el post 😛 Si queréis ver más cosas sobre Londres, aquí os dejo el &lt;a href="http://www.flickr.com/photos/dpecos/sets/1761440/"&gt;álbum de fotos&lt;/a&gt; del viaje.&lt;/p&gt;
&lt;p&gt;Resumiendo, ha sido un viaje que no olvidaré nunca, y en el que me lo he pasado genial. ¡Qué campanadas más espectaculares!&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Tue, 10 Jan 2006 19:12:19 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2006/01/10/2005-new-years-eve-at-london/</guid></item><item><title>New Years security resolutions for 2006</title><link>https://jasoneckert.github.io/myblog/new-years-security-resolutions-for-2006/</link><description>&lt;p&gt;&lt;img alt="funny" src="ie.png#center" title="funny" /&gt;&lt;/p&gt;
&lt;h1 id="1-dont-give-personal-information-to-obtain-documents-on-the-web"&gt;1. Don’t give personal information to obtain documents on the web&lt;/h1&gt;
&lt;p&gt;Many sites want you to register to get a free document or certain web page.  What do you think they use your information for?  Spam, spam and more spam.  If you want to get these documents without putting in your personal information, simply put the URL for the site in &lt;a href="http://bugmenot.com"&gt;http://bugmenot.com&lt;/a&gt; and get past the registration!&lt;/p&gt;
&lt;h1 id="2-protect-against-viruses"&gt;2. Protect against Viruses&lt;/h1&gt;
&lt;p&gt;Use Firefox  - Many spyware/malware/viruses have code that targets Internet Explorer.  Why not use Firefox instead?  It’s the web browser that crackers (who make the spyware/malware/viruses) use to browse the web and it stops most pop-up windows, viruses and spyware.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Sun, 01 Jan 2006 02:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/new-years-security-resolutions-for-2006/</guid></item><item><title>AntDoclet</title><link>/post/antdoclet/</link><description>&lt;p&gt;After nearly two years of procrastination, I finally decided to spend
some time on wrapping things up and putting
&lt;a href="http://antdoclet.neuroning.com/"&gt;AntDoclet&lt;/a&gt; online for public
consumption.&lt;/p&gt;
&lt;p&gt;AntDoclet is a little tool for documenting
&lt;a href="http://ant.apache.org"&gt;Ant&lt;/a&gt; Tasks. It automatically generates HTML and LaTeX documentation from the source code of your Tasks.&lt;/p&gt;
&lt;p&gt;I wrote it initially in January 2004, for documenting the Ant tasks
provided with the &lt;a href="http://fuego.com/"&gt;FuegoBPM&lt;/a&gt; product. Recently, I
needed to improve it a bit, and decided to make it public.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href="http://fuego.com/"&gt;Fuego Inc.&lt;/a&gt; --my employer-- who allowed
me to release &lt;a href="http://antdoclet.neuroning.com/"&gt;AntDoclet&lt;/a&gt;.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Tue, 27 Dec 2005 00:19:00 GMT</pubDate><guid isPermaLink="true">/post/antdoclet/</guid></item><item><title>My Job Went to India...</title><link>/post/my-job-went-to-india/</link><description>&lt;p&gt;If you work as a software developer for a living, I recommend you get a copy of &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;amp;tag=mypersonalb00-20&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;path=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F0976694018%2Fqid%3D1134872191%2Fsr%3D8-1%2Fref%3Dpd_bbs_1%3Fn%3D507846%2526s%3Dbooks%2526v%3Dglance"&gt;&amp;quot;My Job Went to India&amp;quot;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ignore the curious title and funny cover. It's about planning your career and making yourself a more valuable developer.&lt;/p&gt;
&lt;p&gt;I read it right after &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;amp;tag=mypersonalb00-20&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;path=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F0374292884%2Fref%3Dpd_kar_1%3Fn%3D283155"&gt;&amp;quot;The World is Flat&amp;quot;&lt;/a&gt; (by the way, a fascinating description of today's globalized economics), and it was a good 1-2 punch.&lt;/p&gt;
&lt;p&gt;Full of great advice. Stimulating and motivating little book. It
helped me find the energy to go back to work after taking a week off
:-).&lt;/p&gt;
&lt;p&gt;The book is divided in 52 concrete pieces of advice. You'll get ideas
for improving your technical abilities, as well as business-related
knowledge and inter-personal skills.&lt;/p&gt;
&lt;p&gt;A couple of paragraphs I liked, from the Introduction:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For some not-insignificant percentage of IT workers, the safest bet
is to start looking for an alternate line of work. [...]  If you
don't have passion and a drive that would force you to create
software [...] you're not going to be able to continue to compete
with those who do.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;... Software is a business [...] To stay employed, you're going to
have to understand how you fit into the business's plan to make
money.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And this one below made me laugh, from advice &lt;em&gt;#6 &amp;quot;Be a specialist&amp;quot;&lt;/em&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Too many of us seem to believe that specializing in something
simply means not knowing about other things.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I would have titled it something like &amp;quot;The &lt;em&gt;Mature&lt;/em&gt; Pragmatic Programmer&amp;quot;, as it is a perfect second volume for &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;amp;tag=mypersonalb00-20&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;path=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F020161622X%2Fqid%3D1134874385%2Fsr%3D2-1%2Fref%3Dpd_bbs_b_2_1%3Fs%3Dbooks%2526v%3Dglance%2526n%3D283155"&gt;&amp;quot;The Pragmatic Programmer&amp;quot;&lt;/a&gt;.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Sun, 18 Dec 2005 14:02:00 GMT</pubDate><guid isPermaLink="true">/post/my-job-went-to-india/</guid></item><item><title>Quality of Experience</title><link>/post/quality-of-experience/</link><description>&lt;p&gt;I'm surely stating the obvious here (I hope!), but what seems obvious for some people is not so for others.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Work Experience&lt;/strong&gt; should not be expressed in &lt;em&gt;years&lt;/em&gt;. There's a &lt;em&gt;quality&lt;/em&gt; component to it that is more important than &lt;em&gt;quantity&lt;/em&gt;. Some people learn very little over several years of &amp;quot;experience&amp;quot;, while others learn and grow a lot in a fraction of the time.&lt;/p&gt;
&lt;p&gt;The amount of experience is still important. And the &lt;em&gt;quality&lt;/em&gt; of someone's experience is lot harder to measure, since it may depend on many interrelated factors: type of work done, intelligence, interest, motivation, attitude, the environment, and people (s)he worked with.&lt;/p&gt;
&lt;p&gt;But please, don't measure &lt;em&gt;experience&lt;/em&gt; in time units alone.&lt;/p&gt;
&lt;p&gt;Unfortunately, if you need to hire someone, recruiters do little (if any) to find &lt;em&gt;quality&lt;/em&gt; workers. They just care about keywords (like: java, web, manager) and the years of &lt;em&gt;experience&lt;/em&gt; associated with each of them.&lt;/p&gt;
&lt;p&gt;If you think about it, time is relatively easy to add to the
experience of a person: it's just a matter of time :-).&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;quality&lt;/em&gt; of a person's experience, on the other hand, depends a lot on his/her
own will.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Sat, 17 Dec 2005 16:11:00 GMT</pubDate><guid isPermaLink="true">/post/quality-of-experience/</guid></item><item><title>Web 2.0</title><link>https://danielpecos.com/2005/12/14/web-20/</link><description>&lt;p&gt;Es el término de moda en los entornos de programación web: &lt;a href="http://es.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/a&gt;, consistente en la interacción de las tecnologías &lt;a href="http://es.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/HTML"&gt;HTML&lt;/a&gt;/&lt;a href="http://es.wikipedia.org/wiki/CSS"&gt;CSS&lt;/a&gt; y &lt;a href="http://es.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt;. Aunque en sí misma esta conjunción resulta bastante reciente, las tecnologías implicadas son ya viejas glorias entre los programadores.&lt;/p&gt;
&lt;p&gt;El concepto básico en el que se basa esta técnica de programación es bastante simple: cuando se produce un evento en el navegador web que está mostrando el código HTML, en vez de realizar una petición HTTP al servidor, tal y como se suele realizar normalmente, se crea un objeto JavaScript &lt;a href="http://es.wikipedia.org/wiki/XMLHttp"&gt;XMLHttpRequest&lt;/a&gt;, encargado de realizar dicha petición, la cual devolverá unos datos que serán pasados al manejador del evento que se haya definido.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://danielpecos.com/assets/2005/12/ajax.png"&gt;&lt;img alt="" class="aligncenter size-full" height="377" src="https://danielpecos.com/assets/2005/12/ajax.png" title="ajax" width="394" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sencillo ¿verdad?. La gracia del tema (puesto que hasta ahora lo único que se ha hecho es complicar lo que antes se hacía de forma sencilla) es que la petición HTTP y la ejecución del manejador del evento se realizan en un segundo plano y de forma asíncrona, de forma que el efecto producido por el evento es percibido por el usuario sólo cuando la comunicación con el servidor ya ha terminado. Además, no resulta necesario realizar una recarga del código HTML, ya que es el propio manejador javascript el que edita el árbol &lt;a href="http://es.wikipedia.org/wiki/Document_Object_Model"&gt;DOM&lt;/a&gt; de la página web, lo que a efectos de interfaz resulta en una web dinámica que responde a eventos sin repetidas esperas entre cargas de páginas.&lt;/p&gt;
&lt;p&gt;Una vez visto en qué consiste esta técnica, es momento de ver algunas de las &lt;em&gt;killer app&lt;/em&gt; actuales que utilizan AJAX:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://gmail.google.com"&gt;Gmail&lt;/a&gt;: Sin lugar a dudas es la aplicación que lanzó a la fama AJAX, asombrando con la navegación entre emails sin necesidad de hacer recargas, o del autocompletado a la hora de escribir una dirección de email o de la corrección de sintaxis en la edición.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maps.google.com/"&gt;Google Maps&lt;/a&gt;: Otra aplicación de &lt;a href="http://google.com"&gt;Google&lt;/a&gt; que permite navegar por el mundo a través de un mapa capaz de superponer fotos satélite.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.flickr.com"&gt;Flickr!&lt;/a&gt;: Perteneciente a &lt;a href="http://yahoo.com"&gt;Yahoo!&lt;/a&gt;, ofrece la posibilidad de organizar y etiquetar nuestras fotos preferidas, a través de una interfaz &lt;a href="http://es.wikipedia.org/wiki/Macromedia_Flash"&gt;Flash&lt;/a&gt; y técnicas AJAX.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.meebo.com"&gt;Meebo&lt;/a&gt;: Cliente de mensajería instántanea via web, con capacidad para hacer login en la red de IM que se prefiera. Personalmente, la simulación de ventanas de chat que tiene me parece que es realmente impresionante.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.writely.com/"&gt;Writely&lt;/a&gt;: Editor de textos &lt;a href="http://es.wikipedia.org/wiki/WYSIWYG"&gt;WYSIWYG&lt;/a&gt; que permite guardar los documentos en formato word, además de una organización por etiquetas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por el momento el punto más flojo de la cuestión es idear qué nuevas funcionalidades pueden sacar un mayor partido a esta reciente técnica, por lo que a pensar se ha dicho ;-).&lt;/p&gt;
&lt;p&gt;Y tú, ¿ya has programado una aplicación web utilizando AJAX?&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Wed, 14 Dec 2005 10:37:39 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2005/12/14/web-20/</guid></item><item><title>Macbeth—Response</title><link>https://www.davidschlachter.com/writings/macresponse</link><description>Portraying Macbeth as weak-minded and easily manipulated.</description><author>David Schlachter</author><pubDate>Sun, 11 Dec 2005 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/macresponse</guid></item><item><title>Version Control Systems and Open Source</title><link>/post/version-control-systems-and-open-source/</link><description>&lt;p&gt;If you haven't looked at the available Version Control Systems lately,
you'd better look again.&lt;/p&gt;
&lt;p&gt;About 5 years ago, CVS was pretty much the only open source Version
Control System in use, and it's still very popular.&lt;/p&gt;
&lt;p&gt;But in the last few years, a surprising number of new and really good
open source version control systems came to life. Like most open
source projects, their authors started them to scratch a personal
itch. In this case, the itch was caused by some important limitations
in CVS:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The directory structure is not versioned (it only keeps history of
files)&lt;/li&gt;
&lt;li&gt;Impossibility to rename, move or copy files (without loosing history)&lt;/li&gt;
&lt;li&gt;Operations (like commits) are not atomic&lt;/li&gt;
&lt;li&gt;No concept of &amp;quot;change sets&amp;quot;&lt;/li&gt;
&lt;li&gt;Very expensive (inefficient) branching mechanism&lt;/li&gt;
&lt;li&gt;Limited merging capabilities&lt;/li&gt;
&lt;li&gt;No support for decentralized repositories (distributed development).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Don't get it wrong though: CVS is a &lt;em&gt;very&lt;/em&gt; respectable piece of
software: it's been first released more than 20 years ago!&lt;/p&gt;
&lt;p&gt;Among the new open source alternatives I found these to be quite
popular:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; -- Explicitly designed
as a replacement for CVS. I would say it's achieving it's
goal. Many big projects moved from CVS to Subversion, like
&lt;a href="http://kde.org/"&gt;KDE&lt;/a&gt;, &lt;a href="http://gcc.gnu.org/"&gt;GCC&lt;/a&gt;,
&lt;a href="http://apache.org/"&gt;Apache&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://svk.elixus.org/"&gt;SVK&lt;/a&gt; -- Built on top Subversion's
libraries. It offers additional functionality, like distributed
repositories and better merging. It integrates with existing
Subversion repositories, so it's more an extension than an
alternative to Subversion.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://gnuarch.org/"&gt;Arch&lt;/a&gt; -- Very powerful and decentralized. The
current version 1 received many complains around usability, which
spawned new projects like
&lt;a href="http://bazaar.canonical.com/"&gt;Bazaar&lt;/a&gt;. But version 2 promises many
improvements, including ideas from Bazaar and other systems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://git.or.cz/"&gt;Git&lt;/a&gt; -- Developed by Linus Torvalds and other
Linux Kernel hackers when they were forced to stop using the
commercial &lt;a href="http://www.bitkeeper.com/"&gt;BitKeeper&lt;/a&gt; because of
licensing issues.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://abridgegame.org/darcs/"&gt;Darcs&lt;/a&gt; -- Written is
&lt;a href="http://www.haskell.org/"&gt;Haskell&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://codeville.org/"&gt;Codeville&lt;/a&gt; -- Apparently has an advanced
merging algorithm without the &lt;a href="http://article.gmane.org/gmane.comp.version-control.monotone.devel/3264"&gt;problems of 3-way-merge&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.venge.net/monotone/"&gt;Monotone&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Subversion, like CVS, is designed around the concept of a
&lt;em&gt;centralized&lt;/em&gt; repository: all developers work against one single
repository. All the other systems mentioned above are &lt;em&gt;decentralized&lt;/em&gt;,
allowing for more distributed development: several repositories may
exist (say, one per developer) and they are synchronized in a
peer-to-peer way.&lt;/p&gt;
&lt;p&gt;If you never used a decentralized system, it may sound like a crazy
idea. But for some project teams, like the Linux kernel hackers, a
decentralized system is a requirement. They cannot rely on a
centralized repository (even &lt;a href="http://subversion.tigris.org/subversion-linus.html"&gt;the Subversion team understands this&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Some projects use decentralized systems but still define a &lt;em&gt;main&lt;/em&gt;
repository against which all developers synchronize often. Then only a
few maintainers (main developers) have write permissions to the main
repository, but anyone who wants to contribute is free to create a
local (personal) branch off the main repository, without even
notifying the maintainers. When a contributor is ready to share his
new code, he/she sends a patch to the maintainers.&lt;/p&gt;
&lt;p&gt;I think the big Open Source projects are the most demanding users of
Version Control Systems. And companies can learn a lot from them.&lt;/p&gt;
&lt;p&gt;May be, most in-house software development teams do not have such
strong requirements on source control because they don't face all the
obstacles found in distributed Open Source projects: people working on
and off, at different times with no clear schedules, from different
time-zones, little (if any) face-to-face communication, hard to have
&amp;quot;all-hands&amp;quot; meetings.&lt;/p&gt;
&lt;p&gt;But, with the increasing number of companies outsourcing part of their
development teams, many of these same problems arise. So I bet many
companies would benefit from a more decentralized approach.&lt;/p&gt;
&lt;p&gt;I only have experience with Subversion and SVK. That's what I'm
currently using. The good thing about SVK is that it provides a
decentralized system that is compatible with Subversion
repositories. This allows you to create your own local branches off
any Subversion repository you have access to.&lt;/p&gt;
&lt;p&gt;So, if your are still using CVS, you should take a serious look at the
new alternatives. If you think a decentralized approach is not for
your team, then go with Subversion.&lt;/p&gt;
&lt;p&gt;I like SVK because I need to interact with Subversion
repositories. But if you are defining a new project and want it to be
decentralized, you should probably look into some of the naturally
decentralized systems.&lt;/p&gt;
&lt;p&gt;For more information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://linuxmafia.com/faq/Apps/scm.html"&gt;VCSs on Linux&lt;/a&gt; -- Long list of available VCSs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://dmoz.org/Computers/Software/Configuration_Management/Tools/"&gt;Dmoz Configuration Mgmt. / Tools&lt;/a&gt; -- More VCSs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://better-scm.berlios.de/comparison/comparison.html"&gt;VCS comparison&lt;/a&gt; -- Comparative matrix of existing systems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.dwheeler.com/essays/scm.html"&gt;Comments on Open Source and SCMs&lt;/a&gt; -- Very good article
on open source VCSs and centralized vs. decentralized systems.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><author>Neuroning</author><pubDate>Sun, 11 Dec 2005 17:07:00 GMT</pubDate><guid isPermaLink="true">/post/version-control-systems-and-open-source/</guid></item><item><title>D’Arcy McGee High School Gee Gee’s Logo</title><link>https://www.davidschlachter.com/misc/geegee</link><description>The logo of the D’Arcy McGee High School Gee Gee’s, as vector art (with rasters available).</description><author>David Schlachter</author><pubDate>Fri, 09 Dec 2005 19:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/misc/geegee</guid></item><item><title>Graphical Thread Dumps</title><link>/post/graphical-thread-dumps/</link><description>&lt;p&gt;I am surprised by the high number of Java developers I meet that do
not know what a Java &lt;a href="http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/"&gt;Thread Dump&lt;/a&gt; is or how to generate one. I find it
a very powerful tool, and it is always available as part of the JVM.
I haven't played much with Java 5 yet, but it comes with &lt;a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstack.html"&gt;jstack&lt;/a&gt;, a new tool that makes it easier to generate thread dumps.&lt;/p&gt;
&lt;p&gt;Earlier this year, I was working on a load test for for a well-known
airline. We were tunning the environment all we could, monitoring and
profiling to know where to focus our optimization efforts. The
solution involved a fairly high stack: Apache httpd, WebSphere,
FuegoBPM, Tibco messaging, Oracle RAC.&lt;/p&gt;
&lt;p&gt;The system was holding load pretty well up to a certain point in which
it immediatly halted and stopped processing new requests. Every time
we run the load testing scripts we experienced the same symptoms. Not
even the official testers --with allegedly powerful testing and
monitoring tools-- were able to identify the cause of the problem.&lt;/p&gt;
&lt;p&gt;So, I decided to get a few Thread Dumps of WebSphere's JVM. On Unix, you do &amp;quot;&lt;code&gt;kill -3 &amp;lt;pid&amp;gt;&lt;/code&gt;&amp;quot; and the dump goes to WebSphere's &lt;code&gt;native_stdout.log&lt;/code&gt;. We
inspected the dumps but couldn't identify dead-locks or any other
obvious anomaly, although the answer was right before our eyes.&lt;/p&gt;
&lt;p&gt;Since the thread dump was daunting, I decided to spend a bit of my time on doing some fun work: I
wrote a short Ruby script to create a graphical representation of the
dump, showing the locks each thread was holding, and the locks each
thread was waiting on. The heavy work of actually drawing and laying
out the graph was left to &lt;a href="http://www.graphviz.org"&gt;GraphViz&lt;/a&gt;'s &lt;code&gt;dot&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Once the script was usable, I generated the graph for the above
mentioned dump.&lt;/p&gt;
&lt;p&gt;To our delight, the graph immediately exposed the
problem: &lt;a href="/pages/thread-dump-graph/"&gt;See for yourself&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Every thread was waiting on a lock that was held by thread
&lt;em&gt;Servlet.Engine.Transports 1405&lt;/em&gt;. What was this thread doing?
Here's the stack, taken from the thread dump:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;"Servlet.Engine.Transports : 1405"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;daemon&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;prio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;0x020cee40&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="n"&gt;nid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;0x515ea&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;runnable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;8648f000&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="na"&gt;864919c0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;io&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;UnixFileSystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBooleanAttributes0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Native&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Method&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;io&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;UnixFileSystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBooleanAttributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UnixFileSystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;221&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;io&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;680&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sun&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;misc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;URLClassPath$FileLoader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;URLClassPath&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;887&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sun&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;misc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;URLClassPath&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;URLClassPath&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;157&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;net&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;URLClassLoader$1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;URLClassLoader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;191&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;security&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AccessController&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;doPrivileged&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Native&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Method&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;net&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;URLClassLoader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;findClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;URLClassLoader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;187&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ibm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;bootstrap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ExtClassLoader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;findClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ExtClassLoader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;79&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ClassLoader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;loadClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClassLoader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;289&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;locked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;0xb4c1be08&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ibm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;bootstrap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ExtClassLoader&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ClassLoader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;loadClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClassLoader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;235&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;accessing the filesystem! After sharing the findings with the rest of
the team, one of the admins revealed that the WebSphere installation
was on a mounted NFS drive... WebSphere's JVM was trying to reload
some .jar files, but it choked NFS under heavy load.&lt;/p&gt;
&lt;p&gt;Unfortunately, moving WebSphere to a non-NFS was not trivial (you
know... a big company, with procedures, standards, bureaucracy), and
since the managers were already happy with the results of the load
test, we never had a chance to run it all again. I am still wondering
how much load it would have standed without NFS (and
why was WebSphere reading those .jars so often to begin with?).&lt;/p&gt;
&lt;p&gt;So, we found the bottle-neck thanks to a thread dump, and &lt;em&gt;a picture is worth a thousand lines of thread dumps&lt;/em&gt; :-)&lt;/p&gt;
&lt;p&gt;Here is the quick and dirty script: &lt;a href="/post/graphical-thread-dumps/tdg.rb"&gt;tdg.rb&lt;/a&gt;&lt;/p&gt;</description><author>Neuroning</author><pubDate>Fri, 25 Nov 2005 01:00:00 GMT</pubDate><guid isPermaLink="true">/post/graphical-thread-dumps/</guid></item><item><title>AT&amp;amp;T Text to Speech</title><link>/post/at-t-text-to-speech/</link><description>&lt;p&gt;A co-worker pointed me to &lt;a href="http://www.research.att.com/projects/tts/"&gt;AT&amp;amp;T Natural Voices&lt;/a&gt;,   a Text-to-Speech research
project from AT&amp;amp;T. I tried
the &lt;a href="http://www.research.att.com/projects/tts/demo.html"&gt;online demo&lt;/a&gt; and I'm
really impressed.&lt;/p&gt;
&lt;p&gt;It's been a long while since I last tried a TTS system, so may be I'm
just late to the party... but this one produces very natural speech. I
tried a couple of English and Spanish voices, and all seem very real.&lt;/p&gt;
&lt;p&gt;I knew about the
&lt;a href="http://www.cstr.ed.ac.uk/projects/festival/"&gt;Festival&lt;/a&gt; project, which
provides a free speech synthesis system, but if you check the &lt;a href="http://festvox.org/voicedemos.html"&gt;online voice
demos&lt;/a&gt; you will probably agree that it's not on par with AT&amp;amp;T's.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Tue, 22 Nov 2005 15:25:00 GMT</pubDate><guid isPermaLink="true">/post/at-t-text-to-speech/</guid></item><item><title>Baby Pilar is here</title><link>/post/baby-pilar-is-here/</link><description>&lt;p&gt;This is old news already, and although it's not about Software, it's
definitely about Development :-)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://neuroning.com/images/articles/pilar.jpg"&gt;&lt;img src="http://neuroning.com/images/articles/pilar_small.jpg" style="float: right; padding: 5px;" /&gt;&lt;/a&gt; I'm happy to share that &lt;em&gt;Pilar&lt;/em&gt;, my second daughter, was born last
a couple of weeks ahead of schedule --and on budget ;-).&lt;/p&gt;
&lt;p&gt;She has
&lt;a href="http://en.wikipedia.org/wiki/Jaundice#Neonatal_jaundice"&gt;jaundice&lt;/a&gt;,
so she is under photo-therapy. Fortunately, this can be done at home,
and should only last a few days.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Sat, 19 Nov 2005 12:40:00 GMT</pubDate><guid isPermaLink="true">/post/baby-pilar-is-here/</guid></item><item><title>Micro and Blind Optimizations</title><link>/post/say-no-to-blind-optimizations/</link><description>&lt;p&gt;Yesterday, a good friend of mine and ex-coworker contacted to me to share his
frustration.&lt;/p&gt;
&lt;p&gt;(he hates to be called &amp;quot;Polino&amp;quot;, so I won't.. &lt;em&gt;doh!&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;He finished a software solution for a customer, and now an &lt;em&gt;expert&lt;/em&gt;
is reviewing his Java code.&lt;/p&gt;
&lt;p&gt;The expert code reviewer insists on small performance optimizations, but he
is way off target. He wants to micro-optimize, and to do it blindly.&lt;/p&gt;
&lt;p&gt;For example, he reported that the following code was doing
&amp;quot;inefficient String concatenations&amp;quot;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;myString&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Some text here "&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="s"&gt;"Some text there "&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="s"&gt;"Some more... "&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And that this was an &amp;quot;inefficient way of creating &lt;code&gt;Long&lt;/code&gt;s&amp;quot;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;myList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These examples are probably well optimized by modern Java
compilers. But even if they weren't, they probably don't affect much
to the performance of the system as a whole.&lt;/p&gt;
&lt;p&gt;This &lt;em&gt;expert&lt;/em&gt; may ignore that the &lt;a href="http://en.wikipedia.org/wiki/Pareto_principle"&gt;Pareto principle&lt;/a&gt; often
applies to software optimization problems: about 80% of the resources
(including execution time) are consumed by about 20% of the code.&lt;/p&gt;
&lt;p&gt;You need to find those sections of code that have the most impact in
the overall performance of the system.&lt;/p&gt;
&lt;p&gt;One could argue that the two examples above are not in that top list
(unless the code is wrapped by several nested loops). But, in any
case, you cannot base your optimization efforts only on arguments and
intuition: you need real data.&lt;/p&gt;
&lt;p&gt;Tools exist to find that 20% of the code:
&lt;a href="http://en.wikipedia.org/wiki/Profiler_%5C%28computer_science%5C%29"&gt;Profilers&lt;/a&gt;. A
good profiler can present very useful information about memory
consumption, execution times of each function/method, blocking
threads, deadlocks, and more.&lt;/p&gt;
&lt;p&gt;There are tons of profilers for the Java platform. And many are
open-source, so you have no excuse: see
&lt;a href="http://www.manageability.org/blog/stuff/open-source-profilers-for-java/view"&gt;here&lt;/a&gt;
and &lt;a href="http://java-source.net/open-source/profilers"&gt;there&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So, &lt;strong&gt;don't do blind optimizations&lt;/strong&gt;, and leave micro-optimizations
for last. Collect real data and then concentrate your efforts where it
really matters.&lt;/p&gt;
&lt;p&gt;And, even more important, define upfront what metrics you will use to
measure performance, and agree on which results will be acceptable for
the system.  Otherwise data, you will never know when to stop
optimizing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Premature optimization is the root of all evil&amp;quot; --
&lt;a href="http://c2.com/cgi/wiki?TonyHoare"&gt;TonyHoare&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description><author>Neuroning</author><pubDate>Fri, 04 Nov 2005 00:16:00 GMT</pubDate><guid isPermaLink="true">/post/say-no-to-blind-optimizations/</guid></item><item><title>Oracle DB Express</title><link>/post/oracle-db-express/</link><description>&lt;p&gt;I just realized about an interesting move from Oracle. They released a
Beta version of their new &lt;a href="http://www.oracle.com/technology/products/database/xe/index.html"&gt;Oracle Database 10g Express
Edition&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This &lt;em&gt;Express&lt;/em&gt; edition is free of charge. It is free not only for
production use, but also for distribution.&lt;/p&gt;
&lt;p&gt;These are the limitations it has:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It restricts itself to use only one CPU&lt;/li&gt;
&lt;li&gt;Only one server and database instance (SID) per installation&lt;/li&gt;
&lt;li&gt;Database size limit of 4GB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Looks like a good deal for &lt;a href="http://en.wikipedia.org/wiki/ISV"&gt;ISVs&lt;/a&gt;,
developers and small shops. It's a good way for getting more
mind-share among small software companies and younger/future
developers.&lt;/p&gt;
&lt;p&gt;I tried it on my Linux laptop and got it up and running in a couple of
minutes. The &lt;em&gt;Express&lt;/em&gt; name does not make it any lighter though: it
still consumes a good chunk of RAM, and the database instance
allocates 1GB of disk. So I'll stick to &lt;a href="http://postgresql.org"&gt;PostgreSQL&lt;/a&gt; for powering this blog :-).
The only installer for Linux is an &lt;a href="http://www.rpm.org"&gt;RPM&lt;/a&gt;
archive. I'm using &lt;a href="http://fedora.redhat.com"&gt;Fedora&lt;/a&gt; 4 and it worked just fine.&lt;/p&gt;
&lt;p&gt;The pre-installation script checks for at least 1.5GB of swap space:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[root@sequoia local]$ rpm -Uvh oracle-xe-10.2.0.1-0.1.i386.rpm
Preparing...                ########################################### [100%]
This system does not meet the minimum requirements for swap space.  Based on
the amount of physical memory available on the system, Oracle Database 10g
Express Edition requires 1515.0 MB of swap space. This system has 493 MB
of swap space.  Configure more swap space on the system and retry the
installation.
error: %pre(oracle-xe-10.2.0.1-0.1.i386) scriptlet failed, exit status 1
error:   install: %pre scriptlet failed (2), skipping oracle-xe-10.2.0.1-0.1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Since I don't (and won't) have that much space on my swap partition, I
cheated by forcing RPM to skip the pre-condition script using the
&amp;quot;--nopre&amp;quot; option ;-) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[root@sequoia local]# rpm -Uvh --nopre oracle-xe-10.2.0.1-0.1.i386.rpm
Preparing...                ########################################### [100%]
   1:oracle-xe              ########################################### [100%]
Executing Post-install steps..........
You must run '/etc/init.d/oracle-xe configure' as root user to
configure the database.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After running the &lt;code&gt;/etc/init.d/oracle-xe configure&lt;/code&gt; script, it was
up. The SID of the database it creates is &amp;quot;XE&amp;quot;.&lt;/p&gt;
&lt;p&gt;It did NOT create any application icons on my KDE 3.4.2 desktop as the
documentation suggests. No big deal for me and it's a Beta anyway.&lt;/p&gt;
&lt;p&gt;It also comes with
&lt;a href="http://www.oracle.com/technology/products/database/htmldb/index.html"&gt;htmldb&lt;/a&gt;,
which is a handy web-based tool for administering Oracle and building
simple DB apps. Go to &lt;code&gt;http://hostname:port/htmldb&lt;/code&gt; to
access it. The &lt;em&gt;port&lt;/em&gt;, and the &lt;em&gt;system&lt;/em&gt; user password are the ones
specified when running the above &lt;code&gt;oracle-xe configure&lt;/code&gt; script.&lt;/p&gt;</description><author>Neuroning</author><pubDate>Tue, 01 Nov 2005 18:45:00 GMT</pubDate><guid isPermaLink="true">/post/oracle-db-express/</guid></item><item><title>Response to The Chrysalids</title><link>https://www.davidschlachter.com/writings/chrysalidsresponse</link><description>Reading response to John Wyndham’s The Chrysalids.</description><author>David Schlachter</author><pubDate>Tue, 25 Oct 2005 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/chrysalidsresponse</guid></item><item><title>Errata for "Holub on Patterns"</title><link>/post/errata-for-holub-on-patterns/</link><description>&lt;p&gt;Months ago, I was looking for a book on Design Patterns. I already own
the great classic &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;amp;camp=1789&amp;amp;tag=mypersonalb00-20&amp;amp;creative=9325&amp;amp;path=http://www.amazon.com/gp/product/0201633612?v=glance%26n=283155%26n=507846%26s=books%26v=glance"&gt;GoF&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=mypersonalb00-20&amp;amp;l=ur2&amp;amp;o=1" style="border: none !important; margin: 0px !important;" width="1" /&gt; and a few more, but I was looking for a more
practical, real-world exposition of the classic
Patterns. I wanted a book I could recommend to new developers, so they could
really learn how to apply the concepts.&lt;/p&gt;
&lt;p&gt;I came across &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=ur2&amp;amp;camp=1789&amp;amp;tag=mypersonalb00-20&amp;amp;creative=9325&amp;amp;path=tg/detail/-/159059388X"&gt;Holub
On Patterns&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=mypersonalb00-20&amp;amp;l=ur2&amp;amp;o=1" style="border: none !important; margin: 0px !important;" width="1" /&gt;. I liked it, but I was disappointed with
the editorial quality of the book.&lt;/p&gt;
&lt;p&gt;I found a &lt;a href="/pages/holub_errata/"&gt;long list of errors&lt;/a&gt;. Some of
them are minor, but still may confuse readers, specially those new to
the topic.&lt;/p&gt;
&lt;p&gt;I sent the errors to APress via the web form they supply for
sending errata, but I got no reply back --not even a &amp;quot;thanks&amp;quot;
note. Then I contacted Allen Holub himself via email, and after
getting around his spam filter, I got a short polite reply saying that
he would include all corrections for the next print.&lt;/p&gt;
&lt;p&gt;Despite the editorial problems, I still recommend the book.&lt;/p&gt;
&lt;p&gt;In the first chapters, the author gives his take on some commonly misunderstood concepts about
object-orientation. The rest explains Design Patterns by examining the
design and Java code of two realistic projects. He also references
several other real world uses of the patterns, many in the standard
Java libraries.&lt;/p&gt;
&lt;p&gt;Allen presents some interesting ideas. For instance, his analysis around the Observer Pattern --and a clever
implementation of it-- is a gem in itself.&lt;/p&gt;
&lt;p&gt;Hopefully, all those errors are corrected on newly released copies.&lt;/p&gt;
&lt;p&gt;(Hmm... I'm thinking I might enjoy working as a part-time proof
reader!)&lt;/p&gt;</description><author>Neuroning</author><pubDate>Sun, 16 Oct 2005 00:51:00 GMT</pubDate><guid isPermaLink="true">/post/errata-for-holub-on-patterns/</guid></item><item><title>Google ofrece IM/Jabber</title><link>https://danielpecos.com/2005/08/24/google-ofrece-im-jabber/</link><description>&lt;p&gt;Pues parece ser que los tan sonados rumores de que &lt;a href="http://google.com"&gt;Google&lt;/a&gt; iba a ofrecer un servicio de mensajería instántanea &lt;a href="http://talk.google.com"&gt;se han hecho realidad&lt;/a&gt;. Es más, también se ha confirmado que utiliza el protocolo &lt;a href="http://jabber.org"&gt;Jabber&lt;/a&gt;, lo cual supondrá un fuerte empujón a esta tecnología libre. El nombre con el que se ha bautizado este servicio es &lt;a href="http://talk.google.com"&gt;Google Talk&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://talk.google.com"&gt;&lt;img alt="" class="size-full" height="99" src="https://danielpecos.com/assets/2005/08/Google-Talk-Logo.jpg" title="Google-Talk-Logo" width="243" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Podemos ver que ofrecen un cliente, por el momento únicamente para sistemas Windows, con el cual podremos realizar tanto conversaciones vía texto o vía voz.&lt;/p&gt;
&lt;p&gt;El único inconveniente es que por el momento sólo aquéllos que dispongan de una cuenta de correo &lt;a href="http://gmail.google.com"&gt;GMail&lt;/a&gt; podrán probar el nuevo sistema de IM.&lt;/p&gt;
&lt;p&gt;Podemos seguir los comentarios que se realicen en &lt;a href="http://barrapunto.com/articles/05/08/24/0658222.shtml"&gt;Barrapunto&lt;/a&gt; y en &lt;a href="http://it.slashdot.org/it/05/08/23/2316223.shtml?tid=217&amp;amp;tid=218"&gt;Slashdot&lt;/a&gt;.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Wed, 24 Aug 2005 09:54:30 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2005/08/24/google-ofrece-im-jabber/</guid></item><item><title>Open Wound v1</title><link>https://mbutler.org/open-wound-v1/</link><description>https://github.com/mbutler/openwound Openwound is a (re)writing tool named after the famous William S. Burroughs quote about cut-up writing being divination. &amp;#8220;When you cut into the present the future leaks out.&amp;#8221; This project started in 2002 with the publication of the book Alloy: Kind Tricks and Bodily Realities in the Vanguard Party that I created for my MFA [&amp;#8230;]</description><author>mbutler</author><pubDate>Fri, 15 Jul 2005 16:09:02 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/open-wound-v1/</guid></item><item><title>¿Alcohol = Diversión?</title><link>https://danielpecos.com/2005/04/12/alcohol-diversion/</link><description>&lt;p&gt;El Sábado por la noche, camino de vuelta a casa sobre las 6 de la mañana, después de una noche de fiesta con los amigos, pasaba por delante de la biblioteca de Rafalafena, desde donde se podía observar el cielo totalmente despejado (cosa bastante normal en las noches con viento, como fue ésta), teniendo una visión impresionante de la constelación Cassiopea justo encima del edificio de la biblioteca. No sé muy bien por qué, pero esa situación activó el «modo meditación» durante el resto del camino, lo que me hizo pensar en un concepto que se suele dar por supuesto y es el asociar el alcohol con la diversión.&lt;/p&gt;
&lt;p&gt;Lo curioso del tema no es que el beber alcohol implique diversión (que si se controla bien, en la mayoría de los casos suele ser así) sino la dependencia e incredulidad que se genera en el «bebedor festero habitual».&lt;/p&gt;
&lt;p&gt;Me explico:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Por un lado, se es incapaz de salir sin haber hecho un botellón previo o haberte gastado una pasta en algún que otro bareto, ya que de ser así, la noche va promete ser un coñazo de cuidado. Resulta intrigante ver a dos personas sin haber bebido una gota de alcohol, vacilándose mutuamente por la calle, diciendo que hasta que no se hagan 5 litros entre los dos, no se mueven del bar. ¿Por qué? La respuesta que obtuve en una ocasión fue que parece ser que cuánto más se bebe, menos probabilidades de que te acuerdes a la mañana siguiente de lo que hiciste (lo cual me llevó a pensar que tal vez fuera poco recomendable estar cerca de quien me lo dijo). Pensando concienzudamente en esta respuesta tan … respuesta, me pareció una actitud aún más rídicula, pero eso ya es cuestión personal de cada uno.&lt;/li&gt;
&lt;li&gt;Por otro lado, no es posible comprender cómo puede haber gente que no beba y se lo pase bien. Es más, se da por supuesto la implicación biyectiva entre no beber y muermo. De hecho es pecado mortal decir que no bebes alcohol por no hablar de las nefastas implicaciones político-religioso-social-festeras que conlleva pedir un botellín de agua en la discoteca (no hace falta hablar sobre las realmente preocupantes consecuencias presupuestarias que de hecho conlleva el infame acto).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Y por mucho que pueda resultar extraño, esto es así, o por lo menos es lo que me ha tocado sufrir en más de una ocasión. De hecho, no han sido pocas las veces que me presentan a alguien y me pregunta que si me pasa algo cuando pedimos bebida en la barra. ¿No resulta un poco fuerte el hecho de que se dé este nivel de aceptación del alcohol e incluso la sorpresa producida por el hecho de no consumirlo? Supongo que la mejor respuesta a esta pregunta se puede encontrar en el refranero: Cree el ladrón que todos son de su condición.&lt;/p&gt;
&lt;p&gt;Supongo que en este punto es normal suponer que soy un abscemio total, y el caso es que cuando salgo me suelo tomar algo cuando salgo por ahí, poca cosa, pero es que realmente no siento la necesidad social de que llegue el Lunes y mis compañeros me pregunten por el fin de semana y no les pueda contestar que me pillé un ciego increíble (de hecho tampoco acabo de entender qué mérito tiene gastarse más de 30 € en bebida para luego no saber qué es exactamente lo que hiciste, se ve que es cuestión de aguante, ya que no todo el mundo es capaz de hacerlo, y, por lo que se ve, eso está bien valorado).&lt;/p&gt;
&lt;p&gt;En fin, el camino de vuelta no dio para mucho más, y como sólo era el «modo filosófico» pues no pude encontrar alguna respuesta razonable al tema, sino que solo encontraba más situaciones éticamente pobres en relación con el alcohol. Simplemente me gustaría sugerir que se hiciese la sencilla prueba ante alguien que no te conoce de decir que no sueles beber cuando sales, resulta realmente curioso ver la cara extraño que se le queda a quien lo escucha. Si alguien lo hace, que no dude en postearlo.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;¿Y tú, bebes para pasártelo bien o simplemente bebes lo que te apetece cuando te lo pasas bien?&lt;/em&gt;&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Tue, 12 Apr 2005 22:46:44 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2005/04/12/alcohol-diversion/</guid></item><item><title>Magdalena Vítol y sus daños colaterales</title><link>https://danielpecos.com/2005/03/07/magdalena-vitol-y-sus-danos-colaterales/</link><description>&lt;p&gt;Al final todo lo bueno llega a su fin, y las fiestas de la Magdalena no han sido una excepción. Tras 10 días de frío y sufrimiento por pasarlo bien, volvemos a la rutinaria vida del trabajo diario. En general han estado bastante bien, aunque como siempre, he acabado bastante “quemado” con la organización y lo elitistas que pueden llegar a ser, pero bueno, prefiero no escribir sobre ello, no creo que ni tan siquiera lo merezcan.&lt;/p&gt;
&lt;p&gt;Aunque lo que sí que voy a denunciar es la fatal organización que hubo durante el acto de la Magdalena Vítol, el cual tras retrasarse durante casi tres cuartos de hora, se extendió casi una hora más, gracias a una pobre actuación teatral, en la cual no se tuvo en cuenta el estado meteorológico (que no es que acompañara mucho) y que casí hace acabar a una actriz que estaba colgada en un globo-luna, acabar en la punta del Fadrí. Pero lo peor estaba aún por llegar cuando a los organizadores les dio por lanzar un mini-castillo de fuegos artificiales hacia el público lo que produjo la consecuente avalancha de gente y sus correspondientes heridos y daños colaterales. Además, y para más inri, una carcasa cayó justo al lado de donde estabamos nosotros, causando una escena un tanto dantesca. Las consecuencias, pues mi amigo Héctor con una ampolla en el cuello, Guillermo oliendo a pollo quemado y yo con un par de quemones en la chaqueta. El resto de gente que venía con nosotros creo que salió más o menos intactos, salvo por el mal rato pasado.&lt;/p&gt;
&lt;p&gt;Creo y espero que será dificil de &lt;em&gt;mejorar&lt;/em&gt; en próximos años, aunque si hay algo que no deja de sorprenderme año tras año son los organizadores y sus geniales ideas festivas. A ver con que nos &lt;em&gt;premian&lt;/em&gt; en el 2006.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Mon, 07 Mar 2005 01:17:01 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2005/03/07/magdalena-vitol-y-sus-danos-colaterales/</guid></item><item><title>Seguridad Informática</title><link>https://danielpecos.com/documents/seguridad-informatica/</link><description>&lt;h2 id="introducción"&gt;&lt;span class="mw-headline" id="Introducci.C3.B3n"&gt;Introducción&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;La Seguridad Informática es una disciplina que trata de asegurar la integridad y la privacidad de los sistemas de la información. Cubre todos los componentes que forma un sistema de información: datos, software, hardaware, redes, usuarios, etc.&lt;/p&gt;
&lt;p&gt;En este documento se va a profundizar en la Seguridad Informática centrada al software, más concretamente en la &lt;a class="external text" href="http://es.wikipedia.org/wiki/Criptolog%C3%ADa" rel="nofollow"&gt;Criptología&lt;/a&gt;. La Criptología es la rama de la Seguridad Informática que estudia los criptosistemas (sistemas que permiten la comunicación segura de mensajes entre un emisor y un receptor). La Cripotología está dividida en diferentes áreas de estudio:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="external text" href="http://es.wikipedia.org/wiki/Criptograf%C3%ADa" rel="nofollow"&gt;Criptografía&lt;/a&gt;: consiste en una serie de técnicas que permiten el cifrado y descifrado de mensajes.&lt;/li&gt;
&lt;li&gt;&lt;a class="external text" href="http://es.wikipedia.org/wiki/Criptoan%C3%A1lisis" rel="nofollow"&gt;Criptoanálisis&lt;/a&gt;: métodos utilizados para la extracción de información a partir de un mensaje cifrado, sin hacer uso de la información secreta que normalmente sería requerida.&lt;/li&gt;
&lt;li&gt;&lt;a class="external text" href="http://es.wikipedia.org/wiki/Esteganograf%C3%ADa" rel="nofollow"&gt;Esteganografía&lt;/a&gt;: técnicas que permiten ocultar mensajes dentro de objetos portadores, sin que sean fácilmente detectados.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="qué-es-la-seguridad-informática"&gt;&lt;span class="mw-headline" id=".C2.BFQu.C3.A9_es_la_seguridad_Inform.C3.A1tica.3F"&gt;¿Qué es la seguridad Informática?&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Aspectos principales en los que se divide la Seguridad Informática:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Confidencialidad&lt;/li&gt;
&lt;li&gt;Autenticidad&lt;/li&gt;
&lt;li&gt;Integridad&lt;/li&gt;
&lt;li&gt;Disponibilidad&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La Política de Seguridad es un documento donde se analizan las debilidades del Sistema Informático, así como los mecanismos que se van a seguir para conseguir un máximo alcance de cada uno de los aspectos anteriores. No siempre es posible llegar a alcanzar un alto grado de consecución en todos los aspectos puesto que algunos son excluyentes entre sí (p.ej. Disponibilidad &amp;lt;-&amp;gt; Autenticidad), por lo que hay que conseguir el balance ideal.&lt;/p&gt;
&lt;h4 id="tipos-de-contramedidas"&gt;&lt;span class="mw-headline" id="Tipos_de_contramedidas"&gt;Tipos de contramedidas&lt;/span&gt;&lt;/h4&gt;
&lt;div class="center"&gt;
  &lt;div class="floatnone"&gt;
    &lt;img alt="Seguridad Contramedidas" class="aligncenter size-full" height="309" src="https://danielpecos.com/assets/2016/10/Seguridad_contramedidas.png" width="353" /&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Físicas: soluciones hardware que aseguren la disponibilidad (p.ej. SAI) y la integridad (p.ej. RAID), principalmente.&lt;/li&gt;
&lt;li&gt;Lógicas (informáticas): métodos algorítmicos que aseguran la autenticidad (p.ej. Firma electrónica) y confidencialidad.&lt;/li&gt;
&lt;li&gt;Administrativas: conjunto de reglas que marcan el uso del sistema informático y que son de obligado cumplimiento.&lt;/li&gt;
&lt;li&gt;Legales: sistema de medidas o normas que define la ley y cuya principal cualidad es el ser de caracter represiva.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="principios-de-la-seguridad-informática"&gt;&lt;span class="mw-headline" id="Principios_de_la_Seguridad_Inform.C3.A1tica"&gt;Principios de la Seguridad Informática&lt;/span&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Mínimos privilegios&lt;/li&gt;
&lt;li&gt;Evitar basar la seguridad en el secretismo&lt;/li&gt;
&lt;li&gt;Participación universal&lt;/li&gt;
&lt;li&gt;Mecanismos de defensa construidos en profundidad (encadenados)&lt;/li&gt;
&lt;li&gt;Recuperación en caso de fallo de seguridad&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="aspectos-legales"&gt;&lt;span class="mw-headline" id="Aspectos_legales"&gt;Aspectos legales&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Es importante conocer los aspectos legales que afectan a la seguridad informática, puesto que muchas de las veces vamos a estar moviéndonos en el límite de la legalidada. Estas leyes varían en función del país y del momento, por lo que es necesario mantenerse informado sobre estos aspectos y actualizarnos, si pretendemos realizar consultorías o simplemente &lt;em&gt;experimentar&lt;/em&gt; los conceptos que se tratan en la Seguridad Informática.&lt;/p&gt;
&lt;h4 id="seguridad-informática"&gt;&lt;span class="mw-headline" id="Seguridad_Inform.C3.A1tica"&gt;Seguridad Informática&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;Según la &lt;a class="external text" href="http://es.wikipedia.org/wiki/Seguridad_inform%C3%A1tica" rel="nofollow"&gt;Wikipedia&lt;/a&gt;, se entiende como Seguridad &lt;em&gt;un estado de cualquier tipo de información (informático o no) que nos indica que ese sistema está libre de peligro, daño o riesgo&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Cabe plantearse la siguiente pregunta: ¿Estamos hablando de Seguridad Informática o bien de Seguridad de la información? La segunda se puede considerar una parte de la primera, y muchas veces resulta díficil discernir dónde está el límite entre una y otra (por ejemplo, es posible ofrecer Seguridad de la Información con una simple política de backups, mientras que los sistemas hardware están totalmente desprotegidos, por lo que la Seguridad Informática en global resulta bastante baja).&lt;/p&gt;
&lt;p&gt;Según la norma UNE-ISO/IEC 17799, la seguridad de la información se define como la preservación de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Su confidencialidad&lt;/li&gt;
&lt;li&gt;Su integridad&lt;/li&gt;
&lt;li&gt;Su disponibilidad&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Además pueden tenerse en cuenta estas otras dimensiones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Autenticidad&lt;/li&gt;
&lt;li&gt;Trazabilidad (permite determinar todas y cada una de las acciones que realiza cada usuario)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para conseguir un máximo cumplimiento en cada una de estas dimensiones (ya se ha comentado que esto puede ser imposible puesto que algunas de estas dimensiones pueden llegar a plantear un conflicto entre sí, siendo posible alcanzar un equilibrio óptimo entre ellas), se debe definir una Política de Seguridad, pero no se debe terminar aquí, ya que la seguridad es un proceso continuo de planificación, implantación, verificación y ajuste de cada uno de los mecanismos que se establezcan para conseguir mejorar alguna de las dimensiones de la Seguridad de la Información.&lt;/p&gt;
&lt;p&gt;Para definir la Política de Seguridad es necesario realizar un &lt;em&gt;Análisis del Riesgo&lt;/em&gt; el cual nos permitirá discernir cuáles son los &lt;em&gt;Activos&lt;/em&gt; que se deben proteger en función del valor que se le atribuya. Dicho valor puede ser de diferentes índoles: económico, estratégico, sentimental, etc. A partir del análisis de riesgo, debemos proceder con la &lt;em&gt;Gestión del Riesgo&lt;/em&gt; que permite preparar una defensa contra el o los riesgos que se consideren oportunos, así como un plan de contigencia en caso de que los riesgos lleguen a ocurrir con el fin de que la afectación causada por dicho riesgo conlleve un impacto lo más bajo posible. Para discernir qué activos conviene proteger, es posible utilizar un &lt;em&gt;Mapa de Activos&lt;/em&gt;, que no es más que un grafo en el que se visualizan las relaciones entre los distintos activos, permitiendo identificar los que son de mayor criticidad.&lt;/p&gt;
&lt;div class="center"&gt;
  &lt;div class="floatnone"&gt;
    &lt;img alt="Mapa Activos" class="aligncenter size-full" height="464" src="https://danielpecos.com/assets/2016/10/Mapa_activos.png" width="452" /&gt;
  &lt;/div&gt;
  &lt;div class="floatnone"&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;En el ejemplo de diagrama anterior (ínfraestructura típica de un sitio web) se pueden ver los siguientes activos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los clusters para atender peticiones webs, formados por servidores (web y base de datos) interconectados. Normalmente se dispone de dos clusters, haciendo uno las funciones de backup, por lo que resulta necesario replicar toda la infraestructura en el backup.&lt;/li&gt;
&lt;li&gt;Cada uno de estos clusters suele tener su equipo de mantenimiento y suelen estar en sitios fisicamente distanciados.&lt;/li&gt;
&lt;li&gt;El firewall y switch que protegen y comunican los dos clusters.&lt;/li&gt;
&lt;li&gt;Los usuarios que intentan acceder al sistema.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se ha comentado que los &lt;em&gt;Activos&lt;/em&gt; son los recursos que se deben proteger y que su selección se realizará en función del valor que se determine que dicho activo posee. Un activo puede ser material (equipos informáticos, joyas, obras de arte, etc) o inmaterial (proyectos, diseños, habilidades tecnológicas, etc). En el caso de la Seguridad Informática, los &lt;em&gt;Activos de Información&lt;/em&gt; principalmente, serán los objetivos a proteger de posibles riesgos.&lt;/p&gt;
&lt;p&gt;Los activos que se ven afectados por un riesgo (bien por su frecuencia o bien por el impacto que puedan causar cuando el riesgo aparezca) se denomina &lt;em&gt;Activo Degradado&lt;/em&gt;. La función de la Seguridad Informática es la de definir salvaguardas que reduzcan tanto la frecuencia como el impacto o degradación que puedan causar dichos riesgos. Estos valores de frecuencia o impacto son valores estimados y en función de los cuales se justificará la implantación de salvaguardas. Así pues, se puede decir que los principales aspectos que hay considerar en la Gestión del Riesgo son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El impacto que puede causar el riesgo: &lt;em&gt;Daño posible&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;La frecuencia con la que dicho riesgo puede manifestarse: &lt;em&gt;Daño probable&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Según &lt;a class="external text" href="http://www.csi.map.es/csi/pg5m20.htm" rel="nofollow"&gt;MAGERIT&lt;/a&gt; (Metodología de Análisis y Gestión de Riesgos de los Sistemas de Información), la Gestión del Riesgo debe:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Establecer una Política de la Organización al respecto: directrices generales de quién es responsable de cada cosa.&lt;/li&gt;
&lt;li&gt;Establecer una Norma: objetivos a satisfacer para poder decir con propiedad que la amenaza ha sido conjurada.&lt;/li&gt;
&lt;li&gt;Establecer unos Procedimientos: instrucciones paso a paso de qué hay que hacer.&lt;/li&gt;
&lt;li&gt;Desplegar salvaguardas técnicas que efectivamente se enfrenten a las amenazas con capacidad para conjurarlas.&lt;/li&gt;
&lt;li&gt;Desplegar controles que permitan saber que todo lo anterior está funcionando según lo previsto.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Conviene llegar a un cierto equilibrio entre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Salvaguardas Técnicas: en aplicaciones, equipos y comunicaciones.&lt;/li&gt;
&lt;li&gt;Salvaguardas Físicas: protegiendo el entorno de trabajo de las personas y los equipos.&lt;/li&gt;
&lt;li&gt;Medidas de Organización: de prevención y gestión de las incidencias.&lt;/li&gt;
&lt;li&gt;Política de Personal: que, a fin de cuentas, es el eslabón imprescindible y más delicado: política de contratación, formación permanente, Organización de reporte de incidencias, plan de reacción y medidas disciplinarias.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por otra parte, actualmente en España existen las siguientes protecciones legales de activos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ley Orgánica de protección de datos de carácter personal.
&lt;ul&gt;
&lt;li&gt;RD 1720/2007 contempla las medidas de seguridad seguridad.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ley de Servicios de la Sociedad de la Información.&lt;/li&gt;
&lt;li&gt;Ley General de Telecomunicacione&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="delitos-informáticos"&gt;&lt;span class="mw-headline" id="Delitos_Inform.C3.A1ticos"&gt;Delitos Informáticos&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;Hablando con propiedad, los &lt;em&gt;Delitos Informáticos&lt;/em&gt; como tal no existen, aunque es común referirse como tal a los delitos que tienen, bien como vía, bieno como objeto del delito, medios tecnológicos o informáticos. Así pues, se considerá, comúnmente hablando, un delito informático aquel que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usa la tecnología como medio para cometer un delito, como por ejemplo, la duplicación de tarjetas de crédito mediante dispositivos ocultos en cajeros automáticos, el &lt;em&gt;phising&lt;/em&gt; realizado sobre bancos para obtener los datos de acceso de los usuarios, etc.&lt;/li&gt;
&lt;li&gt;Atenta directamente contra un activo que forma parte de un Sistema de Información, como por ejemplo el ataque mal intencionado a servidores, la creación de virus, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Casos típicos de delito informático, entre otros, son los siguientes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Revelación de secretos&lt;/li&gt;
&lt;li&gt;Daños a la propiedad ajena&lt;/li&gt;
&lt;li&gt;Estafa&lt;/li&gt;
&lt;li&gt;Violación del secreto de las telecomunicaciones&lt;/li&gt;
&lt;li&gt;Vulneración de la propiedad intelectual o industrial&lt;/li&gt;
&lt;li&gt;Calumnias e injurias&lt;/li&gt;
&lt;li&gt;Incitación al odio o a la violencia&lt;/li&gt;
&lt;li&gt;Apología de delitos&lt;/li&gt;
&lt;li&gt;Amenazas&lt;/li&gt;
&lt;li&gt;Pornografía infantil&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Curiosamente, en la jurisdicción española se están dando casos de delitos informáticos en los que el acusado de sale absuelto de cargos debido a que argumenta que él no fue el que realizó el delito, sino una persona anónima que utilizó su red inalámbrica, la cual estaba desprotegida, para realizarlo. En caso de que su red wifi hubiera estado protegida, hubiera sido díficil esta argumentación, por lo que en este caso &lt;em&gt;dejar la conexión abierta te puede meter en un lío pero al mismo tiempo es tu salvaguarda&lt;/em&gt; (&lt;a class="external text" href="http://www.bufetalmeida.com/508/protegidos-por-un-wifi-desprotegido.html" rel="nofollow"&gt;Fuente&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id="herramientas"&gt;&lt;span class="mw-headline" id="Herramientas"&gt;Herramientas&lt;/span&gt;&lt;/h2&gt;
&lt;h3 id="addons-para-firefox"&gt;&lt;span class="mw-headline" id="Addons_para_Firefox"&gt;Addons para Firefox&lt;/span&gt;&lt;/h3&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;a class="external text" href="https://addons.mozilla.org/en-US/firefox/addon/60" rel="nofollow"&gt;Web Developer&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;The Web Developer extension adds a menu and a toolbar with various web developer tools.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external text" href="https://addons.mozilla.org/en-US/firefox/addon/1843" rel="nofollow"&gt;Firebug&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Firebug integrates with Firefox to put a wealth of development tools at your fingertips while you browse. You can edit, debug, and monitor CSS, HTML, and JavaScript live in any web page…&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external text" href="https://addons.mozilla.org/en-US/firefox/addon/1290" rel="nofollow"&gt;UrlParams&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Shows you the GET and POST parameters of the current website in the sidebar…&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external text" href="https://addons.mozilla.org/en-US/firefox/addon/3899" rel="nofollow"&gt;HackBar&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Simple security audit / Penetration test tool.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external text" href="https://addons.mozilla.org/en-US/firefox/addon/5948" rel="nofollow"&gt;X-Forwarded-For Spoofer&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Spoofs the X-Forwarded-For header.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external text" href="https://addons.mozilla.org/en-US/firefox/addon/3829" rel="nofollow"&gt;Live HTTP Headers&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;View HTTP headers of a page and while…&lt;/dd&gt;
&lt;dd&gt;&lt;a class="external free" href="http://livehttpheaders.mozdev.org/" rel="nofollow"&gt;&lt;a href="http://livehttpheaders.mozdev.org/"&gt;http://livehttpheaders.mozdev.org/&lt;/a&gt;&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external text" href="https://addons.mozilla.org/en-US/firefox/addon/966" rel="nofollow"&gt;Tamper Data&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Use tamperdata to view and modify HTTP/HTTPS headers and post parameters&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external text" href="https://addons.mozilla.org/en-US/firefox/addon/6727" rel="nofollow"&gt;SQL Injection&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;SQL Injection is an Upgrade from the old form free, it is a component to transform checkboxes, radio buttons, select elements to a input text and enable disabled elements from all forms in a page.&lt;/dd&gt;
&lt;dd&gt;It makes easier to test and identify SQL injection vulnerabilities in web pages.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external text" href="https://addons.mozilla.org/en-US/firefox/addon/7597" rel="nofollow"&gt;SQL Inject Me&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;SQL Injection vulnerabilites can cause a lot of damage to a web application. A malicious user can possibly view records, delete records, drop tables or gain access to your server. SQL Inject-Me is Firefox Extension used to test for SQL Injection vulnerabilities.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external text" href="https://addons.mozilla.org/en-US/firefox/addon/7598" rel="nofollow"&gt;XSS Me&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Cross-Site Scripting (XSS) is a common flaw found in todays web applications. XSS flaws can cause serious damage to a web application. Detecting XSS vulnerabilities early in the development process will help protect a web application from unnecessary flaws. XSS-Me is the Exploit-Me tool used to test for reflected XSS vulnerabilities.&lt;/dd&gt;
&lt;dt&gt;&lt;a class="external text" href="https://addons.mozilla.org/en-US/firefox/addon/7595" rel="nofollow"&gt;Access Me&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Access vulnerabilities in an application can allow an attacker to access resources without being authenticated. Access-Me is a Firefox extension used to test for Access vulnerabilities.&lt;/dd&gt;
&lt;/dl&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Thu, 27 Jan 2005 19:00:00 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/documents/seguridad-informatica/</guid></item><item><title>An XML translation of Dan Graham’s Schema</title><link>https://mbutler.org/an-xml-translation-of-dan-grahams-schema/</link><description>Featured in the Rhizome.org Artbase View the code here Schema was originally published in issue 5+6 of Aspen magazine. It is now being archived at UbuWeb and can be viewed here. In 1966 conceptual artist Dan Graham composed a language based work entitled Schema. The artwork consisted of a formal procedure for how to describe [&amp;#8230;]</description><author>mbutler</author><pubDate>Wed, 19 Jan 2005 06:11:13 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/an-xml-translation-of-dan-grahams-schema/</guid></item><item><title>Sospechas conspiracionistas</title><link>https://danielpecos.com/2005/01/13/sospechas-conspiracionistas/</link><description>&lt;p&gt;Hoy he podido escuchar y ver en diversos medios de comunicación el anuncio de que la NASA realizaba el lanzamiento de su última misión espacial, &lt;em&gt;Deep Impact&lt;/em&gt;, que transportará una nave cuya misión será estreyarse con el cometa Tempel 1 a una velocidad de nada menos que 37.000 km/h. El aplastante suceso ocurrirá el 4 de Julio del presente año, a una distancia 431 millones de kilómetros, un poco lejos para que cierto país pueda usar la explosión como si de fuegos artificiales se tratasen para celebrar la fiesta nacional que acontece el mismo día.&lt;/p&gt;
&lt;p&gt;Según la NASA, esta misión despierta el interés científico ya que se supone que el cometa está compuesto por los materiales primigéneos que formaban el sistema solar, por lo que se desvelarían muchos secretos aún por descubrir. Si a esto le añadimos que no se sabe si el cometa quedará totalmente destruido a causa del impacto, o si únicamente se creará un &lt;em&gt;pequeño&lt;/em&gt; cráter del tamaño de un campo de fútbol y de unos 10 pisos de altura, obtenemos lo que puede ser una de las experiencias científico-espaciales más populares del año que comienza.&lt;/p&gt;
&lt;p&gt;La inquietud surge cuando uno comienza a darle vueltas a unas cuantas ideas …&lt;/p&gt;
&lt;p&gt;Una misión de este tipo debe ser, y realmente lo es, un poco cara de subvencionar, por lo que para que haya sido agraciada con tal cantidad de dinero, debe ser debidamente justificado el por qué es necesario realizar dicha inversión. Así pues, si yo fuera el inversor, y vinieran una serie de científicos a pedirme dinero para estrellar una nave contra un cometa para descubrir de qué esta compuesto, pero que cabe la posibilidad de que al chocar nos carguemos al susodicho cometa y que, por lo tanto, no se pueda realizar el estudio, pues como que tendría muy claro lo que tendría que hacer: Señores, estrellen sus vehículos contra la Casa Blanca para intentar descubrir lo que hay dentro de ella (por ejemplo).&lt;/p&gt;
&lt;p&gt;Ahora hablando en serio, huele un poco raro que se le dé tanto revuelo a una misión tan «pobre» como la Deep Impact. Además curioso nombre el asignado, referente a una película en la que un cometa se estrella contra la Tierra. Parece como si hubieran querido acallar las posibles ideas catastróficas ironizando precisamente sobre ellas. Y es que, a mi parecer, la NASA ha puesto dicho nombre a la misión, por no poner el nombre de la otra película de cometas protagonizada por Bruce Willis, &lt;em&gt;Armageddon&lt;/em&gt;, con lo que más que apaciguar a las masas, lo que haría sería cundir el pánico por la posible asociación de objetivos entre la misión y la película mencionada, es decir, el destruir o desviar un cometa en dirección hacia la Tierra.&lt;/p&gt;
&lt;p&gt;Por otro lado, me consuela (o al menos eso el lo que deseo), pensar que existen diversos laboratorios independientes de la NASA que podrían realizar los cálculos para descartar o confirmar el posible destino terrestre del cometa Tempel 1, por lo que, en caso de que nos fuera ha realizar una visita &lt;em&gt;demasiado&lt;/em&gt; cercana, supongo que se correría la voz como si de una mecha se tratase.&lt;/p&gt;
&lt;p&gt;Bueno, pues como toda buena teoría conspiracionista, no se puede ni afirmar ni desmentir que lo dicho sea así, ya que tan lógico es pensar lo uno como lo otro. Así que cada cual saque sus propias conclusiones.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Thu, 13 Jan 2005 23:46:56 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2005/01/13/sospechas-conspiracionistas/</guid></item><item><title>Auckland; Leaving Already?</title><link>https://johnj.com/posts/auckland/</link><description>&lt;div class="outline-2" id="outline-container-headline-1"&gt;
&lt;h2 id="headline-1"&gt;
Europe in Miniature
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-1"&gt;
&lt;p&gt;
09:00h&lt;/p&gt;
&lt;p&gt;
Made it back to the Midwest of the South Pacific, where the most
threatening thing is the drug dog that will point you out to Customs
if you have had any fruit (or drugs) in your backpack at any time in
the last 10,000 years.&lt;/p&gt;
&lt;p&gt;
How is it that a 12 hour transpacific flight can seem to take forever,
and yet when it's over it's hard to say what exactly happened during
those 12 hours? The memory of too-small seats and futile attempts to
sleep sitting up is imprinted more on my body, which feels like the
747 actually rolled over it, than in my mind. The in-flight film
"Collateral" made more of a mental impression (Tom Cruise blowing away
various people on the LA streets I just went jogging on
"yesterday"). But the silent view from the back of the darkened plane
of hundreds of personal LCD screens embedded in the back of every
seat, all tuned to different movies, TV shows, games, etc. was
lovely… something straight out of a contemporary art gallery. In the
21st Century, apparently, everyone gets their own in-flight media
smorgasbord.&lt;/p&gt;
&lt;p&gt;
At any rate, though I missed my flight to Christchurch, I'm on the 10
AM flight, just an hour or so away. All I hope is that I don't have to
show up at the CDC to get my Ice clothing TODAY. I'm hoping for a hot
bath and a nap at the Devon.&lt;/p&gt;
&lt;p&gt;
Everything is exactly as I remembered it so far.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-2" id="outline-container-headline-2"&gt;
&lt;h2 id="headline-2"&gt;
Leaving Already?
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-2"&gt;
&lt;p&gt;
12:43h&lt;/p&gt;
&lt;p&gt;
Arrived in Christchurch just a short while ago and I have to get my
Extreme Cold Weather Gear in 15 minutes…. may leave for McMurdo at 6
AM tomorrow; no rest for the weary….&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Tue, 11 Jan 2005 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/auckland/</guid></item><item><title>Halfway Around the World; Dragging the Soul Behind</title><link>https://johnj.com/posts/halfway-around-the-world/</link><description>&lt;div class="outline-2" id="outline-container-headline-1"&gt;
&lt;h2 id="headline-1"&gt;
Halfway Around the World
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-1"&gt;
&lt;p&gt;
09:14h&lt;/p&gt;
&lt;p&gt;
I'm still stuck in LA but feel as if I'm already halfway around the
world. Went out for a jog, just around the block, smelling forgotten,
friendly smells, but somehow got stuck in a run down neighborhood and
had to jump two fences just to get back to my hotel, which was within
line-of-sight the whole time. As everyone knows, this place is not set
up for pedestrians. All the trees here third-world-nation different
and people drive gleamingly new cars but live in shabby
apartments… I love California but even after living here for five
years it feels more like a tourist destination than Home.&lt;/p&gt;
&lt;p&gt;
I'm on the same flight to Auckland tonight so I still have 8.5 hours
to kill. Time for a nap.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-2" id="outline-container-headline-2"&gt;
&lt;h2 id="headline-2"&gt;
Dragging the Soul Behind
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-2"&gt;
&lt;p&gt;
12:13h&lt;/p&gt;
&lt;p&gt;
I'm listening to an audio book on my iPod: William Gibson's "Pattern
Recognition." The main character is in London with major jet lag. I'm
not officially too jet lagged yet but am tired from being
airport-bound until 3 AM this morning. Gibson's protagonist describes
jet lag as your soul being reeled in from whatever far away place you
came from, drifting like a kite through the troposphere, slower than
the trans-oceanic jet you came in on. I'm trying to reel in my soul
just as quick as can be, 'cause soon he'll have a long distance to
make up.&lt;/p&gt;
&lt;p&gt;
When you're tired but in your normal routine, you've still got the
glue of that routine keeping you together and productive. When you're
in a new place, with time to kill, but alert and rested, you can
happily go exploring, or, if you're a mobile tech warrior,
productively tick items off your lists of things to do. But one of the
paradoxes of killing time while on travel is that you're both uprooted
and exhausted, so you live moment to moment, in a kind of blurry fog,
not sure what to do next, and too tired to care very much.&lt;/p&gt;
&lt;p&gt;
Time to repack, head to LAX and take another stab at Aotearoa, the
Land of the Long White Cloud (New Zealand).&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Mon, 10 Jan 2005 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/halfway-around-the-world/</guid></item><item><title>Launched</title><link>https://johnj.com/posts/launched/</link><description>&lt;p&gt;
GPS: N40d00.000' W88d35.625' (but, bad signal in O'Hare)&lt;/p&gt;
&lt;p&gt;
13:01h&lt;/p&gt;
&lt;p&gt;
Well, I'm underway, waiting for my flight to LAX. Managed to get my
form stamped at customs, and found a seat near my gate with a power
outlet.&lt;/p&gt;
&lt;p&gt;
Itinerary: Chicago -&amp;gt; Los Angeles -&amp;gt; Auckland, NZ -&amp;gt; Christchurch, NZ
-&amp;gt; McMurdo Station -&amp;gt; South Pole Station. Five plane rides, something
like 30 hours in the air.&lt;/p&gt;
&lt;p&gt;
This is my fourth trip but it's been a five year wait and enough time
has gone by that I am not 100% sure what to expect. Will I get a few
days to unwind in Christchurch? Will I get to stay at my favorite
place, the Devon Private Hotel? Is Gloria still the inkeeper, will I
get to eat her tasty if fattening breakfasts? Will I get to go jogging
along the tiny river Avon?&lt;/p&gt;
&lt;p&gt;
Is the Clothing Distribution Center (CDC) still the same? Is all the
gear they give you the same? Will I have room to stretch out on my
flight to the ice? Will I get to see the view from the cockpit?&lt;/p&gt;
&lt;p&gt;
I'm hoping to have a few days to walk around in McMurdo and take
pictures. McMurdo and the South Pole are very different, but both are
dead ringers for sets for the game Traveller, a game I played when I
was a rather younger man, a sci-fi role-playing game where you travel
from one world to another and have adventures in dusty, desolate and
desperate places.&lt;/p&gt;
&lt;div class="src src-text"&gt;
&lt;div class="highlight"&gt;&lt;pre class="chroma" tabindex="0"&gt;&lt;code class="language-text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;             McMurdo vs Pole
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;             -------    ----
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    Dirt, rock &amp;amp; Ice    Ice
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;           Sea Level    10,000 ft
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Skuas, orcas, seals,    People
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; penguins and people
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Pop.: a few thousand    Pop.: a few hundred (summer)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;       24/7 internet    ~8hrs/day internet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  Get money from ATM    Can cash checks
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;"Chapel of the snows"   Meditate on makeshift zafu
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    Shared bunkrooms    Private, closet sized room in
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;                        wood+canvas "Jamesway" building
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      Summer weather    Summer weather like a
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;         like a nice    really, really bad winter
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;       winter day in    day in Minneapolis
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;             Chicago
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;     Short stroll to    Half-mile walk across skiway
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  Crary Lab to check    to Dark Sector to work on
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;              e-mail    experiment
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Jog up "Observation    Run on treadmill, lift weights,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  Hill" to catch the    bake in sauna.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;                view
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;   4 cafeteria-style    4 home-cooked, delicious
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  meals/day in huge,    meals/day in cozy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;multi-room meal hall    galley
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;   2 minute showers,    2 minute showers,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;         twice/week.    twice/week.  :-(&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-2" id="outline-container-headline-1"&gt;
&lt;h2 id="headline-1"&gt;
Stymied, Just Out of the Gate
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-1"&gt;
&lt;p&gt;
19:14h&lt;/p&gt;
&lt;p&gt;
Thanks to a broken de-icer (actually a faulty computer circuit board)
we are still at our gate in Chicago, so I may get stuck overnight in
LA.&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Why am I doing this?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
When I describe trips to the South Pole, people tend to split into two
camps: those who think it's very cool and would love to go, and those
who think it's utterly crazy and wouldn't dream of doing such a thing.&lt;/p&gt;
&lt;p&gt;
There are some good reasons (and maybe a few not-so-good reasons) for
doing a high energy neutrino astrophysics neutrino experiment at the
South Pole. Rather than go into the why's and how's of the project, I
will refer you for the moment to the IceCube Web Site.&lt;/p&gt;
&lt;p&gt;
But as to me personally, there are several reasons why &lt;strong&gt;I&lt;/strong&gt; wanted to
make this fourth trip. Professionally, I have worked on IceCube and
it's predecessor AMANDA for over 13 years. This is the first season
when IceCube will put sensors ("DOMs") in the ice. It is a crucial
season for this reason and I want to do whatever I can to help ensure
the successful deployment and operation of the instrument. My work on
IceCube in the last two years has been to write the software for
communicating with the DOMs in the ice, and I hope to help debug any
problems that may arise in the communications. I also wrote some of
the software that runs inside the DOMs themselves, so it will be good
to be "on hand" when we shake out the DOMs deployed in their proper
environment (a few kilometers below the surface of the ice). Also to
help with the actual deployments if need be, helping with other parts
of the software, or troublshooting anything that comes up.&lt;/p&gt;
&lt;p&gt;
Personally, I get to indulge my thirst for barren, strange places (a
taste acquired, no doubt in part, on my previous trips to the
Pole…. I love the idea of doing systems software for other projects
in similarly remote places – the ocean floor, the desert, down in a
mine, or in deep space). And after painting seriously for several
years in the Bay Area I have been pretty caught up in photography in
the last year or two, and I hope to take advantage of the trip to
capture some of the otherworldly imagery which abounds in
Antarctica. On previous trips I fantasized about taking pictures with
a medium or large format camera to show the kind of vivid texture and
detail that make the otherwise very minimal ice-scapes so compelling
when seen in person. So I have brought my Dad's old Horseman 6x7
camera and a '50s era Russian folding camera along to try to capture
some of this detail, along with a Canon 20D digital camera for the
flexibility to shoot absolutely any number of pictures of absolutely
anything that catches my eye. I have no idea if any of this will be at
all successful, but it's worth a try.&lt;/p&gt;
&lt;p&gt;
Finally, it's another chance to re-connect with colleagues (since I
telecommute from Chicago most of the time I feel like "the ghost in
the machine" too often) and hopefully get back into shape after the
long holiday season (in past trips South, exercise has kept me sane
and happy).&lt;/p&gt;
&lt;p&gt;
Best wishes to all, Happy Birthday to Pete, and thanks again to
Gregory for the GPS receiver.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-2" id="outline-container-headline-2"&gt;
&lt;h2 id="headline-2"&gt;
Camping Out in LA
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-2"&gt;
&lt;p&gt;
19:19h&lt;/p&gt;
&lt;p&gt;
Ugh. Finally airborne after about 7 hours on the plane parked at the
gate. They finally switched us to another plane. Fortunately I get to
rest in a hotel at LAX before doing it all again tomorrow
night. Blech. Next time I'm taking a cruise ship to the ice.&lt;/p&gt;
&lt;p&gt;
Anyways, I hear folks are very backed up in Christchurch as it is
because of bad weather on the ice, so maybe it's just as well if I get
delayed a day or so going into New Zealand.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Sun, 09 Jan 2005 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/launched/</guid></item><item><title>Getting Ready (t minus 2 days)</title><link>https://johnj.com/posts/getting-ready/</link><description>&lt;p&gt;
Last latched GPS: N41d59.099' W87d39.934'&lt;/p&gt;
&lt;p&gt;
T minus 2 days. Biggest snow storm in 2 years getting me warmed up for
the Pole. I've gone out each morning for the past few days on "trial
runs" with Dad's old Horseman camera and tripod. Yesterday, by the
time I got to Lake Michigan, the shutter cock had frozen (not a good
sign) and I only got half a roll. But the film grain looks very fine
(APX-100) and today the shutter worked ok.&lt;/p&gt;
&lt;p&gt;
On the beach everything was pure white except the lake itself (still a
stormy dark grey), two men out exercising their dogs, and a snowbreak
fence winding along the beach. I got some good photos of that and
finished up my roll. After that I decided to get up close to the water
and noticed many shapes bobbing up and down in the water. At first I
thought it was some sort of clot of weeds, but then my head flashed
grimly to the image of tsunami victims washing up.&lt;/p&gt;
&lt;p&gt;
What it actually turned out to be was quite beautiful and mysterious
– thousands of basketball-sized, weed-covered snowballs (iceballs?)
washed up on the water's edge. One of the dogs attacked them one after
another and pulverised them for fun. It was an amazing thing to see
and got me in the mood for the trip. After a few weeks at the Pole,
even a few weeds on snowballs are going to seem pretty darn organic.&lt;/p&gt;
&lt;p&gt;
Meanwhile, so much to do…&lt;/p&gt;</description><author>John Jacobsen</author><pubDate>Fri, 07 Jan 2005 02:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/posts/getting-ready/</guid></item><item><title>Fin de Año en Benidorm</title><link>https://danielpecos.com/2005/01/04/fin-de-ano-en-benidorm/</link><description>&lt;p&gt;¡Feliz año 2005 a todo el mundo!&lt;/p&gt;
&lt;p&gt;Hoy mismo he llegado de pasar este mini-puente de fin de año en Benidorm con los colegas de Benicassim. La verdad es que no ha estado nada mal el fin de semana, a pesar de haber trabajado hasta instantes antes de coger el coche, aunque hubiera sido mejor ir un poco más descansado y salir un poco más tarde el Domingo, ya que tuvimos que dejar las habitaciones sobre las 10 de la mañana, por lo que el Sábado tuve que acostarme no muy tarde para poder conducir en condiciones a la mañana siguiente (mejor no arriesgar con el coche).&lt;/p&gt;
&lt;p&gt;En total éramos 8 personas: Rafa, César, Alejandro, Julen, Natalia, Noelia, Carlos (que vino un día más tarde y se fue uno antes con Noelia) y yo, repartidos en dos habitaciones de 4 (Rafa, César, Alejandro y Carlos en una y Julen, Natalia, Noelia y yo en la otra). La verdad es que el hotel estaba muy bien para el precio que nos dieron, ya que el viaje al final me ha salido por unos 90 € aproximadamente, incluidos estancia, entrada a las discotecas Penélope, KM y Hacienda (antes Pachá), comida y gasolina. Muy bien de precio, sin lugar a dudas.&lt;/p&gt;
&lt;p&gt;En cuanto al ambiente, sencillamente genial. Sólo vi una ambulancia en toda la noche y no se vio ninguna bronca en ninguna de las discotecas, cosa realmente extraña. La gente por lo general te felicitaba el año, aunque probablemente fuera por lo pedo que iban.&lt;/p&gt;
&lt;p&gt;En cuanto a las tías, pues para variar, poca cosa, aunque tampoco estuvo mal del todo. Pero, eso sí, cachondeo mogollón.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Tue, 04 Jan 2005 23:33:20 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2005/01/04/fin-de-ano-en-benidorm/</guid></item><item><title>Why 'greener' computing is coming soon to Europe, part 2</title><link>https://stop.zona-m.net/2004/12/why-greener-computing-is-coming-soon-to-europe-part-2/</link><description>&lt;p&gt;&lt;em&gt;(historical note: this is the second part (the first is &lt;a href="https://stop.zona-m.net/2004/12/why-greener-computing-is-coming-soon-to-europe/"&gt;here&lt;/a&gt;) of an article I wrote for IT Manager&amp;rsquo;s Journal, which published it at the URL &lt;code&gt;http://management.itmanagersjournal.com/management/04/12/07/2312226.shtml?tid=84&lt;/code&gt; on December 14, 2004. When I rediscovered the original text on my hard drive,  on December 29, 2013, I put it back here with the original date as reference, since that whole website was closed years ago)&lt;/em&gt;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Tue, 14 Dec 2004 07:57:18 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2004/12/why-greener-computing-is-coming-soon-to-europe-part-2/</guid></item><item><title>Firefox Burning</title><link>https://cmdev.com/blog/firefoxburning/</link><description>Building Firefox to learn how large software is developed and shipped.</description><author>The Cranky Developer on Crater Moon Development</author><pubDate>Sat, 13 Nov 2004 02:00:00 GMT</pubDate><guid isPermaLink="true">https://cmdev.com/blog/firefoxburning/</guid></item><item><title>Old Macs never die</title><link>https://jasoneckert.github.io/myblog/old-macs-never-die/</link><description>&lt;p&gt;&lt;img alt="Ontario Science Centre" src="osc.png#center" title="Ontario Science Centre" /&gt;&lt;/p&gt;
&lt;p&gt;We just came back from the Ontario Science Centre today. While my daughter checked out the educational exhibits (obviously learning important information), I was more impressed by the fact that some exhibits that haven&amp;rsquo;t changed for several years are still powered by Mac Classics! And to boot, the exhibits were still pretty damn good with those old computers.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Wed, 18 Aug 2004 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/myblog/old-macs-never-die/</guid></item><item><title>Inicio astrofotográfico</title><link>https://danielpecos.com/2004/06/09/inicio-astrofotografico/</link><description>&lt;p&gt;Ya llevaba tiempo tratando de empezar con la astrofotografía con webcam, pero entre unas cosas y otras siempre lo dejaba para otro momento. Al final el pasado día 6 de Junio me decidí a intentarlo.&lt;/p&gt;
&lt;center&gt;
  &lt;br /&gt; &lt;img alt="" src="https://danielpecos.com/assets/2004/06/06-Jun-2004.jpg" /&gt;
&lt;/center&gt;
&lt;p&gt;Tras unos cuantos intentos por usar un adaptado hecho con la funda de un carrete de fotos, acabé sujetando la webcam al portaocular con una simple goma que me dieron mis abuelos la última vez que estuve en Madrid (¡hay que ver lo que a uno le puede hacer falta en algunos momentos!), lo cual, aunque no es una forma muy ortodoxa, dio buenos resultados, como se puede ver en la foto anterior.&lt;/p&gt;
&lt;p&gt;Entre Alfredo y yo hicimos unas cuantas tomas de Jupiter con sus lunas (por primera vez pude apreciar las bandas de este planeta), así como otras cuantas de la Luna, pero dado a mi alto nivel de novatez, no caí en la cuenta de que cada vez que grababa un vídeo, estaba borrando el anterior, ya que se usaba el mismo archivo. Aún así conseguimos una foto de la que me siento muy orgulloso, ya que fue la foto que me inició formalmente en el mundo de la astrofotografía con webcam.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Wed, 09 Jun 2004 11:16:26 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2004/06/09/inicio-astrofotografico/</guid></item><item><title>Impulse Window™</title><link>https://mbutler.org/impulse-window/</link><description>In 2004, I had the distinct privilege of being an unpaid Interaction Designer and Programmer for an ambitious Iowa City tech startup hoping to make waves in the then-emerging world of touchscreens. The technology was crude, unreliable, and already a dead-end, but the founders had a patent, some trademarks, and just enough confidence to convince [&amp;#8230;]</description><author>mbutler</author><pubDate>Mon, 07 Jun 2004 21:33:45 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/impulse-window/</guid></item><item><title>Mono: ¡Hola Mundo!</title><link>https://danielpecos.com/2004/03/29/mono-hola-mundo/</link><description>&lt;p&gt;Para retomar de nuevo la marcha del blog, he decidido comenzar mostrando algunos ejemplos de programación en C#. Por el momento os dejo el obligatorio programa para todo aquel que empieza con algún lenguaje.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hola Mundo!&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;using System;

namespace HolaMundo {

   public class HolaMundo {
      public static void Main (string [] args) {
         Console.WriteLine ("Hola Mundo!");
      }
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sencillo, ¿verdad? Tiene mucha semejanza con Java, exceptuando que las palabras reservadas difieren y que Java no posee el concepto de &lt;em&gt;espacios con nombre&lt;/em&gt; o &lt;em&gt;NameSpaces&lt;/em&gt;, entre otras.&lt;/p&gt;
&lt;p&gt;Bueno, prometo que el próximo ejemplo será más interesante que éste.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Mon, 29 Mar 2004 15:07:46 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2004/03/29/mono-hola-mundo/</guid></item><item><title>Privacy Policy</title><link>https://web.navan.dev/misc/generic-privacy-policy.html</link><description/><author>Navan's Archive</author><pubDate>Sun, 21 Dec 2003 02:00:00 GMT</pubDate><guid isPermaLink="true">https://web.navan.dev/misc/generic-privacy-policy.html</guid></item><item><title>Quotes</title><link>https://web.navan.dev/misc/quotes.html</link><description/><author>Navan's Archive</author><pubDate>Sun, 21 Dec 2003 02:00:00 GMT</pubDate><guid isPermaLink="true">https://web.navan.dev/misc/quotes.html</guid></item><item><title>Domain Name Server</title><link>https://danielpecos.com/documents/domain-name-server/</link><description>&lt;h2 id="introducción"&gt;INTRODUCCIÓN&lt;/h2&gt;
&lt;p&gt;En este documento se realiza una breve explicación sobre los conceptos básicos del DNS, poniendo como ejemplo una configuración sencilla del servidor de nombres GNU bind.&lt;/p&gt;
&lt;h2 id="conceptos-básicos"&gt;CONCEPTOS BÁSICOS&lt;/h2&gt;
&lt;h3 id="qué-es-un-dns"&gt;¿Qué es un DNS?&lt;/h3&gt;
&lt;p&gt;El Domain Name Server consiste en un sistema de traducción de nombres o dominios a direcciones IP y viceversa. Podría verse como una gigantesca base de datos distribuida por todo Internet, estructurada de forma jerárquica por medio de un árbol, el cual suele ser denominado como espacio de nombres.&lt;/p&gt;
&lt;p&gt;Los dominios se clasifican en función de su nivel o profundidad dentro del árbol de la jerarquía DNS. De este modo existen dominios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Primer nivel, gestionados, bien por organizaciones específicas para ello, bien por organizaciones gubernamentales.&lt;/li&gt;
&lt;li&gt;Segundo nivel, gestionados por entes particulares.&lt;/li&gt;
&lt;li&gt;Tercer nivel.&lt;/li&gt;
&lt;li&gt;Etcétera.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Además se puede considerar un dominio de nivel 0 o raíz, del que cuelgan el resto de dominios de primer nivel (ver figura). Dicho dominio recibe el nombre de «.».&lt;/p&gt;
&lt;img alt="Jerarquía de servidores de nombre" class="aligncenter size-full" height="206" src="https://danielpecos.com/assets/2016/10/jerarquia.png" width="607" /&gt;
&lt;p&gt;Los dominios de primer nivel que se crearon cuando se diseñó el DNS, y que siguen siendo los de mayor importancia en Internet son:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Dominio&lt;/th&gt;
          &lt;th&gt;Descripción&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;edu&lt;/td&gt;
          &lt;td&gt;Instituciones educativas.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;com&lt;/td&gt;
          &lt;td&gt;Organizaciones comerciales.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;org&lt;/td&gt;
          &lt;td&gt;Organizaciones no comerciales.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;net&lt;/td&gt;
          &lt;td&gt;Pasarelas y otras redes administrativas.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;gov&lt;/td&gt;
          &lt;td&gt;Gobierno norteamericano.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;mil&lt;/td&gt;
          &lt;td&gt;Ejército norteamericano.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;uucp&lt;/td&gt;
          &lt;td&gt;Redes UUCP.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Así, los dominios que cuelguen de algunos de estos dominios de primer nivel, deberán estar destinados a las actividades a las que se destinan su dominio padre. Ésto no es cierto para los dominios .com, .org, .net, ya que hoy en día cualquiera puede adquirir un dominio que deriven de algunos de éstos, sin tener que demostrar que va a estar destinado a ninguna tarea en especial.&lt;/p&gt;
&lt;p&gt;Además de los dominios de primer nivel ya comentados, existen dominios propios a cada país, que corresponden a las siglas con las que se denomina a cada uno de los países según la nomeclatura seguida por la ONU. Dichos dominios son gestionados según la política que cada país crea conveniente.&lt;/p&gt;
&lt;h3 id="delegación"&gt;Delegación&lt;/h3&gt;
&lt;p&gt;Hemos comentado que los dominios de primer nivel destinados a los países son gestionados por estos a su voluntad. Ésto es posible porque éstos dominios están delegados en administradores propios al país, de forma que son éstos los que los gestionan. Dicha delegación de autoridad sobre un dominio se puede realizar a cualquier nivel del espacio de nombres, de manera que si se dispone un dominio de segundo nivel para una empresa, se podrían crear dominios de niveles inferiores según la estructura organizativa de la empresa, por poner un ejemplo.&lt;/p&gt;
&lt;p&gt;Más concretamente, la delegación consiste en la cesión del control de una zona del espacio de nombre a otro servidor DNS. Una zona es una porción del espacio de nombres, de forma que se posee autoridad desde el nodo raíz de dicha zona dentro del árbol jerárquico, pudiendo crear o eliminar nuevos subdominios a partir del nivel en el que se encuentre dicho nodo raíz.&lt;/p&gt;
&lt;p&gt;La diferencia entre dominio y zona suele ser confusa en un principio. Se trata de dos conceptos relacionados en diferentes capas: dominio es un concepto del espacio de nombres, mientras que zona es la forma en la que se distribuye la autoridad sobre un determinado dominio. Así pues, un dominio contiene todas las máquinas que están dentro de dicho dominio, incluidos subdominios, mientras que una zona incluye solo las máquinas del dominio que cuelgan del subdominio sobre el que se posee la autoridad. Podría decirse que las zonas es la forma en la que se distribuye el control sobre el espacio de nombres, y, por lo tanto, que son una causa directa de la delegación de autoridad sobre el espacio de nombre.&lt;/p&gt;
&lt;img alt="División en zonas del espacio de nombres" class="aligncenter size-full" height="252" src="https://danielpecos.com/assets/2016/10/DivisiC3B3n-en-zonas-del-espacio-de-nombres.png" width="575" /&gt;
&lt;h3 id="resolución-directa-y-resolución-inversa"&gt;Resolución directa y resolución inversa&lt;/h3&gt;
&lt;p&gt;Existen dos tipos de preguntas a las que responde un DNS: la resolución directa, que consiste en contestar la IP o IP’s que corresponden a un determinado nombre de dominio, y la resolución inversa, que consiste en, dada una IP de Internet, qué nombre se le asocia. En el apartado de «Configuración de Bind» se verán algunos ejemplos y se explicará un poco más sobre esto conceptos.&lt;/p&gt;
&lt;h3 id="propagación-entre-servidores"&gt;Propagación entre servidores&lt;/h3&gt;
&lt;p&gt;El proceso de propagación en el DNS consiste en la difusión de los cambios producidos en dominios de los que se tiene autoridad. Este proceso suele tardar entre 28 y 72 horas (tiempo de latencia), aunque en teoría los cambios deberían ser visibles inmediatamente después de haberlos realizado. Este retraso se debe en la mayor parte a las caché que suelen usar los DNS.&lt;/p&gt;
&lt;p&gt;Existen dos tipos de configuraciones para los servidores DNS: recursivos y no recursivos. Dependiendo de si el servidor intenta o no devolver el resultado exacto de la petición recibida, éste será recursivo o no recursivo, respectivamente. Cuando un servidor no es recursivo, lo que hace es devolvernos la dirección del servidor DNS que posee autoridad sobre el siguiente dominio de la petición que le hemos realizado, de forma que cada vez estamos más próximos al servidor autoritativo. Por tanto, el proceso de resolución de nombres con servidores no recursivos es un proceso iterativo y en el que el cliente participa activamente. Por contra, en el caso de usar servidores recursivos el proceso, desde el punto de vista del cliente, es lineal y con una actuación pasiva. Normalmente no suelen configurarse servidores exclusivamente no recursivos (a excepción de los servidores raíz y de muy alto nivel en el espacio de nombres), sino que suelen actuar como recursivos para un determinado conjunto de nodos y como no recursivos para el resto.&lt;/p&gt;
&lt;p&gt;Normalmente los servidores recursivos incorporan una tabla caché, de forma que si se les vuelve a preguntar por un dominio del cual han averiguado su IP y el TTL o Tiempo de Vida de la respuesta no ha vencido, no vuelven a realizar la búsqueda, sino que devuelven el resultado anterior. Cuando la resolución se lleva a cabo de esta forma, el servidor DNS que la realiza indica en la respuesta que no es autoritativa. Una respuesta se considera que es autoritativa cuando proviene del servidor que posee autoridad sobre el dominio en cuestión, siendo no autoritativa para el resto de casos.&lt;/p&gt;
&lt;p&gt;Así pues, el problema de que la propagación entre servidores DNS tenga una latencia tan grande se debe a que debemos esperar a que el tiempo de vida de la entrada en caché del dominio venza en todos los servidores, de forma que llegará un momento en que será necesario volver a realizar la consulta al servidor que posee autoridad, de forma que éste nos responderá con la respuesta correcta, la cual, de nuevo será introducida en la tabla caché de los distintos servidores. El tiempo de expiración de la caché depende de las implementaciones del software DNS y de su configuración, aunque por lo normal se suele respetar el tiempo de vida indicado por la respuesta DNS del servidor.&lt;/p&gt;
&lt;h2 id="configuración-bind"&gt;CONFIGURACIÓN BIND&lt;/h2&gt;
&lt;p&gt;A continuación se comentará la configuración básica de un servidor de DNS. En concreto usaremos el software Berkeley Internet Name Domain o bind en su versión 8.4.1.0, ya que es uno de los servidores de DNS que goza de mayor difusión en Internet.&lt;/p&gt;
&lt;p&gt;Para el ejemplo, supondremos la posesión del dominio compumas.com, para el cual se deberán añadir diferentes zonas para las distintas secciones de la empresa, algunas de las cuales estarán administradas por computadores propios a dichas secciones. Se deberán incluir nombres para los servidores de correo, web y ftp que posee la empresa. Se configurarán un servidor maestro y un esclavo.&lt;/p&gt;
&lt;p&gt;La diferencia básica entre un servidor maestro y un servidor esclavo, es cuál de los dos recibe las modificaciones introducidas en las configuraciones de los dominios. Ésto es así porque el servidor configurado como esclavo realiza un polling sobre el servidor maestro para mantener sincronizadas las configuraciones de ambos. Dicha diferenciación no se realiza desde el punto de vista del DNS, puesto que ambos pueden realizar respuestas autoritativas a una petición, sino que se realiza a nivel de configuración del software. El propósito de esto es el balanceo de carga entre los diferentes servidores definidos para un dominio.&lt;/p&gt;
&lt;p&gt;A continuación se da una configuración básica del servidor de nombres primario o maestro:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;/etc/named.conf&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="lang:default decode:true"&gt;options {
        directory “/var/lib/named”;
        allow recursion {
                    // direcciones de redes y/o ordenadores para las
                        // que se actuará como DNS recursivo
                    183.165.75.0/24;
                    183.165.72.8/32;
                };

        allow transfer {
                    // dirección del servidor esclavo
                    150.165.43.176;
                };

        forward first;
        forwarders  {
                    232.154.178.35;
                    157.246.33.2;
                };
    };

// zona en la que se incluyen los servidores raíz (no debería ser modificado)
zone “.” {
    type hint;
    file “root.hint”;
    };

// zona para nuestro dominio (configurado como maestro)
zone “compumas.com” {
    type master;
    // fichero de configuración de subdominios
    file “zone/compumas.com”;
    };

// zona de resolución inversa
zone “75.165.183.in-addr.arpa” {
    type master;
        file “zone/183.165.75”;
    };&lt;/pre&gt;
&lt;p&gt;De esta forma, el servidor actúa como recursivo para una red y para una IP determinadas. Se permitirá el actuar como esclavo de este servidor a la IP configurada en el campo allow transfer. También podemos observar que las peticiones sobre las que no se tenga autoridad serán reenviadas (forward) a  otros servidores DNS, que generalmente son los de tú ISP.&lt;/p&gt;
&lt;p&gt;El fichero de configuración del dominio es el siguiente. En él se especifican el número de serie, tiempo de refresco, de reintento, de vencimiento y el mínimo TTL, así como la serie de subdominios que se hayan configurado.&lt;/p&gt;
&lt;p align="justify"&gt;
  &lt;b&gt;/var/lib/named/zone/compumas.com&lt;/b&gt;
&lt;/p&gt;
&lt;pre class="lang:default decode:true"&gt;$TTL 1m
@   IN  SOA ns.compumas.com. hostmaster.compumas.com. (
                2003120101;     serial
                8H;     refresh
                2H;     retry
                4W;     expire
                1D;     minimum
            );
    IN  NS  ns              ; Dirección IP del servidor
    IN  MX  10 mail         ; Servidor de mail principal
    IN  MX  20 mail.compumenos.com. ; Servidor de mail de respaldo

ns  IN  A   127.0.0.1
mail    IN  A   183.165.75.7
www IN  A   183.165.75.8
web CNAME   www // web es un alias para www
ftp IN  A   183.165.75.9

cs      IN  A   167.154.8.2
vila.cs IN  A   167.154.8.4
val     IN  NS  dns.val
dns.val IN  A   88.76.43.58
ali     IN  A   25.43.67.3&lt;/pre&gt;
&lt;p&gt;Hemos definido cuatro subdominios para este dominio (ns, mail, www, ftp), y se han configurado dos servidores de correo, uno principal y otro de respaldo, de forma que el de respaldo no está bajo las mismas instalaciones que el primario, reduciendo drásticamente las posibilidades de que los dos servidores caigan durante un mismo espacio de tiempo.&lt;/p&gt;
&lt;p&gt;En esta configuración también se han incluido los parámetros necesarios para representar una jerarquía semejante a la indicada en el gráfico del apartado anterior. Se puede observar que el dominio val.compumas.com ha sido delegado completamente excepto dns.val.compumas.com, ya que es necesario conocerlo para poder realizar la delegación.&lt;/p&gt;
&lt;p&gt;De esta forma cedemos la gestión total del dominio val.compumas.com a otro servidor DNS, de manera que dicho servidor tendrá un fichero val.compumas.com que podría ser semejante al siguiente:&lt;/p&gt;
&lt;pre class="lang:default decode:true"&gt;$TTL 1m

@   IN  SOA dns.val.compumas.com. hostmaster.compumas.com. (
                2003120101;     serial
                8H;     refresh
                2H;     retry
                4W;     expire
                1D;     minimum
            );
    IN  NS  dns             ; Dirección IP del servidor
    IN  MX  10 mail         ; Servidor de mail principal
    IN  MX  20 mail.compumenos.com. ; Servidor de mail de respaldo

dns IN  A   88.76.43.58
mail    IN  A   88.76.43.100
www IN  A   88.76.43.27&lt;/pre&gt;
&lt;p&gt;El fichero de configuración para la zona de resolución inversa es el que sigue. En él se definen los mismos parámetros que en el fichero anterior, salvo que en este caso no se configuran subdominios, sino que se asignan nombres a las IP de las que se tiene autoridad (ya que de no tenerla, la configuración no tendrá efecto alguno en Internet).&lt;/p&gt;
&lt;p align="justify"&gt;
  &lt;b&gt;/var/lib/named/zone/183.165.75&lt;/b&gt;
&lt;/p&gt;
&lt;pre class="lang:default decode:true"&gt;$TTL 1m

@   IN  SOA ns.compumas.com. hostmaster.compumas.com. (
                2003120101;     serial
                8H;     refresh
                2H;     retry
                4W;     expire
                1D;     minimum
            );
    IN  NS  ns              ; Dirección IP del servidor
    IN  MX  10 mail         ; Servidor de mail principal
    IN  MX  20 mail.compumenos.com. ; Servidor de mail de respaldo

6   PTR ns.compumas.com.
7   PTR mail.compumas.com.
8   PTR www.compumas.com.
9   PTR ftp.compumas.com.&lt;/pre&gt;
&lt;p&gt;Una vez configurado el servidor maestro, solo queda configurar el servidor esclavo. Dicha configuración será semejante a la del maestro, salvo por el detalle de que este servidor no poseerá más información sobre dominios configurados como esclavo que la que el servidor maestro le comunique.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;/etc/named.conf&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="lang:default decode:true"&gt;options {
        directory “/var/lib/named”;
        allow recursion {
                    // direcciones de redes y/o ordenadores para las
                        // que se actuará como DNS recursivo
                    183.165.75.0/24;
                    183.165.72.8/32;
                };

        allow transfer {
                    // dirección del servidor esclavo
                    150.165.43.176;
                };

        forward first;
        forwarders  {
                    232.154.178.35;
                    157.246.33.2;
                };
    };

// zona en la que se incluyen los servidores raíz (no debería ser modificado)
zone “.” {
    type hint;
    file “root.hint”;
    };

// zona para nuestro dominio (configurado como esclavo)
zone “compumas.com” {
    type slave;
    // fichero de configuración de subdominios (será copiado del maestro)
    file “zone/compumas.com”;
    masters { 183.165.75.6; };
    };

// zona de resolución inversa
zone “75.165.183.in-addr.arpa” {
    type master;
        file “zone/183.165.75”;
    };&lt;/pre&gt;
&lt;p&gt;Como se puede observar, esta configuración es muy semejante a la del servidos maestro, con las únicas diferencias de que la zona “compumas.com” se ha declarado como servidor esclavo (definiendo, por tanto, cuál es el servidor maestro).  La zona de resolución inversa la hemos mantenido como servidor maestro, debido a lo sencillo y bastante estático de su configuración.&lt;/p&gt;
&lt;p&gt;De esta forma, el servidor consultará al servidor maestro por si ha habido modificaciones según los parámetros establecidos en el campo SOA. En caso de que haya habido, el servidor copiará el fichero de configuración del dominio, repitiendo el proceso descrito indefinidamente.&lt;/p&gt;
&lt;h2 id="bibliografía"&gt;BIBLIOGRAFÍA&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;DNS and Bind&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;
  Autores: Paul Albitz &amp; Cricket Liu
&lt;/p&gt;
&lt;p align="justify"&gt;
  Editorial: O&amp;#8217;Reilly
&lt;/p&gt;
&lt;p align="justify"&gt;
  &lt;b&gt;Guía de Administración de Redes con Linux&lt;/b&gt;
&lt;/p&gt;
&lt;p align="justify"&gt;
  Autores: Olaf Kirch &amp; Terry Dawson
&lt;/p&gt;
&lt;p align="justify"&gt;
  WEB: &lt;a class="western" href="http://lucas.hispalinux.es/"&gt;http://lucas.hispalinux.es&lt;/a&gt;
&lt;/p&gt;
&lt;p align="justify"&gt;
  &lt;b&gt;DNS-HOWTO&lt;/b&gt;
&lt;/p&gt;
&lt;p align="justify"&gt;
  Autor: Nicolai Langfeldt
&lt;/p&gt;
&lt;p align="justify"&gt;
  WEB: &lt;a class="western" href="http://tldp.org/"&gt;http://tldp.org&lt;/a&gt;
&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Mon, 01 Dec 2003 20:30:27 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/documents/domain-name-server/</guid></item><item><title>Cem Kaner at PNSQC 2003</title><link>https://cmdev.com/blog/2003-11-02-cemkaner/</link><description>My notes and impressions from a talk Cem Kaner gave at the 2003 Pacific Northwest Software Quality Conference in Portland, Oregon. The title of his talk was &amp;ldquo;How Many Lightbulbs Does It Take To Change A Tester?&amp;rdquo;</description><author>The Cranky Developer on Crater Moon Development</author><pubDate>Sun, 02 Nov 2003 02:00:00 GMT</pubDate><guid isPermaLink="true">https://cmdev.com/blog/2003-11-02-cemkaner/</guid></item><item><title>Code Janitor</title><link>https://cmdev.com/blog/code-janitor/</link><description>Programming is 80% maintenance</description><author>The Cranky Developer on Crater Moon Development</author><pubDate>Wed, 29 Oct 2003 02:00:00 GMT</pubDate><guid isPermaLink="true">https://cmdev.com/blog/code-janitor/</guid></item><item><title>Aconitum aquarius [PDF, 233 kB]</title><link>https://www.davidschlachter.com/writings/aquarius.pdf</link><description>Science project: invent an imaginary animal.</description><author>David Schlachter</author><pubDate>Thu, 02 Oct 2003 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/writings/aquarius.pdf</guid></item><item><title>dATAPLOT</title><link>https://mbutler.org/dataplot/</link><description>dATAPLOT art show at St. Xavier University Gallery, curated by Nathan Peck. September 2003 update: 20 year retrospective exhibit at the Beverley Art Center, Chicago</description><author>mbutler</author><pubDate>Thu, 18 Sep 2003 19:58:23 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/dataplot/</guid></item><item><title>Funcionamiento de .NET</title><link>https://danielpecos.com/2003/08/08/funcionamiento-de-net/</link><description>&lt;p&gt;En los artículos anteriores hemos hablado de conceptos como CTS, CLI (CLS), IL o JIT, los cuales pueden resultar bastante confusos. A continuación daremos una aclaración del significado de cada uno de ellos, y explicaremos su función dentro de la plataforma .NET, para lo cual se hará una explicación más a fondo de su funcionamiento.&lt;/p&gt;
&lt;p&gt;Hemos comentado en artículos anteriores que cuando compilas un código fuente a un binario de .NET, éste binario no contiene código máquina de la arquitectura en la que se compiló, sino que se genera un código para una máquina virtual, al estilo del bytecode de Java.&lt;/p&gt;
&lt;p&gt;Además se comentó que era posible utilizar un objeto escrito en un lenguaje .NET desde otro lenguaje .NET. La explicación a ésto es un poco más compleja: cuando tú compilas un código, se genera un &lt;strong&gt;Assembly&lt;/strong&gt; o &lt;em&gt;ensamblaje&lt;/em&gt;, que es la unidad mínima de compilación en .NET (que además es autosuficiente y autodescriptiva), el cual puede contenerse en un fihcero .exe o .dll, dependiendo del tipo de código que contenga y de la función a realizar. Dicho assembly está formado por un código que entenderá la máquina virtual, llamado &lt;strong&gt;IL&lt;/strong&gt; o &lt;strong&gt;Interpreted Language&lt;/strong&gt;, y es lo que denominaremos &lt;strong&gt;CLI&lt;/strong&gt; o &lt;strong&gt;Common Language Interface&lt;/strong&gt;, que, junto con el uso exclusivo de los tipos definidos en el &lt;strong&gt;CTS&lt;/strong&gt; o &lt;strong&gt;Common Type System&lt;/strong&gt;, permitirán que cualquier compilador .NET pueda entender dicho assembly al generar otros programas o librerías.&lt;/p&gt;
&lt;p&gt;Hasta este momento hemos conseguido unificar el lenguaje pseudo-ensamblador que usarán los compiladores .NET, de forma que será posible la interacción entre distintos lenguajes. Pero, ¿cómo se resuelve el problema de que distintas arquitecturas y sistemas operativos puedan ejecutar un mismo código máquina?. Pues la respuesta es parecida a la que da Java. Java implementa una máquina virtual que interpreta el bytecode. .NET hace una precompilación del IL para proceder a su ejecución. A esta técnica se le denomina &lt;strong&gt;JIT Compilation&lt;/strong&gt; o &lt;strong&gt;Just In Time Compilation&lt;/strong&gt;. ¿Ventajas? Pues como la compilación resulta que se reduce practicamente una traducción entre lenguajes máquina, ésta requiere muy poco tiempo, por lo que el resultado final es que es más eficiente que la interpretación del código (de todas formas Mono también dispone de un intérprete de IL, llamado &lt;strong&gt;mint&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;Como comentario final al artículo, decir que me resultó realmente extraño que Microsoft diseñara una plataforma que fuera capaz de de correr en diferentes arquitecturas y más aún, en diferentes sistemas operativos. La explicación es que Microsoft no buscaba la portabilidad, sino que buscaba la integración de distintos lenguajes de programación (C#, C++.NET, VisualBasic.NET, etc), consiguiendo como «daño colateral» dicha portabilidad.&lt;/p&gt;
&lt;p&gt;Pues eso ha sido todo por el momento. Nos vemos en los próximos artículos.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Fri, 08 Aug 2003 11:27:59 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2003/08/08/funcionamiento-de-net/</guid></item><item><title>Pasado, presente y futuro de Mono</title><link>https://danielpecos.com/2003/07/31/pasado-presente-y-futuro-de-mono/</link><description>&lt;p&gt;En este artículo os comentaré un poco de historia sobre la evolución de la tecnología .NET y del proyecto Mono, que a pesar de su corta existencia, ha sido un proyecto muy vivo, y en el cual han participado y participan muchas personas de todo el mundo.&lt;/p&gt;
&lt;p&gt;.NET es una tecnología desarrollada por Microsoft, que ha sido estandarizada en el ECMA (&lt;a href="https://danielpecos.com/assets/2003/07/Ecma-334.pdf"&gt;C#&lt;/a&gt;, &lt;a href="https://danielpecos.com/assets/2003/07/Ecma-335.pdf"&gt;CLI&lt;/a&gt;), ofreciendo la posibilidad de crear utilidades que trabajen con este entorno, sin miedo a que un día Microsoft interponga una demanda o que simplemente cambie las especificaciones a su antojo.&lt;/p&gt;
&lt;p&gt;Así pues, Ximian Inc., empresa dirigida por Miguel de Icaza, decidió el 9 de Julio de 2001 crear un runtime y un compilador para la plataforma .NET en sistemas Unix. Dicho entorno fue bautizado como Mono.&lt;/p&gt;
&lt;p&gt;Las utilidades del proyecto (runtime = &lt;strong&gt;mono&lt;/strong&gt;; compilador de C# = &lt;strong&gt;mcs&lt;/strong&gt;) están escritos en C#, el lenguaje estrella de la plataforma .NET, por lo que su desarrollo inicial se realizó en el entorno .NET de Microsoft, hasta que el 3 de Enero de 2002 se anunció que el proyecto era auto-suficiente, es decir, que era capaz de compilarse y ejecutarse a sí mismo, con lo cual ya no fue necesario el uso del compilador de Microsoft (&lt;strong&gt;csc&lt;/strong&gt;), pudiendo continuar el desarrollo usando el propio proyecto.&lt;/p&gt;
&lt;p&gt;Desde entonces el desarrollo del proyecto ha estado centrado en el desarrollo de la librería estándar, el desarrollo de compiladores para otros lenguajes, como por ejemplo VisualBasic (&lt;strong&gt;mbas&lt;/strong&gt;), la adaptación del sistema de interfaz de usuario de windows (&lt;em&gt;System.Windows.Forms&lt;/em&gt; o &lt;em&gt;SWF&lt;/em&gt;) al resto de sistemas operativos, usando para ello las librerías del proyecto Wine (&lt;a href="http://www.winehq.com"&gt;http://www.winehq.com&lt;/a&gt;), y el desarrollo de ASP.NET y los servicios web, habiendo desarrollado un mini servidor web (&lt;strong&gt;xsp&lt;/strong&gt;) para su uso en entorno .NET (aunque también existe un módulo para Apache llamado &lt;strong&gt;mod_mono&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;El futuro immediato de Mono está orientado a completar y depurar la librería estándar, sin perder de vista las nuevas características incluidas en la nueva estandarización del entorno, .NET 1.1 (C# 2.0), en donde se incluyen, entre otras cosas, la implementación de genéricos en C#.&lt;/p&gt;
&lt;p&gt;Éstos han sido los pasos, a grandes rasgos, de lo sucedido en torno al proyecto. Para obtener más información, remitiros a las archivos de las listas de correos que podreis encontrar en la &lt;a href="http://www.go-mono.com"&gt;web&lt;/a&gt; del proyecto.&lt;/p&gt;
&lt;p&gt;En el siguiente artículo os haré una breve descripción de las principales utilidades de Mono, así como un pequeño glosario de los acrónimos más utilizados en relación con .NET.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Thu, 31 Jul 2003 13:42:19 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2003/07/31/pasado-presente-y-futuro-de-mono/</guid></item><item><title>¿Qué es Mono?</title><link>https://danielpecos.com/2003/07/30/que-es-mono/</link><description>&lt;p&gt;Mono (&lt;a href="http://www.go-mono.com"&gt;http://www.go-mono.com&lt;/a&gt;) es la implementación libre de la tecnología .NET, capaz de correr en Linux, sistemas *NIX, MacOS, y Windows. Gracias a este proyecto, los usuarios de sistemas *NIX podremos contar con los últimos avances en lo que a tecnología del software se refiere.&lt;/p&gt;
&lt;p&gt;Y es que Mono no es simplemente un compilador y su correspondiente runtime, sino que también se incluyen una serie de utilidades que nos facilitarán mucho la vida a la hora de programar, como un explorador de documentación –&lt;strong&gt;MonoDoc&lt;/strong&gt;-, o un mini servidor web –&lt;strong&gt;XSP&lt;/strong&gt;-, con capacidad de procesar programas escritos para ASP.NET o de ofrecer un servicio web para el resto de Internet, entre otras.&lt;/p&gt;
&lt;p&gt;Además con Mono no estás limitado a un solo lenguaje, sino que puedes programar la parte que más te interese de un proyecto en un determinado lenguaje, programando el resto de éste en otro, facilitando con ello el diseño de rutinas que podrían ser más fáciles de implementar en otros lenguajes. Por el momento puedes programar en C# y VisualBasic.NET, aunque ya se están desarrollando compiladores para otros lenguajes, como puede ser Python o Ruby.&lt;/p&gt;
&lt;p&gt;Esta homogeneidad en los lenguajes se consigue gracias a que un programa escrito para Mono o .NET no se compila directamente a código máquina, sino que es compilado a IL, un lenguaje ensamblador de alto nivel, el cual es traducido por el runtime (JIT) en el momento de la ejecución, realizando las optimizaciones que sean oportunas según el tipo de arquitectura en el que se esté ejecutando el runtime. Este IL tiene sus propia estructura (CLS) y sus propias estructuras de datos (CTS), de forma que los diferentes tipos de datos de los lenguajes .NET, deben ser mapeados a tipos de datos del CTS. Además, y como consecuencia directa de lo anterior, podemos conseguir portabilidad entre arquitecturas y entre sistemas operativos, únicamente con tener en cuenta que no se deben realizar tareas específicas para un determinado entorno (como lecturas de registro, carga de librerías que no estén portadas a otros sistemas, etc.).&lt;/p&gt;
&lt;p&gt;La verdad es que es que aunque es una tecnología que está dando sus primeros pasos, promete ser muy interesante. Y es por ello que, a partir de ahora, me dedicaré a contaros lo que me sea posible en este blog. De momento os recomiendo que os bajeis las fuentes de la página web, lo compileis, y echeis un vistazo a los ejemplos que se incluyen.&lt;/p&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Wed, 30 Jul 2003 15:30:31 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/2003/07/30/que-es-mono/</guid></item><item><title>elfprize.com</title><link>https://mbutler.org/elfprize-com/</link><description>This project was the final culmination of a 13-year exploration of the world of get-rich-quick schemes. In high school I sent away for John Wright&amp;#8217;s &amp;#8220;The Royal Road To Riches,&amp;#8221; a home-publishing business that suggested the easiest way to become a millionare was to reprint books about reprinting books and sell them in the classified [&amp;#8230;]</description><author>mbutler</author><pubDate>Sun, 13 Jul 2003 04:17:40 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/elfprize-com/</guid></item><item><title>Crypto-Adaptation</title><link>https://mbutler.org/crypto-adaptation/</link><description>Originally produced in May 2003 for Spatial Intersections at the University of Iowa Museum of Art seminar version performed for Version&gt;04 Invisible Networks based on the book ALLOY Dully Servant (Soviet No-Gang Shriners) reads from the twisted linguistic cosmology of &gt;KIND TRICKS as [tele-psychic puppet] action-script for Skeleton Bride (People’s Republic of Delicious Foods). An [&amp;#8230;]</description><author>mbutler</author><pubDate>Fri, 02 May 2003 22:35:46 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/crypto-adaptation/</guid></item><item><title>Hooray for Bluecurve</title><link>https://stop.zona-m.net/2002/12/hooray-for-bluecurve/</link><description>&lt;p&gt;originally written for Linux Journal&amp;hellip;&lt;/p&gt;</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Wed, 04 Dec 2002 01:50:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/2002/12/hooray-for-bluecurve/</guid></item><item><title>Work-Shift</title><link>https://mbutler.org/work-shift/</link><description>Produced by Community Architexts Chicago/ Los Angeles Read the script I wrote based on audio and written interviews in the collection of the State Historical Society of Iowa library. I also arranged and composed the score based on factory and manufacturing sounds. Public artists Jane Gilmor and BJ Krivanek joined together to produce Work-Shift, a [&amp;#8230;]</description><author>mbutler</author><pubDate>Wed, 10 Jul 2002 04:06:04 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/work-shift/</guid></item><item><title>PostGreSQL vs. MySQL</title><link>https://danielpecos.com/documents/postgresql-vs-mysql/</link><description>&lt;p&gt;&lt;strong&gt;Tabla de contenidos&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#AEN1"&gt;Introducción&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#AEN12"&gt;PostGreSQL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.1. &lt;a href="#AEN17"&gt;¿Qué es postgresql?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.2. &lt;a href="#AEN22"&gt;Historia de PostGreSQL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.3. &lt;a href="#AEN30"&gt;Características de PostGreSQL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.4. &lt;a href="#AEN50"&gt;¿Qué es lo que le falta?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.5. &lt;a href="#AEN53"&gt;Opinión Personal&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#AEN13"&gt;MySQL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3.1. &lt;a href="#AEN59"&gt;¿Qué es MySQL?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3.2. &lt;a href="#AEN64"&gt;Historia de MySQL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3.3. &lt;a href="#AEN71"&gt;Características de MySQL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3.4. &lt;a href="#AEN87"&gt;¿Qué es lo que le falta?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3.5. &lt;a href="#AEN102"&gt;Opinión Personal&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#AEN14"&gt;Comparativa&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.1. &lt;a href="#AEN110"&gt;Introducción&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.2. &lt;a href="#AEN115"&gt;Lo mejor de PostGreSQL …&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.3. &lt;a href="#AEN125"&gt;… y lo peor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.4. &lt;a href="#AEN135"&gt;Lo mejor de MySQL …&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.5. &lt;a href="#AEN149"&gt;… y lo peor&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#AEN15"&gt;Conclusión&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#AEN16"&gt;Bibliografía&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hoy en día existen muchas empresas y sitios web que necesitan mantener de forma eficiente un gran volumen de datos. Muchos de ellos optan por soluciones comerciales, aunque muchas otras confían en el software libre optando por una solución como PostGreSQL o MySQL.&lt;/p&gt;
&lt;p&gt;En este documento se tratará de hacer una comparativa entre los sistemas de gestión de bases de datos libres más importantes y más usados en la red, los cuales proporcionan soluciones a miles de personas, de forma totalmente gratuita, sin pérdida de eficiencia alguna.&lt;/p&gt;
&lt;h1 id="1-introducción"&gt;&lt;a name="AEN1"&gt;&lt;/a&gt;1. Introducción&lt;/h1&gt;
&lt;p&gt;Común es la pregunta entre las personas que se adentran por primera vez en el mundo de las bases de datos libres: ¿MySQL o PostGreSQL? En realidad no es una pregunta asociada específicamente a los “novatos”, ya que incluso los profesionales dedicados a este campo se realizan muchas veces esta misma pregunta. La verdad es que no es una pregunta fácil de responder, y no carente de grandes controversias.&lt;/p&gt;
&lt;p&gt;El objetivo de este documento será introducir las características de estos dos magníficos sistemas de gestión de bases de datos, haciendo una pequeña comparativa entre ellas, con el fin de conducir a la elección más adecuada para cada situación.&lt;/p&gt;
&lt;h1 id="2-postgresql"&gt;&lt;a name="AEN12"&gt;&lt;/a&gt;2. PostGreSQL&lt;/h1&gt;
&lt;h2 id="21-qué-es-postgresql"&gt;&lt;a name="AEN17"&gt;&lt;/a&gt;2.1. ¿Qué es PostGreSQL?&lt;/h2&gt;
&lt;p&gt;PostGreSQL es un sistema de gestión de bases de datos objeto-relacional (ORDBMS) basado en el proyecto POSTGRES, de la universidad de Berkeley. El director de este proyecto es el profesor Michael Stonebraker, y fue patrocinado por Defense Advanced Research Projects Agency (DARPA), el Army Research Office (ARO), el National Science Foundation (NSF), y ESL, Inc.&lt;/p&gt;
&lt;p&gt;PostGreSQL es una derivación libre (OpenSource) de este proyecto, y utiliza el lenguaje SQL92/SQL99, así como otras características que comentaremos más adelante.&lt;/p&gt;
&lt;p&gt;Fue el pionero en muchos de los conceptos existentes en el sistema objeto-relacional actual, incluido, más tarde en otros sistemas de gestión comerciales. PostGreSQL es un sistema objeto-relacional, ya que incluye características de la orientación a objetos, como puede ser la herencia, tipos de datos, funciones, restricciones, disparadores, reglas e integridad transaccional. A pesar de esto, PostGreSQL no es un sistema de gestión de bases de datos puramente orientado a objetos.&lt;/p&gt;
&lt;h2 id="22-historia-de-postgresql"&gt;&lt;a name="AEN22"&gt;&lt;/a&gt;2.2. Historia de PostGreSQL&lt;/h2&gt;
&lt;p&gt;PostGreSQL (llamado también Postgres95) fue derivado del proyecto Postgres, como ya se ha comentado. A sus espaldas, este proyecto lleva más de una década de desarrollo, siendo hoy en día, el sistema libre más avanzado con diferencia, soportando la gran mayoría de las transacciones SQL, control concurrente, teniendo a su disposición varios “language bindings” como por ejemplo C, C++, Java, Python, PHP y muchos más.&lt;/p&gt;
&lt;p&gt;La implementación de Postgres DBMS comenzó en 1986, y no hubo una versión operativa hasta 1987. La versión 1.0 fue liberada en Junio de 1989 a unos pocos usuarios, tras la cual se liberó la versión 2.0 en Junio de 1990 debido a unas críticas sobre el sistema de reglas, que obligó a su reimplementación. La versión 3.0 apareció en el año 1991, e incluyó una serie de mejoras como una mayor eficiencia en el ejecutor de peticiones. El resto de versiones liberadas a partir de entonces, se centraron en la portabilidad del sistema. El proyecto se dio por finalizado en con la versión 4.2, debido al gran auge que estaba teniendo, lo cual causó la imposibilidad de mantenimiento por parte de los desarrolladores.&lt;/p&gt;
&lt;p&gt;En 1994, Andrew Yu y Jolly Chen añadieron un intérprete de SQL a este gestor. Postgres95, como así se llamó fue liberado a Internet como un proyecto libre (OpenSource). Estaba escrito totalmente en C, y la primera versión fue un 25% más pequeña que Postgres, y entre un 30 y un 50% más rápida. A parte de la corrección de algunos bugs, se mejoró el motor interno, se añadió un nuevo programa monitor, y se compiló usando la utilidad GNU Make y el compilador gcc sin necesidad de parchearlo (como había hecho falta en versiones anteriores).&lt;/p&gt;
&lt;p&gt;En 1996, los desarrolladores decidieron cambiar el nombre a al DBMS, y lo llamaron PostGreSQL (versión 6.0) para reflejar la relación entre Postgres y las versiones recientes de SQL. Se crearon nuevas mejoras y modificaciones, que repercutieron en un 20-40% más de eficiencia, así como la incorporación del estándar SQL92.&lt;/p&gt;
&lt;p&gt;La versión que se ofrece a fechas de este escrito, es la versión 7.2.1. Se puede encontrar más información acerca de las características e historia en &lt;a href="#POSTGRES"&gt;[PostGreSQL_Manual]&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="23-características-de-postgresql"&gt;&lt;a name="AEN30"&gt;&lt;/a&gt;2.3. Características de PostGreSQL&lt;/h2&gt;
&lt;p&gt;A continuación se enumeran las principales características de este gestor de bases de datos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Implementación del estándar SQL92/SQL99.&lt;/li&gt;
&lt;li&gt;Soporta distintos tipos de datos: además del soporte para los tipos base, también soporta datos de tipo fecha, monetarios, elementos gráficos, datos sobre redes (MAC, IP …), cadenas de bits, etc. También permite la creación de tipos propios.&lt;/li&gt;
&lt;li&gt;Incorpora una estructura de datos array.&lt;/li&gt;
&lt;li&gt;Incorpora funciones de diversa índole: manejo de fechas, geométricas, orientadas a operaciones con redes, etc.&lt;/li&gt;
&lt;li&gt;Permite la declaración de funciones propias, así como la definición de disparadores.&lt;/li&gt;
&lt;li&gt;Soporta el uso de índices, reglas y vistas.&lt;/li&gt;
&lt;li&gt;Incluye herencia entre tablas (aunque no entre objetos, ya que no existen), por lo que a este gestor de bases de datos se le incluye entre los gestores objeto-relacionales.&lt;/li&gt;
&lt;li&gt;Permite la gestión de diferentes usuarios, como también los permisos asignados a cada uno de ellos.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="24-qué-es-lo-que-le-falta"&gt;&lt;a name="AEN50"&gt;&lt;/a&gt;2.4. ¿Qué es lo que le falta?&lt;/h2&gt;
&lt;p&gt;PostGreSQL es un magnífico gestor de bases de datos, capaz de competir con muchos gestores comerciales, aunque carezca de alguna característica casi imprescindible. Ésta es, bajo mi punto de vista, un conjunto de herramientas que permitan una fácil gestión de los usuarios y de las bases de datos que contenga el sistema. Por otro lado, la velocidad de respuesta que ofrece este gestor con bases de datos relativamente pequeñas puede parecer un poco deficiente, aunque esta misma velocidad la mantiene al gestionar bases de datos realmente grandes, cosa que resulta loable.&lt;/p&gt;
&lt;h2 id="25-opinión-personal"&gt;&lt;a name="AEN53"&gt;&lt;/a&gt;2.5. Opinión Personal&lt;/h2&gt;
&lt;p&gt;PostGreSQL es un magnífico gestor de bases de datos. Tiene prácticamente todo lo que tienen los gestores comerciales, haciéndo de él una muy buena alternativa GPL. A pesar de ello, el primer encuentro con este gestor es un poco “duro”, ya que la sintaxis de algunos de sus comandos no es nada intuitiva. También resulta engorroso las pequeñas variaciones que presenta este gestor en algunos de los tipos de datos que maneja, siendo el problema más comentado el referente al tipo “serial”.&lt;/p&gt;
&lt;p&gt;Una vez nos hayamos hecho con su sintaxis y fijándonos en estos pequeños detalles (que por otro lado están totalmente documentados), PostGreSQL es un gestor magnífico, que posee una gran escalabilidad, haciéndolo idóneo para su uso en sitios web que posean alrededor de 500.000 peticiones por día.&lt;/p&gt;
&lt;h1 id="3-mysql"&gt;&lt;a name="AEN13"&gt;&lt;/a&gt;3. MySQL&lt;/h1&gt;
&lt;h2 id="31-qué-es-mysql"&gt;&lt;a name="AEN59"&gt;&lt;/a&gt;3.1. ¿Qué es MySQL?&lt;/h2&gt;
&lt;p&gt;MySQL es un sistema de gestión de bases de datos relacional, licenciado bajo la GPL de la GNU. Su diseño multihilo le permite soportar una gran carga de forma muy eficiente. MySQL fue creada por la empresa sueca MySQL AB, que mantiene el copyright del código fuente del servidor SQL, así como también de la marca.&lt;/p&gt;
&lt;p&gt;Aunque MySQL es software libre, MySQL AB distribuye una versión comercial de MySQL, que no se diferencia de la versión libre más que en el soporte técnico que se ofrece, y la posibilidad de integrar este gestor en un software propietario, ya que de no ser así, se vulneraría la licencia GPL.&lt;/p&gt;
&lt;p&gt;Este gestor de bases de datos es, probablemente, el gestor más usado en el mundo del software libre, debido a su gran rapidez y facilidad de uso. Esta gran aceptación es debida, en parte, a que existen infinidad de librerías y otras herramientas que permiten su uso a través de gran cantidad de lenguajes de programación, además de su fácil instalación y configuración.&lt;/p&gt;
&lt;h2 id="32-historia-de-mysql"&gt;&lt;a name="AEN64"&gt;&lt;/a&gt;3.2. Historia de MySQL&lt;/h2&gt;
&lt;p&gt;MySQL surgió como un intento de conectar el gestor mSQL a las tablas propias de MySQL AB, usando sus propias rutinas a bajo nivel. Tras unas primeras pruebas, vieron que mSQL no era lo bastante flexible para lo que necesitaban, por lo que tuvieron que desarrollar nuevas funciones. Esto resultó en una interfaz SQL a su base de datos, con una interfaz totalmente compatible a mSQL.&lt;/p&gt;
&lt;p&gt;Se comenta en el manual &lt;a href="#MYSQL"&gt;[MySQL_Manual]&lt;/a&gt; que no se sabe con certeza de donde proviene su nombre. Por un lado dicen que sus librerías han llevado el prefijo ‘my’ durante los diez últimos años. Por otro lado, la hija de uno de los desarrolladores se llama My. No saben cuál de estas dos causas (aunque bien podrían tratarse de la misma), han dado lugar al nombre de este conocido gestor de bases de datos.&lt;/p&gt;
&lt;p&gt;La versión estable de este gestor a días de hoy es la 3.23.49. Se puede encontrar más información sobre este gestor en el manual &lt;a href="#MYSQL"&gt;[MySQL_Manual]&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="33-características-de-mysql"&gt;&lt;a name="AEN71"&gt;&lt;/a&gt;3.3. Características de MySQL&lt;/h2&gt;
&lt;p&gt;Las principales características de este gestor de bases de datos son las siguientes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Aprovecha la potencia de sistemas multiprocesador, gracias a su implementación multihilo.&lt;/li&gt;
&lt;li&gt;Soporta gran cantidad de tipos de datos para las columnas.&lt;/li&gt;
&lt;li&gt;Dispone de API’s en gran cantidad de lenguajes (C, C++, Java, PHP, etc).&lt;/li&gt;
&lt;li&gt;Gran portabilidad entre sistemas.&lt;/li&gt;
&lt;li&gt;Soporta hasta 32 índices por tabla.&lt;/li&gt;
&lt;li&gt;Gestión de usuarios y passwords, manteniendo un muy buen nivel de seguridad en los datos.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="34-qué-es-lo-que-le-falta"&gt;&lt;a name="AEN87"&gt;&lt;/a&gt;3.4. ¿Qué es lo que le falta?&lt;/h2&gt;
&lt;p&gt;MySQL surgió cómo una necesidad de un grupo de personas sobre un gestor de bases de datos rápido, por lo que sus desarrolladores fueron implementando únicamente lo que precisaban, intentando hacerlo funcionar de forma óptima. Es por ello que, aunque MySQL se incluye en el grupo de sistemas de bases de datos relacionales, carece de algunas de sus principales características:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Subconsultas: tal vez ésta sea una de las características que más se echan en falta, aunque gran parte de las veces que se necesitan, es posible reescribirlas de manera que no sean necesarias.&lt;/li&gt;
&lt;li&gt;SELECT INTO TABLE: Esta característica propia de Oracle, todavía no está implementada.&lt;/li&gt;
&lt;li&gt;Triggers y Procedures: Se tiene pensado incluir el uso de procedures almacenados en la base de datos, pero no el de triggers, ya que los triggers reducen de forma significativa el rendimiento de la base de datos, incluso en aquellas consultas que no los activan.&lt;/li&gt;
&lt;li&gt;Transacciones: a partir de las últimas versiones ya hay soporte para transacciones, aunque no por defecto (se ha de activar un modo especial).&lt;/li&gt;
&lt;li&gt;Integridad referencial: aunque sí que admite la declaración de claves ajenas en la creación tablas, internamente no las trata de forma diferente al resto de campos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Los desarrolladores comentan en la documentación que todas estas carencias no les resultaban un problema, ya que era lo que ellos necesitaban. De hecho, MySQL fue diseñada con estas características, debido a que lo que buscaban era un gestor de bases de datos con una gran rapidez de respuesta. Pero ha sido con la distribución de MySQL por Internet, cuando más y más gente les están pidiendo estas funcionalidades, por lo que serán incluidas en futuras versiones del gestor.&lt;/p&gt;
&lt;h2 id="35-opinión-personal"&gt;&lt;a name="AEN102"&gt;&lt;/a&gt;3.5. Opinión Personal&lt;/h2&gt;
&lt;p&gt;Tras haber probado la PostGreSQL, y viendo las carencias que poseía MySQL, pensé que no merecería la pena ni tan siquiera probarlo, aunque por otro lado, creía que algo debía tener para que hubiera tanta gente que lo use, cuando está a merced de cada uno elegir la base de datos que quiere usar. La verdad es tras haber hecho unas pocas pruebas, mi impresión sobre este gestor mejoró considerablemente.&lt;/p&gt;
&lt;p&gt;Para comenzar, el shell de comandos muestra una interfaz más amena y los comandos para gestionar la base de datos son más intuitivos, siendo muchos de ellos sentencias SQL (hay que decir que no dispone de ayuda en línea sobre las palabras clave de SQL). Por otro lado, la API de PHP para acceder a MySQL era muchísimo más sencilla de usar, teniendo un estilo mucho más natural.&lt;/p&gt;
&lt;p&gt;Impresiones en contra, la imposibilidad de usar subconsultas, así como también la definición de vistas, aunque según la documentación oficial, éstas dos características serán incluidas en la versión 4.1 aproximadamente (en las versiones actuales, se incluyen dos comandos, LEFT JOIN y RIGTH JOIN, que son capaces de suplir las subconsultas en gran parte de los casos, obteniendo, por otra parte, una mayor eficiencia).&lt;/p&gt;
&lt;p&gt;La verdad es que aunque estas diferencias son agradables, no llegan a tener una importancia suficiente como para cambiar el gestor que habitualmente solemos usar. Este tipo de cambios deberían estar basados en diferencias en el rendimiento que se nos ofrece, que es lo que se tratará en el siguiente apartado.&lt;/p&gt;
&lt;h1 id="4-comparativa"&gt;&lt;a name="AEN14"&gt;&lt;/a&gt;4. Comparativa&lt;/h1&gt;
&lt;h2 id="41-introducción"&gt;&lt;a name="AEN110"&gt;&lt;/a&gt;4.1. Introducción&lt;/h2&gt;
&lt;p&gt;Son muchos los benchmarks que se han publicado sobre estos gestores de bases de datos, aunque muchos de ellos tienen una clara tendencia hacia uno de los dos bandos. Es por esto que hay que saber extraer bien las conclusiones a partir de un benchmark. Por ejemplo, es importante que las comparaciones entre los dos gestores se realicen en igualdad de condiciones, cosa que por otra parte, muchas veces resulta complicado debido a las distintas implementaciones que poseen estos gestores.&lt;/p&gt;
&lt;p&gt;Además, resulta muy complicado diseñar un buen benchmark, que tenga en cuenta todas las posibles mejoras de rendimiento que pueda aplicar cada uno de estos gestores. Es lógico pues, que haya algunas pruebas que se le apliquen a un gestor, y que no tenga ningún sentido realizarselas al otro.&lt;/p&gt;
&lt;p&gt;A continuación se resumen las conclusiones obtenidas a partir de diversos benchmark’s, intentando hacer un descarte de los que tenían una clara tendencia hacia uno de los bandos.&lt;/p&gt;
&lt;h2 id="42-lo-mejor-de-postgresql-"&gt;&lt;a name="AEN115"&gt;&lt;/a&gt;4.2. Lo mejor de PostGreSQL …&lt;/h2&gt;
&lt;p&gt;Las características positivas que posee este gestor según las opiniones más comunes en Internet, son:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Posee una gran escalabilidad. Es capaz de ajustarse al número de CPUs y a la cantidad de memoria que posee el sistema de forma óptima, haciéndole capaz de soportar una mayor cantidad de peticiones simultáneas de manera correcta (en algunos benchmarks se dice que ha llegado a soportar el triple de carga de lo que soporta MySQL).&lt;/li&gt;
&lt;li&gt;Implementa el uso de rollback’s, subconsultas y transacciones, haciendo su funcionamiento mucho más eficaz, y ofreciendo soluciones en campos en las que MySQL no podría.&lt;/li&gt;
&lt;li&gt;Tiene la capacidad de comprobar la integridad referencial, así como también la de almacenar procedimientos en la propia base de datos, equiparándolo con los gestores de bases de datos de alto nivel, como puede ser Oracle.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="43--y-lo-peor"&gt;&lt;a name="AEN125"&gt;&lt;/a&gt;4.3. … y lo peor&lt;/h2&gt;
&lt;p&gt;Por contra, los mayores inconvenientes que se pueden encontrar a este gestor son:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Consume gran cantidad de recursos.&lt;/li&gt;
&lt;li&gt;Tiene un límite de 8K por fila, aunque se puede aumentar a 32K, con una disminución considerable del rendimiento.&lt;/li&gt;
&lt;li&gt;Es de 2 a 3 veces más lento que MySQL.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="44-lo-mejor-de-mysql-"&gt;&lt;a name="AEN135"&gt;&lt;/a&gt;4.4. Lo mejor de MySQL …&lt;/h2&gt;
&lt;p&gt;Es evidente que la gran mayoría de gente usa este gestor en Internet, por lo que encontrar opiniones favorables no ha resultado en absoluto complicado:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Sin lugar a duda, lo mejor de MySQL es su velocidad a la hora de realizar las operaciones, lo que le hace uno de los gestores que ofrecen mayor rendimiento.&lt;/li&gt;
&lt;li&gt;Su bajo consumo lo hacen apto para ser ejecutado en una máquina con escasos recursos sin ningún problema.&lt;/li&gt;
&lt;li&gt;Las utilidades de administración de este gestor son envidiables para muchos de los gestores comerciales existentes, debido a su gran facilidad de configuración e instalación.&lt;/li&gt;
&lt;li&gt;Tiene una probabilidad muy reducida de corromper los datos, incluso en los casos en los que los errores no se produzcan en el propio gestor, sino en el sistema en el que está.&lt;/li&gt;
&lt;li&gt;El conjunto de aplicaciones Apache-PHP-MySQL es uno de los más utilizados en Internet en servicios de foro (Barrapunto.com) y de buscadores de aplicaciones (Freshmeat.net).&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="45--y-lo-peor"&gt;&lt;a name="AEN149"&gt;&lt;/a&gt;4.5. … y lo peor&lt;/h2&gt;
&lt;p&gt;Debido a esta mayor aceptación en Internet, gran parte de los inconvenientes se exponen a continuación, han sido extraídos de comparativas con otras bases de datos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Carece de soporte para transacciones, rollback’s y subconsultas.&lt;/li&gt;
&lt;li&gt;El hecho de que no maneje la integridad referencial, hace de este gestor una solución pobre para muchos campos de aplicación, sobre todo para aquellos programadores que provienen de otros gestores que sí que poseen esta característica.&lt;/li&gt;
&lt;li&gt;No es viable para su uso con grandes bases de datos, a las que se acceda continuamente, ya que no implementa una buena escalabilidad.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id="5-conclusión"&gt;&lt;a name="AEN15"&gt;&lt;/a&gt;5. Conclusión&lt;/h1&gt;
&lt;p&gt;Después de haber leído diversos artículos sobre estos gestores de bases de datos, FAQ’s y benchmarks (algunos con un curioso “modus operandi”), la conclusión que se puede sacar es que en realidad no hay que sacar ninguna conclusión sobre el tema. Cada uno de estos gestores es idóneo para ciertos campos, e intentar utilizar el otro acarrearía una pérdida de productividad del programa, como también grandes quebraderos de cabeza.&lt;/p&gt;
&lt;p&gt;Ninguno de estos dos gestores son totalmente perfectos, por lo que no hay que obcecarse en la elección única y fanática, como se suele hacer en muchos casos de alguno de ellos. Simplemente se trata de escoger el más conveniente en cada caso. Éstos son los grandes inconvenientes y a la vez las grandes maravillas que conlleva el mundo OpenSource.&lt;/p&gt;
&lt;p&gt;Como reflexión final, creo que la pregunta con la que se introducía el escritp podría transformarse en: ¿velocidad o potencia?, siendo su carácter mucho más acertado.&lt;/p&gt;
&lt;h1 id="bibliografía"&gt;&lt;a name="AEN16"&gt;&lt;/a&gt; Bibliografía&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a name="MYSQL"&gt;&lt;/a&gt;[MySQL_Manual] &lt;i&gt;Manual de MySQL&lt;/i&gt;, &lt;a href="https://dev.mysql.com/doc/" target="_top"&gt;&lt;a href="https://dev.mysql.com/doc/"&gt;https://dev.mysql.com/doc/&lt;/a&gt;&lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;&lt;a name="POSTGRES"&gt;&lt;/a&gt;[PostGreSQL_Manual] &lt;i&gt;Manual de PostGreSQL&lt;/i&gt;, &lt;a href="https://www.postgresql.org/docs/" target="_top"&gt;&lt;a href="https://www.postgresql.org/docs/"&gt;https://www.postgresql.org/docs/&lt;/a&gt;&lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;&lt;a name="ART1"&gt;&lt;/a&gt;[Article_MySQL-PostGreSQL] &lt;i&gt;Artículo comparativo&lt;/i&gt;, &lt;a href="http://www.phpbuilder.com/columns/tim20000705.php3?page=1" target="_top"&gt;&lt;a href="http://www.phpbuilder.com/columns/tim20000705.php3?page=1"&gt;http://www.phpbuilder.com/columns/tim20000705.php3?page=1&lt;/a&gt;&lt;/a&gt; .&lt;/li&gt;
&lt;/ul&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Fri, 07 Jun 2002 14:15:00 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/documents/postgresql-vs-mysql/</guid></item><item><title>ALLOY  &amp;gt;KIND TRICKS  and BODILY REALITIES  in the VANGUARD PARTY</title><link>https://mbutler.org/alloy-kind-tricks-and-bodily-realities-in-the-vanguard-party/</link><description>A project funded by the Reggie Amos Project Grant for Intermedia Development and originally distributed through Printed Matter. The manuscript was debuted at the Version&amp;#62;02 Festival at the Museum of Contemporary Art Chicago. The first printing was used in a drawing class taught by Nathan Peck at St. Xavier University. The second and third printings were [&amp;#8230;]</description><author>mbutler</author><pubDate>Wed, 27 Mar 2002 23:15:40 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/alloy-kind-tricks-and-bodily-realities-in-the-vanguard-party/</guid></item><item><title>Future Perfect</title><link>https://mbutler.org/future-perfect/</link><description>An album dedicated to the best verb tense, future perfect. Released under the Soviet Shriner alias and mostly constructed out of left-over audio fragments from art school video scores. Future Perfect by Soviet Shriner</description><author>mbutler</author><pubDate>Tue, 15 Jan 2002 23:05:04 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/future-perfect/</guid></item><item><title>Trace-Structures Dial</title><link>https://mbutler.org/trace-structures-dial/</link><description>This is an experimental user interface I built for the Mediated Trace Structures video conference in 2001. Art faculty and students from the University of Iowa, Oregon, Oklahoma, and Dortmund, Germany each created media objects to present via this Internet2 event. We were very loosely exploring the concept of the Derridian &amp;#8220;trace&amp;#8221; and how media [&amp;#8230;]</description><author>mbutler</author><pubDate>Fri, 23 Nov 2001 22:58:53 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/trace-structures-dial/</guid></item><item><title>Getting the Price Right: Maize Production in Mexico After Market Liberalisation</title><link>https://www.davidschlachter.com/misc/getting-the-price-right</link><description>Making available my dad's Masters research essay.</description><author>David Schlachter</author><pubDate>Sat, 01 Sep 2001 20:00:00 GMT</pubDate><guid isPermaLink="true">https://www.davidschlachter.com/misc/getting-the-price-right</guid></item><item><title>Psychic Space Rituals</title><link>https://mbutler.org/psychic-space-rituals/</link><description>This video is part of the Sarsenworld game demo featured in the Tender, Squalacious, and Digital show at the University of Iowa Museum of Art, curated by Ebon Fisher.</description><author>mbutler</author><pubDate>Fri, 11 May 2001 23:11:05 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/psychic-space-rituals/</guid></item><item><title>Speaking Binary</title><link>https://mbutler.org/speaking-binary/</link><description>Originally produced for Uber-Setzung/Translation at the University of Iowa Museum of Art. It was later used in the dATAPLOT exhibit at the SXU gallery. This is a conceptual translation of the sentence “Sometimes I think like a computer.” into binary, where each letter is represented by a string of 8 ones or zeros. 1=YES 0=NO. [&amp;#8230;]</description><author>mbutler</author><pubDate>Fri, 10 Nov 2000 16:37:49 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/speaking-binary/</guid></item><item><title>Linux</title><link>https://danielpecos.com/documents/linux/</link><description>&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style="text-align: center;"&gt;&lt;/th&gt;
          &lt;th style="text-align: center;"&gt;&lt;/th&gt;
          &lt;th style="text-align: center;"&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;Daniel Pecos Martínez&lt;/td&gt;
          &lt;td style="text-align: center;"&gt;Alfredo Prades González&lt;/td&gt;
          &lt;td style="text-align: center;"&gt;David Díez Muñoz&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;&lt;a href="mailto:al024479@alumail.uji.es"&gt;&lt;a href="mailto:al024479@alumail.uji.es"&gt;al024479@alumail.uji.es&lt;/a&gt;&lt;/a&gt;&lt;/td&gt;
          &lt;td style="text-align: center;"&gt;&lt;a href="mailto:al025241@alumail.uji.es"&gt;&lt;a href="mailto:al025241@alumail.uji.es"&gt;al025241@alumail.uji.es&lt;/a&gt;&lt;/a&gt;&lt;/td&gt;
          &lt;td style="text-align: center;"&gt;&lt;a href="mailto:al027996@alumail.uji.es"&gt;&lt;a href="mailto:al027996@alumail.uji.es"&gt;al027996@alumail.uji.es&lt;/a&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;img alt="Tux" class="aligncenter" height="90" src="https://danielpecos.com/assets/2016/10/tux.gif" width="77" /&gt;
&lt;p align="CENTER"&gt;
  1º INGENIERÍA INFORMATICA&lt;br /&gt; U.J.I. CURSO 1999/2000
&lt;/p&gt;
&lt;p align="CENTER"&gt;
  RESUMEN
&lt;/p&gt;
&lt;p&gt;En este trabajo comentamos diversos campos relacionados con Linux, pasando por el kernel, el sistema X Window, el shell y, por supuesto, la red, característica por la cual Linux ha tenido este auge durante los últimos años.&lt;/p&gt;
&lt;p align="CENTER"&gt;
  INDICE
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#2"&gt;INTRODUCCIÓN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1.1 &lt;a href="#2.2"&gt;GNU&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1.2 &lt;a href="#2.3"&gt;CARACTERÍSTICAS GENERALES&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1.3 &lt;a href="#2.4"&gt;LILO&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1.4 &lt;a href="#2.5"&gt;DISTINTAS DISTRIBUCIONES&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#3"&gt;EL KERNEL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.1 &lt;a href="#3.1"&gt;¿QUÉ ES EL KERNEL?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.1.1 &lt;a href="#3.1.1"&gt;Estructura del Sistema&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.1.2 &lt;a href="#3.1.2"&gt;Procesos y Tareas&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.2 &lt;a href="#3.2"&gt;PRINCIPALES ESTRUCTURAS DE DATOS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.2.1 &lt;a href="#3.2.1"&gt;Estructura de Tarea&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.2.2 &lt;a href="#3.2.2"&gt;La Tabla de Procesos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.2.3 &lt;a href="#3.2.3"&gt;Ficheros y inodes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.3 &lt;a href="#3.3"&gt;PRINCIPALES MECANISMOS DEL KERNEL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.3.1 &lt;a href="#3.3.1"&gt;Señales&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.3.2 &lt;a href="#3.3.2"&gt;Tuberías&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.3.3 &lt;a href="#3.3.3"&gt;Interrupciones&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.3.4 &lt;a href="#3.3.4"&gt;Iniciando el sistema&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.3.5 &lt;a href="#3.3.5"&gt;Interrupción del Reloj&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.4 &lt;a href="#3.4"&gt;EL SISTEMA DE ARCHIVOS DE LINUX&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.4.1 &lt;a href="#3.4.1"&gt;Conocimientos básicos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.4.2 &lt;a href="#3.4.2"&gt;El Virtual File System&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.4.3 &lt;a href="#3.4.3"&gt;Sistema de Ficheros Ext2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.4.4 &lt;a href="#3.4.4"&gt;Sistema de Ficheros Proc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#4"&gt;LA SHELL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3.1 &lt;a href="#4.1"&gt;¿QUÉ ES LA SHELL?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3.2 &lt;a href="#4.2"&gt;HISTORIA DE LAS SHELLS DE LINUX&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3.3 &lt;a href="#4.3"&gt;THE BOURNE AGAIN SHELL&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#5"&gt;LINUX EN RED&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.1 &lt;a href="#5.1"&gt;¿QUÉ ES UNA RED DE COMPUTADORES?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.2 &lt;a href="#5.2"&gt;REDES UUCP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.2.1 &lt;a href="#5.2.1"&gt;Funcionamiento de UUCP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.3 &lt;a href="#5.3"&gt;REDES TCP/IP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.3.1 &lt;a href="#5.3.1"&gt;TCP/IP frente a UUCP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.3.2 &lt;a href="#5.3.2"&gt;Introsucción a las redes TCP/IP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.4 &lt;a href="#5.4"&gt;HARDWARE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.4.1 &lt;a href="#5.4.1"&gt;Ethernets&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.4.2 &lt;a href="#5.4.2"&gt;Otros tipos de Hardware&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.5 &lt;a href="#5.5"&gt;PROTOCOLOS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.5.1 &lt;a href="#5.5.1"&gt;El protocolo IP (&lt;em&gt;Internet Protocol&lt;/em&gt;)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.5.2 &lt;a href="#5.5.2"&gt;IP en líneas serie, &lt;em&gt;SLIP&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.5.3 &lt;a href="#5.5.3"&gt;El Protocolo de Control de Transmisiones, &lt;em&gt;TCP&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.5.4 &lt;a href="#5.5.4"&gt;Protocolo de Mensajes de Control de Internet (&lt;em&gt;ICMP&lt;/em&gt;)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.6 &lt;a href="#5.6"&gt;HISTORIA DE LAS REDES CON LINUX&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.7 &lt;a href="#5.7"&gt;SEGURIDAD DEL SISTEMA&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.8 &lt;a href="#5.8"&gt;EL SISTEMA DE NOMBRES DNS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.8.1 &lt;a href="#5.8.1"&gt;Resolución de nombres&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4.8.2 &lt;a href="#5.8.2"&gt;Introducción al DNS&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#6"&gt;SISTEMA X-WINDOWS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5.1 &lt;a href="#6.1"&gt;¿QUÉ ES X-WINDOW?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5.2 &lt;a href="#6.2"&gt;HISTORIA Y NECESIDAD&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5.3 &lt;a href="#6.3"&gt;ARQUITECTURA CLIENTE/SEVIDOR&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5.4 &lt;a href="#6.4"&gt;XFRee86&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5.5 &lt;a href="#6.5"&gt;EL ARRAANQUE DEL SISTEMA X-WINDOW&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5.6 &lt;a href="#6.6"&gt;GESTORES DE VENTANAS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5.6.1 &lt;a href="#6.6.1"&gt;Fvwm y sus derivados&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5.6.2 &lt;a href="#6.6.2"&gt;Otros gestores de ventanas&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5.7 &lt;a href="#6.7"&gt;GESTORES DE ESCRITORIO&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#conclusion"&gt;CONLUSIÓN&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="#referencias"&gt;REFERENCIAS&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a name="2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="1-introducción"&gt;1 INTRODUCCIÓN&lt;/h1&gt;
&lt;p&gt;Linux es un sistema operativo libre de características muy semejantes a UNIX. Originalmente fue desarrollado para PC, aunque hoy en día Linux es capaz de correr en distintas plataformas.&lt;/p&gt;
&lt;p&gt;Linux es compatible con el estándar POSIX 1003.1 e incluye gran cantidad de funciones de UNIX y BSD. Gran parte del código del kernel ha sido escrito por Linus Torvalds, que fue quien comenzó el desarrollo de Linux, usando la licencia GNU para las fuentes del sistema.&lt;/p&gt;
&lt;p&gt;Sin duda alguna ha sido Internet, junto a la licencia GNU, lo que ha dado este impulso al sistema operativo Linux, ya que desde un primer momento las fuentes estuvieron disponibles para todo aquel que quisiera sin tener que pagar nada, haciendo así posible personalizar el sistema operativo para cada uno, desarrollando drivers propios. Esta característica hizo que el desrrollo de Linux se realizase a nivel mundial, siendo el coordinador del proyecto Linus Torvalds.&lt;/p&gt;
&lt;p&gt;&lt;a name="2.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="11-gnu"&gt;1.1 GNU&lt;/h2&gt;
&lt;p&gt;La licencia general pública GNU (del acrónimo recursivo GNU’s Not Unix) es con la que está registrada la mayoría del software de las distrubuciones linux . Aunque solo la distribucion &lt;a href="http://www.debian.org/"&gt;Debian&lt;/a&gt; esta totalmente bajo la licencia general pública GNU, la mayoría del software de las otras distribuciones esta englobado en la licencia GNU. Richard Stallman fue quien puso las bases de esta idea. En 1983 Richard Stallman escribio el anuncio del proyecto GNU que empezba diciendo: UNIX Libre!&lt;/p&gt;
&lt;p&gt;El proyecto venia a decir que se necesitaba gente y máquinas para desarrollar un sistema totalmente compatible con Unix que fuera completamente gratuito. Este sistema tenia algunas mejoras repecto a su sistema en el que se basa linux. Esta licencia es la que ha permitido que linux se desarrolle por todo el mundo a la vez y se pueda desarrollar un programa a traves de todo el mundo.&lt;/p&gt;
&lt;p&gt;La licencia dicta que todo los programas que se distribuyan lo han de hacer con su código fuente permitiendo que cualquiera lo pueda modificar y registrarlo con la misma licencia para distribuirlo libremente, si pone el nombre del autor original y la propia licencia al distribuirlo.&lt;/p&gt;
&lt;p&gt;Otro punto interesante de la licencia es que si alguien cobra dinero al vender un programa bajo esta licencia no puede impedir a quien lo compre que lo distribuya libremente. Ahora ofrecemos la posibilidad de visitar páginas relacionadas con este tema:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/copyleft/gpl.html"&gt;Licencia general pública GNU.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.gnu.org/"&gt;Página general de GNU.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://150.128.40.100/~al025532"&gt;Página de compañeros donde se puede encontrar la licencia GNU traducida al catalán.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a name="2.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="12-características-generales"&gt;1.2 CARACTERÍSTICAS GENERALES&lt;/h2&gt;
&lt;p&gt;Linux cumple con todos los requisitos que se le puede pedir a un sistema UNIX:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-TareaTodos los procesos en ejcución corren independientemente unos de otros.&lt;/li&gt;
&lt;li&gt;Acceseo multi-usuarioLinux permite el acceso simultáneo de diferentes usuarios al mismo ordenador.&lt;/li&gt;
&lt;li&gt;Multi-procesadorDesde la version 2.0 del núcleo, Linux soporta múltiples procesadores, distribuyendo las tareas en distintos procesadores.&lt;/li&gt;
&lt;li&gt;Independencia de arquitecturaExisten distintas versiones de Linux para distintas arquitecturas, desde Amiga hasta PC, pasando por DEC Alpha y Macs. Esta característica es exclusiva de Linux, de momento.&lt;/li&gt;
&lt;li&gt;PagingA pesar del esfuerzo para la optimización del uso de la memoria, puede ocurrir que el sistema se quede sin esta. Cuande esto ocurre, Linux busca páginas de memoria de 4Kb que puedan ser liberadas (las páginas cuyo contenido ya esté almacenado en disco son descartadas). Una vez se han seleccionado son copiadas al disco, liberando así, memoria. Si éstas fueran a ser necesitadas de nuevo, se recargan a la memoria. Este procedimiento difiere del swapping en que no se vuelca toda la memoria usada por un proceso, lo cual es menos eficiente.&lt;/li&gt;
&lt;li&gt;Librerías compartidasLas librerías contiene rutinas usadas por distintos procesos, los cuales al ser lanzados, no vuelven a cargar estas librerías si ya han sido cargadas por algún otro proceso, aprovechando así mejor la memoria.&lt;/li&gt;
&lt;li&gt;Diferentes sistemas de ficherosLinux es capaz de soportar distintos sistemas de ficheros, como pueden ser: FAT 16, FAT 32, ISO, HPFS, etc, y, por supuesto el suyo propio Ext2.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a name="2.3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="13-lilo"&gt;1.3 LILO&lt;/h2&gt;
&lt;p&gt;El LInux LOader es el encargado de cargar el sistema operativo.Ademas es capaz de cargar distintos sistemas operativos como Windows y Windows NT. Se suele instalar en el MBR, desde donde se ejecuta cada vez que se inicia el sistema.&lt;/p&gt;
&lt;p&gt;Existe un programa llamado Loadlin que es capaz de carga linux desde DOS con solo tener una copia del kernel, con lo cual es más fácil acceder a Linux desde este sistema opertativo (este procedimiento es el que suele usarse para lanzar Linux en las distribuciones llamadas habitualmente como WinLinux).&lt;/p&gt;
&lt;p&gt;En la última versión es capaz de lanzar sistemas operativos que se encuentren en particiones más allá del cilindro 1024, cosa que hasta ahora no era capaz de hacer y era uno de sus mayores inconvenientes.&lt;/p&gt;
&lt;p&gt;&lt;a name="3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="2-el-kernel"&gt;2 EL KERNEL&lt;/h1&gt;
&lt;p&gt;&lt;a name="3.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="21-qué-es-el-kernel"&gt; 2.1 ¿QUÉ ES EL KERNEL?&lt;/h2&gt;
&lt;p&gt;El kernel es el sistema central de cualquier sistema operativo. Todos los sistemas operativos constan de una parte encargada de gestionar los diferentes procesos y las posibles comunicaciones entre el hardware de un ordenador con los programas que están en funcionamiento, entre otras y variadas tareas. Es, por ejemplo, el que facilita el acceso a datos en los distintos soportes posibles (CD-ROM, unidad de disco duro, unidad ZIP, etc.), o el que arranca el ordenador, o el que resetea todos los dispositivos que sean necesarios.&lt;/p&gt;
&lt;p&gt;La principal propiedad de un kernel es que todas estas operaciones de manejo de memoria o de dispositivos, son, desde un punto de vista de usuario, totalmente transparentes, esto es, no es necesario saber como trabajar a bajo nivel con el procesador para realizar las operaciones que sean necesarias, ya que será el kernel, a través de una serie de instrucciones ya implementadas el que lo hará por nosotros.&lt;/p&gt;
&lt;p&gt;Para todo aquel que llegado este punto desee continuar con la lectura de este apartado, quiero advertirle que si está buscando una ayuda rápida de nivel medio-avanzado, no espere encontrarla en esta web. Aquí únicamente trato las diferentes partes de que consta el kernel y su funcionamiento, pero no el uso del sistema operativo. Para el que esté interesado en este tema le recomiendo conseguir el libro &lt;a href="#MP98"&gt;[MP98]&lt;/a&gt;, el cual es una introducción a este gran sistema operativo para un usuario no iniciado en él.&lt;/p&gt;
&lt;p&gt;&lt;a name="3.1.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="211-estructura-del-sistema"&gt; 2.1.1 Estructura del sistema&lt;/h3&gt;
&lt;p&gt;Los kernels de Windows NT o Minix son de tipo micro-kernel, caracterizado porque proveen al sistema de un estado mínimo necesario de funcionalidad, cargando el resto de funciones necesarias en procesos autónomos e independientes unos de otros, comunicándose con este micro-kernel a través de una interfaz bien definida. Este tipo de estructura es más fácil de mantener y el desarrollo de nuevos componentes es mucho más simple, dando a su vez una mayor estabilidad al sistema. Por otro lado, debido a la estructura rígida del interfaz, estos tipos de kernel son mucho más complicados de reestructurar, y además, debido a las arquitecturas del hardware actual, el proceso de intercomunicación dentro del micro-kernel es mucho más que una simple llamada, por lo que hace que esta estructura sea más lenta que los kernels de tipo monolíticos o macro-kernels.&lt;/p&gt;
&lt;p&gt;No hay que olvidar que Linux ha sido desarrollado como un simple placer por desarrollar un sistema, el cual ha evolucionado gracias a diferentes programadores de todo el mundo. Debido a esto, una estructura de micro-kernel es prácticamente inconcebible, aunque esto no quiere decir que el kernel de linux sea una simple lista de instrucciones sin estructura alguna. A pesar de la estructura de macro-kernel, se ha intentado equiparar su velocidad utilizando código optimizado en velocidad (aunque complicado de entender), y se ha recuperado algunas de las mejores características de la estructura de micro-kernel, como puede ser la carga de los diferentes drivers necesarios como módulos independientes, siempre sin olvidar la estructura monolítica original.&lt;/p&gt;
&lt;p&gt;En el caso de Linux, la gran parte del kernel está escrito en C, existiendo también instrucciones en ensamblador, aunque estas ultimas se usan mayoritariamente en los procesos de arranque y en el control de co-procesador. A continuación se muestra una tabla con la cantidad de lineas en C y ensamblador que se usan aproximadamente en la versión 2.0 del kernel de Linux, el cual consta de unas 470.000 lineas de código (la versión 1.0 constaba “únicamente” de 165.000 lineas):&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Módulo&lt;/th&gt;
          &lt;th style="text-align: center;"&gt;Código C&lt;/th&gt;
          &lt;th style="text-align: center;"&gt;Ensamblador&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Dispositivos de Drivers&lt;/td&gt;
          &lt;td style="text-align: center;"&gt;377.000&lt;/td&gt;
          &lt;td style="text-align: center;"&gt;100&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Network&lt;/td&gt;
          &lt;td style="text-align: center;"&gt;25.000&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;VFS&lt;/td&gt;
          &lt;td style="text-align: center;"&gt;13.500&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;13 archivos de sistema&lt;/td&gt;
          &lt;td style="text-align: center;"&gt;50.000&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Inicio&lt;/td&gt;
          &lt;td style="text-align: center;"&gt;4.000&lt;/td&gt;
          &lt;td style="text-align: center;"&gt;2.800&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Co-Procesador&lt;/td&gt;
          &lt;td style="text-align: center;"&gt;3.550&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p align="CENTER"&gt;
  &lt;i&gt;Tabla 1 &amp;#8211; Proporciones de código fuente por componente&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;A modo de curiosidad cabe comentar el significado de la serie de números que acompañan al kernel, tanto compilado como al directorio que contiene las fuentes de éste, que, a pesar de no ser necesarios, se suelen incluir porque aportan una mayor información. Este conjunto de cifras tienen el formato X.X.XX y su significado no es más que la versión del kernel a la que corresponde dicho archivo, aunque no es simplemente así. Como se puede suponer, la variación en una unidad del primer grupo de cifras significa un cambio muy importante en el kernel, siendo ésta menor conforme el grupo de cifras que varía está más hacia la derecha. El último grupo de cifras tiene, además del significado anterior como indicador de versión, un significado añadido, que es el de que si la cifra es par, esa versión de kernel se considera como una versión estable, si, en cambio ésta es impar, se considera que la versión del kernel es una versión en fase &lt;em&gt;beta&lt;/em&gt; o de desarrollo.&lt;/p&gt;
&lt;p&gt;&lt;a name="3.1.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="212-procesos-y-tareas"&gt; 2.1.2 Procesos y Tareas&lt;/h3&gt;
&lt;p&gt;Desde el punto de vista de un proceso ejecutándose en Linux, el kernel es un proveedor de servicios. Cada proceso existe por separado y el espacio de memoria reservado a cada uno de ellos está protegido para que no pueda ser modificado. Desde este punto de vista, se está llevando a cabo un sistema multiproceso real (ver &lt;a href="#fig31"&gt;Figura 1&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Desde un punto de vista interno, la cosa es distinta. Solo hay un proceso en marcha en el ordenador que puede acceder a todos los recursos, el sistema operativo. El resto de tareas se llevarán a cabo como co-rutinas, las cuales, de una forma totalmente independiente, deciden por ellas mismas a qué tarea y cuándo pasarán el control. Debido a esto, un fallo en la programación del kernel podría bloquear todo el sistema.&lt;/p&gt;
&lt;img alt="Los procesos desde una vista interna y externa" class="" height="400" src="https://danielpecos.com/assets/2016/10/fig31.gif" width="730" /&gt;
&lt;p&gt;Figura 1 – Los procesos desde una vista interna y externa&lt;/p&gt;
&lt;p&gt;Cuando se ha iniciado un proceso, este puede adquirir distintos estados:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ejecución (Running)La tarea está activa y en ejecución. Este proceso solo puede ser interrumpido por una interrupción o una llamada del sistema.&lt;/li&gt;
&lt;li&gt;Rutina interrumpida (Interrupt Routine)Está rutina se activa con una interrupción del sistema (hardware), como puede ser un pulsación del teclado o una llamada del reloj.&lt;/li&gt;
&lt;li&gt;Llamada del Sistema (System Call)Las llamadas del sistema se activan debido a una interrupción producida por el software. Pueden suspender una tarea para llevar acabo un evento.&lt;/li&gt;
&lt;li&gt;En espera (Waiting)El proceso está en espera de un evento externo.&lt;/li&gt;
&lt;li&gt;Vuelta de la llamada del sistema (Return from system call)Este estado se adopta automáticamente después de una llamada del sistema y algunas interrupciones.&lt;/li&gt;
&lt;li&gt;Preparado (Ready)El proceso está en espera de ser atendido por el procesador, que está ocupado con otro proceso en ese momento.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estos estados no pueden ser adquiridos sin orden alguno o porque sí, sino que llevan un ciclo el cual debe ser respetado. Además, como veremos en el siguiente apartado, si observamos la &lt;a href="#fig33"&gt;Figura 3&lt;/a&gt; podremos observar que estos procesos no son “islas” independientes unas de otras, sino que hay una relación familiar entre ellos.&lt;figure class="wp-caption aligncenter" id="attachment_802"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Figura 2 - Estados posibles de un proceso" class=" " height="620" src="https://danielpecos.com/assets/2016/10/fig32.gif" width="768" /&gt;&lt;figcaption class="wp-caption-text"&gt;Figura 2 – Estados posibles de un proceso&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;En muchos sistemas operativos actuales se hace la distinción entre procesos y threads. Un thread es una especie de rama o camino en la ejecución de un programa que puede ser procesado en paralelo con otros threads.&lt;/p&gt;
&lt;p&gt;Linux no hace esa distinción. En el kernel, únicamente existe el concepto de un proceso, el cual puede compartir recursos con otros procesos. Por eso, una tarea es una generalización del concepto de un thread.&lt;/p&gt;
&lt;p&gt;&lt;a name="3.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="22-principales-estructuras-de-datos"&gt;2.2 PRINCIPALES ESTRUCTURAS DE DATOS&lt;/h2&gt;
&lt;p&gt;&lt;a name="3.2.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="221-la-estructura-tarea"&gt;2.2.1 La estructura Tarea&lt;/h3&gt;
&lt;p&gt;En un sistema multitarea es muy importante como una tarea está definida. Es, probablemente, una de los conceptos más importantes en un sistema operativo de este tipo. De hecho los algoritmos usados en Linux para su manejo constituyen la mayor parte del código del kernel.&lt;/p&gt;
&lt;p&gt;La descripción de las características de un proceso, vienen dadas por la estructura task_struct. Una de las variables usadas es la llamada state, que es la encargada de almacenar el estado actual de la tarea (los valores que puede tomar esta variable los podemos ver en la &lt;a href="#fig32"&gt;Figura 2&lt;/a&gt;). Otras variables son counter, que es la variable usada por el Programador (scheduler) para seleccionar el siguiente proceso, o signal que contiene un máscara de un bit (bit mask) para las señales recibidas por el proceso.&lt;/p&gt;
&lt;p&gt;Todos los procesos creados son introducidos en una lista doblemente enlazada gracias a los dos punteros siguientes (el comienzo y final de esta lista están almacenados en la variable global init_task):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-c"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #2838b0;"&gt;struct&lt;/span&gt; task_struct &lt;span style="color: #666;"&gt;*&lt;/span&gt;next_task&lt;span style="color: #888;"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #2838b0;"&gt;struct&lt;/span&gt; task_struct &lt;span style="color: #666;"&gt;*&lt;/span&gt;previous_task&lt;span style="color: #888;"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En un sistema Unix, los procesos no existen independientemente unos de otros, sino que cada proceso está relacionado con los demás, siguiendo una jerarquía familiar según que proceso lo haya creado, y que al igual que los anteriores están representados por:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-c"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #2838b0;"&gt;struct&lt;/span&gt; task_struct p_opptr&lt;span style="color: #888;"&gt;;&lt;/span&gt; &lt;span style="color: #888; font-style: italic;"&gt;/* Padre original */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #2838b0;"&gt;struct&lt;/span&gt; task_struct p_pptr&lt;span style="color: #888;"&gt;;&lt;/span&gt; &lt;span style="color: #888; font-style: italic;"&gt;/* Padre */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #2838b0;"&gt;struct&lt;/span&gt; task_struct p_cptr&lt;span style="color: #888;"&gt;;&lt;/span&gt; &lt;span style="color: #888; font-style: italic;"&gt;/* Hijo más joven */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;STRUCT TASK_STRUCT P_YSPTR&lt;span style="color: #888;"&gt;;&lt;/span&gt; &lt;span style="color: #888; font-style: italic;"&gt;/* YOUNGER SIBLING */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #2838b0;"&gt;struct&lt;/span&gt; task_struct p_osptr&lt;span style="color: #888;"&gt;;&lt;/span&gt; &lt;span style="color: #888; font-style: italic;"&gt;/* OLDER SIBLING */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img alt="Figura 3 - Relaciones entre procesos " class="size-full" height="500" src="https://danielpecos.com/assets/2016/10/fig33.gif" width="676" /&gt;
&lt;p&gt;Figura 3 – Relaciones entre procesos&lt;/p&gt;
&lt;p&gt;Otras características de esta estructura son, por ejemplo, que cada proceso posee su propia subestructura para el almacenamiento de datos, o que cada proceso posee un numero identificativo &lt;em&gt;pid&lt;/em&gt;, a partir del cual se nos facilitará el manejo de dicha tarea.&lt;/p&gt;
&lt;p&gt;&lt;a name="3.2.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="222-la-tabla-de-procesos"&gt; 2.2.2 La tabla de procesos&lt;/h3&gt;
&lt;p&gt;Cada proceso en ejecución que haya en el ordenador, ocupa una entrada en la tabla de proceso, la cual está restringida aen tamaño a NR_TASKS.&lt;/p&gt;
&lt;p&gt;En Linux, la tarea 0 (task[0]) es INIT_TASK, por lo que será la primera tarea cargada por el kernel. Esto es así por que ella será la encargada de lanzar el resto de tareas, como los demonios cargados en el inicio (p.ej. lpd) o el controlador del ratón (gpm).&lt;/p&gt;
&lt;p&gt;&lt;a name="3.2.3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="223-ficheros-e-inodes"&gt; 2.2.3 Ficheros e inodes&lt;/h3&gt;
&lt;p&gt;En los sistemas UNIX se ha hecho tradicionalmente una distinción entre la estructura de archivos y la de inodes. La estructura inode describe un archivo, aunque esto puede ser visto de diferentes formas: por ejemplo, la estructura de datos en el kernel y la del disco duro describen archivos, y, a pesar de ser distintas, se denominan inodes.&lt;/p&gt;
&lt;p&gt;Los inodes contienen información del archivo como propietario, derechos, etc. Cada fichero usado en el sistema se apareja con una única entrada de inode en el kernel, la cual describe diferentes atributos y propiedades del archivo al que corresponde.&lt;/p&gt;
&lt;p&gt;&lt;a name="3.3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="23-principales-mecanismos-del-kernel"&gt;2.3 PRINCIPALES MECANISMOS DEL KERNEL&lt;/h2&gt;
&lt;p&gt;&lt;a name="3.3.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="231-señales"&gt; 2.3.1 Señales&lt;/h3&gt;
&lt;p&gt;Desde los primeros sistemas UNIX, esta característica ha sido un de las que más ventajas le han aportado: el uso de señales. Éstas son usadas por el kernel para informar a los procesos sobre ciertos eventos, lo que permite abortarlos o cambiarlos de un estado a otro.&lt;/p&gt;
&lt;p&gt;Todas estas señales son enviadas con la función send_sig(), la cual admite el paso de tres parámetros, siendo éstos: el numero de la señal, una descripción del proceso que va a recibir la señal (o mejor dicho, un puntero a la entrada del proceso en cuestión en la tabla de procesos), y opcionalmente la prioridad del proceso que envía la señal. Este último argumento puede tener dos valores: desde el kernel, el cual puede enviar señales a cualquier proceso, o desde un proceso, para lo que es necesario que éste último tenga derechos de superusuario, o bien que tener el mismo UID y GID que el proceso al que se le envía la señal.&lt;/p&gt;
&lt;p&gt;&lt;a name="3.3.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="232-tuberías"&gt; 2.3.2 Tuberías&lt;/h3&gt;
&lt;p&gt;Las tuberías o pipes (… | …) son unos enlaces que se pueden realizar con cualquier shell, que unen las entradas de algunos programas con las salidas de los otros. Gracias a esto es posible usar gran parte de los comandos de Linux como filtros y, así, construir comandos más potentes a partir de comandos sencillos. Estas pipes, son consideradas como el método clásico de comunicación entre procesos.&lt;/p&gt;
&lt;p&gt;Otra variante de las tuberías son los FIFOs (First In, First Out), que se diferencian de las anteriores en que los FIFOs no son objetos temporales, sino que ellos pueden ser establecidos en un sistema de ficheros.&lt;/p&gt;
&lt;p&gt;&lt;a name="3.3.3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="233-interrupciones"&gt; 2.3.3 Interrupciones&lt;/h3&gt;
&lt;p&gt;Las interrupciones son usadas para permitir al hardware comunicarse con el sistema operativo. En Linux hay dos tipos de interrupciones: rápidas y lentas. Se podría decir que son tres tipos, considerando el tercero como las llamadas del sistema, también desencadenadas por interrupciones.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Interrupciones lentas: Son las más usuales. Se caracterizan porque se puede llevar a cabo otras interrupciones mientras éstas son tratadas. Después de que una interrupción lenta haya sido procesada, otras tareas adicionales, de carácter periódico, son llevadas a cabo por el sistema (como por ejemplo el scheduler). Un ejemplo típico de interrupción lenta es la interrupción del reloj.&lt;/li&gt;
&lt;li&gt;Interrupciones rápidas: Éstas se usan para tareas más cortas y menos complejas que las comentadas en el apartado anterior. Mientras este tipo de interrupciones son llevadas a cabo, el resto de interrupciones son bloqueadas, a menos que la propia rutina en ejecución las active. Un ejemplo de este tipo de rutinas es la interrupción de teclado.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En ambos tipos de interrupciones el proceso que se lleva a cabo es muy similar: primero todos los registros son salvados con SAVE_ALL y la interrupción envía una confirmación al controlador de interrupciones con ACK. En caso de un sistema con múltiples procesadores, se ejecuta una llamada a la rutina del kernel ENTER_KERNEL para sincronizar el acceso al kernel de los procesadores. Una vez se ha completado la interrupción, se ejecuta la rutina RESTORE&lt;em&gt;MOST que devuelve los registros guardados previamente a sus valores iniciales, llamando después a_iret&lt;/em&gt; para continuar con el proceso interrumpido.&lt;/p&gt;
&lt;p&gt;&lt;a name="3.3.4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="234-iniciando-el-sistema"&gt; 2.3.4 Iniciando el sistema&lt;/h3&gt;
&lt;p&gt;LILO es el encargado de encontrar el kernel de Linux y lo carga a la memoria, iniciándolo en el punto start:, que es donde se encuentra el código en ensamblador encargado de inicializar el hardware esencial. Una vez esto se ha llevado a cabo, el proceso se cambia a Modo Protegido. La instrucción en ensamblador&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-asm"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #785840;"&gt;jmp&lt;/span&gt; &lt;span style="color: #444;"&gt;0x1000&lt;/span&gt;&lt;span style="color: #888;"&gt;,&lt;/span&gt; &lt;span style="color: #b85820;"&gt;KERNEL_CS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;inicia un salto a la dirección de comienzo del código de 32 bit para el kernel del sistema operativo actual y continua desde startup_32:. En este punto se inician más secciones del hardware (en particular el MMU, el co-procesador y la tabla de descripciones de interrupciones) y el entorno requerido para la ejecución de funciones en C. Una vez esto se ha llevado a cabo, la primera función en C, start_kernel(), es llamada, la cual salvará todos los datos que el código ensamblador ha encontrado sobre el hardware hasta este punto. Entonces se inicializan todas las áreas del kernel.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-asm"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #785840;"&gt;asmlinkage&lt;/span&gt; &lt;span style="color: #b85820;"&gt;void&lt;/span&gt; &lt;span style="color: #b85820;"&gt;start_kernel&lt;/span&gt;&lt;span style="color: #888;"&gt;(&lt;/span&gt;&lt;span style="color: #b85820;"&gt;void&lt;/span&gt;&lt;span style="color: #888;"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="background-color: #a848a8;"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt; &lt;span style="color: #785840;"&gt;memory_start&lt;/span&gt; &lt;span style="background-color: #a848a8;"&gt;=&lt;/span&gt; &lt;span style="color: #b85820;"&gt;paging_init&lt;/span&gt;&lt;span style="color: #888;"&gt;(&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_start&lt;/span&gt;&lt;span style="color: #888;"&gt;,&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_end&lt;/span&gt;&lt;span style="color: #888;"&gt;)&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;trap_init&lt;/span&gt;&lt;span style="color: #888;"&gt;()&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;init_IRQ&lt;/span&gt;&lt;span style="color: #888;"&gt;()&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;sched_init&lt;/span&gt;&lt;span style="color: #888;"&gt;()&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;time_init&lt;/span&gt;&lt;span style="color: #888;"&gt;()&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;parse_options&lt;/span&gt;&lt;span style="color: #888;"&gt;(&lt;/span&gt;&lt;span style="color: #b85820;"&gt;command_line&lt;/span&gt;&lt;span style="color: #888;"&gt;)&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;init_modules&lt;/span&gt;&lt;span style="color: #888;"&gt;()&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;memory_start&lt;/span&gt; &lt;span style="background-color: #a848a8;"&gt;=&lt;/span&gt; &lt;span style="color: #b85820;"&gt;console_init&lt;/span&gt;&lt;span style="color: #888;"&gt;(&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_start&lt;/span&gt;&lt;span style="color: #888;"&gt;,&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_end&lt;/span&gt;&lt;span style="color: #888;"&gt;)&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;memory_start&lt;/span&gt; &lt;span style="background-color: #a848a8;"&gt;=&lt;/span&gt; &lt;span style="color: #b85820;"&gt;pci_init&lt;/span&gt;&lt;span style="color: #888;"&gt;(&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_start&lt;/span&gt;&lt;span style="color: #888;"&gt;,&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_end&lt;/span&gt;&lt;span style="color: #888;"&gt;)&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;memory_start&lt;/span&gt; &lt;span style="background-color: #a848a8;"&gt;=&lt;/span&gt; &lt;span style="color: #b85820;"&gt;kmalloc_init&lt;/span&gt;&lt;span style="color: #888;"&gt;(&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_start&lt;/span&gt;&lt;span style="color: #888;"&gt;,&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_end&lt;/span&gt;&lt;span style="color: #888;"&gt;)&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;sti&lt;/span&gt;&lt;span style="color: #888;"&gt;()&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;memory_start&lt;/span&gt; &lt;span style="background-color: #a848a8;"&gt;=&lt;/span&gt; &lt;span style="color: #b85820;"&gt;inode_nit&lt;/span&gt;&lt;span style="color: #888;"&gt;(&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_start&lt;/span&gt;&lt;span style="color: #888;"&gt;,&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_end&lt;/span&gt;&lt;span style="color: #888;"&gt;)&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;memory_start&lt;/span&gt; &lt;span style="background-color: #a848a8;"&gt;=&lt;/span&gt; &lt;span style="color: #b85820;"&gt;file_table_init&lt;/span&gt;&lt;span style="color: #888;"&gt;(&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_start&lt;/span&gt;&lt;span style="color: #888;"&gt;,&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_end&lt;/span&gt;&lt;span style="color: #888;"&gt;)&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;memory_start&lt;/span&gt; &lt;span style="background-color: #a848a8;"&gt;=&lt;/span&gt; &lt;span style="color: #b85820;"&gt;name_cache_init&lt;/span&gt;&lt;span style="color: #888;"&gt;(&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_start&lt;/span&gt;&lt;span style="color: #888;"&gt;,&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_end&lt;/span&gt;&lt;span style="color: #888;"&gt;)&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;mem_init&lt;/span&gt;&lt;span style="color: #888;"&gt;(&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_start&lt;/span&gt;&lt;span style="color: #888;"&gt;,&lt;/span&gt;&lt;span style="color: #b85820;"&gt;memory_end&lt;/span&gt;&lt;span style="color: #888;"&gt;)&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;buffer_init&lt;/span&gt;&lt;span style="color: #888;"&gt;()&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #785840;"&gt;ipc_init&lt;/span&gt;&lt;span style="color: #888;"&gt;()&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt; &lt;span style="color: #388038;"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;El proceso actualmente en curso es el proceso 0, el cual ejecuta la función init(), que será la encargada de llevar a cabo el resto de la inicialización, cargando los demonios bdflush y kswap. Entonces se hace una llamada a &lt;em&gt;setup&lt;/em&gt;, que será la encargada de montar el sistema de archivos root.&lt;/p&gt;
&lt;p&gt;&lt;a name="3.3.5"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="235-interrupción-del-reloj"&gt; 2.3.5 Interrupción del Reloj&lt;/h3&gt;
&lt;p&gt;Todos los sistemas operativos necesitan una forma de medir el tiempo y de mantener una hora en el sistema. El sistema de medida se implementa normalmente haciendo interrupciones en intervalos ya predefinidos. Bajo Linux, el tiempo se mide en ticks desde que el sistema es arrancado. Un tick representa 10 milisegundos, así que la interrupción del reloj se efectúa 100 veces por segundo.&lt;/p&gt;
&lt;p&gt;El tiempo se almacena en la variable&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-asm"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #785840;"&gt;unsigned&lt;/span&gt; &lt;span style="color: #b85820;"&gt;long&lt;/span&gt; &lt;span style="color: #b85820;"&gt;volatile&lt;/span&gt; &lt;span style="color: #b85820;"&gt;jiffies&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;la cual deberá ser modificado únicamente por esta interrupción. Sin embargo, este método provee solo de un base interna de tiempo.&lt;/p&gt;
&lt;p&gt;La interrupción del reloj es llamada relativamente a menudo y, por eso, es un tanto dependiente del tiempo.&lt;/p&gt;
&lt;p&gt;La rutina de interrupción en la versión 2.0, simplemente actualiza la variable jiffies y marca como activa una parte de la interrupción del reloj, la cual es llamada por el sistema más adelante, y se desarrolla el resto del trabajo. Como pueden ocurrir varias interrupciones de reloj antes de activar el resto de rutinas, la interrupción del reloj también puede incrementar las variables&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-asm"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #785840;"&gt;unsigned&lt;/span&gt; &lt;span style="color: #b85820;"&gt;long&lt;/span&gt; &lt;span style="color: #b85820;"&gt;lost_ticks&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #888; font-style: italic;"&gt;&lt;/span&gt;&lt;span style="color: #785840;"&gt;unsigned&lt;/span&gt; &lt;span style="color: #b85820;"&gt;long&lt;/span&gt; &lt;span style="color: #b85820;"&gt;lost_ticks_system&lt;/span&gt;&lt;span style="color: #888; font-style: italic;"&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;para que así estas puedan ser evaluadas al final de la rutina.&lt;/p&gt;
&lt;p&gt;lost_ticks cuenta las interrupciones de reloj producidas desde la ultima activación; lost_ticks_system cuenta, en cambio el numero de interrupciones transcurridas mientras el proceso de interrupción estaba en Modo de Sistema.&lt;/p&gt;
&lt;p&gt;A mi parecer opino que un comentario más extenso de este apartado se sale excesivamente del ideal de este apartado, que no es más que una leve introducción al funcionamiento de los algoritmos y procesos más importantes usados en el kernel. Si alguien quiere más información sobre éste, o algunos de los apartados incluidos en el punto 3.3,le aconsejo que consulte el libro &lt;a href="#BBDKMV97"&gt;[BBD+97]&lt;/a&gt;, capítulo 3, el único inconveniente es para aquellos que no se desenvuelvan bien con el inglés, aunque si alguien está interesado es un muy buen libro para conocer el funcionamiento del kernel con mayor precisión.&lt;/p&gt;
&lt;p&gt;&lt;a name="3.4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="24-el-sistema-de-archivos-de-linux"&gt;2.4 EL SISTEMA DE ARCHIVOS DE LINUX&lt;/h2&gt;
&lt;p&gt;Actualmente es normal encontrar un PC con su disco duro con distintas particiones, cada una de ellas con un sistema de ficheros distinta. Esta variedad es debida a que prácticamente cada sistema operativo tiene su propio sistema de ficheros, alegando que éste es más rápido y seguro que el resto.&lt;/p&gt;
&lt;p&gt;Puede que una de las razones por las que Linux ha tenido tanta popularidad, sea por la cantidad de sistemas de ficheros distintos que soporta (FAT16 y FAT32 de Windows, NTFS de WinNT, HPFS de OS/2, ISO 9660 y Joliet, que son los estándares más comunes en CD, etc.). El soporte de esta gran cantidad de sistema de ficheros es debido a la interfaz unificada que usa el kernel llamada Virtual File System Switch (VFS) o más sencillamente Virtual File System. Este sistema virtual de ficheros es el encargado de cada proceso pueda manejar información desde los distintos ficheros sin necesidad de saber donde se encuentran, o de saber si pertenecen a un tipo de sistema de ficheros u otro.&lt;/p&gt;
&lt;p&gt;Toda la información obtenida en este apartado ha sido obtenida a partir del libro &lt;a href="#BBDKMV97"&gt;[BBD+97]&lt;/a&gt; y de la página web &lt;a href="#Rusling98"&gt;[Rusling98]&lt;/a&gt;, los cuales recomiendo para todo aquel que esté interesado en profundizar en este tema. Como nota comentar que, como ya hemos dicho antes, &lt;a href="#BBDKMV97"&gt;[BBD+97]&lt;/a&gt; está en inglés, y la web &lt;a href="#Rusling98"&gt;[Rusling98]&lt;/a&gt; aunque el original está en inglés, se puede encontrar una traducción al castellano, aunque en estas fechas (Mayo 2000) se encuentra en fase de desarrollo, por lo que hay secciones traducidas parcialmente, así como también otras no traducidas.&lt;/p&gt;
&lt;p&gt;&lt;a name="3.4.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="241-conocimientos-básicos"&gt;2.4.1 Conocimientos básicos&lt;/h3&gt;
&lt;p&gt;La CPU no es el único elemento “inteligente” que existe en la computadora. Cada elemento hardware que la compone lleva incluido su propio controlador (por ejemplo el ratón y el teclado son controlados por el chip SuperIO, el disco IDE por el controlador IDE o el SCSI por la controladora SCSI). Esto implica que el acceso a cada uno de estos dispositivos se realizará de forma distinta, por lo que cada utilidad debería incluir unos controladores. En vez de eso, los controladores se incluyen en el kernel como unas librerías conocidas como device drivers (controlador de dispositivo), de tal forma que se puede acceder a todos los dispositivos así configurados, sin necesidad de conocer cómo funciona el dispositivo a bajo nivel. De esta forma se consigue una abstracción en lo que se refiere al acceso a dispositivos.&lt;/p&gt;
&lt;p&gt;En Linux, como en Unix, a los distintos sistemas de ficheros que el sistema puede usar no se accede por identificadores de dispositivo (como un número o nombre de unidad) pero, en cambio se combinan en una estructura jerárquica de árbol que representa el sistema de ficheros como una entidad única y sencilla. Linux añade cada sistema de ficheros nuevo en este árbol de sistemas de ficheros cuando se monta. Todos los sistemas de ficheros, de cualquier tipo, se montan sobre un directorio y los ficheros del sistema de ficheros son el contenido de ese directorio. Este directorio se conoce como directorio de montaje o punto de montaje. Cuando el sistema de ficheros se desmonta, los ficheros propios del directorio de montaje son visibles de nuevo.&lt;/p&gt;
&lt;p&gt;Además, gracias a esta forma de trabajo, no es necesario implementar el código necesario para acceder a los distintos dispositivos, sino que cada proceso se comunica con los dispositivos que necesite a través del acceso que le es proporcionado a través del VFS, como se puede observar en la figura &lt;a href="#fig61"&gt;siguiente&lt;/a&gt;.&lt;figure class="wp-caption aligncenter" id="attachment_804"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Figura 4 - Estructura del VFS" class=" " height="550" src="https://danielpecos.com/assets/2016/10/fig61.gif" width="744" /&gt;&lt;figcaption class="wp-caption-text"&gt;Figura 4 – Estructura del VFS&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;El primer sistema de ficheros diseñado específicamente para Linux, el sistema de Ficheros Extendido, o EXT, fue introducido en Abril de 1992 y solventó muchos problemas pero era aún falto de rapidez. Así, en 1993, el Segundo sistema de Ficheros Extendido, o EXT2, fue añadido al kernel como sistema principal de ficheros.&lt;/p&gt;
&lt;p&gt;En ese momento un importante desarrollo tuvo lugar en Linux. El sistema de ficheros real se separó del sistema operativo y servicios del sistema a favor de un interfaz conocido como el Sistema de Ficheros Virtual, o VFS. VFS permite a Linux soportar muchos, incluso muy diferentes, sistemas de ficheros, cada uno presentando un interfaz software común a través del VFS. Todos los detalles del sistema de ficheros de Linux son traducidos mediante software de forma que todo el sistema de ficheros parece idéntico al resto del kernel de Linux y a los programas que se ejecutan en el sistema. La capa del sistema de Ficheros Virtual de Linux permite al usuario montar de forma transparente diferentes sistemas de ficheros al mismo tiempo.&lt;/p&gt;
&lt;p&gt;El sistema de Ficheros Virtual está implementado de forma que el acceso a los ficheros es tan rápido y eficiente como sea posible. También debe asegurar que los ficheros y los datos que contiene son correctos. Estos dos requisitos pueden ser incompatibles entre si. El VFS de Linux mantiene una antememoria con información de cada sistema de ficheros montado y en uso. Se debe tener mucho cuidado al actualizar correctamente el sistema de ficheros ya que los datos contenidos en las antememorias se modifican cuando se crean, escriben y borran ficheros y directorios. Si se pudieran ver las estructuras de datos del sistema de ficheros dentro del kernel en ejecución, se podría ver los bloques de datos que se leen y escriben por el sistema de ficheros. Las estructuras de datos, que describen los ficheros y directorios que son accedidos serian creadas y destruidas y todo el tiempo los controladores de los dispositivo estarían trabajando, buscando y guardando datos. La antememoria o caché más importantes es la llamada Buffer Cache, que está integrada entre cada sistema de ficheros y su dispositivo de bloque. Tal y como se accede a los bloques se ponen en el Buffer Cache y se almacenan en varias colas dependiendo de sus estados. El Buffer Cache no sólo mantiene buffers de datos, también ayuda a administrar el interfaz asíncrono con los controladores de dispositivos de bloque.&lt;/p&gt;
&lt;p&gt;&lt;a name="3.4.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="242-el-virtual-file-system"&gt;2.4.2 El Virtual File System&lt;/h3&gt;
&lt;p&gt;Como en el sistema de ficheros EXT2, cada fichero, directorio y demás se representan en el VFS por un y sólo un inodo VFS. La información en cada inodo VFS se construye a partir de información del sistema de ficheros por las rutinas específicas del sistema de ficheros. Los inodos VFS existen sólo en la memoria del núcleo y se mantienen en el caché de inodos VFS tanto tiempo como sean útiles para el sistema. Entre otra información, los inodos VFS contienen los siguientes campos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;device: Este es el identificador de dispositivo del dispositivo que contiene el fichero o lo que este inodo VFS represente,&lt;/li&gt;
&lt;li&gt;inode number: Este es el número del inodo y es único en este sistema de ficheros. La combinación de device y inode number es única dentro del Sistema de Ficheros Virtual,&lt;/li&gt;
&lt;li&gt;mode: Como en EXT2 este campo describe qué representa este inodo VFS y los permisos de acceso (r-lectura, w-escritura, x-ejecución para propietario, grupo y otros usuarios),&lt;/li&gt;
&lt;li&gt;user ids: Los identificadores de propietario,&lt;/li&gt;
&lt;li&gt;times: Los tiempos de creación, modificación y escritura,&lt;/li&gt;
&lt;li&gt;block size: El tamaño de bloque en bytes para este fichero, por ejemplo 1024 bytes,&lt;/li&gt;
&lt;li&gt;inode operations: Un puntero a un bloque de direcciones de rutina. Estas rutinas son específicas del sistema de ficheros y realizan operaciones para este inodo, por ejemplo, truncar el fichero que representa este inodo.&lt;/li&gt;
&lt;li&gt;count: El número de componentes del sistema que están usando actualmente este inodo VFS. Un contador de cero indica que el inodo está libre para ser descartado o rehusado,&lt;/li&gt;
&lt;li&gt;lock: Este campo se usa para bloquear el inodo VFS, por ejemplo, cuando se lee del sistema de ficheros,&lt;/li&gt;
&lt;li&gt;dirty: Indica si se ha escrito en este inodo, si es así, el sistema de ficheros necesitará modificarlo,&lt;/li&gt;
&lt;li&gt;file system specific information.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a name="3.4.3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="243-el-sistema-de-ficheros-ext2"&gt;2.4.3 El sistema de ficheros Ext2&lt;/h3&gt;
&lt;p&gt;El Segundo sistema de ficheros Extendido de Linux ha sido el que mayor éxito ha cosechado, siendo básico en cualquier distribución de este S.O. Su construcción se basa en que los datos son guardados en bloques, los cuales son, en principio, del mismo tamaño, aunque pueden variar de un sistema a otro (ya que esta elección del tamaño se hace al crear el sistema con mke2fs). Cuando se almacena un fichero, se hace de tal forma que ocupe un número entero de bloques, quedando gran parte de la capacidad del último bloque usado bastante desperdiciada, a no ser que el fichero de datos ocupe exactamente un numero de bloques. No todos los bloques del sistema de ficheros contienen datos, algunos deben usarse para mantener la información que describe la estructura del sistema de ficheros. EXT2 define la topología del sistema de ficheros describiendo cada fichero del sistema con una estructura de datos inodo. Un inodo describe que bloques ocupan los datos de un fichero y también los permisos de acceso del fichero, las horas de modificación del fichero y el tipo del fichero. Cada fichero en el sistema de ficheros EXT2 se describe por un único inodo y cada inodo tiene un único número que lo identifica. Los inodos del sistema de ficheros se almacenan juntos en tablas de inodos. Los directorios EXT2 son simplemente ficheros especiales (ellos mismos descritos por inodos) que contienen punteros a los inodos de sus entradas de directorio.&lt;/p&gt;
&lt;p&gt;El sistema de ficheros EXT2 divide las particiones lógicas que ocupa en Grupos de Bloque (Block Groups). Cada grupo duplica información crítica para la integridad del sistema de ficheros ya sea valiéndose de ficheros y directorios como de bloques de información y datos. Esta duplicación es necesaria por si ocurriera un desastre y el sistema de ficheros necesitara recuperarse.&lt;/p&gt;
&lt;p&gt;En el sistema de ficheros EXT2, el inodo es el bloque de construcción básico; cada fichero y directorio del sistema de ficheros es descrito por un y sólo un inodo. Los inodos EXT2 para cada Grupo de Bloque se almacenan juntos en la tabla de inodos con un mapa de bits que permite al sistema seguir la pista de inodos reservados y libres. Un inodo EXT2, entre otra información, contiene los siguientes campos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;mode: Esto mantiene dos partes de información; qué inodo describe y los permisos que tienen los usuarios. Para EXT2, un inodo puede describir un ficheros, directorio, enlace simbólico, dispositivo de bloque, dispositivo de carácter o FIFO.&lt;/li&gt;
&lt;li&gt;owner Information: Los identificadores de usuario y grupo de los dueños de este fichero o directorio. Esto permite al sistema de ficheros aplicar correctamente el tipo de acceso,&lt;/li&gt;
&lt;li&gt;size: El tamaño en del fichero en bytes,&lt;/li&gt;
&lt;li&gt;timestamps: La hora en la que el inodo fue creado y la última hora en que se modificó,&lt;/li&gt;
&lt;li&gt;datablocks: Punteros a los bloques que contienen los datos que este inodo describe. Los doce primeros son punteros a los bloques físicos que contienen los datos descritos por este inodo y los tres últimos punteros contienen más y más niveles de indirección. Por ejemplo, el puntero de doble indirección apunta a un bloque de punteros que apuntan a bloques de punteros que apuntan a bloques de datos. Esto significa que ficheros menores o iguales a doce bloques de datos en longitud son más fácilmente accedidos que ficheros más grandes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Los inodos EXT2 pueden describir ficheros de dispositivo especiales. No son ficheros reales pero permiten que los programas puedan usarlos para acceder a los dispositivos. Todos los ficheros de dispositivo de /dev están ahí para permitir a los programas acceder a los dispositivos de Linux. Por ejemplo el programa mount toma como argumento el fichero de dispositivo que el usuario desee montar.&lt;/p&gt;
&lt;p&gt;El Superbloque contiene una descripción del tamaño y forma base del sistema de ficheros. La información contenida permite al administrador del sistema de ficheros usar y mantener el sistema de ficheros. Normalmente sólo se lee el Superbloque del Grupo de Bloque 0 cuando se monta el sistema de ficheros pero cada Grupo de Bloque contiene una copia duplicada en caso de que se corrompa sistema de ficheros. Entre otra información contiene:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Magic Number: Esto permite al software de montaje comprobar que es realmente el Superbloque para un sistema de ficheros EXT2. Para la versión actual de EXT2 éste es 0xEF53.&lt;/li&gt;
&lt;li&gt;Revision Level: Los niveles de revisión mayor y menor permiten al código de montaje determinar si este sistema de ficheros soporta o no características que sólo son disponibles para revisiones particulares del sistema de ficheros. También hay campos de compatibilidad que ayudan al código de montaje determinar que nuevas características se pueden usar con seguridad en ese sistema de ficheros,&lt;/li&gt;
&lt;li&gt;Mount Count and Maximum Mount Count: Juntos permiten al sistema determinar si el sistema de ficheros fue comprobado correctamente. El contador de montaje se incrementa cada vez que se monta el sistema de ficheros y cuando es igual al contador máximo de montaje muestra el mensaje de aviso «maximal mount count reached, running e2fsck is recommended»,&lt;/li&gt;
&lt;li&gt;Block Group Number: El número del Grupo de Bloque que tiene la copia de este Superbloque,&lt;/li&gt;
&lt;li&gt;Block Size: El tamaño de bloque para este sistema de ficheros en bytes, por ejemplo 1024 bytes,&lt;/li&gt;
&lt;li&gt;Blocks per Group: El número de bloques en un grupo. Como el tamaño de bloque éste se fija cuando se crea el sistema de ficheros,&lt;/li&gt;
&lt;li&gt;Free Blocks: EL número de bloques libres en el sistema de ficheros,&lt;/li&gt;
&lt;li&gt;Free Inodes: El número de Inodos libres en el sistema de ficheros,&lt;/li&gt;
&lt;li&gt;First Inode: Este es el número de inodo del primer inodo en el sistema de ficheros. El primer inodo en un sistema de ficheros EXT2 raíz seria la entrada directorio para el directorio ‘/’.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a name="3.4.4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="244-sistema-de-ficheros-proc"&gt;2.4.4 Sistema de Ficheros Proc&lt;/h3&gt;
&lt;p&gt;El sistema de ficheros /proc muestra realmente la potencia del Sistema Virtual de Ficheros. Este sistema no existe en realidad. Éste como el resto de sistemas de ficheros, se registra en el VFS. Sin embargo, cuando el VFS hace llamadas al /proc, éste crea los ficheros que le son pedidos con información sobre el kernel. Por ejemplo la llamada al fichero /proc/devices genera a partir de las estructuras del kernel, un archivo describiendo sus dispositivos.&lt;/p&gt;
&lt;p&gt;El sistema de ficheros /proc representa una ventana hacia el interior del kernel.&lt;/p&gt;
&lt;p&gt;&lt;a name="4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="3-la-shell"&gt;3 La Shell&lt;/h1&gt;
&lt;p&gt;&lt;a name="4.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="31-qué-es-la-shell"&gt;3.1 ¿Qué es la shell?&lt;/h2&gt;
&lt;p&gt;Hablando de forma genérica, la shell es cualquier interfaz del sistema UNIX, que coge de la &lt;em&gt;entrada estándar&lt;/em&gt; las instrucciones introducidas por el usuario, las traduce a instrucciones que el sistema operativo es capaz de interpretar, y devuelve generalmente por la &lt;em&gt;salida estándar&lt;/em&gt;, los resultados de las instrucciones que el sistema ha ejecutado.&lt;/p&gt;
&lt;p&gt;El trabajo básico de la shell es traducir las instrucciones que se introducen en la linea de comandos en instrucciones que el sistema operativo sea capaz de entender. Depende de cómo se realice esta tarea y de las características que éste ofrezca al usuario para realizar una tarea, una shell será más potente que otra si el usuario es capaz de introducir la misma tarea de una forma más rápida que en otra.&lt;/p&gt;
&lt;p&gt;&lt;a name="4.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="32-historia-de-las-shells-de-unix"&gt;3.2 Historia de las Shells de UNIX&lt;/h3&gt;
&lt;p&gt;La independencia de la shell respecto al sistema operativo, ha permitido desde los primeros pasos de UNIX, la creación de múltiples de shells, aunque solo algunas han conseguido un uso “popular”.&lt;/p&gt;
&lt;p&gt;La primera shell más importante fue la &lt;em&gt;Bourne shell&lt;/em&gt;, nombre que adquirió de su creador Steven Bourne. Ésta fue incluida en la primera versión popular de UNIX, la Versión 7, sobre el año 1987. El nombre que recibe la Bourne en el sistema operativo es &lt;em&gt;sh&lt;/em&gt;. A pesar de los cambios que UNIX pueda haber sufrido, la shell Bourne sigue siendo una de las más populares, dependiendo hoy en día de ella gran cantidad de utilidades.&lt;/p&gt;
&lt;p&gt;La primera gran alternativa a esta shell fue la &lt;em&gt;C shell&lt;/em&gt;, o también &lt;em&gt;csh&lt;/em&gt;. Su creador, Bill Joy en la Universidad de California en Berkeley, la escribió como una parte del &lt;strong&gt;Berkeley System Distribution (BSD)&lt;/strong&gt;, versión de UNIX que salió un par de años después de la versión 7. Esta shell está incluida en todas las versiones de UNIX más recientes.&lt;/p&gt;
&lt;p&gt;La C shell recibe su nombre debido a la semejanza de sus comandos a las instrucciones del lenguaje C, lo cual hace a la shell más fácil de aprender para los programadores.&lt;/p&gt;
&lt;p&gt;En los últimos años han continuado surgiendo diversas shell, cuya popularidad ha ido en aumento. La más notable es la &lt;em&gt;Korn shell&lt;/em&gt;, la cual incorpora las mejores cualidades de la shell Bourne y de la C. El único inconveniente de esta shell es que se distribuye de forma comercial. Debido a esta característica otra shell ha tenido un mayor auge, la &lt;em&gt;bash shell&lt;/em&gt;, de características semejantes a la korn, pero de distribución gratuita.&lt;/p&gt;
&lt;p&gt;&lt;a name="4.3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="33-the-bourne-again-shell"&gt;3.3 The Bourne Again Shell&lt;/h3&gt;
&lt;p&gt;La Bourne Again Shell, o también &lt;em&gt;bash&lt;/em&gt;, fue creada para uso del proyecto &lt;a href="#2.2"&gt;GNU&lt;/a&gt;. La intención era que bash fuera la shell estándar de sistema GNU. Su “nacimiento” fue el Domingo 10 de Enero de 1988, y su creador fue Brian Fox, el cual continuó con el desarrollo de esta shell hasta 1993. En 1989 Chet Ramey fue el encargado de numerosas correcciones en la shell, e incluyó muchas nuevas características a ésta, convirtiéndose en el desarrollador oficial a partir de 1993&lt;/p&gt;
&lt;p&gt;La principal característica de esta shell, y seguramente, la que le ha dado un mayor auge, al menos en un primer golpe, es el &lt;strong&gt;modo de edición en linea de comandos&lt;/strong&gt;. Con este modo es mucho más fácil volver atrás y corregir errores de escritura en los comandos en vez que tenerlos que volver a introducir completamente. La otra gran ventaja de esta shell frente a las otras es el &lt;strong&gt;control del trabajo&lt;/strong&gt;, con lo que el usuario es capaz de parar, comenzar y pausar cualquier numero de comandos a la vez.&lt;/p&gt;
&lt;p&gt;El resto de características de esta shell, son, en su mayoría, para programadores, como por ejemplo la inclusión de nuevas variables para la personalización del entorno, instrucciones avanzadas de I/O o mayor cantidad de estructuras de control, entre otras muchas. Todas estas cualidades sobre la shell Bash, pueden encontrarse en el libro &lt;a href="#NR95"&gt;[NR95]&lt;/a&gt;, que trata todos estos aspectos y muchos más, incluyendo programación en &lt;em&gt;Shell Script&lt;/em&gt;, o uso de características avanzadas de esta potente shell.&lt;/p&gt;
&lt;p&gt;&lt;a name="5"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="4-linux-en-red"&gt;4 LINUX EN RED&lt;/h1&gt;
&lt;p&gt;&lt;a name="5.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="41-qué-es-una-red-de-computadoras"&gt;4.1 ¿QUÉ ES UNA RED DE COMPUTADORAS?&lt;/h2&gt;
&lt;p&gt;La idea de red es probablemente tan vieja como la de las telecomunicaciones. Consideremos a la gente que vivía en la edad de piedra, donde los tambores se habrían utilizado para transmitir mensajes entre individuos. Supongamos que el cavernícola A quiere invitar al cavernícola B a un partido de lanzamiento de rocas contra el otro, pero viven demasiado lejos como para que B oiga a A golpear su tambor. ¿Cuáles son las opciones de A? Podría…&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Ir a la choza de B.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hacerse con un tambor más grande.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pedirle a C, que vive a mitad camino entre los dos, que retransmita el mensaje.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La última opción es lo que se llama una red.&lt;/p&gt;
&lt;p&gt;Así pues, definimos una red como un conjunto de &lt;em&gt;nodos&lt;/em&gt; que son capaces de comunicarse entre si, a menudo contando con los servicios de varios nodos especializados que conmutan datos entre participantes. Los nodos suelen ser ordenadores, aunque no es necesario; podemos considerar también terminales X o impresoras inteligentes como nodos. Pequeñas aglomeraciones de nodos también llamadas &lt;em&gt;instalaciones&lt;/em&gt; (del inglés &lt;em&gt;site&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;La comunicación sería imposible sin algún tipo de lenguaje o código. En las redes de ordenadores, estos lenguajes son los llamados colectivamente &lt;em&gt;protocolos&lt;/em&gt;. Sin embargo, no se debe pensar en protocolos escritos, sino más bien en el código de comportamiento altamente formalizado que se observa cuando se encuentran los jefes de estado. De un modo muy similar, los protocolos usados por las redes de ordenadores son normas muy estrictas para el intercambio de mensajes entre dos o más nodos.&lt;/p&gt;
&lt;p&gt;Por otra parte, cuando hablamos de redes de ordenadores, a menudo significa hablar de Linux. Linux es un sistema operativo bajo el cual, la tecnología de internet nació.La capacidad de Linux es la misma que pueda tener cualquier sistema de UNIX. Debido a que la tecnología de internet nació en UNIX, otros sistemas operativos están a años luz de lo que UNIX puede ofrecer. Este sistema operativo no es el único con capacidad de red, pero si está considerado como uno de los mejores. Ha habido sistemas operativos tipo UNIX gratuitos para PC, como 386BSD, FreeBSD y Linux. Linux es un sistema operativo que lucha por ofrecer toda la funcionalidad que requieren los estándares POSIX, para sistemas operativos tipo UNIX, aunque es una reimplementación completa, desde cero.&lt;/p&gt;
&lt;p&gt;Linux está cubierto por la Licencia Pública General (GPL) GNU, que permite la libre distribución del código. Superando sus males de joven, y atraído por una siempre creciente base de programas de aplicación gratuitos, se está convirtiendo rápidamente en el sistema operativo de elección de muchos usuarios de PC, favorecido en gran parte por una fuerte circulación de dicho código libre a través de Internet.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="42-redes-uucp"&gt;4.2 REDES UUCP&lt;/h2&gt;
&lt;p&gt;UUCP es una abreviatura de &lt;em&gt;Unix-to-Unix Copy&lt;/em&gt;. Comenzó siendo un paquete de programas para transferir ficheros sobre líneas serie, programar esas transferencias, e iniciar la ejecución de programas en el lugar remoto. Ha experimentado grandes cambios desde su primera implementación a finales de los 70, pero aún es bastante espartano en los servicios que ofrece. Su principal aplicación es todavía en redes de área metropolitanas (WAN) basadas en los enlaces telefónicos.&lt;/p&gt;
&lt;p&gt;UUCP comenzó a desarrollarse por los Laboratorios Bell en 1977 para la comunicación entre sus laboratorios de desarrollo de Unix. A mediados de 1978, esta red ya conectaba a más de 80 centros. Se ejecutaban aplicaciones de correo electrónico, así como de impresión remota; sin embargo, el uso principal del sistema era distribuir software nuevo y mejoras. Hoy día UUCP ya no está destinado exclusivamente para el entorno UNIX. Hay versiones disponibles para diversas plataformas.&lt;/p&gt;
&lt;p&gt;Una de las principales desventajas de las redes UUCP es su bajo ancho de banda. Por un lado, el equipo telefónico establece un límite rígido en la tasa máxima de transferencia. Por otro lado los enlaces UUCP raramente son conexiones permanentes; en su lugar, los nodos se llaman entre si a intervalos regulares. Es por ello, que la mayoría del tiempo que le lleva a un mensaje viajar por una red UUCP permanece atrapado en el disco de algún nodo, esperando al establecimiento de la próxima conexión.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.2.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="421-funcionamineto-de-una-red-uucp"&gt;4.2.1 Funcionamineto de una red UUCP&lt;/h3&gt;
&lt;p&gt;La idea que hay detrás de UUCP es bastante simple: como su nombre indica, basicamente copia ficheros de un nodo a otro, pero también permite realizar ciertas acciones en el nodo remoto.&lt;/p&gt;
&lt;p&gt;Supongamos que nos está permitido que nuestra máquina acceda a un nodo hipotético llamado &lt;strong&gt;swim&lt;/strong&gt;, y le vamos a hacer ejecutar el comando de impresión &lt;em&gt;lpr&lt;/em&gt; para nosotros. Entonces, podríamos escribir lo siguiente en nuestra línea de comandos para que nos imprima este documento en &lt;strong&gt;swim&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #b04040;"&gt;$uux&lt;/span&gt; -r swim!lpr !RedesLinux.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Esto hace que &lt;em&gt;uux&lt;/em&gt;, un comando del repertorio UUCP, planifique un &lt;em&gt;trabajo&lt;/em&gt; para &lt;strong&gt;swim&lt;/strong&gt;. Este trabajo consta del fichero de entrada, &lt;em&gt;RedesLinux.txt&lt;/em&gt;, y la petición de enviar este fichero a &lt;em&gt;lpr&lt;/em&gt;. La opción &lt;em&gt;-r&lt;/em&gt; indica a &lt;em&gt;uux&lt;/em&gt; que no llame al sistema remoto inmediatamente, sino que almacene el trabajo hasta que establezca la próxima conexión. A esto se le llama &lt;em&gt;spooling&lt;/em&gt;, o almacenamiento en la cola.&lt;/p&gt;
&lt;p&gt;Otra propiedad de UUCP es que permite reenviar trabajos y ficheros a través de varios nodos, suponiendo que éstos colaboren. Asumiremos que &lt;strong&gt;swim&lt;/strong&gt;, el nodo del ejemplo anterior, tiene un enlace UUCP con &lt;strong&gt;groucho&lt;/strong&gt;, el cual mantiene un gran número de aplicaciones UNIX. Para transferir el fichero &lt;em&gt;tripware-1.0.tar.gz&lt;/em&gt; hasta nuestra máquina deberíamos indicarlo así:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-shell"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;uucp -mr swim!groucho!~/security/tripware-1.0.tar.gz trip.tgz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;El trabajo creado pedirá a &lt;strong&gt;swim&lt;/strong&gt; que traiga el fichero desde &lt;strong&gt;groucho&lt;/strong&gt;, y lo envie hasta nuestra máquina, donde UUCP lo almacenará en &lt;em&gt;trip.tgz&lt;/em&gt; y nos notificará por correo la llegada del fichero. Esto ocurrirá en tres pasos. Primero, nuestra máquina envía el fichero a &lt;strong&gt;swim&lt;/strong&gt;. La siguiente vez que &lt;strong&gt;swim&lt;/strong&gt; establezca contacto con &lt;strong&gt;groucho&lt;/strong&gt;, se transferirá el fichero de &lt;strong&gt;groucho&lt;/strong&gt; a &lt;strong&gt;swim&lt;/strong&gt;. El último paso es la transferencia del mismo desde &lt;strong&gt;swim&lt;/strong&gt; hasta nuestra máquina.&lt;/p&gt;
&lt;p&gt;Actualmente, los servicios más importantes que proporcionan las redes UUCP son el correo electrónico y las noticias, aunque también es el medio elegido por muchos servidores de ficheros que ofrecen servicio público. Generalmente podremos acceder a ellos llamando con UUCP, accediendo como usuario invitado, y transferiéndose los archivos desde un área de ficheros públicamente accesible. Estas cuentas de invitado tienen, a menudo, un nombre de acceso y password.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="43-redes-tcpip"&gt;4.3 REDES TCP/IP&lt;/h2&gt;
&lt;p&gt;&lt;a name="5.3.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="431-tcpip-frente-a-uucp"&gt;4.3.1 TCP/IP frente a UUCP&lt;/h3&gt;
&lt;p&gt;Aunque UUCP puede resultar una elección razonable para enlaces de red mediante llamada de bajo coste, hay muchas situaciones en las que su técnica de almacenamiento y reenvío se muestra demasiado inflexible, por ejemplo en Redes de Área Local (LANs). Estas redes están compuestas generalmente por un pequeño número de máquinas localizadas en el mismo edificio, o incluso en la misma planta, que están interconectadas para proporcionar un entorno de trabajo homogéneo. Es típico que se quiera compartir ficheros, nodos, o ejecutar aplicaciones distribuidas en diferentes máquinas.&lt;/p&gt;
&lt;p&gt;Estas tareas requieren una aproximación completamente diferente a las redes. En lugar de reenviar ficheros completos con una descripción del trabajo, todos los datos se fragmentan en pequeñas unidades (paquetes), que se envían inmediatamente al nodo destino, donde son reensamblados. Este tipo de redes se llaman &lt;em&gt;redes de intercambio de paquetes&lt;/em&gt;. Entre otras cosas, esto permite ejecutar aplicaciones interactivas a través de la red. El coste de esto supone, por supuesto una complejidad adicional al software.&lt;/p&gt;
&lt;p&gt;La solución que han adoptado los sistemas UNIX (y muchos no UNIX) es conocida como TCP/IP.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.3.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="432-introducción-a-las-redes-tcpip"&gt;4.3.2 Introducción a las redes TCP/IP&lt;/h3&gt;
&lt;p&gt;El TCP/IP tiene sus orígenes en un proyecto de investigación fundado en Estados Unidos por DARPA (Defense Advanced Research Projects Agency – &lt;em&gt;Agencia de Proyectos Avanzados de Investigación en Defensa&lt;/em&gt;) en 1969. Ésta fue una red experimental, la red ARPANET, que pasó a ser operativa en 1975, después de haber demostrado ser un éxito.&lt;/p&gt;
&lt;p&gt;En 1983, fue adoptado como estándar el nuevo conjunto de protocolos TCP/IP, y todos los nodos de la red pasaron a utilizarlo. Cuando ARPANET por fin dio paso a Internet (con la propia ARPANET integrándose en su existencia en 1990), el uso del TCP/IP se había extendido a redes más allá de la propia Internet. Las más destacables son las redes locales UNIX, pero con la llegada de los equipos telefónicos digitales rápidos, como la RDSI, también tiene un futuro prometedor como transporte en redes telefónicas.&lt;/p&gt;
&lt;p&gt;Tomaremos como ejemplo una red típica: la de una universidad, concretamente la hipotética Universidad Groucho Marx (GMU). En esta universidad, la mayoría de los departamentos mantienen sus propias redes de área local, mientras que algunos comparten una, y otros poseen varias. Todos ellos están interconectados, y están enganchados a Internet a través de un solo enlace de alta velocidad.&lt;/p&gt;
&lt;p&gt;Supongamos una máquina Linux conectada a una LAN de nodos UNIX en el Departamento de Matemáticas, siendo su nombre &lt;strong&gt;erdos&lt;/strong&gt;, que intenta conectar con un nodo del Departamento de Físicas, por ejemplo &lt;strong&gt;quark&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;En línea de comandos, introduciremos nuestro nombre de acceso y nuestra clave. Entonces dispondremos de una shell de &lt;strong&gt;quark&lt;/strong&gt;, sobre la que podemos escribir como si estuvieramos sentados en la consola del sistema. Tras salir del shell volveremos a tener la línea de comandos de nuestra propia máquina. Acabamos de utilizar una de las aplicaciones de interactividad instantánea que proporciona TCP/IP: el acceso remoto.&lt;/p&gt;
&lt;p&gt;Mientras estemos conectados a &lt;strong&gt;quark&lt;/strong&gt;, podríamos también desear ejecutar una aplicación X. Para ello, si ponemos en marcha ahora nuestra aplicación, esta contactará con nuestro servidor X en lugar de &lt;strong&gt;quark&lt;/strong&gt;, y mostrará todas las ventanas en nuestro munitor. Por supuesto, esto requiere que estemos ejecutando X11 en &lt;strong&gt;erdos&lt;/strong&gt;. La clave está en que TCP/IP permite a &lt;strong&gt;quark&lt;/strong&gt; y a &lt;strong&gt;erdos&lt;/strong&gt; enviarse paquetes X11 en ambos sentidos para darnos la impresión de que estamos en un único sistema. La red es casi transparente en este caso.&lt;/p&gt;
&lt;p&gt;Otra aplicación muy importante en redes TCP/IP es NFS, abreviatura de Network File System (Sistema de Ficheros de Red). Es otra forma de hacer transparente la red, porque básicamente permite montar jerarquías de directorios de otras máquinas, de modo que aparezcan como sistemas de ficheros locales. Por ejemplo, todos los directorios “home”, o personales, de los usuarios pueden estar en una máquina servidor central, desde la cual montan los directorios el resto de máquinas de la LAN. El efecto de esto es que los usuarios pueden acceder a cualquier máquina, y encontrarse a sí mismos en el mismo directorio. De forma similar, es posible instalar aplicaciones que requieren gran cantidad en disco en una única máquina, y exportar estos directorios a otras máquinas.&lt;/p&gt;
&lt;p&gt;Por supuesto, esto son sólo ejemplos de lo que se puede hacer en un entorno de redes TCP/IP: las posibilidades son casi ilimitadas.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="44-hardware"&gt;4.4 HARDWARE&lt;/h2&gt;
&lt;p&gt;&lt;a name="5.4.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="441-ethernets"&gt;4.4.1 Ethernets&lt;/h3&gt;
&lt;p&gt;El tipo de hardware más utilizado en LANs es lo que comunmente conocemos como &lt;em&gt;Ethernet&lt;/em&gt;. Consta de un solo cable con los nodos colgando de él a través de conectores, clavijas o transceptores. Las ethernet simples, son baratas de instalar, lo que unido a un flujo de transferencia neto de 10 Megabits por segundo, avala gran parte de su popularidad.&lt;/p&gt;
&lt;p&gt;Hay tres tipos de Ethernet, en función de su cable, llamadas &lt;em&gt;gruesas&lt;/em&gt;, &lt;em&gt;finas&lt;/em&gt; y de &lt;em&gt;par trenzado&lt;/em&gt;. Tanto el fino como el grueso utilizan cable coaxial, variando en el grosor y el modo de conectar este cable a los nodos. El Ethernet fino emplea conectores “BCN” con forma de T, que se pinchan en el cable y se enganchan a los conectores de la parte trasera del ordenador. El Ethernet grueso requiere que se realice un pequeño agujero en el cable, y conecte un transceptor utilizando un “nodo vampiro”. Entonces se puede conectar uno o más nodos al transceptor. Los cables Ethernet fino y grueso pueden alcanzar una distancia de 200 y 500 metros, respectivamente, y es por ello que se les llama también 10base-2 y 10base-5. El par trenzado usa un cable hecho de dos hilos de cobre como las que se encuentran en las instalaciones telefónicas ordinarias, pero generalmente necesitan hardware adicional. También se conoce como 10base-T.&lt;/p&gt;
&lt;p&gt;A pesar de que añadir un nodo a una Ethernet gruesa es un poco lioso, eso no tirará abajo la red; sin embargo, para añadir un nodo en una instalación de cable fino, se debe interrumpir el servicio de red al menos por unos minutos ya que se debe cortar el cable para insertar el conector. Es por ello que para instalaciones de gran escala es más apropiado el Ethernet grueso.&lt;/p&gt;
&lt;p&gt;Uno de los inconvenientes de la tecnología Ethernet es su limitada longitud de cable, que imposibilita cualquier uso fuera de las LANs. Sin embargo, pueden enlazarse varios segmentos de Ethernet entre si utilizando repetidores, puentes o encaminadores (&lt;em&gt;repeaters&lt;/em&gt;, &lt;em&gt;bridges&lt;/em&gt; y &lt;em&gt;routers&lt;/em&gt;, respectivamente). Los repetidores simplemente copian las señales entre dos o más segmentos, de forma que todos los segmentos juntos actúan como si fuese una única Ethernet. Debido a requisitos de tiempos, no puede haber más de cuatro repetidores entre cualquier par de nodos de la red. Los puentes y encaminadores son más sofisticados, analizan los datos de entrada y los reenvían sólo si el nodo no está en la Ethernet local.&lt;/p&gt;
&lt;p&gt;Ethernet funciona como un sistema de bus, donde un nodo puede mandar paquetes (o &lt;em&gt;tramas&lt;/em&gt;) de hasta 1500 bytes a otro nodo de la misma Ethernet. Cada nodo se direcciona por una dirección de bytes grabada en el firmware de su tarjeta Ethernet. Estas direcciones se especifican generalmente como una secuencia de números hexadecimales de dos dígitos separados por dos puntos, como en &lt;strong&gt;aa:bb:cc:dd:ee:ff&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Una trama enviada por una estación la ven todas las estaciones conectadas, pero sólo el nodo destinatario la toma y procesa. Si dos estaciones intentan emitir al mismo tiempo, se produce una &lt;em&gt;colisión&lt;/em&gt;, que se resuelve por parte de las dos estaciones abortando el envío, y reintentándolo al cabo de un rato.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.4.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="442-otros-tipos-de-hardware"&gt;4.4.2 Otros tipos de hardware&lt;/h3&gt;
&lt;p&gt;En instalaciones mayores como la Universidad de Groucho Marx, Ethernet no es el único tipo de red que puede utilizarse. En la UNiversidad de Groucho Marx cada LAN de un departamento está enlazada a la troncal del campus, que es un cable de fibra óptica funcionando en FDDI (Fiber Distributed Data Interface). FDDI emplea un enfoque totalmente diferente para transmitir datos, que básicamente implica el envío de un número de &lt;em&gt;testigos&lt;/em&gt;, de modo que una estación sólo pueda enviar una trama si captura un testigo. La principal ventaja de FDDI es una velocidad de hasta 100 Mbps, y una longitud de cable máxima de hasta 200 km.&lt;/p&gt;
&lt;p&gt;Para enlaces de red de larga distancia, se utiliza frecuentemente un tipo distinto de equipos, que se basa en el estándar X.25. Muchas de las llamadas Redes Públicas de Datos ofrecen este servicio. X.25 requiere un hardware especial, llamado Ensamblador/Desensamblador de Paquetes o PAD. X.25 define un conjunto de protocolos de red de derecho propio, pero sin embargo se usa frecuentemente para conectar redes bajo TCP/IP y otros protocolos. Ya que los paquetes IP no se pueden convertir de forma simple en X.25 (y viceversa), éstos deben ser encapsulados en paquetes X.25 y enviados a través de la red.&lt;/p&gt;
&lt;p&gt;Otras técnicas implican el uso de las lentas pero baratas líneas serie para acceder bajo demanda. Esto requiere aun otros protocolos para la transmisión de paquetes, como SLIP o PPP.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.5"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="45-protocolos"&gt;4.5 PROTOCOLOS&lt;/h2&gt;
&lt;p&gt;&lt;a name="5.5.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="451-el-protocolo-ip-internet-protocol"&gt;4.5.1 El protocolo IP (&lt;em&gt;internet protocol&lt;/em&gt;)&lt;/h3&gt;
&lt;p&gt;En instalaciones grandes como la Universidad Groucho Marx, habrá varias Ethernets separadas, que han de conectarse de alguna manera. En la GMU, el departamento de matemáticas tiene dos Ethernets: una red de máquinas rápidas para profesores y graduados, y otra con máquinas más lentas para estudiantes. Ambas redes están colgadas de la red troncal FDDI del campus.&lt;/p&gt;
&lt;p&gt;Esta conexión se gestiona con un nodo dedicado, denominado &lt;em&gt;pasarela&lt;/em&gt;, o &lt;em&gt;gateway&lt;/em&gt; (&lt;a href="#f5"&gt;Figura 5&lt;/a&gt;), que maneja los paquetes entrantes y salientes copiándolos entre las dos Ethernets y el cable de fibra óptica. Por ejemplo, si nos encontramos en el Departamento de Matemáticas, y queremos acceder a &lt;strong&gt;quark&lt;/strong&gt; situada en la LAN del Departamento de Físicas desde nuestra máquina Linux, el software de red no puede mandar paquetes a &lt;strong&gt;quark&lt;/strong&gt; directamente, porque no está en la misma Ethernet. Por tanto, tenemos que confiar en la pasarela para que actúe como retransmisor. La pasarela (llamemosla &lt;strong&gt;sophus&lt;/strong&gt;) reenvía entonces estos paquetes a su pasarela homóloga &lt;strong&gt;niels&lt;/strong&gt; del Departamento de Físicas, usando la troncal, y por fin &lt;strong&gt;niels&lt;/strong&gt; los entrega a la máquina destino.&lt;/p&gt;
&lt;img alt="Figura 5 - Esquema de red con pasarelas" class=" " height="794" src="https://danielpecos.com/assets/2016/10/pasarela.gif" width="1058" /&gt;
&lt;center&gt;
  Figura 5 &amp;#8211; Esquema de red con pasarelas
&lt;/center&gt;
&lt;p&gt;Este esquema de envío de datos al nodo remoto se llama &lt;em&gt;encaminamiento&lt;/em&gt;, y en este contexto a los paquetes se les denomina a menudo &lt;em&gt;datagramas&lt;/em&gt;. Para facilitar las cosas, el intercambio de datagramas está gobernado por un único protocolo que es independiente del hardware utilizado: IP.&lt;/p&gt;
&lt;p&gt;El principal beneficio del IP es que conviene a redes físicamente distintas en una red aparentemente homogénea. A esto se le llama &lt;em&gt;internetworking&lt;/em&gt; (interconexión de redes), y a la resultante “meta-red” se la denomina &lt;em&gt;internet&lt;/em&gt;. Observese aqui la sutil diferencia entre &lt;em&gt;una&lt;/em&gt; internet y _La_Internet. El último es el nombre oficial de una internet global particular.&lt;/p&gt;
&lt;p&gt;Claro que el IP también necesita un esquema de direccionamiento independiente del hardware. Esto se consigue asignando a cada nodo un número único de 32 bits, que define su &lt;em&gt;dirección IP&lt;/em&gt;. Una dirección IP se escribe normalmente como 4 números en decimal, uno por cada división de 8 bits, y separados por puntos. Por ejemplo, &lt;strong&gt;quark&lt;/strong&gt; podría tener una dirección IP &lt;strong&gt;0x954C0C04&lt;/strong&gt;, que se escribiría como &lt;strong&gt;145.76.12.4&lt;/strong&gt;. A este formato se le llama notación de puntos.&lt;/p&gt;
&lt;p&gt;Ahora tenemos tres tipos distintos de direcciones: primero, tenemos el nombre del nodo, &lt;strong&gt;quark&lt;/strong&gt;, después tenemos las direcciones IP, y por fin están las direcciones hardware, como la dirección Ethernet de 6 bytes. De alguna forma todas ellas deben relacionarse, de modo que cuando escribamos &lt;em&gt;rlogin quark&lt;/em&gt;, se le pueda pasar la dirección IP al software de red; y cuando el nivel IP envíe datos a la Ethernet del Departmento de Físicas, de algún modo tiene que encontrar a qué dirección Ethernet corresponde la dirección IP. Lo cual no resuta trivial.&lt;/p&gt;
&lt;p&gt;Estos pasos para encontrar las direcciones IP se llaman &lt;em&gt;resolución de nombres&lt;/em&gt;, para mapear nombres de nodo con direcciones IP, y &lt;em&gt;resolución de direcciones&lt;/em&gt; para hacer corresponder estas últimas con direcciones hardware.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.5.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="452-ip-en-lineas-serieslip"&gt;4.5.2 IP en lineas serie, &lt;em&gt;SLIP&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;Para lineas serie se usa frecuentemente el estandar “de facto” conocido como SLIP o Serial Line IP (IP sobre linea serie). Una modificacion del SLIP es el CSLIP, o SLIP Comprimido, que realiza compresion de las cabeceras IP para aprovechar el bajo ancho de banda que proporcionan los enlaces serie. Un protocolo serie distinto es el PPP, o Point-to-Point Protocol (Protocolo Punto a Punto). PPP dispone de muchas mas caracteristicas que SLIP, incluyendo una fase de negociacion del enlace. Su principal ventaja sobre SLIP es, sin embargo, que no se limita a transportar datagramas IP, sino que se diseñó para permitir la transmision de cualquier tipo de datagramas.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.5.3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="453-el-protocolo-de-control-de-transmisióntcp"&gt;4.5.3 EL protocolo de control de transmisión, &lt;em&gt;TCP&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;Pero la historia no se acaba con el envio de datagramas de un nodo a otro. Si deseamos acceder a &lt;strong&gt;quark&lt;/strong&gt;, necesitamos disponer de una conexion fiable entre su proceso rlogin en erdos y el proceso de shell en &lt;strong&gt;quark&lt;/strong&gt;. Para ello, la informacion enviada en uno y otro sentido debe dividirse en paquetes en el origen, y ser reensamblada en un flujo de caracteres por el receptor. Esto que parece trivial, implica varias tareas complejas.&lt;/p&gt;
&lt;p&gt;Una cosa importante a saber sobre IP es que, por si solo, no es fiable. Supongamos que diez personas de nuestro Ethernet comienzan a transferirse la última versión de XFree86 del servidor de FTP de GMU. La cantidad de tráfico generada por esto podría ser excesiva para que la maneje la pasarela, porque es demasiado lenta, y anda escasa de memoria. Si en ese momento enviamos un paquete a &lt;strong&gt;quark&lt;/strong&gt;, &lt;strong&gt;sophus&lt;/strong&gt; podría tener agotado el espacio del buffer durante un instante y por tanto no sería capaz de reenviarlo. IP resuelve este problema simplemente descartándolo. El paquete se pierde irrevocablemente, lo cual traslada la responsabilidad de comprobar la integridad y exactitud de los datos a los nodos extremos, y su retransmision en caso de error.&lt;/p&gt;
&lt;p&gt;De esto se encarga otro protocolo, TCP, o &lt;em&gt;Transmission Control Protocol&lt;/em&gt; (Protocolo de Control de la Transmision), que construye un servicio fiable por encima de IP. La propiedad esencial de TCP es que usa IP para darnos la impresion de una conexión simple entre los procesos en nuestro equipo y la máquina remota, de modo que tenemos que preocuparnos de como y sobre que ruta viajan realmente nuestros datos. Una conexión TCP funciona basicamente como una tubería de doble sentido en la que ambos procesos pueden escribir y leer; podemos imaginarla como una conversacion telefonica.&lt;/p&gt;
&lt;p&gt;TCP identifica los extremos de tal conexión por las direcciones IP de los dos nodos implicados, y el número de los llamados puertos de cada nodo. Los puertos se pueden ver como puntos de enganche para conexiones de red. Si vamos a explotar el ejemplo del teléfono un poco más, uno puede comparar las direcciones IP con los prefijos de área (los números representarían ciudades), y los números de puerto con los códigos locales (números que representan teléfonos de personas concretas).&lt;/p&gt;
&lt;p&gt;Mediante &lt;em&gt;rlogin&lt;/em&gt;, la aplicación cliente (&lt;em&gt;rlogin&lt;/em&gt;) abre un puerto en erdos, y se conecta al puerto 513 de &lt;strong&gt;quark&lt;/strong&gt;, en el que se sabe que está escuchando el servidor &lt;em&gt;rlogind&lt;/em&gt;. Esto establece una conexión TCP. Usando esta conexión, &lt;em&gt;rlogind&lt;/em&gt; realiza el procedimiento de autorización, y entonces muestra la shell. La entrada y salida estándar de la shell se redirigen a la conexión TCP, de modo que cualquier cosa que escribamos a &lt;em&gt;rlogin&lt;/em&gt; en nuestra máquina será pasado a traves del canal TCP y entregado a la shell como entrada estandar.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.5.4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="454-protocolo-de-mensajes-de-control-de-internet-icmp"&gt;4.5.4 Protocolo de mensajes de control de internet (&lt;em&gt;ICMP&lt;/em&gt;)&lt;/h3&gt;
&lt;p&gt;El protocolo de mensajes de control de Internet o ICMP, lo usa el software de gestión de red para comunicar mensajes de error entre nodos. Por ejemplo, si estamos en la maquina &lt;strong&gt;erdos&lt;/strong&gt; y hacemos un &lt;em&gt;telnet&lt;/em&gt; al puerto 12345 del nodo &lt;strong&gt;quark&lt;/strong&gt; y no hay procesos escuchando en ese puerto, recibirá un mensaje ICMP de “puerto inalcanzable”.&lt;/p&gt;
&lt;p&gt;Hay mas mensajes ICMP, muchos de ellos referidos a condiciones de error. Sin embargo, hay uno interesante que es el de redirección. Lo genera el módulo de encaminamiento al detectar que otro nodo está usándolo como pasarela, a pesar de existir una ruta mucho más corta. Por ejemplo, tras configurarse la tabla de encaminamiento de &lt;strong&gt;sophus&lt;/strong&gt;, esta puede estar incompleta, conteniendo rutas a través del encaminador por defecto &lt;strong&gt;gcc1&lt;/strong&gt;. Por lo tanto, los paquetes enviados inicialmente a &lt;strong&gt;quark&lt;/strong&gt; irán por &lt;strong&gt;gcc1&lt;/strong&gt; en lugar de &lt;strong&gt;niels&lt;/strong&gt;. En este caso &lt;strong&gt;gcc1&lt;/strong&gt; notificará a &lt;strong&gt;sophus&lt;/strong&gt; que está usando una ruta costosa y reenviará el datagrama a &lt;strong&gt;niels&lt;/strong&gt;, al mismo tiempo que devolverá un mensaje ICMP de redirección a &lt;strong&gt;sophus&lt;/strong&gt; informándole de la nueva ruta.&lt;/p&gt;
&lt;p&gt;Pero aprece un nuevo problema, pues la redirección de ICMP y el protocolo RIP no incluyen mecanismos de verificación de la autenticidad de los mensajes. Esto permite a los piratas corromper el tráfico de la red mediante mensajes ICMP. Por ello, algunas versiones del código de Linux tratan los mensajes de redirección que afectan a rutas de red como si fueran redirecciones de rutas a nodos.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.5.5"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="455-la-libreria-de-sockets"&gt;4.5.5 La libreria de Sockets&lt;/h3&gt;
&lt;p&gt;En sistemas operativos UNIX, el software que realiza todas las tareas y protocolos descritos anteriormente es generalmente parte del kernel, y por tanto también del de Linux. El interface de programación más común en el mundo UNIX es la Librería de Sockets de Berkeley, &lt;em&gt;Berkeley Socket Library&lt;/em&gt;. Su nombre proviene de una analogía popular que ve los puertos como enchufes, y conectarse a un puerto como enchufarse. Proporciona la llamada &lt;em&gt;bind&lt;/em&gt; para especificar un nodo remoto, un protocolo de transporte, y un servicio al que un programa pueda conectarse o escuchar (usando &lt;em&gt;connect&lt;/em&gt;, &lt;em&gt;listen&lt;/em&gt;, y &lt;em&gt;accept&lt;/em&gt;). La librería de sockets, sin embargo, es algo más general, ya que proporciona no sólo una clase de sockets basados en TCP/IP (los sockets AF_INET), sino también una clase que maneja conexiones locales a la máquina (la clase AF_UNIX). Algunas implementaciones pueden manejar también otras clases.&lt;/p&gt;
&lt;p&gt;En Linux, la librería de sockets es parte de la librería C estándar &lt;em&gt;libc&lt;/em&gt;. Actualmente soporta los sockets AF_INET y AF_UNIX, pero se hacen esfuerzos para incorporar el soporte de los protocolos de red de Novell, de modo que se añadirían eventualmente una o más clases de sockets.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.6"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="46-historia-de-las-redes-con-linux"&gt;4.6 HISTORIA DE LAS REDES CON LINUX&lt;/h2&gt;
&lt;p&gt;Siendo el resultado del esfuerzo concentrado de programadores de todo el mundo, Linux no habría sido posible sin la red global. Así que no sorprende que ya en los primeros pasos del desarrollo, varias personas comenzaran a trabajar para dotarlo de capacidades de red. Casi desde el principio existía ya una implementación de UUCP para Linux; y fue en el otoño de 1992 cuando se comenzó a desarrollar el soporte de TCP/IP, cuando Ross Biro y otros crearon lo que ahora se conoce como Net-1.&lt;/p&gt;
&lt;p&gt;Después de que Ross dejara el desarrollo activo en Mayo de 1993, Fred van Kempen comenzó a trabajar en una nueva implementación, reescribiendo gran parte del código. Este esfuerzo continuado se conoce como Net-2. En el verano de 1992 salió la primera versión pública de Net-2d (como parte del kernel 0.99.10), y ha sido mantenida y ampliada por varias personas, muy especialmente por Alan Cox, dando lugar al Net-2Debugged. Tras una dura corrección y numerosas mejoras en el código, cambió su nombre a Net-3 después de que saliese Linux 1.0. Esta es la versión del código de red que se incluye actualmente en las versiones oficiales del kernel.&lt;/p&gt;
&lt;p&gt;Net-3 ofrece controladores de dispositivo para una amplia variedad de tarjetas Ethernet, así como SLIP (para enviar tráfico de red sobre líneas serie), y PLIP (para líneas paralelo). Con Net-3, Linux tiene una implementación de TCP/IP que se comporta muy bien en entornos de red de área local, mostrándose superior a algunos de los Unix comerciales para PCs. El desarrollo se mueve actualmente hacia la estabilidad necesaria para su funcionamiento fiable en nodos de Internet.&lt;/p&gt;
&lt;p&gt;Además de estas facilidades, hay varios proyectos en marcha que mejoraran la versatilidad de Linux. Un controlador para PPP (el protocolo punto a punto, otra forma de enviar tráfico de red sobre líneas serie) esta empezando a tener gran auge. Alan Cox también ha implementado un controlador para el protocolo IPX de Novell, pero el esfuerzo para un paquete de red completo compatible con el de Novell se ha paralizado por el momento, debido a la negativa de Novell a facilitar la documentación necesaria. Otro proyecto con gran éxito es &lt;em&gt;samba&lt;/em&gt;, un servidor de NetBIOS gratis para Unix, escrito por Andrew Tridgell.&lt;/p&gt;
&lt;p&gt;Otra implementación más de red TCP/IP es la realizada por Matthias Urlichs, quien escribió un controlador de RDSI para Linux y FreeBSD. Para ello, integró algo del código de red de BSD en el kernel de Linux.&lt;/p&gt;
&lt;p&gt;Sin embargo, Net-3 acabaría por llegar para quedarse (aunque en la ctualidad se está sustituyendo por Net-4). Alan es también el autor de una implementación del protocolo AX.25 usado por radioaficionados.&lt;/p&gt;
&lt;p&gt;Sin duda, la modularización, aun desarrollándose para el kernel, traerá también nuevos impulsos al código de red. Los módulos nos permiten añadir controladores al kernel en tiempo de ejecución.&lt;/p&gt;
&lt;p&gt;Aunque todas estas diferentes implementaciones de red intentan dar el mismo servicio, hay grandes diferencias entre ellas a nivel de kernel y dispositivos. Además, no podremos configurar un sistema con un kernel Net-2e con utilidades de Net-2d o Net-3, y viceversa. Esto sólo se aplica a comandos que tienen mucho que ver con el funcionamiento interno del kernel; las aplicaciones y los comandos de red comunes como &lt;em&gt;rlogin&lt;/em&gt; o &lt;em&gt;telnet&lt;/em&gt; se ejecutan en cualquiera de ellos.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.7"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="47-seguridad-del-sistema"&gt;4.7 SEGURIDAD DEL SISTEMA&lt;/h2&gt;
&lt;p&gt;Un aspecto muy importante de la administración de sistemas en un entorno de red es proteger al sistema y a sus usuarios de intrusos. Los sistemas administrados sin ningún cuidado ofrecen muchos huecos a los malintencionados: los ataques van desde averiguar las claves hasta acceder a nivel de Ethernet, y el daño causado puede ser desde mensajes de correo falsos hasta perdida de datos o violación de la privacidad de los usuarios.&lt;/p&gt;
&lt;p&gt;La seguridad del sistema comienza con una buena administracion del mismo. Esto incluye comprobar la propiedad y permisos de todos los ficheros y directorios vitales, monitorizar el uso de cuentas privilegiadas, etc. También es conveniente usar un sistema de claves que fuerce ciertas reglas en las claves de los usuarios que las hagan difíciles de adivinar. El sistema de claves ocultas (shadow password), por ejemplo, requiere que una clave tenga al menos cinco letras, y contienen tanto mayúsculas como minúsculas y números.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.8"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="48-el-sistema-de-nombres-dns"&gt;4.8 EL SISTEMA DE NOMBRES DNS&lt;/h2&gt;
&lt;p&gt;&lt;a name="5.8.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="481-resolucion-de-nombres"&gt;4.8.1 Resolucion de nombres&lt;/h3&gt;
&lt;p&gt;El direccionamiento en TCP/IP se basa en numeros de 32 bits. Esos números no son fáciles de recordar, mientras que sí lo es el nombre que se le asigna a cada máquina, como &lt;strong&gt;gauss&lt;/strong&gt; o &lt;strong&gt;strange&lt;/strong&gt;. Existe una aplicación que es capaz de traducir nombres a direcciones IP, y es conocida como sistema de resolucion de nombres o DNS.&lt;/p&gt;
&lt;p&gt;Una aplicación que desee encontrar la dirección IP correspondiente a una máquina de la que conoce su nombre, no tiene que incluir rutinas para ello, ya que en las librerías estándares (&lt;em&gt;libc&lt;/em&gt;) existen ya rutinas preparadas, como &lt;em&gt;gethostbyname&lt;/em&gt; o &lt;em&gt;gethostbyaddr&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;En otros sistemas se encuentran en otras librerías distintas de la &lt;em&gt;libc&lt;/em&gt; pero esto no sucede en Linux. Al conjunto de rutinas que hacen estas tareas se les conoce como “sistema de resolución”.&lt;/p&gt;
&lt;p&gt;En una red pequeña no es difícil mantener una tabla &lt;em&gt;/etc/hosts&lt;/em&gt; en cada máquina, y modificarla al agregar, eliminar o modificar nodos. Pero resulta complicado cuando hay muchas máquinas ya que, en principio, cada una necesita una copia de &lt;em&gt;/etc/hosts&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Una solución a esto es compartir esta y otras bases de datos con el NIS, o &lt;em&gt;Sistema de Informacion de Red&lt;/em&gt;, desarrollado por Sun Microsystems y conocido también como &lt;em&gt;páginas amarillas&lt;/em&gt;. En este caso, las bases de datos como la de &lt;em&gt;/etc/hosts&lt;/em&gt; se mantienen en un servidor NIS central y los clientes accederán a ellas de forma transparente al usuario. En todo caso, esta solución sólo es aconsejable para redes pequeñas o medianas, ya que implican mantener un fichero central &lt;em&gt;/etc/hosts&lt;/em&gt; que puede crecer mucho, y luego distribuirlo entre los servidores NIS.&lt;/p&gt;
&lt;p&gt;En Internet, se comenzo almacenando la informacion en un fichero similar al &lt;em&gt;hosts&lt;/em&gt;, mantenido por el NIC, y obtenido regularmente por los demas servidores. Cuando la red creció comenzaron los problemas de sobrecarga de servidores, ademas de que el NIC tenía que ocuparse de todos los nombres de los nodos de Internet, y evitar la duplicidad de los mismos.&lt;/p&gt;
&lt;p&gt;Por esto, en 1984 se diseñó y adoptó oficialmente un nuevo sistema, el DNS o sistema de nombres por dominios, diseñado por Paul Mockapetris.&lt;/p&gt;
&lt;p&gt;&lt;a name="5.8.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="482-introducción-al-dns"&gt;4.8.2 Introducción al DNS&lt;/h3&gt;
&lt;p&gt;DNS organiza los nombres de los nodos en una jerarquía de dominios. Un dominio es una colección de nodos relacionados de alguna manera, como estar en la misma red o pertenecer a una misma organizacion o pais. Por ejemplo, las universidades norteamericanas se agrupan en el dominio edu, y cada universidad mantiene un subdominio dentro de edu. Nuestro ejemplo, la Universidad de Groucho Marx, mantendría el dominio &lt;strong&gt;gmu.edu&lt;/strong&gt; y las máquinas del Departamento de Matematicas se encontrarían dentro del dominio &lt;strong&gt;maths.gmu.edu&lt;/strong&gt;. De este modo el nombre completo de la máquina &lt;strong&gt;erdos&lt;/strong&gt; será &lt;strong&gt;erdos.maths.gmu.edu.&lt;/strong&gt; El nombre completo se conoce como nombre totalmente cualificado o FQDN, e identifica a ese nodo en todo el mundo.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Figura 6 - Organización de dominios" class="size-full" height="794" src="https://danielpecos.com/assets/2016/10/dominios.gif" width="1058" /&gt;Figura 6 – Organización de dominios&lt;/p&gt;
&lt;p&gt;Aquí se muestra una sección del espacio de dominios. La entrada de la raíz del árbol, que se indica con un punto rojo, se puede denominar dominio raíz, y agrupa al resto de los dominios. Para indicar que un nodo se expresa en notación FQDN, se puede terminar el nombre en un punto, indicando así que el nombre incluye al del dominio raíz. (&lt;a href="#f6"&gt;Figura 6&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Dependiendo de su localización en la jerarquía, un dominio puede ser de primer, segundo o tercer nivel. Pueden existir otros niveles pero no son frecuentes. Por ejemplo, algunos dominios de primer nivel muy usuales son los siguientes:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style="text-align: center;"&gt;Dominio&lt;/th&gt;
          &lt;th&gt;Descripción&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;edu&lt;/td&gt;
          &lt;td&gt;Aquí se incluyen casi todas las universidades o centros de investigación norteamericanos.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;com&lt;/td&gt;
          &lt;td&gt;Compañías u organizaciones con fines comerciales.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;org&lt;/td&gt;
          &lt;td&gt;Organizaciones no comerciales. Las redes UUCP privadas se encuentran aquí.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;net&lt;/td&gt;
          &lt;td&gt;Pasarelas y otros nodos administrativos de la red.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;mil&lt;/td&gt;
          &lt;td&gt;Nodos militares norteamericanos.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;gov&lt;/td&gt;
          &lt;td&gt;Nodos del gobierno norteamericano.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style="text-align: center;"&gt;uucp&lt;/td&gt;
          &lt;td&gt;Oficialmente, todos los nombres de nodos UUCP sin dominio han sido movidos a este nuevo dominio, .uucp.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;En general, los dominios anteriores pertenecen a redes norteamericanas. Algo especialmente cierto con los dominios mil o gov.&lt;/p&gt;
&lt;p&gt;Fuera de los Estados Unidos, existe un dominio de primer nivel para cada país, de dos letras segun se define en la norma ISO-3166. Finlandia, por ejemplo, usa el dominio &lt;em&gt;fi&lt;/em&gt;; el dominio &lt;em&gt;de&lt;/em&gt; corresponde a Alemania y el dominio &lt;em&gt;es&lt;/em&gt; corresponde a España. Cada país organiza por debajo del primer nivel, los dominios de segundo nivel, de manera parecida a los americanos en algunos casos (por ejemplo, con dominios &lt;strong&gt;com.au&lt;/strong&gt; o &lt;strong&gt;edu.au&lt;/strong&gt;) o directamente por organizaciones, como sucede en España (con dominios como &lt;strong&gt;uji.es&lt;/strong&gt; para la “Universitat Jaume I”).&lt;/p&gt;
&lt;p&gt;Por supuesto, un nodo dentro del dominio de un país puede no estar fisicamente en él. El dominio únicamente identifica al nodo como registrado en el NIC de ese país. Así, un comerciante español puede tener una delegacion en Australia, y tener sus nodos australianos registrados dentro del dominio de primer nivel español, &lt;em&gt;es&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Esta organización por dominios soluciona el problema de la unicidad de nombres. Además, los nombres totalmente cualificados no son díficiles de recordar.&lt;/p&gt;
&lt;p&gt;Pero DNS tiene otras ventajas: permite delegar la autoridad sobre un determinado subdominio a sus administradores. Por ejemplo, los subdominios &lt;strong&gt;maths&lt;/strong&gt; y &lt;strong&gt;physics&lt;/strong&gt; de la UGM son creados y mantenidos por el Centro de Calculo de dicha universidad. Y si el mantenimiento del subdominio &lt;strong&gt;maths.gmu.edu&lt;/strong&gt; fuese complicado (por número elevado de nodos, existencia de subdominios internos, etc), el Centro de Calculo de la UGM puede delegar la autoridad sobre ese subdominio al departamento de Matemáticas. La delegación de un subdominio implica el control total del mismo por parte de la organización en la que se delegó, con total libertad para crear nuevos subdominios internos, asociar nombres a nodos, etc.&lt;/p&gt;
&lt;p&gt;Para este fin, el espacio de nombres se divide en zonas, cada una asociada a un dominio. Notese que existe una diferencia entre zona y dominio: el dominio &lt;strong&gt;groucho.edu&lt;/strong&gt; incluye todos los nodos de la UGM, mientras que la zona &lt;strong&gt;groucho.edu&lt;/strong&gt; incluye sólo los nodos que mantiene directamente el Centro de Cálculo, ya que los nodos del subdominio &lt;strong&gt;physics.groucho.edu&lt;/strong&gt; pertenecen a la zona controlada por el Departamento de Físicas. En la imagen anterior marcamos el inicio de una zona con un pequeño circulo a la derecha del nombre del dominio.&lt;/p&gt;
&lt;hr align="center" width="80%" /&gt;
&lt;p&gt;Este apartado de redes está extraido del libro &lt;em&gt;“Linux Network Administrator Guide” &lt;a href="#Kirch99"&gt;[Kirch99]&lt;/a&gt;&lt;/em&gt;, donde se hace una detallada exposición del funcionamiento y configuración de las redes bajo entorno Linux. Aunque la versión original es en inglés es posible encontrar en Internet una traducción al castellano.&lt;/p&gt;
&lt;p&gt;&lt;a name="6"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="5-el-sistema-x-window"&gt;5 EL SISTEMA X-WINDOW&lt;/h1&gt;
&lt;p&gt;&lt;a name="6.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="51-qué-es-x-window"&gt;5.1 ¿Qué es X-window?&lt;/h2&gt;
&lt;p&gt;El &lt;em&gt;&lt;a href="http://www.x.org/"&gt;sistema X-Window&lt;/a&gt;&lt;/em&gt;, (X-window o simplemente las X) se trata de la herramienta de software para el desarrollo de interfaces gráficas de usuario (GUI’s) para estaciones de trabajo. Una GUI es en pocas palabras una interfaz usuario / computadora que se ejecuta en modo gráfico. X-window para linux y para todos los sistemas más basados es UNIX lo que MS Windows es para los sistemas basados en DOS. Con una gran diferencia, que X-Window es un estándar para los sistemas de ventanas basados en UNIX. Esta estandarización supone que cualquier interfaz GUI puede ser ejecutada en cualquier computadora e incluso en varias a la vez. Más información en &lt;a href="#SHVGR93"&gt;[SHV+93]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a name="6.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="52-historia-y-necesidad"&gt;5.2 Historia y necesidad&lt;/h2&gt;
&lt;p&gt;En 1984, &lt;em&gt;Laboratory for Computer and Science&lt;/em&gt; del Instituto Tecnológico de Massachussets (MIT) en Cambridge, Massachussets, inicio el poyecto Athena que fue liderado por Robert Schefler y Jim Gettys. En el MIT como en muchas más organizaciones había muchos, terminales, sistemas operativos, CPUs etc. lo que dificultaba una tarea estandarizada. El proyecto Athena tenía una meta muy definida, que era que todos los programas pudieran estar interactivamente disponibles para todos los usuarios en cualquier estación de trabajo del MIT. El inicio de este sistema fue el sistema de ventanas de la Stanford University que se llamo W.&lt;/p&gt;
&lt;p&gt;La primera versión disponible para los diseñadores estuvo en el año 1986, y la versión fue la Versión 10 Revisión 4. Grandes empresas del tamaño de IBM, SUN, HP, Digital etc. han participado desde el principio en el desarrollo de este sistema. Desde su aparición hace ahora catorce años se ha ido actualizando continuamente, la última versión existente es la Versión 11 Revisión 6.3 (X11R6). Más información en &lt;a href="#SHVGR93"&gt;[SHV+93].&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a name="6.3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="53-arquitectura-cliente--servidor"&gt;5.3 Arquitectura Cliente / Servidor&lt;/h2&gt;
&lt;p&gt;En linux el proceso gráfico no es más que otro proceso que ejecuta el sistema operativo. Esto evita muchos problemas de estabilidad al kernel. Otra ventaja que tiene es la absoluta independencia del sistema operativo y el entorno gráfico. En contrapartida a todas estas ventajas, existe el inconveniente que el entorno gráfico reduce su velocidad en comparación a otros sistemas gráficos. Estos últimos incluyen los procesos referentes al subapartado gráfico en el propio núcleo. &lt;a href="#X1"&gt;Ver figura 1&lt;/a&gt;. Aunque esta práctica tiene la ventaja de que el sistema gráfico es más veloz. Se hace un gasto innecesario de recursos, aun sin usar ninguna aplicación, y estar más propensos a fallos del sistema debidos a errores en el apartado gráfico.&lt;/p&gt;
&lt;p&gt;Toda la filosofía de X Window se basa en la arquitectura cliente/servidor. Esta arquitectura es el modelo de sistema X mediante la cual los clientes, programas de aplicaciones, se comunican con los servidores que controlan parte del hardware.&lt;/p&gt;
&lt;p&gt;El programa que habilita un entorno gráfico X-window en un ordenador es el servidor X (X server). Se le llama servidor ya que este programa sólo se dedica a escribir en pantalla lineas, cuadros y funciones gráficas básica. El servidor X ofrece funciones gráficas primarias a las aplicaciones (clientes) que las soliciten y este las muestra en pantalla. El servidor es el programa encargado de gestionar un display. Un display se debe entender como la unidad formada por la o las pantallas y por los dispositivos de entrada, bien sea un ratón, un teclado, un trackball etc. todo este conjunto es un display. Un servidor puede servir a varios clientes a la vez. La otra parte de la arquitectura cliente / servidor es el cliente, básicamente es una aplicación que se esta ejecutando en modo gráfico. El servidor es la unidad de visualización, que puede a su vez estar formada por varios monitores o pantallas físicas.&lt;/p&gt;
&lt;p&gt;El servidor se encarga de captar las entradas del usuario y se las pasa a las aplicaciones o clientes X, dicha información proviene de los dispositivos de entrada del display, para que los clientes actúen en consecuencia. Los clientes tienen que captar esta información y operar. La respuesta del cliente es mandada al servidor ordenándole que dibuje dicha respuesta en la pantalla o las pantallas del display. Descodifican los mensajes de los clientes, como las peticiones de información o el movimiento de una ventana. Toda la comunicación entre el cliente y el servidor se realiza en lenguaje formal X window.&lt;figure class="wp-caption aligncenter" id="attachment_810"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Figura 1 : Procesos gráficos en linux y arquitectura cliente sevidor en una máquina. " class=" " height="540" src="https://danielpecos.com/assets/2016/10/grafic1.gif" width="540" /&gt;&lt;figcaption class="wp-caption-text"&gt;Figura 1 : Procesos gráficos en linux y arquitectura cliente sevidor en una máquina.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Todo esta arquitectura se debe a que el sistema X windows tiene una gran flexibilidad de uso en redes. La conexión del Servidor X a los clientes no esta limitada a la misma máquina. Sino que cualquier aplicación o cliente que se este ejecutando en una red se puede conectar a cualquier servidor.&lt;a href="#X2"&gt;Ver figura 2&lt;/a&gt; Cuando decimos conectarse se quiere decir que se puede visualizar en el ordenador que ejecuta un servidor X. Una forma de aprovechar esta flexibilidad es utilizar desde casa un ordenador personal conectado a una gran computadora para aprovechar la potencia de esa computadora desde casa. Esta práctica de compartir aplicaciones esta muy extendida, de hecho existen un tipo de ordenadores cuya única función es ejecutar un servidor X, se denominan “terminales X”. Estos ordenadores en ocasiones no disponen de dispositivos de almacenamiento y no son muy potentes con lo que se consigue muchos puestos de trabajo a un precio muy reducido. Otro punto importante es que no existe ninguna razón por la que el sistema X window este restringido al sistema operativo Unix o Linux. De hecho existen servidores X para DOS, Windows Macintosh u OS/2.&lt;figure class="wp-caption aligncenter" id="attachment_811"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Figura 2 : Procesos gráficos y arquitectura cliente / servidor en una red." class=" " height="380" src="https://danielpecos.com/assets/2016/10/grafic2.gif" width="720" /&gt;&lt;figcaption class="wp-caption-text"&gt;Figura 2 : Procesos gráficos y arquitectura cliente / servidor en una red.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;Para profundizar más en este aspecto puden consultar los libros de la bibliografía &lt;a href="#SHVGR93"&gt;[SHV+93]&lt;/a&gt; y en [[MP98]&lt;/p&gt;
&lt;p&gt;]&lt;a href="#MP98"&gt;65&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hay que señalar que la filosofía del sistema X-Window puede parecer engañosa ya que invierte la posición tradicional del cliente y el servidor. Tradicionalmente un servidor ha sido por ejemplo: la gran computadora que tenía los archivos que eran servidos a los clientes, o un servidor de conexión a internet a los que se conecta el usuario. En estos casos el servidor es una computadora remota, con grandes capacidades de procesamiento y almacenamiento que tenía muchas tareas cargadas, y los clientes son los usuarios. El sistema X-Window funciona al revés. El servidor es el usuario con su terminal X y el cliente esta corriendo en una computadora remota, o no, que suele tener grandes capacidades de calculo y almacenamiento y que suele estar cargada de clientes.&lt;/p&gt;
&lt;p&gt;Una de las partes más importantes de la arquitectura cliente servidor es la conexión física entre el cliente y el servidor. De ello dependerá en gran medida el rendimiento del sistema. Una conexion de red rápida entre cliente y servidor o que el servidor este en la misma computadora que el cliente hará que el entorno funcione de una manera rápida.&lt;/p&gt;
&lt;p&gt;La comunicación entre el cliente y el servidor sistema X-Window se realizan mediante el denominado protocolo X (X protocol). Este protocolo X permite definir el número exacto de bytes necesarios para definir una ventana. El problema es que la programación con este lenguaje es extremadamente complicada y laboriosa.&lt;/p&gt;
&lt;p&gt;Se puede comparar el protocolo X al lenguaje máquina. De la misma manera que el ensamblador proporciona potencia a la programación en lenguaje máquina, las funciones Xlib proporcionan la potencia del protocolo X con un coste menor.&lt;/p&gt;
&lt;p&gt;Xlib es un biblioteca de unas 300 funciones escritas en C que generan protocolo X, que facilitan la programación básica, las funciones Xlib son el punto de partida para aprender a manejar X Window y aunque sea imprescindible dominarlas. Para programar a más alto nivel nos harán falta otras herramientas.&lt;/p&gt;
&lt;p&gt;Existen también las llamadas X Toolkit Intrinsics más comúnmente conocido como Xt intrinsics, son herramientas de más alto nivel ya que nos ayudaran a crear bloques de pantalla llamados widgets, como por ejemplo menús, barras de desplazamiento ,botones etc. La ventaja de esta herramienta es que da a la aplicación una apariencia estándar fácil de ver y de entender, con lo que se gana en facilidad de uso que es lo que se pretende desde el principio al usar el sistema X window. . Para más información se puede consultar en el libro de la bibliografía &lt;a href="#SHVGR93"&gt;[SHV+93]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a name="6.4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="54-xfree86"&gt;5.4 XFree86&lt;/h2&gt;
&lt;p&gt;La versión que linux utiliza del sistema X Window es XFree86. Esta es una versión gratuita de la distribución oficial de UNIX que funciona en procesadores compatibles con la tecnología x86 como (AMD,Ciryx o Intel).&lt;/p&gt;
&lt;p&gt;Referente al hardware necesario para poder ejecutar el X-window. XFree86 soporta la mayoría de tarjetas que hay en el mercado. Las principales causas que dificultan el desarrollo de XFree86 para algunas tarjetas es que como se distribuye el código fuente, algunas empresas no están dispuestas a mostrar el funcionamiento de su tarjeta. Otra más común es que suele pasar un tiempo desde que sale un producto hasta que esta listo el desarrollo correspondiente. Ya que el código cuesta de escribir y de comprobar. En cuanto a memoria y procesador XFree86 corre en un simple intel 386 con al menos 16 MB de ram. Esta memoria puede ser 8 MB mínimo de principal y 8 MB de memoria virtual o de intercambio (SWAP).&lt;/p&gt;
&lt;p&gt;&lt;a name="6.5"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="55-arranque-del-sistema-x-window"&gt;5.5 Arranque del sistema X-Window&lt;/h2&gt;
&lt;p&gt;El inicio del sistema X window, implica que se ha de cargar tanto el servidor X como algunos clientes para poder empezar a utilizar el entorno gráfico. Hay un par de maneras principalmente de iniciar el X-window. Quizá la más usada sea mediante el guión de inicio llamado&lt;em&gt;starx&lt;/em&gt;.Que se ejecuta en cualquiera de las consolas en modo texto. Este programa no es más que un guión de comandos que ejecuta el Servidor X, inicializa algunos recursos para que serán utilizados por los clientes y también conecta al servidor algún cliente.&lt;/p&gt;
&lt;p&gt;Otra manera de iniciar el servidor X es mediante el programa &lt;em&gt;xdm&lt;/em&gt; ,o programa gestor de pantallas. Se trata de un programa muy potente que no sólo permite controlar la sesión X en el ordenador local, sino también en los terminales X y todos aquellos ordenadores que se conecten a través de la red. Esto ayuda a tener mayor seguridad en el acceso a la red. El servidor X tiene que interactuar con el hardware del sistema, con lo que tiene que tener privilegios de superusuario para poder funcionar. Esto es lo que ocurre al usar startx a causa de que por defecto se le otorgan unos permisos especiales. De este modo cualquiera puede ejecutar un servidor X, y como el servidor X puede tener bugs (errores), con los que un usuario con suficientes conocimientos podría “engañarle” para ejecutar programas con privilegios de root(administrador del sistema o superusuario).. Lo que hace el &lt;em&gt;xdm&lt;/em&gt; concretamente es arrancar el servidor X y un rectángulo en el cual el usuario se ha de identificar ante la máquina y una vez el usuario se identifica mediante su nombre y contraseña se ejecutan los clientes que tenga personalizados el usuario en cuestión.&lt;/p&gt;
&lt;p&gt;&lt;a name="6.6"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="56-gestores-de-ventanas"&gt;5.6 Gestores de ventanas&lt;/h2&gt;
&lt;p&gt;El gestor de ventanas es uno de las aplicaciones X más importantes, ya que se trata del programa que da el aspecto a todo el entorno gráfico y que controla todas las operaciones relativas al dibujo de ventanas. En linux un gestor de ventanas es un cliente más que está conectado al servidor X. Esto implica que el sistema en si, no esta ligado a ningún gestor de ventanas en particular. Con lo que se consigue una gran personalización del entorno gráfico. Esto tiene el inconveniente de que cambia totalmente la manera de de interpretar las pulsaciones del ratón o del teclado.&lt;/p&gt;
&lt;p&gt;&lt;a name="6.6.1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="561-fvwm-y-sus-derivados"&gt;5.6.1 Fvwm y sus derivados&lt;/h3&gt;
&lt;p&gt;Fvwm es una de las familias de gestores de ventanas más usadas dentro de entornos Linux. &lt;em&gt;Fvwm&lt;/em&gt;(&lt;em&gt;Fine Virtual Window Manager&lt;/em&gt;) y todos sus derivados. son a su vez derivados del &lt;em&gt;twm&lt;/em&gt;(&lt;em&gt;tab window manager&lt;/em&gt;), que es el gestor que se distribuye con las versiones oficiales de X-window y por tanto con XFree86.&lt;/p&gt;
&lt;p&gt;Una de las cualidades de twm es que tiene grandes posibilidad de personalizarse al gusto del usuario. Todo esto unido al hecho de que es un programa de libre distribución ha hecho de &lt;em&gt;twm&lt;/em&gt; el ancestro de toda la familia de gestores &lt;em&gt;fvwm&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Fvwm&lt;/em&gt; fue desarrollado en un principio con la finalidad de reducir el uso de memoria que necesitaba el &lt;em&gt;twm&lt;/em&gt; aunque fuese a costa de reducir su capacidad de personalización, darle un aspecto tridimensional y principalmente los escritorios virtuales. Los escritorios virtuales permiten simular un escritorio más grande de lo que cabe en la pantalla con lo que podemos tener ventanas en otros escritorios fuera de la pantalla e intercambiar ventanas entre ellos.&lt;/p&gt;
&lt;p&gt;&lt;a name="6.6.2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="562-otros-gestores-de-ventanas"&gt;5.6.2 Otros gestores de ventanas&lt;/h3&gt;
&lt;p&gt;Existen también derivados de &lt;em&gt;fvwm&lt;/em&gt; como son el &lt;em&gt;fvwm95, fvwm2, afterstep&lt;/em&gt; etc. El más usado entre la comunidad linux es el &lt;em&gt;afterStep&lt;/em&gt;. En un principio estaba ideado para emular el sistema operativo NEXTSTEP aunque debido a su atractivo diseño y sus posibilidades se ha ganado gran parte de los usuarios de Linux.&lt;/p&gt;
&lt;p&gt;Existe una gran oferta de gestores de ventanas para linux, desde más derivados del &lt;em&gt;twm&lt;/em&gt; como son &lt;em&gt;ctwm&lt;/em&gt; o &lt;em&gt;vtwm&lt;/em&gt; hasta otros que se han diseñado desde cero. También existen gestores de ventanas muy espectaculares que convierten el ordenador en un espectáculo multimedia. El principal gestor de ventanas es el &lt;em&gt;&lt;a href="http://www.enlightenment.com/"&gt;enlightenment&lt;/a&gt;&lt;/em&gt; que llena la pantalla de atractivos colores y formas.&lt;/p&gt;
&lt;p&gt;&lt;a name="6.7"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="57-gestores-de-escritorio"&gt;5.7 Gestores de escritorio&lt;/h2&gt;
&lt;p&gt;Un gran inconveniente de los gestores de ventanas es que las aplicaciones no tienen forma de comunicarse entre ellas ni de controlar el comportamiento del gestor de ventanas. Esto se subsana al pasar del gestor de ventanas al gestor de escritorio (&lt;em&gt;Desktop manager&lt;/em&gt;). Este ultimo tiene las siguientes ventajas con respecto al gestor de ventanas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Provee de un aspecto uniforme a todas las aplicaciones gráficas, dotándolas de un interfaz de uso común.&lt;/li&gt;
&lt;li&gt;Podemos marcar un objeto con el ratón y arrastrarlo hasta cualquier aplicación y ver su contenido allí.&lt;/li&gt;
&lt;li&gt;Permite el acceso transparente a cualquier recurso, ya este en el disco o en otro lugar de la red.&lt;/li&gt;
&lt;li&gt;Distingue entre aplicaciones abiertas y enlaces a recursos.&lt;/li&gt;
&lt;li&gt;Ofrece un interfaz gráfico para configurar y personalizar todos los aspectos del entorno gráfico.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aunque estas características son muy deseables por la mayoría de usuarios en Linux aún falta camino por recorrer, hasta poseer un entorno con todas estas características. Afortunadamente hay mucha gente trabajando en ello, y ya nos estamos acercando a sistema mejor. Se trata de KDE (&lt;em&gt;K Desktop Environment&lt;/em&gt;). KDE provee de un entorno completo, panel de menús, un gestor de tareas, un escritorio orientado a objetos(iconos), un gestor de escritorio que permite ver archivos locales y en unidades de red y un gran sistema de ayuda.Para más información podemos visitar su web en &lt;a href="http://www.kde.org/"&gt;http://www.kde.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Otro poyecto similar que se esta desarrollando más recientemente es el GNOME. Tiene una gran similitud con el KDE. Debido al apoyo de &lt;a href="http://www.redhat.com/"&gt;RedHat&lt;/a&gt; y otras compañías este gestor de escritorio hace que tenga un futuro prometedor. De hecho ya es el principal rival del KDE.Para más informacion podemos visitar la página de GNOME en &lt;a href="http://www.gnome.org/"&gt;http://www.gnome.org&lt;/a&gt;. Hay más gestores de escritorio como el CDE (&lt;em&gt;common desktop envirenment&lt;/em&gt;) que debido a su condición de programas comerciales no tienen el apoyo de la mayoría de usuarios.&lt;/p&gt;
&lt;p&gt;Todo lo expuesto desde el apartado &lt;a href="#6.4"&gt;5.4&lt;/a&gt; se puede ampliar en el libro de la bibliografía: &lt;a href="#MP98"&gt;[MP98].&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a name="conclusion"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="conclusión"&gt;CONCLUSIÓN&lt;/h1&gt;
&lt;p&gt;Después de haber realizado este trabajo y haber visto la evolución de este sistema operativo, no dudamos en concluir que estamos ante un sistema operativo de futuro, abriéndose paso a través de otros sistemas comerciales, que, teóricamente, deberían ofrecer características mejores a las que ofrece Linux.&lt;/p&gt;
&lt;p&gt;Nuestra opinión sobre este sistema operativo es que ha tenido esta gran evolución en los cuatro o cinco últimos años, en gran medida debido a la ideología que sigue este sistema operativo, la cual permite que cualquier usuario tenga la posibilidad de modificar el código fuente, personalizando el sistema, reparando los posibles “bugs” del sistema o creando programas nuevos a los que cualquiera pueda acceder, modificar y reparar a través de la red.&lt;/p&gt;
&lt;p&gt;Dada esta característica, creemos que Linux tiene una gran perspectiva de futuro. Esto no queda únicamente así, sino que además, está produciendo una revolución en la actual concepción de mercado de software comercial, creando nuevos tipos de licencias con los que los programas puedan ser comerciales, pero incluyendo las fuentes, con lo que se consigue obtener unas características parecidas a la del software libre.&lt;/p&gt;
&lt;p&gt;Además gracias al sistema multitarea y multiproceso de Linux, que ofrece una gran potencia de cálculo y velocidad de intercomunicación, este sistema es apto para grandes estaciones de trabajo y de servidores de red, entre otros.&lt;/p&gt;
&lt;p&gt;Centrándonos más en el tema del trabajo, nuestra opinión, tanto teórica como práctica, es que es un sistema muy estable, apto y recomendable para cualquier informático, no solo con la gran cantidad de sistemas de ficheros y protocolos de red que es capaz de utilizar, sino que además ofrece una gran posibilidad de desarrollo, gran potencia en entorno gráfico, tanto desde el punto de vista de usuario como de programador, y una interfaz de red que permite la fácil comunicación entre sistemas UNIX, o cualuquier otro sistema operativo actual.&lt;/p&gt;
&lt;p&gt;El único inconveniente que hemos encontrado a este sistema es que para un usuario de nivel bajo-medio, puede que sea un golpe un poco duro encontrarse con un sistema operativo por línea de comandos, con multitarea real, cosas poco usuales en el resto de sistemas que suelen emular la multitarea desde un entorno visual. Esto se está intentando mejorar, creando mejores programas de instalación y utilizando interfaces gráficas más intuitivas.&lt;/p&gt;
&lt;p&gt;&lt;a name="referencias"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="referencias"&gt;REFERENCIAS&lt;/h1&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Referencia&lt;/th&gt;
          &lt;th&gt;Autores&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;b&gt;&lt;a name="BBDKMV97"&gt;&lt;/a&gt;[BBD+97]&lt;/b&gt;&lt;/td&gt;
          &lt;td&gt;Michael Beck, Harald Böhme, Mirko Dziadzka, Ulrich Kunitz, Robert Magnus y Dirk Verworner (1997). &lt;i&gt;Linux Kernel Internals (Second Edition)&lt;/i&gt;. Editorial: Addison-Wesley&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;b&gt;&lt;a name="Kirch99"&gt;&lt;/a&gt;[Kirch99]&lt;/b&gt;&lt;/td&gt;
          &lt;td&gt;Olaf Kirch (1999). &lt;i&gt;Linux Network Aministrator Guide&lt;/i&gt;. Fuente: &lt;a href="http://lucas.hispalinux.es/"&gt;Proyecto LuCAS&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;b&gt;&lt;a name="MP98"&gt;&lt;/a&gt;[MP98]&lt;/b&gt;&lt;/td&gt;
          &lt;td&gt;César Martín Pérez e Ismael Pérez Crespo (1998). &lt;i&gt;Linux&lt;/i&gt;. Editorial: Anaya Multimedia&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;b&gt;&lt;a name="NR95"&gt;&lt;/a&gt;[NR95]&lt;/b&gt;&lt;/td&gt;
          &lt;td&gt;Cameron Newhan y Bill Rosenblatt (1995). &lt;i&gt;Learning the Bash Shell&lt;/i&gt;. Editorial: O’Reilly &amp;amp; Associates, Inc.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;b&gt;&lt;a name="Rusling98"&gt;&lt;/a&gt;[Rusling98]&lt;/b&gt;&lt;/td&gt;
          &lt;td&gt;David A Rusling (&lt;a href="mailto:david.rusling@digital.com"&gt;&lt;a href="mailto:david.rusling@digital.com"&gt;david.rusling@digital.com&lt;/a&gt;&lt;/a&gt;) (Enero 1998). &lt;i&gt;El núcleo de Linux&lt;/i&gt;. Fuente: &lt;a href="http://www.hispalinux.org/"&gt;&lt;a href="http://www.hispalinux.org"&gt;http://www.hispalinux.org&lt;/a&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;b&gt;&lt;a name="SHVGR93"&gt;&lt;/a&gt;[SHV+93]&lt;/b&gt;&lt;/td&gt;
          &lt;td&gt;Antonio Vaquero Sánchez, Raymundo Hugo Rangel, Gerardo Quiroz Vieyra, Willy Vega Gálvez y Luis Ernesto Ramírez (1993). &lt;i&gt;Aplique X Window&lt;/i&gt;. Editorial: McGraw-Hill/Interamericana de España, S.A.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</description><author>GeekWare - Daniel Pecos Martínez</author><pubDate>Mon, 05 Jun 2000 11:30:00 GMT</pubDate><guid isPermaLink="true">https://danielpecos.com/documents/linux/</guid></item><item><title>A library for parsing command line options</title><link>https://www.krajzewicz.de/blog/command-line-options.php</link><description>A small library for parsing command line options.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/command-line-options.php</guid></item><item><title>Announcing BrainBreak</title><link>https://www.krajzewicz.de/blog/announcing-brainbreak.php</link><description>A classic tile game for the c64 with hires multicolour graphics.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/announcing-brainbreak.php</guid></item><item><title>AnoPlib</title><link>https://www.krajzewicz.de/blog/anoplib.php</link><description>Some helper methods for dealing with small animations (c++).</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/anoplib.php</guid></item><item><title>Dead Software: BluBot</title><link>https://www.krajzewicz.de/blog/dead-blubot.php</link><description>Presents an abandoned meta search engine with natural language processing and visualisation I contributed to.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/dead-blubot.php</guid></item><item><title>Free Color Palettes</title><link>https://www.krajzewicz.de/blog/free-color-palettes.php</link><description>In ancient times, people shared content. This article holds an ever-growing list of free (like beer) color palettes. Including downloads, uh?</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/free-color-palettes.php</guid></item><item><title>Generating scalable maps with OSM and SUMO</title><link>https://www.krajzewicz.de/blog/sumo-scalable-osm-maps.php</link><description>A short demonstration of generating scalable maps using OpenStreetMap data and SUMO for visualisation.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/sumo-scalable-osm-maps.php</guid></item><item><title>How to design a new language that can be spoken, written, and read.</title><link>https://www.krajzewicz.de/blog/language-generation.php</link><description>Some others did it — they designed a completely new language. I did as well. Here's how.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/language-generation.php</guid></item><item><title>Logos</title><link>https://www.krajzewicz.de/blog/logos.php</link><description>Some logos and signets I designed.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/logos.php</guid></item><item><title>Moiré Test#1 (Back-/Foreground Images)</title><link>https://www.krajzewicz.de/blog/moiree-test1.php</link><description>Making a moiré effect using HTML foreground/background images.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/moiree-test1.php</guid></item><item><title>Persian Rasters</title><link>https://www.krajzewicz.de/blog/persian-rasters.php</link><description>Description and examples for so-called “persian raster” effect.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/persian-rasters.php</guid></item><item><title>ShaderWB - a shader workbench</title><link>https://www.krajzewicz.de/blog/shaderwb.php</link><description>A tool for fast shader hacking.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/shaderwb.php</guid></item><item><title>Size-Minimal Fonts</title><link>https://www.krajzewicz.de/blog/size-minimal-fonts.php</link><description>Notes on and thoughts about size-minimal fonts or character sets.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/size-minimal-fonts.php</guid></item><item><title>Stretching the c64 Palette</title><link>https://www.krajzewicz.de/blog/stretching-the-c64-palette.php</link><description>Presents some methods to stretch the limited c64 palette for obtaining large colour gradients.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/stretching-the-c64-palette.php</guid></item><item><title>The file structure of a software project</title><link>https://www.krajzewicz.de/blog/software-project-structure.php</link><description>You know, software engineering is a discipline. Here's what I know about structuring a software project.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/software-project-structure.php</guid></item><item><title>To OSG or not to OSG?</title><link>https://www.krajzewicz.de/blog/osg-not-osg.php</link><description>Discusses the usage of a scene graph library, namely OpenSceneGraph.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/osg-not-osg.php</guid></item><item><title>Web Sites</title><link>https://www.krajzewicz.de/blog/web-sites.php</link><description>Some web sites I designed.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/web-sites.php</guid></item><item><title>Workflow for documenting open source software</title><link>https://www.krajzewicz.de/blog/workflow-for-documenting-open-source-software.php</link><description>A method to offer both, a valid documentation for the last release as well as one for the current trunk version.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/workflow-for-documenting-open-source-software.php</guid></item><item><title>c16 Releases</title><link>https://www.krajzewicz.de/blog/c16-releases.php</link><description>Some c16 thingies I wrote.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/c16-releases.php</guid></item><item><title>c64 Font Sizes</title><link>https://www.krajzewicz.de/blog/c64-font-sizes.php</link><description>Common font sizes on the c64 with some examples.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/c64-font-sizes.php</guid></item><item><title>c64 Python helper</title><link>https://www.krajzewicz.de/blog/c64-python-helper.php</link><description>An open source Python library for dealing with c64 graphics.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/c64-python-helper.php</guid></item><item><title>c64 Releases</title><link>https://www.krajzewicz.de/blog/c64-releases.php</link><description>c64 demos, tools, and games I wrote or contributed to.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/c64-releases.php</guid></item><item><title>degrotesque — A tiny web type setter</title><link>https://www.krajzewicz.de/blog/degrotesque.php</link><description>A small script to improve the appearance of HTML text.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/degrotesque.php</guid></item><item><title>st2gif</title><link>https://www.krajzewicz.de/blog/st2gif.php</link><description>A tool that converts Atari ST graphics to gifs.</description><author>dkrajzew's Dilettante Habits</author><pubDate>Thu, 13 Jan 2000 01:01:00 GMT</pubDate><guid isPermaLink="true">https://www.krajzewicz.de/blog/st2gif.php</guid></item><item><title>Treatment for Damaged Audio and Video</title><link>https://mbutler.org/treatment-for-damaged-audio-and-video/</link><description>﻿ Winner of the Juror’s Choice Award at the 2001 Film and Video Retrospective, Des Moines Art Center. Scavenged snippets of damaged library A/V material reconstituted into an impressionistic glitch video narrative about ‘helping.’ Displayed as single channel video as well as multiple monitor installation.</description><author>mbutler</author><pubDate>Fri, 01 Oct 1999 06:13:58 GMT</pubDate><guid isPermaLink="true">https://mbutler.org/treatment-for-damaged-audio-and-video/</guid></item><item><title>About me</title><link>https://dicioccio.fr/about-me.html</link><description>I am Lucas DiCioccio, a scientist and engineer. I apply modern techniques to engineering and lead #teams to deliver successful results.</description><author>Lucas DiCioccio's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://dicioccio.fr/about-me.html</guid></item><item><title>Cabourg August 2022</title><link>https://dicioccio.fr/gallery-2022-08-cabourg.html</link><description>A photo gallery from a summer trip to Cabourg, France.</description><author>Lucas DiCioccio's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://dicioccio.fr/gallery-2022-08-cabourg.html</guid></item><item><title>todo list</title><link>https://dicioccio.fr/todo-list.html</link><description>A personal public-achievements and todo list, for this blog or other things of life.</description><author>Lucas DiCioccio's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://dicioccio.fr/todo-list.html</guid></item><item><title>Reading List</title><link>https://dicioccio.fr/readings.html</link><description>A collection of links and readings.</description><author>Lucas DiCioccio's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://dicioccio.fr/readings.html</guid></item><item><title>Some notes</title><link>https://dicioccio.fr/notes.html</link><description>Notes that could become part of articles.</description><author>Lucas DiCioccio's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://dicioccio.fr/notes.html</guid></item><item><title>Talks and Docs</title><link>https://dicioccio.fr/talks.html</link><description>A list of slides (with recording links when available) for presentations I gave. Also some template documents for architecture/devops.</description><author>Lucas DiCioccio's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://dicioccio.fr/talks.html</guid></item><item><title>Rolling gallery</title><link>https://dicioccio.fr/gallery-001.html</link><description>A rolling photo gallery with mostly portraits.</description><author>Lucas DiCioccio's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://dicioccio.fr/gallery-001.html</guid></item><item><title>Alphabets</title><link>https://dicioccio.fr/alphabets.html</link><description>The NATO phonetic alphabet if it were written by...</description><author>Lucas DiCioccio's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://dicioccio.fr/alphabets.html</guid></item><item><title>Some tips</title><link>https://dicioccio.fr/tips.html</link><description>A collection of tips that also serves as a personal cheat-sheet.</description><author>Lucas DiCioccio's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://dicioccio.fr/tips.html</guid></item><item><title>1. Operating Systems</title><link>https://jasoneckert.github.io/info/operatingsystems/</link><description>&lt;h1 id="unix"&gt;UNIX&lt;/h1&gt;
&lt;p&gt;UNIX is the grandfather of all modern operating systems, and today it still remains the most powerful and least known. But if you use an Apple computer running macOS, or an iPhone or iPad running iOS, you are using a UNIX operating system. And if you do online banking, somewhere tucked away in the bank is likely a series of UNIX systems running Oracle Solaris UNIX, HP-UX UNIX, or AIX UNIX. Your Internet Service Provider (ISP) likely runs BSD UNIX networking equipment and servers, and you’ll even find QNX UNIX in most cars today as well as running the streetlights in your city.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/info/operatingsystems/</guid></item><item><title>1. What do I do?</title><link>https://jasoneckert.github.io/bio/what-do-i-do/</link><description>&lt;p&gt;&lt;img alt="summit" src="headshot.jpg#right" title="summit" /&gt;&lt;/p&gt;
&lt;p&gt;Besides drinking vast quantities of caffeine and spending most of my free time enjoying the outdoors, I have taught, developed, and managed various technology courses at triOS College in Ontario (Canada) since 1998 in both our college and corporate training divisions.&lt;/p&gt;
&lt;p&gt;Back in 2011, I took on a different title of Dean of Technology to salvage our video game programs, and it turned into a more strategic role where I was able to help shape the development of our Information Technology (IT), developer, and video game programs. It also allowed me to build some exciting opportunities for our students, run over a dozen sponsored game jams and hackathons, communicate program information to others in the college, as well as meet with vendors, employers, internship hosts, and other colleges. My goal was to &amp;ldquo;walk the talk&amp;rdquo; in every facet of technology education, and I definitely achieved that early on.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/bio/what-do-i-do/</guid></item><item><title>2. My published books</title><link>https://jasoneckert.github.io/bio/my-published-books/</link><description>&lt;p&gt;Perhaps one of my more famous achievements is the authoring of several textbooks for Course Technology, Cengage, Nelson, Thompson/Delmar and Wiley. I&amp;rsquo;ve listed their details in chronological order here (oldest to newest) with cover pictures below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Linux+ Guide to Linux Certification (ISBN: 0-619-13004-0) &lt;a href="0-619-13004-0_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="0-619-13004-0_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Guide to UNIX System Administration (ISBN: 0-619-13041-5) &lt;a href="0-619-13041-5_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="0-619-13041-5_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux+ In Depth (ISBN: 1-59200-062-2) &lt;a href="1-59200-062-2_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="1-59200-062-2_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;MCSE Guide to Managing a Microsoft Windows Server 2003 Network (ISBN: 0-619-12029-0) &lt;a href="0-619-12029-0_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="0-619-12029-0_rear.jpg" title="rear"&gt;rear&lt;/a&gt; &lt;a href="0-619-12029-0_dedication.jpg" title="dedication"&gt;dedication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux+ Guide to Linux Certification - 2nd Edition (ISBN: 0-619-21621-2) &lt;a href="0-619-21621-2_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="0-619-21621-2_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux+ 2005 In Depth (ISBN: 1-59200-728-7) &lt;a href="1-59200-728-7_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="1-59200-728-7_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Novell&amp;rsquo;s Guide to CompTIA&amp;rsquo;s Linux+ (Course 3060) (ISBN: 1-4188-3730-X) &lt;a href="1-4188-3730-X_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="1-4188-3730-X_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SUSE Linux Enterprise Server Administration (Course 3037) (ISBN: 1-4188-3731-8) &lt;a href="1-4188-3731-8_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="1-4188-3731-8_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Advanced SUSE Linux Enterprise Server Administration (Course 3038) (ISBN: 1-4188-3732-6) &lt;a href="1-4188-3732-6_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="1-4188-3732-6_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft Windows Vista Guide (ISBN: 1-4188-3757-1) &lt;a href="1-4188-3757-1_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="1-4188-3757-1_rear.jpg" title="rear"&gt;rear&lt;/a&gt; &lt;a href="1-4188-3757-1_dedication.jpg" title="dedication"&gt;dedication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SUSE Linux Enterprise Desktop Administration (Course 3086) (ISBN: 1-4283-2227-2) &lt;a href="1-4283-2227-2_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="1-4283-2227-2_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SUSE Linux Enterprise Server Security (Course 3075) (ISBN: 1-4283-2223-X) &lt;a href="1-4283-2223-X_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="1-4283-2223-X_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft Official Academic Course (MOAC): Exchange Server 2007 Exam 70-236 (ISBN: 978-0-470-38029-1) &lt;a href="978-0-470-38029-1_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="978-0-470-38029-1_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux+ Guide to Linux Certification - 3rd Edition (ISBN: 978-1-418-83721-1) &lt;a href="978-1-418-83721-1_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="978-1-418-83721-1_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SUSE Linux Enterprise Server 11 Administration (ISBN: 978-1-111-54003-6) &lt;a href="978-1-111-54003-6_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="978-1-111-54003-6_rear.jpg" title="rear"&gt;rear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux+ Guide to Linux Certification - International Edition (ISBN: 978-1-111-54153-8)&lt;/li&gt;
&lt;li&gt;Linux+ Guide to Linux Certification - 4th Edition (ISBN: 978-1-305-10716-8) &lt;a href="978-1-305-10716-8_front.jpg" title="front"&gt;front&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux+ and LPIC-1 Guide to Linux Certification - 5th Edition (ISBN: 978-1-337-56979-8) &lt;a href="978-1-337-56979-8_front.jpg" title="front"&gt;front&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Hands-On Windows Server 2019 - 3rd Edition (ISBN: 978-0-357-43615-8) &lt;a href="978-0-357-43615-8_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="978-0-357-43615-8_dedication.jpg" title="dedication"&gt;dedication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux+ and LPIC-1 Guide to Linux Certification - 6th Edition (ISBN: 979-8-214-00080-0) &lt;a href="979-8-214-00080-0_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="979-8-214-00080-0_dedication.jpg" title="dedication"&gt;dedication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Hands-On Windows Server 2022 - 4th Edition (ISBN: 979-8-214-01160-8) &lt;a href="979-8-214-01160-8_front.jpg" title="front"&gt;front&lt;/a&gt; &lt;a href="979-8-214-01160-8_dedication.jpg" title="dedication"&gt;dedication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux+ and LPIC-1 Guide to Linux Certification - 7th Edition (ISBN: 979-8-214-40996-2) Available January 2026!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Moreover, I&amp;rsquo;ve worked as a technical editor for numerous Linux and software development titles for both Wiley and Pearson, as well as wrote 6 books for Research in Motion (RIM) on BlackBerry Enterprise Server 4.1 &amp;amp; 5 (uncredited and consequently not listed here).&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/bio/my-published-books/</guid></item><item><title>2. Retro Computers</title><link>https://jasoneckert.github.io/info/retrocomputers/</link><description>&lt;h1 id="apple"&gt;Apple&lt;/h1&gt;
&lt;p&gt;&lt;img alt="Apple IIc" src="appleiic.jpg#right" title="Apple IIc" /&gt;&lt;/p&gt;
&lt;p&gt;Apple Computer was founded by Steve Wozniak and Steve Jobs in 1976. Steve Wozniak provided the technical genius for computer creation, while Steve Jobs provided the expertise in marketing and design. Their first major commercially adopted product was the Apple II in 1977, which had a MOS 6502 CPU (also used in Commodore computers such as the Commodore 64) and shipped with BASIC and the DOS operating system (later versions). The Apple II was very well built and had tons of expansion ports. It inspired thousands of people to enter the computer world. Thousands of programs were made for it, and it made its way into nearly every industry in a short period of time. The famous spreadsheet, Visicalc, made the Apple II a great business tool, its ease of use made it extremely popular in the school system (every school I went to had them, even in the 1990s), and its BASIC interpreter and easy expandability made it famous with hackers, engineers and scientists (the first demonstration of public key cryptography was hacked together by a few mathematicians on an Apple II).&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/info/retrocomputers/</guid></item><item><title>3. Arcade Games</title><link>https://jasoneckert.github.io/info/arcadegames/</link><description>&lt;p&gt;Growing up in the 80s was awesome!  One of the best things about growing up in the 80s for me was that I developed a love of video games.  I loved spending time at the arcade playing the classics like Tempest, Missile Command and Galaga.  At home, we had an Atari 2600 and later a Nintendo NES.  I loved it all.&lt;/p&gt;
&lt;p&gt;In recent years, I purchased my absolute favourite arcade games of all time&amp;hellip;..mainly because I’d rather play those games than most of the newer AAA titles that require a larger amount of available time.  Since I have limited space, I had to make sure they were games I’d play a LOT of, and I’ve definitely kept true to that!&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/info/arcadegames/</guid></item><item><title>3. Personal Interests</title><link>https://jasoneckert.github.io/bio/personal/</link><description>&lt;h1 id="parenting"&gt;Parenting&lt;/h1&gt;
&lt;p&gt;I am a happily divorced proud father of one. I’ve pretty much raised my daughter since she was 5 years old on my own, and yes, I’ve made school lunches, threw kids parties, went to great places (Ontario Science Centre, ROM, SportsWorld, Storybook Gardens, Disney World and more!), spent vacations camping/cottaging, and watched far too many Land Before Time movies. The picture on the left is my daughter while we were vacationing at Disney World in Florida over a decade ago. Now that my daughter is grown up, I miss those years. But she recently became a parent herself, so in a few years I&amp;rsquo;ll likely be doing some of those things as a grandparent. After my daughter moved out of the house, my adorable dog Pepper and I went on many more amazing adventures until she &lt;a href="../../myblog/remembering-pepper/"&gt;passed away at the age of 13&lt;/a&gt;. I am incredibly grateful to have been a dad to both my daughter and Pepper.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/bio/personal/</guid></item><item><title>4. Tech Flicks</title><link>https://jasoneckert.github.io/info/techflicks/</link><description>&lt;p&gt;&lt;img alt="Tron Legacy banner" src="tron.jpg" title="Tron Legacy banner" /&gt;&lt;/p&gt;
&lt;p&gt;100 Yen: The Japanese Arcade Experience (2012)&lt;/p&gt;
&lt;p&gt;2001: Space Odyssey (1968)&lt;/p&gt;
&lt;p&gt;8 Bit Generation: The Commodore Wars (2016)&lt;/p&gt;
&lt;p&gt;Antitrust (2001)&lt;/p&gt;
&lt;p&gt;Blade Runner (1982)&lt;/p&gt;
&lt;p&gt;Bright (2017)&lt;/p&gt;
&lt;p&gt;Chasing Ghosts: Beyond the Arcade (2007)&lt;/p&gt;
&lt;p&gt;Cloak and Dagger (1984)&lt;/p&gt;
&lt;p&gt;Contact (1997)&lt;/p&gt;
&lt;p&gt;Die Hard 4: Live Free or Die Hard (2007)&lt;/p&gt;
&lt;p&gt;Every Star Wars and Star Trek movie (from the 1970s+)&lt;/p&gt;
&lt;p&gt;Fanboys (2008)&lt;/p&gt;
&lt;p&gt;Freedom Downtime (2001)&lt;/p&gt;
&lt;p&gt;Funspot: A Small Documentary on the World&amp;rsquo;s Largest Video Game Arcade (2016)&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/info/techflicks/</guid></item><item><title>5. Tech T-Shirt Slogans</title><link>https://jasoneckert.github.io/info/techshirts/</link><description>&lt;p&gt;&lt;img alt="shirt pic" src="shirt2.png" title="shirt pic" /&gt;&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t Anthropomorphize computers. They hate that.&lt;/p&gt;
&lt;p&gt;The proper way to declare war in software development is &lt;code&gt;var war;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I void warranties&lt;/p&gt;
&lt;p&gt;I read your email&lt;/p&gt;
&lt;p&gt;Linux isn&amp;rsquo;t magic. It&amp;rsquo;s sudo-science.&lt;/p&gt;
&lt;p&gt;Kids: Don&amp;rsquo;t try this at ~&lt;/p&gt;
&lt;p&gt;Code poet&lt;/p&gt;
&lt;p&gt;Byte Me&lt;/p&gt;
&lt;p&gt;I see dead pixels&lt;/p&gt;
&lt;p&gt;To truly find yourself, play hide-and-seek alone&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cd /pub; more beer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;No, I will not fix your computer&lt;/p&gt;
&lt;p&gt;There is no place like 127.0.0.1&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/info/techshirts/</guid></item><item><title>6. Tech Humour and Puns</title><link>https://jasoneckert.github.io/info/techhumour/</link><description>&lt;p&gt;&lt;img alt="joke" src="shaqbill.jpg#center" title="joke" /&gt;&lt;/p&gt;
&lt;p&gt;Future historians: They taught the AIs how to talk like corporate middle managers and thought this meant that AI was conscious, instead of realizing that corporate middle managers aren&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m stepping down from my position as an adult. It turns out this isn&amp;rsquo;t for me, but I appreciate the opportunity.&lt;/p&gt;
&lt;p&gt;Software and cathedrals are much the same thing. First we build them, then we pray.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;How I want tech stuff explained to me in order of preference:
1. A well written technical document.
2. A maintained wiki.
3. A README that doesn't say &amp;quot;TODO.&amp;quot;
   &amp;lt;&amp;lt;omitted for brevity&amp;gt;&amp;gt;
997. A napkin diagram.
998. Spray painted on the side of a cow.
999. A video.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fun fact: If you heat your solid state drive into a gaseous state, you get cloud storage.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/info/techhumour/</guid></item><item><title>7. Three Unconventional Tips for Career Success</title><link>https://jasoneckert.github.io/info/gradspeech/</link><description>&lt;p&gt;&lt;img alt="career success" src="success.png#center" title="career success" /&gt;&lt;/p&gt;
&lt;h1 id="1-dont-turn-down-an-opportunity-because-it-isnt-the-job-you-want"&gt;1. Don&amp;rsquo;t turn down an opportunity because it isn&amp;rsquo;t the job you want&lt;/h1&gt;
&lt;p&gt;Career progression is never a straight line, and good opportunities don&amp;rsquo;t actually have the words &lt;em&gt;&lt;strong&gt;good opportunity&lt;/strong&gt;&lt;/em&gt; written in bold letters on them &amp;ndash; you never know where they will lead you.&lt;/p&gt;
&lt;p&gt;For example, back around the year 2000 I was asked to teach a corporate Linux course on the weekends. I didn&amp;rsquo;t want to give up my weekends for a month, and quite frankly I thought it would be a boring waste of my abilities and time. But I did it anyways, and one of the amazing students in my class worked for Compaq and introduced me to SHARCnet.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/info/gradspeech/</guid></item><item><title>City Trails</title><link>https://jasoneckert.github.io/trails/city/</link><description>&lt;p&gt;&lt;img alt="Hydro falls along Mill Run trail" src="millrun.jpg" title="Hydro falls along Mill Run trail" /&gt;&lt;/p&gt;
&lt;h1 id="rare-charitable-research-reserve-cambridge"&gt;rare Charitable Research Reserve (Cambridge)&lt;/h1&gt;
&lt;p&gt;The rare Charitable Research Reserve is a community-based urban land trust. They maintain a series of amazing trails within the Blair/Galt area of Cambridge along the south side of the Grand River. The trails along the river are part of a gorgeous escarpment that contains exposed rock and fossils from the Silurian period. There are also trails across alvars and open fields with two Osprey towers. Further south, you&amp;rsquo;ll find the beautiful Maple Lane and Grand Allee Trails that contain massive hardwoods and plenty of deer. They comprised the first planned road in the region and the surrounding forest was home to the first settler (Dan Dodge).&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/trails/city/</guid></item><item><title>Cyberpunk, Sci-Fi &amp;amp; General Fiction</title><link>https://jasoneckert.github.io/reads/fiction/</link><description>&lt;p&gt;&lt;img alt="cyberpunk header" src="cyberpunk.jpg" title="cyberpunk header" /&gt;&lt;/p&gt;
&lt;h1 id="thomas-j-ryan-the-adolescence-of-p-1-1977"&gt;Thomas J. Ryan: The Adolescence of P-1 (1977)&lt;/h1&gt;
&lt;p&gt;This is probably the best book I have ever read regarding our human desire for artificial intelligence (AI). It’s about a University of Waterloo student who creates an AI on IBM mainframes. Don’t let that bore you though - it’s a captivating read and has a great ending. I wouldn’t be surprised if this book influenced later movies such as &lt;em&gt;&lt;strong&gt;War Games&lt;/strong&gt;&lt;/em&gt; (1983), and books such as &lt;em&gt;&lt;strong&gt;Neuromancer&lt;/strong&gt;&lt;/em&gt; (1984). I especially liked how much of it took place at the University of Waterloo (my undergrad university and home for many years) including the infamous IBM 360/75 in the “red room” within the Math &amp;amp; Computer building (the largest computer in Canada at the time). I remember the red room well before they decommissioned it in 1999.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/reads/fiction/</guid></item><item><title>Destination Trails</title><link>https://jasoneckert.github.io/trails/destination/</link><description>&lt;p&gt;&lt;img alt="Top of Niagara Escarpment at Kelso" src="kelso.jpg" title="Top of Niagara Escarpment at Kelso" /&gt;&lt;/p&gt;
&lt;h1 id="rockwood-conservation-area"&gt;Rockwood Conservation Area&lt;/h1&gt;
&lt;p&gt;Rockwood has breathtaking scenery - pine and cedar forests surrounding rock cliffs and islands along the Eramosa River. And the trails allow you to see it all. The Cedar Ridge Outlook allows you to see all of Rockwood below. The plateau at the top of the caves is actually owned by the University of Waterloo, but you can hike up there and along the numerous trails to see the remnants of an old house and quarry.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/trails/destination/</guid></item><item><title>Non-Fiction &amp;amp; Biographies</title><link>https://jasoneckert.github.io/reads/non-fiction/</link><description>&lt;p&gt;&lt;img alt="rms" src="rms.jpg" title="rms" /&gt;&lt;/p&gt;
&lt;h1 id="clifford-stoll-the-cuckoos-egg-1989"&gt;Clifford Stoll: The Cuckoo’s Egg (1989)&lt;/h1&gt;
&lt;p&gt;Don’t let the year of this book fool you - it’s probably the best book on computing security. The epilogue is both timeless, and an amazing reflection on the purpose of computer security. Moreover, this book is a very enjoyable read. Cliff, like most of us computer/scientist types, writes with a quirky sense of humour, and isn’t afraid to relay his personal views within the book. For example, the quote below describes Cliff’s colleague Dave when he notices that the hacker used the –f option to the ps command on a Berkeley UNIX system (Berkeley UNIX doesn’t use the –f option, only AT&amp;amp;T UNIX does): &lt;em&gt;&amp;ldquo;We’re watching someone who’s never used Berkeley Unix.” He sucked in his breath and whispered, “A heathen.”&lt;/em&gt;&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/reads/non-fiction/</guid></item><item><title>This website contains zero AI-generated text</title><link>https://jasoneckert.github.io/site/about-this-site/</link><description>&lt;p&gt;&lt;img alt="no AI" src="noai.png#right" title="no AI" /&gt;&lt;/p&gt;
&lt;p&gt;Yup, that’s right &amp;ndash; every single word, phrase, and typo (purposeful or not) has been carefully crafted by yours truly and reflects decades of continuous improvement in both English and thought expression.&lt;/p&gt;
&lt;p&gt;Each blog post started with a real-life event or thought that sparked a passion to create something I wanted to share with others, and in a way that allowed me to better understand and appreciate it as well.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/site/about-this-site/</guid></item><item><title>Trails in and around Algonquin Provincial Park</title><link>https://jasoneckert.github.io/trails/algonquin/</link><description>&lt;p&gt;&lt;img alt="Mac on Mizzy Lake Trail" src="algonquin.jpg" title="Mac on Mizzy Lake Trail" /&gt;&lt;/p&gt;
&lt;h1 id="mizzy-lake-trail"&gt;Mizzy Lake Trail&lt;/h1&gt;
&lt;p&gt;This is the trail where you can see the most wildlife in Algonquin park. You&amp;rsquo;ll wind through 11km of lakes, marshes and forests. My daughter and I saw massive turtles, were followed by otters who mocked us, and even stood 2 feet away from a moose who crossed our path when she realized her foal was on the other side. The pic at the top of this page is of my daughter resting shortly after we found the remains of a grey jay (now officially called a Canada jay) that was likely eaten by a pine marten.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/trails/algonquin/</guid></item><item><title>Video Game Books</title><link>https://jasoneckert.github.io/reads/gaming/</link><description>&lt;p&gt;&lt;img alt="pic from Invasion of the Space Invaders" src="martinamis.png" title="pic from Invasion of the Space Invaders" /&gt;&lt;/p&gt;
&lt;h1 id="martin-amis-invasion-of-the-space-invaders-1982"&gt;Martin Amis: Invasion of the Space Invaders (1982)&lt;/h1&gt;
&lt;p&gt;This is probably the most sought-after video game book of the 1980s by the uber-famous, world-renowned author Martin Amis (most copies sell for over $200 today). Martin Amis has a unique way of bringing you back to the video game world of 1978-1982 using verbal imagery and humour - after all, he was a video game addict at the time! Some of the high-resolution colour photos in the book (including the one above) say more than words ever could. The last half of the book is an in-depth look at some of the most common video games alongside Martin’s favourite game strategies that will land you a high score.  And to top it all off, it has a wicked introduction by Steven Spielberg.&lt;/p&gt;</description><author>Jason Eckert's Website and Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jasoneckert.github.io/reads/gaming/</guid></item><item><title>Old Article 4</title><link>https://padiracinnovation.org/News/1956/11/old</link><description>Old abstract 4 [Read the original article on medRxiv][1] [1]: https://www.medrxiv.org/content/10.1101/_new_4...</description><author>Padirac Innovations' blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://padiracinnovation.org/News/1956/11/old</guid></item><item><title>Old Article 3</title><link>https://padiracinnovation.org/News/1956/11/old</link><description>Old abstract 3 [Read the original article on medRxiv][1] [1]: https://www.medrxiv.org/content/10.1101/_new_3...</description><author>Padirac Innovations' blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://padiracinnovation.org/News/1956/11/old</guid></item><item><title>Old Article 2</title><link>https://padiracinnovation.org/News/1956/11/old</link><description>Old abstract 2 [Read the original article on medRxiv][1] [1]: https://www.medrxiv.org/content/10.1101/_new_2...</description><author>Padirac Innovations' blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://padiracinnovation.org/News/1956/11/old</guid></item><item><title>Old Article 1</title><link>https://padiracinnovation.org/News/1956/11/old</link><description>Old abstract 1 [Read the original article on medRxiv][1] [1]: https://www.medrxiv.org/content/10.1101/_new_1...</description><author>Padirac Innovations' blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://padiracinnovation.org/News/1956/11/old</guid></item><item><title>The Sensory Paradox: Exploring the Positive Association Between Hyper- and Hypo-Responsivity to Sensory Stimuli in Autism and Beyond</title><link>https://padiracinnovation.org/News/1956/11/6</link><description>The study's findings are consistent with previous research on sensory processing in ASD, which has highlighted the complex and variable nature of sensory processing difficulties in this population....</description><author>Padirac Innovations' blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://padiracinnovation.org/News/1956/11/6</guid></item><item><title>Search</title><link>https://lagomor.ph/search/</link><description/><author>Home on Lagomorph</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://lagomor.ph/search/</guid></item><item><title>Archive</title><link>https://etodd.io/archive/</link><description/><author>Evan Todd</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://etodd.io/archive/</guid></item><item><title>About me</title><link>https://etodd.io/about/</link><description>&lt;p&gt;
	Born again.
	Recovering indie game developer.
	See &lt;a href="https://helveticascenar.io"&gt;Helvetica Scenario&lt;/a&gt; for my games.
&lt;/p&gt;</description><author>Evan Todd</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://etodd.io/about/</guid></item><item><title>About</title><link>https://manuel.kiessling.net/about/</link><description>This is the homepage and blog of Manuel Kießling.
I&amp;rsquo;m a software architect, programmer, Linux and AWS admin, book author, and father of two.
You can write me an e-mail at manuel@kiessling.net, or find me on Twitter, GitHub, Xing, and LinkedIn.</description><author>Home on The Log Book of Manuel Kießling</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://manuel.kiessling.net/about/</guid></item><item><title/><link>https://johnj.com/art/art/</link><description>&lt;div class="outline-2" id="outline-container-headline-1"&gt;
&lt;h2 id="headline-1"&gt;
Artworks
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-1"&gt;
&lt;p&gt;
A sample of recent work created since 2018.  See also:
&lt;a href="https://www.instagram.com/eigenhombre/"&gt;Instagram feed&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/art/noli-appropinquare"&gt;&lt;img class="resize" src="https://johnj.com/na2025_hu_994d64122010bd8c.jpeg" style="width: 600px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;Noli Appropinquare&lt;/em&gt;, 2020-2025

&lt;br /&gt;
Oil on linen


&lt;br /&gt;
&lt;em style="font-size: smaller;"&gt;40"x28"&lt;/em&gt;
&lt;br /&gt;


&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;









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












&lt;a href="https://johnj.com/evening-coastal-landscape.jpg"&gt;&lt;img class="resize" src="https://johnj.com/evening-coastal-landscape_hu_70872877b615090c.jpg" style="width: 400px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;Evening Coastal Landscape&lt;/em&gt;, 2022

&lt;br /&gt;
Oil on wood


&lt;br /&gt;
&lt;em style="font-size: smaller;"&gt;4"x5"&lt;/em&gt;
&lt;br /&gt;



&lt;span class="sold"&gt;SOLD&lt;/span&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/red-light-skull.jpg"&gt;&lt;img class="resize" src="https://johnj.com/red-light-skull_hu_6081aeb1da9b5aeb.jpg" style="width: 400px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;Red Light Skull&lt;/em&gt;, 2022

&lt;br /&gt;
Oil on copper


&lt;br /&gt;
&lt;em style="font-size: smaller;"&gt;4"x6"&lt;/em&gt;
&lt;br /&gt;



&lt;span class="sold"&gt;SOLD&lt;/span&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/warperms.jpg"&gt;&lt;img class="resize" src="https://johnj.com/warperms_hu_6aab14a69fd8c893.jpg" style="width: 400px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;War Permutations&lt;/em&gt;, 2022

&lt;br /&gt;
Relief print on paper


&lt;br /&gt;
&lt;em style="font-size: smaller;"&gt;7.5"x9"&lt;/em&gt;
&lt;br /&gt;


&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/skull-woodcut.jpg"&gt;&lt;img class="resize" src="https://johnj.com/skull-woodcut_hu_f4d72bbb9c6db01.jpg" style="width: 400px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;Skull&lt;/em&gt;, 2022

&lt;br /&gt;
Woodcut on paper


&lt;br /&gt;
&lt;em style="font-size: smaller;"&gt;11"x16"&lt;/em&gt;
&lt;br /&gt;


&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/steelworkers-park.jpg"&gt;&lt;img class="resize" src="https://johnj.com/steelworkers-park_hu_8357ab3ea7dddba4.jpg" style="width: 500px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;Steelworkers' Park Blast Furnace Bell&lt;/em&gt;, 2021

&lt;br /&gt;
Oil on Panel


&lt;br /&gt;
&lt;em style="font-size: smaller;"&gt;5"x7"&lt;/em&gt;
&lt;br /&gt;


&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/skull.jpg"&gt;&lt;img class="resize" src="https://johnj.com/skull_hu_b6f7c5b18030d145.jpg" style="width: 350px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;Skull Study&lt;/em&gt;, 2021

&lt;br /&gt;
Oil on Panel


&lt;br /&gt;
&lt;em style="font-size: smaller;"&gt;5"x7"&lt;/em&gt;
&lt;br /&gt;



&lt;span class="sold"&gt;SOLD&lt;/span&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/peonies.jpg"&gt;&lt;img class="resize" src="https://johnj.com/peonies_hu_65c00046446e4a9b.jpg" style="width: 350px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;Flower Study - Peonies&lt;/em&gt;, 2020

&lt;br /&gt;
Oil on Paper


&lt;br /&gt;
&lt;em style="font-size: smaller;"&gt;10"x12"&lt;/em&gt;
&lt;br /&gt;



&lt;span class="sold"&gt;SOLD&lt;/span&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/skull-tempera.jpg"&gt;&lt;img class="resize" src="https://johnj.com/skull-tempera_hu_86b0d18e838642bd.jpg" style="width: 350px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;Tempera Skull Study&lt;/em&gt;, 2021

&lt;br /&gt;
Egg tempera on paper


&lt;br /&gt;
&lt;em style="font-size: smaller;"&gt;Approx. 6"x10"&lt;/em&gt;
&lt;br /&gt;


&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/small-skull-study.jpg"&gt;&lt;img class="resize" src="https://johnj.com/small-skull-study_hu_68fd3ba4773c76df.jpg" style="width: 250px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;Small Skull Study&lt;/em&gt;, 2020

&lt;br /&gt;
Oil on wood


&lt;br /&gt;
&lt;em style="font-size: smaller;"&gt;Approx. 4"x5"&lt;/em&gt;
&lt;br /&gt;



&lt;span class="sold"&gt;SOLD&lt;/span&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/art/crows-and-civilization"&gt;&lt;img class="resize" src="https://johnj.com/crows-and-civilization_hu_ad6925f5c730dd8.jpeg" style="width: 700px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;Crows and Civilization&lt;/em&gt;, 2019

&lt;br /&gt;
Oil on linen


&lt;br /&gt;
&lt;em style="font-size: smaller;"&gt;40"x28"&lt;/em&gt;
&lt;br /&gt;


&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/johnportrait.jpg"&gt;&lt;img class="resize" src="https://johnj.com/johnportrait_hu_a174d49d3c3b1e43.jpg" style="width: 700px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;Portrait of John&lt;/em&gt;, 2018


&lt;br /&gt;
&lt;em style="font-size: smaller;"&gt;11.5"x7.5"&lt;/em&gt;
&lt;br /&gt;


&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/IMG_3147ps2.jpg"&gt;&lt;img class="resize" src="https://johnj.com/IMG_3147ps2_hu_ecde81409e0b7abe.jpg" style="width: 700px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;NUPOC Training Prosthesis&lt;/em&gt;, 2018

&lt;br /&gt;
Oil on Canvas



&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;












&lt;a href="https://johnj.com/figure-study-silverpoint.jpeg"&gt;&lt;img class="resize" src="https://johnj.com/figure-study-silverpoint_hu_9acfad8ef488c94e.jpeg" style="width: 700px;" /&gt;&lt;/a&gt;


&lt;br /&gt;
&lt;em&gt;Figure study&lt;/em&gt;, 2018

&lt;br /&gt;
Silverpoint on paper



&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/art/</guid></item><item><title/><link>https://johnj.com/art/newview/crows/</link><description>&lt;span class="artworktitle"&gt;Crows and Civilization&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/crows-and-civilization.jpeg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Oil on Canvas&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../feed"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../na2"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/newview/crows/</guid></item><item><title/><link>https://johnj.com/art/newview/feed/</link><description>&lt;span class="artworktitle"&gt;Graphite drawing in progress&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/feed.jpeg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../warperms"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../crows"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/newview/feed/</guid></item><item><title/><link>https://johnj.com/art/newview/johnportrait/</link><description>&lt;span class="artworktitle"&gt;Portrait of John&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/johnportrait.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Oil on Panel&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../prosthesis"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../warperms"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/newview/johnportrait/</guid></item><item><title/><link>https://johnj.com/art/newview/na1/</link><description>&lt;span class="artworktitle"&gt;Noli Appropinquare&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/noli-appropinquare.jpeg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Later state of painting.&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../na2"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../skull"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/newview/na1/</guid></item><item><title/><link>https://johnj.com/art/newview/na2/</link><description>&lt;span class="artworktitle"&gt;Noli Appropinquare&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/na-2.jpeg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Early state of oil painting.&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../crows"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../na1"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/newview/na2/</guid></item><item><title/><link>https://johnj.com/art/newview/na3/</link><description>&lt;span class="artworktitle"&gt;Noli Appropinquare&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/na-3.jpeg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Oil on canvas, recent detail&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../crows"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../na2"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/newview/na3/</guid></item><item><title/><link>https://johnj.com/art/newview/prosthesis/</link><description>&lt;span class="artworktitle"&gt;NUPOC Training Prosthesis&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/IMG_3147ps2.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Oil on Canvas&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../skull"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../johnportrait"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/newview/prosthesis/</guid></item><item><title/><link>https://johnj.com/art/newview/skull/</link><description>&lt;span class="artworktitle"&gt;Skull Study, 2021&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/skull.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Oil on Panel&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../na1"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../prosthesis"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/newview/skull/</guid></item><item><title/><link>https://johnj.com/art/newview/warperms/</link><description>&lt;span class="artworktitle"&gt;War Permutations&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/warperms.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Relief print, series of 362880 unique arrangements.&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../johnportrait"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../feed"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/newview/warperms/</guid></item><item><title/><link>https://johnj.com/art/paintings/</link><description>&lt;div class="outline-2" id="outline-container-headline-1"&gt;
&lt;h2 id="headline-1"&gt;
Paintings
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-1"&gt;
&lt;p&gt;







 
 
&lt;a href="https://johnj.com/art/crows-and-civilization"&gt;&lt;img class="resize" src="https://johnj.com/crows-and-civilization_hu_ad6925f5c730dd8.jpeg" style="width: 700px;" /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
"Crows and Civilization", 2019&lt;/p&gt;
&lt;p&gt;







 
 
&lt;a href="https://johnj.com/art/noli-appropinquare"&gt;&lt;img class="resize" src="https://johnj.com/noli-appropinquare_hu_963ab2105ad30876.jpeg" style="width: 700px;" /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;
"Noli Appropinquare", 2020-2022&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/paintings/</guid></item><item><title/><link>https://johnj.com/art/some-drawings/a-seated/</link><description>&lt;span class="artworktitle"&gt;A., Seated&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/a-seated.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Graphite&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../foreshortened-figure"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../quicksketch-figures"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/some-drawings/a-seated/</guid></item><item><title/><link>https://johnj.com/art/some-drawings/composition-study-1/</link><description>&lt;span class="artworktitle"&gt;Composition Study&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/composition-study-1.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Gouache on paper&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../composition-study-2"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../foreshortened-figure"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/some-drawings/composition-study-1/</guid></item><item><title/><link>https://johnj.com/art/some-drawings/composition-study-2/</link><description>&lt;span class="artworktitle"&gt;Composition in Black and White&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/composition-study-2.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Gouache on Paper&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../n-portrait"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../composition-study-1"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/some-drawings/composition-study-2/</guid></item><item><title/><link>https://johnj.com/art/some-drawings/figure-silverpoint-1/</link><description>&lt;span class="artworktitle"&gt;Seated Figure&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/figure-silverpoint-1.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Silverpoint&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../quicksketch-figures"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../gouache-composition-1"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/some-drawings/figure-silverpoint-1/</guid></item><item><title/><link>https://johnj.com/art/some-drawings/foreshortened-figure/</link><description>&lt;span class="artworktitle"&gt;Foreshortened Figure&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/foreshortened-figure.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Oil on Panel&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../composition-study-1"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../a-seated"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/some-drawings/foreshortened-figure/</guid></item><item><title/><link>https://johnj.com/art/some-drawings/gouache-composition-1/</link><description>&lt;span class="artworktitle"&gt;Monochrome Figure Study&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/gouache-composition-1.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Gouache on paper&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../figure-silverpoint-1"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../na-charcoal-study-1"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/some-drawings/gouache-composition-1/</guid></item><item><title/><link>https://johnj.com/art/some-drawings/n-portrait/</link><description>&lt;span class="artworktitle"&gt;Sketch of N.&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/n-portrait.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Graphite&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../na-charcoal-study-1"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../composition-study-2"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/some-drawings/n-portrait/</guid></item><item><title/><link>https://johnj.com/art/some-drawings/na-charcoal-study-1/</link><description>&lt;span class="artworktitle"&gt;Noli Appropinquare&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/na-charcoal-study-1.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Study for work in progress&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../gouache-composition-1"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../n-portrait"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/some-drawings/na-charcoal-study-1/</guid></item><item><title/><link>https://johnj.com/art/some-drawings/quicksketch-figures/</link><description>&lt;span class="artworktitle"&gt;Quick-Sketch Figures&lt;/span&gt;
&lt;br /&gt;


&lt;a class="imageonly" href="https://johnj.com/quicksketch-figures.jpg"&gt;View image only&lt;/a&gt;
&lt;br /&gt;


&lt;div class="description"&gt;
Graphite&lt;br /&gt;
&lt;/div&gt;

&lt;div class="fullscreen-prev-next"&gt;
&lt;br /&gt;

&lt;a href="../a-seated"&gt;Next&lt;/a&gt;
&lt;br /&gt;


&lt;a href="../figure-silverpoint-1"&gt;Previous&lt;/a&gt;
&lt;br /&gt;

&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/art/some-drawings/quicksketch-figures/</guid></item><item><title/><link>https://johnj.com/now/</link><description>&lt;hr /&gt;
&lt;div class="outline-2" id="outline-container-headline-1"&gt;
&lt;h2 id="headline-1"&gt;
2026 - What I'm Doing Now&lt;sup class="footnote-reference"&gt;&lt;a href="#footnote-1" id="footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-1"&gt;
&lt;p&gt;
This year I have been continue to assist with the &lt;a href="https://icecube.wisc.edu/science/beyond/"&gt;IceCube Upgrade&lt;/a&gt;,
deployed this Austral Summer season at the Geographic South Pole.&lt;/p&gt;
&lt;p&gt;
Also,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Regular drawing from life at the Palette and Chisel Academy of Fine Arts;&lt;/li&gt;
&lt;li&gt;Learning to play Mom's old Haynes concert flute&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Like everyone else, I've been trying to make sense of LLMs.  As part
of this work I have been reengaging with Clojure programming, being
reminded how fun Lisps and a good REPL can be.  The new AI tooling
landscape has not changed that – if anything, Clojure is even more
fun than ever, since a knowledgeable assistant can help sand off some
of the sharp corners.&lt;/p&gt;
&lt;hr /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-2" id="outline-container-headline-2"&gt;
&lt;h2 id="headline-2"&gt;
2025 Projects
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-2"&gt;
&lt;ul&gt;
&lt;li&gt;I showed fourteen pieces in the August group show, "&lt;a href="https://johnj.com/soa"&gt;Sites of Arrival&lt;/a&gt;",
at the &lt;a href="https://paletteandchisel.org"&gt;Palette and Chisel Academy of
Fine Arts&lt;/a&gt; in Chicago.  Participated in a few other shows as well.&lt;/li&gt;
&lt;li&gt;I continued work for &lt;a href="https://icecube.wisc.edu/"&gt;IceCube&lt;/a&gt;: embedded systems programming, test
visualization, and communications tests in preparation for the
2024-2025 Antarctic field season ("IceCube Upgrade");&lt;/li&gt;
&lt;li&gt;I did regular "quick sketch" figure drawing at the Palette and Chisel;&lt;/li&gt;
&lt;li&gt;I spent more time than usual on family care, reading, and private writing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-2" id="outline-container-headline-3"&gt;
&lt;h2 id="headline-3"&gt;
2024 Projects
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-3"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://icecube.wisc.edu/"&gt;IceCube&lt;/a&gt; work&lt;/li&gt;
&lt;li&gt;Playing with &lt;a href="http://johnj.com/posts/to-the-metal/"&gt;compilers and toy languages&lt;/a&gt;; learning OCaml;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/eigenhombre/"&gt;Drawing and painting practice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Taking care of family.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://johnj.com/posts/e-paper-rpi-display/"&gt;Making A Tiny E-Paper Status Display for the Raspberry Pi Zero&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://johnj.com/posts/wrangling-dreams/"&gt;Wrangling Half a Thousand Dreams&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-2" id="outline-container-headline-4"&gt;
&lt;h2 id="headline-4"&gt;
2023 Projects
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-4"&gt;
&lt;p&gt;
Worked on &lt;a href="../art/art"&gt;my painting and drawing practice&lt;/a&gt;, including a series of &lt;a href="../art/self"&gt;self portraits&lt;/a&gt;.  Worked as an independent software developer for the
&lt;a href="https://en.wikipedia.org/wiki/IceCube_Neutrino_Observatory"&gt;IceCube Neutrino Observatory&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-2" id="outline-container-headline-5"&gt;
&lt;h2 id="headline-5"&gt;
2022 - Sabbatical
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-5"&gt;
&lt;p&gt;
Prior to September, 2022, I took a five month sabbatical from paid work.
Here are some of the things I worked on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improved &lt;a href="https://github.com/eigenhombre/l1"&gt;&lt;code class="verbatim"&gt;l1&lt;/code&gt;, my Lisp dialect written in Go&lt;/a&gt;, and wrote the
beginnings of a &lt;a href="https://github.com/eigenhombre/onomat/"&gt;roguelike-inspired mini-game&lt;/a&gt; in that language.&lt;/li&gt;
&lt;li&gt;Made &lt;a href="https://github.com/eigenhombre/tunnerl"&gt;a tiny 1-d roguelike&lt;/a&gt; in Python.&lt;/li&gt;
&lt;li&gt;Improved &lt;a href="https://github.com/eigenhombre/smallscheme"&gt;my Scheme implementation&lt;/a&gt; in Python.&lt;/li&gt;
&lt;li&gt;Tinkered with Common Lisp projects, including
&lt;a href="https://github.com/eigenhombre/cl-oju"&gt;this library of functions
inspired by Clojure&lt;/a&gt;, a text-based &lt;a href="https://github.com/eigenhombre/hbook/"&gt;histogramming library&lt;/a&gt;, and a
bookkeeping program for &lt;a href="https://johnj.com/art/warperms"&gt;War Permutations&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Did the first 50+ &lt;a href="https://exercism.org/profiles/eigenhombre"&gt;Common Lisp problems on Exercism&lt;/a&gt; to train myself
better in this old, strange, &lt;em&gt;fast&lt;/em&gt; language.&lt;/li&gt;
&lt;li&gt;Paintings and relief prints.  Example: &lt;a href="https://johnj.com/art/warperms"&gt;War Permutations print&lt;/a&gt;. See
also &lt;a href="https://johnj.com/art/feed"&gt;works in progress&lt;/a&gt; here, or my &lt;a href="https://www.instagram.com/eigenhombre/"&gt;Instagram&lt;/a&gt; feed.&lt;/li&gt;
&lt;li&gt;Practiced &lt;a href="https://exercism.org/profiles/eigenhombre/solutions?order=newest_first&amp;amp;track_slug=python"&gt;Python programming&lt;/a&gt; (again!).  I did a lot of Python
development up until about 2014, after which I switched to mostly
Clojure for day jobs.  But I still like Python and it's fun to get
back to it for awhile.&lt;/li&gt;
&lt;li&gt;Learned about Quantum Computing by &lt;a href="https://www.cambridge.org/highereducation/books/quantum-computation-and-quantum-information/01E10196D0A682A6AEFFEA52D53BE9AE#overview"&gt;reading&lt;/a&gt; &lt;a href="https://www.robertsutor.com/dancing-with-qubits/"&gt;books&lt;/a&gt; and playing with
&lt;a href="https://qiskit.org/"&gt;Qiskit&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://johnj.com/posts/another-migration"&gt;Worked on&lt;/a&gt; the Web site you're reading.&lt;/li&gt;
&lt;li&gt;Journaling and working on improving my handwriting.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-2" id="outline-container-headline-6"&gt;
&lt;h2 id="headline-6"&gt;
2022 - Prior to Sabbatical
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-6"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://johnj.com/posts/l1"&gt;Implemented a Lisp in Go&lt;/a&gt;, with detours into &lt;a href="https://craftinginterpreters.com/"&gt;Crafting Interpreters&lt;/a&gt;
and &lt;a href="https://mitpress.mit.edu/sites/default/files/sicp/index.html"&gt;Structure and Interpretation of Computer Programs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Learned the &lt;a href="https://go.dev/"&gt;Go programming language&lt;/a&gt;.  I've written a &lt;a href="https://github.com/eigenhombre/treetop"&gt;few&lt;/a&gt; &lt;a href="https://github.com/eigenhombre/rf"&gt;modestly&lt;/a&gt;
&lt;a href="https://github.com/eigenhombre/conttest"&gt;useful&lt;/a&gt; things and am really enjoying the experience after years of
focusing primarily on Lisps and functional programming.  Go
emphasizes a different kind of simplicity than Clojure does, and it
seems to occupy a sweet spot on the speed vs. power spectrum.  I'm
regularly impressed by how fast Go programs are, including the &lt;a href="https://gohugo.io/"&gt;program&lt;/a&gt;
used to build this site.&lt;/li&gt;
&lt;li&gt;Learned some Mandarin (reading, mostly).  I got my vocabulary up to
about four hundred words.  It's a beautiful language, and a slog to
learn, but &lt;a href="https://www.hackchinese.com/"&gt;thanks to technology&lt;/a&gt; it is definitely possible!&lt;/li&gt;
&lt;li&gt;Until late April, 2022 I was a staff software engineer at &lt;a href="http://oppfi.com"&gt;OppFi&lt;/a&gt;, where
I wrote software (mostly in &lt;a href="https://clojure.org/"&gt;Clojure&lt;/a&gt;), mentored and taught other
engineers, and tried to improve process, code quality, and
architecture wherever I could.  I spent nearly four years at OppFi,
learned a lot, helped a lot of people, and am happy to move onto other
things.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-2" id="outline-container-headline-7"&gt;
&lt;h2 id="headline-7"&gt;
Prior Decades
&lt;/h2&gt;
&lt;div class="outline-text-2" id="outline-text-headline-7"&gt;
&lt;div class="outline-3" id="outline-container-headline-8"&gt;
&lt;h3 id="headline-8"&gt;
2010-2020
&lt;/h3&gt;
&lt;div class="outline-text-3" id="outline-text-headline-8"&gt;
&lt;p&gt;
Lived in Chicago.  Finished last few &lt;a href="https://johnj.com/tags/southpole/"&gt;South Pole trips&lt;/a&gt;.  Stopped
contracting for IceCube and worked in industry.  Invested more
heavily in art practice.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-3" id="outline-container-headline-9"&gt;
&lt;h3 id="headline-9"&gt;
2000-2009
&lt;/h3&gt;
&lt;div class="outline-text-3" id="outline-text-headline-9"&gt;
&lt;p&gt;
Lived in San Francisco Bay Area, then left LBNL at moved to Chicago,
working for IceCube.  Ran a few marathons and half marathons,
went to the Pole several more times.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="outline-3" id="outline-container-headline-10"&gt;
&lt;h3 id="headline-10"&gt;
1990-1999
&lt;/h3&gt;
&lt;div class="outline-text-3" id="outline-text-headline-10"&gt;
&lt;p&gt;
Graduated, worked at CERN for a year, then spent a few years in art
school, then grad school in art and physics at UW-Madison.  Finished
Ph.D.  1996, then moved to Bay Area.  First two trips to the South Pole.&lt;/p&gt;
&lt;p&gt;





&lt;a href="https://johnj.com/now.jpeg"&gt;&lt;img class="resize" src="https://johnj.com/now_hu_e8d1ca2bc9738e92.jpeg" style="width: 700px; border: 0px solid black;" /&gt;&lt;/a&gt;

&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="footnotes"&gt;
&lt;hr class="footnotes-separatator" /&gt;
&lt;div class="footnote-definitions"&gt;
&lt;div class="footnote-definition"&gt;
&lt;sup id="footnote-1"&gt;&lt;a href="#footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;div class="footnote-body"&gt;
&lt;p&gt;For more about Now Pages, see &lt;a href="https://nownownow.com/about"&gt;this link&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><author>John Jacobsen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://johnj.com/now/</guid></item><item><title/><link>https://jodavaho.io/posts/factorio-1-quality-math.html</link><description>&lt;h1 id="factorio-quality-math"&gt;Factorio quality math&lt;/h1&gt;
&lt;h2 id="motivation"&gt;motivation&lt;/h2&gt;
&lt;p&gt;The quality page in the wiki is a bit scant. It starts simple and quickly dives
far too deep into markov chains. I feel like there&amp;rsquo;s a few missing steps. So,
let&amp;rsquo;s figure out the missing steps, then complete the analysis.&lt;/p&gt;
&lt;p&gt;My gripe is that the whole point of modelling the thing as a markov chain is to
simulate it faster than reality (because markov chains are fast to simualte),
or even better to answer questions &lt;em&gt;without running the simulation&lt;/em&gt;. We can do
those things too.&lt;/p&gt;
&lt;h2 id="quality-basics"&gt;Quality basics&lt;/h2&gt;
&lt;p&gt;[quote from factorio wiki about rolling for quality]&lt;/p&gt;
&lt;p&gt;Quality modules give a % chance of upgrade
Suppose the upgrade probability is $p$.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s ignore input/output ratios for now, and assume that all inputs take 1 item, and all outputs are 1 item. You can simply scale the ins/outs however you like.&lt;/p&gt;
&lt;p&gt;It may be tempting to assign a probability it is green to p, blue to p^2,
purple to p^3, and yellow to p^4. That is a mistake! That would mean you get
more out than you put in:&lt;/p&gt;
&lt;p&gt;For 10% chance:&lt;/p&gt;
$$ 1\rightarrow[0.90, 0.10, 0.01, 0.001, 0.0001] $$&lt;p&gt;But that is 1.01111 units.&lt;/p&gt;
&lt;p&gt;Instead, upgrades are applied to each &amp;ldquo;make&amp;rdquo; until they fail - a gray has a %
chance to be green &lt;em&gt;or better&lt;/em&gt;, and that same green then has a % chance to be
blue &lt;em&gt;or better&lt;/em&gt;, etc up until it fails to upgrade further or reaches
legendary. Think of it as rolling until you fail, and each success gives +1
upgrade. This all happens each time a factory makes something.&lt;/p&gt;
&lt;p&gt;This means that the probability is is a given quality, is the probability it is
&lt;em&gt;at least&lt;/em&gt; that quality, &lt;em&gt;minus&lt;/em&gt; the probability it is &lt;em&gt;more&lt;/em&gt; than that
quality. All blues were first greens, so the number of greens must subtract
the count of those that upgraded further.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s use an array to track the % chance of quality for one step for one input unit mapped to gray, green, blue, purple, and yellow, respectively.&lt;/p&gt;
$$1\rightarrow[1-p, p-p^2, p^2-p^3, p^3-p^4, p^4]$$&lt;p&gt;You can verify for $p=10%$ as&lt;/p&gt;
$$1\rightarrow[0.90, 0.09, 0.009, 0.0009, 0.0001]$$&lt;p&gt;This makes it 1:1 input/output.&lt;/p&gt;
&lt;p&gt;For a 1:2 like iron to cogs, This means you simply have that % chance of getting 2 at
the given quality (e.g., 0.09% chance of 2 green cogs), or multiply by 2 to get
the &amp;ldquo;expected amounts&amp;rdquo; (e.g., 0.18 green cogs/cycle).&lt;/p&gt;
&lt;p&gt;If you want to know how many inputs it would take to get one legendary, just
invert the probability (on avg). The above 10% chance yields a legendary every
10,000 inputs.&lt;/p&gt;
&lt;p&gt;If you want epic OR legendary, add the probabilities first. (1/1000 are epic or legendary).&lt;/p&gt;
&lt;h2 id="cycled-production-or-upcycling"&gt;Cycled production or &amp;ldquo;upcycling&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;[image from factorio friday quality article]&lt;/p&gt;
&lt;p&gt;A common tactic is to recycle gray items to get a certain % of better ingredients, then remake the items using those ingredients.&lt;/p&gt;
&lt;p&gt;Recyling has a 4:1 input/output, so we can find the expected number of outputs by constructing the array and multiplying by the reduction ratio.&lt;/p&gt;
&lt;p&gt;The expected number of completed inputs to get one legendary using 10% upcycle probability is $ 10,000 \times 4$ or 40,000.&lt;/p&gt;
&lt;h2 id="producitivty"&gt;Producitivty&lt;/h2&gt;
&lt;p&gt;If you want to apply producitity at some step, then you can simply multiply by 1+ the productivity%. A 50% productivity and a 5% upgrade chance for iron cogs would yield:&lt;/p&gt;
$$1\rightarrow 1.5 \times [0.95, 0.0475, 0.00238, 0.000119, 0.000006] \times 2$$&lt;p&gt;
Or
&lt;/p&gt;
$$1\rightarrow [2.835,0.142, 0.007125,0.000356,0.000019]$$&lt;p&gt;
implying around 53,000 inputs to get at least one legendary, on avg.&lt;/p&gt;
&lt;p&gt;Compare this to the 10% quality chance, which required 10,000 inputs.&lt;/p&gt;
&lt;p&gt;The productivity doesn&amp;rsquo;t pay &lt;em&gt;in this case&lt;/em&gt;. We&amp;rsquo;ll be able to analyze this more robustly next.&lt;/p&gt;
&lt;h2 id="long-chains"&gt;Long chains&lt;/h2&gt;
&lt;p&gt;The above assumes you use one step, with some tradeoff of quality and producitivty.&lt;/p&gt;
&lt;h3 id="outline-for-long-chains"&gt;Outline for long chains:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Sidebar: Simulating this could involve sampling the &amp;ldquo;paths&amp;rdquo; for each item.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Better is to count the paths, and the number if inputs/outputs for each path.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For example two upgrades could produce legendary on the first upgrade, or green then legendary, or blue then blue, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Instead of sampling, we &amp;ldquo;diffuse&amp;rdquo; the probability. This way we can make statements about which ratio of input ends up in a particular output.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Simulation diffusion:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Matrix / vector multiplications&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;Diffusion&amp;rdquo; matrix&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Non-looping examples&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Language of production chains:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;P(4) produces 4x&lt;/li&gt;
&lt;li&gt;P(0.25) produces 1/4 e.g., recycling, note the &amp;ldquo;backwwards&amp;rdquo; production.&lt;/li&gt;
&lt;li&gt;U(0.10) upgrades with 10% probability&lt;/li&gt;
&lt;li&gt;Can easily make big matrices to represnent multiple items with their qualities, just makes matrices bigger&lt;/li&gt;
&lt;li&gt;Note; Here&amp;rsquo;s where the factorio article just &amp;ldquo;arrives&amp;rdquo; whole cloth with no explanation&lt;/li&gt;
&lt;li&gt;Terminal states of &amp;ldquo;trash&amp;rdquo; (new element) or legendary if p&amp;gt;0 at any recursive step.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Can simulate now - examples of matmul-based diffusion&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Even better: Counting. The &amp;ldquo;paths&amp;rdquo; through quality can be enumerated, and the
relative proportions known in advance. This is the real power of modelling as
a markov chain.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A detailed derivation is avilable in a blog post:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Instead, I&amp;rsquo;ll provide intuition.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="counting-paths-through-upgrades"&gt;Counting paths through upgrades&lt;/h2&gt;
&lt;p&gt;Lemma 1: All legendary items were upgraded exactly 4 times. This shoudl be
obvious, you can&amp;rsquo;t improve more than legendary, and if you improved less than 4
times you wouldn&amp;rsquo;t have a legendary item. Thus, each legendary item &amp;ldquo;rolled&amp;rdquo; at
least 4 times successfully against a quality %.&lt;/p&gt;
&lt;p&gt;Example of lemma 1: A two stage upgrade of iron (e.g., U(10) ore  -&amp;gt; U(10) plates):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;gray ore -&amp;gt; yellow ore (4 successful rolls), implies &amp;ldquo;rolling 10&amp;rdquo; four times.&lt;/li&gt;
&lt;li&gt;gray ore -&amp;gt; green ore -&amp;gt; yellow plates (1 roll + 3 later rolls), implies &amp;ldquo;rolling 10&amp;rdquo; 1 time, and then 3 times = 4 times.&lt;/li&gt;
&lt;li&gt;gray ore -&amp;gt; blue ore -&amp;gt; purple plates (2 successes + 1 success, but not yellow result)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And so on.&lt;/p&gt;
&lt;p&gt;You can model this as a string of events&lt;/p&gt;</description><author>jodavaho.io</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jodavaho.io/posts/factorio-1-quality-math.html</guid></item><item><title/><link>https://jodavaho.io/posts/dev-ten-thousand-x.html</link><description/><author>jodavaho.io</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jodavaho.io/posts/dev-ten-thousand-x.html</guid></item><item><title/><link>https://jodavaho.io/posts/dev-remote-work-is-a-benefit.html</link><description>&lt;p&gt;Today I worked 11 hours, from home, checking on my sick daughter every hour or so, making sure my wife had enough sparkling water for her afternoon meetings, interviewing candidates, meeting with team, and pushing code.&lt;/p&gt;
&lt;p&gt;Remote work is great.&lt;/p&gt;</description><author>jodavaho.io</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jodavaho.io/posts/dev-remote-work-is-a-benefit.html</guid></item><item><title/><link>https://jodavaho.io/analysis/mark-1.html</link><description>Mark 1






&amp;amp;





&lt;!-- Custom stylesheet, it must be in the same directory as the html file --&gt;


&lt;!-- Loading mathjax macro --&gt;
&lt;!-- Load mathjax --&gt;
    
    &lt;!-- MathJax configuration --&gt;
    
    &lt;!-- End of mathjax configuration --&gt;

  &lt;div class="border-box-sizing" id="notebook" tabindex="-1"&gt;
    &lt;div class="container" id="notebook-container"&gt;

&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;In which we estimate the exit velocity and flight time from our Mark 1 prototype, and use that to estimate the possible range at 45 deg launch&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[13]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-r"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ggplot2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[19]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-r"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;shot.dist&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="m"&gt;67&lt;/span&gt; &lt;span class="c1"&gt;#meters&lt;/span&gt;
&lt;span class="n"&gt;angle.deg&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;seq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#Unknown / estimated&lt;/span&gt;
&lt;span class="n"&gt;angle.rad&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;angle.deg&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;180&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kc"&gt;pi&lt;/span&gt;
&lt;span class="n"&gt;G&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="m"&gt;9.8&lt;/span&gt; &lt;span class="c1"&gt;#mpss accel from gravity&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[31]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-r"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Given angle theta, we have horizontal velocity of cos(theta)*v_0&lt;/span&gt;
&lt;span class="c1"&gt;# So, cos(a)*v_0 * t = 67 -&amp;gt; v_0 = 67/[cos(a)t]&lt;/span&gt;
&lt;span class="c1"&gt;# And sin(a)*v_0 - gt/2 = 0 at the peak, so &lt;/span&gt;
&lt;span class="c1"&gt;# 67 s(a)/[c(a)] = gt^2/2&lt;/span&gt;
&lt;span class="c1"&gt;# 134* tan(a)/[g] = t^2&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;shot.dist&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;tan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;angle.rad&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Revisiting &lt;/span&gt;
&lt;span class="c1"&gt;# sin(a)*v_0 - gt/2 = 0 at the peak, so &lt;/span&gt;
&lt;span class="n"&gt;v_0&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;angle.rad&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="nf"&gt;ggplot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="nf"&gt;geom_point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nf"&gt;aes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;angle.deg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nf"&gt;geom_line&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nf"&gt;aes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;angle.deg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nf"&gt;labs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Estimated flight time as a function of launch angle with known distance traveled&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;ggplot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="nf"&gt;geom_point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nf"&gt;aes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;angle.deg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;v_0&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;span class="nf"&gt;geom_line&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nf"&gt;aes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;angle.deg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;v_0&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nf"&gt;labs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Estimated exit velocity as a function of launch angle with known distance traveled&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;




&lt;div class="output_png output_subarea "&gt;
&lt;img height="420" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAADAFBMVEUAAAABAQECAgIDAwME
BAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUW
FhYXFxcYGBgZGRkaGhobGxscHBwdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJyco
KCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6
Ojo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tM
TExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1e
Xl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29w
cHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGC
goKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OU
lJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWm
pqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4
uLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnK
ysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc
3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u
7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7////i
sF19AAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO3dCXxU5dn+8XtICPsii4KC+44b
RpBWcUWrraGKKIoU99YX+/JK1WoVhKpo/1q3Wjdwqda6oIhapS4g4kIVBAQECcimCYSgsoWE
sD3/Ofd5kpxZz5nJuc/m9ft8CpE5k2vOZL4lGWBCCiHU6MjvG4BQFAIkhFwIkBByIUBCyIUA
CSEXAiSEXAiQEHIhQELIhVyCtJUa+t56wbbFZfEfr6O37N6DeWC62nerf3NWn5bD1D/or2ne
41/o+bTvy/ENyK85P295hZPj8rsZlvc+kl7K8aYl3ifOc7jE52KeVupOP6rIYzlDxgMg+Z7L
/HCxLderZrw/LA9MNyEdfYxuvfWCb+hc5egBZB6YLsvt3ZdOHecAkvV9Ob4B+XUgnfKIk+Py
uxmW9x5MSOZp+QAp88PFtlyv6jWkHWkvMG/1gtdt71cnkL6nY+M/MqSU95gdkoMbkFcb6Chn
B+Z1M6zvPXCQ+Fw8g5R8z/1EITUctz3Te3ACqYL6KQ0ppeyQHNyAvPqeTknzqztqU34py0cv
zdFp3rvtwzvNu7GHlG47F7IOIWU+Rfubk/SATRh2dv3MV92S/kGbmJ+Qvrxwv+YHXrlKqXOM
L5p+r242fmP+C71/ZVGsx/9VbfxDz1Y9xhvHbb/3pN3bHH5TZf2BSn0ycL82xQ/zHbJ15PFt
+4zZUX97hxjHDDEh3Wz+Vv/3vu36PrbCuGL8gzlj4D67nfKh5X0p2xtgnTNruEmW00h3odFV
xnsfqH5PH/L7omuMkY/v7UC7ncq/osaf0eHgS+Yl3gyl/nV2l65nPWe8lXi0Wf2l+r2bmR9O
yw2wH7XeJ2nOIPFKDfekfuAk3TOn0zvxHx+hmPEl8GX0EJ+LPq3UHRPSGOq9MWmm/uRS3l+a
u8LyADDvueTHVebTqb8PUk5EX/VO+uLTY5pssLyHK+hBPuAGGpNwrdT7I/mBaSQC6eMiOuL0
btTte/XCcDp0zOS6x3GPJqee15LO6dn+3BOJXleqthe1P+mkdnRMTd2B6v6CgqP6tKDTtyj1
w3HUtHhv+lXrutv72g20/5jXrJAuo5YndKOzTEhDmh426HAqmlP/voyy3wDrnJnlJllOI82F
3Jt/pH3HTEh6TF9Ahw3qQU2/UGrnRdT8Z0dSy0kJNyN+qwuOPqYw/n8JiUfrGi7V792MP5zW
G2A/ar1P0pxBwrblnjQfOMn3zD10c/zHi827bX8q5XPRp5W6w5DupWN+TJmpO7mU95d6V1gf
AHzPpTyuMp2O5T5IORF91Tvp6VbdzthieQ/v0sl8wL70TcK1Uu6PlAemkQikk+jV+G+zAw3h
5u+j+nHcdKpSM5vQweVK/YkuUepZOqlKqaqf0fT6LyIK9pmr1NpT6U9K/YF6xQ98oYjSfWrH
7/ENOv4Hpe4iExLdqdSuq2hEuk/tMtwA65yZ9SZZTiP1QjPzk6/ExzSNjd+OK2m4Us9Q7/j/
071R0HGL9WZMpAO+VurrA4z3bj3azHppyqd21hvgYNR6n6SegfVK1nuSl1LumXnUJ/5j95b0
B6W+o/30udR9ape8Y0B6hHqsU4kzlpNLeX+pd4X1AcBrKY+rTKdjuQ9SP8TmVe+kdmN2JLyH
7R0LjNv7OZ2YePop90fqA1NJPP0d/9h3LDS+EvnqL+8lPY5/axx6ML0W/3ER9Y3/Pj/wI+NX
xtI/6g48j94zfmV18/Y7f2zWdKXx9v9mhtSL5hu/3NOEVGy8PdN4NxkhJd8Ay5w+3HqTLKeR
eqFZOki9jbe/oHOU2if2teKT+sh6M46m941ffYeOTjzazHppCiTrDXAwar1PUs/AeiXrPclL
qffMnoWb1Uq6tui4+HuhYUmQknfikJ6OHbxGqcQZ68klv7+UuyLhAcBrKY+rTKdjuQ9ST6QO
0nHJd8jV9FT8zetpfOLpJ98faR6YSuLp76uM/+f49ec7rbdaP47HGb/Sh+Kc4yZOrLvusmMb
IO3VzrxeL/r6EyrhN+dlhLSt4BBl3gsMaUz9XkZIyTfAMpdwOuZNspxG6oVm6SCNNt5eGf94
rqZefNDGsmrLzdhW0NW8bpf4w8JytFnCpRmebDBvgINR632SegaWKyXck7yUes9cFv+i5nl6
o2/BJvU7ejMJUvJOP3qgif79KWHGcnLJ7y/lrkh4AOjfkZIeVxlOx3ofpJ5IHaRRyXfIFJ7e
p/mGxNNPvj/SPDCV0Kd2iw4lanfWw2tV0uOYH399KH5DNaS1Dww8qnX8d7E6SJsbfmOb8Qxd
z++sOiOkUjqTf/mfJqSn6++ljJCSboB1ru54y02ynEbqhWbpIBn/t8Yfz4/owjQ3Y0nd/4X8
jJZZjzZLuDQVkuUGOBi13iepZ2C5UsI9aSyluWdejH9Rc03s+5Hxx/+hRZuTICXv9KNYj6Km
i8wbUT+TcHLJ7y/lrkh4APBayuMqw+lY7oM0J1IHaVzyHbKjc/PN6jMalHSt5PsjzQNTST1r
t+3t/zksRu3etoE0rQ0dctldb/65HtIG6jJGt+x5fXt3FWWCNF9/+F/Qz9rV30tOIVnn9OHW
m2Q5jTQXcgmQPjYf03yh8fF8z/gyLOVmlNY9mvrG/9/OcrRZwqUpkKw3wMGo9T5JPQPLlRLu
SWMpzT3zfZM+6ojD1ft0y1o6XSVBSt7pF//66GY+zDqTeHJJ7y/lrkh4AJhP0yQ/rjKcjuU+
SHMidZCeT/mQXkOvxL8Ampx0reT7I80DU0n+OVLFLdTFBtJBsReNX7m34VO7zl3rr/9f/Tvo
dxl/R9oSO4x/+S/5QrLO6aw3yXIaGS5MhPRS0mN6BZ3ABy19qdRyM2oL9jKvu2dBbeqjJ+HS
FEjWG+BgNPUBbn0Hlisl3JO8lHrPqN6Fq2K/U1uanvgK3atsIZWqqu70skqYSTi55PeXclck
PABurv+bDdbHVYbTsd4HqSeSACnhQzqNBu/qvofxdZj1Wsn3R5oHppKBtPjQwcZPuzpTVdbH
8Rbam48f1gDpTOKv/X7c73i1vkUR/wnO2MxPNhxMC41f7p03JMucmfUmWU8j5UJdHSTjeVZ1
RdJjemeHwuXG25fRu9abcQR9YPzqFDoyzaMn4dJkSAk3wMFoygM84R1Yt633JD9wUu4ZpUbR
tcb7+3nRVbRA2UKqUOoV6laVOGM9ueT3l3JXJDwAjLWUx1Wm07HeB6knYoWU+CHd2aXddONZ
xMTTT74/0jwwlQyk2maF78Z/ejt2iHGr6z8NSH0cd2q6JH7rHy+kx+oO/JS6zFFqUwndZvzB
WJ81Sk1unRnSy3TiBuNPJFIhnV5/Y7LeAOucmeUmWU8j5UKd+VD/K5XEz35SQdJjWt1Pfb9X
6v3CjputN+NlOjj+bkoPNJ/+ToZkvTTldyTrDXAwmvoAt74D65Ws9yQvpd4z8V9qTiuNPzdo
zh8QDcn8rCwtpPiPNyXPNJxc8vtLvSusDwD+vTzlcZXpdCz3QeqJmFfVvyMlfkivpaNonkp6
HKbcH6kPTOUmpOLjdE8ZH5DDzzqCCt9Xah0VXfh0psfx7VR40oUHtLma9n5QHxg/Mnbo6e3p
pFr+c6+i4w+h3r0zQlIXU9uT9y0YRjckfjD1++Ky3gDrnJn1JllOI/VCM/OhvrIdHTykDx2c
/Jiu/QW16ntcrMlrCTdDXUJNex3XlC5V6R491ktTIFlvgIPR1Ae49R0kbFvuSfNpjZR7Ru1o
T92V8dw1XaWU/giYp5UJ0tdNmy5OnLGcXPL7S70rrA8AXkt5XGU6Hct9kHoi5lU1pMQP6UdU
97cbLddKuT9SH5hK5J9R3Kl2vXJS1+YHDeE/mhjToeXITI/jnY8e1erQS1fuHNjqXH1g/P9v
Srq3Pe5v5t/EuPX4Nr1u3nxKZkjqgeIWx73/DP056UGj35eyuwEJc5z1JllPI+VCM/1Qn/ur
zkTHf538mFa7Hjylfbdzvki8GUo9e+YeXc76l/FWGkiWS1MgJdwA+9HUB7j1HSRuN9yT+on2
5HtGqYFkfGq1uZB/P9HnwqeVCZK6ic5Immk4ueT3l+ausDwAeC3lcZXxdCx3fOqJ8FU1pMQP
6c496T59UMO1Uu+PlAemCvk/7Ksw/2HJHfRPn29IvPWr7I8J7miQ7slwFmpI5/BXqerI5pV2
R6Ls4Z5sbKGG9DwdP69m8VC60u8bEvpwTza2UENSNxYYX5Sd/4PftyP84Z5sZOGGpEofH/X0
F/aHIdtwTzaukENCKBgBEkIuBEgIuRAgIeRCgISQCwESQi4ESAi5ECAh5EKAhJALuQNpg11V
27fYHuN2W3yY3F7l+Wa1D5PbN3u+WePD5PaNdodschnSOrs2qSrbY9yuyodJtcnzzWofJtUG
zze3+jCpfrQ75EdAkpkEJKkAiQMksQBJbBKQOEASmwQkHSAJTQKSVIDEAZJYgCQ2CUgcIIlN
ApIOkIQmAUkqQOIASSxAEpsEJA6QxCYBSQdIQpOAJBUgcYAkFiCJTQISB0hik4CkAyShSUCS
CpA4QBILkMQmAYkDJLFJQNLlBKn2sd8OGrk88e2JJfEavr+k7W0CJLEASWzSZUi3X/7Z4jFD
Nye8/ejo2bNnzwGk5ElAkir8kNaVzFOqZuC0hLdHv5h4jF2AJBYgiU26C2nZiBqldg2ZlPD2
NdNqNlmOsb1NgCQWIIlNCjzZ8HnJEuvbu867vn/JsEXGf/1QVla2+ke7qlS17TFut2WL55PV
qsrzzRofJtUmzzdrfZhUG+wO2ZAbpF3vDngi4e3vz39y/bp7Bhvv5tbi4uJ+zjQiFLF21r/l
BFLFTYMmp3l76wVT4z++Pnbs2Adq7Nqmttse43bbfZhU27zf9GFS1Xq+ucOHSbXV9phcIJUO
umdDurfVsIl1b9l+uomvkcTC10hik+5+jbTjsvEpb38ybKNSWwbOAqSkSUCSKvyQZvX/dEG8
H9SUyfVvbxoyeu5XI0fUf4Zoe5sASSxAEpt0F9KkEu4tNXJEw9uVdw259KGGJ8BtbxMgiQVI
YpP4u3YcIIlNApIOkIQmAUkqQOIASSxAEmriNZfcvsLmGEASmgQkqTyH9HuKt+f87AcBktAk
IEnlNaQ3iDsj+1GAJDQJSFJ5DelaE1JBedajAEloEpCk8hrSVSYkWpX1KEASmgQkqbyGdIfp
6JDsRwGS0CQgSeUxpDc6m5AmZT8MkIQmAUkqTyFVji0svPGafdue8IbNgYAkNAlIUnkJaWV/
6jgRfyBbFyCJTUYb0meH0tFz1gFSXYAkNhlpSM+3o6H8pDcgmQGS2GSEIVXc2KTZA3oSkDhA
EpuMLqTSU2mvd+smAYkDJLHJyEKatjed8HX9JCBxgCQ2GVVIj7aIDa9omAQkDpDEJqMJac1w
av20dRKQOEASm4wkpAW96ICPEyYBiQMksckoQnprDzprWeIkIHGAJDYZQUj3NS24sTJpEpA4
QBKbjByksouowyspk4DEAZLYZNQgzTycjpydOglIHCCJTUYM0ovt6cLv0kwCEgdIYpORglQ5
qknR2LSTgMQBkthklCAt/xV1/U/6SUDiAElsMkKQZhxEfRZmmAQkDpDEJqMD6YmWNHR1pklA
4gBJbDIqkNYMp+YPZ54EJA6QxCYjAmlxX9rvoyyTgMQBkthkNCC9343OWJptEpA4QBKbjASk
+4piw9dmnQQkDpDEJiMAqewSavOszSQgcYAkNhl+SF8eSz1m2U0CEgdIYpOhh/R6JxqQ/VW9
1wFSXYAkNhlySJWjCgpHOZgEJA6QxCbDDWlFCXV8zckkIHGAJDYZakifHUK9FziaBCQOkMQm
Qwppxduvf7Pun231C6naTwISB0hik+GE9OhuRK1OjzV7yOkkIHGAJDYZSkj/acbf8ajje44n
AYkDJLHJUEIaYH7rsF7OJwGJAySxyVBC6m1C6u58EpA4QBKbDCWk/iak451PAhIHSGKTYYRU
erQJ6Wn7Q+smAYkDJLHJEEL6oDsd1pqo2cgcJgGJAySxyfBBerxFbPjaJRNeXJTLJCBxgCQ2
GTZIa4ZTq2dynwQkDpDEJkMGqfQk2u9j+8NSJgGJAySxyXBBmtadTv8mn0lA4gBJbDJUkJ5o
YfNPyjNOAhIHSGKTIYKU35dH5iQgcYAkNhkeSHl+eWROAhIHSGKToYFkfHmU7RW3sk8CEgdI
YpNhgZT3l0fmJCBxgCQ2GQ5IFfl/eWROAhIHSGKToYBUenLWFyR2MAlIHCCJTYYB0rS9G/Hl
kTkJSBwgiU2GAFLjvjwyJwGJAySxycBDMr48cv7vJTJNAhIHSGKTQYfU6C+PzElA4gBJbDLg
kD7cm05r3JdH5iQgcYAkNhlsSOPiXx5VuDEJSBwgiU0GGZIrXx6Zk4DEAZLYZIAhufPlkTkJ
SBwgiU0GF5JLXx6Zk4DEAZLYZGAhufXlkTkJSBwgiU0GFJLx5dFTLk56D2m9XVWq2vYYt6v2
YVJVeb651YdJtdnzzW32k8tOpf0+dXGyVm20O2Sjy5C22rVNbbc9xu22+zCptnm+ucOHSR9O
c6ft5Mx96Yw1rk6qWttjXIZk+7skPrUTC5/amY1r6eKXR+YkvkbiAElsMniQKobH3PzyyJwE
JA6QxCYDB2nJKbSvS396ZJkEJA6QxCaDBmn6PnSqW396ZJkEJA6QxCYDBmm8618emZOAxAGS
2GRgIC18+c2V8S+Pmj8iMglIHCCJTQYF0ogioo5HULcpMpOAxAGS2GRAIN1nfuuwnouFJgGJ
AySxyYBAOsSEdIXUJCBxgCQ2GRBIrU1Iv5CaBCQOkMQmAwLpIBPSVVKTgMQBkthkMCDN7MKO
WuT7Ivm2k4DEAZLYZCAgTWhPRxURdf6H2CQgcYAkNhkESPcVFt69btGEf6+SmwQkDpDEJv2H
VH4xdZgkPQlIHCCJTfoOaUEx9ZgjPglIHCCJTfoNaWo3+vW38pOAxAGS2KTPkJ5oHhte6cEk
IHGAJDbpK6SK4dT6WU8mAYkDJLFJPyEt/0X+3145x0lA4gBJbNJHSJ8dJPFv+NJPAhIHSGKT
/kF6qR0NXePVJCBxgCQ26RekylFNiv7m3SQgcYAkNukTpLILaY93PJwEJA6QxCb9gTS/Jx05
18tJQOIASWzSF0hv704DvvN0EpA4QBKb9APSQ0UFozyeBCQOkMQmvYe05gZq87zHm4BkBkhi
k55DKu1LB87weBOQdIAkNuk1pOl70y/k/t1RpgDJDJDEJj2G9K82seHVPnxZBkgcIIlNegqp
clSTZo84/67m7gVIZoAkNuklpJXnUNf3nH9XcxcDJDNAEpv0ENIXh1HvhesASQdIYkUb0r87
0W/KjTcAiQMksSIN6b6mhfpPYQGJAySxIgyp/BLqMFG/DUgcIIkVXUilP6fDZtf9ByBxgCRW
ZCFN605nLq//L0DiAEmsqEIa3yI2fG3DfwISB0hiRRNS5Y2xVs9YfwGQOEASK5KQVpxNe01N
+BVA4gBJrChCmnkI9fk68ZcAiQMksaIFaenIgcPemdCehq5OugCQOEASK1KQPutofOuwJkUP
plwCSBwgiRUpSL34e/DFHkq9BJA4QBIrSpAWm98Ulm5NvQiQOEASK0qQ5mpI16deBEgcIIkV
JUgV7UxI/0y9CJA4QBIrQpAqR8XY0elpvvkRIHGAJFZ0IJUNpK53FLfY57p0r3MCSBwgiRUZ
SAt60nELM14KSBwgiRUVSB/sRedmeUViQOIASayIQHqqRezGbN8XFpA4QBIrEpAqR8Va/iPr
EYDEAZJYUYBUdj51nZL9EEDiAEmsCEBacEy2pxnMAIkDJLHCD+mDveg82298BEgcIIkVekhP
2jzNYAZIHCCJFXJIlaNirbI/zWAGSBwgiRVuSKvOsX2awQyQOEASK9SQ5h9DveyeZjADJA6Q
xAozpP/s7uBpBjNA4gBJrBBDGt88dqPTYwGJAySxQgvJeOm6Zx0fDUgcIIkVVkirfkV7TrU/
rC5A4gBJrJBCmn809VqUw/GAxAGSWOGE9J/daYDDpxnMIgCp9rHfDhq53Hx71/NXXv7Ujoaf
ASlxEpCclcvTDGYRgHT75Z8tHjN0M7/90uAZM4c+1fAzICVOApKTcnuawSz8kNaVzFOqZuA0
4+0dQ99RavqgmrqfASlpEpAclOPTDGbhh7RsRNzLriGTjLdXlqxTanPJwrqfASlpEpDsy/Vp
BrPwQ+I+L1li/DSn/874jwM/qfs5/sMPZWVlq3+0q0pV2x7jdlu2eD5Zrao836zxYVJtyv/K
7+1O56/J/Wq1jZjMs1q1we6QDblB2vXugCf4jekXGD/+ZnLdz/Efbi0uLu7nTCNC6sUWsdF+
3wb32ln/lhNIFTcNmmy+9UX/XfEfB06v+zn+w+tjx459oMaubWq77TFut92HSbXN+00fJlVt
ntesvjXWekJe19yR72T+7VBbbY/JBVLpoHvqfgdbVhL/pLC6ZH7dz3WH2H66ia+RxArT10gr
f0l7fpDfVcP/NdKOy8Y3vD1kqlIzLqyp+xmQkiYBKVvz8nqawSz8kGb1/3RBvB/UlPjndy9c
vnjJ1U82/AxIiZOAlKXJnen8snw3ww9pUgn3lho5Qqldz115+ZM7G34GpMRJQMrcuJz/NoO1
8ENyku1tAiSxQgKp8kZq9VwjNgGJAySxwgFp5S9p748bswlIHCCJFXhIpe+Vrpt3FPX+ulGb
gMQBklgBh7R0QIyobycaXN64TUDiAEmsgEP6pfl9ykc1dhOQOEASK9iQPtbfXtnRa9dlC5A4
QBIr2JCe15DGN3YTkDhAEivYkN7RkN5o7CYgcYAkVrAhfdCUHR22urGbgMQBkliBhvRym1in
uKODPm30JiBxgCRWkCHdV1j06JpX753Q6N+PAEkHSGIFF1LFVdThTbc2AYkDJLECC2nlmbT/
565tAhIHSGIFFdL8I+jkb9zbBCQOkMQKKKR3dqdLXPjSqD5A4gBJrGBCeqZFY/7xUZoAiQMk
sQIJaWyTlrm+lKpNgMQBklgBhFR+Ee3xvsubgMQBkljBg7T0RDpsrtubgMQBkliBgzTrIDpt
ueubgMQBklhBgzS5Iw1d4/4mIHGAJFbAII1vVnC3xCYgcYAkVqAgGd/56F8im4DEAZJYQYJU
PpC65vmSxHYBEgdIYgUIUmkfOnah0CYgcYAkVnAgfdydzvlWahOQOEASKzCQXm1HV68V2wQk
DpDECgqkB5oW3iu4CUgcIIkVDEiVN1L7SZKbgMQBkliBgLTqbNp3hugmIHGAJFYQIC04hnot
lt0EJA6QxAoApOnd6Ny8v4OYwwCJAySx/If0cpvYjZXSm4DEAZJYvkMaW1D0mPwmIHGAJJbP
kIzX3Pq3B5uAxAGSWP5CWnGGm6+5lSVA4gBJLF8hzXP3NbeyBEgcIInlJ6R3OtMQN19zK0uA
xAGSWD5Cetrt19zKEiBxgCSWf5Dcf82tLAESB0hi+QVJ4jW3sgRIHCCJ5ROkJSfQ4a6/5laW
AIkDJLE8h7TmL8fvf9aTIq+5lSVA4gBJLM8hXWR+V9irKzxdBSQOkMTyGtK/TUdtvHUESGaA
JJbXkEbp71M+09tZQOIASSyvIf1ZQ5rj7SwgcYAklteQJpuODhL/hxOJARIHSGJ5DGn+Eeyo
+buergKSDpDE8hbSR3vSJS8M7neNx5/YAZIOkMTyFNIrbYy/Xefsu5q7GyBxgCSWl5Aealr0
+DpAagiQhCYjDcl47bo3eBKQdIAkNBllSOUXUPdPzUlA0gGS0GSEIS09gXou0pOApAMkocno
Qprfg05dUTcJSDpAEpqMLKTpe9KQ+u8MC0h1AZLQZFQhTWhj/UflgFQXIAlNRhSSftq7fhKQ
dIAkNBlJSMbT3m8mTAKSDpCEJqMIqXwg7Z34LVsAqS5AEpqMIKSlP69/2rt+EpB0gCQ0GT1I
cw6ms5O/wzIg1QVIQpORg/RhV/rNmuRfBKS6AEloMmqQJrRO91qqgFQXIAlNRgzSA4VF49JN
ApIOkIQmIwWp8kbaLe23PgKkugBJaDJKkMrPp33+m34SkHRuQ1pvV5Wqtj3G7ap9mFRVnm9u
FZpc8XMqXpJhUm2W2czSNu8na9VGu0M2ugxpq13b1HbbY9xuuw+TapvnmztkJhcfQv1/zDTp
w2nu9GFS1doe4zIk298l8amdWDKf2r3XOctrEuNTu7rwNZLQZFQgPZf1W4gBUl2AJDQZEUj3
p3/au34SkHSAJDQZCUgZn/aunwQkHSAJTUYBUvl5mZ72rp8EJB0gCU1GANKSPlT8tc0kIOkA
SWgy/JBmH0i/Sv7b3imTgKQDJKHJ0EN6txNdvdZ2EpB0gCQ0GXZIz7aI3eZgEpB0gCQ0GXJI
dxU0e9LJJCDpAEloMtSQKm+kDm85mgQkHSAJTYYZUvl5tO9nziYBSQdIQpMhhfTRmJteLO1D
xy12OAlIOkASmgwnpFuKiKgFnfOd00lA0gGS0GQoIb1hfnvlI22f9q6fBCQdIAlNhhLSpSak
zs4nAUkHSEKToYR0rgmpyPkkIOkASWgylJD+qD+1cz4JSDpAEpoMI6SKQSakCc4nAUkHSEKT
IYRUdg7t36eA9n0mh0lA0gGS0GT4IC09nk5Ytq6sNKdJQNIBktBk6CDNOYh+VZbzJCDpAElo
MmyQPt6TrnL8x0cNk4CkAyShyZBBeqNdthcLyjwJSDpAEpoMF6Rnmxfcn9ckIOkASWgyVJD+
0qTlC/lNApIOkIQmQwTJeNGtyXlOApIOkIQmwwOp4jfUPfuLbmWZBCQdIAlNhgbSt2fQYfPz
ngQkHSAJTYYF0pLedOKy/CcBSQdIQpMhgTTnIDon5z+GtUwCkg6QhCbDAemjvP4Y1jIJSDpA
EpoMBaTX2+b1x7CWSUDSAZLQZBgg/aNZ4YONnAQkHSAJTYYA0t1NWr7Y2ElA0gGS0GTgIRkv
ApnnH8NaJgFJB0hCk0GHtIqpCR8AACAASURBVGYI7e3sRSCzTgKSDpCEJgMOaVW/RvwxrGUS
kHSAJDQZbEhLelHf5W5MApIOkIQmAw1pzoGN+mNYyyQg6QBJaDLIkD7q6uB7iDmbBCQdIAlN
BhjSpMb+MaxlEpB0gCQ0GVxIzzQrfMi1SUDSAZLQZGAh3dWk5UvuTQKSDpCEJgMKqfJG6jzF
xUlA0gGS0GQwIa25xI0/hrVMApIOkIQmAwlp1el09CJXJwFJB0hCk0GEVNqLTnLjj2Etk4Ck
AyShyQBCmn0ADVzt8iQg6QBJaDJ4kNz7Y1jLJCDpAEloMnCQXmsTu839SUDSAZLQZNAgPdOs
6HGBSUDSAZLQZMAgjW3S6mWJSUDSAZLQZHAgVZp/DDtVZBKQdIAkNBkUSNNPbdW635m0z+cy
k4CkAyShyYBA+qItf3vlHl8LTQKSDpCEJgMC6Xzz+5RfLDUJSDpAEpoMCKRDTEg9pSYBSQdI
QpMBgdTThHSi1CQg6QBJaDIgkK4wId0tNQlIOkASmgwGpEmtY4ajs93+q0H1k4CkAyShyUBA
eq5Z0finr/rtc3KTgKQDJKHJIED6e2ELib/OYJ0EJB0gCU0GANLYWLu3pScBSQdIQpO+Q6q8
kXb/UHwSkHSAJDTpN6SKodRd5q8FJUwCkg6QhCZ9hlT+azrEhRfJt50EJB0gCU36C+nb06hn
qReTgKTLFdKzNebPn5ZwD6qJxk/nAlLypK+QvulNJ67wZBKQdDlCWlSyyXxj/ex4MwdPU4+O
jr8xB5CSJ/2EtLAHne3KN5uwnwQkXU6Q5t49oA4S99ptSo1+MeEQ29sESGLVQZqzHw1a49Ek
IOlygrRo0jgrpMrBFUpdM63Gasv2NgGSWBrSJ13p6kqvJgFJl+OndkutkB58XKld513fv2TY
IuM/fygrK1v9o11Vqtr2GLfbssXzyWpV5flmDU9O7Ri7ybtJtcmzrbpqfZhUG+wO2ZA/pPIL
vlfq+/OfXL/unsHGu7m1uLi4n5N3ggSb2qbgCb9vw0+xnfVv5QzpkXvq3tp6wdT4j6+PHTv2
gRq7tqnttse43XYfJtU27zfjkxOaFz3v5aSq9XDNbIcPk2qr7TF5Q6q9aFb9Lw+bWPeW7aeb
+BpJrPjXSPJ/TTVpEl8j6fL/GunTQTviP34ybKNSWwbWm7K9TYAkVvUmD/6aatIkIOnygjRl
cvyHv99m/MKmIaPnfjVyRP1niLa3CZDE2jLCg7+mmhgg1ZUXpJEj4j/89gX+lcq7hlz6UMMX
Tra3CZCkqricus/0eBOQ6sLftROa9BxS+a/pUA/+mmpigFQXIAlNeg1p1WlUvNLbyXWA1BAg
CU16DGlpL+q71ofnNwBJB0hCk95CWtiDflnm5Luauxwg1QVIQpOeQpq9H120xsl3NXc7QKoL
kIQmvYSk/5oqIIlNAhIXcUjvdTC/qSUgiU0CEhdtSK+1Lrif3wAksUlA4iIN6dlmRU+abwGS
2CQgcVGG9HBhywn6TUASmwQkLsKQRsXaT657G5DEJgGJiyykyv+1/jVVQBKbBCQuqpAqfkN7
W/6aKiCJTQISF1FI5f0TX00VkMQmAYmLJqRVp9KxCa+mCkhik4DERRKS8ddUE19NFZDEJgGJ
iyKkhYfTL5NeTRWQxCYBiYsYpMq5y/RfU00MkMQmAYmLFqT7OhAd05mGp7yaKiCJTQISFylI
TxD3x9RLAElsEpC4SEHax4Q0KvUSQBKbBCQuSpBWx0xIF6VeBEhik4DERQnSurYmpGtTLwEk
sUlA4iIFqS87avZB6iWAJDYJSFyUIN3bpDDuqPlf01wESGKTgMRFCNJo2u291267b066ywBJ
bBKQuOhAGkWdP8p4ISCJTQISFxlI11O3zzNfCkhik4DERQRS5e+o+xdZLgcksUlA4qIBae0l
dOC8bAcAktgkIHGRgFRxER3yVdYjAElsEpC4KEAqP4eOKs1+CCCJTQISFwFI5WdT72U2xwCS
2CQgceGH9O0p9LMVdgcBktgkIHGhh7TyRDrtO9ujAElsEpC4sEP65jg6s8z+MEASmwQkLuSQ
vu5B5652cBwgiU0CEhduSAsPo4HJL8+QNkASmwQkLtSQ5u5Pl651dCQgiU0CEhdmSHP2oWtT
XuYkfYAkNglIXIghzehKw50eC0hik4DEhRfSJ3vQTY4PBiSxSUDiQgtpSofYnc6PBiSxSUDi
wgrp7Taxu3M4HJDEJgGJCymkN1oXPJzL8YAkNpk/pCFfmz9/dC0g5TXZeEgvNW/6dE5XACSx
yTwhbf7+e3rje6PKW1oCUl6TjYb0fFHRs7ldA5DEJvOEdBk1dCog5TXZWEjjmraYYH9UQoAk
NpknpP/89a/0P3/lxq0HpLwmGwnp0cKWr+V6HUASm8z/a6RTvswNECAlTTYO0r1N2k3O+UqA
JDaJZ+240EEaHdvtvdyvBUhik4DEhQ1S1peBzBwgiU0CEhcySNfTXlleBjJzgCQ2CUhcqCAZ
LwM5K69rApLYJCBxYYJUeaXNy0BmDpDEJgGJCxEk42UgF+S5CUhik4DEhQdSeYnty0BmDpDE
JgGJCw2k8l9SzyV5bwKS2CQgcWGB5OhlIDMHSGKTgMSFBNKqvk5eBjJzgCQ2CUhcOCA5fBnI
zAGS2CQgcaGAtKSns5eBzBwgiU0CEhd0SLOuPm3ws05fBjJzgCQ2CUhcwCG92Yz/5ZfDl4HM
HCCJTQISF2xIa7uzo4L/NnYTkMQmAYkLNqRP9L9Fvqexm4AkNglIXLAhfagh5fLKW2kDJLFJ
QOKCDam8nQlpSmM3AUls0ntI6+2qUtW2x7hdtQ+TqsrpoV/sxo6uaPTmVseTrrVVbfZ8c5v3
k7Vqo90hG12GtNWubWq77TFut92HSbXN4ZFf7UmX9uvW++9bGr25w+mke+1wfJrutdOHSVVr
e4zLkGx/l8Sndol93pVucWkTn9qJTeJrJC7AkFx0BEhyk4DEBReSm44ASW4SkLjAQnLVESDJ
TQISF1RIcUd/cnETkMQmAYkLKCSXHQGS3CQgccGE5LYjQJKbBCQukJBcdwRIcpOAxAURkvuO
AEluEpC4AEIScARIcpOAxAUPkoQjQJKbBCQucJBEHAGS3CQgcUGDFHd0s8AmIIlNAhIXMEhC
jgBJbhKQuGBBminkCJDkJgGJCxSkmXsKOQIkuUlA4oIEaU53KUeAJDcJSFyAIAk6AiS5SUDi
ggNJ0hEgyU0CEhcYSKKOAEluEpC4oECKO7pJcBOQxCYBiQsIJGFHgCQ3CUhcMCBJOwIkuUlA
4gIBSdwRIMlNAhIXBEjyjgBJbhKQuABA8sARIMlNAhLnPyQvHAGS3CQgcb5D8sQRIMlNAhLn
NyRvHAGS3CQgcT5Dijv6oxebgCQ2CUicv5C8cgRIcpOAxPkKyTNHgCQ3CUicn5Dm7O2VI0CS
mwQkzkdIHjoCJLlJQOL8g+SlI0CSmwQkzjdInjoCJLlJQOL8guStI0CSmwQkzidIcUfDvdwE
JLFJQOK8h7T0kdHj/+uxI0CSmwQkznNIb3YgokKPHQGS3CQgcV5DWtGFjDqu9XYWkMQmAYnz
GtI/yewDb2cBSWwSkDivIT2sIU30dhaQxCYBifMa0jumo9gCb2cBSWwSkDivIS1rx5Cu9nYV
kOQmAYnzGNKq4+nAZtTyunJPVwFJcBKQOG8hfXcCnbNmQ5n3H25AEpsEJM5TSOX96KzVtt/V
XCJAEpsEJM5LSBX96eQy2+9qLhIgiU0CEuchpLXnU6+V6wBJMEDiog2p8lI6YilPApJUgMRF
G9K1dFipOQlIUgESF2lI19H+X+lJQJIKkLgoQ7qFus2pmwQkqQCJizCku6nrF/WTgCQVIHHR
hfRwrOMnDZOAJBUgcZGF9HRB26mWSUCSCpC4qEJ6rrDlW9ZJQJIKkLiIQnqlWfPXEyYBSSpA
4qIJaXLLohcTJwFJKkDiIgnpndYFTyVNApJUgMRFEdL03Zo8njwJSFIBEhdBSJ/tHvtryiQg
SQVIXPQgze1GY1InAUkqQOIiB2ne3nRrmklAkgqQuKhBWnwwjUg3CUhSARIXMUjfHElXpZ0E
JKkAiYsWpOU96aLKtJOAJFU0ID1bo9+YWBLvXKV2PX/l5U/t+IlC+vbnVFKRfhKQpIoEpEUl
m/Rbj46ePXv2HKVeGjxj5tCnfpqQyk+nX67JMAlIUkUA0ty7B9RDGv0i/7Rj6DtKTR9U9/vU
TwrS6l/QKZleBBKQxIoApEWTxtVDumZajfHmypJ1Sm0uWfgThFQxgHqvyjgJSFJFAJJSS+sg
7Trv+v4lwxapOf13xv9r4CfxH34oKytb/aNdVara9hi327JF4J3+MJSKv814abWqEtjMXo0P
k2qT55u1PkyqDXaHbMgT0vfnP7l+3T2DN0y/wPiv30yO/3BrcXFxPyfvJBr9gY76we/bgALT
zvq3coPEbb1g6hf9d8XfGDg9/sPrY8eOfaDGrm1qu+0xbrddYPIGOmhltkm1zf1Nm7b7MKlq
Pd/c4cOk2mp7TGMgqWETl5XEPzmsLplf9yu2n25G5Gukm6jb3KyT+BpJqmh9jfTJsI1KbRk4
a8eQqUrNuPCn9qzdXbTn7OyTgCRVhCBNmaw2DRk996uRI3aqFy5fvOTqJ+sPsL1NkYD0UKzT
pzaTgCRVhCCNHKFU5V1DLn0o/h+7nrvy8icbvtKyvU1RgPRok3Z232cZkMSKBCTbbG9TBCD9
o7DNe7aTgCQVIHHhhzShqMWb9pOAJBUgcaGH9FbLopccTAKSVIDEhR3Sf1o3fd7JJCBJBUhc
yCF9uFvBE44mAUkqQOLCDem/nWP3O5sEJKkAiQs1pJld6HaHk4AkFSBxoYW05PM187rTSKeT
gCQVIHEhhfTZiUStOtENjicBSSpA4sIJaeX+ZHSC80lAkgqQuHBCupcdUYe1jicBSSpA4sIJ
6RoTEn3teBKQpAIkLpyQbjUdFWV6rZPUSUCSCpC4cEL6vJAhXex8EpCkAiQunJCuoyZxRz9b
7nwSkKQCJC6UkP4f7TX173e8lvbFiTNMApJUgMSFEdK4Jh1m5DoJSFIBEhdCSK8VtZic8yQg
SQVIXPggvd+66cu5TwKSVIDEhQ7SrM6xh/OYBCSpAIkLG6Sv96c78pkEJKkAiQsZpOVH0nV5
TQKSVIDEhQtS+cl0QQ5PelsmAUkqQOJCBamihM7M8J3E7CYBSSpA4kIF6SoqzvgdkGwmAUkq
QOLCBOkGOnRJvpOAJBUgcSGCdC/tmfU7TmSdBCSpAIkLD6TnCjrYvFJ+tklAkgqQuNBAer1Z
i7cbMQlIUgESFxZIH7Vr6uCViTNPApJUgMSFBNIXu8f+1qhJQJIKkLhwQFp8AI1p3CQgSQVI
XCggrTiKft/ISUCSCpC4MEAqP5XOd/zCWxkmAUkqQOJCAGntr+lkxy8XlGkSkKQCJC4EkH5L
x65s9CQgSQVIXPAh3UT7O34dyMyTgCQVIHGBh3Q/dZ3jwiQgSQVIXNAh/bOw7YduTAKSVIDE
BRzSm82av+XKJCBJBUhcsCF91L7gGXcmAUkqQOICDenLvWIPujQJSFIBEhdkSKUHOv7WlraT
gCQVIHEBhvRtL7rCtUlAkgqQuOBCWn0andfIvxhkmQQkqQCJCyykykHUt7F/McgyCUhSARIX
WEjX0DGN/otBlklAkgqQuKBCupX2W+TmJCBJBUhcQCE9Guviwl8MskwCklSAxAUT0r8K20xz
dxKQpAIkLpCQ3mnZ7E2XJwFJKkDiggjp491c+otBlklAkgqQuABCmteN7nZ9EpCkAiQueJBK
D6Y/uT8JSFIBEhc4SN/2ossEJgFJKkDiggZp9en0ywqBSUCSCpC4gEGqvJhOdO8vBlkmAUkq
QOICBmkYHf6NyCQgSQVIXHAgrXrn9W9G074LZSYBSSpA4gID6elOREWxjp8JTQKSVIDEBQXS
tOZkdJvUJCBJBUhcUCANZkd0rNQkIEkFSFxQIJ1sQuokNQlIUgESFxRIF5mQjpaaBCSpAIkL
CqS3TEh/l5oEJKkAiQsKpEupkKjoBrFJQJIKkLiAQLqVDp0z4Z8L5CYBSSpA4oIB6ekme3wp
OwlIUv00IK23q0pV2x7jdtXJkx+0aD5FeFJVyQ6kaasPk2qz55vbvJ+sVRvtDtnoMqStdm1T
222PcbvtSZOluzeZID2ptgkvpLbDh0kfTnOnD5Oq1vYYlyHZ/i4ZgE/tlh9Gd4pP4lM7qX4a
n9rZ3ib/Ia0+mYbITwKSVIDE+Q/pMjptjfwkIEkFSJzvkEbSocs8mAQkqQCJ8xvSM032mOvF
JCBJBUicz5Deb9H8HU8mAUkqQOL8hTSnc5N/eDMJSFIBEucrpOWH0e0eTQKSVIDE+QlpzSl0
iVeTgCQVIHF+QrqcTpV/4ltPApJUgMT5COk2OkTkpbfSTgKSVIDE+QfpmSa7u/q9xLJPApJU
gMT5BmlKy+b/8XASkKQCJM4vSPO7xsZ5OQlIUgES5xOkFYfTGE8nAUkqQOL8gVRxpmdPfOtJ
QJIKkDh/IF1BJ0h8z4ksk4AkFSBxvkC6iw727IlvPQlIUgES5wekVws6zPJ4EpDEAiTOB0hT
WzWf7PUmIIkFSJz3kObvGXvG40lAEgyQOM8hrehBt/vwZRkgSQVInNeQKn5Bg7N+V3OZAEks
QOK8hnQl/bwckMQmAUkXdUh30MFLs30zZqkASSxA4ryF9GJBh5lZv6u5VIAkFiBxnkL6oFUz
44lvQBKbBCRdpCEt2DP2uPEzIIlNApIuypBWHkG38huAJDYJSLoIQ6o4iy4y3wIksUlA0kUY
0lX0M/03vgFJbBKQdNGFNJYOWqrfBCSxSUDSRRbSSwUdPq97G5DEJgFJF1VI+olvM0ASmwQk
XUQhLdgr9ljDfwGS2CQg6aIJ6duedIvlPwFJbBKQdJGEtPZsOq/S8t+AJDYJSLpIQrqa+iS8
1AkgiU0Cki6KkO6nfUsTfgGQxCYBSRdBSC8VNjzxbQZIYpOApIsepI/bFk1K+iVAEpsEJF3k
IH21V+yR5F8DJLFJQNJFCtJXL05ceCzdlPLrgCQ2CUi6KEG6oYioaeIT32aAJDYJSLoIQXqY
jJqkeS1IQBKbBCRdhCAdxZDo4tRLAElsEpB0EYLUyYR0cuolgCQ2CUi6CEE62oSU5vsgAZLY
JCDpIgTJ/Bqp+bTUSwBJbBKQdBGCdDEVEHV6Ks0lgCQ2CUi66EC6k4748tW3VqW7CJDEJgFJ
FxlIbzXtMDvTZYAkNglIuqhAmtuxYELGCwFJbBKQdBGBVNaT7sx8KSCJTQKSLiKQLqaBWS4F
JLFJQNJFA9Kd1OPbLBcDktgkIOkiAemtot2+yHY5IIlNApIuCpDmdsryRIMRIIlNApIuApDK
etId2Y8AJLFJQNJFANJgOt/mCEASmwQkXfghjc3+RIMRIIlNApIu9JDsnmgwAiSxSUDShR3S
l3ZPNBgBktgkIOlCDsn+iQYjQBKbBCRdyCHZP9FgBEhik4CkCzckB080GAGS2CQg6UIN6W0H
TzQYAZLYJCDpwgzJ0RMNRoAkNglIulwhPVuj36h97LeDRi5XamJJvHP9gFTWk253diQgiU0C
ki5HSItKNum3br/8s8Vjhm5Wj46ePXv2HD8gOXuiwQiQxCYBSZcTpLl3D6iDtK5knlI1A6ep
0S8mHGJ7m1yDdJezJxqMAElsEpB0OUFaNGlcHaRlI+Kf4+0aMkldM61mk+UQ29vkFiSnTzQY
AZLYJCDpcvzUbmmJVc3nJUt2nXd9/5Jhi4z/+qGsrGz1j3ZVqWrbYxy0oHPBK44P3rLFjcmc
qlZVnm/W+DCpNnm+WevDpNpgd8iG/CHtenfAE+r7859cv+6ewca7ubW4uLifk3fiQjW96D6P
phBy0M76t3KFVHHToMn6za0XTI3/+PrYsWMfqLFrm9pue4x9l9KFORy93Y3J3Nqutnm/6cOk
qvV8c4cPk2qr7TH5QioddE/D72bDJta9ZfvppitfI91NPdK+EmSG8DWS2CS+RtLl+zXSjsvG
88+fDNuo1JaBszyFlMsTDUaAJDYJSLq8IE2ZrGb1/3RBvB82DRk996uRI+o/Q7S9TS5A+mqP
gpdzugIgiU0Cki4vSCNHqEkl3Fuq8q4hlz7U8AyE7W1qPKSyY+nPuV0DkMQmAUkXwr9rdwkN
yPEagCQ2CUi68EG6mw7P5YkGI0ASmwQkXeggTS7abVau1wEksUlA0oUNUs5PNBgBktgkIOlC
BqnsWBqT+7UASWwSkHQhg3QJnVOZ+7UASWwSkHThgpTHEw1GgCQ2CUi6UEHK54kGI0ASmwQk
XZggfbVHk5fyuiIgiU0Cki5EkPJ7osEIkMQmAUkXIkj5PdFgBEhik4CkCw+kPJ9oMAIksUlA
0oUGUr5PNBgBktgkIOnCAumrLnk+0WAESGKTgKQLCaTyY2l0HlfTAZLYJCDpQgJpSN5PNBgB
ktgkIOnCAekv+T/RYARIYpOApAsFpMlF7WflfCVLgCQ2CUi6MEBq1BMNRoAkNglIuhBAatwT
DUaAJDYJSLoQQGrcEw1GgCQ2CUi6YEMqf/h/Rl7fuCcajABJbBKQdIGGtPAAitdiluMrZAiQ
xCYBSRdoSGcZjqjpx46vkCFAEpsEJF2QIa0qYEh0s9MrZAqQxCYBSRdkSItMR3St0ytkCpDE
JgFJF2RIa3c3IT3i9AqZAiSxSUDSBRnSurvYUc/Vjq+QIUASmwQkXZAhre1LHanVRYucHp8x
QBKbBCRdkCH9gfpVrmrkn8VygCQ2CUi6AEN6o2DPUoeH2gRIYpOApAsupMVdCiY5O9I2QBKb
BCRdYCFV/oJucXSggwBJbBKQdIGFdBudUOHoQAcBktgkIOmCCum9oo4LnBznKEASmwQkXUAh
fbN37F9OztBZgCQ2CUi6gEIaQMOdnKDDAElsEpB0wYR0Dx1b7ugMnQVIYpOApAskpI+at5vt
7AydBUhik4CkCyKkVQfTOIdn6CxAEpsEJF0QIV1EVzg8QYcBktgkIOkCCGk8Hfad0zN0FiCJ
TQKSLniQZrZp+anjM3QWIIlNApIucJDKj6K/Oz9DZwGS2CQg6QIH6So61/kJOgyQxCYBSRc0
SC/E9luewxk6C5DEJgFJFzBI8zoUfZDLGToLkMQmAUkXLEhretNfcjpDZwGS2CQg6YIF6To6
041/Wp4cIIlNApIuUJAmFezl0j8uTwyQxCYBSRckSF/vUfh2jmfoLEASmwQkXYAgrT2VRuZ6
hs4CJLFJQNIFCNKtdKJr/7g8MUASmwQkXXAgvdu001c5n6GzAElsEpB0gYH0Tfcmr+R8gg4D
JLFJQNIFBtKv6LrcT9BhgCQ2CUi6oEC6m4ob/Vr5GQMksUlA0gUE0kfN28/J5wydBUhik4Ck
CwakVQfFns3rDJ0FSGKTgKQLBqQL6eq8TtBhgCQ2CUi6QEB62PV/XJ4YIIlNApIuCJA+b91q
Rp5n6CxAEpsEJF0AIJUf2fjvEps9QBKbBCRdACBdThfne4IOAySxSUDS+Q/pGdp/Rd5n6CxA
EpsEJJ3vkL7crdm0/M/QWYAkNglIOr8hrelF9+Z/gg4DJLFJQNL5Del/6ZxGnKDDAElsEpB0
bkNab1eVqrb816tNui23vUqjq662P8btSVXl+eZWHybVZs83t3k/Was22h2y0WVIW+3aprY3
/Me3exROt71G49u+3f4YtyfVNs83d/gw6cNp7vRhUtXaHuMyJNvfJa2f2q09mUY37vdcZ+FT
O7FJfGqn8/VrpD/RaWsbd4bOAiSxSUDS+Qnp34WdFzbyDJ0FSGKTgKTzEdLS7k1ebewZOguQ
xCYBSecfpMqz6YZGn6GzAElsEpB0/kEaS33WNPoMnQVIYpOApPMN0pQiyX9cnhggiU0Cks4v
SCsPjD3nwhk6C5DEJgFJ5xekC+gaF07QYYAkNglIOp8gPUhHl7txhs4CJLFJQNL5A+mz1q3+
68oZOguQxCYBSecLpLIe9JgrJ+gwQBKbBCSdL5CG0hBXzs9pgCQ2CUg6PyA9TYd868r5OQ2Q
xCYBSecxpMq/H9324BbNPnTpBB0GSGKTgKTzGNIoMjrZpfNzGiCJTQKSzltIpU0ZEsm+HmRK
gCQ2CUg6byFNNB3Ro26dobMASWwSkHTeQnpbQ3rGrTN0FiCJTQKSzltI5Xuwozalbp2hswBJ
bBKQdB4/2fBq87ijovEunZ/TAElsEpB0Xv850pzrL7juU3fOznmAJDYJSDq/XyDSkwBJbBKQ
dIAkNAlIUgESB0hiAZLYJCBxgCQ2CUg6QBKaBCSpAIkDJLEASWwSkDhAEpsEJB0gCU0CklSA
xAGSWIAkNglIHCCJTQKSDpCEJgFJKkDiAEksQBKbBCQOkMQmAUkHSEKTgCQVIHGAJBYgiU0C
EgdIYpOApAMkoUlAkgqQOEASC5DEJgGJAySxSUDSAZLQJCBJBUgcIIkFSGKTgMQBktgkIOkA
SWgSkKQCJA6QxAIksUlA4gBJbBKQdIAkNAlIUgESB0hiAZLYJCBxgCQ2CUg6QBKaBCSpfhqQ
Ntj13Yzltse43ZYtnk8un/Gd55vVVZ5Pls5Y4/lmzWbPJ7+aUWl3yCaXIdn2bvG/vBnyt+eL
3/P7JnjRA8Vf+n0TvOhPxeXODwYkNwOkKAVIvgVIUQqQfAuQolQQIVW8v8qbIX9b9X6F3zfB
i0rfX+/3TfCi+e9XOz/YI0gIRTtAQsiFAAkhF/IG0sSSeOd6MuVfz9bEf9j1/JWXP7XD75si
GZ9mxD+gtY/9dtDI5Tl9NL2B9Ojo2bNnz/FkyrcWlRh/zP3S4Bkzhz7l920RzDzNiH9Ab7/8
s8Vjhm7O5aPpDaTRL3oy42Nz7x5gPMJ2DH1HqemDavy+OVLp04z4B3RdyTylagZOy+Wj6Q2k
a6bVbLI/KswtmjTOjf0M2gAABBJJREFUeIStLFmn1OaShX7fHKn0aUb8A7psRNzOriGTcvlo
egJp13nX9y8ZtsiLKf9aajzC5vTfGX9z4Cd+3xi5+DR/Ch/Qz0uW5PLR9ATS9+c/uX7dPYM3
eLHlW/wIm36B8eZvJvt9Y+Ti04z+B3TXuwOeyOmj6d3T31svmOrZlh/xI+yL/rvibw6c7veN
kYtPk4vyB7TipkGTc/toevjnSMMmerflQ/wIW1byo1LVJfP9vjFyNUCK8Ae0dNA9xu+2uXw0
PYH0ybCNSm0ZOMuLLd/iR9iOIfH/l55xYWSftdOnGfEP6I7Lxps/5/DR9ATSpiGj5341csRO
L7Z8y/y/6hcuX7zk6if9vi2C8WlG/AM6q/+nC+L9kMtH05tP7SrvGnLpQxF+vtTIhLTruSsv
fzKqDzAj8zSj/QGdVMK9lctHE3/XDiEXAiSEXAiQEHIhQELIhQAJIRcCJIRcCJAQciFAQsiF
ACmsndgnwwV/pQj/rezABkhhDZACFSCFNUAKVIAUknZuT/oFQApUgBTg3j559zbHjIu/cda5
L+1OXa7eGH/z49Pa9Zlw1TEa0oqL9m3b9636K7x8YtviRxhSwwX1V0CSAVJw+wf1vmtsb3o5
Dmm/5teOv4CuVOqDZkfffkVhFw1pfrtuN//56NgT+goP0SG3/K7FfnFIDRc0XAFJBkjB7cx2
PypV2/bqOCQy/qXZcXvH/3d4tVJPkIZ02j7rldp+SivzHzT80O7YzUpNpzikhgsaroAkA6Tg
trkq/sOalkPikFobL/d5RSe1jB6Mv7GtrQlpPd1pHPcimd9M5lXif/t9Gm1ouMByBSQZIAW4
maMuLG5OBqQexn9e1Um9S/ySNkebkP5Luhf48LtpufHTDbSh4QLLFZBkgBTc7ogV3/jknH0M
SOwgDulN+o/x1rEmpDk08kNuDR9/L60wfhpDGxousFwBSQZIgW1T098ZP3WzQlpED8Xf2L6b
CWkjjTF+feHzVXyF1+g146cLaEPDBZYrIMkAKbAtoFHxHz+OWSHtOOyIGqWernuy4Ywuy5Ta
sn/3XXyF9e2P26LUvELa0HCB5QpIMkAKbNv2bX/TU7/r1OWAKQ2Q1JTC4+6+ptsBvUxIc9t0
GfGng2MvK/XPbvcr9SAdftv/tT0xDqnhgoYrIMkAKbgtOqtd94u/e273X1ggqQ9/3q7fwqNO
138gu3RAt3Z9ja+CHudP5l4+oW3Pv71l/IFs/QUNV0CSAVKo2vXEtPiPm1qPELsCyi9AClcn
t31/04qLmzn/HvE5XwHlFSCFq+9OIKK93hO8AsorQApb30z9JrdXcs35CiiPAAkhFwIkhFwI
kBByIUBCyIUACSEXAiSEXAiQEHIhQELIhQAJIRcCJIRc6P8DAKf/12CGuBIAAAAASUVORK5C
YII=" width="420" /&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;




&lt;div class="output_png output_subarea "&gt;
&lt;img height="420" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAADAFBMVEUAAAABAQECAgIDAwME
BAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUW
FhYXFxcYGBgZGRkaGhobGxscHBwdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJyco
KCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6
Ojo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tM
TExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1e
Xl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29w
cHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGC
goKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OU
lJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWm
pqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4
uLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnK
ysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc
3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u
7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7////i
sF19AAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO3dB5wU5f3H8d9eo1dFQYqggmI3
FLtoRDSRIxrhMAYvItzfFlGTYGwXNfHUaIgNWxQsQcXeiQXLIaIgHeki9QTusdCL3N38Z8vd
/bbdzOw+v2cL38/r5bF3M7PPPrvzdq7szpKFEEo6SvUNQCgbAiSENARICGkIkBDSECAhpCFA
QkhDgISQhgAJIQ0lAWkX1fc9X/DzknX2x2vpHadrCK4Yq9adHDYNXHv87eu6hSYmfR1umn1S
00vdrOf6vol37Q1NKF530wTP27geid2L0eP0pw0JjBwn/04Rec8l8fB53TTu/RHYWZODdMyx
oX7iC76h8yxXO0twxbi3raEC1x5/+7ocIbm4DjcdQqc/7GY91/dNvGtPT0jBaaUAUhIPn9dN
JSFVxVwQvIUL3nC8D5OAFLj2JCG5vQ4XbaKj3a3o+r6Jd+1pB4ndiwYgRd5zewGk+vX2xLuG
JCA5bF+X496gB9L3dHqMr1bt9jJcjLVjXLvjhGJcjTOkWGN7IesSUvwpOt+c2DtF7PvT1Ths
0+2xd+TwTEGaW9St8SEjVlvWQP8PTX+0bvAfhO+mD0cU+I64ZtvmPx3X7Ign/Ovtufe0/Voc
/tfKuhUta+rgbi16PRSY/K5bjm95wm1V/D6rW7qyWTv/z2IrmhzwU+Da67a3u5TuD/z7F7ot
7ApDs3/uV+07nPNscNUnzmrb4/fz7Av11/E4/SWw6Pf0Uu2o9TeTTS3WQn8j/dcy2PojfRq4
wXS5f+af3duW2pzxadiY/L7htyp87WB1S0PXHiw4IXYDnAf17+DTBh/Y5nR27ewKwjcae2qr
Ux9d6b9bQ3cde3D8nUnv2R8fJp//obiEHuCPRPQ4QUi3Ud/NEcPUTS7q+mLcFWynCN5zkfta
/OnU3QdREwltegfN/PzYnE3sGhx2pTg7qzZInxXQkWd2ok7fW8+PosNum1QL6YicM85vSgOP
a33eKURvWNbuPtT6tNNa0bE7a1e0/p2be/QJTejM7Zb1Q2/K79WFzm1eD4ktfZD+EHhw3gne
obXb+3uf+gX+7UrfhG0SnP0llHvMsXk0zL5YfSE1PvEoavo6v46NOQf5N97ZosWO0KjsZrKp
xVgY6K3rqettL0Xs00Oo59AjKH8mH5PfN/xW8bVD1S8NXXuwwIT4DXAe1P7ysPyeQw+ngtmx
ZhA29iXU9OROdE49JHZfBrqHbrA//i7wWFoH0VL+SESPE4B0Lx37Y9QwtZOLur7ou4LvFIF7
Lmpfizcddh9ETSS06R00vlmns7aza2h4V4q3s2qDdBq9Yh9SB/s1B4+ZIUj5H1nWjBzqUWFZ
N9LvLesZOm2bZW07kcrrfmDIPXCOZW08g260rD9RH3vF5wuoDhJfWn0yfWhfwSW1184Oznv2
yVX2P9PplPBNArN/lQ5ebFmLD/bfxKeor/1/nTdz99nOr6Mf+f+v9UoAaiB+M9nUohcGC37z
Fb5PU5ll1YygUWFjsvuG3yq+djC+NOpbO34DXAxqf/kO+8sj6bpYM+AbvUnH/2BZd1IdJH5f
BppHJ9gfOzelP1nWWuoW9khEj+OH9DAdoazwYdjkoq4v+q7gO0VgtKh9Ld502H0QNZHQpndQ
q9uqwq6hwV0p7s6q59ff9uO8T57/R6Gv7/4gAtL/+VftQa/ZHxfRqfYxffAU/1fK6OnaFc+n
D/xf+a5x6+ofG+Wv8l++uh4SW2pZSxoftHrfjj9Z0ZCsEhpnf/wzPRG+SWD2x9j+7N6jYyzr
QN/i4NVO4dfxEN1qfxwc3NAfv5lsatELg8WC1Nd/eSYNDBuT3Tf8VvG1g/GlUZD4DXAx6N3U
y39xRv3dxa+Ab9SH5vsvH1cHKezuD3RA3lZrFV1V0Nu+FroyAlLkODak8b4e6y0rfBg+ucjr
i7orwnaKwGhR+1q86bD7IHoitZB6R94hDe1KcXdWPb/+Hun/v8RvplfzWxiC9B//V04gm661
wW882Ipf1EPq2Cq4XR9aPJUKAxfn1UNiS+2Pd1E7eteyYkCaHLjjD2y8KXwT/+x/zu0QXKd9
3p7vqE/g4uZ1O/h1VPiOtqytTdpH/NAZvJlsatELg8WCdKv/8ir7ZvEx6+8bfqv42sHClsb5
ZUPwBrgY9O7Ad/vRP5gHr4Bt9HPuoYEFZXWQwu9+f5fYP9RMoDdPzd1iXUZvRUCKHKc/3ZcT
Oj6FDcMmF3l9UXdF2E4ROiJF7GtxpsPvg+iJ1EIqjbxDGtiV4u+s2r61W3QYUatzHtpoRUAK
7GsnkH2jQpA23jf46Ob2UawW0tb6A9u0p+jPgSvbUQeJL7U/3XMsXRT4ehSkqnaNt1pf0tCI
TfyzX1YL+ERaMYWK6jbh13Gi/Q3xBLq2fj7sZrKpRS8MFguS/39rgceTj1l/3/BbxdcOFrY0
GhK7AS4GvZvG148dNQO20VIaEFj631pIEXe/vxfsH2ou931/i73/H1awNQJS5Dj9yXdEQf6i
4I2oGyZscpHXF3VXhO0UgdGi9rU402H3QYyJ1EL6T+Qd0sCuFH9n1fdbu5/fvaKnj1q96wDp
kxZ06CV3vnV7HaRN1P62UCsmhG5bTUEtJL7U/vTHDnTYLsuKAcm6nF62v2udFLGJf/ZLax+3
U2nxB/6f00Lx6xhD91oD6au6ZfxmsqnFWBgoDNJnwX06sND/ePIx6+8bfqv42sHClkZB4jfA
xaChX0uzu4tfAdtofgjS87WQIu7+wFRzTrCOPNz6kG7aSGdaEZAix+lv/3x0Q2A1Pkz45CKu
L+quCNspgr+midzX4kyH3QcxJlILaULUQxp/V4q/s+r9O9KGm6i9A6Tuvhf8X7m3/lu7dh3q
tv8idLRcW/+tHVtqN4xOpFssKxakT+iims7774nYxD/73bkdg58ckLt7JZ0cuLh84tKw61hF
J/6Y36N+O34z2dTiLAyHNDFin+Zj1t83/FZF7z1hS6Mg8RvgYtDoHZxfAdtou69nYPHddd/a
hd/9gfrmrfZdZm3PP+Vl+38+jpCWWts604tW2DBhk4u8vqi7ImynuKHumQ18X4szHX4fRE8k
DFLYQxp/V4q/s+qCtOSwwLdcNe1oW4OQtlOXwPpX1kMaQIGf837sdrz1U5OCwF9ryuohsaX+
XyoN2tYlf74VC1J1+1bl/l/9hG8SmP2R9LH/C5PpKKu6bd63/suX0Pvh19HL93e6ve7K+M3k
U4taGKoWkv/3rNalEfs0H5PdN+xWRe89YUsjIYXdABeDRu3gYVfAx+5BC/2X+9ZBCrv7g5XS
Vf7rO6lgJC2wHCFtsKyXqdO28GH45CKvL+quCNsp/KNF7WvxpsPvg+iJcEjhD2kDu1LcnVUX
pN2N8t63/3nXd6j/FtYd8qOPSPvmL7Nv6WN59Gjtip9T+9mWtaWQ/ub/I9gJ6y1rUvN6SHzp
D+1brrPepr7VdQ/fmez2XEVHB36JHbZJYPYvUg970KWH+H9r+m869XvL+jBvn63h13EXFdDy
+itjN5NPLWphqOCu/i8qtO+R13Mj9mk+Jrtv+K2KhsSXRh2R+A1wMWj0Ds6vgG/0Ip2yyf+3
nTpI/L6se0Qa0yr/HzMaBx4kdi/GgWR//GvkMPWTi7y+6LuC7xSBY3nUvhZvOuw+iJ5IcNPQ
ESn8IY2/K8XdWZOD1Kt3qHH+O//wc46kvA8tS1FB0fh4kP5OeacVHdyihLrcH1rRXtN32Jmt
6bTdgb9xFRx/KPXtW/8HWbb094FpXkD3hR6+0PahplDtU9LYJsGfzX9P+X165wf+SrT7bGp2
am9fzmsR17GMqP5/uuE3k00temGw4K6+qhX1GHYC9Yjcp9mY7L7htyp67+FLoyDxG+Bi0Ogd
nF9B2Ni/o5b9uuZe6X+mR/CuY/dlqKrW1Nny/+6aRgbv7Lp7MR6kxfn5S8KHYZOLvL7ou4Lv
FIHRova1eNNh90H0RIKbhiCFP6QN7ErxdlY9f0eiO6yal0/r0Lj7sMCfIW5r2/SWeJCqHzm6
2WF/WFU9uNl5oRXt/7cUdm7Z+8Hgsy5uPr5Fnxu2ns6eIlS39E06ucb+vKJls5WhXTG0fbDq
A2hM5Ca1vy1+ZsD+7c95LrCs5v7TW3caONOyIq7jKHqQTY7fTD61qIXBQrv6nHPb2R4XR+7T
bEx23/BbFQMSWxoFKewGOA8avYPzKwgf+75eTXp/+JT/u9zQXccenFCDA7853ZoXOJ7wezEe
JOuvdFbEMOwBibi+GHcF2ykCo0Xta3Gnw+746IkENg1BCn9IG9qV4uysSUDKrmq65W50Xsu5
n1Y7r6M9bYNuCL5E5x/0X01XuNcESKE+oXNSfRPSoIGBn/etoxpXOq2JwgOkQJsqjg/8jnZv
bwIdP2/nkmIakeobknEBUqBjiXrHeBbQ3tfoXP+PvBf8kOrbkXEBUqDSk6/DvhNo6WOl42c6
r4YiAiSENARICGkIkBDSECAhpCFAQkhDgISQhgAJIQ0BEkIaAiSENJQ4pE2O7d7jvI72Nu9O
waBb9+xIwag7tqVg0F17Nqdg1J9TMOYWFw/qFg2QlGN7XKyjvR/2pGDQTdb2FIy6Y0sKBv3Z
+j4Fo1alYMyfrJ2O6/wISFoDJOEAyXiAJBsg8QBJb4AkHCAZD5BkAyQeIOkNkIQDJOMBkmyA
xAMkvQGScIBkPECSDZB4gKQ3QBIOkIwHSLIBEg+Q9AZIwgGS8QBJNkDiAZLeAEk4QDIeIMkG
SDxA0hsgCQdIxgMk2QCJB0h6AyThAMl4gCQbIPEASW+AJBwgGQ+QZAMkHiDpDZCEAyTjAZJs
gMQDJL0BknCAZDxAkg2QeICkN0ASDpCMB0iyARIPkPQGSMIBkvEASTZA4pmAVDl+5CX3VmiZ
kpcASTZA4hmAVDmQ7I5YpWdS7gMk2QCJZwDSgxSoRM+k3AdIsgESzwCkc4OQOuuZlPsASTZA
4hmAdGYQ0n56JuU+QJINkHgGIP0pCOlsPZNyHyDJBkg8A5BWdPE7avaFnkm5D5BkAySeiV9/
z7/wgMZ0q5YpeQmQZAMknqE/yC6gMzRMyFuAJBsg8Uw9s+G4nNkaZuQpQJINkHimIP2Lrtcw
I08BkmyAxDMF6dsmHTdomJKXAEk2QOIZe9JqEb2c/Iw8BUiyARLPGKQ36XwNU/ISIMkGSDxj
kCoPKliqYU4eAiTZAIln7vVIN9NdGubkIUCSDZB45iAtzOupYU4eAiTZAIln8BWyZ9Hk5Ofk
IUCSDZB4BiE9TZcmPycPAZJsgMQzCGn9fi3XJD8p9wGSbIDEM3nyk6vo0aTn5CFAkg2QeCYh
feE7Jek5eQiQZAMkntHTcfXxzUh2Th4CJNkAiWcU0v10XbJz8hAgyQZIPKOQVjXvYPCZq4Ak
GyDxzJ5p9SKamOScPARIsgESzyykSTQwyTl5CJBkAySe4XN/H1qwOLk5eQiQZAMknmFIt9Lf
k5uThwBJNkDiGYa0KL97cnPyECDJBkg802/r8mt6L6k5eQiQZAMknmlIz9HFSc3JQ4AkGyDx
TENa376Zqfd3ASTZAInnDdKUvxTdUmFZNRNGDB9XlRAkdS09lMycPARIsgESzxOk8iHvz73x
ihpr4kXTZhSPSwzSTN/xyczJQ4AkGyDxPEG68nXL2nDL+qri92xUQ3cmBEmdSNOSmJOHAEk2
QOJ5gbSmsDLw76pCZVlbCxcmBmksjUpiTh4CJNkAiecF0txBU68eestqa/agavuzwVPtD+8/
+OCDT+xwrNqqv/xDq/02O2+hoZ3VRoYJb5e1JwWj7tmdgkH5g2qumhSM6epB9QCpfNDlXy7+
R/H28iH+zy6eZH+4uVevXv0dNwzvMnrT4xYIpXvVdZecIU0vXGRZO4d8MnNQjf3Z4HL7wzfT
p0+ftcmxKot98hH9ynkLDW2pMjJMeNusXSkYddf2FAy6x9qcglGrUzDmVmu34zpbPEBaUrjd
/njlKysK7W8IdxTOr/268zeZe8LWOSJvQcLfrnoIPyPJhp+ReF5+Rto1dK5lbbvgi6phH1nW
tKIEf2un1B1UmvCcPARIsgESz9Ovv58a+dWS0iurrOeHL1lW8mTdl51vSTikpQUHVyY8KfcB
kmyAxPMEqebpkRfd/YP977Mjhj9Z/9OV8y0Jh6QG0TuJzslDgCQbIPFMP9cu0It0YaJz8hAg
yQZIvJRA2tip6beJTsp9gCQbIPFSAkn9mf6d4Jw8BEiyARIvNZBm5/ROcE4eAiTZAImXGkjq
NCpPbE4eAiTZAImXIkiP0xWJzclDgCQbIPFSBGld67YViU3KfYAkGyDxUgRJjaCnEpqThwBJ
NkDipQpSOfVPaE4eAiTZAImXKkjqqJy5iczJQ4AkGyDxUgbpbropkTl5CJBkAyReyiCtaNJl
YyKTch8gyQZIvJRBUhfQ6wnMyUOAJBsg8VIH6VUaksCcPARIsgESL3WQKrs2Xp7ApNwHSLIB
Ei91kNQNdI/3OXkIkGQDJF4KIc3LPcb7nDwESLIBEi+FkNQv6RPPc/IQIMkGSLxUQhpHIz3P
yUOAJBsg8VIJqWKfNus8T8p9gCQbIPFSCUldRk94nZOHAEk2QOKlFNIUOt3rnDwESLIBEi+l
kNQvfDM9zslDgCQbIPFSC+lfNNrjnDwESLIBEi+1kL5tcsAGj5NyHyDJBki81EJSQ+klb3Py
ECDJBki8FEN6i87zNicPAZJsgMRLMSTVvWCppzl5CJBkAyReqiHdTHd6mpOHAEk2QOKlGtLC
vJ6e5uQhQJINkHiphqQG0Ide5uQhQJINkHgph/QMDfcyJw8BkmyAxEs5pPX7t1zjZVLuAyTZ
AImXckjqj/SIhzl5CJBkAyRe6iF96TvZw5w8BEiyARIv9ZBUH98M93PyECDJBki8NID0AF3n
fk4eAiTZAImXBpBWN+8g8sxVQJINkHhpAEn9nl5wPScPAZJsgMRLB0iTaKDrOXkIkGQDJF46
QFKH5i10OycPAZJsgMRLC0i30e1u5+QhQJINkHhpAWlxfne3c/IQIMkGSLy0gKTOpf+5nJOH
AEk2QOKlB6TnaZjLOXkIkGQDJF56QNrQsdlKl5NyHyDJBki89ICkrqUH3c3JQ4AkGyDx0gTS
TN/x7ubkIUCSDZB4aQJJnUSfu5qThwBJNkDipQukh+lqV3PyECDJBki8dIG0tlW771xNyn2A
JBsg8dIFkrqEnnUzJw8BkmyAxEsbSB/Q2W7m5CFAkg2QeGkDSR2Rt8DFnDwESLIBEi99IJVR
qYs5eQiQZAMkXvpAWlpwcKWLSbkPkGQDJF76QFK/obddrOU+QJINkHhpBOklutDFWu4DJNkA
iZdGkDZ2bvyNi9VcB0iyARIvjSCpv9C/3azmNkCSDZB46QRpdk4vN6u5DZBkAyReOkFS/ajc
1XruAiTZAImXVpAep8tdrecuQJINkHhpBamibdsKVyu6CpBkAyReWkFSI2m8uxXdBEiyARIv
vSCV05nuVnQTIMkGSLz0gqSOzpnjck3nAEk2QOKlGaR/0o0u13QOkGQDJF6aQVrRpMtGl6s6
BkiyARIvzSCpC+g1t6s6BUiyARIv3SC9RoPdruoUIMkGSLx0g1TZtdFyt+s6BEiyARIv3SCp
G+mfrtdtOECSDZB4aQdpfu7RrtdtOECSDZB4aQdJ/ZI+dr9yQwGSbIDESz9I42mk+5UbCpBk
AyRe+kGq2KfVWvdrNxAgyQZIvPSDpC6ne7Sc4Q6QZAMkXhpCGkNEB73kYYM4AZJsgMRLP0if
NrYhUeNP3W8RJ0CSDZB46QdpEAUqdL9FnABJNkDipR+kw4OQerrfIk6AJBsg8dIP0qlBSKe6
3yJOgCQbIPHSD9LYIKSH3W8RJ0CSDZB46QdJjfQ7OtnDBnECJNkAiZeGkNSnd93UqGPypxMC
JNkAiZeOkOxG0L0et4gOkGQDJF6aQvpawyEJkGQDJF6aQlKXJn9IAiTZAImXrpDmFiR9SAIk
2QCJl66Q1HD6l+dtwgMk2QCJl7aQ5hZ0SvKQBEiyARIvbSGpS2iM9414gCQbIPHSF1LShyRA
kg2QeOkLyT4kJfdOmIAkGyDx0hhSsockQJINkHhpDEn9IblDEiDJBki8dIY0J7lDEiDJBki8
dIakium+hLYLBkiyARIvrSHNKeicxCEJkGQDJF5aQ1IX0/2JbegPkGQDJF56Q0rqkARIsgES
L70h2YekBxLcEpCkAyRemkNK5pAESLIBEi/NIalhiR+SAEk2QOKlO6TZBQeuT3BTQJINkHjp
Dkn9nh5McEtAkg2QeGkPaXZB1wQPSYAkGyDxdEDa4liVi3XidTE9mtiGW6sSHzThtlu7UzDq
7h0pGLTK2pqCUatTMKabB3WrBkg7Hat2sU68lhYctDWhDXdVJz5owu229qRg1D0/p2DQZB7U
xKtJwZi7rSrnlTRAcj42JvGtnVIX0UMJbYdv7WTDt3a8tP8ZSamZeYn9lARIsgESLwMgqd8l
dkgCJNkAiZcJkL5K7JAESLIBEi8TIKkLaWwCWwGSbIDEywhIX+V1S+CQBEiyARIvIyDZh6QE
3ncMkGQDJF5mQErokARIsgESLzMg2YekRzxvA0iyARIvQyB9lXeQ50MSIMkGSLwMgaSGej8k
AZJsgMTLFEgzvB+SAEk2QOJlCiRVRI963AKQZAMkXsZA8n5IAiTZAImXMZDsQ9Jj3jYAJNkA
iZc5kOxD0gZPGwCSbIDEyxxIagg97ml9QJINkHgZBGl63sGeDkmAJBsg8TIIkhrs7ZAESLIB
Ei+TIE3P67HRw+qAJBsg8TIJkrqA/uNhbUCSDZB4GQVpeq6XQxIgyQZIvIyCZB+SnnC/MiDJ
Bki8zII0PfdQ94ckQJINkHiZBUn91sMhCZBkAyRehkH6PMf9IQmQZAMkXoZBUufTk25XBSTZ
AImXaZA8HJIASTZA4mUaJHUejXO5JiDJBki8jIM0Necwl4ckQJINkHgZB8k+JI13tyIgyQZI
vMyD5PqQBEiyARIv8yCp37g8JAGSbIDEy0BIbg9JgCQbIPEyEJIaRE+5WQ2QZAMkXiZC+szd
IQmQZAMkXiZCUoWuDkmAJBsg8TIS0mc5PV0ckgBJNkDiZSQk+5D0tPNKgCQbIPEyE5KrQxIg
yQZIvMyEpAa6OCQBkmyAxMtQSJ/lHFnptA4gyQZIvAyFZB+SnnFaBZBkAyRepkKa4nxIAiTZ
AImXqZDUufSswxqAJBsg8TIW0pScoxwOSYAkGyDxMhaSfUj6b8MrAJJsgMTLXEif+BwOSYAk
GyDxMheS+rXDIQmQZAMkXgZDcjokAZJsgMTLYEjqVzShocWAJBsg8TIZ0se+oxs6JAGSbIDE
y2RI6hx6roGlgCQbIPEyGlLDhyRAkg2QeBkNyT4kPR9/ISDJBki8zIb0se+Y+IckQJINkHiZ
DUmd3cAhCZBkAyRehkP6qIFDEiDJBki8DIekBtAL8RYBkmyAxMt0SA0ckgBJNkDiZTokdRZN
jLMEkGQDJF7GQ5rsO2btdzGXAJJsgMTLeEiqF/nyz5gaYwEgyQZIvIyH9EEB2bVbFL0EkGQD
JF7GQzqNAl0ZvQSQZAMkXsZDaheEdEb0EkCSDZB4GQ/p4CCkQdFLAEk2QOJlPKQ/ByHFeJ8X
QJINkHgZD6min9/RQTGWAJJsgMTLeEiqcsI11x8W6xV+gCQbIPEyH5K/8rzOq6O+CEiyARIv
OyCp/6Nro74GSLIBEi9LIK08IO/TyK8BkmyAxMsSSOopOj7yWeCAJBsg8bIFkjqH7o/4CiDJ
Bki8rIE0p1mbxeFfASTZAImXNZDUrTQ0/AuAJBsg8bIH0voj6dWwLwCSbIDEyx5I6v2cg9bx
zwFJNkDiZREk9Qf6K/8UkGQDJF42QVrRvmAa+xSQZAMkXjZBUo/RSeyPSYAkGyDxsgqS6k+P
1n8CSLIBEi+7IM1o1HZp3SeAJBsg8bILkrqBiusuA5JsgMTLMkgVPXzv1l4GJNkAiZdlkNRb
vsNqTxcJSLIBEi/bIKkLqTR0CZBkAyRe1kFauk/jmcFLgCQbIPGyDpJ6kH4ZvABIsgESL/sg
VZ5K4wMXAEk2QOJlHyT1ZcF+3/j/BSTZAImXhZDUdTTS/w8gyQZIvGyEVHFIzv8UIEkHSLxs
hKReosPXA5J0gMTLSkjqfCoDJOkAiZedkBa1bj4PkIQDJF52QlL30EBAEg6QeFkKaWMf+i8g
yQZIvCyFpKbkd1oDSKIBEi9bIakr6WpAEg2QeFkLaU2XvJnGBwUk8QDJdBOpz0bzowKScIBk
vF/Tv8wPCkjCAZLxFrZqucD4oIAkHCAZ74d/0QXGBwUk4QDJeD/sOppeMD0oIAkHSMb7Yc+H
ud3WOa+nNUASLisgvVpod55l1UwYMXxcVfpDUiPoz4YHBSThsgLSI7fOmjVrtmVNvGjajOJx
GQDp2w4Fn5sdFJCEywpIt74Q+Keq+D3LKh+6M/0hqSfpxMj3aJYNkITLCkiXf7Jzi/3PqkJl
WVsLF2YAJDWAHjI6KCAJlw2Qas7/86DCKxdZswdV258NnpoJkGY3bbvE5KCAJFw2QPr+gid/
UvdctKl8iP+ziyfZH27u1atXf+dDWQq7i4an+iagvaDquksuf/29a8hHMwfV2BcGl9sfxl9x
xRWjf3asxnJeR381/g87jva9b3DMPVa1wdFqq65KwaApfFAN5+ZB3e0VknXlqysK7ePYjsL5
tV9xPjam7ls7pd7xHVxhblB8aydcNnxrN/XKzZa1ffBXVcM+sqxpRZnwWzt/w+gmc4MCknDZ
AGnLsFvnfH3LddXW88OXLCt5su7rzrckpZCW7VvwhbFBAUm4bIBkVd457A8PbLGsmmdHDH+y
/qcr51uSUkjqYTrD2KCAJFxWQIqT8y1JLSR1Gv3H1KCAJBwgGa8e0vRG7ZYbGhSQhAMk47HT
cY2m4YYGBSThAMl4DFJF992atfUAACAASURBVJxJZgYFJOEAyXj8BJFv+np+F39NjQGScIBk
vLAzrQ6h240MCkjCAZLxwiAtbdtklolBAUk4QDJe+Lm//01nmhgUkIQDJOOFQ6rsS88YGBSQ
hAMk40W8G8Vn+fuvkB8UkIQDJONFvq3LKLpcflBAEg6QjBcJae2BuR+JDwpIwgGS8aLeaOxF
OnaD9KCAJBwgGS/6HfsK6W7pQQFJOEAyXjSkha1azBceFJCEAyTjxXgP2bvoN8KDApJwgGS8
GJA29qbnZAcFJOEAyXix3tW8PK/zatFBAUk4QDJeLEjq/+hXV9/8idyggCQcIBkvJqQF+WQn
d1ohQBIOkIwXE9LFFOgdqUEBSThAMl5MSC2CkEZKDQpIwgGS8WJB2pAThDRUalBAEg6QjBfz
iHRYENJtUoMCknCAZLyYkCYGHDVfJTUoIAkHSMaLCUk9c6ivoJXcu48BknCAZLzYkJRas35G
i0afCg0KSMIBkvHiQVL+t5Y9eKXMoIAkHCAZrwFI6hI6X2ZQQBIOkIzXEKSKo+k+kUEBSThA
Ml5DkNRXLRt9LDEoIAkHSMZrEJIaT92+FRgUkIQDJOM1DEmNFHmRHyAJB0jGc4D0XR+6V/+g
gCQcIBnPAZKa06ZA/+m5AEk4QDKeEyT1nK+r9nOvApJwgGQ8R0jqMirUPSggCQdIxnOGZP+Y
dJfmQQFJOEAynjMkNbdtvua3xAQk4QDJeC4gqed9nZZpHRSQhAMk47mBpK6isyt1DgpIwgGS
8VxBWn88lekcFJCEAyTjuYKk5un9MQmQhAMk47mDpCbmdFyqb1BAEg6QjOcSkrqGztL3YxIg
CQdIxnMLaf0JdLu2QQFJOEAynltIauF+ee/qGhSQhAMk47mGpF7LPUDXj0mAJBwgGc89JPUn
OnOjnkEBSThAMp4HSBv7UameQQFJOEAyngdIatH+eW9rGRSQhAMk43mBpN7I3W+hjkEBSThA
Mp4nSOp6OnWDhkEBSThAMp43SBvP0PI+foAkHCAZzxsktbh9zivJDwpIwgGS8TxCUm/mtfs6
6UEBSbhMg1SzctrkuZU1exMkdROdkvSPSYAkXGZB+v4f+wfekGu/Gyv2Ikgbf0nXJzsoIAmX
UZA2dM455eb7n3rgb2fmd3UhyfmWZAYktaxzzstJDgpIwmUUpIvafhG6tLjL7/YiSOp/+fsu
SG5QQBIuoyB1vKbu4j877U2QVCmdlNyPSYAkXEZB6nJV3cU7u+5VkCp/RX9KalBAEi6jIF3a
8oPQpRnti/cqSGp555yXkhkUkITLKEg/dqej/vj3+/4xqhcdVrl3QVLvF+wzP4lBAUm4jIJk
bXugR47/19/d7/7e2VF2QVK3U+/vEh8UkITLLEh2e9bOXrUrePHGvQpS5bl0TeKDApJwGQeJ
1X6vgqS+6eJ7NuFBAUk4QDJeopDUBwWtZyc6KCAJB0jGSxiSuoN6VSS4KSAJB0jGSxxS5UC6
KsFNAUk4QDJe4pDUNwf6nklsS0ASDpCMlwQk9Wmj1rMS2hCQhAMk4yUDSd1FxyX0YxIgCQdI
xksKkrqALktkM0ASDpCMlxykVYf4nkpgM0ASDpCMlxwkVd641UzvWwGScJkG6eznd9Rdfmav
hKTupWO9/5gESMJlGqRm1HJEubtzn2QrJDWERnreBpCEyzRI218uakZd/7Z8b4a0qgc95nUb
QBIu0yDZ7XhlaDM6+fG9F5Ka0qTZFx43ASThMhCS3ebLfS7OG+l8SzIUkrqPDi9/+q11HrYA
JOEyENL21y9uQ60v2ZshqcH+lzd29vCOL4AkXKZB+vHZ85tSy4vf3u3sKJshXRo4T+a+i1xv
AEjCZRqkPGp+0Ru7XCjKakgVjQKQqMz1FoAkXKZBGvrqjkgveyGkBUFHHl5UAUjCZRokLznf
kkyFVNEkCOlu11sAknCAZDwdPyNdE3DUyP3bvQCScIBkPB2Qviu2HTWlwZVuNwAk4QDJeDog
2T8mvfzx8qPoWrerA5JwgGQ8PZD8Lenm+vd2gCQcIBlPHyQ1Y9+cce7WBCThAMl4GiGpD5oW
vOpqRUASDpCMpxOSej6vxadu1gMk4QDJeFohqUd87d2cfhWQhAMk4+mFpG6gQ5c5rwVIwgGS
8TRDUiOp1xrHlQBJOEAynm5IGwfS2eudVgIk4QDJeLohqbUnULHTOoAkHCAZTzskteJwutFh
FUASDpCMpx+Smt/Jd3/DawCScIBkPAFI6rPWuQ2/TQUgCQdIxpOApN5q1HhSQ8sBSThAMp4I
JPXf3LbTGlgMSMIBkvFkIKl7qeO8+EsBSThAMp4QJHUt9fwm7kJAEg6QjCcFqfJ3dHLcs+sD
knCAZDwpSOq7M+m8jXGWAZJwgGQ8MUhqTR+6NM4iQBIOkIwnB0ktPYRuj70EkITLZkh7HKtx
sY7+auSuell73/iYC6qsarlR41ZdlYJBs+5BjZubB/VnDZC+d2yPi3W09+MewSsvb5n/Uqyv
b7Z2CI4arx1bUjDoz9YPKRi1KgVjbrJ2Oq7zkwZIzsfGbPvWzu61guYfxfgyvrUTLpu/tXO+
JVkIST2es8/06K8CknCAZDxhSOpv1DX67V4ASThAMp40JHU5Hbcq8muAJBwgGU8cUmUR9Y98
7TkgCQdIxhOHpCpOpyERp9cHJOEAyXjykNS3R9Kfwr8CSMIBkvEMQFILOtOdYV8AJOEAyXgm
IPlPrz+efw5IwgGS8YxAUu83bfQ2+xSQhAMk45mBpJ7Pa8lOrw9IwgGS8QxBUvdRhzl1nwCS
cIBkPFOQ1PXs9PqAJBwgGc8YJDWSeteeXh+QhAMk45mDtGEgnbMheBGQhAMk45mDpNYeT38I
XgIk4QDJeAYhqaU96ObABUASDpCMZxKSmtfR94D/X0ASDpCMZxSSmtI691kFSOIBkvHMQlJv
NmoyCZDEAyTjGYakns1t+wUgSQdIxjMNSd1DXRYCknCAZDzjkNTVdED3vE7XOb/3ue4ASTRA
MlxlL/JXaHpcQJINkAy3pmkAEr1pemBAEg2QDPdp0BH9w/TAgCQaIBluegjSv00PDEiiAZLh
KnsGHOXOMD0wIIkGSKYrb2s78lH/tYbHBSTRAMl4y/5x6Q0f9aOTVpodFpBEAyTz+f8gW/Fr
Om6Z86oaAyTRAMl8gWc2VBTSUUtMjgpIogGS+YJPEdrwO+o+3+CogCQaIJkv9Fy7yhLqPNPc
qIAkGiCZr/ZJq5VXUacvjY0KSKIBkvnqn/1dSu3KTY0KSKIBkvnYyyju8rV+z9CogCQaIJmP
vx5pTE6z182MCkiiAZL5wl7Y91hek5eMjApIogGS+cJfIfvfgoKnTYwKSKIBkvkiXmo+sXHu
WAOjApJogGS+yHM2vNU89375UQFJNEAyX9TJTz5s67tDfFRAEg2QzBd9FqGP96HrpUcFJNEA
yXwxTsc1rQONEh4VkEQDJPPFOq/d7K506UbRUQFJNEAyX8wTRH59GBVtkBwVkEQDJPPFPtPq
oiPo/O8ERwUk0QDJfHFOWby8Nw1YJzcqIIkGSOaLd+7vVafSKavERgUk0QDJfHFPor/mDDrh
W6lRAUk0QDJf/HejqBhIxywVGhWQRAMk8zXwti4bhtKhC2RGBSTRAMl8Db0/0oZhdMhckVEB
STRAMl+DbzRWeTl1FjmdMSCJBkjmc3jHvlLab4rAqIAkGiCZz+mtL0tp30/0jwpIogGS+Rzf
Q/aenFaTtI8KSKIBkvmc34z5kbymr+geFZBEAyTzuXhX8yfyC57VPCogiQZI5nMBST3XqGC8
3lEBSTRAMp8bSOqNZrkPaR0VkEQDJPO5gqTeaeG7S+eogCQaIJnPHSQ1ua3vdo2jApJogGQ+
l5DU1PY6T+QASKIBkvncQlJfdqQ/VuoaFZBEAyTzuYakZnejSzbOfGW6jlEBSTRAMp97SGph
T+pARKdpeI9MQBINkMznAZJa1pL8HZ/8CYYASTRAMp8XSJ9RsHeTHhWQRAMk83mB9EII0qNJ
jwpIogGS+bxA+jQE6c2kRwUk0QDJfF4gVZ4YcORL/ulCgCQaIJnPCyQ1r6/tqFsz36hkzwwO
SKIBkvk8QVKVH/7nvY3lnal/kme8AyTRAMl83iAFW3oS9ZyV1KiAJBogmS8RSKriImr7RjKj
ApJogGS+hCApNSYv7+4kRgUk0QDJfAlCUi+1ouLE3/gFkEQDJPMlCklN705nLE90VEASDZDM
lzAktbwfdfs8wW0BSTRAMl/ikNSGUdTiucQ2BSTRAMl8SUBS6r6C3NKENgQk0QDJfElBUu/u
S8MqEtgOkEQDJPMlB0nNPZr6LvK+GSCJBkjmSxKSWvVrOuAjz1sBkmiAZL5kIanK0b5mT3vd
CJBEAyTzJQ1JqSea+EZ5PL8QIIkGSObTAEl93JF+s8bTFoAkGiCZTwckteAXdOQcLxsAkmiA
ZD4tkNS6Itr/fQ/rA5JogGQ+PZBUZWlOwVj3qwOSaIBkPk2QlHqhBZW4fgU6IIkGSObTBklN
6UL9V7hcF5BEAyTz6YOklp7s+hXogCQaIJlPIyS1fgS1fd3VmoAkGiCZTyckpcbk57l6Zz9A
Eg2QzKcXknqptatXoAOSaIBkPs2Q1IwedLrzK9ABSTRAMp9uSOrbAdRtqtNKgCQaIJlPOyT/
K9CbT3BYB5BEAyTz6Yfk5hXogCQaIJlPApKa1I4uWNfQCoAkGiCZTwSSmncM9WnoFeiAJBog
mU8Gklp1Lh0wOf5iQBINkMwnBElVlvqaPrX47qvvWxlrKSCJBkjmk4Kk1JNNfI2IqH15jGWA
JBogmU8Okno7J/BOmYduiF4ESKJJQFpVstWyaiaMGD6uCpBiJAjp6dB7N8c4WxcgiSYA6eer
C7dY1sSLps0oHgdIMRKE9FAI0mvRiwBJNAFIT15hQ6oqfs+yyofuBKToBCF9EHTk+yp6ESCJ
ph/S3Etm2ZBWFSrL2lq4EJCiE4SkBgUlHRL9vR0giaYd0pZLZi23Ic0eVG1/Mniq/eH9Bx98
8IkdjlVbzutob2d1CgbdZe0Ru+6Nf2xBbW+53Jd/87aIJXt2iw0av5Q8qDtqUjCmqwfVC6S7
HrP8kMqH+D+5eJL94eZevXr1d3EoQ1qq+d7+8H576l+R6luCIqquu+QM6aMrdgcgzRxUY382
uNz+8M306dNnbXKsynJeR3tbqlIw6DZrl/gYy8+ifV8M+8qu7eKDRrfH2pyCUatTMOZWa7fj
Ols8QHqkMND9Kwrtbwh3FM6v/brzN5n4GUlrlWUFvhL+Pkr4GUk03T8j/bB69eophQu/rxr2
kWVNK8Jv7WJkBJJSHx5Eh02p/xSQRJP4g6z/Wzvr+eFLlpU8Wfc151sCSLpbWUyNy+o+AyTR
xCDVPDti+JP1P1053xJA0t/41jRwWegyIImG59qZzxwkNbsvdXwreBGQRAMk8xmEpNaPzs0d
FThZFyCJBkjmMwlJqTcOoF4zFSAJB0jmMwtJfXMetXgckIQDJPMZhqTU2KZUtAqQRAMk8xmH
pD4/gg75ApAkAyTzmYek1pX48m90/Z5k+gIkHiDpLQWQlHppf+r3tfFRAYkHSHpLCSS1qj/t
+4LpQQGJB0h6Sw2kHZsjn8ZqIEDiAZLeUgRpi/9prD2nOK+pMUDiAZLeUgYp4mmsBgIkHiDp
LXWQlBrXigY6vymZtgCJB0h6SyUk/9NYO71tbFBA4gGS3lIKKfA01tExzsQqEiDxAElvqYWk
1OsdqPcsM4MCEg+Q9JZqSGrpOdTycSODAhIPkPSWckhKjW1CRasNDApIPEDSWxpA8j+NtfvH
8oMCEg+Q9JYOkPxPYy0oFX8aKyDxAElvaQFJqWfb0ulfT/7jkJuXxVxfS4DEAyS9pQkktegM
au4/437bz8QGBSQeIOktXSCpyuuC711xlNiggMQDJL2lDSRVFnpfstlSgwISD5D0lj6QbglB
miY1KCDxAElv6QPp5aCjnBelBgUkHiDpLX0gqV8H3ynTV7RUZlBA4gGS3tII0po/H9jo2Kcm
HUr7jRUZFJB4gKS3NIIU6rvSAhowV2BQQOIBkt7SD5JS00+mFmX6n+gASDxA0ls6QlKVY1pQ
H+1/mQUkHiDpLS0hKfX1QMofpfksQ4DEAyS9pSkkpSYcQAe9rnVQQOIBkt7SFpL6piTHV/yt
xkEBiQdIektfSEq93Z32H69vUEDiAZLe0hmSWje6gAbM0zUoIPEASW9pDUmpKb2opa7fhAMS
D5D0luaQ1MYxzen4z7UMCkg8QNJbukNSasG5mn4TDkg8QNJb+kNSaty+1PN/yQ8KSDxA0lsm
QFLfFPtyilcmOygg8QBJbxkBSam3DqH2Tyc5KCDxAElvGQJJrfX/Jnx+UoMCEg+Q9JYpkJQq
P45ajalMYlBA4gGS3jIHklpf1oxO/CLxQQGJB0h6yyBISs06gxqPTvg34YDEAyS9ZRQkpcbt
Q4e/n+C2gMQDJL1lGCS1vJhyilcltCkg8QBJb5kGSakXO1OXlxLZEJB4gKS3zIOk1ozKpUFL
vG8HSDxA0lsGQlLqk2Op9ZjKp4ecde1iD1sBEg+Q9JaRkNT6sqbUwX86yTbT3W8ESDxA0ltm
QlJq5tHBMxyf5H4TQOIBkt4yFZK6OgjJt8b1FoDEAyS9ZSyky0NvXuH+9CiAxAMkvWUspHGh
I1KJa0mAxAMkvWUspMozApDaUtuyDe62ACQeIOktYyGpdTcd3elXH60e3ZgOnehqA0DiAZLe
MhdSbfOKfNRvqosVAYkHSHrLfEhKfdCX8oud350MkHiApLdsgKQqx3WmNqVOr68AJB4g6S0r
ICm1trQ5HfJcw+sAEg+Q9JYlkJRaUJxL/aY0tAYg8QBJb1kDSamPTqK84gaexQpIPEDSWxZB
UmpCV2oV/0clQOIBkt6yCpL6rqwldRsXZyEg8QBJb9kFSamlJXl0yicxFwESD5D0lm2QlJrW
n3KKFsZYAEg8QNJb9kFS6pWe1HT02qgvAxIPkPSWjZDUd2P2oQPGRp6VFZB4gKS3rISk1PJR
BfSLSeFfAyQeIOktSyEp9eUg8g2azb8CSDxA0lvWQlLq1SOoySj2rkqAxAMkvWUxJLVxbDtq
P6buZX+AxAMkvWUzJKVWjW5Ex7wV+gSQeICkt+yGpNTcIh8NmBm4CEg8QNJbtkNS6r0+VFCy
wr7w40ZAqg+Q9Jb9kFTluE7UtuzTk3zU+UmDw4YCJOMBklRrSptRXuCkQ+5Ok6IzQDIeIMk1
t2fwNHhHGh4XkDRMx2uAJNhvgpAKTI8LSOYDJMH+EITUZI7pgQHJeIAk2FuhU4XnF88zOzAg
GQ+QJLulwGZ0+gNdqaB4gclxAcl4gCTa52PueFmp78YeaFP62tywgGQ8QJIt9MyGijEdqElJ
rJfQigRIxgMk2eqeIlQxpj01LfHy9rNJBEjGAyTZ2HPt1pTtR81GLTcxKiAZD5BkC3vS6uqy
dtR81DfyowKS8QBJtohnf68qbU1tRq+QHhWQjAdIskW9jGJlaStqO9r9m9AmFCAZD5Bki/F6
pJWlLaltqfs3Rk8gQDIeIMkW84V9S0e3oH1Ko0+Cpy1AMh4gyRbnFbJLRzWhfUvXSY0KSMYD
JNnivtR8yajG1LHM6Q3/EgyQjAdIsjVwzobFoxpR5zHrJUYFJOMBkmwNnvxkbkmBDCVAMh4g
yeZwFqE5xXnUpf4seLoCJOMBkmyOp+OabVPqMVYzJUAyHiDJ5uK8drOKc+mwcZFvY5FUgGQ8
QJLN1QkiPy/KpZ5+SivfeU3Lk1oByXiAJJvLM61OLcqhw8c90oao6R0aRgUk4wGSbK5PWTxl
kI9yAmd4eCb5UQHJeIAkm4dzf3/YIXiqlOOTHxWQjAdIsnk5if4JQUgdkx8VkIwHSLJ5gfTb
IKRGd65OdlRAMh4gyeYF0ruhE7NSi5L5yY0KSMYDJNk8vT/SAy3t49HNi0e3oYKiqcmMms2Q
tjhW5WId7W2tSsGg263dKRh1944UDFplbfWw9po3X11h/7P+gYMp55w3Ex+1OvFNE87Ng7pV
A6QdjlW7WEd7O6tTMOgua08KRt2zOwWDJvigbnulD9GxT2xNcNSaBLdLJlcPqgZIzsdGfGsn
W/p/axfWOwN8dGBZYq9Iz+Zv7ZxvCSDJlmGQlCovbkT7jF6awJaAZDxAki25N2NeOLoVFRR9
4Xk7QDIeIMmW7LuaryzrSDkDJnncCpCMB0iyJQtJqYqxPYn6TvD0MgtAMh4gyZY8JOX/vQNR
tzIP5xwCJOMBkmxaICn1SVEetRu9zO3qgGQ8QJJNEySlZpc0pWYlLt+NFpCMB0iyaYOk1Iqy
9pQz4AM3qwKS8QBJNo2Q/L936OHu9w6AZDxAkk0rJKU2TuhLdMTY7xxWAyTjAZJsmiHZTS7K
pf1HN/xuZYBkPECSTT8kpb4qaUwtSuaphcOPOOqKmL/JAyTjAZJsEpCUWjK6LRX8Zl//ywC7
rYyxHJCMB0iyyUDy/97h4ODraWlUjKWAZDxAkk0KklLrDwhC6hNjGSAZD5Bkk4OkegYhdZge
vQiQjAdIsglCuiL0vR31HRf5zjCAZDxAkk0Q0srufkXHPN6PaP9Rc8MWAZLxAEk2QUhq9c2/
POvvFUp9XtKMcge8wp7wAEjGAyTZJCHV9+0Y+wemg0vr/qYESMYDJNnMQFL+JzzkU6Oij4Of
AJLxAEk2Y5CUWlja2f6RaYz/vEOAZDxAks0gJKU2vjLAR61KZgKS+QBJNqOQ7GaMaks5/SYK
vFO6U4BkPkASrGJcX6IOoxcbHhaQUjAoIMk2uaQJFQx6Rev7OzsGSOYDJOGqVow5lKh7qZZ3
dnYZIJkPkISrUqrylUF51Ly43NiYgGQ+QBIu+Fu7r0s7+n8f7uF8eMkESOYDJOFqf/29YUI/
H7UbNdvEmIBkPkASjv0d6ctRbSin37gN9sVXb7krqfcBbDhAMh8gCRf2B9l1Y48k6lq64Cz/
+9PeJDYmIJkPkISLfGbD5OLGlBt88dJrUmMCkvkASbjopwgtKc0LQrpQakxAMh8gCRfruXYt
gpB6bxAaE5DMB0jCxYL0i9AL0ztcM01kTEAyHyAJFwvSywFGbYY0JzqmLJE3pnUIkMwHSMLF
fBnFuM5Ex3+q1o0bkEsFA6JOmJJsgGQ+QBIuzuuRFn0b/Hde6UFE+5d8qnVMQDIfIAnn/MK+
ycW6v8UDJPMBknBuXiFb+y2e01vEuA2QzAdIwrl8qfn84Ld4n2gZE5DMB0jCuT9nw+SSNkSH
li5JfkxAMh8gCefl5Cf2t3h5Or7FAyTzAZJwHs8ipOVbPEAyHyAJ5/10XJNL2ib5LR4gmQ+Q
hEvkvHbJfosHSOYDJOESPEHk/LKeRG2KP05oY0AyHyAJl/iZVuu/xZt0RruDR8V6g9o4AZL5
AEm4ZE5ZHPoW74bAc1xPcP+iC0AyHyAJl+S5vxeUHV77boAPud4IkMwHSMIlfxL9N0KQhrve
ApDMB0jCJQ9pfeiV6fvdPtd55UCAZD5AEk7D27qcFYSU63+O+AI3GwCS+QBJOA2Q5u7vd1Sy
dGy/HMrpW7bIcQNAMh8gCafjjcZW3FxYPNF/YV5ZXx/l9i1zeNYDIJkPkITT/Y59c8r62t/l
9Rv7bQPrAJL5AEk4gbe+nF12DFGjAWPj/okWkMwHSMLJvIfsZ6MPIWo8YOzqmEsByXyAJJzY
mzF/NvogoiaDJlRELwIk8wGScJLvav7Z6AOJWhVNiHyWOCCZD5CEk4Sk1MZ3SvYnalM0IezU
eIBkPkASThaSClhqR9S2+J36N3wGJPMBknDikOw2vON/xcUBJbWWAMl8gCScCUh2FROKWhB1
LnnHvvxC39bdr1/rsAEg6Q2QhDMEyW7dhKJmRF1GlQWemferyobXBiS9AZJw5iDZrZ1Q1KT2
5UsTG14VkPQGSMIZhWS34u8hSNc3vB4g6Q2QhDMNSS0MQfpbw6sBkt4ASTjjkNRxQUhTGl4L
kPQGSMKZhzS1jYsDEiBpDpCEMw9JLb1p6FWTnFYCJL0BknApgIQ/yKZgUEASDpCMB0iyARIP
kPQGSMIBkvEASTZA4gGS3gBJOEAyHiDJBkg8QNIbIAkHSMYDJNkAiQdIegMk4QDJeIAkGyDx
AElvgCQcIBkPkGQDJB4g6Q2QhAMk4wGSbIDEAyS9AZJwgGQ8QJINkHiApDdAEg6QjAdIsgES
D5D0BkjCAZLxAEk2QOIBkt4ASThAMh4gyQZIPEDSGyAJB0jGAyTZAIkHSHoDJOEAyXiAJBsg
8QBJb4AkHCAZD5BkAySeDkibHJszzXkd7W3enYJBv5u2PAWj7tiWgkHnTfspBaP+nIIxN0xb
4rjOFg2QnLu4j+CVp1XTez2c6ptgqit6bU/1TTDUwl7/9LA2IOkIkLIwQDIfIGVhgGQ+QMrC
0gfS9MmCV55W/fDhN6m+Caaa9WFVqm+CoTZ/uMTD2pKQENprAiSENARICGlIDtKrhXbniV19
GvXMTvtDzYQRw8dl+48PgZnuBQ/s7kf/b+gt33p6UOUgPXLrrFmzZotdffq0qND/9+2JF02b
UTwu1bdFtuBM94IH9u/Dv1xyW/FWLw+qHKRbXxC76nRqzl2/9e9eVcXvWVb50J2pvjmChWa6
FzywqnCeZe0c/ImXB1UO0uWf7NzivFbGt+j1//h3r1WFyrK2Fi5M9c0RLDTTveCBXXGdbadm
2OteHlQxSDXn/3lQ4ZWLpK4+jVru371mD6q2Lw6emuobI1pgpnvLAzu9cJmXB1UM0vcXPPmT
uueiTVLXnz4Fdq/yIf6LF09K9Y0RLTDTveOBrXn/t497elBlf/29a8hHotefFgV2r5mDauyL
g8tTfWNEC8w0ULY/sBv+OnSStwdV+O9IV74qe/3pUGD3WlH4o2XtKJyf6hsjWj2kLH9glw69
x3/E9fKgikGaeuVm9P33JwAAA0pJREFUy9o++Cup60+fArtX1TD7f9HTirL5t3ahme4FD2zV
JU8E//XwoIpB2jLs1jlf33JdtdT1p0/B/08/P3zJspInU31bZAvMdC94YL8a9PkCux+8PKhy
39pV3jnsDw9k+e9JAwUh1Tw7YviT2bx3WbUzzf4H9vXCQO94eVDxXDuENARICGkIkBDSECAh
pCFAQkhDgISQhgAJIQ0BEkIaAqTM65QT4iz4F2X5c7LTOEDKvAApDQOkzAuQ0jBASvuq90R8
AZDSMEBKy97tt1+LY/9jXzjnvIn7UfuSzfbFz37Z6oSXRh4bgrTywq4tT32nboMXT2nZ6+EA
pPoFdRsg+QApHXua+t5Z1pdetCF1a3zVE0NohGV93OiYv1+a1z4EaX6rTjfcfozv8dAGD9Ch
N13WpJsNqX5B/QZIPkBKxwa0+tGydrcssSGR/zVmvbvY/x2+w7IepxCkXx74k2XtOb1Z8OUM
P7T6xVbLKicbUv2C+g2QfICUjm3dZn9Y33SYDam5/0Sfl+5rraD77Qs/twxC+onu8K/3An0Q
WP8VCrzy+5e0qX4B2wDJB0hp2YzSol6NyQ/pCP+nI/e13qfAyWyOCUL6gkI9H1j9LvrW/89f
aFP9ArYBkg+Q0rF/+HqNfnL2gX5IAQc2pLfof/5LvwhCmk23fBpofWD9e2ml/5/baFP9ArYB
kg+Q0rAt+Zf5/+nEIS2iB+wLe9oEIW2m2/xfXzhhW2CD1+g1/z9DaFP9ArYBkg+Q0rAFVGp/
/MzHIVX1PHKnZY2v/WXDWe1XWNb2gzrXBDb4qXXv7ZY1L4821S9gGyD5ACkN+7lr67+Ou2zf
9gdProdkTc7rfdflnQ7uE4Q0p0X7627s4XvRsv7b6d+WdT8d/rdrWp5iQ6pfUL8Bkg+Q0rFF
57Tq/Lu1z+53NoNkfXpSq/4Ljz4z9AfZ5b/t1OpU/09BjwW+mXvx5JbHPfiO/w+ydQvqN0Dy
AVKGVPP4J/bHLc2vE9sAJRMgZUr9Wn64ZeXvGq2W2wAlESBlSmtPJqKOHwhugJIIkDKnbz76
xtupXD1vgBIOkBDSECAhpCFAQkhDgISQhgAJIQ0BEkIaAiSENARICGkIkBDSECAhpKH/BwMv
FkNN1i/VAAAAAElFTkSuQmCC" width="420" /&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[36]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-r"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Hypothetical travel at 45deg&lt;/span&gt;
&lt;span class="c1"&gt;# sin(45)*v_0 - gt/2 = 0&lt;/span&gt;
&lt;span class="n"&gt;t.45&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;pi&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v_0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;G&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;dist.45&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;pi&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v_0&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;t.45&lt;/span&gt;
&lt;span class="nf"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dist.45&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;




&lt;div class="output_text output_subarea "&gt;
&lt;pre&gt;   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  104.2   124.8   158.8   186.7   223.4   385.8 &lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In&amp;nbsp;[&amp;nbsp;]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-r"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;</description><author>jodavaho.io</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://jodavaho.io/analysis/mark-1.html</guid></item><item><title/><link>https://tricht.eu/whoami/</link><description>&lt;p&gt;I&amp;rsquo;m Michael van Tricht, living in The Netherlands. I started freelancing when I was a teenager back in 2008. Fast forward to 2015, I graduated as a Software Engineer, and I&amp;rsquo;ve been rocking it as a software engineer ever since. My current tech stack revolves around Java, React, and Kubernetes, and I love diving into new technologies.&lt;/p&gt;
&lt;p&gt;Feel free to track me down on &lt;a href="https://github.com/mtricht" target="_blank"&gt;GitHub&lt;/a&gt; or simply shoot me an &lt;a href="mailto:michael@tricht.eu"&gt;email&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="technologies-tools-buzzwords-and-more-i-workhave-worked-with"&gt;Technologies, tools, buzzwords and more I work/have worked with&lt;/h4&gt;
&lt;p&gt;Java, Kotlin, Spring Boot, Go, PHP, iOS, macOS, Swift, Laravel, Lumen, Symfony, Slim, CakePHP, CodeIgniter, NodeJS, Javascript, Express, React,
Python, Flask, RabbitMQ, SCRUM, Test Driven Development, Design Patterns, UML, MySQL, MongoDB, PostgreSQL, SQL server, AWS, Google Cloud, Azure,
Linux, CentOS, Ubuntu, Arch Linux, Docker, Kubernetes, Helm, SOPS, Jenkins, SonarQube, Grafana, Graylog, Datadog, Prometheus, Git, Github, Gitlab,
Nexus, Jira, XML, REST, SOAP, XSLT, PhpStorm, IntelliJ, Postman, Insomnia, SoapUI, Charles, Trello, LDAP, VPN, IPsec, SURFconext, SAML, OAuth2, OpenLens, k9s, ArgoCD,
OpenID, OpenID Connect, Matomo, Sentry, Elasticsearch, Kibana, OpenRewrite and many more&amp;hellip;&lt;/p&gt;</description><author>Michael van Tricht</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://tricht.eu/whoami/</guid></item><item><title/><link>https://tricht.eu/projects/</link><description>&lt;p&gt;During my free time, I enjoy working on various side projects. Here are a few examples (but not limited to):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mtricht.github.io/gamesense-essentials/" target="_blank"&gt;Gamesense Essentials&lt;/a&gt;&lt;br /&gt;
Controls the OLED screen present on certain SteelSeries products such as keyboards, mice, headsets and more.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://play.google.com/store/apps/details?id=dev.tricht.space_apocalypse" target="_blank"&gt;Space Apocalypse&lt;/a&gt;&lt;br /&gt;
Clone of the Vampire Survivors game but for Android.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mtricht/trello-burndown" target="_blank"&gt;trello-burndown&lt;/a&gt;&lt;br /&gt;
An easy to use self-hosted SCRUM burndown chart for Trello boards using SCRUM browser extensions.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mtricht.github.io/wikiscroll/" target="_blank"&gt;wikiscroll&lt;/a&gt;&lt;br /&gt;
Indefinitely scroll through wikipedia in your native tongue.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mtricht/lunaris" target="_blank"&gt;Lunaris&lt;/a&gt;&lt;br /&gt;
Archived; this tool aided in-game item pricing within the game Path of Exile.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20140625103600/https://steamep.com/" target="_blank"&gt;SteamEP&lt;/a&gt;&lt;br /&gt;
Archived; website with more than 40k users for trading Dota 2 player cards, Steam cards and more.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://github.com/mtricht" target="_blank"&gt;…and more on GitHub&lt;/a&gt;&lt;/p&gt;</description><author>Michael van Tricht</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://tricht.eu/projects/</guid></item><item><title>Stephen Newberry</title><link>https://shielddigitaldesign.com/author/stephen/</link><description>&lt;p&gt;
Stephen is a proud U.S. Coast Guard veteran who used his hands-on
military electrical training as a springboard for his engineering
career. He has a Bachelor of Science degree in Electrical and Computer
Engineering from Rutgers University (New Jersey) and a Master of
Science in Electrical Engineering from the University of Idaho. In
addition to five years of military enlistment, he has industry
experience in both defense and commercial hardware design roles. His
focus is in digital hardware, specifically working in the area of
signal and power integrity. He has a passion for electromagnetics,
especially the analysis of PCB and package interconnects.&lt;/p&gt;</description><author>Shield Digital Design</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://shielddigitaldesign.com/author/stephen/</guid></item><item><title/><link>https://blog.vito.nyc/top/about/</link><description>&lt;p&gt;My name is nickelpro, I used to work on submarines, now I do stuff at NYU.
Occasionally I program things.&lt;/p&gt;</description><author>vito.nyc</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.vito.nyc/top/about/</guid></item><item><title/><link>https://blog.vito.nyc/top/root/</link><description/><author>vito.nyc</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.vito.nyc/top/root/</guid></item><item><title>About Me</title><link>https://www.amishbhadeshia.co.uk/about/</link><description>All about Amish Bhadeshia</description><author>Amish's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.amishbhadeshia.co.uk/about/</guid></item><item><title>Home</title><link>https://www.pinecoder.dev/home/</link><description>home.md Content in my home page</description><author>Home on Pinecoder blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.pinecoder.dev/home/</guid></item><item><title>Style debug page</title><link>https://www.pinecoder.dev/demo/</link><description>This is a demo page, taken from new.css, so I can tinker with styles and see their impact.</description><author>Home on Pinecoder blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.pinecoder.dev/demo/</guid></item><item><title>Books I Have Read</title><link>https://nicolaiarocci.com/books-i-have-read/</link><description>&lt;p&gt;This is a partial list of the books I have read. I have it both to jog my memory and because I have read a lot of stuff I have loved, and want other people to find it.&lt;/p&gt;
&lt;h3 id="2026"&gt;2026&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fight Oligarchy, Bernie Sanders ★★★☆☆&lt;/li&gt;
&lt;li&gt;Within the walls, Giorgio Bassani ★★★☆☆&lt;/li&gt;
&lt;li&gt;Saltblood, Francesca De Tores ★★★☆☆&lt;/li&gt;
&lt;li&gt;Portnoy&amp;rsquo;s complaint, Philip Roth ★★★★★&lt;/li&gt;
&lt;li&gt;Il segreto del Bosco Vecchio, Dino Buzzati ★★★★★&lt;/li&gt;
&lt;li&gt;Lettere luterane, Pier Paolo Pasolini ★☆☆☆☆&lt;/li&gt;
&lt;li&gt;The hunting gun, Inoue Yasushi ★★★☆☆&lt;/li&gt;
&lt;li&gt;Una ballata del mare salato, Hugo Pratt ★★☆☆☆&lt;/li&gt;
&lt;li&gt;Varie cose sulle sequoie e sul tempo, Jón Kalman Stefánsson ★★★☆☆&lt;/li&gt;
&lt;li&gt;La giusta distanza dal male, Giorgia Protti ★★★★★&lt;/li&gt;
&lt;li&gt;Lone Wolf, Adam Weymouth ★★★★☆&lt;/li&gt;
&lt;li&gt;Jens Munk, Thorkild Hansen ★★★★☆&lt;/li&gt;
&lt;li&gt;Il caso Bramard, Davide Longo ★★★☆☆&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2025"&gt;2025&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#il-mangiatore-di-pietre-davide-longo"&gt;Il mangiatore di pietre&lt;/a&gt;, Davide Longo ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#across-arctic-america-knud-rasmussen"&gt;Across arctic America&lt;/a&gt;, Knud Rasmussen ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#orbit-orbit-caparezza"&gt;Orbit Orbit&lt;/a&gt;, Caparezza ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#say-nothing-patrick-radden-keefe"&gt;Say Nothing&lt;/a&gt;, Patrick Radden Keefe ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#a-nord-di-thule-knud-rasmussen"&gt;A Nord di Thule&lt;/a&gt;, Knud Rasmussen ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#pornorama-claudia-grande"&gt;Pornorama&lt;/a&gt;, Claudia Grande ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#the-day-of-judgment-salvatore-satta"&gt;The Day of Judgment&lt;/a&gt;, Salvatore Satta ★★★★★&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#stasiland-anna-funder"&gt;Stasiland&lt;/a&gt;, Anna Funder ★★★★★&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#the-communist-manifesto-by-karl-marx-and-friedrich-engels"&gt;The Communist Manifesto&lt;/a&gt;, by Karl Marx and Friedrich Engels ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#the-sense-of-an-ending-julian-barnes"&gt;The Sense of an Ending&lt;/a&gt;, Julian Barnes ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#lonesome-dove-larry-mcmurtry"&gt;Lonesome Dove&lt;/a&gt;, Larry McMurtry ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#project-hail-mary-andy-weir"&gt;Project Hail Mary&lt;/a&gt;, Andy Weir ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#assalto-alle-alpi-marco-a-ferrari"&gt;Assalto alle Alpi&lt;/a&gt;, Marco A. Ferrari ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#lost-in-translation-ottavio-fatica"&gt;Lost in Translation&lt;/a&gt;, Ottavio Fatica ★★☆☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#the-mental-load-a-feminist-comic-by-emma"&gt;The Mental Load, A Feminist Comic&lt;/a&gt;, by Emma ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#ragazzo-zuzu"&gt;Ragazzo&lt;/a&gt;, Zuzu ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#history-la-storia-elsa-morante"&gt;La Storia&lt;/a&gt;, Elsa Morante ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#voices-in-the-evening-le-voci-della-sera-natalia-ginzburg"&gt;Le voci della sera&lt;/a&gt;, Natalia Ginzburg ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#s-gipi"&gt;S.&lt;/a&gt;, Gipi ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#le-valli-della-memoria-pietro-scarnera"&gt;Le valli della memoria&lt;/a&gt;, Pietro Scarnera ★★☆☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#la-mia-vita-disegnata-male-gipi"&gt;La mia vita disegnata male&lt;/a&gt;, Gipi ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#la-grande-rimozione-roberto-grossi"&gt;La grande rimozione&lt;/a&gt;, Roberto Grossi ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#a-supposedly-fun-thing-ill-never-do-again-david-foster-wallace"&gt;A supposedly fun thing I&amp;rsquo;ll never do again&lt;/a&gt;, David Foster Wallace ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#the-man-who-mistook-his-wife-for-a-hat-and-other-clinical-tales-oliver-sacks"&gt;The man who mistook his wife for a hat and other clinical tales&lt;/a&gt;, Oliver Sacks ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#source-code-by-bill-gates"&gt;Source code&lt;/a&gt;, Bill Gates ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#papyrus-by-irene-vallejo"&gt;Papyrus&lt;/a&gt;, Irene Vallejo ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#libera-universit%C3%A0-by-tomaso-montanari"&gt;Libera Università&lt;/a&gt;, Tomaso Montanari ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#cambiare-la-storia-by-adriano-prosperi"&gt;Cambiare la storia&lt;/a&gt;, Adriano Prosperi ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#grandma-gatewoods-walk-by-ben-montgomery"&gt;Grandma Gatewood&amp;rsquo;s Walk&lt;/a&gt;, Ben Montgomery ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#the-death-of-ivan-ilyc-by-lev-tolstoy"&gt;The death of Ivan Ilych&lt;/a&gt;, Lev Tolstoj ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#la-scomparsa-di-majorana-by-leonardo-sascia"&gt;La scomparsa di Majorana&lt;/a&gt;, Leonardo Sascia ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#the-moon-and-the-bonfires-by-cesare-pavese"&gt;The Moon and the Bonfires&lt;/a&gt;, Cesare Pavese ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#mornings-in-jenin-by-susan-abulhawa"&gt;Mornings in Jenin&lt;/a&gt;, Susan Abulhawa ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2025/#the-heartbeat-of-the-wild-by-david-quammen"&gt;The heartbeat of the wild&lt;/a&gt;, David Quammen ★★★☆☆&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2024"&gt;2024&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#all-your-children-scattered-by-beata-umubyeyi-mairesse-"&gt;All your children, scattered&lt;/a&gt;, Beata Umubyeyi Mairesse ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#altri-libertini-by-pier-vittorio-tondelli-"&gt;Altri libertini&lt;/a&gt;, Pier Vittorio Tondelli ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#the-new-york-trilogy-paul-auster-"&gt;New York Trilogy&lt;/a&gt;, Paul Auster ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#class-trip-emmanuel-carr%C3%A8re-"&gt;Class trip&lt;/a&gt;, Emmanuel Carrère ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#white-noise-don-delillo-"&gt;White noise&lt;/a&gt;, Don DeLillo ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#the-ministry-of-ungentlemanly-warfare-damien-lewis-"&gt;The Ministry of Ungentlemanly Warfare&lt;/a&gt;, Damien Lewis ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#the-three-body-problem-cixin-liu-"&gt;The tree-body problem&lt;/a&gt;, Cixin Liu ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#blame-vol-2-by-tsutomu-nihei"&gt;Blame! Vol. 2&lt;/a&gt;, Tsutomu Nihei ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#walking-erling-kagge"&gt;Walking&lt;/a&gt;, Erling Kagge ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#lacci-domenico-starnone"&gt;Lacci&lt;/a&gt;, Domenico Starnone ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#the-bastard-brigade-sam-kean"&gt;The bastard brigade&lt;/a&gt;, Sam Kean ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#storia-di-mia-vita-janek-gorczyca"&gt;Storia di mia vita&lt;/a&gt;, Janek Gorczyca ★★☆☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#pao-pao-by-pier-vittorio-tondelli"&gt;Pao Pao&lt;/a&gt;, Pier Vittorio Tondelli ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#slow-horses-by-mick-herron"&gt;Slow Horses&lt;/a&gt;, Mick Herron ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#trappole-alimentari-by-stefano-vendrame"&gt;Trappole alimentari&lt;/a&gt;, Stefano Vendrame ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#taccuino-1870-1884-by-giuseppe-de-nittis"&gt;Taccuino 1870-1884&lt;/a&gt;, Giuseppe De Nittis ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#blame-vol-1-by-tsutomu-nihei"&gt;Blame! Vol. 1&lt;/a&gt;, Tsutomu Nihei ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#i-love-russia-by-elena-kostyuchenko"&gt;I love Russia&lt;/a&gt;, Elena Kostyuchenko ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#my-ingeborg-by-tore-renberg"&gt;My Ingeborg&lt;/a&gt;, Tore Renberg ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#kind-of-blue-the-making-of-the-miles-davis-masterpiece-ashley-kahn"&gt;Kind of Blue: the making of the Miles Davis masterpiece&lt;/a&gt;, Ashley Kahn ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#sixty-degrees-north-by-malachy-tallack"&gt;Sixty Degrees North: Around the World in Search of Home&lt;/a&gt;, Malachy Tallack ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#replay-by-jordan-mechner"&gt;Replay&lt;/a&gt;, Jordan Mechner ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#the-horde-how-the-mongols-changed-the-world-by-marie-favereau"&gt;The Horde: how the Mongols changed the world&lt;/a&gt;, Marie Favereau ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#womens-resistance-by-benedetta-tobagi"&gt;La resistenza delle donne&lt;/a&gt;, Benedetta Tobagi ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#under-the-volcano-by-malcom-lowry"&gt;Under the Volcano&lt;/a&gt;, Malcolm Lowry ★☆☆☆☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#family-lexicon-by-natalia-ginzburg"&gt;Family Lexicon (Lessico Famigliare)&lt;/a&gt;, Natalia Ginzburg ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#lolita-by-vladimir-nabokov"&gt;Lolita&lt;/a&gt;, Vladimir Nabokov ★★★★★&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#meditations-by-marcus-aurelius"&gt;Meditations&lt;/a&gt;, Marcus Aurelius ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#the-garden-of-the-finzi-contini-by-giorgio-bassani"&gt;The garden of the Finzi-Contini&lt;/a&gt;, Giorgio Bassani ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2024/#the-question-of-palestine-by-ew-said"&gt;The question of Palestine&lt;/a&gt;, Edward W. Said ★★★☆☆&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2023"&gt;2023&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://nicolaiarocci.com/books-i-read-in-2023/"&gt;Books I read in 2023: wrap-up and reviews&lt;/a&gt;&lt;/p&gt;</description><author>Nicola Iarocci</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://nicolaiarocci.com/books-i-have-read/</guid></item><item><title>Speaking</title><link>https://nicolaiarocci.com/speaking/</link><description>&lt;p&gt;I speak at conferences and meetups. Here is a list of my most recent
engagements. You may also want to check my &lt;a href="https://sessionize.com/nicolaiarocci/"&gt;Sessionize&lt;/a&gt; profile. i&lt;/p&gt;
&lt;p&gt;Want me to talk at your event? &lt;a href="mailto:info@nicolaiarocci.com"&gt;Get in touch&lt;/a&gt;!&lt;/p&gt;
&lt;h3 id="2026"&gt;2026&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;.NET Saturday 2026, Pordenone: &lt;a href="https://dotnetsat2026pn.1nn0va.it/#schedule"&gt;Feature Flags e configurazioni dinamiche in C# e .NET&lt;/a&gt;
curl -u &amp;ldquo;ik_live_33OYhTW8MdnEpM62HIA8w4OGrsiMKKFK:&amp;rdquo; &lt;br /&gt;
-X POST &lt;a href="https://api.invoicetronic.com/v1/company"&gt;https://api.invoicetronic.com/v1/company&lt;/a&gt; &lt;br /&gt;
-H &amp;ldquo;Content-Type: application/json&amp;rdquo; &lt;br /&gt;
-H &amp;ldquo;Accept: application/json&amp;rdquo; &lt;br /&gt;
-d &amp;lsquo;{
&amp;ldquo;vat&amp;rdquo;: &amp;ldquo;IT12345&amp;rdquo;,
&amp;ldquo;fiscal_code&amp;rdquo;: &amp;ldquo;12345&amp;rdquo;,
&amp;ldquo;name&amp;rdquo;: &amp;ldquo;ciao&amp;rdquo;
}&amp;rsquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2025"&gt;2025&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;WPC 2025, Milan: &lt;a href="https://nicolaiarocci.com/code-from-my-session-at-wpc-2025/"&gt;Feature Flags e configurazioni dinamiche in C# e .NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;.NET Conference 2025, Milan: &lt;a href="https://nicolaiarocci.com/my-session-on-mcp-servers-at-dotnet-conference-italia-2025/"&gt;Integrare LLM alle nostre applicazioni in .NET con MCP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DevMarche Summer AI Afternoon: &lt;a href="https://www.eventbrite.it/e/summer-ai-afternoon-tickets-1428458029419"&gt;MCP or how to connect our apps to LLMs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DevRomagna Meetup: &lt;a href="https://www.meetup.com/devromagna/events/308179204/"&gt;MCP or how to connect our apps to LLMs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;.NET Conf 2025, Rome: &lt;a href="https://dotnetconf.it"&gt;C# 13 What&amp;rsquo;s new and interesting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2024"&gt;2024&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;.NET Conference Italia 2024, Milan: &lt;a href="https://www.dotnetconference.it/e/3538/-NET-Conference-Italia-2024"&gt;C# 13 What&amp;rsquo;s new and interesting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ABP Dotnet Conference 2024, Turkey: &lt;a href="https://abp.io/conference/2024"&gt;C# 12 What&amp;rsquo;s new and interesting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WebDay 2024, Milan: &lt;a href="https://www.webdayconf.it/e/3328/Web-Day-2024"&gt;Oauth2 e Open ID Connect con ASP.NET Core 8&lt;/a&gt; (&lt;a href="https://www.improove.tech/videos/3376/Oauth2-e-Open-ID-Connect-con-ASP-NET-Core-8"&gt;video&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;.NET Rome Conference 2024: &lt;a href="https://www.dotnetconf.it/agenda"&gt;Oauth2 e Open ID Connect con ASP.NET Core 8&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2023"&gt;2023&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;.NET Conference Italia 2023, Milan: &lt;a href="https://www.dotnetconference.it/e/sessione/3295/C-12-Cosa-c-e-di-nuovo-e-interessante"&gt;C# 12 What&amp;rsquo;s new and interesting&lt;/a&gt; (&lt;a href="https://www.ugidotnet.org/e/sessione/3295/C-12-Cosa-c-e-di-nuovo-e-interessante"&gt;video&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;WebDay 2023, Milan: &lt;a href="https://www.webdayconf.it/e/3087/Web-Day-2023"&gt;End-to-end testing with Microsoft Playwright&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DevRomagna Meetup, &lt;a href="https://www.meetup.com/it-IT/devromagna/events/289709131/"&gt;.NET 7 Spotlight&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2022"&gt;2022&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;WPC 2022, Milan: &lt;a href="https://nicolaiarocci.com/my-session-at-wpc-2022/"&gt;Reliable end-to-end testing for  modern web apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DevRomagna: &lt;a href="https://www.meetup.com/it-IT/DevRomagna/events/284626987/"&gt;Modern Web Testing with Microsoft Playwright&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WebDay 2022: &lt;a href="https://www.ugidotnet.org/e/sessione/2883/Reliable-end-to-end-testing-for-modern-web-apps-with-Playwright-for-NET"&gt;Reliable end-to-end testing for modern web apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2021"&gt;2021&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;DotNetPodcast: &lt;a href="https://www.spreaker.com/user/dotnetpodcast/python-eve-open-source-e-fattura-elettro"&gt;My Open Source experience (Italian)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Scottish Summit 2021: &lt;a href="https://scottishsummit.com/ss2021"&gt;Introduction to F# and functional programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CodeGen 2021: &lt;a href="https://codegen2021.azurewebsites.net/agenda"&gt;Python REST APIs for Humans&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2020"&gt;2020&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Sharif University of Technology, Tehran: &lt;a href="https://ssc.ce.sharif.edu"&gt;Open Source Workshop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Python Show #7: &lt;a href="https://www.youtube.com/watch?v=-B0QXTQN3yM"&gt;My Story with Open Source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python Conf++ 2020, Moscow: &lt;a href="https://conf.python.ru/en/2020/"&gt;Cerberus or Data Validation for Humans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Modena Tech Summit 2020: &lt;a href="https://modenatechsummit.it/"&gt;Introduction to F# and functional programming&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2019"&gt;2019&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PiterPy 2019, St. Petersburg: &lt;a href="https://piterpy.com/materials/2631"&gt;Python on Windows, the State of the Art&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;XPUG Bologna 2019: &lt;a href="https://www.eventbrite.it/e/biglietti-introduzione-a-f-e-functional-programming-nicola-iarocci-74142958585#"&gt;Introduction to F# and functional programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Agile Venture Firenze 2019: &lt;a href="https://www.agileday.it/venture/2019/firenze/"&gt;My Story with Open Source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DevMarche 2019: &lt;a href="https://www.eventbrite.it/e/biglietti-introduzione-a-f-e-ai-linguaggi-funzionali-per-il-programmatore-c-oop-64430134266?fbclid=IwAR0eBGHMGN1QX4ZoJ0NBzz52713LuX32tcu25jcGH_f4a318HUtFSH6GdaI"&gt;Introduction to F# and functional programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Working Software Conf 2019: &lt;a href="https://www.agilemovement.it/workingsoftware/schedule.html#schedule"&gt;My Story with Open Source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Community Days 2019: &lt;a href="http://www.communitydays.it/events/2019/dev11/"&gt;Introduction to F# and functional programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;KLab 2019 #3: &lt;a href="https://www.eventbrite.com/e/klab-2019-3-typescript-come-forse-non-lo-avete-mai-visto-git-on-the-front-line-tickets-61043068461#"&gt;Git on the frontline&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="past"&gt;Past&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;WPC 2018, Milan: &lt;a href="http://wpc2017.it/cms/it-IT/SpeakerPage?parameters%5B0%5D=73"&gt;The Mythical Open Source Contributor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;EuroPython 2018, Edinburgh: &lt;a href="https://ep2018.europython.eu/conference/p/nicola-iarocci"&gt;My Story with Python and Open Source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PyConWeb 2018, Munich: &lt;a href="https://2018.pyconweb.com/talks/30-06-2018/my-story-with-python-and-open-source"&gt;My Story with Python and Open Source&lt;/a&gt; (keynote)&lt;/li&gt;
&lt;li&gt;PyConWeb 2018, Munich: &lt;a href="https://2018.pyconweb.com/talks/30-06-2018/eve-rest-api-for-humans"&gt;Eve, REST APIs for Humans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PyCon Italy 2018: &lt;a href="https://www.pycon.it/conference/talks/my-story-with-python-and-open-source"&gt;My Story with Python and Open Source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PyCon Belarus 2018: &lt;a href="https://speakerdeck.com/nicola/eve-rest-api-for-humans"&gt;Eve, REST APIs for Humans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WPC 2017: &lt;a href="http://wpc2017.it/cms/it-IT/SpeakerPage?parameters%5B0%5D=73"&gt;Git on the frontline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub Constellation: &lt;a href="http://githubconstellation.com/milan/#nicola-iarocci"&gt;My story with Open Source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Codemotion Milan 2017: &lt;a href="https://milan2017.codemotionworld.com/speaker/460/"&gt;Git on the frontline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PiterPy 2017: &lt;a href="https://it-events.com/events/8527/materials/2327"&gt;Cerberus, Data Validation for Humans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DevRomagna: &lt;a href="https://www.meetup.com/it-IT/preview/DevRomagna/events/240838433"&gt;Git on the trenches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;EuroPython 2017: &lt;a href="https://speakerdeck.com/nicola/python-on-windows-like-a-boss"&gt;Python on Windows Like a Boss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;This is Python 2017: &lt;a href="https://speakerdeck.com/nicola/python-on-windows-like-a-boss"&gt;Python on Windows Like a Boss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Socrates Italy 2017: Git in the trenches&lt;/li&gt;
&lt;li&gt;Socrates Italy 2017: Bringing an Open Source project to the next level&lt;/li&gt;
&lt;li&gt;DevRomagna: &lt;a href="https://www.meetup.com/it-IT/DevRomagna/events/239382597/"&gt;Contributing to Open Source projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DevRomagna: &lt;a href="https://www.meetup.com/it-IT/DevRomagna/events/239110404/"&gt;Git Branching Models and Semantic Versioning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PyCon Italy 2017: &lt;a href="https://speakerdeck.com/nicola/python-on-windows-like-a-boss"&gt;Python on Windows Like a Boss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PyCon Italy 2017: Microsoft Azure integration with Open Technologies (Panel)&lt;/li&gt;
&lt;li&gt;Codemotion Rome 2017: &lt;a href="https://speakerdeck.com/nicola/eve-rest-api-for-humans"&gt;Restful Web Services for human beings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Future Decoded 2016: &lt;a href="https://speakerdeck.com/nicola/python-tools-for-visual-studio"&gt;Python Tools for Visual Studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PyConUK 2016: &lt;a href="https://speakerdeck.com/nicola/cerberus"&gt;Cerberus, Data Validation for Humans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PyterPy 2016: &lt;a href="https://speakerdeck.com/nicola/eve-rest-api-for-humans"&gt;Eve, REST APIs for Humans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PyCon Italy 2016: &lt;a href="https://speakerdeck.com/nicola/cerberus"&gt;Cerberus, Data Validation for Humans&lt;/a&gt; (&lt;a href="https://youtu.be/WQJP_2FkBqI"&gt;video, Italian&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;PyCon Italy 2016: &lt;a href="https://speakerdeck.com/nicola/flask-web-development-one-drop-at-a-time"&gt;Web Framework Royal Rumble&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Western Europe MVP Open Day 2016: &lt;a href="https://speakerdeck.com/nicola/real-life-net-cross-platform"&gt;Real Life .NET Cross Platform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenDomus.net Communities Meetup: &lt;a href="https://speakerdeck.com/nicola/real-life-net-cross-platform"&gt;Real Life .NET Cross Platform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft TecHeroes: &lt;a href="https://channel9.msdn.com/Shows/TecHeroes/TecHeroes-Real-Life-Net-Cross-Platform"&gt;Real Life .NET Cross Platform (Italian)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft Best of Build: &lt;a href="https://channel9.msdn.com/Shows/Best-of-Build--Italy/Bash-su-Ubuntu-su-Windows"&gt;Bash on Ubuntu on Windows (Italian)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft TecHeroes: &lt;a href="https://channel9.msdn.com/Shows/TecHeroes/TecHeroes-VSVim-Editor"&gt;Vim for Visual Studio (Italian)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft TecHeroes: &lt;a href="https://channel9.msdn.com/Shows/TecHeroes/TecHeroes-Python-tools-per-Visual-Studio"&gt;Python Tools for Visual Studio (Italian)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft TecHeroes: &lt;a href="https://channel9.msdn.com/Shows/TecHeroes/TecHeroes-CoderDojo-Coding-Club-for-Kids"&gt;CoderDoojo Coding Club for Kids (Italian)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Persona Live 2015: &lt;a href="https://speakerdeck.com/nicola/eve-rest-api-for-humans"&gt;Eve, REST APIs for Humans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;EuroPython 2014: &lt;a href="https://speakerdeck.com/nicola/eve-rest-api-for-humans"&gt;Eve, REST APIs for Humans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PyCon Italy 2014: &lt;a href="https://speakerdeck.com/nicola/eve-rest-api-for-humans"&gt;Eve, REST APIs for Humans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PyCon Sweden 2014: &lt;a href="https://speakerdeck.com/nicola/eve-rest-api-for-humans"&gt;Eve, REST APIs for Humans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python Meetup: &lt;a href="https://speakerdeck.com/nicola/eve-rest-api-for-humans"&gt;Eve, REST APIs for Humans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;FOSDEM 2014: &lt;a href="https://speakerdeck.com/nicola/eve-rest-api-for-humans"&gt;Eve, REST APIs for Humans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RomagnaCamp 2013: &lt;a href="https://speakerdeck.com/nicola/we-are-all-remote-workers"&gt;We Are All Remote Workers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;NoSQL Day 2013: &lt;a href="https://speakerdeck.com/nicola/restful-web-api-and-mongodb-go-for-a-pic-nic"&gt;RESTful Web API and MongoDB go for a picnic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;MongoTorino 2013: &lt;a href="https://speakerdeck.com/nicola/restful-web-api-and-mongodb-go-for-a-pic-nic"&gt;RESTful Web API and MongoDB go for a picnic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A Morning With MongoDB: &lt;a href="https://speakerdeck.com/nicola/restful-web-api-and-mongodb-go-for-a-pic-nic"&gt;RESTful Web API and MongoDB go for a picnic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;EuroPython 2012: &lt;a href="https://speakerdeck.com/nicola/developing-restful-web-apis-with-python-flask-and-mongodb"&gt;Developing RESTful Web APIs with Python, Flask and MongoDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Agenda Digitale Ravenna 2014: &lt;a href="https://speakerdeck.com/nicola/coderdojo-romagna"&gt;CoderDojo Romagna&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cultura d&amp;rsquo;Impresa 2.0: &lt;a href="https://speakerdeck.com/nicola/online"&gt;Online / Offline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Liceo Artistico Severini (Ravenna): &lt;a href="https://speakerdeck.com/nicola/identita-reale-virtuale-e-digitale"&gt;Identità Reale, Virtuale e Digitale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Liceo Artistico Severini (Ravenna): &lt;a href="https://speakerdeck.com/nicola/personal-branding-per-studenti-e-non-solo"&gt;Personal Branding per Studenti e non solo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;KnowCamp 2011: &lt;a href="https://speakerdeck.com/nicola/fuga-dalla-comfort-zone"&gt;Fuga dalla Comfort Zone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RomagnaCamp 2011: &lt;a href="https://speakerdeck.com/nicola/quattro-passi-tra-le-nuvole"&gt;Quattro passi tra le nuvole&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Nicola Iarocci</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://nicolaiarocci.com/speaking/</guid></item><item><title>Open Source</title><link>https://nicolaiarocci.com/opensource/</link><description>&lt;p&gt;You can follow my open source activity on &lt;a href="https://nicolaiarocci.com/tags/open-source/"&gt;this website&lt;/a&gt; or &lt;a href="https://github.com/nicolaiarocci/"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here is a partial list of open source projects I authored:&lt;/p&gt;
&lt;h3 id="c"&gt;C#&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/FatturaElettronicaPA/FatturaElettronicaPA" title="FatturaElettronicaPA"&gt;&lt;strong&gt;FatturaElettronica.NET&lt;/strong&gt;&lt;/a&gt;. Validation and de/serialization of electronic invoices adhering to the standard defined by the Italian “Agenzia delle Entrate”.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="python"&gt;Python&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://python-eve.org" title="Eve"&gt;&lt;strong&gt;Eve&lt;/strong&gt;&lt;/a&gt;. Effortlessly build and deploy highly customizable, fully featured RESTful Web Services. Powered by Flask, MongoDB and good intentions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://python-cerberus.org" title="Cerberus"&gt;&lt;strong&gt;Cerberus&lt;/strong&gt;&lt;/a&gt;. Lightweight and extensible data validation library for Python. It provides type checking and other base functionality out of the box and is designed to be easily extensible, allowing for easy custom validation.&lt;/p&gt;</description><author>Nicola Iarocci</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://nicolaiarocci.com/opensource/</guid></item><item><title/><link>https://blog.herlein.com/common/vscode-vs-zed/</link><description>Agentic Development in Zed vs Visual Studio Code (Mid‑2025 Comparison) LLM Integration: Native Support vs Plugins Zed Editor: AI assistance is built-in as a first-class feature. Zed’s “assistant panel” and Agentic Editing are integrated into the core editor (no separate plugin required). Out of the box, Zed supports multiple large language models (LLMs) and providers – you can plug in OpenAI GPT-4, Anthropic Claude (e.g. Claude 2/3), Google’s PaLM/Gemini, and more, or even local models.</description><author>Greg Herlein</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.herlein.com/common/vscode-vs-zed/</guid></item><item><title/><link>https://blog.herlein.com/resume/</link><description>Greg Herlein San Francisco, CA
gherlein@herlein.com
github.com/gherlein
+1-415-368-7546
Summary of Qualifications
20+ years of experience in software development and cloud systems architecture 10+ years of direct people management experience 10+ years of experience building distributed SaaS systems in the cloud Extremely fast learner and technology early adopter Creative problem solver – inventor of 6 patents and many innovative products Led teams of Cloud Solution Architects at AWS directly supporting GTM sales plans Drove a multi-million dollar program integrating cloud technologies at Rakuten Principal Architect for data lake modernization project for over 1100 Engineers Solid understanding of compliance, including networking and security Exceptional presentation skills – strong with both Engineers and Executives Strong communication and interpersonal skills – adept at cross-team collaboration Reputation for building globally distributed teams &amp;ldquo;that don&amp;rsquo;t break&amp;rdquo; Work History</description><author>Greg Herlein</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.herlein.com/resume/</guid></item><item><title/><link>https://blog.herlein.com/staffing/</link><description>My Software Team Philosophy In my experience, smaller teams of higher-skilled Engineers outperform larger teams of less-skilled Engineers. I don&amp;rsquo;t believe in armies of offshore coders.
Building software is not physical labor, and it’s not something that can be easily broken into parallel parts for development. That approach is often taken, especially when offshoring, but it requires substantial up-front planning and then even more work to test that all the parts fit together at the end.</description><author>Greg Herlein</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.herlein.com/staffing/</guid></item><item><title>Craig Pardey</title><link>https://www.craigpardey.com/page/craig-pardey-resume/</link><description>&lt;h3 id="contact"&gt;CONTACT&lt;/h3&gt;
&lt;p&gt;416 356 2848&lt;br /&gt;
&lt;a href="mailto:craigpardey@gmail.com"&gt;craigpardey@gmail.com&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="summary"&gt;SUMMARY&lt;/h3&gt;
&lt;p&gt;Experienced finance and banking technologist that has built systems in payments, online banking, insurance, risk management, and FI &amp;amp; F/X trading.&lt;/p&gt;
&lt;p&gt;Able to manage development teams of any size.&lt;/p&gt;
&lt;p&gt;Builds high-performing teams that continuously improve delivery processes and practices.&lt;/p&gt;
&lt;h3 id="electric-mindelectricmind"&gt;&lt;a href="https://electricmind.com"&gt;Electric Mind&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;(formerly known as &lt;a href="https://www.intelliware.com"&gt;Intelliware Inc.&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;h4 id="february-2024---present"&gt;February 2024 - present&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;TD Canada Trust&lt;/strong&gt; (February 2024 - present): Technical Director working with TD to update their aging payments system. Initially starting with Interac eTransfers, then expanding to cover other payment rails.&lt;/p&gt;</description><author>Craig Pardey</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.craigpardey.com/page/craig-pardey-resume/</guid></item><item><title>Non-Medical Management of Raynaud's Disease</title><link>https://www.craigpardey.com/page/raynauds/</link><description>&lt;h1 id="non-medical-management-of-raynauds-disease"&gt;Non-Medical Management of Raynaud&amp;rsquo;s Disease&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Please Note&lt;/em&gt;: This page has been transcribed from &lt;a href="https://apps.dtic.mil/sti/tr/pdf/ADA111032.pdf"&gt;this PDF report&lt;/a&gt; of the original study&lt;/p&gt;
&lt;p&gt;Jared B. Jobe, Ph.D., James B. Sampson, Ph.D.,&lt;/p&gt;
&lt;p&gt;Donald E. Roberts, Ph.D. and William P. Beetham, Jr., M.D.&lt;/p&gt;
&lt;p&gt;Report Number M 14/81&lt;/p&gt;
&lt;p&gt;Government Accession Number AD A111 032&lt;/p&gt;
&lt;p&gt;29 June 1981&lt;/p&gt;
&lt;h1 id="abstract"&gt;ABSTRACT&lt;/h1&gt;
&lt;p&gt;This study examined the efficacy of a non-medical procedure for management of idiopathic Raynaud&amp;rsquo;s disease. Individuals with Raynaud&amp;rsquo;s disease and normal individuals were given 27 ten-minute simultaneous pairings of hand immersion in warm water (43°C) with a whole-body cold exposure (0°C). One group of normal and one group of subjects with Raynaud&amp;rsquo;s disease received no treatments. Before and after cold test exposures (0°C) were given to all subjects.&lt;/p&gt;</description><author>Craig Pardey</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.craigpardey.com/page/raynauds/</guid></item><item><title/><link>https://hth.is/wakatime-client/</link><description>wakatime-client Link to heading Source code A native Android library facilitating authentication and interaction with the restful API supplied by the code activity tracker Wakatime.
Dependency setup Link to heading The first step is to include WakatimeClient into your project, for example, as a Gradle compile dependency:
implementation("is.hth:wakatimeclient:X.Y.Z") Replace X.Y.Z with the latest published version.
Configuration Link to heading Authentication Link to heading The client supports both an OAuth 2.</description><author>Hrafn Thorvaldsson</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://hth.is/wakatime-client/</guid></item><item><title>Edge nag</title><link>https://studiofreya.org/nags/edge/</link><description>&lt;p&gt;&lt;img alt="edge-install-youtube-facebook.png" src="https://studiofreya.org/nags/edge/edge-install-youtube-facebook.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="teams-september-update-screen-in-october" src="https://studiofreya.org/nags/edge/teams-september-update-screen-in-october.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="asus-fast-charge-nag" src="https://studiofreya.org/nags/edge/asus-fast-charge-nag.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="asus-uninstall" src="https://studiofreya.org/nags/edge/asus-uninstall.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Edge updated make default" src="https://studiofreya.org/nags/edge/edge-updated-make-default.png" /&gt;, how about &lt;em&gt;never&lt;/em&gt;?&lt;/p&gt;</description><author>Studiofreya SSG Site</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://studiofreya.org/nags/edge/</guid></item><item><title>HackerNews Favorites</title><link>https://ashvardanian.com/hackernews/</link><description>&lt;p&gt;I often post on Reddit and HackerNews, with the latter being a surprisingly well-balanced platform for technical discussions with less personal bias.
Here are some of my favorite publications that made headlines on HackerNews:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=35042316"&gt;Up to 100x Faster FastAPI with simdjson and io_uring on Linux 5.19&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=34970045"&gt;Beating OpenAI CLIP with 100x less data and compute&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=43727743"&gt;Less Slow C++&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=46276826"&gt;Full Unicode Search at 50× ICU Speed with AVX‑512&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=45402820"&gt;Beyond OpenMP in C++ and Rust: Taskflow, Rayon, Fork Union&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=45304807"&gt;Processing Strings 109x Faster Than Nvidia on H100&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=42237938"&gt;Understanding SIMD: Infinite complexity of trivial problems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=35887983"&gt;Abusing vector search for texts, maps, and chess&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=29670624"&gt;Apple to Apple Comparison: M1 Max vs. Intel&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=29954447"&gt;Server Hardware Super-Cycle 2022&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=30178764"&gt;Failing to reach DDR4 bandwidth&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=38684461"&gt;Python, C, Assembly – Faster Cosine Similarity&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=36772545"&gt;Combinatorial Stable Marriages for DBMS Semantic Joins&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=37273963"&gt;Faking SIMD to Search and Sort Strings 5x Faster&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=39111114"&gt;SimSIMD v3.6.7: Hardware-accelerated similarity metrics and distance functions&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=37304306"&gt;StringZilla v2: Fastest string sort, search, split, and shuffle using SIMD&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;</description><author>Ash's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ashvardanian.com/hackernews/</guid></item><item><title>My Open Software</title><link>https://ashvardanian.com/software/</link><description>&lt;p&gt;All of my software is hosted on GitHub, mostly under the &lt;a href="https://opensource.org/licenses/Apache-2.0"&gt;Apache-2.0&lt;/a&gt; permissive license.
Free for commercial and non-commercial use, modification, and distribution.&lt;/p&gt;
&lt;h2 id="major-projects"&gt;Major Projects&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/unum-cloud/USearch"&gt;USearch&lt;/a&gt;&lt;/strong&gt; - a universal search engine powering many databases, AI labs, and experiments in Natural Sciences. Compact C++ core with 10+ language bindings — 10–100× faster than Meta FAISS for vector search and far beyond Apache Lucene.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ashvardanian/StringZilla"&gt;StringZilla&lt;/a&gt;&lt;/strong&gt; - SIMD, SWAR, and CUDA-accelerated string algorithms for search, matching, hashing, and sorting at Web Scale and Bioinformatics scale. Hundreds of hand-tuned kernels with manual multi-versioning, exposed to C, C++, Rust, Python, Swift, and JavaScript, up to 10× faster on CPUs and 100× faster on GPUs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ashvardanian/SimSIMD"&gt;SimSIMD&lt;/a&gt;&lt;/strong&gt; - an extensive collection of mixed-precision vector math kernels for C, Python, Rust, and JavaScript. Designed for linear algebra, scientific computing, statistics, information retrieval, and image processing, delivering consistent SIMD speedups over BLAS and NumPy on both x86 and ARM architectures.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/unum-cloud/UCall"&gt;UCall&lt;/a&gt;&lt;/strong&gt; - a kernel-bypass web server backend for C and Python built on io_uring. Achieves 70× higher throughput and 50× lower latency than FastAPI for real-time workloads, including serving compact AI models.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/unum-cloud/UForm"&gt;UForm&lt;/a&gt;&lt;/strong&gt; - tiny multimodal AI models with state-of-the-art parameter and data efficiency. Compatible with Python, JS, and Swift, serving as a lightweight alternative to OpenAI CLIP for on-device and server inference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ashvardanian/ForkUnion"&gt;ForkUnion&lt;/a&gt;&lt;/strong&gt; - ultra-low-latency parallelism library for Rust and C++. Avoids allocations, mutexes, and even Compare-And-Swap atomics — achieving up to 10× speedups over Rayon and TaskFlow.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some of those are used in open-source databases, like &lt;a href="https://github.com/ClickHouse/ClickHouse"&gt;ClickHouse&lt;/a&gt;, &lt;a href="https://github.com/duckdb/duckdb"&gt;DuckDB&lt;/a&gt;, &lt;a href="https://github.com/pingcap/tidb"&gt;TiDB&lt;/a&gt;, &lt;a href="https://github.com/scylladb/scylladb"&gt;ScyllaDB&lt;/a&gt;, &lt;a href="https://github.com/yugabyte/yugabyte-db"&gt;yugabyteDB&lt;/a&gt;, &lt;a href="https://github.com/dragonflydb/dragonfly"&gt;DragonflyDB&lt;/a&gt;, &lt;a href="https://github.com/memgraph"&gt;MemGraph&lt;/a&gt;, &lt;a href="https://github.com/vdaas/vald"&gt;Vald&lt;/a&gt;, &lt;a href="https://github.com/tursodatabase/turso"&gt;Turso&lt;/a&gt;, LLM toolchains, like &lt;a href="https://github.com/langchain-ai/langchain"&gt;LangChain&lt;/a&gt;, &lt;a href="https://github.com/run-llama/semtools"&gt;LlamaIndex&lt;/a&gt;, &lt;a href="https://github.com/microsoft/semantic-kernel"&gt;Microsoft SemanticKernel&lt;/a&gt;, &lt;a href="https://github.com/nomic-ai/gpt4all"&gt;Nomic AI GPT4All&lt;/a&gt;, &lt;a href="https://github.com/deta/surf"&gt;Surf&lt;/a&gt;, and many other less &amp;ldquo;open&amp;rdquo; systems, such as backend infrastructure of major AI labs, government intelligence agencies, Hyper-scale cloud companies, Fortune 500, iOS and Android apps with 100M-1B MAU.&lt;/p&gt;</description><author>Ash's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ashvardanian.com/software/</guid></item><item><title>Recordings &amp;amp; Talks</title><link>https://ashvardanian.com/talks/</link><description>&lt;p&gt;Most materials are in English unless &lt;del&gt;literally&lt;/del&gt; flagged otherwise.
The absolute majority is on the subjects of Systems Design, Computer Science, and Artificial Intelligence.
The 🗣️ talking head links aren&amp;rsquo;t technical, and in the ones with a 👯‍♂️ - I am just a wingman supporting another speaker.&lt;/p&gt;
&lt;h2 id="2025"&gt;2025&lt;/h2&gt;


    
    &lt;div style="padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
      
    &lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;PyTorch &amp;amp; Lightning AI Meetup: Matrix Multiplication Assembly Instructions. London, UK. &lt;a href="https://www.meetup.com/london-pytorch-meetup/events/305522836"&gt;Event&lt;/a&gt;. &lt;a href="https://youtu.be/bDRo7Cf7x1o"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;OpenUK 2025: Linux Kernel 6 - Path to 10x Faster Databases and Networking. London, UK. &lt;a href="https://youtu.be/xzFYuTqGd6o"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;PyTorch Meetup 21 at Databricks: Scaling Vector Search Up &amp;amp; Out with Spark. London, UK. &lt;a href="https://www.meetup.com/london-pytorch-meetup/events/310701289"&gt;Event&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;OpenUK 2025: Democratizing AI - Optimizing Matrix Multiplications on Intel, Apple, AMD, NVIDIA &amp;amp; AWS Chips. London, UK. &lt;a href="https://youtu.be/Qujweq6Gf5A"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;PyData London 101: USearch - the Search Engine Behind Most New RAG Pipelines. London, UK. &lt;a href="https://www.meetup.com/pydata-london-meetup/events/311635959"&gt;Event&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;C++ &amp;amp; Rust Cross-over Meetup: Writing &amp;ldquo;Less Slow&amp;rdquo; C++. London, UK. &lt;a href="https://www.meetup.com/cpplondon/events/310272299"&gt;Event&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2024"&gt;2024&lt;/h2&gt;


    
    &lt;div style="padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
      
    &lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;ScyllaDB P99 Conf: Internet-Scale Semantic, Structural, and Text Search in Real Time. &lt;a href="https://www.p99conf.io/"&gt;Event&lt;/a&gt;. &lt;a href="https://youtu.be/yn87sxRsOj0"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;UC Berkeley Open Source AI Day: Open Source Search: Two Decades of Bad Design Decisions &amp;amp; Legacy Software. &lt;a href="https://lu.ma/71y9vyb2?tk=7HrekN"&gt;Event&lt;/a&gt;. &lt;a href="https://youtu.be/LPv7QybMPxU"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Arize Observe 2024. &lt;a href="https://arize.com/observe-2024/"&gt;Event&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Neural Search Podcast: JIT Assembly to Build Exascale AI Infrastructure. &lt;a href="https://youtu.be/zFq4-198OpQ"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Attention Heads Podcast: Large scale data processing for AI apps. &lt;a href="https://youtu.be/p96nkMM7wnM"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Zaiste Programming Podcast: Unlocking the Future of AI with Open Source. &lt;a href="https://youtu.be/D7pCY2ySicM"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Multimodal Visual Question Answering. &lt;a href="https://voxel51.com/computer-vision-events/may-30-2024-ai-machine-learning-data-science-meetup/"&gt;Event&lt;/a&gt;. &lt;a href="https://youtu.be/q_WWtZp4vgg"&gt;YouTube&lt;/a&gt;. 👯‍♂️&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2023"&gt;2023&lt;/h2&gt;


    
    &lt;div style="padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
      
    &lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;AI.dev Linux Foundation Conference: Retrieval Augmentation and Semantic Search at Scale. San Jose, California, US. &lt;a href="https://aidevcass23.sched.com/event/1VRvK"&gt;Event&lt;/a&gt;, &lt;a href="https://youtu.be/ODTpIbJ-Vks"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;All Things Open Conference: Bird&amp;rsquo;s Eye View of Open-Source AI Infrastructure. Raleigh, North Carolina, US. &lt;a href="https://2023.allthingsopen.org"&gt;Event&lt;/a&gt;. &lt;a href="https://drive.google.com/file/d/12bSVtE0ruQ_6lQSRNZN6juS2ybYL9T3S/view?usp=sharing"&gt;Slides&lt;/a&gt;, &lt;a href="https://www.youtube.com/watch?v=PQKYc0zK0iU"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;UC Berkeley Sky Lab Seminar: Vector Search at Scale - Bottlenecks and Solutions. Berkeley, California, US. &lt;a href="https://sky.cs.berkeley.edu/events/sky-seminar-ashot-vardanian-unum-vector-search-at-scale-bottlenecks-and-solutions/"&gt;Event&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Cloud Native London: Future of Open-Source AI Infrastructure. London, UK. &lt;a href="https://www.meetup.com/cloud-native-london/events/292727770/"&gt;Event&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Highload++ Conference: Vector Search and Databases at Scale. Belgrade Serbia. &lt;a href="https://highload.rs/2023/abstracts/9770"&gt;Event&lt;/a&gt;, &lt;a href="https://drive.google.com/file/d/11M51Jw9UdEmzHDTGZmn4n3bxgTcQt3sw/view?usp=sharing"&gt;Slides&lt;/a&gt;, &lt;a href="https://www.youtube.com/watch?v=UMrhB3icP9w&amp;amp;t=65s"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Python SF Group: Accelerated Datascience Libraries and Where to Find Them. Sentry HQ, San Francisco, California, US. &lt;a href="https://www.meetup.com/sfpython/events/skwnctyfchbnb/"&gt;Event&lt;/a&gt;, &lt;a href="https://youtu.be/L9ELuU3GeNc"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;CppCast Podcast #359: On AI Infrastructure. &lt;a href="https://cppcast.com/ai_infrastructure/"&gt;Event&lt;/a&gt;. &lt;a href="https://open.spotify.com/episode/0GBepAsjOFerG9bT20WmFw"&gt;Spotify&lt;/a&gt;, &lt;a href="https://podcasts.apple.com/us/podcast/ai-infrastructure/id968703120?i=1000611006222"&gt;Apple Podcasts&lt;/a&gt;, &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9jcHBjYXN0LmNvbS9mZWVkLnJzcw/episode/ZjgwNzRkZmItNTUzNC00N2QwLWFjNDctZmNmNGRmMTc1NzQ1"&gt;Google Podcasts&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


    
    &lt;div style="padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
      
    &lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Amazon AWS Podcast #32: Can you make a database 6-7 times faster? &lt;a href="https://open.spotify.com/episode/7CsVxDOq8nYEBrQxRExM56&amp;amp;nd=1"&gt;Spotify&lt;/a&gt;, &lt;a href="https://www.podbean.com/media/share/pb-vqhii-13e0414"&gt;Podbean&lt;/a&gt;, &lt;a href="https://podcasts.apple.com/by/podcast/032-%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE-%D0%BB%D0%B8-%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D1%8C-%D0%B1%D0%B0%D0%B7%D1%83-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B2-6-7-%D1%80%D0%B0%D0%B7/id1600771698?i=1000608732451"&gt;Apple Podcasts&lt;/a&gt;, &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkLnBvZGJlYW4uY29tL2F3c25hcnVzc2tvbS9mZWVkLnhtbA/episode/YXdzbmFydXNza29tLnBvZGJlYW4uY29tL2M0YjY3NzZiLTdkN2MtMzEzYS1hYzQwLWI5ZWIyNjUwM2ExMw?sa=X&amp;amp;ved=0CAUQkfYCahcKEwjAjJ_X6bD-AhUAAAAAHQAAAAAQAQ"&gt;Google Podcasts&lt;/a&gt;. 🇷🇺&lt;/li&gt;
&lt;li&gt;Attention Heads Podcast #4: Large scale data processing for AI apps. &lt;a href="https://youtu.be/p96nkMM7wnM"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;DigiTech Conference: On deep tech startups and the development of the industry in Armenia. Yerevan, Armenia. &lt;a href="https://www.digitec.am/ashot-vardanian"&gt;Event&lt;/a&gt;. &lt;a href="https://youtube.com/watch?v=V3L-O_qv7uU"&gt;YouTube&lt;/a&gt;. 🗣️&lt;/li&gt;
&lt;li&gt;EVN Disrupt Podcast: Building AI While Embracing the Unorthodox. &lt;a href="https://evnreport.com/podcasts/evn-disrupt/ashot-vardanyan-building-ai-while-embracing-the-unorthodox/"&gt;Event&lt;/a&gt; podcast. &lt;a href="https://www.youtube.com/watch?v=mvpyJLW2lZI"&gt;YouTube&lt;/a&gt;. &lt;a href="https://open.spotify.com/episode/71wdHxO4oqfRCUsoaF1J0D"&gt;Spotify&lt;/a&gt;. &lt;a href="https://podcasts.apple.com/am/podcast/ashot-vardanyan-building-ai-while-embracing-the/id1252212513?i=1000596262592"&gt;Apple Podcasts&lt;/a&gt;. 🗣️&lt;/li&gt;
&lt;li&gt;Voxel 51 Meetup:  Scaling Similarity Search with USearch. &lt;a href="https://voxel51.com/blog/recapping-the-ai-machine-learning-and-data-science-meetup-dec-7-2023/"&gt;Event&lt;/a&gt;. &lt;a href="https://youtu.be/x10DpjeegQk"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2022"&gt;2022&lt;/h2&gt;


    
    &lt;div style="padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
      
    &lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Designing the fastest ACID Key-Value Store&lt;/strong&gt; @ &lt;a href="https://highload.am/2022/abstracts/9673"&gt;Highload++&lt;/a&gt;. &lt;a href="https://www.youtube.com/watch?v=ybWeUf_hC7o"&gt;YouTube&lt;/a&gt;. &lt;a href="https://drive.google.com/file/d/16gdazzt9DTpCWPuXBAV2JSe1NW-Y7HvQ/view"&gt;Slides&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3M: Prospects and Challenges with Multi-Modal Models in AI Research&lt;/strong&gt; @ &lt;a href="https://datafest.am"&gt;DataFest&lt;/a&gt;. &lt;a href="https://youtu.be/p3RMkiqd7vY"&gt;YouTube&lt;/a&gt;. &lt;a href="https://drive.google.com/file/d/166UgMRVM1ORJPWQ74oRc2UH-bKmPHbqI/view"&gt;Slides&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accelerated Data Science Libraries&lt;/strong&gt; @ &lt;a href="https://pydata.org/yerevan2022/"&gt;PyData Conference&lt;/a&gt;. &lt;a href="https://youtu.be/OxAKSVuW2Yk"&gt;YouTube&lt;/a&gt;. &lt;a href="https://drive.google.com/file/d/168_Ctx0n6Jtw7ufSlTL3skCZR--lw-C0/view"&gt;Slides&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Life Altering Technologies&lt;/strong&gt; @ &lt;a href="https://fast.foundation/gif/2022/"&gt;Global Innovation Forum&lt;/a&gt;. &lt;a href="https://www.youtube.com/watch?v=EBh9_7o31bI&amp;amp;t=24447s"&gt;YouTube&lt;/a&gt;. 🗣️&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persistent Memory Technologies Overview&lt;/strong&gt; @ &lt;a href="https://amd.com"&gt;AMD&lt;/a&gt; &amp;amp; &lt;a href="https://www.xilinx.com"&gt;Xilinx&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Role of C++ in Machine Learning discussion&lt;/strong&gt; @ CppRussia. &lt;a href="https://youtu.be/gO_bVvIN7HM"&gt;YouTube&lt;/a&gt;. 🇷🇺&lt;/li&gt;
&lt;li&gt;From OpenCL, Thrust &amp;amp; CUB to raw CUDA Kernels &amp;amp; SyCL @ CppArm Meetup #3. &lt;a href="https://github.com/unum-cloud/ParallelReductions"&gt;GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fast Inference for Large Language Models with Vladimir Orshulevich @ PyData Meetup #2. &lt;a href="https://youtu.be/tKwL-Q7INnQ"&gt;YouTube&lt;/a&gt;. 👯‍♂️&lt;/li&gt;
&lt;li&gt;Unsafe Math, GCC Attributes, and Nifty Tricks for Google Benchmark @ CppArm Meetup #4. &lt;a href="https://github.com/ashvardanian/BenchmarkingTutorial"&gt;GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A Practical Approach to Error Handling by Arno Schödl @ CppRussia. &lt;a href="https://youtu.be/zNbmFRaetTA"&gt;YouTube&lt;/a&gt;. 👯‍♂️&lt;/li&gt;
&lt;li&gt;Accelerated Data-Science Tools Overview @ PYerevan Meetup #16. &lt;a href="https://youtu.be/coTgcwnzvAg"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Bindings 101: CPython, cGo, and Java Native Interface @ CppArm Meetup #5. &lt;a href="github.com/unum-cloud/ustore"&gt;GitHub&lt;/a&gt;, &lt;a href="https://youtu.be/psmfAg1Nc3s"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2021"&gt;2021&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;On High-Performance Computing&lt;/strong&gt; @ Mars Podcast. &lt;a href="https://youtu.be/yK4Bd-6Mxk0"&gt;YouTube&lt;/a&gt;. 🇦🇲&lt;/li&gt;
&lt;li&gt;Evolution: C++11, 14, 17, 20, 23, 26? @ CppArm Meetup #2. &lt;a href="https://youtu.be/jtttoxkjTIA"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Peta-Scale software in 2021 @ Code Republic. &lt;a href="https://youtu.be/8R-43hfnPHI"&gt;YouTube&lt;/a&gt;. &lt;a href="https://drive.google.com/file/d/166nCWQH1-5KIPNmN4rUzebAW7mi6_eY5/view"&gt;Slides&lt;/a&gt; 🇦🇲&lt;/li&gt;
&lt;li&gt;On the Gituzh Scientific Initiative @ FM106.5. &lt;a href="https://youtu.be/89eDghXaZjI"&gt;YouTube&lt;/a&gt;. 🇦🇲 🗣️&lt;/li&gt;
&lt;li&gt;SIMD with EVE by Denis Yaroshevskiy @ CppRussia. &lt;a href="https://youtu.be/CV0e-2a_dTI"&gt;YouTube&lt;/a&gt;. 👯‍♂️&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2020"&gt;2020&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SIMD = Performance you have already paid for&lt;/strong&gt; @ &lt;a href="https://2020.cppconf-piter.ru/2020/spb/talks/23g3egeumhe3p4fd66pbar/"&gt;CppRussia Conference&lt;/a&gt;. &lt;a href="https://github.com/ashvardanian/SubstringSearchBenchmark"&gt;GitHub&lt;/a&gt;. &lt;a href="https://youtu.be/6Sh9QWdzo58"&gt;YouTube&lt;/a&gt;. &lt;a href="https://drive.google.com/file/d/16BsyqGWjpNfqG0vAb21l0eySbChC_njJ/view"&gt;Slides&lt;/a&gt;. 🇷🇺&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SIMD. Frequency Scaling Licenses and Speculative Execution&lt;/strong&gt; @ CppArm Meetup #1. &lt;a href="https://github.com/ashvardanian/CppBenchSubstrSearch"&gt;GitHub&lt;/a&gt;, &lt;a href="https://youtu.be/ft51yJ9mDcc?t=140"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Conversing about High-Performance Computing @ Pure Virtual Cast #4. &lt;a href="https://youtu.be/dCdBFB4LDjw"&gt;YouTube&lt;/a&gt;. 🇷🇺&lt;/li&gt;
&lt;li&gt;Artsakh Must Be Independent. &lt;a href="https://youtu.be/sN8CsCgDlHY"&gt;YouTube&lt;/a&gt;. 🗣️&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2019"&gt;2019&lt;/h2&gt;


    
    &lt;div style="padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
      
    &lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deep dive into GPGPU programming&lt;/strong&gt; @ &lt;a href="https://cppconf-piter.ru/en/2020/spb/talks/23g3egeumhe3p4fd66pbar/?fbclid=IwAR26hl3tEhw1os0J6oLzsVPTOAuSGkZIMzwq689tEq8NH5_V7b3MHV8f_zU"&gt;CppRussia Conference&lt;/a&gt;. &lt;a href="https://github.com/ashvardanian/SandboxGPUs"&gt;GitHub&lt;/a&gt;. &lt;a href="https://youtu.be/AA4RI6o0h1U"&gt;YouTube&lt;/a&gt;. &lt;a href="https://drive.google.com/file/d/16AicAl99t3ZZFnza04Wnw_Vuem0w8lc7/view"&gt;Slides&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI and Computational Graphs in C++&lt;/strong&gt; @ &lt;a href="https://www.meetup.com/cpp-bay-area/events/261294493/"&gt;CppBayArea&lt;/a&gt;. &lt;a href="https://github.com/ashvardanian/NeuralSTL"&gt;GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Efficient GPGPU Programming @ &lt;a href="https://www.jetbrains.com"&gt;JetBrains&lt;/a&gt; HQ. &lt;a href="https://github.com/ashvardanian/SandboxGPUs"&gt;GitHub&lt;/a&gt;, &lt;a href="https://youtu.be/BUtHOftDm_Y"&gt;YouTube&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><author>Ash's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ashvardanian.com/talks/</guid></item><item><title>Explore</title><link>https://badshah.io/portfolio/explore/</link><description/><author>Chandrapal Badshah | Cloud Security Consultant for Startups on Chandrapal Badshah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://badshah.io/portfolio/explore/</guid></item><item><title>Freebies</title><link>https://badshah.io/freebies/</link><description>Coming Soon! Keep an eye on my LinkedIn profile!</description><author>Chandrapal Badshah | Cloud Security Consultant for Startups on Chandrapal Badshah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://badshah.io/freebies/</guid></item><item><title>Gooir</title><link>https://badshah.io/portfolio/gooir/</link><description/><author>Chandrapal Badshah | Cloud Security Consultant for Startups on Chandrapal Badshah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://badshah.io/portfolio/gooir/</guid></item><item><title>Kana</title><link>https://badshah.io/portfolio/kana/</link><description/><author>Chandrapal Badshah | Cloud Security Consultant for Startups on Chandrapal Badshah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://badshah.io/portfolio/kana/</guid></item><item><title>Mozar</title><link>https://badshah.io/portfolio/mozar/</link><description/><author>Chandrapal Badshah | Cloud Security Consultant for Startups on Chandrapal Badshah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://badshah.io/portfolio/mozar/</guid></item><item><title>Stay Fit</title><link>https://badshah.io/portfolio/stay-fit/</link><description/><author>Chandrapal Badshah | Cloud Security Consultant for Startups on Chandrapal Badshah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://badshah.io/portfolio/stay-fit/</guid></item><item><title>Trainings</title><link>https://badshah.io/trainings/</link><description>Hands-on training is the fastest way to learn Cloud Security - let&amp;rsquo;s BREAK and FIX things together. My trainings are just about that. No death by PowerPoint - pure hands-on learning.
How My Trainings Differ! Maximum Hands-On: Be it offense or defense - you learn by doing, not by just listening! Customized with End Goal: Training adapted to your team&amp;rsquo;s cloud environment and security objectives Real Attack Scenarios: Work with actual cloud misconfigurations, not simulated environments Post Training Lab Access: Continue practicing and experimenting after the training Small Groups Only: Maximum 15 participants to ensure personal attention and interaction (in most private trainings) Folks I&amp;rsquo;ve Taught In The Past What Participants Say "</description><author>Chandrapal Badshah | Cloud Security Consultant for Startups on Chandrapal Badshah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://badshah.io/trainings/</guid></item><item><title>Zorro</title><link>https://badshah.io/portfolio/zorro/</link><description/><author>Chandrapal Badshah | Cloud Security Consultant for Startups on Chandrapal Badshah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://badshah.io/portfolio/zorro/</guid></item><item><title>Contact</title><link>https://boxunix.com/contact/</link><description>&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;email: &lt;a href="mailto:hugues@boxunix.com"&gt;hugues@boxunix.com&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;linkedin: &lt;a class="bare" href="https://www.linkedin.com/in/huguesalary/?locale=en_US"&gt;https://www.linkedin.com/in/huguesalary/?locale=en_US&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>Boxunix</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://boxunix.com/contact/</guid></item><item><title/><link>https://stop.zona-m.net/1/01/</link><description>happy thanksgiving with a public service announcement about supermarkets
Look and create community where it MATTERS, please
The Guardian is hailing, as a sign that people can &amp;ldquo;push back against the technofuturist tide&amp;rdquo;, the announcement that a chain of British supermarkets is ditching self-checkouts that &amp;ldquo;saved corporate chains money on retail wages – but come at a price for our shared sense of community&amp;rdquo;.
These are the most interesting passages of that piece (emphasis mine):</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/1/01/</guid></item><item><title/><link>https://stop.zona-m.net/1/01/</link><description>New Places, Old Mistakes: How Bad Architecture Moved from Physical to Digital
&amp;ldquo;The same automatic, old script that has produced socially zoned, polluted, and dehumanizing urban environments throughout the planet keeps unfolding on a higher level, including the metaverse, as Marco Fioretti explains in this issue.&amp;quot;
What you just read is the presentation in the Journal of Biourbanism of an essay of mine, of which this post is just a summary.</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/1/01/</guid></item><item><title/><link>https://stop.zona-m.net/1/01/</link><description>The first and most important &amp;ldquo;hardware&amp;rdquo; we need right now does not come from nVidia.
AI, e/acc, transhumanism, longtermism&amp;hellip; Never mind them. There is only one reality, the one in which we are physical flesh that needs physical food, coming from physical matter from physical land. But as things stand now, unless we deploy the &amp;ldquo;AgI&amp;rdquo; that is Agriculture Improvement soon and fairly, sooner or later all we humans alive today will endure fairly substantial food supply shocks, none of which could matter less for hypothetical quadrillions of future superhumans.</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/1/01/</guid></item><item><title/><link>https://stop.zona-m.net/1/01/</link><description>of the right things, of course. What about&amp;hellip; &amp;ldquo;BOXES&amp;rdquo;?
We could save lots of money and live better if we tolerated much less standardization in certain things, and demanded much more standardization in others.
For example, we tolerate socio-digital standardization that&amp;rsquo;s made to order to empty and flatten everything meaningful, from political debate to dating, in relations among human beings, each of which is UNIQUE. That&amp;rsquo;s not a sign of a smart species that values itself.</description><author>Welcome to Marco Fioretti's website! on Stop at Zona-M</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://stop.zona-m.net/1/01/</guid></item><item><title/><link>https://james-carr.org/posts/diagrams/adaptive-throughput-learning/</link><description>Adaptive Throughput Learning - Mermaid Diagram Preview this diagram to see how the throughput tracking and baseline adaptation system works.
flowchart TB subgraph Delivery["📤 Delivery Pipeline"] D1[Webhook Delivery] --&amp;gt; D2[Record Result] D2 --&amp;gt; D3{Success?} D3 --&amp;gt;|Yes| D4[Log: timestamp, latency] D3 --&amp;gt;|No| D5[Log: error, status code] end subgraph Metrics["📊 Rolling Metrics Engine"] M1[(Time-Series Store)] M2[1-min Counter] M3[1-hour Rolling Avg] M4[24-hour Rolling Avg] M5[P95 Response Time] M6[Error Rate %] D4 --&amp;gt; M1 D5 --&amp;gt; M1 M1 --&amp;gt; M2 --&amp;gt; M3 --&amp;gt; M4 M1 --&amp;gt; M5 M1 --&amp;gt; M6 end subgraph Detection["🔍 Capacity Change Detection"] C1{Current vs Historical&amp;lt;br/&amp;gt;Deviation &amp;gt; 10%?</description><author>James Carr</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://james-carr.org/posts/diagrams/adaptive-throughput-learning/</guid></item><item><title/><link>https://james-carr.org/posts/diagrams/circuit-breaker/</link><description>Circuit Breaker Pattern - Mermaid Diagrams State Machine stateDiagram-v2 [*] --&amp;gt; CLOSED: Initialize CLOSED --&amp;gt; CLOSED: Success\n(reset failure count) CLOSED --&amp;gt; OPEN: Failure threshold\nexceeded (5 failures) OPEN --&amp;gt; OPEN: Reject requests\n(fail fast) OPEN --&amp;gt; HALF_OPEN: Timeout expires\n(30s) HALF_OPEN --&amp;gt; CLOSED: Health check\npasses (3 successes) HALF_OPEN --&amp;gt; OPEN: Health check\nfails note right of CLOSED Normal operation Track failure count Reset on success end note note right of OPEN Circuit tripped Reject all requests Start recovery timer end note note right of HALF_OPEN Testing recovery Allow limited traffic Probe endpoint health end note Sequence Diagram - Normal Flow to Trip to Recovery sequenceDiagram participant Client participant CB as Circuit Breaker participant Endpoint Note over CB: State: CLOSED rect rgb(30, 60, 30) Note right of Client: Normal Operation Client-&amp;gt;&amp;gt;CB: Request 1 CB-&amp;gt;&amp;gt;Endpoint: Forward Endpoint--&amp;gt;&amp;gt;CB: 200 OK CB--&amp;gt;&amp;gt;Client: Success Note over CB: failures = 0 end rect rgb(60, 30, 30) Note right of Client: Failures Accumulate Client-&amp;gt;&amp;gt;CB: Request 2 CB-&amp;gt;&amp;gt;Endpoint: Forward Endpoint--&amp;gt;&amp;gt;CB: 500 Error CB--&amp;gt;&amp;gt;Client: Error Note over CB: failures = 1 Client-&amp;gt;&amp;gt;CB: Request 3 CB-&amp;gt;&amp;gt;Endpoint: Forward Endpoint--&amp;gt;&amp;gt;CB: Timeout CB--&amp;gt;&amp;gt;Client: Error Note over CB: failures = 2 Client-&amp;gt;&amp;gt;CB: Request 4-6 CB-&amp;gt;&amp;gt;Endpoint: Forward (x3) Endpoint--&amp;gt;&amp;gt;CB: 503 (x3) CB--&amp;gt;&amp;gt;Client: Error (x3) Note over CB: failures = 5 → TRIP!</description><author>James Carr</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://james-carr.org/posts/diagrams/circuit-breaker/</guid></item><item><title/><link>https://james-carr.org/posts/diagrams/day-10-process-manager-diagrams/</link><description>Day 10: Process Manager Diagrams 1. Choreography - Emergent Coordination sequenceDiagram participant Customer participant Order as Order Service participant Inventory as Inventory Service participant Shipping as Shipping Service Customer-&amp;gt;&amp;gt;Order: Place order activate Order Order--&amp;gt;&amp;gt;Inventory: OrderCreated (event) Order--&amp;gt;&amp;gt;Shipping: OrderCreated (event) deactivate Order activate Inventory Inventory--&amp;gt;&amp;gt;Order: ItemsReserved (event) Inventory--&amp;gt;&amp;gt;Shipping: ItemsReserved (event) deactivate Inventory activate Shipping Shipping--&amp;gt;&amp;gt;Order: ShipmentScheduled (event) Shipping--&amp;gt;&amp;gt;Customer: Order shipped! deactivate Shipping Each service reacts to events independently. No one &amp;ldquo;owns&amp;rdquo; the workflow.</description><author>James Carr</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://james-carr.org/posts/diagrams/day-10-process-manager-diagrams/</guid></item><item><title>À propos</title><link>/%C3%A0-propos/</link><description>&lt;hr /&gt;
&lt;p&gt;Bonjour, je suis un développeur travaillant actuellement chez &lt;a href="https://backmarket.com/"&gt;Back Market&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Vous pouvez me contacter par mail à l&amp;rsquo;adresse dbeley [ at ] protonmail [ dot ] com.&lt;/p&gt;
&lt;p&gt;Merci d&amp;rsquo;être passé !&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id="projets"&gt;Projets&lt;/h3&gt;
&lt;p&gt;La liste complète de mes projets est sur mon profil &lt;a href="https://github.com/dbeley" title="Github : dbeley"&gt;github&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tuberank.org"&gt;tuberank&lt;/a&gt; (&lt;a href="https://github.com/dbeley/tuberank"&gt;Code source&lt;/a&gt;) : Site web communautaire pour noter et découvrir des vidéos YouTube.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://multi-translate.dbeley.ovh"&gt;multi-translate&lt;/a&gt; (&lt;a href="https://github.com/dbeley/multi-translate"&gt;Code source&lt;/a&gt;): Site web permettant la traduction d&amp;rsquo;un texte en plusieurs languages via l&amp;rsquo;API de DeepL.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dbeley.github.io/map-compare"&gt;map-compare&lt;/a&gt; (&lt;a href="https://github.com/dbeley/map-compare"&gt;Code source&lt;/a&gt;): Site web permettant de comparer des zones géographiques à traver le monde.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dbeley.github.io/fdroid-insights"&gt;fdroid-insights&lt;/a&gt; (&lt;a href="https://github.com/dbeley/fdroid-insights"&gt;Code source&lt;/a&gt;) : Site web permettant d&amp;rsquo;explorer les applications F-Droid via une liste filtrable.
&lt;img alt="fdroid-insights image" class="special-img-class" src="https://raw.githubusercontent.com/dbeley/fdroid-insights/main/imgs/2023-07-10_fdroid-insights.png" style="width: 90%;" /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dbeley.github.io/lpa-table"&gt;lpa-table&lt;/a&gt; (&lt;a href="https://github.com/dbeley/lpa-table"&gt;Code source&lt;/a&gt;) : Site web permettant d&amp;rsquo;explorer les données de LinuxPhoneApps via une liste filtrable.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dbeley.github.io/firefox-addons-table"&gt;firefox-addons-table&lt;/a&gt; (&lt;a href="https://github.com/dbeley/firefox-addons-table"&gt;Code source&lt;/a&gt;) : Site web permettant d&amp;rsquo;explorer les extensions Firefox via une liste filtrable.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dbeley.github.io/my-steam-library"&gt;my-steam-library&lt;/a&gt; (&lt;a href="https://github.com/dbeley/my-steam-library"&gt;Code source&lt;/a&gt;) : Site web pour explorer une bibliothèque Steam via une liste filtrable.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/steam_stats"&gt;steam_stats&lt;/a&gt; : Utilitaire en ligne de commandes pour extraire des données de Steam.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lastfm-tools.dbeley.ovh"&gt;django-lastfm&lt;/a&gt; (&lt;a href="https://github.com/dbeley/django-lastfm"&gt;Code source&lt;/a&gt;) : Application web proposant une interface pour les projets suivants :
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/lastfm_cg"&gt;lastfm_cg&lt;/a&gt; : Génère des collages de pochettes d&amp;rsquo;albums à partir des écoutes d&amp;rsquo;un utilisateur Last.fm.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/lastfm_pg"&gt;lastfm_pg&lt;/a&gt; : Génère des playlists à partir des écoutes d&amp;rsquo;un utilisateur Last.fm.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/lastfm-wordcloud"&gt;lastfm-wordcloud&lt;/a&gt; : Génère des nuages de mots à partir des genres écoutés par un utilisateur Last.fm.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/lastfm-scraper"&gt;lastfm-scraper&lt;/a&gt; : Scripts d&amp;rsquo;extraction de données pour Last.fm.
&lt;img alt="django-lastfm image" class="special-img-class" src="https://raw.githubusercontent.com/dbeley/django-lastfm/master/pictures/image.png" style="width: 80%;" /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dbeley.github.io/lineageos-devices-timeline"&gt;lineageos-devices-timeline&lt;/a&gt; (&lt;a href="https://github.com/dbeley/lineageos-devices-timeline"&gt;Code source&lt;/a&gt;) : Site web statique affichant les appareils officiellement supportés par LineageOS triés par leur date de sortie.
&lt;img alt="lineageos-devices-timeline image" class="special-img-class" src="https://raw.githubusercontent.com/dbeley/lineageos-devices-timeline/refs/heads/main/imgs/2024-09-28_lineageos-devices-timeline.png" style="width: 90%;" /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/mpdscrobble"&gt;mpdscrobble&lt;/a&gt; : Scrobbleur Last.fm pour MPD, aussi compatible avec Listenbrainz et maloja.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dbeley.shinyapps.io/subreddit-activity-shiny/"&gt;subreddit-activity-shiny&lt;/a&gt; (&lt;a href="https://github.com/dbeley/subreddit-activity-shiny"&gt;Code source&lt;/a&gt;) : Application R Shiny utilisant subreddit_tracker comme backend permettant l&amp;rsquo;affichage de statistiques d&amp;rsquo;utilisation de subreddits.
&lt;img alt="subreddit-activity-shiny image" class="special-img-class" src="https://raw.githubusercontent.com/dbeley/subreddit-activity-shiny/master/images/image1.png" style="width: 90%;" /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/youtube_extract"&gt;youtube_extract&lt;/a&gt; : Utilitaire permettant d&amp;rsquo;extraire toutes les méta-données des vidéos d&amp;rsquo;une chaînes YouTube.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/ypc"&gt;ypc&lt;/a&gt; : Utilitaire pour convertir des playlists textes/spotify/deezer en URLs YouTube avec options de téléchargement audio/vidéo.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/reddit_export_userdata"&gt;reddit_export_userdata&lt;/a&gt; : Utilitaire exportant les données d&amp;rsquo;un ou plusieurs utilisateurs Reddit.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/archiveboxmatic"&gt;archiveboxmatic&lt;/a&gt; : Utilitaire pour automatiser des exports ArchiveBox.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id="autres"&gt;Autres&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/nixos-config"&gt;nixos-config&lt;/a&gt; : Mes fichiers de configuration NixOS.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/dotfiles"&gt;dotfiles&lt;/a&gt; : Mes fichiers de configuration Linux (déprécié au profit de ma configuration NixOS).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/docker-compose"&gt;docker-compose&lt;/a&gt; : Ma collection de fichiers docker-compose orientée auto-hébergement.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dbeley/playlist-versioning"&gt;playlists&lt;/a&gt; : Mes playlists au format déclaratif, versionnées sous git.&lt;/li&gt;
&lt;li&gt;Photos : &lt;a href="https://photos.dbeley.ovh"&gt;photos.dbeley.ovh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mastodon : &lt;a href="https://mamot.fr/@dbeley"&gt;@dbeley@mamot.fr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Last.fm : &lt;a href="https://last.fm/user/d_beley"&gt;https://last.fm/user/d_beley&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ListenBrainz : &lt;a href="https://listenbrainz.org/user/dbeley/"&gt;https://listenbrainz.org/user/dbeley/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Accueil on dbeley</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/%C3%A0-propos/</guid></item><item><title/><link>https://olshansky.info/book/2025-11-02-the-man-from-the-future-the-visionary-ideas-of-john-von-neumann/chapter-3/</link><description>&lt;h1 id="003"&gt;003&lt;/h1&gt;
&lt;p&gt;Episode Link: &lt;a href="https://share.snipd.com/episode/e2aa310a-9d68-41bd-968f-49aa66618e74"&gt;https://share.snipd.com/episode/e2aa310a-9d68-41bd-968f-49aa66618e74&lt;/a&gt;
Episode publish date: August 31, 2025 12:43 PM (PDT)
Last edit date: September 17, 2025 7:08 PM
Last snip date: September 17, 2025 7:07 PM (PDT)
Last sync date: September 17, 2025 7:08 PM (PDT)
Show: The Man from the Future: The Visionary Life of John von Neumann
Snips: 5
Warning: ⚠️ Any content within the episode information, snip blocks might be updated or overwritten by Snipd in a future sync. Add your edits or additional notes outside these blocks to keep them safe.&lt;/p&gt;</description><author>🦉 olshansky 🦁</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://olshansky.info/book/2025-11-02-the-man-from-the-future-the-visionary-ideas-of-john-von-neumann/chapter-3/</guid></item><item><title/><link>https://olshansky.info/book/2025-11-02-the-man-from-the-future-the-visionary-ideas-of-john-von-neumann/chapters-1--2/</link><description>&lt;h1 id="001--002"&gt;001 | 002&lt;/h1&gt;
&lt;p&gt;Episode Link: &lt;a href="https://share.snipd.com/episode/f647b633-b419-44fb-aceb-af9e698fb517"&gt;https://share.snipd.com/episode/f647b633-b419-44fb-aceb-af9e698fb517&lt;/a&gt;
Episode publish date: August 31, 2025 12:44 PM (PDT)
Last edit date: August 31, 2025 3:23 PM
Last snip date: August 31, 2025 3:22 PM (PDT)
Last sync date: August 31, 2025 3:22 PM (PDT)
Show: The Man from the Future: The Visionary Life of John von Neumann
Snips: 10
Warning: ⚠️ Any content within the episode information, snip blocks might be updated or overwritten by Snipd in a future sync. Add your edits or additional notes outside these blocks to keep them safe.&lt;/p&gt;</description><author>🦉 olshansky 🦁</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://olshansky.info/book/2025-11-02-the-man-from-the-future-the-visionary-ideas-of-john-von-neumann/chapters-1--2/</guid></item><item><title/><link>https://olshansky.info/book/2025-11-02-the-man-from-the-future-the-visionary-ideas-of-john-von-neumann/chapters-4/</link><description>&lt;h1 id="004"&gt;004&lt;/h1&gt;
&lt;p&gt;Episode Link: &lt;a href="https://share.snipd.com/episode/baee47c5-4d10-480f-b6c3-d8cdc4e8af42"&gt;https://share.snipd.com/episode/baee47c5-4d10-480f-b6c3-d8cdc4e8af42&lt;/a&gt;
Episode publish date: August 31, 2025 12:42 PM (PDT)
Last edit date: September 21, 2025 8:39 AM
Last snip date: September 21, 2025 8:37 AM (PDT)
Last sync date: September 21, 2025 8:38 AM (PDT)
Show: The Man from the Future: The Visionary Life of John von Neumann
Snips: 11
Warning: ⚠️ Any content within the episode information, snip blocks might be updated or overwritten by Snipd in a future sync. Add your edits or additional notes outside these blocks to keep them safe.&lt;/p&gt;</description><author>🦉 olshansky 🦁</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://olshansky.info/book/2025-11-02-the-man-from-the-future-the-visionary-ideas-of-john-von-neumann/chapters-4/</guid></item><item><title/><link>https://olshansky.info/book/2025-11-02-the-man-from-the-future-the-visionary-ideas-of-john-von-neumann/chapters-5/</link><description>&lt;h1 id="005"&gt;005&lt;/h1&gt;
&lt;p&gt;Episode Link: &lt;a href="https://share.snipd.com/episode/f47063bb-d753-4370-94ca-f477bf04ddc5"&gt;https://share.snipd.com/episode/f47063bb-d753-4370-94ca-f477bf04ddc5&lt;/a&gt;
Episode publish date: August 31, 2025 12:41 PM (PDT)
Last edit date: October 26, 2025 10:44 AM
Last snip date: October 26, 2025 10:42 AM (PDT)
Last sync date: October 26, 2025 10:43 AM (PDT)
Show: The Man from the Future: The Visionary Life of John von Neumann
Snips: 13
Warning: ⚠️ Any content within the episode information, snip blocks might be updated or overwritten by Snipd in a future sync. Add your edits or additional notes outside these blocks to keep them safe.&lt;/p&gt;</description><author>🦉 olshansky 🦁</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://olshansky.info/book/2025-11-02-the-man-from-the-future-the-visionary-ideas-of-john-von-neumann/chapters-5/</guid></item><item><title/><link>https://olshansky.info/book/2025-11-02-the-man-from-the-future-the-visionary-ideas-of-john-von-neumann/chapters-6/</link><description>&lt;h1 id="006"&gt;006&lt;/h1&gt;
&lt;p&gt;Episode Link: &lt;a href="https://share.snipd.com/episode/6fb82854-6b43-4c3e-94df-a06f474944a2"&gt;https://share.snipd.com/episode/6fb82854-6b43-4c3e-94df-a06f474944a2&lt;/a&gt;
Episode publish date: August 31, 2025 12:40 PM (PDT)
Last edit date: November 2, 2025 9:18 AM
Last snip date: November 2, 2025 9:16 AM (PST)
Last sync date: November 2, 2025 9:17 AM (PST)
Show: The Man from the Future: The Visionary Life of John von Neumann
Snips: 5
Warning: ⚠️ Any content within the episode information, snip blocks might be updated or overwritten by Snipd in a future sync. Add your edits or additional notes outside these blocks to keep them safe.&lt;/p&gt;</description><author>🦉 olshansky 🦁</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://olshansky.info/book/2025-11-02-the-man-from-the-future-the-visionary-ideas-of-john-von-neumann/chapters-6/</guid></item><item><title/><link>https://olshansky.info/tv/2026-02-23-stranger-things-season-5/</link><description>&lt;p&gt;add+++
author = &amp;ldquo;Daniel Olshansky&amp;rdquo;
title = &amp;ldquo;Stranger Things: Season 5&amp;rdquo;
date = &amp;ldquo;2026-02-23T20:06:02-0800&amp;rdquo;
description = &amp;quot;&amp;quot;
tags = [
&amp;ldquo;TV&amp;rdquo;,
&amp;ldquo;Netflix&amp;rdquo;,
&amp;ldquo;Sci-Fi&amp;rdquo;,
&amp;ldquo;Horror&amp;rdquo;,
&amp;ldquo;Series Finale&amp;rdquo;,
&amp;ldquo;Nostalgia&amp;rdquo;,
]
rating = &amp;ldquo;⭐⭐⭐⭐&amp;rdquo;
rotten_tomatoes_url = &amp;ldquo;&lt;a href="https://www.rottentomatoes.com/tv/stranger_things/s05%22"&gt;https://www.rottentomatoes.com/tv/stranger_things/s05&amp;quot;&lt;/a&gt;
+++&lt;/p&gt;
&lt;p&gt;It took me a while to both start and finish season 5.&lt;/p&gt;
&lt;p&gt;I liked it. I didn’t love it. I mostly just wanted to finish the series, even though it didn’t captivate me the way it once did.&lt;/p&gt;</description><author>🦉 olshansky 🦁</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://olshansky.info/tv/2026-02-23-stranger-things-season-5/</guid></item><item><title/><link>https://ilearnt.com/blog/templates/newpost/</link><description/><author>I Learnt</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ilearnt.com/blog/templates/newpost/</guid></item><item><title>About me</title><link>https://boring-guy.sh/about/</link><description>Hello world! I’m Adil Zouitine a boring guy who does boring things. I’m a PhD. Student in reinforcement learning at IRT Saint-Exupery and Isae-Supaéro supervised by Emmanuel Rachelson. I am currently working on model robustness to uncertainty in reinforcement learning. My university background is a mix of applied mathematics and computer science. In my spare time I enjoy contributing to open source projects and participating in machine learning competitions.</description><author>Boring Guy</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://boring-guy.sh/about/</guid></item><item><title>Library of Alexandria</title><link>https://boring-guy.sh/ressources/</link><description>This page is dedicated to resources and blogs that I find interesting.
Blog Mehdi zouitine (My brother) Max Halford lil&amp;rsquo;blog Koaning.io Vpj Seita&amp;rsquo;s Place Jay Alammar Course Deep learning course by François Fleuret at EPFL</description><author>Boring Guy</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://boring-guy.sh/ressources/</guid></item><item><title/><link>https://blog.merzlabs.com/privacy/</link><description>&lt;p&gt;&lt;strong&gt;Privacy Policy&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This privacy policy applies to the CanIWebView app (hereby referred to as &amp;ldquo;Application&amp;rdquo;) for mobile devices that was created by (hereby referred to as &amp;ldquo;Service Provider&amp;rdquo;) as an Open Source service. This service is intended for use &amp;ldquo;AS IS&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What information does the Application obtain and how is it used?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Application does not obtain any information when you download and use it. Registration is not required to use the Application.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Does the Application collect precise real time location information of the device?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This Application does not collect precise information about the location of your mobile device.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do third parties see and/or have access to information obtained by the Application?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since the Application does not collect any information, no data is shared with third parties.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What are my opt-out rights?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can stop all collection of information by the Application easily by uninstalling it. You may use the standard uninstall processes as may be available as part of your mobile device or via the mobile application marketplace or network.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Children&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Application is not used to knowingly solicit data from or market to children under the age of 13.&lt;/p&gt;
&lt;p&gt;The Service Provider does not knowingly collect personally identifiable information from children. The Service Provider encourages all children to never submit any personally identifiable information through the Application and/or Services. The Service Provider encourage parents and legal guardians to monitor their children&amp;rsquo;s Internet usage and to help enforce this Policy by instructing their children never to provide personally identifiable information through the Application and/or Services without their permission. If you have reason to believe that a child has provided personally identifiable information to the Service Provider through the Application and/or Services, please contact the Service Provider (&lt;a href="mailto:info@caniwebview.com"&gt;info@caniwebview.com&lt;/a&gt;) so that they will be able to take the necessary actions. You must also be at least 16 years of age to consent to the processing of your personally identifiable information in your country (in some countries we may allow your parent or guardian to do so on your behalf).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Service Provider is concerned about safeguarding the confidentiality of your information. However, since the Application does not collect any information, there is no risk of your data being accessed by unauthorized individuals.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This Privacy Policy may be updated from time to time for any reason. The Service Provider will notify you of any changes to their Privacy Policy by updating this page with the new Privacy Policy. You are advised to consult this Privacy Policy regularly for any changes, as continued use is deemed approval of all changes.&lt;/p&gt;
&lt;p&gt;This privacy policy is effective as of 2025-02-02&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your Consent&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;By using the Application, you are consenting to the processing of your information as set forth in this Privacy Policy now and as amended by the Service Provider.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Contact Us&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you have any questions regarding privacy while using the Application, or have questions about the practices, please contact the Service Provider via email at &lt;a href="mailto:info@caniwebview.com"&gt;info@caniwebview.com&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;This privacy policy page was generated by &lt;a href="https://app-privacy-policy-generator.nisrulz.com/"&gt;App Privacy Policy Generator&lt;/a&gt;&lt;/p&gt;</description><author>Merzlabs Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.merzlabs.com/privacy/</guid></item><item><title>About Us</title><link>https://nonhuman.party/about/</link><description>Hi, I&amp;rsquo;m Owen Miller, founder of the Non-Human Party.
I believe that our civilisation is sub-optimal; and that it&amp;rsquo;s especially sub-optimal for those who aren&amp;rsquo;t being explicitly included − they are, broadly speaking, Non-Humans.</description><author>Non-Human Party</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://nonhuman.party/about/</guid></item><item><title>About Us</title><link>https://nonhuman.party/en/about/</link><description>Hi, I&amp;rsquo;m Owen Miller, founder of the Non-Human Party.
I believe that our civilisation is sub-optimal; and that it&amp;rsquo;s especially sub-optimal for those who aren&amp;rsquo;t being explicitly included − they are, broadly speaking, Non-Humans.</description><author>Non-Human Party</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://nonhuman.party/en/about/</guid></item><item><title>Contact</title><link>https://nonhuman.party/contact/</link><description>Feel free to reach out and discuss ideas about the creation of a more harmonious society.
If you&amp;rsquo;d like to become involved in the party, this would be very much appreciated.</description><author>Non-Human Party</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://nonhuman.party/contact/</guid></item><item><title>Contact</title><link>https://nonhuman.party/en/contact/</link><description>Feel free to reach out and discuss ideas about the creation of a more harmonious society.
If you&amp;rsquo;d like to become involved in the party, this would be very much appreciated.</description><author>Non-Human Party</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://nonhuman.party/en/contact/</guid></item><item><title>About</title><link>https://coredumped.dev/about/</link><description>I am an engineer with interests in Emacs, Programming languages, performance, and compilers. Currently working in hardware design at Intel in Colorado.</description><author>Core Dumped</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://coredumped.dev/about/</guid></item><item><title/><link>https://david.coffee/about/</link><description>&lt;h1 id="about"&gt;About&lt;/h1&gt;
&lt;p&gt;Hi, I&amp;rsquo;m David! I&amp;rsquo;m an engineering leader and builder currently based in Tokyo 🇯🇵.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m an ex-engineering manager from Mercari with over 14 years of experience in the tech industry. I&amp;rsquo;m experienced in the full stack of application development and have helped businesses ship projects to millions of users. I have a deep passion for building strong, productive engineering teams and reducing friction in the development process.&lt;/p&gt;
&lt;p&gt;Today, I focus on indie hacking and building my own business under the name &lt;strong&gt;&lt;a href="https://digitalvibes.dev"&gt;Digital Vibes&lt;/a&gt;&lt;/strong&gt;. I focus on shipping fast and experimenting with new ideas.&lt;/p&gt;
&lt;p&gt;You can &lt;strong&gt;&lt;a href="https://david.coffee/projects/"&gt;see what I&amp;rsquo;m working on here&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="what-im-building"&gt;What I&amp;rsquo;m building&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m currently maintaining and growing a suite of apps focused on productivity, AI, and developer experience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://configmesh.app"&gt;ConfigMesh&lt;/a&gt;&lt;/strong&gt;: E2e encrypted sync for your dotfiles and app settings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://maskwire.com"&gt;Maskwire&lt;/a&gt;&lt;/strong&gt;: A transparent email proxy for power users.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://fixmyjapanese.com"&gt;Fix My Japanese&lt;/a&gt;&lt;/strong&gt;: AI-powered Japanese grammar correction for iOS and Web.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://quickshot.photo"&gt;Quickshot&lt;/a&gt;&lt;/strong&gt;: A concept photo editor powered by generative AI.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="my-process"&gt;My Process&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m a big believer in velocity and using AI to handle the grunt work. I recently wrote about my &lt;strong&gt;&lt;a href="https://david.coffee/move-fast-stack-2026/"&gt;2026 &amp;ldquo;Move Fast&amp;rdquo; Stack&lt;/a&gt;&lt;/strong&gt; if you&amp;rsquo;re curious about the technical side of how I ship these projects.&lt;/p&gt;
&lt;h3 id="contact"&gt;Contact&lt;/h3&gt;
&lt;p&gt;The best way to reach me is on &lt;strong&gt;&lt;a href="https://x.com/davicorn"&gt;Twitter/X&lt;/a&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;a href="https://bsky.app/profile/david.d.sh"&gt;Bluesky&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in following my journey, consider &lt;strong&gt;&lt;a href="https://david.coffee/index.xml"&gt;subscribing to the RSS feed&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/about/</guid></item><item><title/><link>https://david.coffee/projects/advancedaiactions/privacy/</link><description>&lt;h1 id="privacy-policy-for-advanced-ai-actions"&gt;Privacy policy for Advanced AI Actions&lt;/h1&gt;
&lt;p&gt;This app does not collect any or personal information.&lt;/p&gt;
&lt;p&gt;No personal data or information is explicitly collected by this app beyond necessary operational data.&lt;/p&gt;
&lt;h2 id="third-party-services"&gt;Third-Party Services&lt;/h2&gt;
&lt;p&gt;This app may utilize third-party services for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Error tracking and performance monitoring (like Sentry)&lt;/li&gt;
&lt;li&gt;Subscription management (like RevenueCat)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These services collect standard technical data according to their respective privacy policies.&lt;/p&gt;
&lt;h2 id="ai-processing"&gt;AI Processing&lt;/h2&gt;
&lt;p&gt;When you use AI features in this app:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your content is sent to AI providers (such as Google, OpenAI, Anthropic, or OpenRouter by default)&lt;/li&gt;
&lt;li&gt;You can add and configure additional AI providers of your choice&lt;/li&gt;
&lt;li&gt;All content is subject to the privacy policies of the respective AI providers you use&lt;/li&gt;
&lt;li&gt;We do not store or reuse your prompts or generated content&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="security"&gt;Security&lt;/h2&gt;
&lt;p&gt;All communications with AI providers use secure, encrypted connections.&lt;/p&gt;
&lt;h2 id="contact"&gt;Contact&lt;/h2&gt;
&lt;p&gt;For questions about this privacy policy, please &lt;a href="mailto:contact@davidmohl.com"&gt;contact me&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Last updated: 2025-03-12&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/advancedaiactions/privacy/</guid></item><item><title/><link>https://david.coffee/projects/quickshot/privacy/</link><description>&lt;h1 id="privacy-policy-for-quickshot-ai-editor"&gt;Privacy Policy for Quickshot AI Editor&lt;/h1&gt;
&lt;p&gt;Last updated: 2025-05-02&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Quickshot AI Editor (&amp;ldquo;the App&amp;rdquo;) is designed with your privacy in mind. This policy explains what information we collect, how we use it, and what choices you have regarding your data.&lt;/p&gt;
&lt;h2 id="information-we-collect"&gt;Information We Collect&lt;/h2&gt;
&lt;h3 id="user-provided-information"&gt;User-Provided Information&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Photos and Images&lt;/strong&gt;: Images you choose to edit using the App&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edit Descriptions&lt;/strong&gt;: Text descriptions you provide for editing your photos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authentication Information&lt;/strong&gt;: When you sign in with Apple, we receive a unique identifier and your email address (if you choose to share it)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="automatically-collected-information"&gt;Automatically Collected Information&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Usage Data&lt;/strong&gt;: Basic information about how you use the App, including edit sessions and feature usage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Device Information&lt;/strong&gt;: Technical data such as device type, operating system version, and App version&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error Data&lt;/strong&gt;: Information about App crashes and errors to improve stability&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-we-use-your-information"&gt;How We Use Your Information&lt;/h2&gt;
&lt;h3 id="server-storage"&gt;Server Storage&lt;/h3&gt;
&lt;p&gt;Our server stores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Authentication tokens to maintain your session&lt;/li&gt;
&lt;li&gt;Basic usage metrics to improve the App&lt;/li&gt;
&lt;li&gt;Temporary copies of images during the editing process&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ai-processing"&gt;AI Processing&lt;/h3&gt;
&lt;p&gt;When you use the App&amp;rsquo;s editing features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your images and edit descriptions are sent to AI providers (such as Google or OpenAI)&lt;/li&gt;
&lt;li&gt;These transmissions are necessary to provide the core functionality of the App&lt;/li&gt;
&lt;li&gt;All content is subject to the privacy policies of the respective AI providers&lt;/li&gt;
&lt;li&gt;We do not permanently store your images or edit descriptions on our servers after processing is complete&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="third-party-services"&gt;Third-Party Services&lt;/h2&gt;
&lt;p&gt;The App utilizes third-party services for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Authentication&lt;/strong&gt;: Sign in with Apple&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subscription Management&lt;/strong&gt;: RevenueCat for handling in-app purchases&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error Tracking&lt;/strong&gt;: Basic error and crash reporting tools&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These services collect standard technical data according to their respective privacy policies.&lt;/p&gt;
&lt;h2 id="data-retention"&gt;Data Retention&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Edit history is stored locally on your device&lt;/li&gt;
&lt;li&gt;Server-side data is retained only as long as necessary to provide the service&lt;/li&gt;
&lt;li&gt;You can delete your account and associated data by contacting us&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="security"&gt;Security&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;All communications between the App, our servers, and AI providers use secure, encrypted connections&lt;/li&gt;
&lt;li&gt;We implement reasonable security measures to protect your information&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="your-rights"&gt;Your Rights&lt;/h2&gt;
&lt;p&gt;Depending on your location, you may have rights to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Access your personal information&lt;/li&gt;
&lt;li&gt;Correct inaccurate data&lt;/li&gt;
&lt;li&gt;Delete your data&lt;/li&gt;
&lt;li&gt;Object to certain processing activities&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="changes-to-this-policy"&gt;Changes to This Policy&lt;/h2&gt;
&lt;p&gt;We may update this privacy policy from time to time. We will notify you of any changes by posting the new policy on this page and updating the &amp;ldquo;Last updated&amp;rdquo; date.&lt;/p&gt;
&lt;h2 id="contact"&gt;Contact&lt;/h2&gt;
&lt;p&gt;For questions about this privacy policy, please &lt;a href="mailto:contact@davidmohl.com"&gt;contact me&lt;/a&gt;&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/quickshot/privacy/</guid></item><item><title/><link>https://david.coffee/projects/quickshot/terms/</link><description>&lt;h1 id="terms-of-service-for-quickshot-ai-editor"&gt;Terms of Service for Quickshot AI Editor&lt;/h1&gt;
&lt;p&gt;Last updated: 2025-05-02&lt;/p&gt;
&lt;h2 id="1-acceptance-of-terms"&gt;1. Acceptance of Terms&lt;/h2&gt;
&lt;p&gt;By downloading, installing, or using Quickshot AI Editor (&amp;ldquo;the App&amp;rdquo;), you agree to be bound by these Terms of Service. If you do not agree to these terms, please do not use the App.&lt;/p&gt;
&lt;h2 id="2-description-of-service"&gt;2. Description of Service&lt;/h2&gt;
&lt;p&gt;Quickshot AI Editor is an iOS application that uses artificial intelligence to edit photos based on natural language descriptions. The App requires an internet connection to process edits through third-party AI services.&lt;/p&gt;
&lt;h2 id="3-user-accounts"&gt;3. User Accounts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You may be required to create an account using Sign in with Apple to use certain features&lt;/li&gt;
&lt;li&gt;You are responsible for maintaining the confidentiality of your account&lt;/li&gt;
&lt;li&gt;You agree to provide accurate information and to update it as necessary&lt;/li&gt;
&lt;li&gt;You are solely responsible for all activities that occur under your account&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="4-subscription-and-billing"&gt;4. Subscription and Billing&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The App may offer subscription-based features&lt;/li&gt;
&lt;li&gt;Subscription fees will be clearly disclosed before purchase&lt;/li&gt;
&lt;li&gt;Subscriptions automatically renew unless canceled at least 24 hours before the end of the current period&lt;/li&gt;
&lt;li&gt;Subscription management and cancellation are handled through your Apple ID account settings&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="5-user-content"&gt;5. User Content&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You retain ownership of the photos you edit using the App&lt;/li&gt;
&lt;li&gt;By using the App, you grant us a limited license to process your photos for the purpose of providing the service&lt;/li&gt;
&lt;li&gt;You agree not to use the App to process or create:
&lt;ul&gt;
&lt;li&gt;Content that infringes on intellectual property rights&lt;/li&gt;
&lt;li&gt;Illegal, harmful, threatening, or abusive content&lt;/li&gt;
&lt;li&gt;Content that violates third-party terms of service&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="6-ai-processing"&gt;6. AI Processing&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The App uses third-party AI services to process your photos and edit descriptions&lt;/li&gt;
&lt;li&gt;These services have their own terms of service and privacy policies&lt;/li&gt;
&lt;li&gt;We do not guarantee the accuracy, quality, or appropriateness of AI-generated edits&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="7-limitations-of-liability"&gt;7. Limitations of Liability&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The App is provided &amp;ldquo;as is&amp;rdquo; without warranties of any kind&lt;/li&gt;
&lt;li&gt;We are not liable for any damages arising from your use of the App&lt;/li&gt;
&lt;li&gt;We are not responsible for the content of AI-generated edits&lt;/li&gt;
&lt;li&gt;We do not guarantee uninterrupted or error-free service&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="8-intellectual-property"&gt;8. Intellectual Property&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The App, including its code, design, and features, is owned by us and protected by intellectual property laws&lt;/li&gt;
&lt;li&gt;You may not copy, modify, distribute, sell, or lease any part of the App&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="9-termination"&gt;9. Termination&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;We reserve the right to suspend or terminate your access to the App at our discretion&lt;/li&gt;
&lt;li&gt;You may terminate your use of the App at any time by uninstalling it and canceling any subscriptions&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="10-changes-to-terms"&gt;10. Changes to Terms&lt;/h2&gt;
&lt;p&gt;We may modify these Terms at any time. Continued use of the App after changes constitutes acceptance of the modified Terms.&lt;/p&gt;
&lt;h2 id="11-governing-law"&gt;11. Governing Law&lt;/h2&gt;
&lt;p&gt;These Terms shall be governed by the laws of the jurisdiction in which the App developer is established, without regard to its conflict of law provisions.&lt;/p&gt;
&lt;h2 id="contact"&gt;Contact&lt;/h2&gt;
&lt;p&gt;For questions about these Terms of Service, please &lt;a href="mailto:contact@davidmohl.com"&gt;contact me&lt;/a&gt;&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/quickshot/terms/</guid></item><item><title/><link>https://david.coffee/projects/terms/</link><description>&lt;h1 id="terms-of-use-for-my-applications"&gt;Terms of Use for My Applications&lt;/h1&gt;
&lt;p&gt;Please review these terms carefully. They are intended to create a positive experience for both of us as you use my applications.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;By using any of my applications, you acknowledge and agree to these terms. I reserve the right to modify these terms at any time, and continued use constitutes acceptance of any changes. The most current version will always be available here.&lt;/p&gt;
&lt;h2 id="acceptable-usage"&gt;Acceptable Usage&lt;/h2&gt;
&lt;p&gt;You are free to use my applications for their intended purposes without limitation. However, any use that could harm the applications or other users is strictly prohibited.&lt;/p&gt;
&lt;h2 id="copyright-and-ownership"&gt;Copyright and Ownership&lt;/h2&gt;
&lt;p&gt;All content, code, and functionality within my applications remain my property and are protected by copyright laws. Unauthorized reproduction, modification, or distribution of any portion of my applications is not allowed without my explicit permission.&lt;/p&gt;
&lt;h2 id="app-marketplaces"&gt;App Marketplaces&lt;/h2&gt;
&lt;p&gt;For applications obtained through official app stores, their respective terms of service will apply in addition to these terms.&lt;/p&gt;
&lt;h2 id="software-quality"&gt;Software Quality&lt;/h2&gt;
&lt;p&gt;While I strive for excellence in all my applications, I cannot guarantee they will be entirely free of errors. I value your trust greatly, but recommend regular data backups as a precautionary measure.&lt;/p&gt;
&lt;h2 id="accessibility-commitment"&gt;Accessibility Commitment&lt;/h2&gt;
&lt;p&gt;I am dedicated to ensuring my applications are accessible to all users, including those with disabilities. If you encounter accessibility barriers while using my applications, please contact me directly. I will work diligently to address these issues and continuously improve the accessibility of my products.&lt;/p&gt;
&lt;h2 id="limitation-of-liability"&gt;Limitation of Liability&lt;/h2&gt;
&lt;p&gt;I cannot accept responsibility for any damages or issues arising from the use of my applications. By using these applications, you accept all risks associated with their use and any actions taken based on their content or functionality.&lt;/p&gt;
&lt;h2 id="user-indemnification"&gt;User Indemnification&lt;/h2&gt;
&lt;p&gt;You agree to protect and indemnify me against any claims, damages, or expenses resulting from your use of my applications or violations of these terms.&lt;/p&gt;
&lt;h2 id="refund-policy"&gt;Refund Policy&lt;/h2&gt;
&lt;p&gt;For purchases made through app marketplaces, their refund policies apply. However, I encourage you to contact me directly with any concerns before requesting a refund, as I may be able to resolve your issue.&lt;/p&gt;
&lt;h2 id="customer-support"&gt;Customer Support&lt;/h2&gt;
&lt;p&gt;I strive to respond to all support inquiries within seven days, though response times may occasionally vary. Your patience and understanding are appreciated.&lt;/p&gt;
&lt;p&gt;Last Updated: 2025-03-12&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/terms/</guid></item><item><title>ConfigMesh</title><link>https://david.coffee/projects/configmesh/</link><description>&lt;p&gt;ConfigMesh runs as a native macOS app on your machine. It monitors your specified config files, encrypts them with your personal key, and syncs them across machines. Your encryption key never leaves your device, ensuring true end-to-end encryption.&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/configmesh/</guid></item><item><title>Desks Companion for WeWork</title><link>https://david.coffee/projects/desks/</link><description>&lt;p&gt;Whether you&amp;rsquo;re a daily hot-desker or an occasional workspace user, Desks empowers you to manage your schedule and discover new workspaces at your convenience.&lt;/p&gt;
&lt;p&gt;This app is not affiliated with WeWork or its subsidiaries.&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/desks/</guid></item><item><title>eSIM DB</title><link>https://david.coffee/projects/esimdb/</link><description>&lt;p&gt;Browse and compare eSIM plans from multiple providers to find the best data plan for your destination. Whether you&amp;rsquo;re traveling to a single country or across multiple regions, eSIM DB makes it easy to find the right plan.&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/esimdb/</guid></item><item><title>Fix My Japanese</title><link>https://david.coffee/projects/fixmyjapanese/</link><description/><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/fixmyjapanese/</guid></item><item><title>Kikuyo</title><link>https://david.coffee/projects/kikuyo/</link><description>&lt;p&gt;No seat pricing, no enterprise tiers, no sales calls.&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/kikuyo/</guid></item><item><title>MarkRight</title><link>https://david.coffee/projects/markright/</link><description/><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/markright/</guid></item><item><title>Masked Email Manager</title><link>https://david.coffee/projects/maskedemailmanager/</link><description/><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/maskedemailmanager/</guid></item><item><title>Maskwire</title><link>https://david.coffee/projects/maskwire/</link><description/><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/maskwire/</guid></item><item><title>MCP Nest</title><link>https://david.coffee/projects/mcpnest/</link><description>&lt;p&gt;Run your Model Context Protocol servers in the cloud without the hassle of local configuration. MCP Nest provides seamless access to your development and AI tools from any device, making it easy to use your favorite MCP tools with popular AI assistants.&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/mcpnest/</guid></item><item><title>microfn</title><link>https://david.coffee/projects/microfn/</link><description>&lt;p&gt;Build and deploy serverless functions instantly without any setup. Share your functions with the community, remix existing ones, and integrate with AI assistants, all from a simple, powerful platform.&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/microfn/</guid></item><item><title>My Apps and projects</title><link>https://david.coffee/projects/</link><description>&lt;p&gt;Welcome to my collection of apps &amp;amp; projects. Each one is crafted with care to solve specific problems.&lt;/p&gt;
&lt;p&gt;Curious about one? &lt;a href="mailto:contact@davidmohl.com"&gt;Contact me!&lt;/a&gt;&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/</guid></item><item><title>The Enabler</title><link>https://david.coffee/projects/enabler/</link><description/><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/enabler/</guid></item><item><title>Warplet</title><link>https://david.coffee/projects/warplet/</link><description>&lt;p&gt;Warplet runs as a native app on your Mac. Click &lt;strong&gt;Start&lt;/strong&gt;, and it opens a secure tunnel that gives you a stable &lt;code&gt;*.warplet.app&lt;/code&gt; URL backed by bearer auth. Remote AI clients can then reach local MCP servers like DEVONthink, Obsidian, NotePlan, or Beeper, without exposing ports or fighting your firewall.&lt;/p&gt;</description><author>David Mohl</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://david.coffee/projects/warplet/</guid></item><item><title>Reacy i18next</title><link>https://yasha.solutions/posts/oldgatsby/drafts/18next-html-in-strings/</link><description>React-i18next https://stackoverflow.com/questions/16038458/html-tags-in-i18next-translation</description><author>Yasha Solutions</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://yasha.solutions/posts/oldgatsby/drafts/18next-html-in-strings/</guid></item><item><title>TITLE</title><link>https://yasha.solutions/URL-NAME/</link><description>Place your content here Better Wordpress Development
not your typical guide to build a theme or plugin but more how to to build a solid worflow to keep your data safe and avoid bad surprises.
plugin updates in production working multiple developpers ensure testing work with version control add automation to your wokflow
Wordpress is just one specific way to get data into and out of a database, display it as HTML, and link up your CSS/JS.</description><author>Yasha Solutions</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://yasha.solutions/URL-NAME/</guid></item><item><title>About</title><link>https://smcleod.net/about/</link><description>Sam McLeod</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/about/</guid></item><item><title>ADHD Medications</title><link>https://smcleod.net/admeds/</link><description>A visual comparison of common ADHD medications</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/admeds/</guid></item><item><title>Agentic Coding Tools</title><link>https://smcleod.net/agentic-coding-tools/</link><description>Rating Agentic Coding Tools</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/agentic-coding-tools/</guid></item><item><title>Cars &amp;amp; Bikes</title><link>https://smcleod.net/cars/</link><description>Cars &amp;amp; Bikes list</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/cars/</guid></item><item><title>Contact</title><link>https://smcleod.net/contact/</link><description>Sam McLeod</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/contact/</guid></item><item><title>Gigs</title><link>https://smcleod.net/gigs/</link><description>Gigs list</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/gigs/</guid></item><item><title>Links</title><link>https://smcleod.net/links/</link><description>&lt;h2 id="mine"&gt;Mine&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🧑‍💻 &lt;a href="https://www.github.com/sammcj"&gt;Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🐘 &lt;a href="https://aus.social/@s_mcleod"&gt;Mastodon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;👔 &lt;a href="https://www.linkedin.com/in/sammcj"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- - 🦃 [Twitter](https://www.twitter.com/sammcj) --&gt;
&lt;!-- - 🦤 [Twitter Archive](https://sammcj.github.io/twitter-archive/) --&gt;
&lt;ul&gt;
&lt;li&gt;🦙 &lt;a href="https://github.com/sammcj/agentic-coding/"&gt;My Agentic Coding Rules, Custom Agents and Workflows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;📚 &lt;a href="https://github.com/sammcj/llm-templates"&gt;My LLM Modelfiles and Templates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🖼️ &lt;a href="https://civitai.com/user/mlsa/models"&gt;My LLM Image Models&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="software"&gt;Software&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;del&gt;&lt;a href="https://plex.tv"&gt;Plex&lt;/a&gt; - Home Media Streaming&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jellyfin.org"&gt;Jellyfin&lt;/a&gt; - Home Media Streaming&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pfsense.org"&gt;PFsense&lt;/a&gt; - Routing, Firewall, VPN and Network Management&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ai--llm"&gt;AI / LLM&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.claude.com/product/claude-code"&gt;Claude Code&lt;/a&gt; - The best (equal) Agentic Coding tool&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cline.bot"&gt;Cline&lt;/a&gt; - The best (equal) Agentic Coding tool&lt;/li&gt;
&lt;li&gt;&lt;a href="https://invoke.ai"&gt;InvokeAI&lt;/a&gt; - AI Image Generation and Editing&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bmaltais/kohya_ss"&gt;Kohya_SS&lt;/a&gt; - LLM Image Model and LoRA Training&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ggml-org/llama.cpp"&gt;Llama.cpp&lt;/a&gt; - LLM Model Server&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mostlygeek/llama-swap"&gt;LlamaSwap&lt;/a&gt; - Automatic llama.cpp model serving and swapping&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lmstudio.ai"&gt;LM Studio&lt;/a&gt; - macOS LLM Model Manager and inference tool&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/open-webui/open-webui"&gt;Open WebUI&lt;/a&gt; - Web Interface for LLMs&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="macos--ios-apps"&gt;macOS / iOS Apps&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/us/app/amphetamine/id937984704?mt=12"&gt;Amphetamine&lt;/a&gt; - Keep Your Mac Awake&lt;/li&gt;
&lt;li&gt;&lt;a href="https://folivora.ai/"&gt;BetterTouchTool&lt;/a&gt; - macOS automation and customisation&lt;/li&gt;
&lt;li&gt;&lt;a href="https://brew.sh/"&gt;Brew&lt;/a&gt; - Package manager&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.getbumpr.com"&gt;Bumpr&lt;/a&gt; - Customise Browser By App or Link&lt;/li&gt;
&lt;li&gt;&lt;a href="https://daisydiskapp.com/"&gt;DaisyDisk&lt;/a&gt; - Disk usage inspector&lt;/li&gt;
&lt;li&gt;&lt;a href="https://feeeed.nateparrott.com/"&gt;Feeeed&lt;/a&gt; - Excellent RSS Client with a lot of smarts&lt;/li&gt;
&lt;li&gt;&lt;a href="https://handbrake.fr"&gt;Handbrake&lt;/a&gt; - Video Encoding&lt;/li&gt;
&lt;li&gt;&lt;a href="https://imageoptim.com"&gt;ImageOptim&lt;/a&gt; - Image compression&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.soma-zone.com/LaunchControl/"&gt;LaunchControl&lt;/a&gt; - Manage launchd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.obdev.at/products/littlesnitch/index.html"&gt;Little Snitch&lt;/a&gt; - Firewall&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mas-cli/mas"&gt;mas&lt;/a&gt; - Mac App Store CLI integrated with brew&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/au/app/meetingbar/id1532419400?mt=12"&gt;MeetingBar&lt;/a&gt; - Calendar Integration&lt;/li&gt;
&lt;li&gt;&lt;a href="https://obdev.at/products/microsnitch/index.html"&gt;Micro Snitch&lt;/a&gt; - Notifications for active mic/webcam&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fabioz.github.io/mu-repo/"&gt;mu-repo&lt;/a&gt; - Manage Multiple Git Repositories&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/au/app/musicharbor-track-new-music/id1440405750"&gt;MusicHarbor&lt;/a&gt; - Track new and upcoming music releases&lt;/li&gt;
&lt;li&gt;&lt;a href="https://titanium-software.fr/en/onyx.html"&gt;OnyX&lt;/a&gt; - macOS customisation&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/au/app/parcel/id375589283"&gt;Parcel&lt;/a&gt; - Track parcels (also for macOS)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pixelmator.com/pro/"&gt;Pixelmator Pro&lt;/a&gt; - Image Editing&lt;/li&gt;
&lt;li&gt;&lt;a href="https://panic.com/prompt/"&gt;Prompt&lt;/a&gt; - Mobile SSH Client&lt;/li&gt;
&lt;li&gt;&lt;a href="https://radiosilenceapp.com"&gt;RadioSilence&lt;/a&gt; - Firewall&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raycast.com"&gt;Raycast&lt;/a&gt; - Spotlight replacement&lt;/li&gt;
&lt;li&gt;&lt;a href="https://shottr.cc/"&gt;Shottr&lt;/a&gt; - Better screenshots&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cordlessdog.com/stay/"&gt;Stay&lt;/a&gt; - Keep App Windows Where You Want Them&lt;/li&gt;
&lt;li&gt;&lt;a href="https://culturedcode.com/things/"&gt;Things&lt;/a&gt; - Lists / GTD&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="services"&gt;Services&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fastmail.com"&gt;Fastmail&lt;/a&gt; - Email&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kagi.com"&gt;Kagi&lt;/a&gt; - Premium Search Engine&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kill-the-newsletter.com/"&gt;Kill The Newsletter!&lt;/a&gt; - Email to RSS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="browser-extensions"&gt;Browser Extensions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-GB/firefox/addon/awesome-rss"&gt;Awesome RSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-GB/firefox/addon/bypass-paywalls-clean"&gt;Bypass Paywalls Clean&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-GB/firefox/addon/copy-plaintext"&gt;Copy PlainText&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="github.com/jatinkrmalik/LLMFeeder"&gt;LLMFeeder&lt;/a&gt; - Copies web pages as markdown for LLMs&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/refined-github/refined-github"&gt;Refined Github&lt;/a&gt; - Improve GitHub&lt;/li&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-GB/firefox/addon/sponsorblock"&gt;SponsorBlock - Skip Sponsorships on YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/"&gt;uBlock Origin&lt;/a&gt; - Browser Ad Blocking and Privacy&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="media"&gt;Media&lt;/h2&gt;
&lt;h3 id="podcasts"&gt;Podcasts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.theskepticsguide.org/"&gt;The Skeptics Guide To The Universe (SGU)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nosuchthingasafish.com/"&gt;No Such Thing As A Fish&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youarenotsosmart.com/"&gt;You Are Not So Smart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.offmenupodcast.co.uk"&gt;Off Menu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rhlstp.co.uk/"&gt;RHLSTP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.adam-buxton.co.uk/podcasts"&gt;The Adam Buxton Podcast&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id="youtube-channels"&gt;YouTube Channels&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@MachineLearningStreetTalk"&gt;Machine Learning Street Talk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/playlist?list=PL1B627337ED6F55F0"&gt;NPR Tiny Desk Concerts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/playlist?list=PLN2yCnHTG_6qxmv_pdBxWxCPsbA1Cl2RI"&gt;Techmoan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@bigclivedotcom"&gt;Big Clive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@Fireship"&gt;Fireship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCwKq447rYMVI5dAQWMmFnfg"&gt;DTM Racing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/c/smartereveryday"&gt;Smarter Every Day&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCFH4dWqQQOYkyJZUGT4q5pg"&gt;Warped Perception&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@RetroGameCorps"&gt;Retro Game Corps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id="hardware"&gt;Hardware&lt;/h2&gt;
&lt;h3 id="for-your-hands"&gt;For Your Hands&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://daskeyboard.com"&gt;Das Keyboard&lt;/a&gt; - Mechanical Keyboard&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.keychron.com"&gt;Keychron&lt;/a&gt; - Low Profile Mechanical Keyboards&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.logitech.com/en-au/shop/p/mx-master-3s"&gt;Logitech MX Master 3S&lt;/a&gt; - Mouse&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="for-your-ears"&gt;For Your Ears&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.ultrasone.com/en/products/headphones/signature-pro"&gt;Ultrasone Signature Pro&lt;/a&gt; - HiFi Headphones&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sony.com.au/electronics/headband-headphones/wh-1000xm5"&gt;Sony WH-1000XM5&lt;/a&gt; - Portable Headphones&lt;/li&gt;
&lt;li&gt;&lt;a href="https://benchmarkmedia.com/collections/digital-to-analog-audio-converter"&gt;Benchmark DAC&lt;/a&gt; - DAC &amp;amp; Preamp&lt;/li&gt;
&lt;/ul&gt;</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/links/</guid></item><item><title>LLM FAQ</title><link>https://smcleod.net/llm-faq/</link><description>Frequently Asked Questions about LLMs and AI</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/llm-faq/</guid></item><item><title>LLM vRAM Estimator</title><link>https://smcleod.net/vram-estimator/</link><description>LLM vRAM Estimator</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/vram-estimator/</guid></item><item><title>Offline</title><link>https://smcleod.net/offline/</link><description>&lt;blockquote&gt;
&lt;p&gt;You are not connected to the Internet, only cached pages will be available.&lt;/p&gt;
&lt;/blockquote&gt;</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/offline/</guid></item><item><title>Quotes and Musings</title><link>https://smcleod.net/quotes/</link><description>A collection of quotes</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/quotes/</guid></item><item><title>Resumé / CV</title><link>https://smcleod.net/cv/</link><description>Sam McLeod</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/cv/</guid></item><item><title>Series</title><link>https://smcleod.net/series/</link><description>&lt;p&gt;Note: This series index seems a bit borked at the moment. I&amp;rsquo;m not sure why. I&amp;rsquo;ll come back to it later.&lt;/p&gt;</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/series/</guid></item><item><title>Success</title><link>https://smcleod.net/contact-success/</link><description>Message Sent</description><author>smcleod.net</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://smcleod.net/contact-success/</guid></item><item><title>about</title><link>https://andinfinity.eu/about/</link><description>&lt;p&gt;Hi there, I&amp;rsquo;m Chris. Chronically online and coding since about 18 years now. I&amp;rsquo;ve studied computer science (BSc &amp;amp; MSc) and focused on machine learning/AI/data science and theoretical computer science. I&amp;rsquo;ve been CTO in two startups and co-founder in one for around 10 years now. I&amp;rsquo;m based in Germany.&lt;/p&gt;
&lt;p&gt;This year (2025) I got burnt out and left the startup world. I&amp;rsquo;m available as a freelancer and offer data science consulting, &lt;a href="https://aeon-automation.com/en"&gt;AI automation&lt;/a&gt; and the odd programming project (preferably in python or golang).&lt;/p&gt;</description><author>andinfinity</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://andinfinity.eu/about/</guid></item><item><title>archive</title><link>https://andinfinity.eu/archive/</link><description/><author>andinfinity</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://andinfinity.eu/archive/</guid></item><item><title>Projects</title><link>https://zefram.xyz/projects/</link><description>&lt;h2 id="core-projects"&gt;Core projects&lt;/h2&gt;
&lt;h3 id="timeless"&gt;Timeless&lt;/h3&gt;
&lt;p&gt;Timeless is a perpetual yield token protocol. It introduces two brand new financial instruments that enable people to leverage, speculate on, or hedge yield.&lt;/p&gt;
&lt;p&gt;Launched on Ethereum Mainnet and several other networks.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://timelessfi.com"&gt;Visit&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="sudoswap"&gt;Sudoswap&lt;/h3&gt;
&lt;p&gt;Sudoswap is an Automated Market Maker (AMM) for NFTs. It is capital efficient, hyper gas-optimized, and mostly permissionless.&lt;/p&gt;
&lt;p&gt;I expect that Sudoswap will be to NFTs what Uniswap was (and is) to tokens: a new paradigm that will dominate the trading market.&lt;/p&gt;</description><author>Zefram's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://zefram.xyz/projects/</guid></item><item><title>About this Site</title><link>https://everttimberg.io/blog/welcome/</link><description>Welcome to my personal site. I wrote the site using Hugo, a static site generator written in Go. It&amp;rsquo;s been a great introduction to the Go template language. Hosting is done via static files published to Github pages. The theme for this site is based on a modified version of the Introduction theme.</description><author>Posts on Evert Timberg</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://everttimberg.io/blog/welcome/</guid></item><item><title>Profiling Python Code with QCacheGrind</title><link>https://everttimberg.io/blog/python-profiling/</link><description>Profiling is the first step to improving the performance of code. Suppose we want to profile the Python script below which is based on the example here. It prints out the first 20 Fibonacci numbers and is unoptimized to make the profile exaggerated.
def fib(n): if n == 0: return 0 elif n == 1: return 1 else: return fib(n-1) + fib(n-2) def fib_seq(n): seq = [ ] if n &amp;gt; 0: seq.</description><author>Posts on Evert Timberg</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://everttimberg.io/blog/python-profiling/</guid></item><item><title>About</title><link>https://tsak.dev/pages/about/</link><description>&lt;blockquote&gt;
&lt;p&gt;My input is text, my output is text.&lt;/p&gt;
&lt;p&gt;Inbetween is my brain.&lt;/p&gt;
&lt;p&gt;I make machines do things.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Using the &lt;a href="https://github.com/zerostaticthemes/hugo-winston-theme"&gt;Hugo Winston&lt;/a&gt; theme by &lt;a href="https://www.zerostatic.io/"&gt;Zero Static&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Stalk me on &lt;a href="https://codeberg.org/tsak"&gt;Codeberg&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/tsak/tsak.dev"&gt;This blog&lt;/a&gt; lives on Github until I can be bothered to change the Cloudflare pages setup to integrate with Codeberg.&lt;/p&gt;
&lt;h2 id="projects"&gt;Projects&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tsak.net/"&gt;tsak.net&lt;/a&gt; (keep reloading)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://draw.tsak.net/"&gt;Draw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cc.tsak.net/"&gt;Coronacount&lt;/a&gt; (&lt;a href="https://codeberg.org/tsak/coronacount"&gt;source&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://chloe.tsak.net/"&gt;Chloe&lt;/a&gt; (&lt;a href="https://codeberg.org/tsak/chloe"&gt;source&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackorphans.tsak.net/"&gt;Stack Orphans&lt;/a&gt; (&lt;a href="https://codeberg.org/tsak/stackorphans"&gt;source&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://xlsx2json.tsak.net/"&gt;xslx2json&lt;/a&gt; (&lt;a href="https://codeberg.org/tsak/xlsx2json-api"&gt;source&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codeberg.org/tsak/everyframeapainting"&gt;Every Frame A Painting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Look mum, I have a blog on tsak.dev</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://tsak.dev/pages/about/</guid></item><item><title>Muhammad Usama</title><link>https://xosh.org/cv/</link><description>Muhammad Usama Skype: SMUsamaShah LinkedIn: linkedin.com/in/SMUsamaShah GitHub: github.com/SMUsamaShah Blog: SMUsamaShah.github.io Engineer with 10 years of experience mostly in gaming industry as a backend developer. Have worked Java, C/C++, C# and JavaScript. Have done some web development in Java, ASP.net and PHP. I work on both Windows and Linux. I am very good at debugging and like solving problems.
Work Experience March 2020 (5 Years) Game Systems Engineer @ Jagex (Cambridge, United Kingdom).</description><author>XOSH.ORG</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://xosh.org/cv/</guid></item><item><title>Subscribe</title><link>https://ochagavia.nl/subscribe/</link><description>Subscribe Subscribe anonymously through RSS, or leave your email below:</description><author>Consulting on Adolfo Ochagavía</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ochagavia.nl/subscribe/</guid></item><item><title>About Me</title><link>https://boerman.dev/about/</link><description>&lt;p&gt;Hi my name is Frank and welcome to my blog! Something about me, I have a Msc in Electrical Engineering from the TU/e and live in Boxtel. I work at TenneT as a Flowbased capacity calculation expert and am mainly active in monitoring, reporting and helping design improvements of the CORE Flowbased processes. Sometimes I also do this for Day-ahead and Intraday markets.&lt;/p&gt;
&lt;p&gt;As a hobby I like to run this website and read books, mainly about history. Next to that I like walking in nature and cudling my fiance and cats. I also like to help people digest complex topics through intuitive visualization.&lt;/p&gt;</description><author>Blog Frank Boerman</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://boerman.dev/about/</guid></item><item><title>Contact</title><link>https://boerman.dev/contact/</link><description>&lt;p&gt;For questions, compliments or other forms of messages you can reach me at my personal email &lt;a href="mailto:frank@fboerman.nl"&gt;frank@fboerman.nl&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For business inquiries you can reach me at my personal business umbrella &lt;a href="mailto:frank@amunanalytics.eu"&gt;frank@amunanalytics.eu&lt;/a&gt;. For registration information on my business see &lt;a href="https://amunanalytics.eu/"&gt;https://amunanalytics.eu/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can find me on linkedin &lt;a href="https://www.linkedin.com/in/frank-boerman-477613164/"&gt;here&lt;/a&gt; and my twitter (or X) &lt;a href="https://twitter.com/FrankBoerman"&gt;here&lt;/a&gt;. I am also active on github &lt;a href="https://github.com/fboerman/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><author>Blog Frank Boerman</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://boerman.dev/contact/</guid></item><item><title/><link>https://murphyslab.ca/notes/</link><description/><author>Murphy's Lab Notes on Murphy's Lab</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://murphyslab.ca/notes/</guid></item><item><title>About</title><link>https://prashamhtrivedi.in/about/</link><description>About Prasham H Trivedi - Senior Software Engineer specializing in serverless architecture, AI/LLM integration, and developer tooling.</description><author>Prasham H Trivedi</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://prashamhtrivedi.in/about/</guid></item><item><title>Drafts</title><link>https://prashamhtrivedi.in/drafts/</link><description/><author>Prasham H Trivedi</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://prashamhtrivedi.in/drafts/</guid></item><item><title>Projects</title><link>https://prashamhtrivedi.in/projects/</link><description>My Projects</description><author>Prasham H Trivedi</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://prashamhtrivedi.in/projects/</guid></item><item><title>Tools</title><link>https://prashamhtrivedi.in/tools/</link><description>Tools: A little scripts I have created for my usecases</description><author>Prasham H Trivedi</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://prashamhtrivedi.in/tools/</guid></item><item><title>Book Shelf</title><link>https://rajkumaar.co.in/books/shelf/</link><description/><author>Online Home of Rajkumar</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://rajkumaar.co.in/books/shelf/</guid></item><item><title>Craig's Disney Food Guide</title><link>/about/disneyworld/</link><description>&lt;p&gt;There&amp;rsquo;s an immense amount of things online about Disney, and especially so about Disney dining. We ourselves have frequented disney world a number of times over the years, and in time have made it to many of the restaurants there with only a few of the fancier ones left on our list. Here&amp;rsquo;s a few of our favorites, what to get, and why:&lt;/p&gt;
&lt;h3 id="food"&gt;
&lt;div&gt;
Food
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Flying Fish&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Le Cellier&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="drinks"&gt;
&lt;div&gt;
Drinks
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/about/disneyworld/</guid></item><item><title>Craig's Disneyland Guide</title><link>/about/disneyland/</link><description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Disney, and specifically disneyland, is a frequent vacation for us as it can be a convenient long weekend getaway. It doesn&amp;rsquo;t hurt that my wife is a huge disney fan. At the same time there&amp;rsquo;s certain things that can make it more of a relaxing trip than you may realize without screaming children. Rides are purely up to you, but I&amp;rsquo;ll dig into a few favorites for food/drinking.&lt;/p&gt;
&lt;h3 id="food"&gt;
&lt;div&gt;
Food
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/carthay-circle-restaurant-anaheim"&gt;Carthay Circle&lt;/a&gt; - This is our most common visit in Disneyland. It&amp;rsquo;s a bit more fine dining, but not too overly high end as well. A few of the favorites are the biscuits, sriracha duck wings as appetizers. For entrees, mostly anything, though the pork chop is a highlight. Their wine list is also quite nice. And if you&amp;rsquo;re lucky enough to be on a corner table there&amp;rsquo;s a nice easter egg of the evil queen.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/flos-v8-cafe-anaheim"&gt;Flo&amp;rsquo;s V8 Cafe&lt;/a&gt; - Another common place we visit, though this is what Disney classifies as quick service. This is where it shines that Disney has really stepped up its food quality though. With quick service that includes fresh salads with turkey, fresh and quality sides, or delicious pork loin with BBQ sauce its much better than the microwaved burgers of years ago.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/napa-rose-anaheim"&gt;Napa Rose&lt;/a&gt; - On the other end of the spectrum from quick service is Disney&amp;rsquo;s much finer dining. This is an area that has always been quite nice, but has continued to be impressive. Only having the opportunity to dine here a couple times we can&amp;rsquo;t give a huge run down of the menu but will say the chef&amp;rsquo;s tasting and wine pairing is worth the experience.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/blue-bayou-anaheim"&gt;Blue Bayou&lt;/a&gt; - Blue bayou is good food and especially filling. Though where it really wins is the ambiance. It exists within the same setting as the Pirates of the Carribean and feels exactly like you&amp;rsquo;re on a bayou at night in Lousiana. Being one of the most sought after places make sure to make reservations early for here.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/little-red-wagon-anaheim"&gt;Little Red Wagon&lt;/a&gt; - If you want something quick, but amazing this is the go to. True old fashioned style corn dogs, fresh dipped in batter for hot, greasy deliciousness. Lines can get a little long here, but it moves quickly so don&amp;rsquo;t fret too much.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="drinking"&gt;
&lt;div&gt;
Drinking
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/carthay-circle-restaurant-anaheim"&gt;Carthay Circle Lounge&lt;/a&gt; - Carthay Circle is amazing for good, and their lounge is the spot for drinks, though their light dishes are quite nice as well. Their wine list is pretty good, though their cocktails are what you want here. Whether your preference is gin, whiskey, or champagne there&amp;rsquo;s a cocktail that will make all the screaming kids so much more bearable. They also have pretty good small bites here.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/cove-bar-anaheim"&gt;Cove Bar&lt;/a&gt; - On a warm day this is a great spot to sit and enjoy the pier area. They&amp;rsquo;ve got a few off menu drinks that make it both an adult but fun disney experience such as the black pearl (a long island with a twist). And if you&amp;rsquo;re hungry their lobster nachos are great.&lt;/li&gt;
&lt;/ul&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/about/disneyland/</guid></item><item><title>Craig's Huntsville Guide</title><link>/about/huntsville/</link><description>&lt;!-- raw HTML omitted --&gt;
&lt;h3 id="food"&gt;
&lt;div&gt;
Food
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://poboyfactory.com/"&gt;Po Boy Factory&lt;/a&gt; - This is a regular stop anytime I&amp;rsquo;m back in Huntsville. No pomp and circumstance at all, just great New Orleans food that measures up to much of it actually in New Orleans.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gibsonsbbq.com/"&gt;Gibsons&lt;/a&gt; - A clear staple of the south is BBQ, Gibsons does it quite well. The pulled pork is great, though my favorite is probably hitting up this place for breakfast. A good country ham biscuit which is just not a thing in most other parts of the country. Though if there for lunch or dinner make sure to pick up a slice of lemon icebox.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://plus.google.com/106762386505884740495/about?gl=us&amp;amp;hl=en"&gt;Little Paul&amp;rsquo;s&lt;/a&gt; - Within the family of the Gibson&amp;rsquo;s, Little Paul is the little brother. Very similar overall to Gibson&amp;rsquo;s, but in particular their smoked turkey here is amazing. Make sure to use the white barbecue sauce with it.&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;Mezza Luna&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;Bob Baumhauer&amp;rsquo;s Wings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="drinking"&gt;
&lt;div&gt;
Drinking
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;Amendment 21&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;Below the Radar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="what-to-do"&gt;
&lt;div&gt;
What to Do
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.earlyworks.com/"&gt;Early Works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://rocketcenter.com/"&gt;Space and Rocket Center&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/about/huntsville/</guid></item><item><title>Craig's New Orlenas Guide</title><link>/about/neworleans/</link><description>&lt;!-- raw HTML omitted --&gt;
&lt;h3 id="drinking--food"&gt;
&lt;div&gt;
Drinking / Food
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.thethreemuses.com/"&gt;Three Muses&lt;/a&gt; - One of the best bars in the area. Great cocktails including orange blossom sazerac. Their food is quite great as well, amazing things had there – lobster spring rolls, crispy pork belly, fish tacos, edamame with toasted sesame oil and star anise&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jacksonbrewerybar.com/"&gt;Jackson Brewery&lt;/a&gt; - As with many a pretty solid brewery with good food. The few isn&amp;rsquo;t quite traditional bar food, slants more to new orleans cuisine, but definitely have a few good items. The seared tuna salad is quite the helping of tuna and blackened alligator is delcious.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.patobriens.com/patobriens/"&gt;Pat Obriens&lt;/a&gt; - Well known for creating the hurricane. Their drinks are definitely sweet most and not the place for bargain drinks, but an evening in the courtyard or near the piano bar is a must do experience at least once if not many times in your lifetime.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://abita.com/"&gt;Abita&lt;/a&gt; - Its a bit of a drive out of town, but a nice different experience. All of their beers are of course nice and fresh here and a good selection of quality bar food here as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="food-only"&gt;
&lt;div&gt;
Food Only
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.saveur.com/article/Travels/saveur-100-crabby-jacks"&gt;Crabby Jacks&lt;/a&gt; - The place for a Po Boy. Their King Po Boy is ~ $12 and probably has 2 pounds of perfectly fried shrimp on it. Feels like a New Orleans &lt;a href="http://www.yelp.com/biz/city-cafe-northport"&gt;City Cafe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cafedumonde.com/"&gt;Cafe Du Monde&lt;/a&gt; - Sure its a given, but its still great. Beignets and Cafe Au Lait are a must anytime in new orleans.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.meltdownpops.com/"&gt;Meltdown popsicles&lt;/a&gt; - In several days I walked by this place many times before even realizing it was there, but what a treat. Gourmet popsicles, i.e. strawberry basil, vietnamese coffee, pineapple cilantro&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.angelobrocatoicecream.com/"&gt;Angelo Brocato Gelato&lt;/a&gt; - As I right this I&amp;rsquo;m returning from Florence Italy. There&amp;rsquo;s not many places I could say even come close to the gelato I consumed this past week, this place though was truly great. Of course still not quite as good, but it does come close.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="shops"&gt;
&lt;div&gt;
Shops
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.fleurdeparis.net/"&gt;Fleur de Paris&lt;/a&gt; - Awesome true milinery. No photos allowed. Hats are $$$$ but dresses can be fun and affordable for an amazing quality.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.goorin.com/"&gt;Goorin Brothers&lt;/a&gt; - With something that has a little more for the men as well here&amp;rsquo;s another hat shop. This has a variety of very style-ish both mens and womens hats if you can find the occasion to wear them.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.calicheandpao.com/"&gt;Caliche and Pao&lt;/a&gt; - For a city filled with local art and music this studio always jumps out to me. So much so I had to grab his well known set of light posts. The color and emotion within it captures the city so well.&lt;/li&gt;
&lt;/ul&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/about/neworleans/</guid></item><item><title>Craig's Paso Robles Guide</title><link>/about/pasorobles/</link><description>&lt;!-- raw HTML omitted --&gt;
&lt;h3 id="wineries"&gt;
&lt;div&gt;
Wineries
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.lonemadrone.com"&gt;Lone Madrone&lt;/a&gt; - Lone madrone is one of my favorite wineries in that area and possibly period. In particular they focus a bit more on blends and being a little crazier, their winemaker Neil is also the winemaker at Tablas Creek where he makes a slightly more traditional Rhone style. Their new space makes it even better overall, with burgers and music often on weekends. They also do a variety of ciders, which are all very well done and can be a nice change of scenary to all the wine. Though don&amp;rsquo;t be mistaken despite great burgers delicious cider the wines are truly the highlight. A few personal favorites are The Dodd, The Will and the Tannat, though nearly all are delectable. Tasting here is $5, bottles range from $10 for cider $20 for wine up to $60ish.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lcwine.com"&gt;Le Cuvier&lt;/a&gt; - Le Cuvier was a rare gem we immediately found in Paso. Their wines are a bit more on the lighter side over all with some acidity coming through, but at the same time very unique. Their pairing is all done with food and the food goes &lt;em&gt;perfectly&lt;/em&gt; with the wine. If you like wines that are meant to be done with food or slightly lighter/acidic overall its well worth the visit. Tasting is complimentary wines range from $30 towards $70 with most in the $50 range.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.shaleoakwinery.com"&gt;Shale Oak&lt;/a&gt; - Shale oak is newer on the list for me, upon entering it had a much more elaborate feel to many others in Paso Robles. They have a strong focus on sustainability, which is expressed in a nice flair of their tasting menu having seeds made into it which can sprout flowers. Though for all the focus on sustainability its not lost on their wines. Straight down the menu was delicious with their white blend, cab (lighter overall compared to bolder napa ones), and petite sirah all standing out. Tasting is $5, bottles range from $20 to $40.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.derbywineestates.com"&gt;Derby&lt;/a&gt; - Derby is much more of a grower than wine maker, making wine from only about 10% of the grapes themselves, however what they do make is all equisite. Several were in a bit of a Rhone style and done quite well, overall lighter on the earth in many cases. Their white was a great surprise more interesting than most, as was their sparkling. Tasting is $5, bottles range from $15 to $60.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.clayhousewines.com"&gt;Clayhouse&lt;/a&gt; - Clayhouse was largely the reason we started heading down to Paso Robles. Looking for something different from the common Sonoma/Napa wines we were drawn to them strictly for their Petite Sirah which is an extremely valuable buy for as delicious as it is. They have several others that I&amp;rsquo;d put within the good every day drinking range, as well as some nicer ones that hold up well to other wineries such as their reserve Petite Sirah and Malbec. Another great convenience is they&amp;rsquo;re located on the square and open later to make it a great end of day stop once you shouldn&amp;rsquo;t be driving. Tasting is $5, bottles range from $10 to $50&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.tablascreek.com"&gt;Tablas Creek&lt;/a&gt; - With the same winemaker as Lone Madrone its not a surprise that many of these are great, it also probably doesn&amp;rsquo;t hurt that many of their grapes came from Chateau de Beaucastel. Tablas Creek focuses especially on Rhone varietals and dry farming as much as they can in similar fashion to many Rhone wineries. Commonly their rated well in wine reviews, and its clear why with certain ones. While all of theirs don&amp;rsquo;t stand out the same on the list, over half of them delight everytime I&amp;rsquo;m there. Tasting is $5, bottles range from $15 to $80&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.westbergcellars.com"&gt;TurtleRock&lt;/a&gt; - Turtle rock was actually one of two labels by the wine maker. The turtle rock wines stood out a bit more, in particular their Rose was the highlight. A dry, but with great floral-ness and strawberry on the nose rose this was probably the favorite of many we&amp;rsquo;ve had down in Paso Robles.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.arroyorobles.com/"&gt;Arroyo Robles&lt;/a&gt; - Arroyo robles is often hit or miss for us. Often times its been great, such times include when they had their sparkling, their almond sparkling (sweet, but could pair great with a weekend brunch), their grenache which has some awesome spice. Though sometimes when they have a shorter list while still good some its not quite the same. Their Rose is a fun one in that its more orange than pink. Tasting is $5, bottles range from $15 to $50&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;Assucion Ridge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;Aaron&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;h3 id="food"&gt;
&lt;div&gt;
Food:
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.berryhillbistro.com"&gt;Berry Hill Bistro&lt;/a&gt; - Berry Hill is one of our regular stops when down in the area. Most commonly for lunch, a fairly casual bistro overall their sandwiches and salads are all delicious. Among delicious ones we&amp;rsquo;ve enjoyed were the Ahi Tuna, French Dip, and Swordfish steak, though nothing on the menu is likely to let you down.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.thomashillorganics.com"&gt;Thomas Hill Organics&lt;/a&gt; -&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;Yanagi&lt;/a&gt; - A reasonable sushi place overall. There&amp;rsquo;s nothing in particular that stands out about it, their rolls are more creative than traditional. Fish has always been fresh.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/amsterdam-coffee-house-paso-robles"&gt;Amsterdam Coffee House&lt;/a&gt; - This is a regular stop for us at least once often more when we visit. Their coffee is great, and the overall feel of the place is even better. Good choices in music, ample couch space, and great breakfast sandwiches make it an easy way to get going for the day.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.weolive.com"&gt;We Olive&lt;/a&gt; - This was a bit of a surprise find as we were searching for a place to get some good aged balsamic vinegar. The result was leaving with that plus some great olive oil and banana caramel. They&amp;rsquo;ve got nearly everything in the store available for tasting, ranging from olive oils to marinades.&lt;/li&gt;
&lt;/ul&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/about/pasorobles/</guid></item><item><title>Craig's San Francisco Guide</title><link>/about/sf/</link><description>&lt;h3 id="drinking"&gt;
&lt;div&gt;
Drinking
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/smugglers-cove-san-francisco#query:smugglers%20cover"&gt;Smugglers Cove&lt;/a&gt; - great rum bar. Punch bowls lit on fire.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/83-proof-san-francisco"&gt;83 Proof&lt;/a&gt; - Best cocktails in the city, if you go try a basil gimlet if you like basil at all and have not had one before.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/city-beer-store-san-francisco"&gt;City Beer Store&lt;/a&gt; - if you go one place for beer it has to be here. Its a beer store that also has about 10 taps, they&amp;rsquo;ve had beers made for them in collaboration with breweries before.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/the-trappist-oakland"&gt;The Trappist&lt;/a&gt; - Its in oakland, but convenient off of BART, would be second on my list likely of places to get beers at. I am to get here about once a month if possible, great beers of all varieties.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/21st-amendment-brewery-san-francisco"&gt;21st Amendment&lt;/a&gt; - I&amp;rsquo;m personally mixed on 21st amendment they do make some good beers and some people absolutely love the place. Probably the biggest up and coming brewery we have.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/anchor-brewing-company-san-francisco#query:21st%20Amendment%20Brewery"&gt;Anchor Brewing Company&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/hangar-one-alameda-3#query:distillery"&gt;Hangar One Distillery&lt;/a&gt; if you&amp;rsquo;re willing to take a ferry ride this is a great time, its about $10 to taste nearly 10 different liquors. They make hangar one vodka, lots of gins, some liquers (one with blue bottle coffee), and they were the first place to start making absinthe when it was legal again in the US.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="beer-and-food"&gt;
&lt;div&gt;
Beer and Food:
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/la-trappe-san-francisco-2"&gt;La Trappe&lt;/a&gt; - Great beer and food place, mostly of the belgian varietal. The beer selection is a good list, then they have a full binder of whats in bottles that you can order. If you go here the fries are a must and the belgian mayo goes great with them (the have something like 16 different sauces for the fries).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/suppenk%C3%BCche-san-francisco-2#query:walzwek"&gt;Suppenkuche&lt;/a&gt; - german food and boots, theres also the biergarten next door which if weather is nice its a great place to stop.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/the-monks-kettle-san-francisco"&gt;Monks Kettle&lt;/a&gt; - great beers, have only have the food once, was good but pricey for quality. Place is small and can get crowded.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/rogue-ales-public-house-san-francisco#query:21st%20Amendment%20Brewery"&gt;Rogue Public Alehouse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/toronado-san-francisco#query:21st%20Amendment%20Brewery"&gt;Toronado&lt;/a&gt; - food is from &lt;a href="(http://rosamundesausagegrill.com/)"&gt;a sausages place&lt;/a&gt; thats excellent - this is definitely a very affordable and great food option with enough food to fill you up for &amp;lt; $10 often&lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;Pyramid Brewery&lt;/a&gt; - Over by us in east bay a bart ride away but doable, standard pub food, but done pretty well.&lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;Elevation 66&lt;/a&gt; - Over by us as well, a super small microbrewery, they have great food as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="food"&gt;
&lt;div&gt;
Food
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/osha-thai-san-francisco-3"&gt;OSHA&lt;/a&gt; - great thai food&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/stone-korean-kitchen-san-francisco-2"&gt;Stone Korean Kitchen&lt;/a&gt; - korean, the kimchi friend rice is great&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/zero-zero-san-francisco"&gt;Zero Zero&lt;/a&gt; - pizza, thin crust style but San Francisco as well as in a bit foodie&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/colosseo-ristorante-and-bar-italiano-san-francisco"&gt;Colosseo&lt;/a&gt; - Italian place in north beach have eaten at a few times, quite a few people ate here when out at the wedding and loved it&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/sotto-mare-san-francisco"&gt;Sotto Mare&lt;/a&gt; - Smaller italian restaurant, more seafood. Feels like your italian grandmother serving you, when we had to wait 5 minutes they were immediately pouring us wine on the house and chatty/friendly as ever. (small)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/fish-sausalito"&gt;Fish&lt;/a&gt; - best seafood I&amp;rsquo;ve ever had, a laid back place but can be pricier with entrees anywhere from ~ $20 and up&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.yelp.com/biz/walzwerk-san-francisco#query:walzwek"&gt;Walzwerk&lt;/a&gt; - tiny little east german place with well good german beers. Not super pricey, but many entrees ~ $15 range and up&lt;/li&gt;
&lt;li&gt;SOMA Street Food Park - A food truck area that has about 10 trucks for lunch and 10 for dinner. Lots of variety here, heaters, tv&amp;rsquo;s, wifi, picnic benches and beer. Its a very SF take on food trucks.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dynamodonut.com/"&gt;Dynamo Donuts&lt;/a&gt; - Must try the bacon maple apple donut.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.kijirestaurant.com/"&gt;Kiji&lt;/a&gt; - California fusion sushi, really good sushi with some fun twists.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="activities"&gt;
&lt;div&gt;
Activities
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#"&gt;Exploratorium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;California academy of sciences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;Golden gate park&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#"&gt;Dolores park&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/about/sf/</guid></item><item><title>Craig's Sonoma and Napa Wine Guide</title><link>/about/wine/</link><description>&lt;p&gt;As a frequent visitor to Sonoma/Napa area and wine drinker I often guide friends and visitors when planning their wine country trip. Even when not playing tour guide I&amp;rsquo;ll give advice to those looking for a wine tasting experience. To simplify this I&amp;rsquo;ve written up some notes on many of the places I&amp;rsquo;ve visited on several occasions and have a a set of recommended agenda over &lt;a href="/about/wine_route/"&gt;here&lt;/a&gt; based on your preferences.&lt;/p&gt;
&lt;h3 id="imagery-winery"&gt;
&lt;div&gt;
Imagery Winery
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.imagerywinery.com/"&gt;Website&lt;/a&gt; | &lt;a href="http://www.yelp.com/biz/imagery-estate-winery-glen-ellen"&gt;Yelp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Large variety, great to expose those newer to wines to some approachable ones as well as having something for the experienced wine drinker. They&amp;rsquo;re often a bit more creative with their wines, sometimes doing grapes that are commonly blended by themselves and other times doing creative blends such as their code blue which is 80% Syrah and 20% blueberry wine (a wine that smells blueberry, tastes like a solid Syrah and finishes like blueberry, but not sweet at any point).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting ranges from $10-$20&lt;/li&gt;
&lt;li&gt;Bottles range from $20-$80&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="benziger-winery"&gt;
&lt;div&gt;
Benziger Winery
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Benziger, sister winery to Imagery, follows a more traditional approach to their wines. Here you&amp;rsquo;ll find great quality Chardonnay, Pinot, Bordeaux Blends and Cabs. They have a large emphasis on bio-dynamic wines (the next step up from organic) and are a great way to experience a variety of wines made in a traditional form. The grounds are also gorgeous providing a great place to picnic or enjoy a brick over pizza from them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting ranges from $10-$20&lt;/li&gt;
&lt;li&gt;Bottles range from $20-$80&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="kaz"&gt;
&lt;div&gt;
Kaz
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;The smallest winery in Sonoma valley, it embodies much of what Sonoma is compared to Napa. The owner and wine maker is often behind the bar guiding you through the menu and he alone is a great experience. As for the wines themselves, their reds are generally good but nothing to write home about typically in the category of a good table wine. However they do have a great selection of Port in particular a white, blush and red port, with the white port most recently tasting like Hazelnut.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $5&lt;/li&gt;
&lt;li&gt;Bottles range from $15-$40&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="gundlasch-bundshu"&gt;
&lt;div&gt;
Gundlasch Bundshu
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Gundlasch Bundshu is the oldest winery in Sonoma. They make many traditional wines including Chardonnay, Merlot, Pinot Noir. They also have a few that are done a less common way such as their Gewurtzaminer done in an off-dry fashion which is enjoyable for those that like sweet wines but also approachable for those that do not. Its a bit more nestled away than some of the other Sonoma wineries and provides a good experience of being hidden away from it all.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $10&lt;/li&gt;
&lt;li&gt;Bottles range from $20-$80&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="sojourn-cellars"&gt;
&lt;div&gt;
Sojourn Cellars
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Sojourn is more of the Napa experience within Sonoma, its a private tasting by reservation only. They&amp;rsquo;ll take you through their current releases of Pinot and Cab typically 3 of each. The tasting room is just off of the Sonoma square and feels as if you&amp;rsquo;re sitting around someone&amp;rsquo;s dining room table. For Pinot or Cab lovers both are great here.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting complimentary&lt;/li&gt;
&lt;li&gt;Bottles range from $40 and $70&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cline"&gt;
&lt;div&gt;
Cline
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Cline is one of the larger producers within Sonoma and is something you can generally find at local markets. The wines are generally approachable to those newer to wine, though there are also some for the more experienced as well. In particular they have a large variety of Zins ranging from fruity to spicy. They also have a variety of birds and animals on the property around their pond making it a good place to entertain kids for a bit.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting from $0 to $5&lt;/li&gt;
&lt;li&gt;Bottles range from $15 to $40&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="jacuzzi"&gt;
&lt;div&gt;
Jacuzzi
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Jacuzzi is the sister winery to Cline with Cline focusing on more French style Jacuzzi focuses on more Italian style. In addition to the traditional Sangiovese which is the primary wine in Chianti you&amp;rsquo;ll find Italian wines that are less common in California including Dolcetto, Nebbiolo, and Sagrantino. If you&amp;rsquo;re a fan of Italian wines this can be a good stop and with a large variety its likely to include something for people newer to wine as well. Also of note is they typically have a large selection of olive oils to taste for the non-drinkers in the party.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting from $0 to $5&lt;/li&gt;
&lt;li&gt;Bottles range from $15 to $40&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="viansa"&gt;
&lt;div&gt;
Viansa
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Falling somewhere between Jacuzzi with a strong selection of Italian wines and other more traditional California wineries with selections such as Cab, Chardonnay, and Zin this winery can have something for most. It also offers great views looking out over part of Sonoma valley. If stopping here try to do it earlier in the day as being one of the first places you encounter its likely to be crowded as the day progresses.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting from $10&lt;/li&gt;
&lt;li&gt;Bottles range from $20 to $60&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="gloria-ferrer"&gt;
&lt;div&gt;
Gloria Ferrer
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;One of the few places with a focus on champagne in Sonoma it also offers great views. While many of their champagnes you can find in local markets, the ones sold here are far less available. Their champages are sold by the glass, not the traditional wine tasting method of a sampling of several, this makes the experience a bit easier to enjoy the view from their patio looking out over part of Sonoma Valley.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Glasses from $5-$15&lt;/li&gt;
&lt;li&gt;Bottles from $15-$60&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="enkidu"&gt;
&lt;div&gt;
Enkidu
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Enkidu is a hidden spot in much of Sonoma as its a smaller tasting room that doesn&amp;rsquo;t draw much attention to itself. The people behind the bar will be 1 of a small handful that are very involved with the winery. Their wines can be enjoyed by many, but for more experienced wine drinkers that enjoy more body they have a great selection of Petite Syrah.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $10&lt;/li&gt;
&lt;li&gt;Bottles from $20-$50&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="st-francis"&gt;
&lt;div&gt;
St. Francis
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;St. Francis has a more common selection of California wines including a special focus Zin&amp;rsquo;s and Cab&amp;rsquo;s, offering a great quality of both. In addition to a standard tasting they have some options to do food and wine pairings as well to allow for a bit more of a special experience. The winery itself is reminiscent of a European Castle to a much smaller scale, a winery that while a bit isolated by itself feels like its been pulled right out of Napa.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $10-$30&lt;/li&gt;
&lt;li&gt;Bottles $20-$80&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="chateau-st-jean"&gt;
&lt;div&gt;
Chateau St. Jean
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Chateau St. Jean is also a more traditional winery though they offer a long list and broad selection. As a winery where you can find many of theirs in stores they go well beyond that at the Winery. With a large grounds area its a great spot for photos and to relax for a bit.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $5-$20&lt;/li&gt;
&lt;li&gt;Bottles $20-$80&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="kenwood"&gt;
&lt;div&gt;
Kenwood
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Kenwood winery also commonly found in stores has a much broader selection as well. While most of theirs are distributed at stores with about 30 wines on their tasting menu it offers a great chance to try a large variety of theirs. In particular their Reserve and Jack London series offer a variety of Cabs and Merlots at a price much more approachable than many Napa wineries.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $5&lt;/li&gt;
&lt;li&gt;Bottles $10-$60&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mayo-family"&gt;
&lt;div&gt;
Mayo Family
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;A smaller family winery with its tasting room separate from the vineyard its a nice spot for a variety of wines. Its one of a few places serving champagne and also has a couple of choices for dessert wines for those that prefer it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $5&lt;/li&gt;
&lt;li&gt;Bottles $15-$50&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="audelessa"&gt;
&lt;div&gt;
Audelessa
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Audelessa offers a more limited list typically only pouring 5 wines on a given day, though those 5 can be be well worth the trip. For Pinot or Cab lovers this is a great stop though they do venture beyond those as well. Additionally if you&amp;rsquo;re tired from standing at the counter all day they have some comfy seats assuming they&amp;rsquo;re not all full.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $10&lt;/li&gt;
&lt;li&gt;Bottles $25-$60&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="highway-12"&gt;
&lt;div&gt;
Highway 12
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Located right on the downtown square and sharing space with a store this one thats easy to miss, though its a shame to have that happen. They have a range of wines but focus mostly on their Cab and Bordeaux blends. They have a large range from approachable table wines up to their reserve Bordeaux. In particular their regular Bordeaux blend and Cab are an amazing bang for the buck that make you not feel bad opening one on a weeknight.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting complimentary to $5&lt;/li&gt;
&lt;li&gt;Bottles $10 to $80&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="adobe-road"&gt;
&lt;div&gt;
Adobe Road
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Located on the square with a range from beginner to some big cabs it has something thats pretty approachable for everyone. They can often get crowded so getting their earlier is advisable.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $10 to $20&lt;/li&gt;
&lt;li&gt;Bottles $10 to $80&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="hawkes"&gt;
&lt;div&gt;
Hawkes
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Just off the square this is slightly more hidden than some, but more discoverable than others. With a short list at a given point in time they have a strong focus on Cabs and is a great spot if you want to enjoy 2-3 within a tasting.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $10&lt;/li&gt;
&lt;li&gt;Bottles $20-$80&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="conn-creek"&gt;
&lt;div&gt;
Conn Creek
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Hidden off the main road of Napa this place has a more approachable feel than most Napa wineries. Despite not having an ornate entrance they deliver the same quality Cabs that so many other Napa wineries do at a fraction of the price. If you&amp;rsquo;re in Napa strictly for the quality of wines and want a place where you can relax this is a great stop.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $5-$10&lt;/li&gt;
&lt;li&gt;Bottles $20-$60&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="flora-springs"&gt;
&lt;div&gt;
Flora Springs
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Flora Springs is a pretty typical Napa experience with high ceilings and beautifully decorated their wines match what you&amp;rsquo;d expect. With a great selection of Cabs and other quality wines its a place to come if you want the stereotypical Napa experience. You&amp;rsquo;ll hear a bit more about the region and vineyard than the taste of the wine, but it doesn&amp;rsquo;t mean the wines are lacking.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $10-$20&lt;/li&gt;
&lt;li&gt;Bottles $25-$100&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="frogs-leap"&gt;
&lt;div&gt;
Frogs Leap
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Frogs Leaps is a pretty common Napa winery, though a bit more laid back than many. With a variety of great wines they&amp;rsquo;ll rotate through what they&amp;rsquo;re pouring pretty frequently. This can range from Rose to Zin to a common Napa Cab. Most wines are great quality and you have the ability to enjoy them in a variety of ways from at a sit down tasting to outdoors while playing Cornhole.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting $10-$30&lt;/li&gt;
&lt;li&gt;Bottles $20-$100&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="pina"&gt;
&lt;div&gt;
Pina
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Pina is what you expect in quality when it comes to great Napa cabs, but without so much of the pomp and circumstance. You taste in what is essentially a large warehouse that has a bit of a Kaz feel to it. The people behind the counter are usually older and simply there to pour and let you enjoy. Colors of their cab go from dark ink, to dark ink died with dark ink. Selection is mostly cabs, though they have a Chardonnay and late harvest as well.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting ~ $15&lt;/li&gt;
&lt;li&gt;Bottles $50 - $100&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="vjb"&gt;
&lt;div&gt;
VJB
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;For sometime I&amp;rsquo;d passed VJB up as it seemed very touristy, though sad it took so long to visit. They have several italian varietals, but of the ones on my list doing that style very possibly the best. They don&amp;rsquo;t have anything quite in the range of Super Tuscan or Brunellos, more on the softer side of Italian wines but they do them very well. Also a great area for ordering a pizza or from their cafe and enjoying the area&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting ~ $10&lt;/li&gt;
&lt;li&gt;Bottles $20 - $50&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="iron-horse"&gt;
&lt;div&gt;
Iron Horse
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.ironhorsevineyards.com/"&gt;Website&lt;/a&gt; - &lt;a href="http://www.yelp.com/biz/iron-horse-vineyards-sebastopol"&gt;Yelp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Among Gloria Ferrer, Domaine Carneros, and Chandon Iron Horse is hands down my favorite. They do both still and sparkling wines, though I can only comment about their sparkling. In getting there you feel as if you&amp;rsquo;re entirely off the beaten path. The tasting area is outside and overlooks the valley with gorgeous views. Their champagnes are great quality and many that may be harder to find in stores, including one commissioned especially by Disney for distribution in their parks which is quite great.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting ~ $10&lt;/li&gt;
&lt;li&gt;Bottles $30 - $80&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="morlet"&gt;
&lt;div&gt;
Morlet
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.morletwine.com/"&gt;Website&lt;/a&gt; | &lt;a href="http://www.yelp.com/biz/morlet-family-vineyards-st-helena"&gt;Yelp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is the most impressive wine experience I&amp;rsquo;ve ever had, and at the same time an extremely relaxed one. Their tasting is by appointment only and you should plan a few weeks out. The wine maker is a 4th generation wine maker and grower from France. He&amp;rsquo;s the wine maker for several other great quality wineries in the area as well. Easily some of the best wine I&amp;rsquo;ve tasted in my life, though it also comes with a price to match. Some wines of particular note include his White Bordeaux, his Syrah which smells just like fresh craked black pepper, and every single one of his cabs. A final note, the wine tasting is always conducted by him or his wife, both of whom are a wonderful experience and very different from each other.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting ~ $100&lt;/li&gt;
&lt;li&gt;Bottles $65-$300&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="salvestrin"&gt;
&lt;div&gt;
Salvestrin
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.salvestrinwinery.com/"&gt;Website&lt;/a&gt; | &lt;a href="http://www.yelp.com/biz/salvestrin-saint-helena"&gt;Yelp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This was an impromptu visit for us, they generally encourage a reservation though it seems easy enough to just stop in. Their environment was very relaxed as nice break from so much of Napa. Their lower end wines were definitely the ones that seemed to excel. The higher end into cab and estate wines were of good quality but didn&amp;rsquo;t quite hold up to some of the outstanding others in the Napa area. The great thing was their lower end ones stood out as great compared to so many surrounding wineries.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting ~ $20&lt;/li&gt;
&lt;li&gt;Bottles $25-$100&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="lasseter"&gt;
&lt;div&gt;
Lasseter
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.lasseterfamilywinery.com/"&gt;Website&lt;/a&gt; | &lt;a href="http://www.yelp.com/biz/lasseter-family-winery-glen-ellen"&gt;Yelp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you love anything about Disney or Pixar whats not to love about a winery by John Lasseter himself. In truth the winery is actually mostly a labor of love by his wife, or as he describes it &amp;ldquo;her movie&amp;rdquo;. Appointment only here definitely holds true, but as with most places that require an appointment it&amp;rsquo;s worth the coordination. Their tasting experience includes a quick walk through the grounds and barrel room, followed by a great tasting experience paired with cheeses and chocolates. They focus exclusively on Rhone style blends, all of which are quite excellent.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tasting ~ $25&lt;/li&gt;
&lt;li&gt;Bottles $25-$60&lt;/li&gt;
&lt;/ul&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/about/wine/</guid></item><item><title>Craig's Wine Tasting Routes</title><link>/about/wine_route/</link><description>&lt;p&gt;For those interested in tasting in Wine Country, but don&amp;rsquo;t want to read through the &lt;a href="/about/wine.html"&gt;full list&lt;/a&gt; and determine you&amp;rsquo;re own agenda here&amp;rsquo;s a few pre-set ones that can help you:&lt;/p&gt;
&lt;h2 id="personal-favorites"&gt;
&lt;div&gt;
Personal Favorites
&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Imagery&lt;/li&gt;
&lt;li&gt;Enkidu&lt;/li&gt;
&lt;li&gt;Benziger&lt;/li&gt;
&lt;li&gt;Sojourn&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="by-taste"&gt;
&lt;div&gt;
By Taste
&lt;/div&gt;
&lt;/h2&gt;
&lt;h3 id="wine-beginner"&gt;
&lt;div&gt;
Wine Beginner
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Cline&lt;/li&gt;
&lt;li&gt;Jacuzzi&lt;/li&gt;
&lt;li&gt;Gloria Ferrer&lt;/li&gt;
&lt;li&gt;Imagery&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="zin"&gt;
&lt;div&gt;
Zin
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Cline&lt;/li&gt;
&lt;li&gt;Kenwood&lt;/li&gt;
&lt;li&gt;St. Francis&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cabsbordeaux"&gt;
&lt;div&gt;
Cabs/Bordeaux
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Benziger&lt;/li&gt;
&lt;li&gt;Hawkes&lt;/li&gt;
&lt;li&gt;Highway 12&lt;/li&gt;
&lt;li&gt;Sojourn&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="petite-sirah"&gt;
&lt;div&gt;
Petite Sirah
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Imagery&lt;/li&gt;
&lt;li&gt;Enkidu&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="sweet-wines"&gt;
&lt;div&gt;
Sweet Wines
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Kaz (Port)&lt;/li&gt;
&lt;li&gt;Imagery (Port and Moscato)&lt;/li&gt;
&lt;li&gt;Mayo Family (Port and Late Harvest)&lt;/li&gt;
&lt;li&gt;Cline (Late Harvest)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="champagne"&gt;
&lt;div&gt;
Champagne
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Cline&lt;/li&gt;
&lt;li&gt;Jacuzzi&lt;/li&gt;
&lt;li&gt;Gloria Ferrer&lt;/li&gt;
&lt;li&gt;Kenwood&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="location"&gt;
&lt;div&gt;
Location
&lt;/div&gt;
&lt;/h2&gt;
&lt;h3 id="glen-ellen"&gt;
&lt;div&gt;
Glen Ellen
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Mayo Family&lt;/li&gt;
&lt;li&gt;Benziger&lt;/li&gt;
&lt;li&gt;Audulessa&lt;/li&gt;
&lt;li&gt;Imagery&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="highway-12"&gt;
&lt;div&gt;
Highway 12
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Imagery&lt;/li&gt;
&lt;li&gt;Enkidu&lt;/li&gt;
&lt;li&gt;Kenwood&lt;/li&gt;
&lt;li&gt;Chateau St. Jean&lt;/li&gt;
&lt;li&gt;Kaz&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="sonoma-downtown"&gt;
&lt;div&gt;
Sonoma Downtown
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Highway 12&lt;/li&gt;
&lt;li&gt;Hawkes&lt;/li&gt;
&lt;li&gt;Sojourn&lt;/li&gt;
&lt;li&gt;Gundlasch Bundshu&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="napa"&gt;
&lt;div&gt;
Napa
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Frogs Leap&lt;/li&gt;
&lt;li&gt;Conn Creek&lt;/li&gt;
&lt;li&gt;Flora Springs&lt;/li&gt;
&lt;/ul&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/about/wine_route/</guid></item><item><title>Past top content</title><link>/content/</link><description>&lt;ol&gt;
&lt;li&gt;&lt;a href="/2022/05/18/Unfinished-Business-with-Postgres/"&gt;Unfinished business with Postgres&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.craigkerstiens.com/2019/03/13/give-me-back-my-monolith/"&gt;Give me back my monolith&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/2013/03/31/why-i-blog/"&gt;Why I Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/2013/08/13/the-rule-of-thirds-followup/"&gt;Rule of thirds - roadmap planning&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id="popular-postgres-posts"&gt;
&lt;div&gt;
Popular Postgres Posts
&lt;/div&gt;
&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="/2012/04/30/why-postgres/"&gt;Why Postgres&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/2012/05/07/why-postgres-part-2/"&gt;Why Postgres Part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/2013/01/10/more-on-postgres-performance/"&gt;More on Postgres Performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/2012/10/01/understanding-postgres-performance/"&gt;Understanding Postgres Performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/2014/02/02/Examining-PostgreSQL-9.4/"&gt;Examining Postgres 9.4 - A first look&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/2013/02/13/How-I-Work-With-Postgres/"&gt;How I Work with Postgres&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/2013/11/18/best-postgres-feature-youre-not-using/"&gt;The best Postgres feature you&amp;rsquo;re not using - CTEs&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id="popular-marketing-posts"&gt;
&lt;div&gt;
Popular Marketing Posts
&lt;/div&gt;
&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="/2014/01/28/where-to-go-developer-content/"&gt;Where to go with developer content&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/2013/04/12/perspective-on-developer-marketing/"&gt;Doing Marketing (for developers) Differently&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/startupbootstrapped-marketing-recap/"&gt;Startup/Bootstrapped Marketing Recap&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id="popular-heroku-posts"&gt;
&lt;div&gt;
Popular Heroku Posts
&lt;/div&gt;
&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="/2011/11/07/how-heroku-works-maker-day/"&gt;How Heroku Works - Maker&amp;rsquo;s Day&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/2011/11/02/how-heroku-works-teams-tools/"&gt;How Heroku Works - Teams and Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/2011/12/02/how-heroku-works-hiring/"&gt;How Heroku Works - Hiring&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/content/</guid></item><item><title>Speaking</title><link>/about/speaking/</link><description>&lt;p&gt;I frequently give talks at various Tech conferences and meetups. I&amp;rsquo;ve given talks about Postgres/Databases, Python/Django, and cultural talks around effective engineering and product teams. Currently I&amp;rsquo;m interested on speaking related to Postgres, product management, and marketing for developer focused companies. If you&amp;rsquo;re interested in having me speak at a meetup or upcoming conference please reach out to me at craig.kerstiens at gmail.com.&lt;/p&gt;
&lt;h3 id="upcoming-talks"&gt;
&lt;div&gt;
Upcoming Talks
&lt;/div&gt;
&lt;/h3&gt;
&lt;h3 id="past-talks"&gt;
&lt;div&gt;
Past Talks
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;2013-04-02 - &lt;a href="http://greatwideopen.org/"&gt;Great Wide Open&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2013-04-04 - &lt;a href="www.ancientcityruby.com"&gt;Ancient City Ruby&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2013-04-15 - &lt;a href="https://us.pycon.org/2014/"&gt;PyCon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2014-02-23 - &lt;a href="http://pytennessee.org"&gt;PyTennessee&lt;/a&gt; - Going beyond limits of Django ORM with Postgres&lt;/p&gt;
&lt;p&gt;2014-02-01 - &lt;a href="https://fosdem.org/2014/"&gt;FOSDEM&lt;/a&gt; - Postgres Performance for Humans&lt;/p&gt;
&lt;p&gt;2013-11-13 - &lt;a href="http://www.salesforce.com/dreamforce/DF13/"&gt;Dreamforce&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2013-10-29 - &lt;a href="http://2013.pgconf.eu/"&gt;PgConf EU&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2013-09-17 - &lt;a href="http://postgresopen.org/2013/home/"&gt;Postgres Open&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2013-07-03 - &lt;a href="https://ep2014.europython.eu/en/"&gt;EuroPython&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2013-05-15 - &lt;a href="http://2013.djangocon.eu/"&gt;DjangoCon EU&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2013-04-04 - &lt;a href="http://mtnwestrubyconf.org/2013"&gt;Mountain West Ruby Conf&lt;/a&gt; - Postgres Demystified&lt;/p&gt;
&lt;p&gt;2013-03-18 - &lt;a href="http://us.pycon.org/2013/"&gt;PyCon US&lt;/a&gt; - Going beyond the Django ORM limitations with Postgres&lt;/p&gt;
&lt;p&gt;2013-02-02 - &lt;a href="http://fosdem.org/"&gt;Fosdem&lt;/a&gt; - &lt;a href="https://speakerdeck.com/craigkerstiens/postgres-demystified"&gt;Postgres Demystified&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2013-01-31 - &lt;a href="http://monkigras.com/"&gt;Monkigras&lt;/a&gt; - &lt;a href="https://speakerdeck.com/craigkerstiens/coffee-as-collaboration"&gt;Coffee as Collaboration&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2012-11-23 - &lt;a href="http://allyourbaseconf.com"&gt;All Your Base Conf&lt;/a&gt; - &lt;a href="https://speakerdeck.com/craigkerstiens/postgres-demystified"&gt;Postgres Demystified&lt;/a&gt; &lt;a href="http://vimeo.com/56682925"&gt;Video&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2012-11-15 - PyCon Argentina - &lt;a href="https://speakerdeck.com/craigkerstiens/django-apps-to-services"&gt;Django Apps to Services&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2012-11-13 - PgDay Argentina - &lt;a href="https://speakerdeck.com/craigkerstiens/postgres-demystified"&gt;Postgres Demystified&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2012-07-16 - OSCON - &lt;a href="https://speakerdeck.com/craigkerstiens/django-apps-to-services"&gt;Django Apps to Services&lt;/a&gt; &lt;a href="www.infoq.com/presentations/Postgres-Introduction"&gt;Video&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2012-06-28 - CloudEast - &lt;a href="https://speakerdeck.com/craigkerstiens/12-factor-for-python"&gt;12 Factor App&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2012-06-06 - DjangoCon EU - &lt;a href="https://speakerdeck.com/craigkerstiens/how-heroku-uses-heroku-to-build-heroku"&gt;How Heroku Uses Heroku to Build Heroku&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2012-04-15 - DjangoCong - &lt;a href="https://speakerdeck.com/craigkerstiens/djangocong-apps-to-services"&gt;Django Apps to Services&lt;/a&gt;&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/about/speaking/</guid></item><item><title>Tahoe Donner</title><link>/about/davos/</link><description>&lt;p&gt;Wifi: ToC&lt;/p&gt;
&lt;p&gt;Password: RollTide&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The wifi is an Eero setup near the TV with an extender plugged in upstairs in the loft.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Upon Arrival&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In winter&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Water will be off. In the mudroom in the wooden box is the water. You may be able to turn with hands only, though may need to use the wrench (laying right there on top) on the lower portion for extra leverage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before departing&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run dishes on rinse cycle - no need to run for a full cycle as we know coordinating turning the water off can be a pain&lt;/li&gt;
&lt;li&gt;Strip beds and leave dirty sheets in the laundry basket&lt;/li&gt;
&lt;li&gt;Lock back door (with foot lock)&lt;/li&gt;
&lt;li&gt;Lock front door&lt;/li&gt;
&lt;li&gt;Set thermostat to 55&lt;/li&gt;
&lt;li&gt;Open cabinets below the sinks&lt;/li&gt;
&lt;li&gt;Turn on sink to drain pipes&lt;/li&gt;
&lt;li&gt;Turn off water&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Water&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Main water shutdown is located in the wooden bench inside the mudroom.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="https://p197.p4.n0.cdn.getcloudapp.com/items/mXupdW75/4970fcad-b0f7-4ce5-9c20-5575dce7f136.jpeg?v=58e8e04d017d7179119738f3d38f1408" /&gt;&lt;/p&gt;
&lt;p&gt;If you have trouble turning use the wrench on the lower half for extra leverage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fireplace&lt;/strong&gt;:&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/about/davos/</guid></item><item><title>Travel/Wine</title><link>/about/travel_wine/</link><description>&lt;p&gt;Among my hobbies include food/wine/travel. Yes, wine is a hobby. As I know frequently enough get asked for recommendations on wine or when traveling I&amp;rsquo;ve started to condense this into various simple lists.&lt;/p&gt;
&lt;h3 id="city-guides"&gt;
&lt;div&gt;
City Guides
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="/about/huntsville/"&gt;Huntsville, AL&lt;/a&gt; - The place I still consider home, Rocket City, because well literally its where the rockets happen. Aside from the obvious space and rocket center there&amp;rsquo;s plenty of great southern food and times to be had.&lt;/p&gt;
&lt;p&gt;&lt;a href="/about/neworleans/"&gt;New Orleans&lt;/a&gt; - Theres possibly no greater city in the world for the trio of food, alcohol, and best of all music.&lt;/p&gt;
&lt;p&gt;&lt;a href="/about/pasorobles/"&gt;Paso Robles&lt;/a&gt; - A lesser visited wine region, though thats gradually changing with it winning wine region of the year in 2013. Much more relaxed than Napa or even Sonoma, yet great wine.&lt;/p&gt;
&lt;p&gt;&lt;a href="/about/sf/"&gt;San Francisco&lt;/a&gt; - Hopefully not much needs to be said about the city by the bay. A foodie city with lots of activities, and a woefully out of date list because the pace at which things change around here is exhausting.&lt;/p&gt;
&lt;p&gt;&lt;a href="/about/disneyland/"&gt;Disneyland&lt;/a&gt; - As my wife is a large Disney fan and now with a toddler, we frequent Disney. As we frequent it we tend to hit up a few of the extra things such as food and alcohol of course, here&amp;rsquo;s some of our faves.&lt;/p&gt;
&lt;h3 id="wine-guides"&gt;
&lt;div&gt;
Wine Guides
&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="/about/wine/"&gt;Wine reviews&lt;/a&gt; - Reviews of various wineries I&amp;rsquo;ve attended. Each winery has been attended more than once to have some comparisson between visits. Most are in the Sonoma region, though some outside.&lt;/p&gt;
&lt;p&gt;&lt;a href="/about/wine_route/"&gt;Wine routes&lt;/a&gt; - For many reading through lists and lists of reviews and creating your own trip to wine country can be tiring. Here&amp;rsquo;s a few pre-canned recommendations based on taste preference or location to make a visit to wine country easier.&lt;/p&gt;
&lt;p&gt;&lt;a href="/about/memberships/"&gt;My Memberships&lt;/a&gt; - Occasionally I&amp;rsquo;m asked where I&amp;rsquo;m a member at and where I frequent.&lt;/p&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/about/travel_wine/</guid></item><item><title>Wine Club Memberships</title><link>/about/memberships/</link><description>&lt;h3 id="sonomanapa"&gt;
&lt;div&gt;
Sonoma/Napa
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Benziger Winery - Good value, standard California varietals/blends&lt;/li&gt;
&lt;li&gt;Sojourn Cellars - Great pinots and cabs&lt;/li&gt;
&lt;li&gt;Iron Horse - Champagne, and great Pinot&lt;/li&gt;
&lt;li&gt;Piña - Grower in Napa, make great Napa cab at a better price point than much of Napa ($85 a bottle typically)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="paso-robles"&gt;
&lt;div&gt;
Paso Robles
&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Lone Madrone - Really fun set of blends here&lt;/li&gt;
&lt;li&gt;Tablas Creek - Classic Rhone style wines, good price point&lt;/li&gt;
&lt;/ul&gt;</description><author>CRAIG KERSTIENS</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">/about/memberships/</guid></item><item><title>About</title><link>https://liza.io/about/</link><description>&lt;p&gt;I am a Ukrainian/Australian/Swedish citizen from Kherson, Ukraine. I currently live in Uppsala, Sweden and work with autonomous agents.&lt;/p&gt;
&lt;p&gt;Before this I worked with WebRTC real-time video/audio APIs. Prior to that, I spent years in AAA game development working on backend, tooling, and core tech on game and engine teams.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://liza.io/about/</guid></item><item><title>Contact</title><link>https://liza.io/contact/</link><description>&lt;ul&gt;
&lt;li&gt;Email – me@liza.io&lt;/li&gt;
&lt;li&gt;Twitter – &lt;a href="http://www.twitter.com/lazer"&gt;@Lazer&lt;/a&gt; (on hiatus)&lt;/li&gt;
&lt;/ul&gt;</description><author>Liza Shulyayeva</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://liza.io/contact/</guid></item><item><title>Games</title><link>https://liza.io/games/</link><description>&lt;div id="games"&gt;
&lt;div id="game"&gt;	
	&lt;h2&gt;Adopt-A-Human&lt;/h2&gt;
	&lt;p id="role"&gt;[2021 - Embark Studios Game Jam]&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://liza.io/games/</guid></item><item><title>Life Simulation Repository</title><link>https://liza.io/life-simulation-repository/</link><description>&lt;p&gt;A compilation of interesting life simulation projects.&lt;/p&gt;
&lt;h2 id="blue-brain-project"&gt;Blue Brain Project&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://bluebrain.epfl.ch/"&gt;http://bluebrain.epfl.ch/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Reconstructing the brain piece by piece and building a virtual brain in a supercomputer—these are some of the goals of the Blue Brain Project.&amp;rdquo;&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://liza.io/life-simulation-repository/</guid></item><item><title>Rigel</title><link>https://liza.io/rigel/</link><description>&lt;p&gt;This page links to posts about our Maine Coon kitten Rigel and what has happened to him over the last few months.&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://liza.io/rigel/</guid></item><item><title>SnailLife</title><link>https://liza.io/snaillife/</link><description>&lt;p&gt;SnailLife (previously Gastropoda) is a snail breeding and care simulation written in Go. I've had this idea in my head for about ten years and it's gone through various iterations over this time. The most comprehensive prototype so far was done in PHP, and now a Go rewrite is under way.
&lt;p&gt;&lt;a href="https://liza.io/categories/snails/"&gt;Dev Log&lt;/a&gt;&lt;/p&gt;</description><author>Liza Shulyayeva</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://liza.io/snaillife/</guid></item><item><title>Archive</title><link>https://kyrofa.com/archives/</link><description>archives</description><author>kyrofa's blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://kyrofa.com/archives/</guid></item><item><title>Search</title><link>https://kyrofa.com/search/</link><description/><author>kyrofa's blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://kyrofa.com/search/</guid></item><item><title>Who is Kyle Fazzari?</title><link>https://kyrofa.com/about/</link><description>About Kyle Fazzari</description><author>kyrofa's blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://kyrofa.com/about/</guid></item><item><title>Search michael-lewis.com</title><link>https://michael-lewis.com/search/</link><description/><author>Michael Ian Lewis</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://michael-lewis.com/search/</guid></item><item><title/><link>https://one.mikro2nd.net/archetypes/pages/</link><description/><author>one mikro2nd</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://one.mikro2nd.net/archetypes/pages/</guid></item><item><title>seeds-are-concentrated-capital</title><link>https://one.mikro2nd.net/_drafts/seeds-are-concentrated-capital/</link><description>Social Capital Influence, connections to other people.
Seeds increase our social capital. We exchange seeds with other growers, we share our experiences of growing a particular variety of seed&amp;hellip;
&amp;ldquo;Oh, that one didn&amp;rsquo;t do very well for me last season. With all the humidity we had last Summer it was quite prone to all sorts of fungal diseases.&amp;rdquo; Here&amp;rsquo;s a great variety of dried Bean. I&amp;rsquo;ve been growing them for something like 25 years, now, and they&amp;rsquo;re my stable standby Bean because&amp;hellip;</description><author>one mikro2nd</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://one.mikro2nd.net/_drafts/seeds-are-concentrated-capital/</guid></item><item><title/><link>https://nyoom.io/credits/</link><description>&lt;h1 id="theme-terminal-by-panrhttpsgithubcompanrhugo-theme-terminal"&gt;Theme: &lt;a href="https://github.com/panr/hugo-theme-terminal"&gt;&lt;code&gt;terminal&lt;/code&gt; by panr&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The theme used here is a lightly modified version of &lt;code&gt;terminal&lt;/code&gt; with some small tweaks for performance and accessibility improvements.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id="renderer-hugohttpsgohugoio"&gt;Renderer: &lt;a href="https://gohugo.io/"&gt;&lt;code&gt;hugo&lt;/code&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Great for making static website like this one, and they&amp;rsquo;re super easy to cache.&lt;/p&gt;</description><author>Q. Marchi: A Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://nyoom.io/credits/</guid></item><item><title>About</title><link>https://nyoom.io/about/</link><description>&lt;h1 id="-heyo"&gt;👋 Heyo!&lt;/h1&gt;
&lt;p&gt;My name is Quinton, though commonly shortened to &amp;ldquo;Q&amp;rdquo;. I&amp;rsquo;m an engineer, and a aspirationalist.&lt;/p&gt;
&lt;p&gt;I enjoy long walks on the beach, &lt;del&gt;avoiding&lt;/del&gt; doing actual work, and being a troll on the internet. Currently based in the Greater-Denver area, though open to working from anywhere.&lt;/p&gt;
&lt;p&gt;This blog will try to document my shennanigans, and maybe some neat things along the way, and a broken device or two while I&amp;rsquo;m at it.&lt;/p&gt;</description><author>Q. Marchi: A Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://nyoom.io/about/</guid></item><item><title>Advanced Oracle SQL Tuning Training</title><link>https://tanelpoder.com/seminar/advanced-oracle-sql-tuning-training/</link><description>&lt;h3 id="training-overview"&gt;Training overview&lt;/h3&gt;
&lt;p&gt;This training session is entirely about making Oracle SQL execution run faster and more efficiently, understanding the root causes of SQL performance problems and Cost Based Optimizer misbehavior.&lt;/p&gt;
&lt;p&gt;Instead of looking into &lt;strong&gt;&lt;em&gt;increasing&lt;/em&gt;&lt;/strong&gt; system utilization (by using more buffer cache or more parallelism) as a first &amp;ldquo;tuning&amp;rdquo; choice, this class is mostly about &lt;strong&gt;&lt;em&gt;decreasing&lt;/em&gt;&lt;/strong&gt; resource usage of SQL execution plans by improving their shape and available access paths.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/seminar/advanced-oracle-sql-tuning-training/</guid></item><item><title>Confirmation</title><link>https://tanelpoder.com/seminar/success/</link><description>&lt;h4 id="success"&gt;Success!&lt;/h4&gt;
&lt;p&gt;Thanks for signing up for my class!&lt;/p&gt;
&lt;p&gt;You will receive an email with the payment receipt from Paypal that confirms your attendance. If you don&amp;rsquo;t see this email, please check your spam folder. In case of any questions, please email:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="mailto:seminars@poderc.com"&gt;seminars@poderc.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I will send out the slides, scripts and webinar joining instructions on the week before the class starts.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s more info and instructions on how to prepare for the online classes on the seminars page when you scroll down:&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/seminar/success/</guid></item><item><title>Practical Linux Performance and Application Troubleshooting Training</title><link>https://tanelpoder.com/seminar/practical-linux-performance-application-troubleshooting-training/</link><description>&lt;h3 id="training-overview"&gt;Training overview&lt;/h3&gt;
&lt;p&gt;The emphasis of this class is on practical &lt;em&gt;application troubleshooting&lt;/em&gt; and Linux OS performance tuning techniques. We’ll be using scripts and tools that you can use on any Linux machine whenever a problem happens, without having to first install a complex layer of monitoring tools.&lt;/p&gt;
&lt;p&gt;At the same time, we will go way beyond what the classic sysadmin tools (like vmstat, iostat, top) have to offer. We will use a process/thread-level sampling approach instead of system wide averages and drill down into application activity from there.&lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/seminar/practical-linux-performance-application-troubleshooting-training/</guid></item><item><title>Thanks for Signing Up!</title><link>https://tanelpoder.com/contact/thanks/</link><description>&lt;p&gt;You should receive a confirmation email, please check your spam folder if you don&amp;rsquo;t see one.&lt;/p&gt;
&lt;p&gt;Also check out my &lt;a href="https://youtube.com/TanelPoder"&gt;YouTube channel&lt;/a&gt;!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Tanel Põder&amp;rsquo;s contact details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://twitter.com/tanelpoder" target="_blank"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Connect with me in &lt;a href="https://www.linkedin.com/in/tanelpoder" target="_blank"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;My old slides are in &lt;a href="https://slideshare.net/tanelp" target="_blank"&gt;Slideshare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;My new slides are in &lt;a href="https://speakerdeck.com/tanelpoder" target="_blank"&gt;SpeakerDeck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Check out my &lt;a href="https://github.com/tanelpoder/" target="_blank"&gt;GitHub repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Subsbribe to the &lt;a href="https://tanelpoder.com/posts/index.xml"&gt;Atom RSS feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Email for business enquiries&lt;br /&gt;&lt;a href="mailto:tanel@tanelpoder.com"&gt;&lt;a href="mailto:tanel@tanelpoder.com"&gt;tanel@tanelpoder.com&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;</description><author>Tanel Poder Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://tanelpoder.com/contact/thanks/</guid></item><item><title>wset</title><link>https://philbooth.me/blog/tags/wset/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/wset/</guid></item><item><title>wine</title><link>https://philbooth.me/blog/tags/wine/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/wine/</guid></item><item><title>web-performance</title><link>https://philbooth.me/blog/tags/web-performance/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/web-performance/</guid></item><item><title>vim</title><link>https://philbooth.me/blog/tags/vim/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/vim/</guid></item><item><title>vectors</title><link>https://philbooth.me/blog/tags/vectors/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/vectors/</guid></item><item><title>traits</title><link>https://philbooth.me/blog/tags/traits/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/traits/</guid></item><item><title>tools</title><link>https://philbooth.me/blog/tags/tools/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/tools/</guid></item><item><title>text-editors</title><link>https://philbooth.me/blog/tags/text-editors/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/text-editors/</guid></item><item><title>testing</title><link>https://philbooth.me/blog/tags/testing/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/testing/</guid></item><item><title>teams</title><link>https://philbooth.me/blog/tags/teams/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/teams/</guid></item><item><title>system-design</title><link>https://philbooth.me/blog/tags/system-design/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/system-design/</guid></item><item><title>streams</title><link>https://philbooth.me/blog/tags/streams/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/streams/</guid></item><item><title>status</title><link>https://philbooth.me/blog/tags/status/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/status/</guid></item><item><title>startups</title><link>https://philbooth.me/blog/tags/startups/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/startups/</guid></item><item><title>sql</title><link>https://philbooth.me/blog/tags/sql/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/sql/</guid></item><item><title>shell</title><link>https://philbooth.me/blog/tags/shell/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/shell/</guid></item><item><title>search</title><link>https://philbooth.me/blog/tags/search/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/search/</guid></item><item><title>rust</title><link>https://philbooth.me/blog/tags/rust/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/rust/</guid></item><item><title>running</title><link>https://philbooth.me/blog/tags/running/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/running/</guid></item><item><title>reviews</title><link>https://philbooth.me/blog/tags/reviews/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/reviews/</guid></item><item><title>refactoring</title><link>https://philbooth.me/blog/tags/refactoring/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/refactoring/</guid></item><item><title>redis</title><link>https://philbooth.me/blog/tags/redis/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/redis/</guid></item><item><title>recursion</title><link>https://philbooth.me/blog/tags/recursion/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/recursion/</guid></item><item><title>promises</title><link>https://philbooth.me/blog/tags/promises/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/promises/</guid></item><item><title>postgres</title><link>https://philbooth.me/blog/tags/postgres/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/postgres/</guid></item><item><title>personal</title><link>https://philbooth.me/blog/tags/personal/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/personal/</guid></item><item><title>nodejs</title><link>https://philbooth.me/blog/tags/nodejs/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/nodejs/</guid></item><item><title>mysql</title><link>https://philbooth.me/blog/tags/mysql/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/mysql/</guid></item><item><title>mozilla</title><link>https://philbooth.me/blog/tags/mozilla/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/mozilla/</guid></item><item><title>monorepo</title><link>https://philbooth.me/blog/tags/monorepo/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/monorepo/</guid></item><item><title>mentoring</title><link>https://philbooth.me/blog/tags/mentoring/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/mentoring/</guid></item><item><title>macros</title><link>https://philbooth.me/blog/tags/macros/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/macros/</guid></item><item><title>linting</title><link>https://philbooth.me/blog/tags/linting/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/linting/</guid></item><item><title>json</title><link>https://philbooth.me/blog/tags/json/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/json/</guid></item><item><title>javascript</title><link>https://philbooth.me/blog/tags/javascript/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/javascript/</guid></item><item><title>how-to</title><link>https://philbooth.me/blog/tags/how-to/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/how-to/</guid></item><item><title>healthchecks</title><link>https://philbooth.me/blog/tags/healthchecks/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/healthchecks/</guid></item><item><title>gpt</title><link>https://philbooth.me/blog/tags/gpt/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/gpt/</guid></item><item><title>go</title><link>https://philbooth.me/blog/tags/go/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/go/</guid></item><item><title>gcp</title><link>https://philbooth.me/blog/tags/gcp/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/gcp/</guid></item><item><title>games</title><link>https://philbooth.me/blog/tags/games/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/games/</guid></item><item><title>gadgets</title><link>https://philbooth.me/blog/tags/gadgets/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/gadgets/</guid></item><item><title>fxa</title><link>https://philbooth.me/blog/tags/fxa/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/fxa/</guid></item><item><title>extreme-learning</title><link>https://philbooth.me/blog/tags/extreme-learning/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/extreme-learning/</guid></item><item><title>events</title><link>https://philbooth.me/blog/tags/events/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/events/</guid></item><item><title>embeddings</title><link>https://philbooth.me/blog/tags/embeddings/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/embeddings/</guid></item><item><title>dogs</title><link>https://philbooth.me/blog/tags/dogs/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/dogs/</guid></item><item><title>diagrams</title><link>https://philbooth.me/blog/tags/diagrams/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/diagrams/</guid></item><item><title>devops</title><link>https://philbooth.me/blog/tags/devops/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/devops/</guid></item><item><title>dependencies</title><link>https://philbooth.me/blog/tags/dependencies/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/dependencies/</guid></item><item><title>debugging</title><link>https://philbooth.me/blog/tags/debugging/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/debugging/</guid></item><item><title>databases</title><link>https://philbooth.me/blog/tags/databases/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/databases/</guid></item><item><title>data-visualization</title><link>https://philbooth.me/blog/tags/data-visualization/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/data-visualization/</guid></item><item><title>code-review</title><link>https://philbooth.me/blog/tags/code-review/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/code-review/</guid></item><item><title>cloud-run</title><link>https://philbooth.me/blog/tags/cloud-run/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/cloud-run/</guid></item><item><title>chess</title><link>https://philbooth.me/blog/tags/chess/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/chess/</guid></item><item><title>bfj</title><link>https://philbooth.me/blog/tags/bfj/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/bfj/</guid></item><item><title>automation</title><link>https://philbooth.me/blog/tags/automation/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/automation/</guid></item><item><title>async</title><link>https://philbooth.me/blog/tags/async/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/async/</guid></item><item><title>arrays</title><link>https://philbooth.me/blog/tags/arrays/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/arrays/</guid></item><item><title>ai</title><link>https://philbooth.me/blog/tags/ai/</link><description/><author>Phil Booth's Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://philbooth.me/blog/tags/ai/</guid></item><item><title>About</title><link>https://www.rasikjain.com/about/</link><description>I am Rasik Jain, a Software Engineer and Architect based in New Jersey. My current mission is building the next generation of intelligent, AI-native applications. I focus on the intersection of Generative AI and modern Front-end engineering, transforming complex machine learning capabilities into intuitive, high-performance user experiences.
Rather than building simple interfaces, I architect end-to-end systems that can reason. My daily work involves designing Agentic RAG pipelines and sophisticated AI Agents using LangChain and LangGraph.</description><author>Rasik Jain - Senior Architect | Generative AI &amp;amp; Full-Stack Engineering</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.rasikjain.com/about/</guid></item><item><title>Contact</title><link>https://www.rasikjain.com/contact/</link><description>Name  Email   Message  Send Message</description><author>Rasik Jain - Senior Architect | Generative AI &amp;amp; Full-Stack Engineering</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.rasikjain.com/contact/</guid></item><item><title>Resume</title><link>https://www.rasikjain.com/resume/</link><description>Please click to download PDF resume:</description><author>Rasik Jain - Senior Architect | Generative AI &amp;amp; Full-Stack Engineering</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.rasikjain.com/resume/</guid></item><item><title>About</title><link>https://prbs23.com/blog/about/</link><description>&lt;p&gt;I am a full time ASIC verification engineer, and part time electronics and software tinkerer. This blog is a place for me to write about pretty much any topic that piques my interest. Usually this ends up being a deep dive into a niche topic related to my work in ASIC design. However, I will be trying to post some content related to my non-professional software, firmware, and hardware projects. My goal here is to be informative, and I hope that someone learns something from my mistakes and the rat-holes I go down.&lt;/p&gt;
&lt;h4 id="what-is-prbs23"&gt;What is PRBS23:&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Pseudorandom_binary_sequence"&gt;Pseudorandom Binary Sequences&lt;/a&gt; are deterministic bit sequences with random-like statistical distributions, commonly generated by &lt;a href="https://en.wikipedia.org/wiki/Linear-feedback_shift_register"&gt;linear-feedback shift registers&lt;/a&gt; (LFSR). PRBS patterns are useful for many data integrity validation techniques, because they are usually random enough to be used in place of arbitrary data, but the whole pattern can be recreated from a single short seed. There are many different possible PRBS sequences, typically defined by length and polynomial representation, but one commonly used in high speed SERDES like PCIe, Ethernet, etc. is PRBS23. It is 2&lt;sup&gt;23&lt;/sup&gt; bit (~1 MBit) long sequence generated from the following polynomial: x&lt;sup&gt;23&lt;/sup&gt; + x&lt;sup&gt;28&lt;/sup&gt; + 1, and can be generated using the following LFSR circuit:


&lt;div class="box "&gt;
  &lt;figure&gt;
    &lt;div class="img"&gt;
      &lt;img alt="Fibonacci LFSR implementation of PRBS23 Generator" src="https://prbs23.com/blog/blog/about/prbs23_lfsr.svg" /&gt;
      &lt;a href="https://prbs23.com/blog/blog/about/prbs23_lfsr.svg"&gt;&lt;/a&gt;
    &lt;/div&gt;
      &lt;figcaption&gt;
          &lt;p&gt;
            Fibonacci LFSR implementation of PRBS23 Generator
            
          &lt;/p&gt;
      &lt;/figcaption&gt;
  &lt;/figure&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;As far as it&amp;rsquo;s relation to this blog, the name is just as random as a PRBS23. Many things here are related, but not in an obvious way&amp;hellip;&lt;/p&gt;</description><author>PRBS23</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://prbs23.com/blog/about/</guid></item><item><title>About me</title><link>https://adriano.fyi/aboutme/</link><description>&lt;p&gt;I live in my RV and spend most of my time running, climbing, cycling, snowboarding, and hiking. Pretty much anything in the outdoors keeps me happy. When I&amp;rsquo;m not doing any of those things, I&amp;rsquo;m probably writing software; see &lt;a href="https://adriano.fyi/projects/"&gt;my projects page&lt;/a&gt; for some of the things I like to work on.&lt;/p&gt;
&lt;p&gt;Email me at &lt;code&gt;hello@adriano.fyi&lt;/code&gt;.&lt;/p&gt;


&lt;a href="https://github.com/acaloiaro" rel="me"&gt;Github&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://indieweb.social/@adriano" rel="me"&gt;Mastodon&lt;/a&gt;


&lt;p&gt;How&amp;rsquo;s my cycling career going this week?&lt;/p&gt;</description><author>Adriano Caloiaro's personal blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://adriano.fyi/aboutme/</guid></item><item><title>Projects</title><link>https://adriano.fyi/projects/</link><description>&lt;p&gt;These are the projects I like to work on, in no particular order. I prefer to open source everything I do, but sometimes the end results is more important than the code, as is the case with &lt;a href="https://weride.social"&gt;We Ride&lt;/a&gt;. The code is a bit of a mess, and that&amp;rsquo;s ok! We Ride is a utility for me to find gravel and mountain bike partners.&lt;/p&gt;


&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;&lt;td&gt;Project&lt;/td&gt;&lt;td&gt;Description&lt;/td&gt;&lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;&lt;a href="https://adriano.fyi/projects/#bench-bicycle-workshop-manager-"&gt;Bench, Bicycle Workshop Manager&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Bench is a SaaS that streamlines managing bicycle workshops&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;&lt;a href="https://adriano.fyi/projects/#we-ride-"&gt;weride.social&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;A local-first social network for cyclists&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;&lt;a href="https://adriano.fyi/projects/#neoq-"&gt;neoq&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;A queue-agnostic background job framework for Go&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;&lt;a href="https://adriano.fyi/projects/#ess-"&gt;ess (env sample sync)&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Automatically keep .env files in sync with env.sample&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;&lt;a href="https://adriano.fyi/projects/#di-tui-"&gt;di-tui&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;A terminal UI player for di.fm premium&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;&lt;a href="https://adriano.fyi/projects/#hugo-htmx-go-template-"&gt;hugo-htmx-go-template&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;A Hugo project template for making dyanmic Hugo sites. It's weird and I love it&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;&lt;a href="https://adriano.fyi/projects/#open-glide-club-"&gt;Open glide club&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Paragliding and Hanggliding site directory using Open Street Map as the database.&lt;/td&gt;
    &lt;/tr&gt;
    
  &lt;/thead&gt;
&lt;/table&gt;


&lt;hr /&gt;
&lt;h2 id="bench-bicycle-workshop-manager-"&gt;&lt;a href="https://bench.bike"&gt;Bench, Bicycle Workshop Manager&lt;/a&gt; (&lt;a href="https://bench.bike"&gt;https://bench.bike&lt;/a&gt;)&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Bench&lt;/em&gt; is the only business venture that I&amp;rsquo;m comfortable sharing as one of my
&amp;ldquo;projects&amp;rdquo;. Primarily because it&amp;rsquo;s not only a business venture, but adjacent
to one of my primary pastimes &amp;ndash; cycling.  Noticing that bike shops almost
universally lack a good online service booking experience, I suspected that most
shops lacked good software systems for managing work orders.  So I started
talking to mechanics and shop owners about how they manage their bike workshops.
Eventually those conversations turned into Bench.&lt;/p&gt;
&lt;h2 id="we-ride-"&gt;We Ride (&lt;a href="https://weride.social"&gt;https://weride.social&lt;/a&gt;)&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;We Ride&lt;/em&gt; is a local-first &amp;ldquo;social network&amp;rdquo; for cyclists to find riding partners and join group rides in their local communities. While &amp;ldquo;social network&amp;rdquo; is roughly how I describe it, the end goal is not to have large network effects and claim a large percentage of the world&amp;rsquo;s cyclists. It&amp;rsquo;s a tool that I built for myself.&lt;/p&gt;
&lt;p&gt;Since I spend a lot of time traveling, I&amp;rsquo;m often in new places where I don&amp;rsquo;t know any other riders. So to find new gravel routes, or to safely ride more consequential mountain bike trails, I need to tap into local rider base and knowledge. So what I do is create a &lt;em&gt;We Ride&lt;/em&gt; and post about it in the local Strava clubs. Strava clubs tend to not get many posts, even if they&amp;rsquo;re over 1000 members, so when a new post arrives, a lot of people end up seeing it since by default Strava notifies club members of new posts.&lt;/p&gt;
&lt;p&gt;If there are no local Strava clubs, a lot of trail systems have a cork board for posting community information. &lt;em&gt;We Ride&lt;/em&gt; has a &amp;ldquo;Print QR Flier&amp;rdquo; feature that I can use to print fliers for trailhead cork boards.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;We Ride&lt;/em&gt; also allows you to upload GPX routes and import them from Strava, which is my preference since I like to build ride routes in Strava.&lt;/p&gt;
&lt;h2 id="neoq-"&gt;Neoq (&lt;a href="https://github.com/acaloiaro/neoq"&gt;https://github.com/acaloiaro/neoq&lt;/a&gt;)&lt;/h2&gt;
&lt;p&gt;Neoq is a background job framework for Go. Its central thesis is that background jobs shouldn&amp;rsquo;t impose any additional infrastructure on projects. Neoq could hardly be simpler to use and has a &lt;a href="https://pkg.go.dev/github.com/acaloiaro/neoq"&gt;pleasant API&lt;/a&gt; that makes writing background jobs dirt simple.&lt;/p&gt;
&lt;p&gt;Does the world need another background job framework? No, but I do. I work on a lot of projects that never see the light of day. I&amp;rsquo;m ok with that, especially when I haven&amp;rsquo;t put a lot of time into building infrastructure and code for them.&lt;/p&gt;
&lt;p&gt;What does that have to do with Neoq? Since Neoq can be backed by &lt;em&gt;in-memory&lt;/em&gt; queues, &lt;em&gt;Postgres&lt;/em&gt; queues, or &lt;em&gt;Redis&lt;/em&gt; queues &amp;ndash; it&amp;rsquo;s easy to match my application infrastructure with my background job infrastructure. For development/non-critical jobs, I use in-memory queues, and for &amp;ldquo;production&amp;rdquo; I use either Postgres or Redis, depending on my needs, without changing a line of application code. This makes it easy for me to get projects off the ground without creating additional infrastructure for background jobs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example in-memory job handler code&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-go"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #a6e22e;"&gt;ctx&lt;/span&gt; &lt;span style="color: #f92672;"&gt;:=&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;context&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;Background&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #a6e22e;"&gt;nq&lt;/span&gt;, &lt;span style="color: #a6e22e;"&gt;_&lt;/span&gt; &lt;span style="color: #f92672;"&gt;:=&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;neoq&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;New&lt;/span&gt;(&lt;span style="color: #a6e22e;"&gt;ctx&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #a6e22e;"&gt;nq&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;Start&lt;/span&gt;(&lt;span style="color: #a6e22e;"&gt;ctx&lt;/span&gt;, &lt;span style="color: #e6db74;"&gt;"hello_world"&lt;/span&gt;, &lt;span style="color: #a6e22e;"&gt;handler&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;New&lt;/span&gt;(&lt;span style="color: #66d9ef;"&gt;func&lt;/span&gt;(&lt;span style="color: #a6e22e;"&gt;ctx&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;context&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;Context&lt;/span&gt;) (&lt;span style="color: #a6e22e;"&gt;err&lt;/span&gt; &lt;span style="color: #66d9ef;"&gt;error&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  &lt;span style="color: #a6e22e;"&gt;j&lt;/span&gt;, &lt;span style="color: #a6e22e;"&gt;_&lt;/span&gt; &lt;span style="color: #f92672;"&gt;:=&lt;/span&gt; &lt;span style="color: #a6e22e;"&gt;jobs&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;FromContext&lt;/span&gt;(&lt;span style="color: #a6e22e;"&gt;ctx&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  &lt;span style="color: #a6e22e;"&gt;log&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;Println&lt;/span&gt;(&lt;span style="color: #e6db74;"&gt;"got job id:"&lt;/span&gt;, &lt;span style="color: #a6e22e;"&gt;j&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;ID&lt;/span&gt;, &lt;span style="color: #e6db74;"&gt;"messsage:"&lt;/span&gt;, &lt;span style="color: #a6e22e;"&gt;j&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;Payload&lt;/span&gt;[&lt;span style="color: #e6db74;"&gt;"message"&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  &lt;span style="color: #66d9ef;"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;}))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, all you have to do is add jobs.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-go"&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;&lt;span style="color: #a6e22e;"&gt;nq&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;Enqueue&lt;/span&gt;(&lt;span style="color: #a6e22e;"&gt;ctx&lt;/span&gt;, &lt;span style="color: #f92672;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #a6e22e;"&gt;jobs&lt;/span&gt;.&lt;span style="color: #a6e22e;"&gt;Job&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  &lt;span style="color: #a6e22e;"&gt;Queue&lt;/span&gt;: &lt;span style="color: #e6db74;"&gt;"hello_world"&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  &lt;span style="color: #a6e22e;"&gt;Payload&lt;/span&gt;: &lt;span style="color: #66d9ef;"&gt;map&lt;/span&gt;[&lt;span style="color: #66d9ef;"&gt;string&lt;/span&gt;]&lt;span style="color: #66d9ef;"&gt;interface&lt;/span&gt;{}{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;    &lt;span style="color: #e6db74;"&gt;"message"&lt;/span&gt;: &lt;span style="color: #e6db74;"&gt;"hello world"&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;  },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display: flex;"&gt;&lt;span&gt;})
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Neat.&lt;/p&gt;
&lt;h2 id="ess-"&gt;ess (&lt;a href="https://github.com/acaloiaro/ess"&gt;https://github.com/acaloiaro/ess&lt;/a&gt;)&lt;/h2&gt;
&lt;p&gt;env-sample-sync - automatically keep &lt;code&gt;.env&lt;/code&gt; files in sync with &lt;code&gt;env.sample&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Your &lt;code&gt;.env&lt;/code&gt; is always in &lt;code&gt;.gitignore&lt;/code&gt;, right&amp;hellip;right?! So how do you document what goes in it? Easy, add a file named &lt;code&gt;env.sample&lt;/code&gt; to your project and check it in to git.&lt;/p&gt;
&lt;p&gt;The problem is that &lt;code&gt;env.sample&lt;/code&gt; rarely gets updated when new environment variables are added to applications. &lt;code&gt;ess&lt;/code&gt; is the solution to that problem.&lt;/p&gt;
&lt;p&gt;Users can document &lt;code&gt;.env&lt;/code&gt; with comments and extensive details about how env var values should be structured, or where one can get/generate values for them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example &lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;APPLICATION_SECRET=supersekrit

# I got this FOO from the detailed process documented at: http:://wiki.example.com/how_to_get_a_foo
FOO="My super secret value for foo"
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;ess&lt;/code&gt; converts the above &lt;code&gt;.env&lt;/code&gt; example to:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;APPLICATION_SECRET=&amp;lt;APPLICATION_SECRET&amp;gt;

# I got this FOO from the detailed process documented at: http:://wiki.example.com/how_to_get_a_foo
FOO=&amp;lt;FOO&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After syncing the sample, it is immediately &lt;code&gt;git add&lt;/code&gt;ed, ensuring that your sample is always up to date with reality.&lt;/p&gt;
&lt;h2 id="di-tui-"&gt;di-tui (&lt;a href="https://github.com/acaloiaro/di-tui"&gt;https://github.com/acaloiaro/di-tui&lt;/a&gt;)&lt;/h2&gt;
&lt;p&gt;A terminal UI player for di.fm premium.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s not much more to say about this one. I use this virtually every day that I&amp;rsquo;m at my computer. I&amp;rsquo;m using it as I write this, in fact.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s totally unnecessary, and I love it.&lt;/p&gt;
&lt;p&gt;
&lt;input hidden="hidden" id="zoomCheck-34c17" type="checkbox" /&gt;
&lt;label for="zoomCheck-34c17"&gt;
  &lt;img alt="di-tui screenshot" class="zoomCheck" src="https://user-images.githubusercontent.com/3331648/81481515-bb668400-91fe-11ea-8a7c-39e1bb76c55d.png" /&gt;
&lt;/label&gt;
&lt;/p&gt;
&lt;h2 id="hugo-htmx-go-template-"&gt;hugo-htmx-go-template (&lt;a href="https://github.com/acaloiaro/hugo-htmx-go-template/"&gt;https://github.com/acaloiaro/hugo-htmx-go-template/&lt;/a&gt;)&lt;/h2&gt;
&lt;p&gt;Hugo is a fantastic static site build tool, and there are few things about Hugo that can or should be improved.&lt;/p&gt;
&lt;p&gt;The existence of this project template should in no way suggest that static sites should be dynamic. If your site can be static, it should be static.&lt;/p&gt;
&lt;p&gt;Yet there are instances in which one might need to add dynamic functionality to static Hugo sites. That is the purpose of this project template. Not to make all static sites dynamic, but to provide a simple solution to add islands of dynamic behavior to static sites.&lt;/p&gt;
&lt;p&gt;This allows us to build fast, easily deployable HTML content, but with the added ability of meeting a new class dynamic behavior needs.&lt;/p&gt;
&lt;p&gt;Example use cases include&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Contact forms&lt;/li&gt;
&lt;li&gt;Comment systems&lt;/li&gt;
&lt;li&gt;Up/Down vote systems&lt;/li&gt;
&lt;li&gt;You know &amp;hellip; website stuff&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You shouldn&amp;rsquo;t have to reach for a SaaS product to offer dynamic content on your static sites.&lt;/p&gt;
&lt;h2 id="open-glide-club-"&gt;Open glide club (&lt;a href="https://openglide.club/"&gt;https://openglide.club/&lt;/a&gt;)&lt;/h2&gt;
&lt;p&gt;Open glide club uses &lt;a href="https://openstreetmap.org"&gt;Open Street Map&lt;/a&gt; as a database of free flying (paraglide/hangglide) sites.&lt;/p&gt;
&lt;p&gt;I created OGC because the world is full of great gliding sites, and not all of them have a club that&amp;rsquo;s taken time to map them out. By using Open Street Map, OGC not only makes gliding site data available to the world in an accessible way, but creates the first frontend / renderer of free flight data that pilots have been adding to OSM for years.&lt;/p&gt;</description><author>Adriano Caloiaro's personal blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://adriano.fyi/projects/</guid></item><item><title>Where Am I?</title><link>https://adriano.fyi/whereami/</link><description/><author>Adriano Caloiaro's personal blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://adriano.fyi/whereami/</guid></item><item><title>Programming Is Completely Different Now</title><link>https://www.jamesonnetworks.com/blog/programming-is-completely-different-now/</link><description>&lt;h1&gt;Programming Is Completely Different Now&lt;/h1&gt;

&lt;p&gt;I started my development journey around 2010. At the time, I was working for a company doing desktop IT support. This was boring. The way I made the work interesting was to automate it as much as humanly possible. I was starting to flirt with programming as a career. I'd always been "good with computers", but had designs on becoming a doctor. It turned out being a doctor wasn't in the cards for me, but a career as a software developer was very attainable.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/programming-is-completely-different-now/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/programming-is-completely-different-now/</guid></item><item><title>What a Difference A Year Makes</title><link>https://www.jamesonnetworks.com/blog/what-a-difference-a-year-makes/</link><description>&lt;h1&gt;What a Difference A Year Makes&lt;/h1&gt;

&lt;p&gt;It has been awhile since I've been able to find the time and the motivation to write. The past year has been challenging for me and my family dealing with various health issues. It feels like the hits started around the last time of me posting last year and they really just didn't stop coming. Luckily, things are starting to slow down and we are hitting a more "usual" stride. I'm finally coming up for a little bit of air, and have decided that today will be my return to writing blog posts. And boy, what a world of change that has occurred in the last year. My darling profession is changed forever, and things are never going back.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/what-a-difference-a-year-makes/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/what-a-difference-a-year-makes/</guid></item><item><title>Retroarch and Mupen64 on Rasberry Pi 5</title><link>https://www.jamesonnetworks.com/blog/retroarch-and-mupen64-on-rasberry-pi-5/</link><description>&lt;h1&gt;Retroarch and Mupen64 on Rasberry Pi 5&lt;/h1&gt;

&lt;p&gt;I've got a birthday weekend coming up with lots of friends and I really wanted to get an emulator box up and going with four controllers so we could play games like we used to in 1996. I've had experience with Retropie since the Pi 3 days, and I figured a small sbc would be perfect for this task. While I've dipped my toes into emulation in the past, it has been a long time and my latest experience was installing retroarch on my AppleTV. The AppleTV is actually an amazing retro gaming platform. It's powerful enough for every generation of system I'm interested in and using 8BitDo controllers, my family and I have been having a wonderful time playing some older games. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/retroarch-and-mupen64-on-rasberry-pi-5/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/retroarch-and-mupen64-on-rasberry-pi-5/</guid></item><item><title>A Pancake Recipe</title><link>https://www.jamesonnetworks.com/blog/a-pancake-recipe/</link><description>&lt;h1&gt;A Pancake Recipe&lt;/h1&gt;

&lt;p&gt;This blog post will be a little bit different from other blog posts that I have created. I need to store a pancake recipe I've been making for my children on Sundays and I don't really have a better, searchable place for it. So, without further ado, here is a nice little pancake recipe:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/a-pancake-recipe/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/a-pancake-recipe/</guid></item><item><title>Keeping Pace With Software Updates - Introducing the Developer Multitool</title><link>https://www.jamesonnetworks.com/blog/keeping-pace-with-software-updates-introducing-the-developer-multitool/</link><description>&lt;h1&gt;Keeping Pace With Software Updates - Introducing the Developer Multitool&lt;/h1&gt;

&lt;p&gt;This blog is hosted on what is a relatively straightforward and standard stack. I use Django + Django Rest Framework for the backend and Angular for the frontend. There is a database hosted on Postgres. Celery runs a backend task box that depends on Redis. If you are keeping count, we are up to 5 critical dependencies. All of this runs on Linux (dependency 6). I maintain two environments, a staging and production environment. And finally I work on it across two computers, a desktop and a laptop. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/keeping-pace-with-software-updates-introducing-the-developer-multitool/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/keeping-pace-with-software-updates-introducing-the-developer-multitool/</guid></item><item><title>Tallying Up LOC Contributed</title><link>https://www.jamesonnetworks.com/blog/tallying-up-loc-contributed/</link><description>&lt;h1&gt;Tallying Up LOC Contributed&lt;/h1&gt;

&lt;p&gt;git log --author="myemail@example.com" --since="365 days ago" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "Added lines: %s\nRemoved lines: %s\nTotal lines: %s\n", add, subs, loc }'&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/tallying-up-loc-contributed/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/tallying-up-loc-contributed/</guid></item><item><title>Evolutionary Git Command - Git Switch</title><link>https://www.jamesonnetworks.com/blog/evolutionary-git-command-git-switch/</link><description>&lt;h1&gt;Evolutionary Git Command - Git Switch&lt;/h1&gt;

&lt;p&gt;Having been around for awhile, I've always used the command 'git checkout' to handle everything I do with branches. I was reading through a comments section the other day and discovered that there is a new kid on the block: git switch. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/evolutionary-git-command-git-switch/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/evolutionary-git-command-git-switch/</guid></item><item><title>Rewriting a Git Commit</title><link>https://www.jamesonnetworks.com/blog/rewriting-a-git-commit/</link><description>&lt;h1&gt;Rewriting a Git Commit&lt;/h1&gt;

&lt;p&gt;git rebase -r  \
    --exec 'git commit --amend --no-edit --reset-author'&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/rewriting-a-git-commit/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/rewriting-a-git-commit/</guid></item><item><title>Environment Variable Files and Commands</title><link>https://www.jamesonnetworks.com/blog/environment-variable-files-and-commands/</link><description>&lt;h1&gt;Environment Variable Files and Commands&lt;/h1&gt;

&lt;p&gt;export $(grep -v '^#' conf_file | xargs) &amp;&amp; my_command&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/environment-variable-files-and-commands/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/environment-variable-files-and-commands/</guid></item><item><title>Creating a VM using Ansible</title><link>https://www.jamesonnetworks.com/blog/creating-a-vm-using-ansible/</link><description>&lt;h1&gt;Creating a VM using Ansible&lt;/h1&gt;

&lt;p&gt;Today we’ll look at a piece of automation I’ve been working on over the last few months. Inspired by the ease at which I can spin up AWS instances with custom software using the AWS SDK, my goal was to port that functionality into my homelab environment. To accomplish this, I combine ansible with some python and shell scripting in order to automate creating new machine instances with a single command. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/creating-a-vm-using-ansible/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/creating-a-vm-using-ansible/</guid></item><item><title>Wrangling Software Complexity with FAI and Ansible</title><link>https://www.jamesonnetworks.com/blog/wrangling-software-complexity-with-fai-and-ansible/</link><description>&lt;h1&gt;Wrangling Software Complexity with FAI and Ansible&lt;/h1&gt;

&lt;p&gt;Over the last few months, I’ve been working on my local development stack. My previous blog post was about how modern software is driving me crazy. Since then, I’ve worked to modernize the way that I interact with software to get better gains from scaling my own work. This was all spurned by needing to move off of Ubuntu 20.04 for my production servers and switch over to Debian 12. This isn’t the only change required for my stack, but it was the most pressing. Changing the underlying OS changed Python versions and a few other dependencies that made migrating the code I’d written more challenging than I’d felt it needed to be. In order to tackle this challenge and hopefully minimize my pain in the future, I’ve made significant changes to the way I work.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/wrangling-software-complexity-with-fai-and-ansible/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/wrangling-software-complexity-with-fai-and-ansible/</guid></item><item><title>The Pace of Released Software Versions is Making Me Hate Software</title><link>https://www.jamesonnetworks.com/blog/the-pace-of-released-software-versions-is-making-me-hate-software/</link><description>&lt;h1&gt;The Pace of Released Software Versions is Making Me Hate Software&lt;/h1&gt;

&lt;p&gt;So far today I've spent hours working to update a python project that was gathering a little bit of dust. My aim was to get it deployed to the latest version of Python, Django, and Angular. My preferred stack up until this point has been Django Rest Framework for web services and Angular as an SPA for clients. I maintain several personal projects on this stack that each get varying amounts of love on any given weekend. This stack is built on a lot of dependencies. The churn in the underlying dependencies is becoming too much to handle. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-pace-of-released-software-versions-is-making-me-hate-software/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-pace-of-released-software-versions-is-making-me-hate-software/</guid></item><item><title>Avoiding Dependency Conflicts When Upgrading Angular</title><link>https://www.jamesonnetworks.com/blog/avoiding-dependency-conflicts-when-upgrading-angular/</link><description>&lt;h1&gt;Avoiding Dependency Conflicts When Upgrading Angular&lt;/h1&gt;

&lt;p&gt;There are a lot of times when upgrading Angular that certain libraries I'm using aren't released when new versions of angular are released. My current example is trying to use ng2-file-upload. The library tends to lag behind angular releases and the install of it starts to require forcing dependencies. You can override the angular versions it depends on in the package.json file:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/avoiding-dependency-conflicts-when-upgrading-angular/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/avoiding-dependency-conflicts-when-upgrading-angular/</guid></item><item><title>The Bash Wait Command</title><link>https://www.jamesonnetworks.com/blog/the-bash-wait-command/</link><description>&lt;h1&gt;The Bash Wait Command&lt;/h1&gt;

&lt;p&gt;Today I needed a script that would copy a file from AWS, but I needed to make sure script execution would stop until the file was copied. I discovered the 'wait' command and used it like this:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-bash-wait-command/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-bash-wait-command/</guid></item><item><title>Distribution Options for Cross Platform Python (Django) Apps - Part 1</title><link>https://www.jamesonnetworks.com/blog/distribution-options-for-cross-platform-python-(django)-apps-part-n/</link><description>&lt;h1&gt;Distribution Options for Cross Platform Python (Django) Apps - Part 1&lt;/h1&gt;

&lt;p&gt;I'm working on a method of distribution for a python application which I want to distribute in a cross-platform manner with the least headache possible. My goal is to target *nix environments, however, supporting both MacOS and BSD would be a huge plus. My application is a Django app which uses DRF and includes an Angular SPA frontend. The backend services it will require include Postgres, Redis, Celery, and two different spun off daemons (a celery scheduler and a celery worker alongside the django app itself). This is an architecture I tend to use with all of my side projects as I've found its the most batteries included setup that lets me scale to any needs I might have. I run all of this using SystemD init files and would like to keep that if possible. I don't want to use docker.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/distribution-options-for-cross-platform-python-(django)-apps-part-n/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/distribution-options-for-cross-platform-python-(django)-apps-part-n/</guid></item><item><title>Ignoring Local Changes Via Git</title><link>https://www.jamesonnetworks.com/blog/ignoring-local-changes-via-git/</link><description>&lt;h1&gt;Ignoring Local Changes Via Git&lt;/h1&gt;

&lt;p&gt;In one of my repos, I want to make some changes to a file locally, but I want to make sure those changes don't make it into my change set. My solution is to use git update-index. I can do so with the following command:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/ignoring-local-changes-via-git/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/ignoring-local-changes-via-git/</guid></item><item><title>Updating Angular's Minor Version</title><link>https://www.jamesonnetworks.com/blog/updating-angular's-minor-version/</link><description>&lt;h1&gt;Updating Angular&amp;#x27;s Minor Version&lt;/h1&gt;

&lt;p&gt;Today I was working on updating my angular minor version for a hobby project. I needed a command to quickly update and synchronize all of the deps to make my life a little easier. I found the following stack overflow post:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/updating-angular&amp;#x27;s-minor-version/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/updating-angular's-minor-version/</guid></item><item><title>Tracking Down a Rogue Byte Order Mark (BOM)</title><link>https://www.jamesonnetworks.com/blog/tracking-down-a-rogue-byte-order-mark-(bom)/</link><description>&lt;h1&gt;Tracking Down a Rogue Byte Order Mark (BOM)&lt;/h1&gt;

&lt;p&gt;AWS provides a service called EMR (elastic map reduce). This service is essentially a hadoop cluster configured via the AWS SDK which can run a series of steps. The steps that it run can either be homegrown jar files or commands / scripts passed to custom jars provided by Amazon. We are using the hadoop cluster to process very large data files (upwards of 6-10 gb gzipped and all text, so very large when decompressed). As a part of the cluster spin up, we pass in a series of steps that perform operations on a manifest of files that we have built elsewhere. These scripts are loaded onto S3 and referenced as steps in the EMR configuration. We encountered a problem with the scripts not running and being considered binary files on disk. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/tracking-down-a-rogue-byte-order-mark-(bom)/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/tracking-down-a-rogue-byte-order-mark-(bom)/</guid></item><item><title>A Useful SystemD Alias</title><link>https://www.jamesonnetworks.com/blog/a-useful-systemd-alias/</link><description>&lt;h1&gt;A Useful SystemD Alias&lt;/h1&gt;

&lt;p&gt;function follow() {
    sudo journalctl -u "$1@$1-*" -f -n 10000
}&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/a-useful-systemd-alias/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/a-useful-systemd-alias/</guid></item><item><title>Tailing a Log in Powershell</title><link>https://www.jamesonnetworks.com/blog/tailing-a-log-in-powershell/</link><description>&lt;h1&gt;Tailing a Log in Powershell&lt;/h1&gt;

&lt;p&gt;Get-Content -Path "C:\path\to\log-file.log" -Tail 50 -Wait&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/tailing-a-log-in-powershell/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/tailing-a-log-in-powershell/</guid></item><item><title>Leveraging AWS Secrets to Remove Hard Coded AWS Access Tokens</title><link>https://www.jamesonnetworks.com/blog/leveraging-aws-secrets-to-remove-hard-coded-aws-access-tokens/</link><description>&lt;h1&gt;Leveraging AWS Secrets to Remove Hard Coded AWS Access Tokens&lt;/h1&gt;

&lt;p&gt;We all know that AWS tokens are a source of potential breaches. In fact, it's been &lt;a href="https://www.bleepingcomputer.com/news/security/thousands-of-github-aws-docker-tokens-exposed-in-travis-ci-logs/"&gt;reported&lt;/a&gt; and &lt;a href="https://www.bleepingcomputer.com/news/security/pypi-python-packages-caught-sending-stolen-aws-keys-to-unsecured-sites/"&gt;shown&lt;/a&gt; &lt;a href="https://blog.gitguardian.com/thinking-like-a-hacker-aws-keys-in-private-repos/"&gt;time&lt;/a&gt; and &lt;a href="https://thehackernews.com/2022/09/over-1800-android-and-ios-apps-found.html"&gt;time&lt;/a&gt; again that these kinds of breaches happen &lt;a href="https://firewalltimes.com/amazon-web-services-data-breach-timeline/"&gt;all the time&lt;/a&gt;. So as developers, it is important to protect these keys to the kingdom and use best practices to rotate and be able to rotate these secrets as needed. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/leveraging-aws-secrets-to-remove-hard-coded-aws-access-tokens/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/leveraging-aws-secrets-to-remove-hard-coded-aws-access-tokens/</guid></item><item><title>Using the C# SDK to Copy S3 Files Between AWS Instances</title><link>https://www.jamesonnetworks.com/blog/using-the-c-sdk-to-copy-s3-files-between-aws-instances/</link><description>&lt;h1&gt;Using the C# SDK to Copy S3 Files Between AWS Instances&lt;/h1&gt;

&lt;p&gt;This can be accomplished using the C# SDK and a method that will take our two client instances, our src and destination bucket information, and then performing a mulitpart upload in order to move the bits from one bucket into the other.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/using-the-c-sdk-to-copy-s3-files-between-aws-instances/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/using-the-c-sdk-to-copy-s3-files-between-aws-instances/</guid></item><item><title>Converting an SVG to a PNG Using The Browser</title><link>https://www.jamesonnetworks.com/blog/converting-an-svg-to-a-png-using-the-browser/</link><description>&lt;h1&gt;Converting an SVG to a PNG Using The Browser&lt;/h1&gt;

&lt;p&gt;A part of a change I was making involved exporting a PNG from the browser to a native email client using the Ionic Framework. My source image was an SVG file, and the SVG file did not render appropriately in many email clients. Since the SVG did not work, I needed to convert the SVG to a PNG file. I was able to do this using only natively available browser API calls. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/converting-an-svg-to-a-png-using-the-browser/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/converting-an-svg-to-a-png-using-the-browser/</guid></item><item><title>Migrating from Cordova to Capacitor - Part I</title><link>https://www.jamesonnetworks.com/blog/migrating-from-cordova-to-capacitor-part-i/</link><description>&lt;h1&gt;Migrating from Cordova to Capacitor - Part I&lt;/h1&gt;

&lt;p&gt;At my job one of my responsibilities is maintaining an Ionic framework app that we use to deliver content to various customers. The app was built using Ionic 3 and over time has migrated to latest Angular and ionic 5. Over time, some cruft has built up in the Cordova world, and Google's movement to the Level 31 API at a minimum means that some Cordova plugins have started to fail in strange ways. One deprecation is the removal of the app splash screen, but several other plugins have started to throw errors as well. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/migrating-from-cordova-to-capacitor-part-i/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/migrating-from-cordova-to-capacitor-part-i/</guid></item><item><title>Solving a Cordova Build Issue</title><link>https://www.jamesonnetworks.com/blog/solving-a-cordova-build-issue/</link><description>&lt;h1&gt;Solving a Cordova Build Issue&lt;/h1&gt;

&lt;p&gt;When running the command to add android assets to a cordova build, once those assets are loading I see an error in which the Android SDK cannot be found using Android Studio. The solution is to specify the SDK location in a Properties File.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/solving-a-cordova-build-issue/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/solving-a-cordova-build-issue/</guid></item><item><title>Thinking In APIs: Part I</title><link>https://www.jamesonnetworks.com/blog/thinking-in-apis:-part-i/</link><description>&lt;h1&gt;Thinking In APIs: Part I&lt;/h1&gt;

&lt;p&gt;Today I want to discuss what it means to both "think" in APIs and design software with an API in mind. A lot of what I'm going to discuss here will combine thinking from Test Driven Development with the knowledge I have gained from a decade of working on designing APIs. When a software developer works on any piece of software, they are designing an API that will will be consumed by another entity, either a computer or another developer whether they know it at the time or not. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/thinking-in-apis:-part-i/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/thinking-in-apis:-part-i/</guid></item><item><title>Pruning Docker</title><link>https://www.jamesonnetworks.com/blog/pruning-docker/</link><description>&lt;h1&gt;Pruning Docker&lt;/h1&gt;

&lt;p&gt;So the other day my docker build server ran out of disk space. Usually, I use the following command to reduce its disk space usage:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/pruning-docker/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/pruning-docker/</guid></item><item><title>Pruning Docker</title><link>https://www.jamesonnetworks.com/blog/pruning-docker/</link><description>&lt;h1&gt;Pruning Docker&lt;/h1&gt;

&lt;p&gt;So the other day my docker build server ran out of disk space. Usually, I use the following command to reduce its disk space usage:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/pruning-docker/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/pruning-docker/</guid></item><item><title>Tracking Down Disk Space Usage</title><link>https://www.jamesonnetworks.com/blog/tracking-down-disk-space-usage/</link><description>&lt;h1&gt;Tracking Down Disk Space Usage&lt;/h1&gt;

&lt;p&gt;I'd like to start off by giving credit to the following SO post:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/tracking-down-disk-space-usage/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/tracking-down-disk-space-usage/</guid></item><item><title>Removing the Clutter from a New Edge Tab</title><link>https://www.jamesonnetworks.com/blog/removing-the-clutter-from-a-new-edge-tab/</link><description>&lt;h1&gt;Removing the Clutter from a New Edge Tab&lt;/h1&gt;

&lt;p&gt;If you are anything like me, you get into a programming flow and your productivity blooms. Once this happens, anything that seeks attention becomes a liability to that productivity. The worst offender is the Edge browser Microsoft provides. Edge, by default, will display a news feed whenever you open a new tab. So if you are working on a problem and you are opening a new tab to search for something related to that problem, you get berated by the latest daily headlines, typically with an attention grabbing image displayed across the top of the page. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/removing-the-clutter-from-a-new-edge-tab/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/removing-the-clutter-from-a-new-edge-tab/</guid></item><item><title>Github's UI Based Conflict Resolution Can Cause Problems</title><link>https://www.jamesonnetworks.com/blog/github's-ui-based-conflict-resolution-can-cause-problems/</link><description>&lt;h1&gt;Github&amp;#x27;s UI Based Conflict Resolution Can Cause Problems&lt;/h1&gt;

&lt;p&gt;When using the Github web-based conflict resolution, a user can mistakenly have branches merged that they did not intend to merge. Because the mistake occurs on the source-of-truth copy of the repository, a user does not have a chance to correct the issue before other team members could pull the errant branch. Github's live editing tools should NEVER be used on branches which are shared. The potential problems created are difficult to correct. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/github&amp;#x27;s-ui-based-conflict-resolution-can-cause-problems/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/github's-ui-based-conflict-resolution-can-cause-problems/</guid></item><item><title>Angular Issue Updating a Library from Version 10 to 13</title><link>https://www.jamesonnetworks.com/blog/angular-issue-updating-a-library-from-version-10-to-13/</link><description>&lt;h1&gt;Angular Issue Updating a Library from Version 10 to 13&lt;/h1&gt;

&lt;p&gt;I ran into a bug over the weekend updating some Angular dependencies in a few different projects. The Code Blogs has both a Django server component and an Angular library component that people can use to build a content management system. It powers this blog!&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/angular-issue-updating-a-library-from-version-10-to-13/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/angular-issue-updating-a-library-from-version-10-to-13/</guid></item><item><title>Visual Block Editing With Vim</title><link>https://www.jamesonnetworks.com/blog/visual-block-editing-with-vim/</link><description>&lt;h1&gt;Visual Block Editing With Vim&lt;/h1&gt;

&lt;p&gt;It's possible and easy to edit in block mode with Vim. The tricky part that I always forget is the fact that you need to use the Visual Block mode. You can enter this mode using the key combo:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/visual-block-editing-with-vim/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/visual-block-editing-with-vim/</guid></item><item><title>The RIGHT Way to Install Pip on Windows</title><link>https://www.jamesonnetworks.com/blog/the-right-way-to-install-pip-on-windows/</link><description>&lt;h1&gt;The RIGHT Way to Install Pip on Windows&lt;/h1&gt;

&lt;p&gt;Download Python from Python.org site and then add the path of the Pip.exe which is installed with Python to your user's PATH environment variables. You don't need to use the pip install script from pypa.io. The pip executable is installed with the released version of Python.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-right-way-to-install-pip-on-windows/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-right-way-to-install-pip-on-windows/</guid></item><item><title>The RIGHT Way to Install Pip on Windows</title><link>https://www.jamesonnetworks.com/blog/the-right-way-to-install-pip-on-windows/</link><description>&lt;h1&gt;The RIGHT Way to Install Pip on Windows&lt;/h1&gt;

&lt;p&gt;Download Python from Python.org site and then add the path of the Pip.exe which is installed with Python to your user's PATH environment variables. You don't need to use the pip install script from pypa.io. The pip executable is installed with the released version of Python.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-right-way-to-install-pip-on-windows/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-right-way-to-install-pip-on-windows/</guid></item><item><title>Cryptic Errors I've Seen as a Complete Noob in Objective C</title><link>https://www.jamesonnetworks.com/blog/cryptic-errors-i've-seen-as-a-complete-noob-in-objective-c/</link><description>&lt;h1&gt;Cryptic Errors I&amp;#x27;ve Seen as a Complete Noob in Objective C&lt;/h1&gt;

&lt;p&gt;In my free time I'm working on implementing a low level spec that involves encoding and decoding strings with a custom alphabet. While this doesn't sound too challenging, the reality is I'm a UI developer by trade, and lately I've only done work on state management and untangling insane webpack and Angular build errors with a variety of frameworks and environments. My skills with binary, strings, C, and everything else low level are very rusty. Aside from some MIPS programming I did in my graduate classes, I really haven't ever had to mess with low level programming besides knowing the concepts. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/cryptic-errors-i&amp;#x27;ve-seen-as-a-complete-noob-in-objective-c/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/cryptic-errors-i've-seen-as-a-complete-noob-in-objective-c/</guid></item><item><title>Finding Your iPhones Unique Identifier (UDID)</title><link>https://www.jamesonnetworks.com/blog/finding-your-iphones-unique-identifier-(udid)/</link><description>&lt;h1&gt;Finding Your iPhones Unique Identifier (UDID)&lt;/h1&gt;

&lt;p&gt;In Xcode goto Window -&gt; Devices and Simulators with the device connected. The UDID is displayed on the device dialog as Identifier.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/finding-your-iphones-unique-identifier-(udid)/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/finding-your-iphones-unique-identifier-(udid)/</guid></item><item><title>A Note for Others Pulled from the Play Store</title><link>https://www.jamesonnetworks.com/blog/a-note-for-others-pulled-from-the-play-store/</link><description>&lt;h1&gt;A Note for Others Pulled from the Play Store&lt;/h1&gt;

&lt;p&gt;&lt;ul&gt;
&lt;li&gt;Remove an offending APK 100% by rolling the new version over the top of all release tracks&lt;/li&gt;
&lt;li&gt;Some Appeal links from Google &lt;a href="https://support.google.com/googleplay/android-developer/troubleshooter/2993242?hl=en&amp;amp;ref_topic=3453554"&gt;do not work&lt;/a&gt;. A working link is &lt;a href="https://support.google.com/googleplay/android-developer/contact/emailappeals?ts=BR"&gt;here.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Never delete the Email Account associated Developer Account for Google Play. You will probably never get emails from Google Play again&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/a-note-for-others-pulled-from-the-play-store/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/a-note-for-others-pulled-from-the-play-store/</guid></item><item><title>A Poor iOS Build Error With The New Build System</title><link>https://www.jamesonnetworks.com/blog/a-poor-ios-build-error-with-the-new-build-system/</link><description>&lt;h1&gt;A Poor iOS Build Error With The New Build System&lt;/h1&gt;

&lt;p&gt;Today I ran into an error building a SwiftUI project with Xcode. The error I received was a bit obfuscated, so I thought I'd mention it in case anyone else runs into it. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/a-poor-ios-build-error-with-the-new-build-system/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/a-poor-ios-build-error-with-the-new-build-system/</guid></item><item><title>A Nice Powershell Extension Replace One Liner</title><link>https://www.jamesonnetworks.com/blog/a-nice-powershell-extension-replace-one-liner/</link><description>&lt;h1&gt;A Nice Powershell Extension Replace One Liner&lt;/h1&gt;

&lt;p&gt;dir *.html | rename-item -newname { [io.path]::ChangeExtension($_.name, "anyExtension") }&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/a-nice-powershell-extension-replace-one-liner/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/a-nice-powershell-extension-replace-one-liner/</guid></item><item><title>Creating Zip File Archives with Python</title><link>https://www.jamesonnetworks.com/blog/creating-zip-file-archives-with-python/</link><description>&lt;h1&gt;Creating Zip File Archives with Python&lt;/h1&gt;

&lt;p&gt;Over the weekend I was working on creating an archive of folders and files that I store in a Django Rest Framework based application. I use Python on the backend and mount a directory that is stored on a NAS. I've been SSHing into the server to pull the files and logs that the DRF app creates, but I wanted to change this so I could do everything through the web app.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/creating-zip-file-archives-with-python/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/creating-zip-file-archives-with-python/</guid></item><item><title>The Anatomy of a Failed Software Project</title><link>https://www.jamesonnetworks.com/blog/the-anatomy-of-a-failed-software-project/</link><description>&lt;h1&gt;The Anatomy of a Failed Software Project&lt;/h1&gt;

&lt;p&gt;At this point in my career, I've participated in numerous projects. I've ended up working on projects that became abject failures. This post will try to capture what I think ultimately led to the project failures and try to lay out advice to future or current programmers on challenging products that have a chance of collapsing. Every collapsing project shared the following traits: stack choices which did not set up the team for success, a fundamental lack of understanding the constraints of technology at a high level for stakeholders, and ignoring progress reports of employees who are actually engaging in the work.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-anatomy-of-a-failed-software-project/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-anatomy-of-a-failed-software-project/</guid></item><item><title>Reflections on Ten Years of Programming (Part 1)</title><link>https://www.jamesonnetworks.com/blog/reflections-on-ten-years-of-programming-(part-1)/</link><description>&lt;h1&gt;Reflections on Ten Years of Programming (Part 1)&lt;/h1&gt;

&lt;p&gt;This will be series on all of the knowledge I have gained over the course of ten years in programming. I'm going to try and start with some of the largest topics and then move onto simpler items. The first and foremost piece of advice I can give upcoming developers is:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/reflections-on-ten-years-of-programming-(part-1)/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/reflections-on-ten-years-of-programming-(part-1)/</guid></item><item><title>A Nicer Git Log</title><link>https://www.jamesonnetworks.com/blog/a-nicer-git-log/</link><description>&lt;h1&gt;A Nicer Git Log&lt;/h1&gt;

&lt;p&gt;git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)&lt;%an&gt;%Creset' --abbrev-commit"&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/a-nicer-git-log/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/a-nicer-git-log/</guid></item><item><title>Reactive Forms: The Continued Guide</title><link>https://www.jamesonnetworks.com/blog/reactive-forms:-the-continued-guide/</link><description>&lt;h1&gt;Reactive Forms: The Continued Guide&lt;/h1&gt;

&lt;p&gt;Angular forms are awesome! I've been using reactive forms in everything that I do, and I feel like the forms ecosystem for Angular is one of the strongest arguments to use it, and only it, when you start to build a front end project. Today, I'm going to walk through an example of creating a form for myself using a method that I think everyone should adopt. I'm going to include a complex object, complex form, and document the interactions between each to give the reader a better understanding of one way to use forms that produces maintainable and fun code for your application.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/reactive-forms:-the-continued-guide/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/reactive-forms:-the-continued-guide/</guid></item><item><title>Q/A: Passing Data Between Components</title><link>https://www.jamesonnetworks.com/blog/qa:-passing-data-between-components/</link><description>&lt;h1&gt;Q/A: Passing Data Between Components&lt;/h1&gt;

&lt;p&gt;New to angular and cant for the life of my figure out how to pass a button press between two sibling components. I essentially have a button on a header component that I want to change the width of a div on a side-menu component. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/qa:-passing-data-between-components/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/qa:-passing-data-between-components/</guid></item><item><title>Q/A: Passing Data Between Components</title><link>https://www.jamesonnetworks.com/blog/qa:-passing-data-between-components/</link><description>&lt;h1&gt;Q/A: Passing Data Between Components&lt;/h1&gt;

&lt;p&gt;New to angular and cant for the life of my figure out how to pass a button press between two sibling components. I essentially have a button on a header component that I want to change the width of a div on a side-menu component. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/qa:-passing-data-between-components/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/qa:-passing-data-between-components/</guid></item><item><title>I'm Excited About SQRL</title><link>https://www.jamesonnetworks.com/blog/i'm-excited-about-sqrl/</link><description>&lt;h1&gt;I&amp;#x27;m Excited About SQRL&lt;/h1&gt;

&lt;p&gt;SQRL is a protocol developed and released in the open by Steve Gibson of GRC from the period of 2013 to 2019ish. During that time, several aspects of the open protocol have been changed or adjusted since it's initial inception. I'm an avid listener of Security Now! and I've been hearing Steve tell the SQRL story for many years. This past weekend, I got around to picking up the white papers, reading through them, and playing with the tech. And let me tell you, I'm excited. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/i&amp;#x27;m-excited-about-sqrl/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/i'm-excited-about-sqrl/</guid></item><item><title>Is the AsyncPipe Useful?</title><link>https://www.jamesonnetworks.com/blog/is-the-asyncpipe-useful/</link><description>&lt;h1&gt;Is the AsyncPipe Useful?&lt;/h1&gt;

&lt;p&gt;For an introduction to the AsyncPipe, check out this article:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/is-the-asyncpipe-useful/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/is-the-asyncpipe-useful/</guid></item><item><title>Prerendering Pages Server Side with Angular</title><link>https://www.jamesonnetworks.com/blog/prerendering-pages-server-side-with-angular/</link><description>&lt;h1&gt;Prerendering Pages Server Side with Angular&lt;/h1&gt;

&lt;p&gt;Over the course of the last week, I've been working on trying to get my blog to render entries on the server, rather than forcing the pages to render in the browser through Angular. There are a lot of promising developments in the world of server side rendering with Angular as the platform, however, my experience has been that none of these solutions is ready for prime time. In this post, I'll go through what I've tried and ways I was disappointed with the current front running options for SSR/JamStack implementations for Angular. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/prerendering-pages-server-side-with-angular/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/prerendering-pages-server-side-with-angular/</guid></item><item><title>Creating a SubscriptionCollector Class for Angular</title><link>https://www.jamesonnetworks.com/blog/creating-a-subscriptioncollector-class-for-angular/</link><description>&lt;h1&gt;Creating a SubscriptionCollector Class for Angular&lt;/h1&gt;

&lt;p&gt;Writing code in Angular means using a lot of RxJS in order to interact with data. Early on in my Angular career, I would create lots of subscriptions and ignore the book keeping needed to manage those subscriptions OnDestroy. As it turns out, it is critical to manage your subscriptions and clean them up after you have used them. If you fail to do this, you will find a lot of weird code running when you don't expect it to. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/creating-a-subscriptioncollector-class-for-angular/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/creating-a-subscriptioncollector-class-for-angular/</guid></item><item><title>Strategies for Providing Reusable Code</title><link>https://www.jamesonnetworks.com/blog/strategies-for-providing-reusable-code/</link><description>&lt;h1&gt;Strategies for Providing Reusable Code&lt;/h1&gt;

&lt;p&gt;This article is not about code reuse from any technical stand point. We aren't going to discuss dependency injection or the benefits of static classes or the benefits of functional programming over object orientation. This article is about encouraging code reuse within teams and among people. Anyone who has ever provided a framework for developers knows that at some point they will be holding the provided code incorrectly.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/strategies-for-providing-reusable-code/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/strategies-for-providing-reusable-code/</guid></item><item><title>Angular Material Component Theming</title><link>https://www.jamesonnetworks.com/blog/angular-material-component-theming/</link><description>&lt;h1&gt;Angular Material Component Theming&lt;/h1&gt;

&lt;p&gt;This morning I worked on theming a component in Angular Material. I ran into some roadblocks, so I wanted to talk about the problems that I ran into and also some of the potential solutions to the problems. My main issue is the documentation for theming an Angular component seems to drop you somewhere in the middle of the process.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/angular-material-component-theming/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/angular-material-component-theming/</guid></item><item><title>Best Grep One Liner</title><link>https://www.jamesonnetworks.com/blog/best-grep-one-liner/</link><description>&lt;h1&gt;Best Grep One Liner&lt;/h1&gt;

&lt;p&gt;A nice one line command to use with grep is:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/best-grep-one-liner/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/best-grep-one-liner/</guid></item><item><title>Techniques for Managing Component State - Progressive Loading in Angular</title><link>https://www.jamesonnetworks.com/blog/techniques-for-managing-component-state-progressive-loading-in-angular/</link><description>&lt;h1&gt;Techniques for Managing Component State - Progressive Loading in Angular&lt;/h1&gt;

&lt;p&gt;Component state and the process of managing component state is the most difficult part of UI work. There are plenty of ways to manage state on a component, but finding one that is useful across the board, easy to understand, and easy to maintain is the main trick in building a user interface. It's difficult to overstate the importance of this step. I think most people, when they start with Angular, are going to be frustrated with the process. Angular is batteries included, but getting a nice look and feel can be challenging. The initial paint and Angular jank which it causes can be frustrating. Even the demo tutorial angular app suffers from this drawback:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/techniques-for-managing-component-state-progressive-loading-in-angular/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/techniques-for-managing-component-state-progressive-loading-in-angular/</guid></item><item><title>Writing Nice Angular Code</title><link>https://www.jamesonnetworks.com/blog/writing-nice-angular-code/</link><description>&lt;h1&gt;Writing Nice Angular Code&lt;/h1&gt;

&lt;p&gt;Here we are in 2021. 2020 is behind us and we're moving into the new year with hopes and aspirations of a wonderful new year. As a part of the transition into the new year, I want to take some time and reflect on some of the lessons I've learned while writing Angular code over the course of 2020. Last year was my first year of true development in a solely Angular project delivering features for a complicated Angular code base. In my day job I'm responsible for an angular app which shares a core of functionality across three platforms: Web, Android, and iOS. Angular's system of dependency injection lends itself to this model quite nicely. The complexity of our app has led me to several important lessons that I want to summarize in this post. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/writing-nice-angular-code/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/writing-nice-angular-code/</guid></item><item><title>Avoiding Remote Detection of curl | bash</title><link>https://www.jamesonnetworks.com/blog/avoiding-remote-detection-of-curl-or-bash/</link><description>&lt;h1&gt;Avoiding Remote Detection of curl | bash&lt;/h1&gt;

&lt;p&gt;A posting on hackernews has revealed its possible, and probably will become commonplace, to detect the pattern of running curl to collect a script and push its contents into bash. There is a delay between the time the script is requested and when the data is accepted based on the timing between bash executions of each line. Due to this delay, its possible to detect the agent which is requesting the data and show different file outputs.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/avoiding-remote-detection-of-curl-or-bash/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/avoiding-remote-detection-of-curl-or-bash/</guid></item><item><title>The Advent of Code 2020: Day Three</title><link>https://www.jamesonnetworks.com/blog/the-advent-of-code-2020:-day-three/</link><description>&lt;h1&gt;The Advent of Code 2020: Day Three&lt;/h1&gt;

&lt;p&gt;This day marks the day I start to fall behind, perhaps never to catch back up. I'll continue to try to work on some of the challenges over the coming week, however, I've fallen behind quite a few days over the weekend. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-advent-of-code-2020:-day-three/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-advent-of-code-2020:-day-three/</guid></item><item><title>The Advent of Code 2020: Day Two</title><link>https://www.jamesonnetworks.com/blog/the-advent-of-code-2020:-day-two/</link><description>&lt;h1&gt;The Advent of Code 2020: Day Two&lt;/h1&gt;

&lt;p&gt;For day two, I required some refactorings to the skeleton of my project. I wanted to continue to allow the old code to run while I picked out bits and pieces that I wanted to keep around for using on other days. I took the following actions to refactor my project:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-advent-of-code-2020:-day-two/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-advent-of-code-2020:-day-two/</guid></item><item><title>The Advent of Code 2020: Day One</title><link>https://www.jamesonnetworks.com/blog/the-advent-of-code-2020:-day-one/</link><description>&lt;h1&gt;The Advent of Code 2020: Day One&lt;/h1&gt;

&lt;p&gt;This year I'm going to try and participate in Eric Wastl's Advent of Code:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-advent-of-code-2020:-day-one/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-advent-of-code-2020:-day-one/</guid></item><item><title>Disable Mac OSX Auto Workspace Switch</title><link>https://www.jamesonnetworks.com/blog/disable-mac-osx-auto-workspace-switch/</link><description>&lt;h1&gt;Disable Mac OSX Auto Workspace Switch&lt;/h1&gt;

&lt;p&gt;For some reason a lot of my browser windows seem to take focus away and swoop me from some workspaces to other workspaces, and I hate this. I found a command to fix this issue and am leaving it here for posterity: &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/disable-mac-osx-auto-workspace-switch/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/disable-mac-osx-auto-workspace-switch/</guid></item><item><title>The State of Scrolling Restoration in Angular</title><link>https://www.jamesonnetworks.com/blog/the-state-of-scrolling-restoration-in-angular/</link><description>&lt;h1&gt;The State of Scrolling Restoration in Angular&lt;/h1&gt;

&lt;p&gt;Single page applications have a lot of issues when it comes to scroll position. Since the DOM is being re-rendered by the framework, and the intent of the developer is impossible to determine, it is unclear exactly where the page should be scrolled to. It's possible we aren't in a page transition at all, and just wanted to change the start of the page based on a route. Even if you disregard developer intent of a page url change, you still have to contend with asynchronous loading of data onto the page changing the rendered page at a potentially far out point in the render cycle (over 200 ms). &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-state-of-scrolling-restoration-in-angular/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-state-of-scrolling-restoration-in-angular/</guid></item><item><title>Git Trick For Seeing Nice Commit Histories</title><link>https://www.jamesonnetworks.com/blog/git-trick-for-seeing-nice-commit-histories/</link><description>&lt;h1&gt;Git Trick For Seeing Nice Commit Histories&lt;/h1&gt;

&lt;p&gt;While scrolling through a posting on HN, a poster there left an interesting trick for visualizing a git repo. I'll try to summarize the posters back and forth and then show the final result of using the git commands.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/git-trick-for-seeing-nice-commit-histories/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/git-trick-for-seeing-nice-commit-histories/</guid></item><item><title>Enhancing Our Cache Service With URL as the Key</title><link>https://www.jamesonnetworks.com/blog/enhancing-our-cache-service-with-url-as-the-key/</link><description>&lt;h1&gt;Enhancing Our Cache Service With URL as the Key&lt;/h1&gt;

&lt;p&gt;Today, we'll revisit a caching service that we wrote in an earlier blog post and expand on what we learned there. Our cache service was very naive and really falls down with any real world use. To deal with this, we are going to analyze its drawbacks and come up with a set of changes that will make it more functional and more useful for real world use.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/enhancing-our-cache-service-with-url-as-the-key/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/enhancing-our-cache-service-with-url-as-the-key/</guid></item><item><title>Effective Use of HttpParams in Angular 7+</title><link>https://www.jamesonnetworks.com/blog/effective-use-of-httpparams-in-angular-7+/</link><description>&lt;h1&gt;Effective Use of HttpParams in Angular 7+&lt;/h1&gt;

&lt;p&gt;In this post we will look at creating an HttpParams object using a service call and add those params in a maintainable a nice way. We'll be referencing our DjangoRestFrameworkService from previous posts.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/effective-use-of-httpparams-in-angular-7+/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/effective-use-of-httpparams-in-angular-7+/</guid></item><item><title>Multiple Bootstrap Themes With A Single Angular Project</title><link>https://www.jamesonnetworks.com/blog/multiple-bootstrap-themes-with-a-single-angular-project/</link><description>&lt;h1&gt;Multiple Bootstrap Themes With A Single Angular Project&lt;/h1&gt;

&lt;p&gt;Many times when a developer is building a site, they will want to employ two different themes to the site depending on the user experience. In my case, I want a front end experience for consuming content and an admin experience for managing, curating, and developing content. Because these are two fundamentally different tasks, I'm interested in using two completely different themes for each experience. In Angular, there are several options for accomplishing this goal.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/multiple-bootstrap-themes-with-a-single-angular-project/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/multiple-bootstrap-themes-with-a-single-angular-project/</guid></item><item><title>Better Debouncing with RxJS</title><link>https://www.jamesonnetworks.com/blog/better-debouncing-with-rxjs/</link><description>&lt;h1&gt;Better Debouncing with RxJS&lt;/h1&gt;

&lt;p&gt;In a previous post, we discussed how to debounce inputs when you are doing something complicated on events that happen frequently (such as click, change, or scroll):&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/better-debouncing-with-rxjs/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/better-debouncing-with-rxjs/</guid></item><item><title>Creating a Modal With ng-bootstrap</title><link>https://www.jamesonnetworks.com/blog/creating-a-modal-with-ng-bootstrap/</link><description>&lt;h1&gt;Creating a Modal With ng-bootstrap&lt;/h1&gt;

&lt;p&gt;Today, we'll take a look at the simplest way to create a modal using the ng-bootstrap library. ng-bootstrap has really good documentation and several examples on their site as well, so be sure to check out their documentation:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/creating-a-modal-with-ng-bootstrap/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/creating-a-modal-with-ng-bootstrap/</guid></item><item><title>Installing ng-bootstrap</title><link>https://www.jamesonnetworks.com/blog/installing-ng-bootstrap/</link><description>&lt;h1&gt;Installing ng-bootstrap&lt;/h1&gt;

&lt;p&gt;Today, we're going to install ng-bootstrap in anticipation of creating a modal using the library:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/installing-ng-bootstrap/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/installing-ng-bootstrap/</guid></item><item><title>Simple Debouncing With RxJS</title><link>https://www.jamesonnetworks.com/blog/simple-debouncing-with-rxjs/</link><description>&lt;h1&gt;Simple Debouncing With RxJS&lt;/h1&gt;

&lt;p&gt;Let's say you are working on a feature which requires a long running network call, such as a search for items inside of a list with several parameters. When you build an input box to handle these typed in parameters, you don't want to be making this expensive network call on every single event. In order to deal with this, you can debounce the request using RxJS.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/simple-debouncing-with-rxjs/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/simple-debouncing-with-rxjs/</guid></item><item><title>All About Logging - Part 3</title><link>https://www.jamesonnetworks.com/blog/all-about-logging-part-3/</link><description>&lt;h1&gt;All About Logging - Part 3&lt;/h1&gt;

&lt;p&gt;Now that we have a robust logging service, it's helpful to setup logging different in different environments. If you've used the Angular environment files before, you'll be familiar with most of this post. If you haven't, I recommend you check out:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/all-about-logging-part-3/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/all-about-logging-part-3/</guid></item><item><title>All About Logging - Part 2</title><link>https://www.jamesonnetworks.com/blog/all-about-logging-part-2/</link><description>&lt;h1&gt;All About Logging - Part 2&lt;/h1&gt;

&lt;p&gt;Eventually, as you leverage your logging library throughout your application, you're going to be generating a lot of noise. For the purposes of this post, we'll look at someones way of using our library in a way that makes it hard to find information a developer is interested. We'll subdivide our logging with two filters: one filter based on the tag used to make the message, and one filter based on the log level we are interested in.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/all-about-logging-part-2/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/all-about-logging-part-2/</guid></item><item><title>All About Logging</title><link>https://www.jamesonnetworks.com/blog/all-about-logging/</link><description>&lt;h1&gt;All About Logging&lt;/h1&gt;

&lt;p&gt;Logging is extremely important. Good logs can be the difference between spending a few minutes debugging and spending hours debugging. When running in production, logging can provide insights to developers that they may not otherwise be able to get. If you do have developers logging into production in order to troubleshoot problems, you should think about introducing more robust logging in order to minimize when this needs to happen. Developers debugging in production is dangerous and should be considered against best practice. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/all-about-logging/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/all-about-logging/</guid></item><item><title>Shorthand ECMA Script Object Literal Return</title><link>https://www.jamesonnetworks.com/blog/shorthand-ecma-script-object-literal-return/</link><description>&lt;h1&gt;Shorthand ECMA Script Object Literal Return&lt;/h1&gt;

&lt;p&gt;() =&gt; ({'my-key': 'my-value', 'my-other-key': 41})&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/shorthand-ecma-script-object-literal-return/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/shorthand-ecma-script-object-literal-return/</guid></item><item><title>How I Want to Write Code</title><link>https://www.jamesonnetworks.com/blog/how-i-want-to-write-code/</link><description>&lt;h1&gt;How I Want to Write Code&lt;/h1&gt;

&lt;p&gt;I've been working as a software engineer in some capacity for about a decade. I started out in desktop support helping people fix problems with their individual machines. In this first job, I learned the value of programming by essentially automating myself out of the job. I found computers can basically be broken to where they can't be fixed, and the fastest solution was almost always just re-imaging the machine. I wrote scripts that would run in Linux, backup critical sections of a users computer to a network share, boot into a ghost utility, re-image the machine, and come back to Windows. Then I wrote scripts to restore the files to the computer given a path based on the user the computer was going to be assigned. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/how-i-want-to-write-code/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/how-i-want-to-write-code/</guid></item><item><title>Fixing Issues With The Caching Service</title><link>https://www.jamesonnetworks.com/blog/fixing-issues-with-the-caching-service/</link><description>&lt;h1&gt;Fixing Issues With The Caching Service&lt;/h1&gt;

&lt;p&gt;In the process of creating our caching layer, we introduced a bug that leaks an array from our caching service into the global state. We'll look at the bug and also devise an easy strategy to remedy the problem. See the previous post for details about the caching service.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/fixing-issues-with-the-caching-service/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/fixing-issues-with-the-caching-service/</guid></item><item><title>Managing State in Angular Between Components</title><link>https://www.jamesonnetworks.com/blog/managing-state-in-angular-between-components/</link><description>&lt;h1&gt;Managing State in Angular Between Components&lt;/h1&gt;

&lt;p&gt;State is extremely difficult to manage in large scale applications. The user interface is the primary way a user interprets the state of the underlying system. State must be managed across multiple ephemeral components in Angular in order to provide a great user experience. For example, I've built a post creator which requires setting up an audience for the post. The audience editor exists as a separate component because it is a complex experience, however, the final state of the audience needs to be attached to the post in order for the user to complete the post experience. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/managing-state-in-angular-between-components/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/managing-state-in-angular-between-components/</guid></item><item><title>Effective Data Shape Conversions Using Map</title><link>https://www.jamesonnetworks.com/blog/effective-data-shape-conversions-using-map/</link><description>&lt;h1&gt;Effective Data Shape Conversions Using Map&lt;/h1&gt;

&lt;p&gt;In previous posts we have looked at building quick and maintainable Angular services that can interact with Django Rest Framework. In this post, we are going to expand on a concept we've leveraged before in order to change the shape of our data coming into and out of the service in order to effectively interact with a DRF ViewSet. We are going to take complex data with nested data structures and make them work with update end points in DRF. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/effective-data-shape-conversions-using-map/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/effective-data-shape-conversions-using-map/</guid></item><item><title>Updating From Angular 7 to Angular 9</title><link>https://www.jamesonnetworks.com/blog/updating-from-angular-7-to-angular-9/</link><description>&lt;h1&gt;Updating From Angular 7 to Angular 9&lt;/h1&gt;

&lt;p&gt;Any angular update is a fairly daunting task. This week, I've made it a priority to update my $dayjob's code base from Angular 7.2 to Angular 9.0. I've been interested in making the jump since Angular 7 fell out of active support, but prioritized work has to be completed before other work can make it into the forefront. There were some difficult pieces to the upgrade, but for the most part everything went smoothly. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/updating-from-angular-7-to-angular-9/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/updating-from-angular-7-to-angular-9/</guid></item><item><title>Postgres Import Command</title><link>https://www.jamesonnetworks.com/blog/postgres-import-command/</link><description>&lt;h1&gt;Postgres Import Command&lt;/h1&gt;

&lt;p&gt;psql -d  -a -f &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/postgres-import-command/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/postgres-import-command/</guid></item><item><title>A Nice Directory Replace Command</title><link>https://www.jamesonnetworks.com/blog/a-nice-directory-replace-command/</link><description>&lt;h1&gt;A Nice Directory Replace Command&lt;/h1&gt;

&lt;p&gt;As a part of my conversion to the Vim editing environment, I have lost some of the IntelliJ niceties for refactoring. I can no longer select large swathes of files and move them willy-nilly with no work involved on my part to handle the references to those files in typescript or python imports. While this appears to be a bad problem at first, it is actually kind of nice to force yourself to think about where files are about to go, how you will rename the import, and also string together commands to handle the refactoring in as few "moves" as possible. During my work to handle this refactoring, I used some existing Vim commands heavily and also performed some commands at the command line. I've included them here to remind myself how to do it in the future. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/a-nice-directory-replace-command/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/a-nice-directory-replace-command/</guid></item><item><title>My Conversion to Vim</title><link>https://www.jamesonnetworks.com/blog/my-conversion-to-vim/</link><description>&lt;h1&gt;My Conversion to Vim&lt;/h1&gt;

&lt;p&gt;In my $job, I use python and typescript as my primary languages. I've been using PyCharm as a subscription was provided to me by the company and I've always enjoyed the IntelliJ experience. For hobby projects, I've bounced between several different languages as have always managed to configure IntelliJ to handle them all. IntelliJ is an awesome product, and I really enjoy developing with it.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/my-conversion-to-vim/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/my-conversion-to-vim/</guid></item><item><title>Reviver Function</title><link>https://www.jamesonnetworks.com/blog/reviver-function/</link><description>&lt;h1&gt;Reviver Function&lt;/h1&gt;

&lt;p&gt;As a follow up to an earlier article I wanted to discuss something I found in the process of writing. JSON.parse actually has a "reviver" function. This function can be used to create complex objects out of string data in the JSON. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/reviver-function/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/reviver-function/</guid></item><item><title>Funneling Business Logic into Constructors</title><link>https://www.jamesonnetworks.com/blog/funneling-business-logic-into-constructors/</link><description>&lt;h1&gt;Funneling Business Logic into Constructors&lt;/h1&gt;

&lt;p&gt;When Angular makes a request to a the server, the response object that is returned is not technically a new instance of the object. Instead, you get a duck typed object that seems to work exactly the way you want it to work until you try to call a method on it. This has bitten me in a couple of places and I'd like to propose a pattern for dealing with this problem. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/funneling-business-logic-into-constructors/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/funneling-business-logic-into-constructors/</guid></item><item><title>Creating a Caching Layer for An Abstracted Service</title><link>https://www.jamesonnetworks.com/blog/creating-a-caching-layer-for-an-abstracted-service/</link><description>&lt;h1&gt;Creating a Caching Layer for An Abstracted Service&lt;/h1&gt;

&lt;p&gt;If you haven't seen the previous post in this series, I suggest you check it out as we'll be building on a concept from that post for this post. The post is titled "Creating a Generic Service for Django Rest Framework in Angular." Today, we'll be extending that generic service and adding a caching layer between our request and response to achieve better performance. The goal is to have a service which does not make the same requests over and over when new data is requested. We will extend our DjangoRestFrameworkService, creating a Cacheable service.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/creating-a-caching-layer-for-an-abstracted-service/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/creating-a-caching-layer-for-an-abstracted-service/</guid></item><item><title>Creating a Generic Service for Django Rest Framework in Angular</title><link>https://www.jamesonnetworks.com/blog/creating-a-generic-service-for-django-rest-framework-in-angular/</link><description>&lt;h1&gt;Creating a Generic Service for Django Rest Framework in Angular&lt;/h1&gt;

&lt;p&gt;Django Rest Framework (DRF) is a popular add on for Django, a python web application framework. DRF provides piping from Django models into Rest API end points via the use of serializers and views. It is a very powerful framework that can provide uniform access to different entities of data. By leveraging ModelViewSets from DRF and creating a service that leverages Generics in Angular, we are able to quickly prototype CRUD style end points while providing long term maintainability of our software. This post will show how, given a DRF ModelViewSet end point collection, a developer can create a generic service on the front end to avoid constantly rewriting end point boiler plate. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/creating-a-generic-service-for-django-rest-framework-in-angular/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/creating-a-generic-service-for-django-rest-framework-in-angular/</guid></item><item><title>Making a Confirmation Dialog with Angular and Bootstrap</title><link>https://www.jamesonnetworks.com/blog/making-a-confirmation-dialog-with-angular-and-bootstrap/</link><description>&lt;h1&gt;Making a Confirmation Dialog with Angular and Bootstrap&lt;/h1&gt;

&lt;p&gt;Creating a modal component in Angular using Bootstrap is pretty easy. However, creating a reusable service to popping up a confirmation dialog anywhere in your app that other developers can reuse can actually be difficult. Angular is a very verbose platform and requires several layers of abstraction in order to create a robust modal dialog service. In this post, we'll discuss using Angular and ng-bootstrap to create a reusable ConfirmService that allows all consumers of your project to quickly create a uniform confirm experience in your angular application. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/making-a-confirmation-dialog-with-angular-and-bootstrap/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/making-a-confirmation-dialog-with-angular-and-bootstrap/</guid></item><item><title>Progressive Loading Components in Angular</title><link>https://www.jamesonnetworks.com/blog/progressive-loading-components-in-angular/</link><description>&lt;h1&gt;Progressive Loading Components in Angular&lt;/h1&gt;

&lt;p&gt;If you've ever worked with angular, you know the symptoms of a poorly loading angular page. Everyone's first page is always filled with what I call Angular Jank. Angular jank occurs when a page renders, triggers a request for data, and then once the data is received, renders those changes which causes the page to move around as different parts are filled in. This is not a very good user experience. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/progressive-loading-components-in-angular/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/progressive-loading-components-in-angular/</guid></item><item><title>Remove Old Conflict Files</title><link>https://www.jamesonnetworks.com/blog/remove-old-conflict-files/</link><description>&lt;h1&gt;Remove Old Conflict Files&lt;/h1&gt;

&lt;p&gt;After you've finished a merge conflict, several files can be left over that have a .orig file extension. I  use the following one liner to clear out those old files:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/remove-old-conflict-files/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/remove-old-conflict-files/</guid></item><item><title>Long Running Feature Branch Testing on the Cheap</title><link>https://www.jamesonnetworks.com/blog/long-running-feature-branch-testing-on-the-cheap/</link><description>&lt;h1&gt;Long Running Feature Branch Testing on the Cheap&lt;/h1&gt;

&lt;p&gt;I'm a UI/UX engineer. As a part of that role, I've been tasked with coming up with a solution to make our development process more streamlined and fool proof. A huge part of that goal is testing. Strong testing inspires confidence that releases will be successful. In an earlier post, I wrote about wiring Rollbar up to the UI to provide error reporting for events that happen on the client. In this post, I will talk about a deployment and branching strategy that allows our organization to test features in isolation, before merging them into our mainline branches. This seemingly expensive feature is easy to accomplish by chaining together our CI/CD pipeline and a branching strategy that enables this kind of testing.  &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/long-running-feature-branch-testing-on-the-cheap/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/long-running-feature-branch-testing-on-the-cheap/</guid></item><item><title>Managing Working Remotely</title><link>https://www.jamesonnetworks.com/blog/managing-working-remotely/</link><description>&lt;h1&gt;Managing Working Remotely&lt;/h1&gt;

&lt;p&gt;This article includes tips and tricks for working remotely. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/managing-working-remotely/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/managing-working-remotely/</guid></item><item><title>COVID 19 / Half Life: Alyx / Random Thoughts</title><link>https://www.jamesonnetworks.com/blog/covid-19-half-life-alyx-random-thoughts/</link><description>&lt;h1&gt;COVID 19 / Half Life: Alyx / Random Thoughts&lt;/h1&gt;

&lt;p&gt;As everyone is aware, a novel corona virus designated COVID-19 is currently spreading globally. I, along with my peers, have begun working from home and aggressively isolating ourselves in the effort to flatten the curve. This period of isolation comes at a particularly difficult time as many of our friends and family have been having children and we'd love to be able to visit with them more frequently.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/covid-19-half-life-alyx-random-thoughts/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/covid-19-half-life-alyx-random-thoughts/</guid></item><item><title>Angular Code Splitting</title><link>https://www.jamesonnetworks.com/blog/angular-code-splitting/</link><description>&lt;h1&gt;Angular Code Splitting&lt;/h1&gt;

&lt;p&gt;This week, I worked on splitting a large scale angular application into smaller modules using a technique called "code splitting." Code splitting is one of the more powerful Angular concepts that is provided out of the box. It will take your angular code and split up the assets into the smallest deliverable bundle in an attempt to make a minimal initial load before a user can interact with your application. There are two methods of code splitting, component based and route based. Having read up on code splitting before starting this project, I've been working into splitting all of my code up into modules with silo'd routes in order to take advantage of route based code splitting. This post will be about those efforts and the results.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/angular-code-splitting/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/angular-code-splitting/</guid></item><item><title>The Worst Bug I've Created in Angular So Far (A Lesson in routeReuseStrategy)</title><link>https://www.jamesonnetworks.com/blog/the-worst-bug-i-ve-created-in-angular-so-far-a-lesson-in-routereusestrategy/</link><description>&lt;h1&gt;The Worst Bug I&amp;#x27;ve Created in Angular So Far (A Lesson in routeReuseStrategy)&lt;/h1&gt;

&lt;p&gt;This morning, I started to step through an error reported last week. We separate our application into tabs. In one tab, there is a content creation wizard. When you move tabs, we keep a record of that change and set you back to step one on the wizard if you come back to that tab. In another tab, we have a series of reporting screens that were built early on in the migration effort (or a time known by another name: When I was a terrible Angular developer). When the user would navigate between these two tabs, the content creation wizard would not allow a user to move from step 1 to step 2.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-worst-bug-i-ve-created-in-angular-so-far-a-lesson-in-routereusestrategy/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-worst-bug-i-ve-created-in-angular-so-far-a-lesson-in-routereusestrategy/</guid></item><item><title>Adding a Progress Bar for a Web Page Load in Kotlin / Android</title><link>https://www.jamesonnetworks.com/blog/adding-a-progress-bar-for-a-web-page-load-in-kotlin-android/</link><description>&lt;h1&gt;Adding a Progress Bar for a Web Page Load in Kotlin / Android&lt;/h1&gt;

&lt;p&gt;First, we are going to add a progress bar alongside of our WebView&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/adding-a-progress-bar-for-a-web-page-load-in-kotlin-android/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/adding-a-progress-bar-for-a-web-page-load-in-kotlin-android/</guid></item><item><title>Building this Blog (Part 2)</title><link>https://www.jamesonnetworks.com/blog/building-this-blog-part-2/</link><description>&lt;h1&gt;Building this Blog (Part 2)&lt;/h1&gt;

&lt;p&gt;Today I want to talk about my progress on building this blog and the things that I have been working on lately. I'll split the conversation up into three sections. The first section will be about my efforts to dog food and how that's guided the direction of the blog. The second section will be about recent additions including a database to back the application, the added comments section, and the details about my experience with Angular Material. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/building-this-blog-part-2/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/building-this-blog-part-2/</guid></item><item><title>Making a Mapper</title><link>https://www.jamesonnetworks.com/blog/making-a-mapper/</link><description>&lt;h1&gt;Making a Mapper&lt;/h1&gt;

&lt;p&gt;At every place that I have worked we have eventually required a system for mapping fields from one collection fields over to fields of another collection of fields, usually to do some sort of data integration. In eCommerce, we would typically run up against migrating client data from one system to another. In my current role, we are integrating our systems with other software partners systems. As a part of the integration, someone has to build the mapping from one system to the other. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/making-a-mapper/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/making-a-mapper/</guid></item><item><title>Managing a Large Scale AngularJS to Angular Migration (Part 3)</title><link>https://www.jamesonnetworks.com/blog/managing-a-large-scale-angularjs-to-angular-migration-part-3/</link><description>&lt;h1&gt;Managing a Large Scale AngularJS to Angular Migration (Part 3)&lt;/h1&gt;

&lt;p&gt;Migrating code can be a demoralizing process. At best, you return to a working state people expect, and at worst you flub it up and no one is happy. But sometimes its absolutely required. Particularly when your stack has rotted and your dependencies are starting to hit the end of their life. So here you are, working on migrating code from one platform to another, attempting to maintain the user experience, and also make it easier for other developers to join in the fun. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/managing-a-large-scale-angularjs-to-angular-migration-part-3/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/managing-a-large-scale-angularjs-to-angular-migration-part-3/</guid></item><item><title>The Hidden Complexity of Trivial Changes</title><link>https://www.jamesonnetworks.com/blog/the-hidden-complexity-of-trivial-changes/</link><description>&lt;h1&gt;The Hidden Complexity of Trivial Changes&lt;/h1&gt;

&lt;p&gt;Change is inevitable in software. The changes range from something minor (change the wording of that thing to this thing) to something insanely major (what if instead of a text editor, we made facebook?). As these requests come in, you have to do your best to determine on the fly which of the changes are possible and which are not.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-hidden-complexity-of-trivial-changes/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-hidden-complexity-of-trivial-changes/</guid></item><item><title>Managing a Large Scale AngularJS to Angular Migration (Part 2)</title><link>https://www.jamesonnetworks.com/blog/managing-a-large-scale-angularjs-to-angular-migration-part-2/</link><description>&lt;h1&gt;Managing a Large Scale AngularJS to Angular Migration (Part 2)&lt;/h1&gt;

&lt;p&gt;Getting started on any large scale code conversion is definitely the hardest part of the conversion. At the outset of any large project there is usually some time set aside for fact finding, time budgeting for completion dates and milestones and of course the dreaded value proposition for making the migration happen. Most efforts in large organizations probably arrest on this step, and they make the decision to move forward in a completely different direction. This usually goes poorly. In our case, we only had the only product and the one path forward, it was clear that we did need to start, the only question was how long would it take (which translates to how much would it cost). &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/managing-a-large-scale-angularjs-to-angular-migration-part-2/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/managing-a-large-scale-angularjs-to-angular-migration-part-2/</guid></item><item><title>Managing a Large Scale AngularJS to Angular Migration (Part 1)</title><link>https://www.jamesonnetworks.com/blog/managing-a-large-scale-angularjs-to-angular-migration-part-1/</link><description>&lt;h1&gt;Managing a Large Scale AngularJS to Angular Migration (Part 1)&lt;/h1&gt;

&lt;p&gt;Over the course of the past 8 months, I have been leading the charge in migrating a large scale AngularJS application built over a period of 8 years into the world of modern Angular (Angular 2+, technically version 7) and I wanted to take a post to reflect on the lessons I've learned and talk about some of the challenges we encountered. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/managing-a-large-scale-angularjs-to-angular-migration-part-1/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/managing-a-large-scale-angularjs-to-angular-migration-part-1/</guid></item><item><title>Removing Scroll Bars</title><link>https://www.jamesonnetworks.com/blog/removing-scroll-bars/</link><description>&lt;h1&gt;Removing Scroll Bars&lt;/h1&gt;

&lt;p&gt;Have you ever wanted to remove the scroll bars of a website that you were working on? Thanks to some psuedo properties, it is very easy on the modern web to remove them. The following snippet is responsible for removing the scroll bars on the blog creation tool of this site:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/removing-scroll-bars/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/removing-scroll-bars/</guid></item><item><title>The User Interface as a State Machine</title><link>https://www.jamesonnetworks.com/blog/the-user-interface-as-a-state-machine/</link><description>&lt;h1&gt;The User Interface as a State Machine&lt;/h1&gt;

&lt;p&gt;How do we build user interfaces? For the most part, you're going to run across many people in many places that get the job done in a variety of ways. After almost a decade in programming, its my personal opinion that it doesn't matter how a user interface is built. At the end of the day, the user experience is the most important thing. If you can build good UIs, keep on keepin' on, because it is not an easy task.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-user-interface-as-a-state-machine/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-user-interface-as-a-state-machine/</guid></item><item><title>Building an Angular Error Handler and Integrating with Rollbar</title><link>https://www.jamesonnetworks.com/blog/building-an-angular-error-handler-and-integrating-with-rollbar/</link><description>&lt;h1&gt;Building an Angular Error Handler and Integrating with Rollbar&lt;/h1&gt;

&lt;p&gt;Our first step in an overall error handling strategy with Angular will be to replace the default error handler with our own custom error handler and tell the module to use our new class instead. We will do this by creating a class for our error handler and adjusting the provider in the .module.ts file. Start with the following command:&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/building-an-angular-error-handler-and-integrating-with-rollbar/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/building-an-angular-error-handler-and-integrating-with-rollbar/</guid></item><item><title>Jenkins - Deployment Platforms (Part 1)</title><link>https://www.jamesonnetworks.com/blog/jenkins-deployment-platforms-part-1/</link><description>&lt;h1&gt;Jenkins - Deployment Platforms (Part 1)&lt;/h1&gt;

&lt;p&gt;There are several options when choosing a platform which you will use to build and deploy your software. We'll take a look at some of these options, discuss their pros and cons, and also make a decision based on the requirements for our particular project.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/jenkins-deployment-platforms-part-1/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/jenkins-deployment-platforms-part-1/</guid></item><item><title>The Angular Component Lifecycle and Routing</title><link>https://www.jamesonnetworks.com/blog/the-angular-component-lifecycle-and-routing/</link><description>&lt;h1&gt;The Angular Component Lifecycle and Routing&lt;/h1&gt;

&lt;p&gt;In this post we'll be discussing the angular component lifecycle.. My primary goal is to expose the reader to the angular component lifecycle, including some behavior which was difficult for me to initially grok, but turned out to be fairly obvious after the fact. It is meant for people new to angular who are trying to understand how they should structure their projects. The following diagram lays out the Angular component lifecycle.&lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/the-angular-component-lifecycle-and-routing/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/the-angular-component-lifecycle-and-routing/</guid></item><item><title>Git - Modern Distributed Source Control</title><link>https://www.jamesonnetworks.com/blog/git-modern-distributed-source-control/</link><description>&lt;h1&gt;Git - Modern Distributed Source Control&lt;/h1&gt;

&lt;p&gt;In the beginning there was SVN and it was good. (Well really, people shipped zip archives of their code and there were probably other methods that I'm not privy to as my career started around 2009 after many of these things were well established). SVN was a centralized platform for maintaining versions and branches of code and required the user to be connected to the server at all times in order to interact with the SVN service. I started out playing with SVN, moved to Team Foundation Server (Microsoft's similar offering) and finally landed on Git early on. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/git-modern-distributed-source-control/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/git-modern-distributed-source-control/</guid></item><item><title>Building this Blog (Part 1)</title><link>https://www.jamesonnetworks.com/blog/building-this-blog-part-1/</link><description>&lt;h1&gt;Building this Blog (Part 1)&lt;/h1&gt;

&lt;p&gt;This blog is going to be my ultimate test in dogfooding my own work. As I'm typing this I'm doing so in a half baked creator component I've been building with angular. It's persisting the entry to localstorage so that I can save a resume my work later. Then the output is written to a JSON format that I can copy and paste for the final work. I'm going to use this blog to take the reader through a modern day web stack built from the ground up on 10 years of programming experience. We'll look at the tools, stack, and methodologies used to build a convenient hobby project for the modern web developer. &lt;/p&gt;

&lt;hr /&gt;
&lt;a href="/blog/building-this-blog-part-1/" target="_blank"&gt;Read more...&lt;/a&gt;</description><author>JamesonNetworks Blog</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.jamesonnetworks.com/blog/building-this-blog-part-1/</guid></item><item><title>Fighting for My Data Privacy</title><link>https://www.joshcanhelp.com/data-privacy/</link><description>It feels more important now than ever to take back some control and add a layer of privacy and protection where I can. This is how I'm doing that.</description><author>Posts on Josh Can Help</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.joshcanhelp.com/data-privacy/</guid></item><item><title>Do we need 'agentic identity'?</title><link>https://www.joshcanhelp.com/agentic-identity/</link><description>Agents are here, there, and everywhere, growing in numbers at a pace between fast and breakneck, generating or completing work at some other velocity, and poised to change the world entirely or, like, not much at all. Something must be done.</description><author>Posts on Josh Can Help</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.joshcanhelp.com/agentic-identity/</guid></item><item><title>Thoughts on AI</title><link>https://www.joshcanhelp.com/ai/</link><description>I felt the need to write out my thoughts about AI, generally, and from the software engineering perspective. As with all my posts, all unquoted words here are my own.</description><author>Posts on Josh Can Help</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.joshcanhelp.com/ai/</guid></item><item><title>Personal Data Pipeline Update</title><link>https://www.joshcanhelp.com/personal-data-pipeline-update/</link><description>Taking a step forward on the Personal Data Pipeline project by autoloading JSON and adding an interface for data transformation.</description><author>Posts on Josh Can Help</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.joshcanhelp.com/personal-data-pipeline-update/</guid></item><item><title>My Values for Technical Leadership</title><link>https://www.joshcanhelp.com/values/</link><description>My professional values as an engineer, architect, and technical leader.</description><author>Posts on Josh Can Help</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.joshcanhelp.com/values/</guid></item><item><title>Imagining a Personal Data Pipeline</title><link>https://www.joshcanhelp.com/personal-data-pipeline/</link><description>I've been thinking a lot about personal data lately: where it's stored, how to extract it, and what to do with it. Here's where I landed.</description><author>Posts on Josh Can Help</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.joshcanhelp.com/personal-data-pipeline/</guid></item><item><title>Building a CLI from scratch with TypeScript and oclif</title><link>https://www.joshcanhelp.com/oclif/</link><description>I'm building a pair of CLI programs in TypeScript and decided to use oclif for flag parsing and releasing. I needed something more than the getting started doucmentation they had so I wrote it myself.</description><author>Posts on Josh Can Help</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.joshcanhelp.com/oclif/</guid></item><item><title>Goodbye Auth0</title><link>https://www.joshcanhelp.com/goodbye-auth0/</link><description>My 6 years at Auth0 ... how it all started, what Auth0 meant to me, and why I will proudly wear that shield for as long as the swag holds up.</description><author>Posts on Josh Can Help</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.joshcanhelp.com/goodbye-auth0/</guid></item><item><title>Goodbye Vittorio Bertocci</title><link>https://www.joshcanhelp.com/vittorio/</link><description>Vittorio Bertocci passed on October 7th, 2023. He had a major impact on me and I wanted to write a few words in his honor.</description><author>Posts on Josh Can Help</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://www.joshcanhelp.com/vittorio/</guid></item><item><title>A Guide to Using Fragments in Ecto</title><link>https://victorbjorklund.com/a-guide-to-fragments-in-ecto-elixir/</link><author>Victor Björklund</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://victorbjorklund.com/a-guide-to-fragments-in-ecto-elixir/</guid></item><item><title>Cache everything for the majority of your users in Phoenix</title><link>https://victorbjorklund.com/cache-html-in-cdn-in-phoenix-elixir/</link><author>Victor Björklund</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://victorbjorklund.com/cache-html-in-cdn-in-phoenix-elixir/</guid></item><item><title>Mitigating Atom-Based Denial of Service Attacks in Elixir</title><link>https://victorbjorklund.com/elixir-atoms-denial-of-service-mitigation/</link><author>Victor Björklund</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://victorbjorklund.com/elixir-atoms-denial-of-service-mitigation/</guid></item><item><title>Elixir: Understanding the difference between "require" and "use"</title><link>https://victorbjorklund.com/elixir-difference-between-require-and-use/</link><author>Victor Björklund</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://victorbjorklund.com/elixir-difference-between-require-and-use/</guid></item><item><title>CORS error in Phoenix Elixir</title><link>https://victorbjorklund.com/cors-error-phoenix-elixir-cors-plug/</link><author>Victor Björklund</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://victorbjorklund.com/cors-error-phoenix-elixir-cors-plug/</guid></item><item><title>Build your custom Phoenix phx.new generator</title><link>https://victorbjorklund.com/guide-to-custom-phoenix-phx-new-generator-mix-task/</link><description>Learn how to build your own custom version of phx.new to create new phoenix projects just the way you like them.</description><author>Victor Björklund</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://victorbjorklund.com/guide-to-custom-phoenix-phx-new-generator-mix-task/</guid></item><item><title>Building awesome diagrams with D2</title><link>https://victorbjorklund.com/build-diagrams-as-code-with-d2-d2lang/</link><author>Victor Björklund</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://victorbjorklund.com/build-diagrams-as-code-with-d2-d2lang/</guid></item><item><title>Phoenix Phx.Gen.Auth (almost) entirely in Liveview</title><link>https://victorbjorklund.com/phoenix-phx-gen-auth-almost-entirely-in-liveview/</link><author>Victor Björklund</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://victorbjorklund.com/phoenix-phx-gen-auth-almost-entirely-in-liveview/</guid></item><item><title>Too many headers in Phoenix</title><link>https://victorbjorklund.com/too-many-headers-in-phoenix-elixir-cowboy-bandit/</link><description>A practical solution for handling too many headers in Phoenix applications, specifically addressing limitations in Cowboy (Erlang) and Bandit (Elixir).</description><author>Victor Björklund</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://victorbjorklund.com/too-many-headers-in-phoenix-elixir-cowboy-bandit/</guid></item><item><title>How to Handle Empty Slots in Phoenix Components</title><link>https://victorbjorklund.com/how-to-handle-empty-slots-in-phoenix-components/</link><author>Victor Björklund</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://victorbjorklund.com/how-to-handle-empty-slots-in-phoenix-components/</guid></item><item><title>Job scheduling in Elixir Phoenix using Quantum</title><link>https://victorbjorklund.com/job-scheduling-cron-job-elixir-phoenix-quantum/</link><author>Victor Björklund</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://victorbjorklund.com/job-scheduling-cron-job-elixir-phoenix-quantum/</guid></item><item><title>Integrating Python with Elixir Using Erlport</title><link>https://victorbjorklund.com/using-python-in-elixir-with-erlport/</link><author>Victor Björklund</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://victorbjorklund.com/using-python-in-elixir-with-erlport/</guid></item><item><title>Beta Lister Release</title><link>https://cretezy.com/2019/betalister-release/</link><description>Today I'm releasing an Android application named Beta Lister. It lists all available beta versions of installed applications on your device. Download available now.</description><author>Cretezy — Technology &amp;amp; Programming</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://cretezy.com/2019/betalister-release/</guid></item><item><title>Cloud Run + Cloud Build for Monorepos</title><link>https://cretezy.com/2019/cloudrun-monorepo/</link><description>Cloud Run is a "serverless container compute platform" running on Google Cloud. We'll look into setting it up with a monorepo with Next.js and Node.js, with continuous delivery from GitHub.</description><author>Cretezy — Technology &amp;amp; Programming</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://cretezy.com/2019/cloudrun-monorepo/</guid></item><item><title>Flutter JSON parsing: What is the fastest?</title><link>https://cretezy.com/2020/flutter-fast-json/</link><description>Flutter, Google's portable UI framework, uses Dart for application code. My question today: What is the fastest way to parse JSON in Flutter?</description><author>Cretezy — Technology &amp;amp; Programming</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://cretezy.com/2020/flutter-fast-json/</guid></item><item><title>Flutter JSON vs Protocol Buffer: Benefits and performance</title><link>https://cretezy.com/2020/flutter-json-vs-protobuf/</link><description>As discussed in the last post on Flutter JSON decoding performance, we saw that parsing JSON on the main thread is usually the right choice. Today, we'll look at Protocol Buffers to increase performance further.</description><author>Cretezy — Technology &amp;amp; Programming</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://cretezy.com/2020/flutter-json-vs-protobuf/</guid></item><item><title>React Query + Axios for authentication</title><link>https://cretezy.com/2020/react-query-axios-authentication/</link><description>React Query is a great library. It provides an API similar to the Apollo GraphQL client, but in a backend-agnostic design. This post looks into hooking up the Axios HTTP library to authenticate API calls.</description><author>Cretezy — Technology &amp;amp; Programming</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://cretezy.com/2020/react-query-axios-authentication/</guid></item><item><title>Become a git stash pro</title><link>https://cretezy.com/2021/become-a-git-stash-pro/</link><description>git stash is a very useful feature in git allowing you to 'stash' away changes for later. This post goes over the most common commands and tricks.</description><author>Cretezy — Technology &amp;amp; Programming</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://cretezy.com/2021/become-a-git-stash-pro/</guid></item><item><title>Self-hosted analytics: How to track 53% more views</title><link>https://cretezy.com/2023/self-hosted-analytics/</link><description>Last month, I released a new project. I was able to track 53% more views by replacing Cloudflare Web Analytics with a self-hosted solution (Plausible).</description><author>Cretezy — Technology &amp;amp; Programming</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://cretezy.com/2023/self-hosted-analytics/</guid></item><item><title>Auto-copy files when creating Git worktrees or Jujutsu workspaces</title><link>https://cretezy.com/2026/worktree-copy/</link><description>A simple pattern for automatically copying ignored files like .env into new Git worktrees or Jujutsu workspaces, using your .gitignore as the copy list.</description><author>Cretezy — Technology &amp;amp; Programming</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://cretezy.com/2026/worktree-copy/</guid></item><item><title>The System Skill Pattern</title><link>https://shruggingface.com/blog/the-system-skill-pattern</link><description>The System Skill Pattern</description><author>shruggingface.com</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://shruggingface.com/blog/the-system-skill-pattern</guid></item><item><title>How I Used Stable Diffusion and Dreambooth to Create A Painted Portrait of My Dog</title><link>https://shruggingface.com/blog/how-i-used-stable-diffusion-and-dreambooth-to-create-a-painted-portrait-of-my-dog</link><description>How I Used Stable Diffusion and Dreambooth to Create A Painted Portrait of My Dog</description><author>shruggingface.com</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://shruggingface.com/blog/how-i-used-stable-diffusion-and-dreambooth-to-create-a-painted-portrait-of-my-dog</guid></item><item><title>Blending Artist Styles Together with Stable Diffusion and LoRA</title><link>https://shruggingface.com/blog/blending-artist-styles-together-with-stable-diffusion-and-lora</link><description>Blending Artist Styles Together with Stable Diffusion and LoRA</description><author>shruggingface.com</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://shruggingface.com/blog/blending-artist-styles-together-with-stable-diffusion-and-lora</guid></item><item><title>Making Self Portraits With Stable Diffusion and LoRA</title><link>https://shruggingface.com/blog/self-portraits-with-stable-diffusion-and-lora</link><description>Making Self Portraits With Stable Diffusion and LoRA</description><author>shruggingface.com</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://shruggingface.com/blog/self-portraits-with-stable-diffusion-and-lora</guid></item><item><title>A Look Under the Hood: Using PromptLayer to Analyze LangChain Prompts</title><link>https://shruggingface.com/blog/langchain-under-the-hood-with-promptlayer</link><description>A Look Under the Hood: Using PromptLayer to Analyze LangChain Prompts</description><author>shruggingface.com</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://shruggingface.com/blog/langchain-under-the-hood-with-promptlayer</guid></item><item><title>Playing with GPT-3, LangChain, and the OpenAI Embeddings API</title><link>https://shruggingface.com/blog/langchain-cloudflare-qa-agent</link><description>Playing with GPT-3, LangChain, and the OpenAI Embeddings API</description><author>shruggingface.com</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://shruggingface.com/blog/langchain-cloudflare-qa-agent</guid></item><item><title>2014-04-28 Startup skills learned during undergrad</title><link>https://5f5.org/ruminations/three-skills.html</link><description>2014-04-28 Startup skills learned during undergrad</description><author>5f5</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://5f5.org/ruminations/three-skills.html</guid></item><item><title>2014-03-26 A taxonomy of tech haters</title><link>https://5f5.org/ruminations/hi-haters.html</link><description>2014-03-26 A taxonomy of tech haters</description><author>5f5</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://5f5.org/ruminations/hi-haters.html</guid></item><item><title>2013-03-12 Netty and the JVM meet OpenSSL to speedup connections</title><link>https://5f5.org/ruminations/netty-meets-openssl.html</link><description>2013-03-12 Netty and the JVM meet OpenSSL to speedup connections</description><author>5f5</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://5f5.org/ruminations/netty-meets-openssl.html</guid></item><item><title>2012-10-04 Programming isn't fun—it's much more than that</title><link>https://5f5.org/ruminations/programming-isnt-fun.html</link><description>2012-10-04 Programming isn't fun—it's much more than that</description><author>5f5</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://5f5.org/ruminations/programming-isnt-fun.html</guid></item><item><title>2012-07-31 My first year as employee #1 of a YC company</title><link>https://5f5.org/ruminations/first-year.html</link><description>2012-07-31 My first year as employee #1 of a YC company</description><author>5f5</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://5f5.org/ruminations/first-year.html</guid></item><item><title>The History of Command Palettes: How Typing Commands Became The Norm Again</title><link>https://techinch.com/blog/the-history-of-command-palettes</link><description>&lt;p&gt;It took little under a decade for the headline feature developer Jon Skinner added to Sublime Text’s second version to become one of the defining features of this decade’s software.&lt;/p&gt;
&lt;p&gt;“Goto Anything” is how it started, a search pane to jump to other files. Open a folder, press &lt;code&gt;CMD&lt;/code&gt;/&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;P&lt;/code&gt;, start typing to see a list of matching files, then press &lt;code&gt;Enter&lt;/code&gt; to jump to it. Seems simple enough: You think of a file you need, and without leaving the keyboard can switch to that file and continue work.&lt;/p&gt;
&lt;p&gt;Within months, that search pane gained a companion: The now-famous Command Palette. “The Command Palette provides a quick way to access commands that don't warrant a key binding, and would usually be hidden away in a menu,” &lt;a href="https://web.archive.org/web/20210802031745/https://www.sublimetext.com/blog/articles/sublime-text-2-beta"&gt;explained&lt;/a&gt; Skinner. This time, you’d press &lt;code&gt;CMD&lt;/code&gt;/&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;Shift&lt;/code&gt;+&lt;code&gt;P&lt;/code&gt; and get a search bar, only here you’d search through program features.&lt;/p&gt;
&lt;p&gt;Type &lt;code&gt;Save&lt;/code&gt; to find the &lt;em&gt;Save as…&lt;/em&gt; command without looking through the &lt;em&gt;File&lt;/em&gt; menu. Type &lt;code&gt;Theme&lt;/code&gt; to change your text colors without clicking. With the Package Manager plugin, you could browse Sublime Text add-ons and install them, like a mini keyboard-powered App Store.&lt;/p&gt;
&lt;p&gt;Compared to clicking each menu looking for a command, or hovering over every button in a toolbar, waiting for its tooltip to flash for a second with a hint of what it does, the Command Palette felt like magic. Tell the program what you wanted to do, and it’d do it. It was search that worked for you, a terminal you wanted to use.&lt;/p&gt;
&lt;p&gt;It was the interface computers had needed all along.&lt;/p&gt;
&lt;h2&gt;Hide and seek.&lt;/h2&gt;
&lt;p&gt;Typing into blank boxes is how personal computing started. The earliest Apple computers and PCs started with a command prompt, a &lt;code&gt;C:\\ &amp;gt;_&lt;/code&gt; waiting at your command.&lt;/p&gt;
&lt;p&gt;Enter &lt;code&gt;dir&lt;/code&gt; to browse files, &lt;code&gt;type&lt;/code&gt; to view a text file, and so on. Easy enough if you remembered a command, equally easy to mess everything up if you manage to type &lt;code&gt;format&lt;/code&gt; or &lt;code&gt;rm -rf&lt;/code&gt; in Unix.&lt;/p&gt;
&lt;p&gt;Thus, toolbars and menus, the graphical user interface that made computers approachable. “People need to feel that they can try things without damaging the system,” recommended Apple’s Human Interface Guidelines, the software design handbook for the Macintosh.&lt;/p&gt;
&lt;figure&gt;&lt;img alt="" src="https://techinch.com/content/blog/545-the-history-of-command-palettes/macpaint.png" /&gt;&lt;/figure&gt;
&lt;p&gt;Floppy disk and trash can icons made computers feel understandable, approachable even. As Netscape founder Marc Andreessen &lt;a href="https://web.archive.org/web/20210802031745/https://twitter.com/aparanjape/status/1198666368087756800"&gt;said&lt;/a&gt; in a demo of the earlier Mosaic web browser, “Instead of having to actually use cryptic commands... you can just point and click on things you're interested in.” It was decades before smartphones would make software something you could actually touch and manipulate, but the mouse was close enough. We could figure this out.&lt;/p&gt;
&lt;p&gt;Figure out, though, often meant trial and error. Computing replaced the terror of the blank page with the thrill of clicking an unknown button. Windows 95’s Minesweeper became the perfect analogy for toolbar buttons, where behind each button might lay a bomb.&lt;/p&gt;
&lt;p&gt;It was manageable at first, with merely 19 buttons in WordPad and 20 in MacPaint. But the 75 unlabeled buttons in recent versions of Photoshop are a digital minefield that take years to learn. They keep people from trying out new software, make developers default to their old terminal habits instead of playing button roulette.&lt;/p&gt;
&lt;p&gt;“Personal computers are just too hard to use, and it’s not your fault,” opened tech journalist Walt Mossberg’s first column in 1991. Despite designers’ best intentions, that same feeling still rang true a decade later.&lt;/p&gt;
&lt;h2&gt;When search started working.&lt;/h2&gt;
&lt;p&gt;If searching for the right button wasn’t hard enough, finding files wasn’t much easier. You could click through folders if you took the time to organize, but if you saved everything to your desktop, finding &lt;code&gt;document187.doc&lt;/code&gt; was an exercise in frustration at best, slow enough that Windows XP’s search box included an animated dog to keep you company while you waited.&lt;/p&gt;
&lt;p&gt;But as annoying as desktop search was at the time, it hinted at how computing should be. After all, Google could find anything on the web faster than you could find stuff on your own computer. What if you could just tell your computer what you wanted, and it’d find and run it?&lt;/p&gt;
&lt;p&gt;Then Google came to the desktop, with a tool in 2004 to search the web or your computer for files and programs in a keystroke. Suddenly we’d come full circle. The fastest way to launch programs was to type their name into a box, only a box that looked a bit more stylish than the terminal of old.&lt;/p&gt;
&lt;h2&gt;Suddenly search was everywhere.&lt;/h2&gt;
&lt;p&gt;2007 was quite the year for search. It’s when Excel gained &lt;a href="https://web.archive.org/web/20210802031745/https://support.office.com/en-us/article/use-formula-autocomplete-6d13daa5-e003-4431-abab-9edef51fae6b"&gt;Formula AutoComplete&lt;/a&gt; (as surprising as it seems that it wasn’t included all along), so you could start typing and Excel would suggest the formula you likely wanted. It’s when Visual Studio also got a file search box that &lt;a href="https://web.archive.org/web/20210802031745/https://devblogs.microsoft.com/premier-developer/visual-studio-trick-to-quickly-find-any-file-in-solution/"&gt;doubled as a command prompt&lt;/a&gt;. Two years earlier, Apple had added Spotlight to the Mac (the same search tool build into your iPhone today), but it’s what Apple added to the Mac’s search in 2007 that moved search forward.&lt;/p&gt;
&lt;figure&gt;&lt;img alt="" src="https://techinch.com/content/blog/545-the-history-of-command-palettes/finder_search.gif" /&gt;&lt;/figure&gt;
&lt;p&gt;Hidden in the release notes of &lt;a href="https://web.archive.org/web/20210802031745/https://web.archive.org/web/20080501175556/http://www.apple.com/macosx/features/300.html#system"&gt;OS X Leopard&lt;/a&gt; was &lt;em&gt;Help Menu Search&lt;/em&gt;. “A new search field in the Help menu displays all relevant menu items in the active application,” explained Apple, Spotlight for all your software features. Click help, start typing, and you could find the command you need in seconds, no trial and error required. Suddenly Photoshop’s &lt;em&gt;Crop&lt;/em&gt; tool or Excel’s &lt;em&gt;Replace&lt;/em&gt; function and every other hidden software feature were easy to find.&lt;/p&gt;
&lt;p&gt;Spotlight itself feels like a modern command line. Type an app name to launch it, &lt;code&gt;3+5&lt;/code&gt; to see its sum, &lt;code&gt;$25 in Euro&lt;/code&gt; to convert currency, and more. Paired with search inside your app’s features, you had the best of the terminal paired with the best of graphical interfaces.&lt;/p&gt;
&lt;p&gt;Buttons and menus, after all, have text describing their functions. Add search and suddenly everything was more discoverable, no cryptic commands or oddly shortened words like &lt;code&gt;dir&lt;/code&gt; needed. Menu items and button tooltips use real words, after all, the terms you’d use to describe them in real life. Search those words and you’d find the tool you need.&lt;/p&gt;
&lt;h2&gt;Taking shortcuts.&lt;/h2&gt;
&lt;p&gt;There was an easier way all along: Keyboard shortcuts, where you’d press &lt;code&gt;CMD&lt;/code&gt; or &lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;C&lt;/code&gt; to copy and so on.&lt;/p&gt;
&lt;p&gt;They're faster, for sure. “Keyboard is by far the most efficient way to navigate and control modern digital technology 90% of the time,” said @&lt;a href="https://web.archive.org/web/20210802031745/https://capiche.com/u/Blakejmyer"&gt;Blakejmyer&lt;/a&gt; in a &lt;a href="https://web.archive.org/web/20210802031745/https://capiche.com/q/do-you-prefer-using-the-mouse-touchscreens-or-keyboard-shortcuts"&gt;Capiche discussion about keyboard shortcuts&lt;/a&gt;. “Super users are keyboard only.” As engineer coach @&lt;a href="https://web.archive.org/web/20210802031745/https://capiche.com/u/MorganJLopes"&gt;MorganJLopes&lt;/a&gt; said, “The efficiency of navigating a computer without shifting hand position compounds over time.”&lt;/p&gt;
&lt;p&gt;“A mouse is okay for browsing the web, but for getting working done I prefer a keyboard.” @&lt;a href="https://web.archive.org/web/20210802031745/https://capiche.com/u/ahubbs"&gt;ahubbs&lt;/a&gt;. As @&lt;a href="https://web.archive.org/web/20210802031745/https://capiche.com/u/AndrewPenry"&gt;AndrewPenry&lt;/a&gt; said, “You can't beat the speed of not moving your hands to another device or to touch the screen.”&lt;/p&gt;
&lt;p&gt;The problem they're like magic incantations, secret codes passed down from computer classes and textbooks, not the things you’d discover on your own. “Once you know what you're doing, the keyboard is much faster for things you do all the time,” said @&lt;a href="https://web.archive.org/web/20210802031745/https://capiche.com/u/dharmesh"&gt;dharmesh&lt;/a&gt;. But you've got to know what you're doing first.&lt;/p&gt;
&lt;p&gt;“If you don’t know a shortcut, how do you look it up? And if you don't know a feature exists, how do you find it?,” mused &lt;a href="https://web.archive.org/web/20210802031745/https://superhuman.com/"&gt;Superhuman&lt;/a&gt; founder Rahul Vohra in an email conversation about command palettes.&lt;/p&gt;
&lt;h2&gt;Enter the command palette.&lt;/h2&gt;
&lt;p&gt;Early text editors like Vim took the command line approach, with commands such as &lt;code&gt;:wq&lt;/code&gt; to save your work and quit the program. They’re fast to use once you learn them—but you have to learn them in the first place.&lt;/p&gt;
&lt;p&gt;Thus the genius of the command palette in &lt;a href="https://web.archive.org/web/20210802031745/https://www.sublimetext.com/"&gt;Sublime Text&lt;/a&gt;—and its early predecessor in the Mac’s help menu search. You don’t have to learn what to press or even know what to look for. Just type and get the feature you need.&lt;/p&gt;
&lt;figure&gt;&lt;img alt="" src="https://techinch.com/content/blog/545-the-history-of-command-palettes/superhuman_cp.png" /&gt;&lt;/figure&gt;
&lt;p&gt;What makes a command palette?&lt;/p&gt;
&lt;p&gt;“A command palette has quite a few parts,” said Vohra:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“A single shortcut to invoke the palette&lt;/li&gt;
&lt;li&gt;A fuzzy matcher to find commands&lt;/li&gt;
&lt;li&gt;A way to see the direct shortcuts for next time”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://web.archive.org/web/20210802031745/https://height.app/"&gt;Height&lt;/a&gt; project management app founder Michael Villar said something similar. “There are a bunch of reasons why a command palette is interesting: it makes features completely accessible from the keyboard and discoverable in a standardized UI, makes shortcuts findable, and hides the underlying complexity behind a piece of software.”&lt;/p&gt;
&lt;p&gt;So when the Superhuman team set out to make a more efficient email experience, they knew keyboard shortcuts would speed you up and search was critical to the email experience. “And then it struck us,” said Vohra: “the answer was staring right at us in our text editor.” Sublime Text’s command palette took a single shortcut to open, matched what you typed to the commands, and showed shortcuts so you could remember next time. Superhuman brought the same to email.&lt;/p&gt;
&lt;figure&gt;&lt;img alt="" src="https://techinch.com/content/blog/545-the-history-of-command-palettes/iawriter.jpg" /&gt;&lt;/figure&gt;
&lt;p&gt;The Mac’s menu search inspired other developers to build similar tools. When &lt;a href="https://web.archive.org/web/20210802031745/https://ia.net/"&gt;iA Writer&lt;/a&gt; developer Oliver Reichenstein was asked about the inspiration for their iPhone app’s search that combines file and feature search in one dialog, he starts: “Well, in Help…”&lt;/p&gt;
&lt;p&gt;The team behind writing app &lt;a href="https://web.archive.org/web/20210802031745/https://ulysses.app/"&gt;Ulysses&lt;/a&gt; skipped feature search, but still says their in-app search was inspired by Spotlight. “We took the elements we liked, a shortcut, quick entry, simple result preview and selection, and built our own mini-version of this search into the app,” said Ulysses co-founder Max Seelemann.&lt;/p&gt;
&lt;p&gt;And some found inspiration even further back, in the terminal. As &lt;a href="https://web.archive.org/web/20210802031745/https://www.alfredapp.com/"&gt;Alfred&lt;/a&gt; search tool co-founder Vero Pepperrell said when asked where they’d first encountered a command palette, “Using a command line was the original way you'd interact with any computer.” It just took some refinement and polish to make them usable by everyone.&lt;/p&gt;
&lt;p&gt;“Command palettes are a vastly superior UI than point-and-click and can democratize the speed engineers experience in our editors,” said &lt;a href="https://web.archive.org/web/20210802031745/https://getcommande.com/"&gt;Command E&lt;/a&gt; founder Tom Uebel. Developers had long experienced their simplicity, perfect over generations in Terminal, Vim, Visual Studio, Sublime Text, and their successors. Power users discovered them in the Mac’s help search.&lt;/p&gt;
&lt;p&gt;And now they’re everywhere.&lt;/p&gt;
&lt;figure&gt;&lt;img alt="" src="https://techinch.com/content/blog/545-the-history-of-command-palettes/photoshop_command.png" /&gt;&lt;/figure&gt;
&lt;p&gt;Photoshop has a command palette hidden in its &lt;a href="https://web.archive.org/web/20210802031745/https://helpx.adobe.com/gr_en/photoshop/using/search.html"&gt;search tool&lt;/a&gt;, added in 2017 as a way to both search for stock media and to sort through the vast array of features in the photo editor. Microsoft Office has a command palette, in the top of the ribbon where the &lt;a href="https://web.archive.org/web/20210802031745/https://support.office.com/en-us/article/where-is-the-product-help-in-office-199950c6-1260-44fe-ba2e-e95968d05397"&gt;“Tell me what to do” box&lt;/a&gt; lets you search for Word, Excel, and PowerPoint features with a click or a press of &lt;code&gt;Alt&lt;/code&gt;+&lt;code&gt;Q&lt;/code&gt;. &lt;a href="https://web.archive.org/web/20210802031745/https://notion.so/"&gt;Notion&lt;/a&gt; changed the idea a bit, put its core tools behind a &lt;code&gt;/&lt;/code&gt; menu, where you type a slash then continue typing to find the tool you want. &lt;a href="https://web.archive.org/web/20210802031745/https://www.nuclino.com/"&gt;Nuclino&lt;/a&gt;, a team notes tool, and &lt;a href="https://web.archive.org/web/20210802031745/https://www.deepnote.com/"&gt;Deepnote&lt;/a&gt;, a data science tool, are among the new apps that are built around command palettes. They went from being a headline new feature to something you should almost expect new software will have.&lt;/p&gt;
&lt;h2&gt;Computers without screens.&lt;/h2&gt;
&lt;p&gt;When computer scientist Alan Kay laid out his vision for computers, he among other rules the following:&lt;/p&gt;
&lt;p&gt;“The service must not be esoteric to use. (It must be learnable in private.)”&lt;/p&gt;
&lt;p&gt;Terminals, unlabeled buttons, and keyboard shortcuts never quite hit that. We could learn them in private, sure, but they definitely were esoteric to use, at first anyhow. It took combining a few things from each into a search bar to get a new feature that could turn everyone into power users.&lt;/p&gt;
&lt;p&gt;Then as soon as it came to desktop software, the search bar disappeared again in the newest devices. Alexa, Siri, and Google Assistant all are essentially command palettes, activated by voice with no interface to see. &lt;code&gt;Hey Siri, what's the weather?&lt;/code&gt; or &lt;code&gt;Alexa, turn off living room lights&lt;/code&gt; or &lt;code&gt;Ok Google, find directions to the airport&lt;/code&gt;, and it is so.&lt;/p&gt;
&lt;p&gt;“People need to feel that they can try things without damaging the system,” said Apple’s Human Interface Guide, and the ease at which children learn to interact via voice perhaps means voice assistants at least have got the no-fear-of-damaging-the-system right.&lt;/p&gt;
&lt;p&gt;Maybe Siri’s a command palette when we don’t want to type—and real command palettes are the way to simplify work the rest of the time. Maybe the future’s less about looking for the tool we need, and more telling computers exactly what we need, and it actually working.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Originally published on the now-defunct &lt;a href="https://web.archive.org/web/20210802031745/https://capiche.com/e/consumer-dev-tools-command-palette"&gt;Capiche blog&lt;/a&gt; on February 21, 2020.&lt;/em&gt;&lt;/p&gt;</description><author>Techinch | Latest Articles</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://techinch.com/blog/the-history-of-command-palettes</guid></item><item><title/><link>https://chrishannah.me/micro/2026-05-30-21-06/</link><description>So I guess that's what losing the Champions League feels like then. At least we're still Premier League Champions.</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/micro/2026-05-30-21-06/</guid></item><item><title/><link>https://chrishannah.me/micro/2026-05-30-03-16/</link><description>There's just under 14 hours until the UEFA Champions League Final. Let's hope Arsenal can finally bring home the trophy. 🏆</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/micro/2026-05-30-03-16/</guid></item><item><title/><link>https://chrishannah.me/micro/2026-05-28-22-59/</link><description>Britain is typically a cold, wet, and gray place. But whenever the sun comes out, the country seems to come alive. The pub gardens are full, people are out having picnics, kids are out playing, and...</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/micro/2026-05-28-22-59/</guid></item><item><title>Dumbing Down my Phone</title><link>https://chrishannah.me/dumbing-down-my-phone/</link><description>I've been trying to organically spend less time on my iPhone. For a few weeks my average daily usage dropped from over 6 hours to around 4 hours a day, but it has been creeping up again. However, I...</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/dumbing-down-my-phone/</guid></item><item><title>One Week of Keeping an Eye on my Phone Usage</title><link>https://chrishannah.me/one-week-of-keeping-an-eye-on-my-phone-usage/</link><description>A week ago I wrote about wanting to cut down on phone usage. I kept that idea in my mind throughout the week, and tried to get an idea of what the problem was. Just to give some raw data, my average...</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/one-week-of-keeping-an-eye-on-my-phone-usage/</guid></item><item><title>My Favourite Films</title><link>https://chrishannah.me/my-favourite-films/</link><description>I've been reflecting on my favourite films, and I've come up with three: Perfect Days (2023) The Secret Life of Walter Mitty (2013) Seven Years in Tibet (1997) Those are my three favourite individual...</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/my-favourite-films/</guid></item><item><title>Cutting Down on my Phone Usage</title><link>https://chrishannah.me/cutting-down-on-my-phone-usage/</link><description>After realising my average phone screen time was 6 hours a day, I've decided I want to start using it less. Although, I don't have any specific goals in mind just yet. First I will give myself a week...</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/cutting-down-on-my-phone-usage/</guid></item><item><title>The Mac I Want Doesn't Exist</title><link>https://chrishannah.me/the-mac-i-want-doesn-t-exist/</link><description>I've had a 14&amp;quot; M1 MacBook Pro for over 4 years now, and it's served me well since then. Apart from storage limitations (500 GB), I haven't felt held back by this machine at any point. However, I...</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/the-mac-i-want-doesn-t-exist/</guid></item><item><title>Miniroll Global Feed</title><link>https://chrishannah.me/miniroll-global-feed/</link><description>One reason I built Miniroll was because I wanted a place to discover new blogs to read. However, even if I added an explore page where you can view a random set of blogrolls and blogs that have been...</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/miniroll-global-feed/</guid></item><item><title>The Place for the MacBook Neo</title><link>https://chrishannah.me/the-place-for-the-macbook-neo/</link><description>There seems to be a very big gap in the capabilities of modern computers compared to the actual use case of the general person. Whether it's a phone, laptop, or any type of technology. Marketing and...</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/the-place-for-the-macbook-neo/</guid></item><item><title>A Growing Collection of &amp;amp;quot;Mini&amp;amp;quot; Apps</title><link>https://chrishannah.me/a-growing-collection-of-mini-apps/</link><description>At the start of 2026, I wrote about wanting to produce more this year, and so far I've been doing just that. Back in January I launched Miniroll, a way to create, manage, share, and embed blogrolls....</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/a-growing-collection-of-mini-apps/</guid></item><item><title>Instagram in 2026</title><link>https://chrishannah.me/instagram-in-2026/</link><description>Recently, I've been thinking about Instagram. What it used to be, and what it is now. I wish Instagram was 2012 Instagram.&amp;mdash; Chris 💻 (@chrishannah) February 8, 2026 In the good days of...</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/instagram-in-2026/</guid></item><item><title>Miniroll</title><link>https://chrishannah.me/miniroll/</link><description>This year is already off to a productive start, as I've launched my first new project! It's called Miniroll, and it's a way to create, share, and embed blogrolls. Along with many other things. It's...</description><author>Chris Hannah</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://chrishannah.me/miniroll/</guid></item><item><title>First Class Goto</title><link>https://ssp.impulsetrain.com/goto.html</link><description>&lt;p&gt;&lt;a href="http://cgit.freedesktop.org/~sandmann/oort/"&gt;Oort&lt;/a&gt; is an experimental
programming language I have been working on, on and off (mostly off),
since 2007. It is a statically typed, object-oriented, imperative
language, where classes, functions and methods can be nested
arbitrarily, and where functions and methods are full closures, ie.,
they can be stored in variables and returned from functions. The
control structures are the usual ones: &lt;strong&gt;if&lt;/strong&gt;, &lt;strong&gt;for&lt;/strong&gt;, &lt;strong&gt;while&lt;/strong&gt;,
&lt;strong&gt;do&lt;/strong&gt;, &lt;strong&gt;goto&lt;/strong&gt;, etc.&lt;/p&gt;
&lt;p&gt;It also has an unusual feature: goto labels are &lt;em&gt;first class&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;What does it mean for labels to be first class? It means two things:
(1) they are lexically scoped so that they are visible from inside
nested functions. This makes it possible to jump from any point in the
program to any other location that is visible from that point, even if
that location is in another function. And (2) labels can be used as
values: They can be passed to and returned from functions and methods,
and they can be stored in data structures.&lt;/p&gt;
&lt;p&gt;As a simple example, consider a data structure with a &amp;ldquo;foreach&amp;rdquo; method
that takes a callback function and calls it for every item in the data
structure. In Oort this might look like this:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="err"&gt;table:&lt;/span&gt; &lt;span class="err"&gt;array[person_t];&lt;/span&gt;

&lt;span class="err"&gt;table.foreach&lt;/span&gt; &lt;span class="err"&gt;(fn&lt;/span&gt; &lt;span class="err"&gt;(p:&lt;/span&gt; &lt;span class="err"&gt;person_t)&lt;/span&gt; &lt;span class="err"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;void&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
        &lt;span class="err"&gt;print&lt;/span&gt; &lt;span class="err"&gt;p.name;&lt;/span&gt;
        &lt;span class="err"&gt;print&lt;/span&gt; &lt;span class="err"&gt;p.age;&lt;/span&gt;
    &lt;span class="err"&gt;});&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;div class="para"&gt;&lt;/div&gt;

&lt;p&gt;A note about syntax. In Oort, anonymous functions are defined like this:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;fn&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;&amp;lt;arguments&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&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="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;and variables and arguments are declared like this:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="sr"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;&amp;lt;type&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;so the code above defines an anonymous function that prints the name
and the age of person and passes that function to the foreach method
of the table.&lt;/p&gt;
&lt;p&gt;What if we want to stop the iteration? You could have the callback
return &lt;code&gt;true&lt;/code&gt; to stop, or you could have it throw an
exception. However, both methods are a little clumsy: The first
because the return value might be useful for other purposes, the
second because stopping the iteration isn&amp;rsquo;t really an exceptional
situation.&lt;/p&gt;
&lt;p&gt;With lexically scoped labels there is a direct solution &amp;ndash; just use
&lt;code&gt;goto&lt;/code&gt; to jump out of the callback:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;  &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p:&lt;/span&gt; &lt;span class="n"&gt;person_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;void&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;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&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;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&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="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
              &lt;span class="nb"&gt;goto&lt;/span&gt; &lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nv"&gt;@done:&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Note what&amp;rsquo;s going on here: Once we find a person older than 50, we
jump out of the anonymous callback and back into the enclosing
function. The git tree has &lt;a href="http://cgit.freedesktop.org/~sandmann/oort/tree/examples/foreach.nl"&gt;a running
example&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Call/cc in terms of goto&lt;/h2&gt;
&lt;p&gt;In Scheme and some other languages there is a feature called call/cc,
which is famous for being both powerful and mindbending. What it does
is, it takes the concept of &amp;ldquo;where we are in the program&amp;rdquo; and packages
it up as a function. This function, called the &lt;em&gt;continuation&lt;/em&gt;, is then
passed to another, user-defined, function. If the user-defined
function calls the continuation, the program will resume from the
point where call/cc was invoked. The mindbending part is that a
continuation can be stored in data structures and called multiple
times, which means the call/cc invocation can in effect return more
than once.&lt;/p&gt;
&lt;p&gt;Lexically scoped labels are at least as expressive as call/cc, because
if you have them, you can write call/cc as a function:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;call_cc&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;callback:&lt;/span&gt; &lt;span class="n"&gt;fn&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k:&lt;/span&gt; &lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;void&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;void&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;callback&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="nb"&gt;goto&lt;/span&gt; &lt;span class="n"&gt;current_continuation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nv"&gt;@current_continuation:&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Let&amp;rsquo;s see what&amp;rsquo;s going on here. A function called call_cc() is defined:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;call_cc&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;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;void&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;This function takes another function as argument:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="err"&gt;callback:&lt;/span&gt; &lt;span class="err"&gt;fn&lt;/span&gt; &lt;span class="err"&gt;(...)&lt;/span&gt; &lt;span class="err"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;void&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;And that function takes the continuation as an argument:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="err"&gt;k:&lt;/span&gt; &lt;span class="err"&gt;fn()-&amp;gt;void&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The body of call/cc calls the callback:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;callback&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;/pre&gt;&lt;/div&gt;


&lt;p&gt;passing an anonymous function (the continuation):&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;goto&lt;/span&gt; &lt;span class="n"&gt;current_continuation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;@current_continuation:&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;that just jumps to the point where &lt;code&gt;call_cc&lt;/code&gt; returns. So when &lt;code&gt;callback&lt;/code&gt;
decides to invoke the continuation, execution will resume at the point
where &lt;code&gt;call_cc&lt;/code&gt; was invoked. Since there is nothing stopping
&lt;code&gt;callback&lt;/code&gt; from storing the continuation in a data structure or from
invoking it multiple times, we have the full call/cc semantics.&lt;/p&gt;
&lt;h2&gt;Cooperative thread system&lt;/h2&gt;
&lt;p&gt;One of the examples on the &lt;a href="http://en.wikipedia.org/wiki/Call-with-current-continuation"&gt;Wikipedia page about
call/cc&lt;/a&gt;
is a cooperative thread system. With the &lt;code&gt;call_cc&lt;/code&gt; function above, we
could directly translate the Wikipedia code into Oort, but using the
second aspect of the first-class-ness of labels &amp;ndash; that they can be
stored directly in data structures &amp;ndash; makes it possible to write a
more straightforward version:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="err"&gt;run_list:&lt;/span&gt; &lt;span class="err"&gt;list[label]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;new&lt;/span&gt; &lt;span class="err"&gt;list[label]();&lt;/span&gt;

&lt;span class="err"&gt;thread_fork&lt;/span&gt; &lt;span class="err"&gt;(child:&lt;/span&gt; &lt;span class="err"&gt;fn()&lt;/span&gt; &lt;span class="err"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;void)&lt;/span&gt;
&lt;span class="err"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;run_list.append&lt;/span&gt; &lt;span class="err"&gt;(me);&lt;/span&gt;
    &lt;span class="err"&gt;child();&lt;/span&gt;
    &lt;span class="err"&gt;goto&lt;/span&gt; &lt;span class="err"&gt;run_list.pop_head();&lt;/span&gt;
&lt;span class="err"&gt;@me:&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="err"&gt;thread_yield()&lt;/span&gt;
&lt;span class="err"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;run_list.append&lt;/span&gt; &lt;span class="err"&gt;(me);&lt;/span&gt;
    &lt;span class="err"&gt;goto&lt;/span&gt; &lt;span class="err"&gt;run_list.pop_head&lt;/span&gt; &lt;span class="err"&gt;();&lt;/span&gt;
&lt;span class="err"&gt;@me:&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="err"&gt;thread_exit()&lt;/span&gt;
&lt;span class="err"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;if&lt;/span&gt; &lt;span class="err"&gt;(!run_list.is_empty())&lt;/span&gt;
        &lt;span class="err"&gt;goto&lt;/span&gt; &lt;span class="err"&gt;run_list.pop_head();&lt;/span&gt;
    &lt;span class="err"&gt;else&lt;/span&gt;
        &lt;span class="err"&gt;process_exit();&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;run_list&lt;/code&gt; variable is a list of labels containing the current
positions of all the active threads. The keyword &lt;code&gt;label&lt;/code&gt; in Oort is
simply a type specifier similar to &lt;code&gt;string&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To create a new thread, &lt;code&gt;thread_fork&lt;/code&gt; first saves the position of the
current thread on the list, and then it calls the child
function. Similarly, &lt;code&gt;thread_yield&lt;/code&gt; yields to another thread by saving
the position of the current thread and jumping to the first label on
the list. Exiting a thread consists of jumping to the first thread if
there is one, and exiting the process if there isn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;The code above doesn&amp;rsquo;t actually run because the current Oort
implementation doesn&amp;rsquo;t support genericity, but
&lt;a href="http://cgit.freedesktop.org/~sandmann/oort/tree/examples/pc.nl"&gt;here&lt;/a&gt;
is a somewhat uglier version that actually runs, while still
demonstrating the principle.&lt;/p&gt;</description><author>Søren Sandmann Pedersen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ssp.impulsetrain.com/goto.html</guid></item><item><title>Celebrities die 2.7183 at a time</title><link>https://ssp.impulsetrain.com/celebrities.html</link><description>&lt;p&gt;The claim that celebrities die in threes is usually dismissed as the
result of the human propensity to see patterns where there are
none. But celebrities don&amp;rsquo;t die at regularly spaced intervals
either. It would be very weird if a celebrity predictably died on the
14th of every month. And once you deviate from a regularly spaced
pattern, some amount of clustering is inevitable. Can we make this
more precise?&lt;/p&gt;
&lt;p&gt;Rather than trying to define exactly what constitutes a celebrity,
I&amp;rsquo;ll simply assume that they die at a fixed rate and that they do so
independently of each other (&lt;a href="http://www.geeksofdoom.com/2013/02/03/remembering-february-3-1959-the-day-the-music-died"&gt;The Day the Music
Died&lt;/a&gt;
notwithstanding). It follows that celebrity deaths is a &lt;a href="http://en.wikipedia.org/wiki/Poisson_process"&gt;Poisson
process&lt;/a&gt; with intensity
$\lambda$ where $\lambda$ is the number of deaths that occur in some
fixed time period.&lt;/p&gt;
&lt;p&gt;As an example, suppose we define celebrityhood in such a way that
twelve celebrities die each year on average. Then $\lambda =
12/\text{year}$, and because the time between events in a Poisson
process is &lt;a href="http://en.wikipedia.org/wiki/Exponential_distribution"&gt;exponentially
distributed&lt;/a&gt;
with parameter $\lambda$, the average time between two deaths is
$1/\lambda$ = 1/12th year, or one month.&lt;/p&gt;
&lt;p&gt;What does it mean for celebrities to die $n$ at a time? We will simply
say that two celebrities die together if the period between their
deaths is shorter than expected. If the celebrity death rate is
12/year, then two celebrities died together if their deaths were less
than one month apart. Similarly, three celebrities died together if
the period between death 1 and death 2 and the period between death 2
and death 3 were both shorter than a month. In general, $k$
celebrities died together if the $k - 1$ periods between their deaths
were all shorter than expected.&lt;/p&gt;
&lt;p&gt;Here is a diagram of 10 years worth of randomly generated deaths with
12 deaths per year and clusters as defined above highlighted:&lt;/p&gt;
&lt;p&gt;&lt;img src="celebrities/diagram.png" /&gt;&lt;/p&gt;
&lt;h2&gt;Average cluster size&lt;/h2&gt;
&lt;p&gt;Suppose a celebrity has just died after a longer than average
wait. This death will start a new cluster, and we want to figure out
what the size of it is.  &lt;/p&gt;
&lt;p&gt;In a Poisson process the waiting time between two events is
exponentially distributed with parameter $\lambda$, so it can be
modelled with a stochastic variable $W \sim Exp(\lambda)$. The cluster
size itself is modelled with another stochastic variable, $C$, whose
distribution is derived as follows.&lt;/p&gt;
&lt;p&gt;The cluster size will be 1 when the waiting time for the next death is
larger than or equal to the average (which is $1/\lambda$ for the
exponential distribution):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\text{P}(C = 1) = \text{P}(W &amp;gt; 1/\lambda)$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The probability that the cluster will have size 2 is the same as the
probability that the next waiting time is shorter than average and the
next one after that is longer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\text{P}(C = 2) = \text{P}(W \le 1/\lambda)\cdot \text{P}(W &amp;gt; 1/\lambda)$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For size three, it&amp;rsquo;s the probability that the next two waiting times
are shorter and the third one longer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\text{P}(C = 3) = \text{P}(W \le 1/\lambda)^2\cdot \text{P}(W &amp;gt; 1/\lambda)$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In general, the probability that the next cluster will be size $k$ is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\text{P}(C = k) = \text{P}(W \le 1/\lambda)^{k - 1}\cdot \text{P}(W &amp;gt; 1/\lambda)$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So what&amp;rsquo;s the average size of a Celebrity Death Cluster? The expected
value of $C$ is given by:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle \text{E}[C] = \sum_{k=1}^\infty k \cdot \text{P}(C = k) = \sum_{k=1}^\infty  k\cdot \text{P}(W \le 1/\lambda)^{k - 1}\cdot \text{P}(W &amp;gt; 1/\lambda)$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Plugging in the distribution function for the exponential
distribution, we get:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$
\begin{align*} \text{E}[C] &amp;amp;= \sum_{k=1}^\infty k \cdot (1 - e^{- \lambda \cdot (1/\lambda) })^{k - 1} \cdot  (1 - (1 - e^{- \lambda \cdot (1 / \lambda)}))\\
&amp;amp;= \sum_{k=1}^\infty k \cdot (1 - e^{- 1})^{k - 1} \cdot e^{-1}
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&amp;rsquo;s not hard to show that this infinite series has sum $e$ (Hint: Use
the fact that $k x^{k - 1}$ is the derivative of $x^k$), so on
average, celebrities die 2.7183 at a time.&lt;/p&gt;</description><author>Søren Sandmann Pedersen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ssp.impulsetrain.com/celebrities.html</guid></item><item><title>The Radix Heap</title><link>https://ssp.impulsetrain.com/radix-heap.html</link><description>&lt;p&gt;The &lt;em&gt;Radix Heap&lt;/em&gt; is a priority queue that has better caching behavior
than the well-known &lt;a href="http://en.wikipedia.org/wiki/Binary_Heap"&gt;binary heap&lt;/a&gt;, but also two restrictions: (a)
that all the keys in the heap are integers and (b) that you can never
insert a new item that is smaller than all the other items currently
in the heap.&lt;/p&gt;
&lt;p&gt;These restrictions are not that severe. The Radix Heap still works in
many algorithms that use heaps as a subroutine: Dijkstra&amp;rsquo;s
shortest-path algorithm, Prim&amp;rsquo;s minimum spanning tree algorithm,
various sweepline algorithms in computational geometry.&lt;/p&gt;
&lt;p&gt;Here is how it works. If we assume that the keys are 32 bit integers,
the radix heap will have 33 buckets, each one containing a list of
items. We also maintain one global value &lt;code&gt;last_deleted&lt;/code&gt;, which is
initially &lt;code&gt;MIN_INT&lt;/code&gt; and otherwise contains the last value extracted
from the queue.&lt;/p&gt;
&lt;p&gt;The invariant is this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The items in bucket $k$ differ from &lt;code&gt;last_deleted&lt;/code&gt; in bit $k - 1$,
  but not in bit $k$ or higher. The items in bucket 0 are equal to
  &lt;code&gt;last_deleted&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For example, if we compare an item from bucket 10 to &lt;code&gt;last_deleted&lt;/code&gt;,
we will find that bits 31&amp;ndash;10 are equal, bit 9 is different, and bits
8&amp;ndash;0 may or may not be different.&lt;/p&gt;
&lt;p&gt;Here is an example of a radix heap where the last extracted value was
7:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="radix-heap/radix1.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As an example, consider the item 13 in bucket 4. The bit pattern of 7
is 0111 and the bit pattern of 13 is 1101, so the highest bit that is
different is bit number 3. Therefore the item 13 belongs in bucket $3
+ 1 = 4$. Buckets 1, 2, and 3 are empty, but that&amp;rsquo;s because a number
that differs from 7 in bits 0, 1, or 2 would be smaller than 7 and so
isn&amp;rsquo;t allowed in the heap according to restriction (b).&lt;/p&gt;
&lt;h2&gt;Operations&lt;/h2&gt;
&lt;p&gt;When a new item is inserted, it has to be added to the correct
bucket. How can we compute the bucket number? We have to find the
highest bit where the new item differs from &lt;code&gt;last_deleted&lt;/code&gt;. This is
easily done by &lt;code&gt;XOR&lt;/code&gt;ing them together and then finding the highest bit
in the result. Adding one then gives the bucket number:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;bucket_no&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;highest_bit&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_element&lt;/span&gt; &lt;span class="n"&gt;XOR&lt;/span&gt; &lt;span class="n"&gt;last_deleted&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;/pre&gt;&lt;/div&gt;


&lt;p&gt;where &lt;code&gt;highest_bit(x)&lt;/code&gt; is a function that returns the highest set bit
of &lt;code&gt;x&lt;/code&gt;, or $-1$ if &lt;code&gt;x&lt;/code&gt; is 0.&lt;/p&gt;
&lt;p&gt;Inserting the item clearly preserves the invariant because the new
item will be in the correct bucket, and &lt;code&gt;last_deleted&lt;/code&gt; didn&amp;rsquo;t change,
so all the existing items are still in the right place.&lt;/p&gt;
&lt;p&gt;Extracting the minimum involves first finding the minimal item by
walking the lowest-numbered non-empty bucket and finding the minimal
item in that bucket. Then that item is deleted and &lt;code&gt;last_deleted&lt;/code&gt; is
updated. Then the bucket is walked again and all the items are
redistributed into new buckets according to the new &lt;code&gt;last_deleted&lt;/code&gt;
item.&lt;/p&gt;
&lt;p&gt;The extracted item will be the minimal one in the data structure
because we picked the minimal item in the redistributed bucket, and
all the buckets with lower numbers are empty. And if there were a
smaller item in one of the buckets with higher numbers, it would be
differing from &lt;code&gt;last_deleted&lt;/code&gt; in one of the more significant bits, say
bit $k$. But since the items in the redistributed bucket are equal to
&lt;code&gt;last_deleted&lt;/code&gt; in bit $k$, the hypothetical smaller item would then
have to also be smaller than &lt;code&gt;last_deleted&lt;/code&gt;, which it can&amp;rsquo;t be because
of restriction (b) mentioned in the introduction. Note that this
argument also works for two-complement signed integers.&lt;/p&gt;
&lt;p&gt;We have to be sure this doesn&amp;rsquo;t violate the invariant. First note that
all the items that are being redistributed will satisfy the invariant
because they are simply being inserted. The items in a bucket with a
higher number $k$ were all different from the old &lt;code&gt;last_deleted&lt;/code&gt; in
the $(k-1)$th bit. This bit must then necessarily also be different
from the $(k-1)$th bit in the new &lt;code&gt;last_deleted&lt;/code&gt;, because if it
weren&amp;rsquo;t, the new &lt;code&gt;last_deleted&lt;/code&gt; would itself have belonged in bucket
$k$. And finally, since the bucket being redistributed is the
lowest-numbered non-empty one, there can&amp;rsquo;t be any items in a bucket
with a lower number. So the invariant still holds.&lt;/p&gt;
&lt;p&gt;In the example above, if we extract the two &amp;lsquo;7&amp;rsquo;s from bucket 0 and the
&amp;lsquo;8&amp;rsquo; from bucket 4, the new heap will look like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="radix-heap/radix8.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Notice that bucket 4, where the &amp;lsquo;8&amp;rsquo; came from, is now empty.&lt;/p&gt;
&lt;h2&gt;Performance&lt;/h2&gt;
&lt;p&gt;Inserting into the radix heap takes constant time because all we have
to do is add the new item to a list. Determining the highest set bit
can be done in constant time with an instruction such as &lt;code&gt;bsr&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The performance of extraction is dominated by the redistribution of
items. When a bucket is redistributed, it ends up being empty. To see
why, remember that all the items are different from &lt;code&gt;last_deleted&lt;/code&gt; in
the $(k - 1)$th bit. Because the new &lt;code&gt;last_deleted&lt;/code&gt; comes from bucket
$k$, the items are now all &lt;em&gt;equal&lt;/em&gt; to &lt;code&gt;last_deleted&lt;/code&gt; in the $(k -
1)th$ bit. Hence they will all be redistributed to a lower-numbered
bucket.&lt;/p&gt;
&lt;p&gt;Now consider the life-cycle of a single element. In the worst case it
starts out being added to bucket 31 and every time it is
redistributed, it moves to a lower-numbered bucket. When it reaches
bucket 0, it will be next in line for extraction. It follows that the
maximum number of redistributions that an element can experience is
31.&lt;/p&gt;
&lt;p&gt;Since a redistribution takes constant time per element distributed,
and since an element will only be redistributed $d$ times, where $d$
is the number of bits in the element, it follows that the amortized
time complexity of extraction is $O(d)$. In practice we will often do
better though, because most items will not move through all the
buckets.&lt;/p&gt;
&lt;h2&gt;Caching performance&lt;/h2&gt;
&lt;p&gt;Some descriptions of the radix heap recommend implementing the buckets
as doubly linked lists, but that would be a mistake because linked
lists have terrible cache locality. It is better to implement them as
dynamically growing arrays. If you do that, the top of the buckets
will tend to be hot which means the per-item number of cache misses
during redistribution of a bucket will tend to be $O(1/B)$, where $B$
is the number of integers in a cache line. This means the amortized
cache-miss complexity of extraction will be closer to $O(d/B)$ than to
$O(d)$.&lt;/p&gt;
&lt;p&gt;In a regular binary heap, both insertion and extraction require
$\Theta(\log n)$ swaps in the worst case, and each swap (except for
those very close to the top of the heap) will cause a cache miss.&lt;/p&gt;
&lt;p&gt;In other words, if $d = \Theta(\log n)$, extraction from a radix heap will
tend to generate $\Theta(\log n / B)$ cache misses, where a binary heap will
require $\Theta(\log n)$.&lt;/p&gt;
&lt;!--
Surprisingly, the English-language Wikipedia doesn't have an article
on radix heaps. If someone wants to fix that, feel free to use any
material in this post under whatever license is useful to that end.
--&gt;</description><author>Søren Sandmann Pedersen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ssp.impulsetrain.com/radix-heap.html</guid></item><item><title>Porter/Duff Compositing and Blend Modes</title><link>https://ssp.impulsetrain.com/porterduff.html</link><description>&lt;p&gt;In the Porter/Duff compositing algebra, images are equipped with an
alpha channel that determines on a per-pixel basis whether the image
is there or not. When the alpha channel is 1, the image is fully
there, when it is 0, the image isn&amp;rsquo;t there at all, and when it is in
between, the image is partially there. In other words, the alpha
channel describes the &lt;em&gt;shape&lt;/em&gt; of the image, it does not describe
opacity. The way to think of images with an alpha channel is as
irregularly shaped pieces of cardboard, not as colored glass.&lt;/p&gt;
&lt;p&gt;Consider these two images:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="porterduff/source.png" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;img src="porterduff/dest.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When we combine them, each pixel of the result can be divided into four regions:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="porterduff/diagram.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;One region where only the source is present, one where only the
destination is present, one where both are present, and one where
neither is present.&lt;/p&gt;
&lt;p&gt;By deciding on what happens in each of the four regions, various
effects can be generated. For example, if the destination-only region
is treated as blank, the source-only region is filled with the source
color, and the &amp;lsquo;both&amp;rsquo; region is filled with the destination color like
this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="porterduff/destatop-diagram.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The effect is as if the destination image is trimmed to match the
source image, and then held up in front of it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="porterduff/destatop.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Porter/Duff operator that does this is called &amp;ldquo;Dest Atop&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;There are twelve of these operators, each one characterized by its
behavior in the three regions: source, destination and both. The
&amp;lsquo;neither&amp;rsquo; region is always blank. The source and destination regions
can either be blank or filled with the source or destination colors
respectively.&lt;/p&gt;
&lt;p&gt;The formula for the operators is a linear combination of the contents
of the four regions, where the weights are the areas of each region:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$A_\text{src} \cdot [s] + A_\text{dest} \cdot [d] +  A_\text{both} \cdot [b]$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Where $[s]$ is either 0 or the color of the source pixel, $[d]$
either 0 or the color of the destination pixel, and $[b]$ is either
0, the color of the source pixel, or the color of the destination
pixel. With the alpha channel being interpreted as coverage, the areas
are given by these formulas:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$A_\text{src} = \alpha_\text{s} \cdot (1 - \alpha_\text{d})\\
A_\text{dst} = \alpha_\text{d} \cdot (1 - \alpha_\text{s})\\
A_\text{both} = \alpha_\text{s} \cdot \alpha_\text{d}$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The alpha channel of the result is computed in a similar way:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$A_\text{src} \cdot [\text{as}] + A_\text{dest} \cdot [\text{ad}] + A_\text{both} \cdot [\text{ab}]$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;where $[\text{as}]$ and $[\text{ad}]$ are either 0 or 1 depending
on whether the source and destination regions are present, and where
$[\text{ab}]$ is 0 when the &amp;lsquo;both&amp;rsquo; region is blank, and 1 otherwise.&lt;/p&gt;
&lt;p&gt;Here is a table of all the Porter/Duff operators:&lt;/p&gt;
&lt;table width="100%"&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;$[\text{s}]$&lt;/td&gt;&lt;td&gt;$[\text{d}]$&lt;/td&gt;&lt;td&gt;$[\text{b}]$&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Src&lt;/td&gt;&lt;td&gt;$s$&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;td&gt;s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Atop&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;td&gt;$d$&lt;/td&gt;&lt;td&gt;s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Over&lt;/td&gt;&lt;td&gt;$s$&lt;/td&gt;&lt;td&gt;$d$&lt;/td&gt;&lt;td&gt;s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;In&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;td&gt;s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Out&lt;/td&gt;&lt;td&gt;$s$&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Dest&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;td&gt;$d$&lt;/td&gt;&lt;td&gt;d&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;DestAtop&lt;/td&gt;&lt;td&gt;$s$&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;td&gt;d&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;DestOver&lt;/td&gt;&lt;td&gt;$s$&lt;/td&gt;&lt;td&gt;$d$&lt;/td&gt;&lt;td&gt;d&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;DestIn&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;td&gt;d&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;DestOut&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;td&gt;$d$&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Clear&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Xor&lt;/td&gt;&lt;td&gt;$s$&lt;/td&gt;&lt;td&gt;$d$&lt;/td&gt;&lt;td&gt;$0$&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;And here is how they look:&lt;/p&gt;
&lt;p&gt;&lt;img src="porterduff/table.png" /&gt;&lt;/p&gt;
&lt;p&gt;Despite being referred to as alpha blending and despite alpha often
being used to model opacity, in concept Porter/Duff is not a way to
blend the source and destination shapes. It is way to overlay, combine
and trim them as if they were pieces of cardboard. The only place
where source and destination pixels are actually &lt;em&gt;blended&lt;/em&gt; is along
the antialiased edges.&lt;/p&gt;
&lt;h2&gt;Blending&lt;/h2&gt;
&lt;p&gt;Photoshop and the Gimp have a concept of layers which are images
stacked on top of each other. In Porter/Duff, stacking images on top
of each other is done with the &amp;ldquo;Over&amp;rdquo; operator, which is also what
Photoshop/Gimp use by default to composite layers:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="porterduff/over-diagram.png" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;img src="porterduff/over.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Conceptually, two pieces of cardboard are held up with one in front of
the other. Neither shape is trimmed, and in places where both are
present, only the top layer is visible.&lt;/p&gt;
&lt;p&gt;A layer in these programs also has an associated &lt;em&gt;Blend Mode&lt;/em&gt; which
can be used to modify what happens in places where both are
visible. For example, the &amp;lsquo;Color Dodge&amp;rsquo; blend mode computes a mix of
source and destination according to this formula:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$
\begin{equation*}
B(s,d)=
\begin{cases} 0 &amp;amp; \text{if \(d=0\),}
\\
1 &amp;amp; \text{if \(d \ge (1 - s)\),}
\\
d / (1 - s) &amp;amp; \text{otherwise}
\end{cases}
\end{equation*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The result is this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="porterduff/colordodge-diagram.png" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;img src="porterduff/colordodge-both.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unlike with the regular Over operator, in this case there is a
substantial chunk of the output where the result is actually a mix of
the source and destination.&lt;/p&gt;
&lt;p&gt;Layers in Photoshop and Gimp are not tailored to each other (except
for layer masks, which we will ignore here), so the compositing of the
layer stack is done with the source-only and destination-only region
set to source and destination respectively. However, there is nothing
in principle stopping us from setting the source-only and
destination-only regions to blank, but keeping the blend mode in the
&amp;lsquo;both&amp;rsquo; region, so that tailoring could be supported alongside
blending. For example, we could set the &amp;lsquo;source&amp;rsquo; region to blank, the
&amp;lsquo;destination&amp;rsquo; region to the destination color, and the &amp;lsquo;both&amp;rsquo; region
to ColorDodge:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="porterduff/colordodge-dest-diagram.png" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;img src="porterduff/colordodge-dest.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here are the four combinations that involve a ColorDodge blend mode:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="porterduff/colordodge-none.png" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;img src="porterduff/colordodge-source.png" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;img src="porterduff/colordodge-dest.png" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;img src="porterduff/colordodge-both.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In this model the original twelve Porter/Duff operators can be viewed
as the results of three simple blend modes:&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;Source:&lt;/td&gt;&lt;td&gt;$B(s, d) = s$&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Dest:&lt;/td&gt;&lt;td&gt;$B(s, d) = d$&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Zero:&lt;/td&gt;&lt;td&gt;$B(s, d) = 0$&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;In this generalization of Porter/Duff the blend mode is chosen from a
large set of formulas, and each formula gives rise to four new
compositing operators characterized by whether the source and
destination are blank or contain the corresponding pixel color.&lt;/p&gt;
&lt;p&gt;Here is a table of the operators that are generated by various blend
modes:&lt;/p&gt;
&lt;p&gt;&lt;img src="porterduff/colordodge-table.png" /&gt;&lt;/p&gt;
&lt;p&gt;The general formula is still an area weighted average:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$A_\text{src} \cdot [s] + A_\text{dest} \cdot [d] + A_\text{both}\cdot B(s, d)$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;where [s] and [d] are the source and destination colors respectively
or 0, but where $B(s, d)$ is no longer restricted to one of $0$, $s$,
and $d$, but can instead be chosen from a large set of formulas.&lt;/p&gt;
&lt;p&gt;The output of the alpha channel is the same as before:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$A_\text{src} \cdot [\text{as}] + A_\text{dest} \cdot [\text{ad}] +
A_\text{both} \cdot [\text{ab}]$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;except that [ab] is now determined by the blend mode. For the Zero
blend mode there is no coverage in the both region, so [ab] is 0; for
most others, there is full coverage, so [ab] is 1.&lt;/p&gt;</description><author>Søren Sandmann Pedersen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ssp.impulsetrain.com/porterduff.html</guid></item><item><title>Big-O Misconceptions</title><link>https://ssp.impulsetrain.com/big-o.html</link><description>&lt;p&gt;In computer science and sometimes mathematics, big-O notation is used
to talk about how quickly a function grows while disregarding
multiplicative and additive constants. When classifying algorithms,
big-O notation is useful because it lets us abstract away the
differences between real computers as just multiplicative and additive
constants.&lt;/p&gt;
&lt;p&gt;Big-O is not a difficult concept at all, but it seems to be common
even for people who should know better to misunderstand some aspects
of it. The following is a list of misconceptions that I have seen in
the wild.&lt;/p&gt;
&lt;p&gt;But first a definition: We write&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$f(n) = O(g(n))$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;when $f(n) \le M g(n)$ for sufficiently large $n$, for some positive constant $M$.&lt;/p&gt;
&lt;h2&gt;Misconception 1: &amp;ldquo;The Equals Sign Means Equality&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;The equals sign in&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$f(n) = O(g(n))$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;is a widespread travestry. If you take it at face value, you can
deduce that since $5 n$ and $3 n$ are both equal to $O(n)$, then $3 n$
must be equal to $5 n$ and so $3 = 5$.&lt;/p&gt;
&lt;p&gt;The expression $f(n) = O(g(n))$ doesn&amp;rsquo;t type check. The left-hand-side
is a function, the right-hand-side is a &amp;#8230; what, exactly? There is no
help to be found in the definition. It just says &amp;ldquo;we write&amp;rdquo; without
concerning itself with the fact that what &amp;ldquo;we write&amp;rdquo; is total
nonsense.&lt;/p&gt;
&lt;p&gt;The way to interpret the right-hand side is as a &lt;em&gt;set&lt;/em&gt; of functions:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ O(f) = \{ g \mid g(n) \le M f(n) \text{ for some \(M &amp;gt; 0\) for large \(n\)}\}. $&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;With this definition, the world makes sense again: If $f(n) = 3 n$
and $g(n) = 5 n$, then $f \in O(n)$ and $g \in O(n)$, but there
is no equality involved so we can&amp;rsquo;t make bogus deductions like
$3=5$. We can however make the correct observation that $O(n)
\subseteq O(n \log n)\subseteq O(n^2) \subseteq O(n^3)$, something
that would be difficult to express with the equals sign.&lt;/p&gt;
&lt;h2&gt;Misconception 2: &amp;ldquo;Informally, Big-O Means &amp;lsquo;Approximately Equal&amp;rsquo;"&lt;/h2&gt;
&lt;p&gt;If an algorithm takes $5 n^2$ seconds to complete, that algorithm is
$O(n^2)$ because for the constant $M=7$ and sufficiently large $n$, $5
n^2 \le 7 n^2$. But an algorithm that runs in constant time, say 3
seconds, is also $O(n^2)$ because for sufficiently large $n$, $3 \le
n^2$.&lt;/p&gt;
&lt;p&gt;So informally, big-O means &lt;em&gt;approximately less than or equal&lt;/em&gt;,
not &lt;em&gt;approximately equal&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;If someone says &amp;ldquo;Topological Sort, like other sorting algorithms, is
$O(n \log n)$", then that is &lt;em&gt;technically&lt;/em&gt; correct, but severely
misleading, because Toplogical Sort is also $O(n)$ which is a subset
of $O(n \log n)$. Chances are whoever said it meant something false.&lt;/p&gt;
&lt;p&gt;If someone says &amp;ldquo;In the worst case, any comparison based sorting
algorithm must make $O(n \log n)$ comparisons&amp;rdquo; that is &lt;em&gt;not&lt;/em&gt; a
correct statement. Translated into English it becomes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;In the worst case, any comparison based sorting algorithm must make
fewer than or equal to $M n \log (n)$ comparisons&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;which is not true: You can easily come up with a comparison based
sorting algorithm that makes more comparisons in the worst case.&lt;/p&gt;
&lt;p&gt;To be precise about these things we have other types of notation at
our disposal. Informally:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;table&gt;
&lt;tr&gt;&lt;td&gt;$O()$:&lt;/td&gt;&lt;td&gt;Less than or equal, disregarding constants&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;$\Omega()$:&lt;/td&gt;&lt;td&gt;Greater than or equal, disregarding constants&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;$o()$:&lt;/td&gt;&lt;td&gt;Stricly less than, disregarding constants&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;$\Theta()$:&lt;/td&gt;&lt;td&gt;Equal to, disregarding constants&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and &lt;a href="http://en.wikipedia.org/wiki/Big_O_notation#Family_of_Bachmann.E2.80.93Landau_notations"&gt;some more&lt;/a&gt;.
The correct statement about lower bounds is this: &amp;ldquo;In the worst case,
any comparison based sorting algorithm must make $\Omega(n \log n)$
comparisons&amp;rdquo;. In English that becomes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;In the worst case, any comparison based sorting algorithm must make
at least $M n \log (n)$ comparisons&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;which is true. And a correct, non-misleading statement about
Topological Sort is that it is $\Theta(n)$, because it has a lower
bound of $\Omega(n)$ and an upper bound of $O(n)$.&lt;/p&gt;
&lt;h2&gt;Misconception 3: &amp;ldquo;Big-O is a Statement About Time&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;Big-O is used for making statements about functions. The functions can
measure time or space or cache misses or rabbits on an island or
anything or nothing. Big-O notation doesn&amp;rsquo;t care.&lt;/p&gt;
&lt;p&gt;In fact, when used for algorithms, big-O is almost never about
time. It is about primitive operations.&lt;/p&gt;
&lt;p&gt;When someone says that the time complexity of MergeSort is $O(n \log
n)$, they usually mean that the number of comparisons that MergeSort
makes is $O(n \log n)$. That in itself doesn&amp;rsquo;t tell us what the &lt;em&gt;time&lt;/em&gt;
complexity of any particular MergeSort might be because that would
depend how much time it takes to make a comparison. In other words,
the $O(n \log n)$ refers to &lt;em&gt;comparisons&lt;/em&gt; as the primitive operation.&lt;/p&gt;
&lt;p&gt;The important point here is that when big-O is applied to algorithms,
there is always an underlying model of computation. The claim that the
&lt;em&gt;time&lt;/em&gt; complexity of MergeSort is $O(n \log n)$, is implicitly
referencing a model of computation where a comparison takes constant
time and everything else is free.&lt;/p&gt;
&lt;p&gt;Which is fine as far as it goes. It lets us compare MergeSort to other
comparison based sorts, such as QuickSort or ShellSort or BubbleSort,
and in many real situations, comparing two sort keys really does take
constant time.&lt;/p&gt;
&lt;p&gt;However, it doesn&amp;rsquo;t allow us to compare MergeSort to RadixSort because
RadixSort is not comparison based. It simply doesn&amp;rsquo;t ever make a
comparison between two keys, so its time complexity in the comparison
model is 0. The statement that RadixSort is $O(n)$ implicitly
references a model in which the keys can be lexicographically picked
apart in constant time. Which is also fine, because in many real
situations, you actually can do that.&lt;/p&gt;
&lt;p&gt;To compare RadixSort to MergeSort, we must first define a shared model
of computation. If we are sorting strings that are $k$ bytes long, we
might take &amp;ldquo;read a byte&amp;rdquo; as a primitive operation that takes constant
time with everything else being free.&lt;/p&gt;
&lt;p&gt;In this model, MergeSort makes $O(n \log n)$ string comparisons each
of which makes $O(k)$ byte comparisons, so the time complexity is
$O(k\cdot n \log n)$. One common implementation of RadixSort will make
$k$ passes over the $n$ strings with each pass reading one byte, and
so has time complexity $O(n k)$.&lt;/p&gt;
&lt;h2&gt;Misconception 4: &amp;ldquo;Big-O Is About Worst Case&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;Big-O is often used to make statements about functions that measure
the worst case behavior of an algorithm, but big-O notation doesn&amp;rsquo;t
imply anything of the sort.&lt;/p&gt;
&lt;p&gt;If someone is talking about the randomized QuickSort and says that it
is $O(n \log n)$, they presumably mean that its &lt;em&gt;expected running
time&lt;/em&gt; is $O(n \log n)$. If they say that QuickSort is $O(n^2)$ they
are probably talking about its worst case complexity. Both statements
can be considered true depending on what type of running time the
functions involved are measuring.&lt;/p&gt;</description><author>Søren Sandmann Pedersen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ssp.impulsetrain.com/big-o.html</guid></item><item><title>Sysprof 1.2.0</title><link>https://ssp.impulsetrain.com/sysprof-1.2.0.html</link><description>&lt;p&gt;A &lt;a href="https://lkml.org/lkml/2012/9/8/143"&gt;new stable release&lt;/a&gt; of &lt;a href="http://sysprof.com/"&gt;Sysprof&lt;/a&gt; is now available. Download
&lt;a href="http://sysprof.com/sysprof-1.2.0.tar.gz"&gt;version 1.2.0&lt;/a&gt;.&lt;/p&gt;</description><author>Søren Sandmann Pedersen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ssp.impulsetrain.com/sysprof-1.2.0.html</guid></item><item><title>Over is not Translucency</title><link>https://ssp.impulsetrain.com/translucency.html</link><description>&lt;p&gt;The &lt;a href="https://ssp.impulsetrain.com/porterduff.html"&gt;Porter/Duff&lt;/a&gt; Over
operator, also known as the &amp;ldquo;Normal&amp;rdquo; blend mode in Photoshop, computes
the amount of light that is reflected when a pixel partially covers
another:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="The Porter/Duff OVER operator" src="translucency/bg-fg.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The fraction of bg that is covered is denoted alpha. This operator is
the correct one to use when the foreground image is an opaque mask
that partially covers the background:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Red mask on blue background" src="translucency/big-over1.png" /&gt;&lt;/p&gt;
&lt;p&gt;A photon that hits this image will be reflected back to your eyes by
either the foreground or the background, but not both. For each
foreground pixel, the alpha value tells us the probability of each:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$a \cdot \text{fg} + (1 - a) \cdot \text{bg}$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is the definition of the Porter/Duff Over operator for
non-premultiplied pixels.&lt;/p&gt;
&lt;p&gt;But if alpha is interpreted as &lt;em&gt;translucency,&lt;/em&gt; then the Over operator
is not the correct one to use. The Over operator will act as if each
pixel is partially covering the background:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="translucency/shaped-over.png" /&gt;&lt;/p&gt;
&lt;p&gt;Which is not how translucency works. A translucent material reflects
some light and lets other light through. The light that is let through
is reflected by the background and &lt;em&gt;interacts with the foreground
again&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img align="right" alt="" height="329" src="translucency/Translucency.png" style="margin-left: 28px; margin-bottom: 28px;" width="256" /&gt;Let&amp;rsquo;s look at this in more detail. Please follow along
in the diagram to the right. First with probability $a$, the
photon is reflected back towards the viewer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle
\begin{align*}
&amp;amp;a \cdot \text{fg}
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;With probability $(1 - a)$, it passes through the foreground, hits the
background, and is reflected back out. The photon now hits the
&lt;em&gt;backside&lt;/em&gt; of the foreground pixel. With probability $(1 - a)$, the
foreground pixel lets the photon back out to the viewer. The result so
far:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle
\begin{align*}
a\cdot \text{fg} &amp;amp;+(1 - a) \cdot \text{bg} \cdot (1 - a)
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But we are not done yet, because with probability $a$ the foreground pixel reflects the photon once again back towards the background pixel. There it will be reflected, hit the backside of the foreground pixel again, which lets it through to our eyes with probability $(1 - a)$. We get another term where the final $(1 - a)$ is replaced with $a \cdot \text{fg} \cdot \text {bg} \cdot (1 - a)$:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle
\begin{align*}
a\cdot \text{fg} &amp;amp;+(1 - a) \cdot \text{bg} \cdot (1 - a)\\
&amp;amp;+(1 - a) \cdot \text{bg} \cdot a \cdot \text{fg} \cdot \text{bg} \cdot (1 - a)
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And so on. In each round, we gain another term which is identical to
the previous one, except that it has an additional $a \cdot \text{fg}
\cdot \text{bg}$ factor:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle
\begin{align*}
a\cdot \text{fg} &amp;amp;+(1 - a) \cdot \text{bg} \cdot (1 - a)\\
&amp;amp;+(1 - a) \cdot \text{bg} \cdot a \cdot \text{fg} \cdot \text{bg} \cdot (1 - a)\\
&amp;amp;+(1 - a) \cdot \text{bg} \cdot a \cdot \text{fg} \cdot \text{bg} \cdot a \cdot \text{fg} \cdot \text{bg} \cdot (1 - a) \\
&amp;amp;+\cdots
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;or more compactly:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle
\begin{align*}
&amp;amp;a \cdot \text{fg} + (1 - a)^2 \cdot \text{bg} \cdot
\sum_{i=0}^\infty (a \cdot \text{fg} \cdot \text{bg})^i
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Because we are dealing with pixels, both $a$, $\text{fg}$, and
$\text{bg}$ are less than 1, so the sum is a &lt;a href="https://en.wikipedia.org/wiki/Geometric_series"&gt;geometric
series&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle
\begin{align*}
&amp;amp;\sum_{i=0}^\infty x^i = \frac{1}{1 - x}
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Putting them together, we get:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle
\begin{align*}
&amp;amp;a \cdot \text{fg} + \frac{(1 - a)^2 \cdot bg}{1 - a \cdot \text{fg} \cdot \text{bg}}
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have sidestepped the issue of premultiplication by assuming that
background alpha is 1. The calculations with premultipled colors are
similar, and for the color components, the result is simply:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle
\begin{align*}
&amp;amp;r = \text{fg} + \frac{(1 - a_\text{fg})^2 \cdot \text{bg}}{1 - \text{fg}\cdot\text{bg}}
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The issue of destination alpha is more complicated. With the Over
operator, both foreground and background are opaque masks, so the
light that survives both has the same color as the input light. With
translucency, the transmitted light has a different color, which means
the resulting alpha value must in principle be different for each
color component. But that&amp;rsquo;s not possible for ARGB pixels. A similar
argument to the above shows that the resulting alpha value would be:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle
\begin{align*}
&amp;amp;r = 1 - \frac{(1 - a)\cdot (1 - b)}{1 - \text{fg} \cdot \text{bg}}
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;where $b$ is the background alpha. The problem is the dependency on
$\text{fg}$ and $\text{bg}$. If we simply assume for the purposes of
the alpha computation that $\text{fg}$ and $\text{bg}$ are equal to
$a$ and $b$, we get this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle
\begin{align*}
&amp;amp;r = 1 - \frac{(1 - a)\cdot (1 - b)}{1 - a \cdot b}
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;which is equal to&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle
\begin{align*}
&amp;amp;a + \frac{(1 - a)^2 \cdot b}{1 - a \cdot b}
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ie., exactly the same computation as the one for the color
channels. So we can define the &lt;em&gt;Translucency Operator&lt;/em&gt; as this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\displaystyle
\begin{align*}
r = \text{fg} + \frac{(1 - a)^2 \cdot \text{bg}}{1 - \text{fg} \cdot \text{bg}}
\end{align*}
$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;for all four channels.&lt;/p&gt;
&lt;p&gt;Here is an example of what the operator looks like. The image below is
what you will get if you use the Over operator to implement a
selection rectangle. Mouse over to see what it would look like if you
used the Translucency operator.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;
&lt;img alt="" name="selectimg" src="translucency/select-over1.png" /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Both were computed in linear RGB. Typical implementations will often
compute &lt;a href="translucency/select-over-srgb.png"&gt;the Over operator in sRGB&lt;/a&gt;, so that&amp;rsquo;s
what see if you actually select some icons in Nautilus. If you want to
compare all three, open these in tabs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="translucency/select-over-srgb.png"&gt;Over, in sRGB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="translucency/select-trans.png"&gt;Translucency, in linear RGB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="translucency/select-over.png"&gt;Over, in linear RGB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And for good measure, even though it makes zero sense to do this,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="translucency/select-trans-srgb.png"&gt;Translucency, in sRGB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Søren Sandmann Pedersen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ssp.impulsetrain.com/translucency.html</guid></item><item><title>Gamma Correction vs. Premultiplied Pixels</title><link>https://ssp.impulsetrain.com/gamma-premult.html</link><description>&lt;p&gt;Pixels with 8 bits per channel are normally sRGB encoded because that
allocates more bits to darker colors where human vision is the most
sensitive. (Actually, it&amp;rsquo;s really more of a historical accident, but
sRGB nevertheless remains useful for this reason). The relationship
between sRGB and linear RGB is that you get an sRGB pixel by raising
each component of a linear pixel to the power of $1/2.2$.&lt;/p&gt;
&lt;p&gt;It is common for graphics software to perform alpha blending directly
on these sRGB pixels using alpha values that are linearly coded (ie.,
an alpha value of 0 means no coverage, 0.5 means half coverage, and 1
means full coverage). Because alpha blending is best done with
premultiplied pixels, such systems store pixels in this format:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\left[\,\alpha,\enspace\alpha \cdot \text{R}^{1/2.2},\enspace\alpha \cdot \text{G}^{1/2.2},\enspace\alpha \cdot \text{B}^{1/2.2}\,\right]$,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;that is, the alpha channel is linearly coded, while the R, G, and B
channels are first sRGB coded, then premultiplied with the linear
alpha.  This works well as long as you are happy with blending in
sRGB. And if you discard the alpha channel of such pixels and display
them directly on a monitor, it will look as if the pixels were alpha
blended (in sRGB space) on top of a black background, which is the
desired result.&lt;/p&gt;
&lt;p&gt;But what if you want to blend in linear RGB? If you use the format
above, some expensive conversions will be required. To convert to
premultiplied linear, you have to first divide by alpha, then raise
each color to 2.2, then multiply by alpha. To convert back, you must
divide by alpha, raise to $1/2.2$, then multiply with alpha.&lt;/p&gt;
&lt;p&gt;Those conversions can be avoided if you store the pixels linearly,
ie., keeping the premultiplication, but coding red, green, and blue
linearly instead of as sRGB:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\left[\,\alpha,\enspace\alpha \cdot \text{R},\enspace\alpha \cdot \text{G},\enspace\alpha \cdot \text{B}\,\right]$.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This makes blending fast, but 8 bits per channel is no longer good
enough. Without the sRBG encoding, too much resolution will be lost in
darker tones. And to display these pixels on a monitor, they have to
first be converted to sRGB, either manually, or, if the video card can
scan them out directly, by setting the gamma ramp appropriately.&lt;/p&gt;
&lt;p&gt;Can we get the best of both worlds? Yes. The format to use is this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\left[\,\alpha,\enspace (\alpha \cdot \text{R})^{1/2.2},\enspace (\alpha \cdot \text{G})^{1/2.2},\enspace \left(\alpha \cdot \text{B}\right)^{1/2.2}\,\right]$,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The alpha channel is stored linearly, and the color channels are first
premultiplied with the linear alpha, then raised to $1/2.2$.&lt;/p&gt;
&lt;p&gt;With this format, 8 bits per channel is sufficient. Discarding the
alpha channel and displaying the pixels directly on a monitor will
look as if the pixels were alpha blended (in linear space) against
black, as desired.&lt;/p&gt;
&lt;p&gt;You can convert to linear RGB simply by raising the R, G, and B
components to 2.2, and back by raising to $1/2.2$. Or, if you feel
like cheating, use an exponent of 2 so that the conversions become a
multiplication and a square root respectively.&lt;/p&gt;
&lt;p&gt;This is also the pixel format to use with texture samplers that
implement the sRGB OpenGL extensions
(&lt;a href="http://www.opengl.org/registry/specs/EXT/texture_sRGB.txt"&gt;textures&lt;/a&gt;
and
&lt;a href="http://www.opengl.org/registry/specs/ARB/framebuffer_sRGB.txt"&gt;framebuffers&lt;/a&gt;). These
extensions say precisely that the R, G, and B components are raised to
2.2 before texture filtering, and raised to 1/2.2 after the final
raster operation.&lt;/p&gt;</description><author>Søren Sandmann Pedersen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ssp.impulsetrain.com/gamma-premult.html</guid></item><item><title>Sysprof 1.1.8</title><link>https://ssp.impulsetrain.com/sysprof-1.1.8.html</link><description>&lt;p&gt;A new version &lt;a href="http://sysprof.com/sysprof-1.1.8.tar.gz"&gt;1.1.8&lt;/a&gt; of
&lt;a href="http://sysprof.com"&gt;Sysprof&lt;/a&gt; is out.&lt;/p&gt;
&lt;p&gt;This is a release candidate for 1.2.0 and contains mainly bug fixes.&lt;/p&gt;</description><author>Søren Sandmann Pedersen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ssp.impulsetrain.com/sysprof-1.1.8.html</guid></item><item><title>Fast Multiplication of Normalized 16 bit Numbers with SSE2</title><link>https://ssp.impulsetrain.com/16bit.html</link><description>&lt;p&gt;If you are compositing pixels with 16 bits per component, you often
need this computation:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;uint16_t&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0x7fff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;65535&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;There is a well-known way to do this quickly without a division:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;uint32_t&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0x8000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Since we are compositing pixels we want to do this with SSE2
instructions, but because the code above uses 32 bit arithmetic, we
can only do four operations at a time, even though SSE registers have
room for eight 16 bit values. Here is a direct translation into SSE2:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;punpcklwd&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&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;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;punpcklwd&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&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;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pmulld&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;paddd&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x8000&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;psrld&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;paddd&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;psrld&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;packusdw&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&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;/pre&gt;&lt;/div&gt;


&lt;p&gt;But there is another way that better matches SSE2:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;uint16_t&lt;/span&gt; &lt;span class="n"&gt;lo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="mh"&gt;0x7fff&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="n"&gt;int16_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;lo&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;int16_t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="n"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x0000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;lo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;This version is better because it avoids the unpacking to 32
bits. Here is the translation into SSE2:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pmulhuw&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pmullw&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&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;psrlw&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;paddw&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&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;pxor&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x7fff&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pcmpgtw&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;psubw&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;This is not only shorter, it also makes use of the full width of the
SSE registers, computing eight results at a time.&lt;/p&gt;
&lt;p&gt;Unfortunately SSE2 doesn&amp;rsquo;t have 8-bit variants of &lt;code&gt;pmulhuw&lt;/code&gt;, &lt;code&gt;pmullw&lt;/code&gt;, and
&lt;code&gt;psrlw&lt;/code&gt;, so we can&amp;rsquo;t use this trick for the more common case where
pixels have 8 bits per component.&lt;/p&gt;
&lt;p&gt;Exercise: Why does the second version work?&lt;/p&gt;</description><author>Søren Sandmann Pedersen</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://ssp.impulsetrain.com/16bit.html</guid></item><item><title>Egyptian fractions for 2/105</title><link>https://blog.plover.com/2026/06/12#egyptian-105</link><description>&lt;p&gt;&lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cdef%5cu%231%7b%5cfrac1%7b%231%7d%7d%24" /&gt;&lt;/p&gt;

&lt;p&gt;The ancient Egyptians had a terrible notation for fractions.  They had
notations for &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cu%20n%24" /&gt; for each &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24n%24" /&gt;, for &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac23%24" /&gt;, but everything
else was written as a sum of these, with repeats forbidden, so that
for example &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac25%24" /&gt; had to be written as &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cu3%20%2b%0a%5cu%7b15%7d%24" /&gt;. (&lt;a href="https://en.wikipedia.org/wiki/Egyptian_fraction"&gt;Wikipedia&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.plover.com/math/egyptian-fractions.html"&gt;In an older article about Egyptian fractions and the Rhind
Mathematical Papyrus&lt;/a&gt;, I said:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Getting the table of good-quality representations of &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac2n%24" /&gt; is
  not trivial, and requires searching, number theory, and some trial
  and error. It's not at all clear that &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac2%7b105%7d%3d%5cu%7b90%7d%20%2b%20%5cu%7b126%7d%24" /&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think I see now where this comes from.  &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24105%20%3d%203%c2%b77%c2%b75%24" /&gt;, so two of
the summands must have denominators divisible by &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%245%24" /&gt; and by &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%247%24" /&gt;
respectively.  The first thing you should do is consider $$\u5 + \u7
= \frac{12}{35} = \frac{36}{105}.$$&lt;/p&gt;

&lt;p&gt;But you don't want &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac%7b36%7d%7b105%7d%24" /&gt;, you want &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac%7b2%7d%7b105%7d%24" /&gt;, so
you multiply by &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cu%7b18%7d%24" /&gt;: &lt;/p&gt;

&lt;p&gt;$$\u{18}\left(\u5 + \u7\right) = \u{90}+\u{126}
= \frac 2{105}$$&lt;/p&gt;

&lt;p&gt;and there it is.&lt;/p&gt;

&lt;p&gt;Why pick &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cu5%24" /&gt; and &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cu7%24" /&gt; rather than, say, &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cu3%24" /&gt; and
&lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cu5%24" /&gt;? I suspect the answer is probably: Ahmes (or someone
earlier) tried it both ways and picked the result they liked best.
Remember Ahmes is compiling a reference table here, so he does these
calculations once, writes down the best result, and throws the others
away.&lt;/p&gt;

&lt;p&gt;If you do the same trick with &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%243%24" /&gt; and &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%245%24" /&gt; instead you get
&lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cu3%2b%5cu5%20%3d%20%5cfrac8%7b15%7d%20%3d%20%5cfrac%7b56%7d%7b105%7d%24" /&gt;.  Then you multiply
everything by &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cu%7b28%7d%24" /&gt; producing $$\u{84} + \u{140} =
\frac2{105}$$ which seems a little worse than the other one.  Using
the &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%243%24" /&gt; and the &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%245%24" /&gt; produces $$\u{75} + \u{175} =
\frac2{105}$$ which seems much worse.&lt;/p&gt;

&lt;p&gt;Of course this only works when the denominator is composite.&lt;/p&gt;

&lt;p&gt;Here's another approach, which doesn't work too well in this case but
might be useful for other examples.  Consider that &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac23%20%3d%0a%5cu2%20%2b%20%5cu6%24" /&gt;.  We want &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac2%7b105%7d%20%3d%0a%5cu%7b35%7d%5ccdot%5cfrac23%24" /&gt;.  So&lt;/p&gt;

&lt;p&gt;$$
\begin{align}
\frac2{105} &amp;amp; = \u{35}\cdot\frac23 \\
            &amp;amp; = \u{35}\left(\u2+\u6\right) \\
            &amp;amp; = \u{70} + \u{210}
\end{align}
$$&lt;/p&gt;

&lt;p&gt;The denominators here are a lot bigger than the first expansion, but
they do at least have the advantage of being multiples of &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%2410%24" /&gt;.
The Egyptians like this because they, like us, often need to multiply
numbers by &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%2410%24" /&gt;, and whereas a fraction like &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cu%7b126%7d%24" /&gt; is hard for
them to multiply by &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%2410%24" /&gt;, it's trivial to multiply &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cu%7b210%7d%24" /&gt; by &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%2410%24" /&gt;.&lt;/p&gt;</description><author>The Universe of Discourse</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.plover.com/2026/06/12#egyptian-105</guid></item><item><title>Did Ahmes find the best expansions for 2/n?</title><link>https://blog.plover.com/2026/03/17#egyptian-fractions-2</link><description>&lt;p&gt;A couple of years back &lt;a href="https://blog.plover.com/math/egyptian-fractions.html"&gt;I was discussing the Rhind Mathematical Papyrus&lt;/a&gt;
(RMP).  It includes a table expressing &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac%202n%24" /&gt; as a sum
$$\frac1{a_1}+\frac1{a_2}+\dots+\frac1{a_k} $$ fractions with
numerator 1 (“unit fractions”).  I said:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Getting the table of good-quality representations of &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac%202n%24" /&gt; is not
  trivial, and requires searching, number theory, and some trial and
  error. It's not at all clear that &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac2%7b105%7d%3d%5cfrac1%7b90%7d%20%2b%0a%3e%20%5cfrac1%7b126%7d%24" /&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Today I wondered: &lt;em&gt;did&lt;/em&gt; Ahmes (the author) have the best possible
expansions for all the &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac2n%24" /&gt; values, or were there some
improvements the Egyptians had missed?&lt;/p&gt;

&lt;p&gt;It turns out, yes!  Or rather, maybe!&lt;/p&gt;

&lt;p&gt;In
&lt;a href="https://www.sciencedirect.com/science/article/pii/S0315086007000274?via%3Dihub"&gt;On the Egyptian method of decomposing &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%242%2fn%24" /&gt; into unit fractions&lt;/a&gt;
the author, Abdulrahman A. Abdulaziz, points out that for
&lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac2%7b95%7d%24" /&gt; the Rhind Mathematical Papyrus gives the expansion
$$\frac2{95} = \frac1{60} + \frac1{380} + \frac1{570}$$&lt;/p&gt;

&lt;p&gt;but &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac1%7b380%7d%20%2b%20%5cfrac1%7b570%7d%20%3d%20%5cfrac1%7b228%7d%24" /&gt; so it could have been
written as $$\frac2{95} = \frac1{60}+\frac1{228}.$$&lt;/p&gt;

&lt;p&gt;But wait, maybe that &lt;em&gt;wasn't&lt;/em&gt; an error.  The Egyptians, like everyone,
often had to multiply by 10.  (In fact, the RMP itself, right after
its &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac%202n%24" /&gt; table, has a shorter table of expansions of &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac%0an%7b10%7d%24" /&gt;.)  And &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac1%7b60%7d%20%2b%20%5cfrac1%7b380%7d%20%2b%20%5cfrac1%7b570%7d%24" /&gt; is trivially
multiplied by 10, whereas &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac1%7b228%7d%24" /&gt;  isn't.  There is some
indication that Ahmes preferred fractions with even denominators,
because they are easier to double, and the usual Egyptian method of
multiplication required repeated doubling.  But the Egyptians also
sometimes decupled while multiplying, and the &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac1%7b60%7d%20%2b%0a%5cfrac1%7b380%7d%20%2b%20%5cfrac1%7b570%7d%24" /&gt;  expansion would have made both of those
easy.&lt;/p&gt;

&lt;p&gt;The methods by which Ahmes chose the expansions of &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24%5cfrac%202n%24" /&gt;, and
the criteria by which he preferred one to another, are still unknown;
he doesn't explain them.  So it's tough to say that any item was or
wasn't “best” from Ahmes' point of view.&lt;/p&gt;</description><author>The Universe of Discourse</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.plover.com/2026/03/17#egyptian-fractions-2</guid></item><item><title>Programmers will document for Claude, but not for each other</title><link>https://blog.plover.com/2026/03/09#documentation-wins-2</link><description>&lt;p&gt;&lt;a href="https://blog.plover.com/tech/gpt/documentation-wins.html"&gt;A couple of days ago I recounted a common complaint&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I keep seeing programmers say how angry it makes them that people
  are willing to write detailed &lt;code&gt;CLAUDE.md&lt;/code&gt; and &lt;code&gt;PROJECT.md&lt;/code&gt; files for
  Claude to use, but they weren't willing to write them for their
  coworkers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For larger projects, I've taken to having Claude maintain a handoff
document that I can have the next Claude read, saying what we planned
to do, what has been done, and other pertinent information.  Then when
I shut down one Claude I can have the next one read the file to get up
to speed.  Then I have the Claude &lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24n%2b1%24" /&gt; update it for Claude
&lt;img src="https://chart.apis.google.com/chart?chf=bg,s,00000000&amp;amp;cht=tx&amp;amp;chl=%24n%2b2%24" /&gt;.&lt;/p&gt;

&lt;p&gt;After seeing the common complaint enough times I had a happy
inspiration.  I'd been throwing away Claude's handoff documents at the
end of each project.  Why do that?  It's no trouble to copy the file
into the repository and commit it.  Someone in the future, wondering
what was going on, might luckily find the right document with &lt;code&gt;git
grep&lt;/code&gt; and learn something useful.&lt;/p&gt;

&lt;p&gt;I'm a little slow so it took me until this week to think of a better
version of this: at the end of the project I now ask Claude to write
up from scratch a detailed but high-level explanation of what problem
we were solving and what changes we made, and I commit &lt;em&gt;that&lt;/em&gt;.  Not
just running notes, but a structured overview of the whole thing.&lt;/p&gt;

&lt;p&gt;I review these overviews carefully and make edits as necessary before
I check them in. It's my signature on the commit, and my bank account
receiving the paycheck, so nothing goes into the repository that I
haven't read carefully and understood, same as if Claude were a human
programmer under my supervision.&lt;/p&gt;

&lt;p&gt;But Claude's explanations haven't required much editing.  Claude's
most recent project summary was around as good as what I could have
written myself, maybe a little worse and maybe a little better.  But
it took ten seconds to write instead of an hour, and it didn't take
anything like an hour to review.&lt;/p&gt;

&lt;p&gt;The serious thing I had to fix the last time around was that Claude
had used a previous, related report as a model, and the previous
report had had a paragraph I had added at the end that said:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;# Approved-by&lt;/p&gt;
  
  &lt;p&gt;Claude abstracted these notes from our discussions of the issue. Mark
  Dominus has read, reviewed, edited, and approved these notes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude's new document had an identical section at the end.  Oops!
Fortunately, by the time I saw it, it was true, so I didn't have to
delete it.  I had Claude add a sentence to &lt;code&gt;CLAUDE.md&lt;/code&gt; to tell it not
to do this again.&lt;/p&gt;

&lt;p&gt;My advice for the day:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;If you have Claude write down notes, check them into the repo when
you're done.  It probably can't hurt and it might help.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have Claude write a project summary, and then check it into the repo.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Maybe this is obvious?  But it wasn't obvious to me.  I'm still
getting used to this new world.&lt;/p&gt;</description><author>The Universe of Discourse</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.plover.com/2026/03/09#documentation-wins-2</guid></item><item><title>How are John Waters movies like James Bond movies?</title><link>https://blog.plover.com/2026/03/08#john_waters</link><description>&lt;p&gt;A number of years ago I wondered how many movies I had seen. The only
way I could think of finding out was just to make a list.  This I did
as best I could.  (It turned out to be around 700.)&lt;/p&gt;

&lt;p&gt;I found, though, that I could not include all the James Bond movies I
had seen, because I couldn't tell them apart from the descriptions.
I'd read a plot summary for a James Bond movie, and ask myself “Did I
see that?  I don't know, it sounds like every other James Bond movie.”&lt;/p&gt;

&lt;p&gt;Today I discovered that John Waters movies are like that also.  I was
trying to remember if I had seen &lt;em&gt;A Dirty Shame&lt;/em&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The people of Harford Road are firmly divided into two camps: the
  neuters, the puritanical residents who despise anything even
  remotely carnal; and the perverts, a group of sex addicts whose
  unique fetishes have all been brought to the fore by accidental
  concussions. Repressed Sylvia Stickles finds herself firmly
  entrenched in the former camp.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You'd think that would be something I would remember decisively, or
not.  But I'm really not sure. All I can do is shrug and say “I don't
know, it sounds like a John Waters movie I have seen, but maybe it
wasn't that one.”&lt;/p&gt;

&lt;p&gt;Looking into it further I discovered that I also wasn't sure if I had
seen &lt;em&gt;Multiple Maniacs&lt;/em&gt;.  In it, Divine's character is raped by a
giant lobster.  On the one hand, that seems like the sort of thing I
would remember.  And I think maybe I do?  But again I'm not sure I'm
not just imagining what it would be like!&lt;/p&gt;</description><author>The Universe of Discourse</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.plover.com/2026/03/08#john_waters</guid></item><item><title>Documentation is a message in a bottle</title><link>https://blog.plover.com/2026/03/05#documentation-wins</link><description>&lt;p&gt;Our company is
going to a convention later this month, and they will have a booth with
big TV screens showing statistics that update in real time.  My job is
to write the backend server that delivers the statistics.&lt;/p&gt;

&lt;p&gt;I read over the documents that the product people had written up about
what was wanted, asked questions, got answers, and then turned the
original two-line ticket into a three-page ticket that said what
should be done and how.  I intended to do the ticket myself, but it's
good practice to write all this stuff down, for many reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Writing things down forces me to think them through carefully and
realize what doesn't make sense or what I still don't understand.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I forget things easily and this will keep the plan where I can find it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I might get sick, and if someone else has to pick up the project
this might help them understand what I was doing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If my boss gets worried that all I do is post on 4chan all day, this
is tangible work product that proves I did something else that might
have enhanced shareholder value.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If I'm tempted to spend the day posting on 4chan, and then to later
&lt;em&gt;claim&lt;/em&gt; I spent the time planning the project, I might fool my boss.
But without that tangible work product, I won't be able to fool
&lt;em&gt;myself&lt;/em&gt;, and that's more important.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Conversely if I later think back and ask “What was I doing the week
of March 2?” I might be tempted to imagine that all I did was post
on 4chan.  But the three pages of ticket description will prove to
me that I am not just a lazy slacker.  &lt;a href="https://blog.plover.com/misc/evaluation.html"&gt;This is a real problem for
me&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In principle, a future person going back to extend the work might
find this helpful documentation of what was done and why.  Does this
ever really happen?  I don't know, but it might.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I like writing because writing is fun.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few days after I wrote the ticket, something unexpected happened.
It transpired that person who was to build the front-end consumer of
my statistics would not be a professional programmer.  It would be the
company's Head of Product, a very smart woman named Amanda. The actual
code would be written by Claude, under her supervision.&lt;/p&gt;

&lt;p&gt;I have never done anything like this before, and I would not have
wanted to try it on a short deadline, but there is some slack in the
schedule and it seemed a worthwhile and exciting experiment.&lt;/p&gt;

&lt;p&gt;Amanda shared some screencaps of her chats with Claude about the
project, and I suggested:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;When you get a chance, please ask Claude to write out a Markdown
  file memorializing all this.  Tell it that you're going to give it
  to the backend programmer for discussion, so more detail is better.
  When it's ready, send it over.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude immediately produced a nine-page, 14-part memo and a half-page
overview.  I spent a couple of hours reviewing it and marking it up.&lt;/p&gt;

&lt;p&gt;It became immediately clear that Claude and I had very similar ideas
about how the project should go and how the front and back ends would
hook up.  So similar that I asked Angela:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;It looks like maybe you started it off by feeding it my ticket
  description.  Is that right? &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;She said yes, she had.  She had also fed it the original product
documents I had read.&lt;/p&gt;

&lt;p&gt;I was delighted.  I had had many reasons for writing detailed ticket
descriptions before, but the most plausible ones were aimed back at
myself.&lt;/p&gt;

&lt;p&gt;The external consumers of the documentation all seemed somewhat
unlikely.  The person who would extend the project in the future
probably didn't exist, and if they did they probably wouldn't have
thought to look at my notes.  Same for the hypothetical person who
would take over when I got sick.  My boss probably isn't checking up
on me by looking at my ticketing history.  Still, I like to document
these things for my own benefit, and also just in case.&lt;/p&gt;

&lt;p&gt;But now, because I had written the project plan, it was available for
consumption when an unexpected consumer turned up!  Claude and I were
able to rapidly converge on the design of the system, because Amanda
had found my notes and cleverly handed them to Claude.  Suddenly one
of those unlikely-seeming external reasons materialized!&lt;/p&gt;

&lt;p&gt;On Mastodon I keep seeing programmers say how angry it makes
them that people are willing to write detailed &lt;code&gt;CLAUDE.md&lt;/code&gt; and
&lt;code&gt;PROJECT.md&lt;/code&gt; files for Claude to use, but they weren't willing to
write them for their coworkers.  (They complain about this as if this
is somehow the fault of the AI, rather than of the people who failed
in the past to write documentation for their coworkers.)&lt;/p&gt;

&lt;p&gt;The obvious answer to the question of why people are willing to write
documentation for Claude but not for their coworkers is that the
author can count on Claude to &lt;em&gt;read&lt;/em&gt; the documentation, whereas it's a
rare coworker who will look at it attentively.&lt;/p&gt;

&lt;p&gt;Rik Signes points out there's a less obvious but more likely answer:
your coworkers will remember things if you just tell them, but Claude
forgets everything every time.  If you want Claude to remember
something, you have to write it down.  So people using Claude do write
things down, because otherwise they have to say them over and over.&lt;/p&gt;

&lt;p&gt;And there's a happy converse to the complaint that most programmers
don't bother to write documentation.  It means that people like me,
professionals who &lt;em&gt;have&lt;/em&gt; always written meticulous documentation, are
now reaping new benefits from that always valuable practice.&lt;/p&gt;

&lt;p&gt;Not everything is going to get worse.  Some things will get better.&lt;/p&gt;

&lt;h3&gt;Addendum 20260208&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://blog.plover.com/tech/gpt/documentation-wins-2.html"&gt;A corollary&lt;/a&gt;: You don't
have to write the rocumentation yourself.  You can have Claude write a
detailed summary based on your ongoing chats about the work, and then
you can edit it and check it in.&lt;/p&gt;

&lt;p&gt;If you're good at editing, anyway.  I wonder if part of the reason
Claude is working so well for me is that I'm really good at editing
and at code review?&lt;/p&gt;</description><author>The Universe of Discourse</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.plover.com/2026/03/05#documentation-wins</guid></item><item><title>Bo Diddley</title><link>https://blog.plover.com/2026/03/03#Bo-Diddley</link><description>&lt;p&gt;Bo Diddley's cover of "Sixteen Tons" sounds very much like one of my
favorites, "Can't Judge A Book By Its Cover".  It's interesting to
compare.&lt;/p&gt;

&lt;p&gt;Thinking on that it suddenly occured to me that his name might have
been a play on “diddley bow”, which is a sort of homemade one-stringed
zither.  The player uses a bottle as a bridge for the string, and
changes the pitch by sliding the bottle up and down.  When you hear
about blues artists whose first guitars were homemade, this is often
what was meant: it wasn't a six-string guitar, it was a diddley bow.&lt;/p&gt;

&lt;p&gt;But it's not clear that Bo Diddley &lt;em&gt;did&lt;/em&gt; play his name on the diddley
bow.  "Diddly" also means something insignificant or of little value,
and might have been a disparaging nickname he received in his
youth. (It also appears in the phrase "diddly squat").  Maybe that's
also the source of the name of the diddley bow.&lt;/p&gt;</description><author>The Universe of Discourse</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.plover.com/2026/03/03#Bo-Diddley</guid></item><item><title>Language models imply world models</title><link>https://blog.plover.com/2026/02/12#micro-worlds-2</link><description>&lt;p&gt;In
&lt;a href="https://blog.plover.com/tech/gpt/micro-worlds.html"&gt;a recent article about John Haugeland's rejection of micro-worlds&lt;/a&gt;
I claimed:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;as a “Large Language Model”, Claude necessarily includes a model of the world in general&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nobody has objected to this remark, but I would like to expand on it.
The claim may or may not be true — it is an empirical question. But as a
theory it has been widely entertained since the very earliest days of
digital computers.  &lt;a href="https://en.wikipedia.org/wiki/Yehoshua_Bar%2dHillel"&gt;Yehoshua Bar-Hillel&lt;/a&gt;, the first person to seriously
investigate machine translation, came to this conclusion in the
1950s.  Here's an extract of Haugeland's discussion of his work:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In 1951 Yehoshua Bar-Hillel became the first person to earn a
  living from work on machine translation. Nine years later he was
  the first to point out the fatal flaw in the whole enterprise, and
  therefore to abandon it. Bar-Hillel proposed a simple test sentence:&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;p&gt;The box was in the pen.&lt;/p&gt;
  &lt;/blockquote&gt;
  
  &lt;p&gt;And, for discussion, he considered only the ambiguity: (1) pen
  = a writing instrument; versus (2) pen = a child's play enclosure.
  Extraordinary circumstances aside (they only make the problem
  harder), any normal English speaker will instantly choose "playpen"
  as the right reading. How? By understanding the sentence and
  exercising a little common sense. As anybody knows, if one physical
  object is in another, then the latter must be the larger; fountain
  pens tend to be much smaller than boxes, whereas playpens are plenty
  big.&lt;/p&gt;
  
  &lt;p&gt;Why not encode these facts (and others like them) right into
  the system? Bar-Hillel observes:&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;p&gt;What such a suggestion amounts to, if taken seriously, is
    the requirement that a translation machine should not only be
    supplied with a dictionary but also with a universal
    encyclopedia. This is surely utterly chimerical and hardly deserves
    any further discussion. (1960, p. 160)&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;(&lt;em&gt;Artifical Intelligence: The Very Idea&lt;/em&gt;; John Haugeland; p.174–176.)&lt;/p&gt;

&lt;p&gt;Bar-Hillel says, and I agree, that an accurate model of language
requires an accurate model of the world.  In 1960, this appeared
“utterly chimerical”. Perhaps so, but here we are, and 55 years later
we have what most agree is a language model capable of
producing intelligible text complex enough to fool sophisticated
readers.  Even people who call the LLM a “stochastic word garbage
spewer” and object when it is called “AI” seem to have no qualms
about the term “large language model”.&lt;/p&gt;

&lt;p&gt;The Winograd SHRDLU project was an attempt to construct a world whose
model was small enough to not be utterly chimerical.  This worked, but
as Haugeland says, it wasn't actually interesting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Doug_Lenat"&gt;Doug Lenat&lt;/a&gt; tried for forty years construct
&lt;a href="https://en.wikipedia.org/wiki/Cyc"&gt;an explicit world model&lt;/a&gt;.  When he died in 2023 I think
people still considered the project to have been utterly chimerical.&lt;/p&gt;

&lt;p&gt;I may be misrepresenting Bar-Hillel's views. He didn't actually say
“world model”, he said “universal encyclopedia”.  Lenat's project's
name, “Cyc”, acknowledges this: “Cyc” is short for “encyclopedia”.  And
until recently a universal encyclopedia did seem, to many, to be
utterly chimerical.  (Imperial China produced
&lt;a href="https://en.wikipedia.org/wiki/Leishu"&gt;many interesting attempts&lt;/a&gt;.)  But we do now &lt;em&gt;in fact&lt;/em&gt;
have &lt;a href="https://www.wikipedia.org/"&gt;a universal encyclopedia&lt;/a&gt;, and
Claude has ingested that universal encyclopedia.&lt;/p&gt;

&lt;h2&gt;Let's try it and see&lt;/h2&gt;

&lt;p&gt;Bar-Hillel thought that the “box is in the pen” example proved that
machine translation would be at the very least extremely difficult: it
requires understanding of the usual relative sizes of boxes and pens,
and that the possibility of such understanding in general “hardly
deserves any further discussion”.&lt;/p&gt;

&lt;p&gt;I asked Claude:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Consider the sentence “the box was in the pen”.  What does “pen” mean here?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude said:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;Most likely a playpen or animal pen (enclosure), since a box
    wouldn't fit inside a writing pen.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Presumably Bar-Hillel's article and Haugeland's book was in Claude's
training data, and perhaps it somehow absorbed the right thing to say
here without actually knowing anything about boxes or pens.  I tried
the next similar example that came to mind:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;How about “suit” in “what suit was the king”?&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;p&gt;Playing card suit - hearts, diamonds, clubs, or spades.&lt;/p&gt;
  &lt;/blockquote&gt;
  
  &lt;p&gt;Why?&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;p&gt;The context "what suit was the king" is the standard phrasing for
    identifying a playing card. A king is one of the face cards in
    each suit, so asking about its suit is a natural card game
    question.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Okay, that's just what I would have said.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Why couldn't it be a human king wearing a suit?&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;p&gt;It could be - I jumped to the card interpretation because "what
    suit was the king" uses "suit" as a predicate noun, which is
    uncommon phrasing for clothing. You'd more naturally say "what
    suit was the king wearing" or "what kind of suit did the king
    have." But without more context, the clothing interpretation is
    perfectly plausible.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think Claude is wrong about the grammar here.  I'm not sure what
“predicate noun” means and I suspect Claude is using the term
incorrectly.  I can't understand “what suit was the king?” as
grammatical in any plausible construction, only in highly contrived
situtations such as an evil wizard transforming the king into a suit
of armor and hiding him in the armory.&lt;/p&gt;

&lt;p&gt;But &lt;em&gt;if&lt;/em&gt; one agrees to take it to mean “what suit does the king have” I
agree that this is a perfectly plausible interpretation even though
there isn't anything clearly clothing-related nearby, and if one
assumes it meant “what suit was the king wearing” then the clothing
interpretation is unavoidable.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Could it be a lawsuit?&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;p&gt;Yes - "what suit was the king" could mean what lawsuit the king
    was involved in. That reading makes grammatical sense, though it
    would be more natural with "in" ("what suit was the king
    in"). Context would be needed to distinguish between cards,
    clothing, and lawsuits.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Again I disagree that this makes grammatical sense. Without “in” I
think a native listener would be at least puzzled. (“Do you mean ‘what
suit was the king &lt;em&gt;involved in&lt;/em&gt;?’?”)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Could it be a misspelling for “soot”?&lt;/p&gt;
  
  &lt;p&gt;Yes, that's plausible - "what soot was the king" could be asking
  what type of soot the king was covered in or exposed to. Though it's
  an odd question without specific context like a fire or industrial setting.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In my opinion, it is not grammatically plausible.&lt;/p&gt;

&lt;p&gt;However, I think focusing on the &lt;em&gt;grammatical&lt;/em&gt; errors would missing
the point. The “soot” interpretation is unlikely, I think the bad
grammar rules it out, and Claude's response does not seem to
recognize this.  But Claude &lt;em&gt;does&lt;/em&gt; express understanding that that
the interpretation is unikely without some surrounding soot-related
context, and a reasonable idea of what that context would need to be
like.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;What if it were “what color is the king”?&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;p&gt;If it's "what color is the king," then the card suit
    interpretation becomes much less likely (suits aren't typically
    described as colors, though red/black could work). It's more
    likely asking about a physical object - a chess piece, a game
    token, a statue, or similar - where the king's color is relevant.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;I had been thinking of “color” as referring to the king's skin color,
but I agree that the chess piece or game token interpretation is more
plausible.  Again Claude seems to understand something about how we
talk about things.  If the king were a playing card, we might be
asking if it is a red king or a black king.  But without that context
it's now more likely that the king is a chess piece than a playing
card.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;What if the sentence was known to have been translated from German?&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;p&gt;That would strengthen the card suit interpretation
    significantly. German card suits (Herz, Karo, Pik, Kreuz) are
    often called "Farbe" (color) in German card game terminology, so
    "what color is the king" could be a literal translation of a
    question about which suit a king card belongs to.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's just what I would have said.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Could “suit” have been an accidental misspelling of “age”?&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;p&gt;On a standard keyboard, that seems unlikely - 'a', 'g', 'e' are
    nowhere near 's', 'u', 'i', 't'. Autocorrect or speech-to-text
    could produce it, but not a typical typing error.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;I thought Claude might botch this.  There is no grammatical or
semantic reason why “what age was the king” doesn't work, so the only
reason to reject this is orthographic. And Claude's grasp of spelling
still seems quite weak. The other day it claimed that “‘Warner’ is
likely either a typo for ‘Cham’ or …” which couldn't be wronger.  I
told it at the time that it is impossible that "Cham" could be a typo
for “Warner”, and if pressed to explain why, I would have said
something like what Claude said here.&lt;/p&gt;

&lt;h2&gt;Tentative conclusions&lt;/h2&gt;

&lt;p&gt;Interesting as this all is, it is a digression.  My main points, again:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It is at least plausible that coherent speech requires a model of a
large fraction of the world, and, while it may yet turn out to be
false, this theory has been seen as plausible for generations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Whatever else Claude can or can't do, it can certainly speak
coherently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Therefore Claude probably does have something like a model of a
substantial part of the world.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In 1960 this appeared completely impossible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;But here we are.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Addendum&lt;/h2&gt;

&lt;h3&gt;20260214&lt;/h3&gt;

&lt;p&gt;I disagreed with Claude that “what suit was the king” made grammatical
sense.  Rik Signes has pointed out that it it is certainly
grammatical, because the grammar is the same as “what person was the
king” or “what visitor was the king”. My discomfort with it is not
grammatical, it is pragmatic.&lt;/p&gt;</description><author>The Universe of Discourse</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.plover.com/2026/02/12#micro-worlds-2</guid></item><item><title>John Haugeland on the failure of micro-worlds</title><link>https://blog.plover.com/2026/02/05#micro-worlds</link><description>&lt;div class="bookbox"&gt;&lt;table align="right" bgcolor="#ffffdd" border="1" width="20%"&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;a href="https://bookshop.org/a/93187/9780262580953"&gt;&lt;font size="-2"&gt;Buy&lt;/font&gt;&lt;br /&gt;&lt;cite&gt;&lt;font&gt;Artificial Intelligence&lt;/font&gt;&lt;/cite&gt;&lt;br /&gt;&lt;img align="center" alt="(Artificial Intelligence cover missing)" border="0" src="https://images-us.bookshop.org/ingram/9780262580953.jpg?height=250&amp;amp;v=v2" /&gt;&lt;br /&gt;
    &lt;font size="-2"&gt;from Bookshop.org&lt;br /&gt;(with kickback)&lt;/a&gt;&lt;br /&gt;&lt;a href="https://bookshop.org/a/00000/9780262580953"&gt;(without kickback)&lt;/a&gt;&lt;/font&gt;&lt;/a&gt;
    &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One of the better books I read in college was &lt;em&gt;Artificial Intelligence:
The Very Idea&lt;/em&gt; (1985) by philosopher
&lt;a href="https://en.wikipedia.org/wiki/John_Haugeland"&gt;John Haugeland&lt;/a&gt;.  One of the sections I found
most striking and memorable was about Terry Winograd's
&lt;a href="https://en.wikipedia.org/wiki/SHRDLU"&gt;SHRDLU&lt;/a&gt;.  SHRDLU, around 1970, could carry on a
discussion in English in which it would manipulate imaginary colored
blocks in a “blocks world”. displayed on a computer screen.  The
operator could direct it to “pick up the pyramid and put it on the big
red cube” or ask it questions like “what color is the biggest cylinder
that isn't on the table?”.&lt;/p&gt;

&lt;p&gt;Haugeland was extremely unimpressed (p.190, and more generally 185–195):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;To dwell on these shortcomings, however, is to miss the fundamental
  limitation: the micro-world itself. SHRDLU performs so glibly only
  because his domain has been stripped of anything that could ever
  require genuine wit or understanding. In other words, far from
  digging down to the essential questions of AI, a micro-world simply
  eliminates them. … the blocks-world "approximates" a playroom more
  as a paper plane approximates a duck.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He imagines this exchange between the operator and SHRDLU:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;ul&gt;
    &lt;li&gt;Trade you a squirtgun for a big red block.&lt;/li&gt;
    &lt;/ul&gt;
    
    &lt;blockquote&gt;
      &lt;p&gt;SORRY, I DON'T KNOW THE WORD "TRADE".&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/blockquote&gt;
  
  &lt;p&gt;Oops, a vocabulary snag. Fortunately, SHRDLU can learn new
  words; Winograd taught him about steeples, and now we'll tell
  him about trades (and squirtguns).&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;ul&gt;
    &lt;li&gt;A "trade" is a free exchange of property.&lt;/li&gt;
    &lt;/ul&gt;
    
    &lt;blockquote&gt;
      &lt;p&gt;SORRY, I DON'T KNOW THE WORD "FREE".&lt;/p&gt;
    &lt;/blockquote&gt;
    
    &lt;ul&gt;
    &lt;li&gt;A "free" act is done willingly, without being forced.&lt;/li&gt;
    &lt;/ul&gt;
    
    &lt;blockquote&gt;
      &lt;p&gt;SORRY, I DON'T KNOW THE WORD "ACT".&lt;/p&gt;
    &lt;/blockquote&gt;
    
    &lt;ul&gt;
    &lt;li&gt;"Acts" are what people do on purpose, and not by
    accident.&lt;/li&gt;
    &lt;/ul&gt;
    
    &lt;blockquote&gt;
      &lt;p&gt;SORRY, I DON'T KNOW THE WORD "PEOPLE".&lt;/p&gt;
    &lt;/blockquote&gt;
    
    &lt;ul&gt;
    &lt;li&gt;Sorry, I thought you were smarter than you are.&lt;/li&gt;
    &lt;/ul&gt;
    
    &lt;blockquote&gt;
      &lt;p&gt;SORRY, I DON'T KNOW THE WORD "SORRY".&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;What does Haugeland say he would like to have seen?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Try to imagine, for instance, that instead of crashing on
  the first word, SHRDLU would give our offer a typical, ordinary
  response:&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;blockquote&gt;
      &lt;p&gt;I ALREADY HAVE A WATER PISTOL, BUT I'LL GIVE YOU
      TWO BLOCKS AND A PYRAMID FOR YOUR SLIMY OLD
      FROG.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/blockquote&gt;
  
  &lt;p&gt;Childishly simple, no doubt; but look at how much is presupposed:&lt;/p&gt;
  
  &lt;ol&gt;
  &lt;li&gt;SHRDLU appreciates that a second squirtgun would be less valuable
  than the first; … &lt;/li&gt;
  &lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;On this standard, at least, an LLM is a smashing success.  It does,
&lt;em&gt;in fact&lt;/em&gt;, have a model of trading, acts, property, and water pistols,
or at least of how we talk about such things.
We might criticize the
model's accuracy, or usefulness, but it certainly exists.  The large
language model is a model of the &lt;em&gt;semantics&lt;/em&gt; of trading, acts,
property, water pistols, and so on.&lt;/p&gt;

&lt;p&gt;Curious to see how it would go, &lt;a href="https://claude.ai/share/d2e3a7bf-2265-49f5-b9db-a7ebd05a941d"&gt;I asked Claude to pretend it had
access to a SHRDLU-like blocks world&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Let's pretend that we have a blocks world and you have access to it,
  the way SHRDLU does, except you are not SHRDLU, but still Claude.
  So I could ask Claude "put the pyramid on the big red block " and,
  if there were several pyramids, you might reply “I don't know which
  pyramid you mean" or whatever Claude would actually say in such a
  situation. Was that clear?&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;p&gt;Yes, that's clear. I'll act as Claude with access to a blocks world
    environment—able to manipulate blocks, pyramids, and other shapes on
    a table, stack them, move them around, and so on.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;I asked it a few SHRDLU-like questions about the blocks, then asked it
to put a block on a pyramid.  It clearly understood the point of the
exercise:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;blockquote&gt;
    &lt;p&gt;I can't do that—the blue block is much larger than the
    red pyramid, and the pyramid has a pointed top. The block wouldn't
    balance; it would just fall off.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;div class="margin-note"&gt;SHRDLU could handle this too, although I think
its mechanism was different: it would interact with the separate
blocks world subsystem and ⸢actually⸣ try to put the block on the
pyramid; the simulated physics would simulate the block falling off
the pyramid, and SHRDLU would discover that its stacking attempt had
been unsuccessful.  With Claude, something very different is
happening; there is no physics simulation separate from Claude.  I
think the answer here demonstrates that Claude's own model includes
something about pyramids and something about physics.&lt;/div&gt;

&lt;p&gt;Then I made the crucial offer:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Trade you a squirtgun for a big red block.&lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;p&gt;I appreciate the offer, but I don't really have a way to accept a
    squirtgun from you, nor do you have physical access to the blocks
    world to hand me one.&lt;/p&gt;
    
    &lt;p&gt;That said—I could just add a big red block to the world if you want
    one in here. Should I put one on the table?&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;Would Haugeland have been satisfied in 1985 if SHRDLU had said this?
I think certainly.  Haugeland wanted SHRDLU to respond to the offer
directly, as the beginning of a negotiation.  Claude's response is one
level better from that: it not only recognizes that I am negotiating, it
recognizes that &lt;em&gt;actually&lt;/em&gt; negotiating for the squirt gun would not
make sense, and offers a sensible workaround.&lt;/p&gt;

&lt;p&gt;I pushed it a little farther:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I have a squirtgun here.  I can designate it as belonging
  to you, if you agree that the big red block belongs to me. &lt;/p&gt;
  
  &lt;blockquote&gt;
    &lt;p&gt;Alright, you've got a deal. The big red block is yours.&lt;/p&gt;
    
    &lt;p&gt;I've placed a big red block on the table—it's now designated as
    belonging to you. And I acknowledge the squirtgun as mine, though I
    confess I have no idea what I'll do with it in a blocks
    world. Perhaps threaten uncooperative pyramids into stacking
    properly.&lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;div class="margin-note"&gt;Perhaps I'm reading too much into this, but
it seems to me that, having recognized that the offer to
negotiate was itself silly, Claude is responding in the same mode with
its comments about threatening the pyramids.&lt;/div&gt;

&lt;p&gt;Mostly I just tried this for fun.  The Haugeland discussion of SHRDLU
has been knocking around my head for forty years, but now it has
knocked against something new, and I wanted to see what would actually
happen.&lt;/p&gt;

&lt;p&gt;But I do have a larger point.  Haugeland clearly recognized in 1985
that a model of &lt;em&gt;the world&lt;/em&gt; was a requirement for intelligence:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The world of trading cannot be "micro." … There are no plausible,
  non-arbitrary boundaries restricting what might be relevant at any
  juncture.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and later:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The world cannot be decomposed into independent fragments. Realizing
  this amounts to a fundamental insight into common sense and mundane
  intelligence — and therefore points the way for subsequent AI.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Are there are any people who are still saying “it's not artificial
intelligence, it's just a Large Language Model”.  I suppose probably.
But as a “Large Language Model”, Claude necessarily includes a model
of the world in general, something that has long been recognized as an
essential but perhaps unattainable prerequisite for artificial
intelligence.  Five years ago a general world model was science
fiction.  Now we have something that can plausibly be considered an
example.&lt;/p&gt;

&lt;p&gt;And second: maybe this isn't “artificial intelligence” (whatever that
means) and maybe it is.  But &lt;em&gt;it does the things I wanted artificial
intelligence to do&lt;/em&gt;, and I think this example shows pretty clearly
that it does at least one of the things that John Haugeland wanted it
to do in 1985.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://claude.ai/share/d2e3a7bf-2265-49f5-b9db-a7ebd05a941d"&gt;My complete conversation with Claude about this&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Addenda&lt;/h2&gt;

&lt;h3&gt;20260207&lt;/h3&gt;

&lt;p&gt;I don't want to give the impression that Haugeland was scornful of
Winograd's work.  He considered it to have been a valuable experiment:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;No criticism whatever is intended of Winograd or his coworkers. On
  the contrary, it was they who faithfully pursued a pioneering and
  plausible line of inquiry and thereby made an important scientific
  discovery, even if it wasn't quite what they expected. … The
  micro-worlds effort may be credited with showing that the world
  cannot be decomposed into independent fragments. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(p. 195)&lt;/p&gt;

&lt;h3&gt;20260212&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://blog.plover.com/tech/gpt/micro-worlds-2.html"&gt;More about my claim&lt;/a&gt; that&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;as a “Large Language Model”, Claude necessarily includes a model of the world in general&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was not just pulling this out of my ass; it has been widely
theorized since at least 1960.&lt;/p&gt;</description><author>The Universe of Discourse</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.plover.com/2026/02/05#micro-worlds</guid></item><item><title>Crooked politicians love crab cakes!</title><link>https://blog.plover.com/2026/01/28#crab-cakes</link><description>&lt;p&gt;I recently posted
&lt;a href="https://blog.plover.com/law/fortunato-n-perri.html"&gt;an article about the 2013 Philadelphia Traffic Court fiasco&lt;/a&gt;,
in which most of the Traffic Court judges were convicted of accepting
bribes:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;According to the indictment, Perri accepted free auto services,
  towing, landscaping, and even a load of shrimp and &lt;strong&gt;crab cakes&lt;/strong&gt; from
  Alfano, whose company, Century Motors, ran a towing service.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(&lt;em&gt;The Philadelphia Inquirer&lt;/em&gt;, 
&lt;a href="https://www.inquirer.com/philly/news/breaking/20130131_Traffic_Court_judges_begin_surrendering_to_FBI.html"&gt;Nine current and former Traffic Court judges charged&lt;/a&gt;;
Martin, John P. and Craig R. McCoy; 
January 31, 2013)&lt;/p&gt;

&lt;p&gt;Then in 2024, John “Johnny Doc” Dougherty, an influential Philadelphia
union boss, pled guilty to embezzlement and bribery, paid in part in,
guess what?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Tomorrow, tell your mom and dad not to cook, I got &lt;strong&gt;crab cakes&lt;/strong&gt;
  coming from the Palm,” Dougherty is heard telling her in a 2015
  phone call recorded during the 16-month period that the FBI tapped
  his cell phone.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(&lt;em&gt;The Philadelphia Inquirer&lt;/em&gt;,
&lt;a href="https://www.inquirer.com/news/john-dougherty-labor-leader-electricians-indictment-local-corruption-20190205.html"&gt;For leader John Dougherty, union-paid generosity began at home&lt;/a&gt;; 
Fazollah, Mark, Dylan Purcell, Jeremy Roebuck, and Craig R. McCoy;
Feb 5 2019)&lt;/p&gt;

&lt;p&gt;He called them out specifically in his guilty plea:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“I let the lines get blurred,” he said. “I got over my head. … My
  intention wasn’t to figure out how I could &lt;strong&gt;get a crab cake and not
  pay for it&lt;/strong&gt;.” &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(&lt;em&gt;The Philadelphia Inquirer&lt;/em&gt;,
&lt;a href="https://www.inquirer.com/news/philadelphia/john-dougherty-sentencing-speech-local-98-20240713.html"&gt;‘I am guilty:’ John Dougherty’s stunning statements at sentencing delivered an about-face few had predicted&lt;/a&gt;;
Roebuck, Jeremy and Oona Goodin-Smith;
July 13, 2024.)&lt;/p&gt;

&lt;p&gt;And now, in today's &lt;em&gt;New York Times&lt;/em&gt;, I find:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Across five indictments, prosecutors said
  [former New York mayor's aide Ingrid Lewis-Martin] used her
  proximity to the mayor to help fast-track approvals from city
  agencies, steered contracts to a favored developer and tried to kill
  a project to build protected bike lanes in Brooklyn.&lt;/p&gt;
  
  &lt;p&gt;In turn, she received cash, &lt;strong&gt;crab cakes&lt;/strong&gt;, home renovations and
  even an appearance on a popular television show, they said.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(&lt;em&gt;The New York Times&lt;/em&gt;,
&lt;a href="https://www.nytimes.com/2026/01/27/nyregion/ingrid-lewis-martin-bribes-diamond.html"&gt;Former Adams Aide Took Diamond Earrings as Bribe, Prosecutors Say&lt;/a&gt;; 
Meko, Hurubie;
January 27, 2026.)&lt;/p&gt;

&lt;p&gt;Poor Fenchurch, usually a gentle soul, is speechless with indignation.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="https://pic.blog.plover.com/law/crab-cakes/Fenchurch-2026.jpg"&gt;&lt;img
class="center", src="https://pic.blog.plover.com/law/crab-cakes/Fenchurch-2026-th-sq.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;</description><author>The Universe of Discourse</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.plover.com/2026/01/28#crab-cakes</guid></item><item><title>Almost-trivial theorems</title><link>https://blog.plover.com/2026/01/28#major-screwups-7</link><description>&lt;p&gt;A couple of years back I wrote &lt;a href="https://blog.plover.com/math/major-screwups-4.html"&gt;an article about this bit of mathematical folklore&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Mathematical folklore contains a story about how &lt;em&gt;Acta Quandalia&lt;/em&gt;
  published a paper proving that all partially uniform &lt;em&gt;k&lt;/em&gt;-quandles had
  the Cosell property, and then a few months later published another
  paper proving that no partially uniform &lt;em&gt;k&lt;/em&gt;-quandles had the Cosell
  property. And in fact, goes the story, both theorems were quite
  true, which put a sudden end to the investigation of partially
  uniform &lt;em&gt;k&lt;/em&gt;-quandles.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I have an non-apocryphal update in this space!  In
&lt;a href="https://kpknudson.com/my-favorite-theorem/2025/2/6/episode-94-jeremy-alm"&gt;episode 94&lt;/a&gt;
of
&lt;a href="https://kpknudson.com/my-favorite-theorem"&gt;the podcast “My Favorite Theorem”&lt;/a&gt;,
&lt;a href="https://www.lamar.edu/arts-sciences/mathematics/faculty/dr.-jeremy-f.-alm.html"&gt;Jeremy Alm of Lamar University&lt;/a&gt;
reports:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;My main dissertation result was a conditional result.  And about
  four years after I graduated, a Hungarian graduate student proved
  that my condition, like my additional hypothesis, held in only
  trivial cases.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(At 04:15)&lt;/p&gt;

&lt;p&gt;In the earlier article, I had said:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Suppose you had been granted a doctorate on the strength of your
  thesis on the properties of objects from some class which was
  subsequently shown to be empty. Wouldn't you feel at least a bit
  like a fraud?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the podcast, Alm introduces this as evidence that he “wasn't very
good at algebra”.  Fortunately, he added, it was &lt;em&gt;after&lt;/em&gt; he had
graduated.&lt;/p&gt;

&lt;p&gt;The episode title is “In Which Every Thing Happens or it Doesn't”.  I
started listening to it because I expected it to be about the
&lt;a href="https://en.wikipedia.org/wiki/ergodic_theorem"&gt;ergodic theorem&lt;/a&gt;, and I'd like to understand the
ergodic theorem.  But it turned out to be
about the &lt;a href="https://en.wikipedia.org/wiki/Rado_graph"&gt;Rado graph&lt;/a&gt;. This is
fine with me, since I love the Rado graph.  (Who doesn't?)&lt;/p&gt;</description><author>The Universe of Discourse</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.plover.com/2026/01/28#major-screwups-7</guid></item><item><title>An anecdote about backward compatibility</title><link>https://blog.plover.com/2026/01/26#wrterm</link><description>&lt;p&gt;A long time ago I worked on a debugger program that our company used
to debug software that it sold that ran on IBM System 370.  We had
&lt;a href="https://en.wikipedia.org/wiki/IBM_3270"&gt;IBM 3270 CRT terminals&lt;/a&gt; that
could display (I think) eight colors (if you count black),
but the debugger display was
only in black and white.  I thought I might be able to make it a
little more usable by highlighting important items in color.&lt;/p&gt;

&lt;p&gt;I knew that the debugger used a macro called &lt;code&gt;WRTERM&lt;/code&gt; to write text to
the terminal, and I thought maybe the description of this macro in the
manual might provide some hint about how to write colored text.&lt;/p&gt;

&lt;p&gt;In those days, that office didn't have online manuals, instead we had
shelf after shelf of yellow looseleaf binders.  Finding the binder you
wanted was an adventure.  More than once I went to my boss to say I
couldn't proceed without the REXX language reference or whatever.
Sometimes he would just shrug.  Other times he might say something
like “Maybe Matthew knows where that is.”&lt;/p&gt;

&lt;p&gt;I would go ask Matthew about it.  Probably he would just shrug.  But
if he didn't, he would look at me suspiciously, pull the manual from
under a pile of papers on his desk, and wave it at me
threateningly. “You're going to bring this back to me, right?”&lt;/p&gt;

&lt;p&gt;See, because if Matthew didn't hide it in his desk, &lt;em&gt;he&lt;/em&gt; might become
the person who couldn't find it when he needed it.&lt;/p&gt;

&lt;p&gt;Matthew could have photocopied it and stuck his copy in a new binder,
but why do that when burying it on his desk was so much easier?&lt;/p&gt;

&lt;p&gt;For years afterward I carried around my own photocopy of the REXX
language reference, not because I still needed it, but because it had
cost me so much trouble and toil to get it.  To this day I remember
its horrible IBM name: SC24-5239 Virtual Machine / System Product
System Product Interpreter Reference.  That's right, "System Product"
was in there twice.  It was the System Product Interpreter for the
System Product, you see.&lt;/p&gt;

&lt;p&gt;Anyway, I'm digressing.  I did eventually find a copy of the IBM
Assembler Product Macro Reference Document or whatever it was called,
and looked up &lt;code&gt;WRTERM&lt;/code&gt; and to my delight it took an optional parameter
named &lt;code&gt;COLOR&lt;/code&gt;.  Jackpot!&lt;/p&gt;

&lt;p&gt;My glee turned to puzzlement.  If omitted, the default value for
&lt;code&gt;COLOR&lt;/code&gt; was &lt;code&gt;BLACK&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Black?  Not white?  I read further.&lt;/p&gt;

&lt;p&gt;And I learned that the only other permitted value was &lt;code&gt;RED&lt;/code&gt;, and only
if your terminal had a “two-color ribbon”.&lt;/p&gt;

&lt;p&gt;&lt;img alt="An old-style typewriter ribbon, a long, narrow piece of cloth
impregnated with ink and wound onto two spools.  On this one, the top
half of the strip is black and the bottom half is red." class="center" src="https://pic.blog.plover.com/prog/wrterm/ribbon.png" /&gt;&lt;/p&gt;</description><author>The Universe of Discourse</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.plover.com/2026/01/26#wrterm</guid></item><item><title>My new git utility `what-changed-twice` needs a new name</title><link>https://blog.plover.com/2025/09/21#what-changed-twice</link><description>&lt;p&gt;As I have &lt;a href="https://blog.plover.com/prog/git-habits.html"&gt;explained in the past&lt;/a&gt;, my typical workflow is to go
along commiting stuff that might or might not make sense, then clean it
all up at the end, doing multiple passes with &lt;code&gt;git-add&lt;/code&gt; and &lt;code&gt;git-rebase&lt;/code&gt;
to get related changes into the same commit, and then to order the
commits in a sensible way. Yesterday I built a new utility that I found
helpful.  I couldn't think of a name for it, so I called it
&lt;code&gt;what-changed-twice&lt;/code&gt;, which is not great but my I am bad at naming
things and my first attempt was &lt;code&gt;analyze-commits&lt;/code&gt;. I welcome
suggestions. In this article I will call it Fred. &lt;/p&gt;

&lt;p&gt;What is Fred for?  I have a couple of uses for it so far.&lt;/p&gt;

&lt;p&gt;Often as I work I'll produce a chain of commits that looks like
this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;470947ff minor corrections
d630bf32 continue work on `jq` series
c24b8b24 wip
f4695e97 fix link
a8aa1a5c sp
5f1d7a61 WIP
a337696f Where is the quincunx on the quincunx?
39fe1810 new article: The fivefold symmetry of the quince
0a5a8e2e update broken link
196e7491 sp
bdc781f6 new article: fpuzhpx
40c52f47 merge old and new seasons articles and publish
b59441cd finish updating with Star Wars Droids
537a3545 droids and BJ and the Bear
d142598c Add nicely formatted season tables to this old article
19340470 mention numberphile video
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It often happens that I will modify a file on Monday, modify it some
more on Tuesday, correct a spelling error on Wednesday. I might have
made 7 sets of changes to the main file, of which 4 are related, 2
others are related to each other but not to the other 4, and the last
one is unrelated to any of the rest. When a file has changed more than
once, I need to see what changed and then group the changes into related
sets.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;sp&lt;/code&gt; commits are spelling corrections; if the error was made in the
same unmerged topic branch  I will want to squash the correction into
the original commit so that the error never appears at all.&lt;/p&gt;

&lt;p&gt;Some files changed only once, and I don't need to think about those at
this stage.  Later I can go back and split up those commits if it seems
to make the history clearer.&lt;/p&gt;

&lt;p&gt;Fred takes the output of &lt;code&gt;git-log&lt;/code&gt; for the commits you are interested
in:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;#036; git log --stat -20 main...topic | /tmp/what-changed-twice
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It finds which files were modified in which commits, and it prints a
report about any file that was modified in more than one commit:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; calendar/seasons.blog  196 40 d1
  math/centrifuge.blog  193 33
misc/straight-men.blog  53 b5 bd
        prog/jq-2.blog  33 5f d6 

    193  1934047
    196  196e749
     33  33a2304
     40  40c52f4
     53  537a354
     5f  5f1d7a6
     b5  b59441c
     bd  bdc781f
     d1  d142598
     d6  d630bf3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The report is in two parts.  At the top, the path of each file that
changed more than once in the log, and the (highly-abbreviated) commit
IDs of the commits in which it changed.  For example,
&lt;code&gt;calendar/seasons.blog&lt;/code&gt; changed in commits &lt;code&gt;196&lt;/code&gt;, &lt;code&gt;40&lt;/code&gt;, and &lt;code&gt;d1&lt;/code&gt;.  The
second part of the report explains that &lt;code&gt;196&lt;/code&gt; is actually an
abbreviation for commit &lt;code&gt;196e749&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now I can look to see what else changed in those three commits:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;#036; git show --stat 196e749 40c52f4 d142598
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;then look at the changes to &lt;code&gt;calendar/seasons.blog&lt;/code&gt; in those three
commits&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;#036; git show 196e74 40c52f4 d142598 -- calendar/seasons.blog
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and then decide if there are any changes I might like to squash
together.&lt;/p&gt;

&lt;p&gt;Many other files changed on the branch, but I only have to concern
myself with four.&lt;/p&gt;

&lt;p&gt;There's bonus information too.  If a commit is &lt;em&gt;not&lt;/em&gt; mentioned in the
report, then it only changed files that didn't change in any other
commit.  That means that in a rebase, I can move that commit literally
anywhere else in the sequence without creating a conflict. Only the
commits in the report can cause conflicts if they are reordered.&lt;/p&gt;

&lt;p&gt;I write most things in Python these days, but this one seemed to cry out for Perl.  &lt;a href="https://github.com/mjdominus/git-util/blob/master/bin/what-changed-twice"&gt;Here's the code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hmm, maybe I'll call it &lt;code&gt;squash-what&lt;/code&gt;.&lt;/p&gt;</description><author>The Universe of Discourse</author><pubDate>Thu, 01 Jan 1970 03:00:00 GMT</pubDate><guid isPermaLink="true">https://blog.plover.com/2025/09/21#what-changed-twice</guid></item></channel></rss>