<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-24655256</id><updated>2012-03-02T00:29:25.495+01:00</updated><category term='VBA'/><category term='PHP'/><category term='Prius'/><category term='Going to France 2006'/><category term='esoteric'/><category term='language'/><category term='WebDev'/><category term='linguistics'/><category term='Going to NL 2011'/><title type='text'>SPidgorny</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>70</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-24655256.post-1070166199626068342</id><published>2012-02-28T12:34:00.002+01:00</published><updated>2012-02-28T12:34:46.926+01:00</updated><title type='text'>Android app for Rechnung+</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="news-single-item"&gt;&lt;div class="news-single-timedata"&gt;Good news. Now you can track your time on the Android app tipcat and export it to Rechnung+. For details see below.&lt;/div&gt;&lt;div class="news-single-img"&gt;&lt;a href="http://www.rechnung-plus.de/index.php?eID=tx_cms_showpic&amp;amp;file=uploads%2Fpics%2Ftipcat.jpg&amp;amp;md5=d0dcdc281b8a14c0bdccd2112707a38a4bea4ace&amp;amp;parameters[0]=YTo0OntzOjU6IndpZHRoIjtzOjQ6IjUwMG0iO3M6NjoiaGVpZ2h0IjtzOjM6IjUw&amp;amp;parameters[1]=MCI7czo3OiJib2R5VGFnIjtzOjI0OiI8Ym9keSBiZ0NvbG9yPSIjZmZmZmZmIj4i&amp;amp;parameters[2]=O3M6NDoid3JhcCI7czozNzoiPGEgaHJlZj0iamF2YXNjcmlwdDpjbG9zZSgpOyI%2B&amp;amp;parameters[3]=IHwgPC9hPiI7fQ%3D%3D"&gt;&lt;img alt="" height="180" src="http://www.rechnung-plus.de/typo3temp/pics/0d075ece85.jpg" width="120" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="news-single-imgcaption"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="bodytext"&gt;For inpatient here are some links:&lt;/div&gt;&lt;div class="bodytext"&gt;&lt;a href="https://market.android.com/details?id=com.tipcat&amp;amp;hl=en" target="_self"&gt;tipcat on the market&lt;/a&gt;&lt;/div&gt;&lt;div class="bodytext"&gt;&lt;a href="http://tipcat.net/" target="_self"&gt;http://tipcat.net/&lt;/a&gt;&lt;/div&gt;&lt;div class="bodytext"&gt;Once you install tipcat you may start entering times. Every recorded duration is assigned one or more tags. Tags work like categorization labels and are an equivalent to projects in Rechnung+.&lt;/div&gt;&lt;div class="bodytext"&gt;Before synchronizing entered time tracking in tipcat with Rechnung+ you need to setup a relationship between tags in tipcat and projects in Rechnung+. This is easy - start&amp;nbsp;editing the project and enter a corresponding tipcat tag into the "Tags" field in square brackets(!). Multiple tags are supported, please separate with comma.&lt;/div&gt;&lt;div class="bodytext"&gt;&lt;img alt="" height="162" src="http://www.rechnung-plus.de/uploads/RTEmagicC_Rechnung__Projects_-_Google_Chrome_2012-02-27_11-59-28_01.png.png" width="300" /&gt;&lt;/div&gt;&lt;div class="bodytext"&gt;Repeat for more projects/tags. Inside tipcat enter your Rechnung+ login and password. That's all.&amp;nbsp;Setup is ready.&lt;/div&gt;&lt;div class="bodytext"&gt;&lt;img alt="" height="534" src="http://www.rechnung-plus.de/uploads/RTEmagicC_screenshot_2012-02-27_1217.png.png" width="300" /&gt;&lt;/div&gt;&lt;div class="bodytext"&gt;To export today's tracking&amp;nbsp;data just open options menu in tipcat and export to Rechnung+. To export previous days go to history ("Logged Dates")&amp;nbsp;and open a context menu on any day.&lt;/div&gt;&lt;div class="bodytext"&gt;&lt;img alt="" height="534" src="http://www.rechnung-plus.de/uploads/RTEmagicC_screenshot_2012-02-27_1216.png.png" width="300" /&gt;&lt;/div&gt;&lt;div class="bodytext"&gt;This whole thing&amp;nbsp;is working (I checked), but since it's pretty new we give it a beta status. Feel free to contact if something goes wrong.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-1070166199626068342?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/1070166199626068342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=1070166199626068342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/1070166199626068342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/1070166199626068342'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2012/02/android-app-for-rechnung.html' title='Android app for Rechnung+'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-8979924986849444731</id><published>2012-02-15T11:09:00.000+01:00</published><updated>2012-02-28T10:11:05.658+01:00</updated><title type='text'>Progress bar for a lengthy PHP process</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;If you ask an average web-developer if it's possible to make a running progress bar on the web-page while it's loading(!), most of them will say "no". This is understandable as practically all web-pages do not exhibit such progress bars and are in a sense "static" - the whole web-site is dynamically generated from a database, but each page is static except for AJAX changes due to user actions. Here I will show how a lengthy PHP process can show a running progress bar while the page is loading. Of course, it doesn't make sense for pages loading within a second or three, but those import/export/dump/analyze/recode/generate scripts which takes ages.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-lUv4nC-s1zg/TzuCfj48SeI/AAAAAAAAJG8/KA4AQ53mJRI/s1600/Mozilla+Firefox_2012-02-15_11-00-45.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-lUv4nC-s1zg/TzuCfj48SeI/AAAAAAAAJG8/KA4AQ53mJRI/s1600/Mozilla+Firefox_2012-02-15_11-00-45.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;The most trivial approach is to &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;echo '.'; flush();&lt;/span&gt; - it will display a dot for every loop iteration. Test this:&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;for ($i = 0; $i &amp;lt; 100; $i++) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; echo '.';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; flush();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;usleep(1000000*0.1); // total time 10 sec.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;The output should be an increasing amount of dots progressively appearing on the screen during 10 seconds. We need to use &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;flush();&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; in order to send the PHP output buffer out to the browser. Alternatively we could set &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;ini_set('output_buffering', 0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;There is another trick we need to use sometimes, on some servers &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;flush();&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; doesn't work alone - either Apache or browsers (&lt;/span&gt;particularly&lt;span style="font-family: inherit;"&gt;&amp;nbsp;IE) are buffering the incoming HTML data as well. So I add &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;echo str_repeat(' ', ini_get('output_buffering'));&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;before &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;flush();&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; to make sure the buffer is completely filled and being flushed automatically.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;But we can improve the&amp;nbsp;&lt;/span&gt;aesthetics&lt;span style="font-family: inherit;"&gt;&amp;nbsp;of the output using some JavaScript. Remember, in the old days we were using &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;write('Some HTML');&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; to generate some dynamic HTML by JavaScript while the page is loading(!)? So JavaScript can be executed immediately and not only onDOMReady.&lt;/span&gt;&lt;br /&gt;So we build a progress bar using a container &amp;lt;div&amp;gt; and inside &amp;lt;div&amp;gt; of a different background color which will &amp;nbsp;change it's width on the commands from JavaScript while the page in loading(!). Everything is encapsulated into a single class.&lt;br /&gt;Usage example:&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;require_once 'nadlib/class.ProgressBar.php';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;echo 'Starting&amp;amp;hellip;&amp;lt;br /&amp;gt;';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$p = new ProgressBar();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;echo '&amp;lt;div style="width: 300px;"&amp;gt;';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$p-&amp;gt;render();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;echo '&amp;lt;/div&amp;gt;';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;for ($i = 0; $i &amp;lt; ($size = 100); $i++) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;$p-&amp;gt;setProgressBarProgress($i*100/$size);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;usleep(1000000*0.1);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;$p-&amp;gt;setProgressBarProgress(100);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;echo 'Done.&amp;lt;br /&amp;gt;';&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Download class:&amp;nbsp;&lt;a href="http://pastebin.com/KSxjC01r"&gt;http://pastebin.com/KSxjC01r&lt;/a&gt;&lt;br /&gt;I hope using this technique will make your waiting more pleasant. You can even spot potential problems if the progress bar stops for unusually long time or is going slower and slower. I once improved the performance by adding a database index after watching the progress bar behavior.&lt;br /&gt;Disclaimer: this idea is inspired by TYPO3 Extension Manager.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-8979924986849444731?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/8979924986849444731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=8979924986849444731' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/8979924986849444731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/8979924986849444731'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2012/02/progress-bar-for-lengthy-php-process.html' title='Progress bar for a lengthy PHP process'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-lUv4nC-s1zg/TzuCfj48SeI/AAAAAAAAJG8/KA4AQ53mJRI/s72-c/Mozilla+Firefox_2012-02-15_11-00-45.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-6030418301224736002</id><published>2012-01-25T17:14:00.000+01:00</published><updated>2012-01-25T17:16:24.415+01:00</updated><title type='text'>How to change the collation for all tables in a MySQL database to UTF-8?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In response to &lt;a href="http://kb.siteground.com/article/How_to_change_the_collation_for_all_tables_in_db_to_UTF8.html"&gt;How to change the collation for all tables in a MySQL database to UTF-8?&lt;/a&gt; where they only changed the default collation for any column which will be created in the future, I post the script which also changes the collation of each FIELD in the database. I've used it for &lt;a href="http://www.mantisbt.org/"&gt;http://www.mantisbt.org/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Beware (!) that if your database already contains data in the incorrect encoding this script may corrupt the data. It should be safe to use it for English though.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;&amp;lt;?php&lt;br /&gt;require '../config_inc.php';&lt;br /&gt;$db = mysql_connect($g_db_hostname, $g_db_username, $g_db_password);&lt;br /&gt;if(!$db) echo "Cannot connect to the database - incorrect details";&lt;br /&gt;mysql_select_db($g_database_name);&lt;br /&gt;$result=mysql_query('show tables');&lt;br /&gt;while ($tables = mysql_fetch_array($result)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;foreach ($tables as $value) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;echo '&amp;lt;b&amp;gt;'.$value.'&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;';&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;mysql_query("ALTER TABLE $value COLLATE utf8_general_ci");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;alterTable($value);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function alterTable($table) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$result=mysql_query('show columns from '.$table);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while ($fields = mysql_fetch_assoc($result)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$fieldName = $fields['Field'];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$fieldType = $fields['Type'];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (substr($fieldType, 0, 7) == 'varchar') {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;echo $table.'.'.$fieldName.'&amp;lt;br /&amp;gt;';&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;mysql_query("ALTER TABLE $table CHANGE $fieldName $fieldName $fieldType COLLATE utf8_general_ci");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;echo mysql_error();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//print '&amp;lt;pre&amp;gt;'.print_r($fields, true).'&amp;lt;/pre&amp;gt;';&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;echo "The collation of your database has been successfully changed!";&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-6030418301224736002?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/6030418301224736002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=6030418301224736002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/6030418301224736002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/6030418301224736002'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2012/01/how-to-change-collation-for-all-tables.html' title='How to change the collation for all tables in a MySQL database to UTF-8?'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-7640814330091958901</id><published>2011-12-06T15:59:00.001+01:00</published><updated>2011-12-06T16:00:47.997+01:00</updated><title type='text'>Решение судоку с помощью веб-камеры в реальном времени</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Очень интересная статья про комбинацию различных методов распознавания изображений (кстати, это тема и моей курсовой) для решения судоку.&lt;br /&gt;&lt;a href="http://habrahabr.ru/blogs/algorithm/126373/"&gt;http://habrahabr.ru/blogs/algorithm/126373/&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-7640814330091958901?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/7640814330091958901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=7640814330091958901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/7640814330091958901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/7640814330091958901'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/12/blog-post.html' title='Решение судоку с помощью веб-камеры в реальном времени'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-8583104090043352185</id><published>2011-11-17T18:26:00.001+01:00</published><updated>2011-11-17T18:27:47.368+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><title type='text'>Running multiple SQL commands from the dump file (UTF8 compatible) in MSAccess</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I had a hard time running multiple UPDATE commands on an MSAccess database. Even the latest version choke on the following error.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-SuE7cqBM7Kw/TsVCeIHhTlI/AAAAAAAAI0I/xDBPKe8FtTU/s1600/sql1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-SuE7cqBM7Kw/TsVCeIHhTlI/AAAAAAAAI0I/xDBPKe8FtTU/s1600/sql1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;The next logical step for every PHP programmer is to run multiple VBA commands each running a single SQL UPDATE command. Guess what? It works, but VBA doesn't support UTF8 in the queries.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;Sub import()&lt;/pre&gt;&lt;pre&gt;CurrentDb.execute "UPDATE item SET translation = 'привет', pronounce = '' WHERE id = 122"&lt;br /&gt; CurrentDb.execute "UPDATE item SET translation = 'VBA сакс', pronounce = '' WHERE id = 123"&lt;/pre&gt;&lt;pre&gt;End Sub&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;br /&gt;Attempt #3. Read SQL dump from UTF8 file and run each line as SQL command. I found the following code and it doesn't support UTF8 either.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Sub import_file()&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Set FSO = CreateObject("Scripting.FileSystemObject")&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Dim oFS&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Set oFS = FSO.OpenTextFile("c:\users\...\desktop\Import.txt")&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Do Until oFS.AtEndOfStream&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sText = oFS.ReadLine&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CurrentDb.execute sText&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Loop&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Only on fourth attempt I have found a way to read UTF8 data from the file. Executing queries in this way actually works. Spend four hours on this research. Hope it helps.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Sub import_file_utf8()&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Dim File ' As ADODB.Stream&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Set File = CreateObject("ADODB.Stream")&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; File.Open&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; File.Type = 2&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; File.Charset = "UTF-8"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; File.LoadFromFile "c:\users\...\desktop\Import.txt"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Do Until File.eos&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; myString = File.ReadText(-2)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Debug.Print myString&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CurrentDb.execute myString&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Loop&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; File.Close&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-8583104090043352185?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/8583104090043352185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=8583104090043352185' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/8583104090043352185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/8583104090043352185'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/11/running-multiple-sql-commands-from-dump.html' title='Running multiple SQL commands from the dump file (UTF8 compatible) in MSAccess'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-SuE7cqBM7Kw/TsVCeIHhTlI/AAAAAAAAI0I/xDBPKe8FtTU/s72-c/sql1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-5821722184298798216</id><published>2011-10-06T19:20:00.001+02:00</published><updated>2011-10-06T19:25:02.118+02:00</updated><title type='text'>PHP security tips</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;When programming in PHP please pay attention to the following tips. PHP code examples below try to make it impossible to make a mistake by hiding default (non-secure) variables and securing the data on the fly.&amp;nbsp;When you get used to it, you will be able to &lt;a href="http://en.wikipedia.org/wiki/Code_smell"&gt;smell insecure code&lt;/a&gt;.&lt;br /&gt;&lt;h2&gt;&lt;span class="Apple-style-span" style="font-size: 19px;"&gt;Validating input&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="Apple-style-span" style="font-size: small; font-weight: normal;"&gt;Don’t use values from $_REQUEST ($_GET, $_POST) directly assuming they contain data of the necessary data type. Validation or casting is required. For example intval($_REQUEST['id']) will make sure you have an integer. Using a dedicated class for reading URL/Form parameters will allow you to unset($_REQUEST) completely making sure you (or any other developer) is using casting or validation. For example:&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;class Request {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;protected $data = array();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;function __construct($other = NULL) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;data = $other ?: $_REQUEST;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!$other) unset($_REQUEST);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;function getInt($name) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return intval($this-&amp;gt;data[$name]);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;function getTrim($name) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 36.0pt; text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;return trim($this-&amp;gt;data[$name]);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;…&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;$r = new Request();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;echo $r-&amp;gt;getInt('id');&amp;nbsp; // 15&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;echo $_REQUEST['id'];&amp;nbsp;&amp;nbsp; // NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Note that once you created an instance of the Request class you can't use $_REQUEST anymore, which is good. Request could be made a singleton in order to be able to access it from multiple controllers.&lt;/span&gt;&lt;/div&gt;&lt;div style="border-bottom: solid #95B3D7 1.0pt; border: none; mso-border-bottom-alt: solid #95B3D7 .5pt; mso-element: para-border-div; padding: 0cm 0cm 1.0pt 0cm;"&gt;&lt;h3&gt;Escape output&lt;/h3&gt;&lt;h3&gt;&lt;span class="Apple-style-span" style="font-size: small; font-weight: normal;"&gt;In order to prevent XSS you need to use htmlspecialchars() on every dynamic value which may come from the database, user input or web-service. Similarly to the example above it is recommended to close the possibility of using the values without escaping. For example the following View class (from MVC) doesn't allow accessing query results directly:&lt;/span&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;class View {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp; protected $file;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp; protected $caller;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp; function __construct($file, $controller) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;file = $file;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;caller = $controller;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp; function render() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $file = 'template/'.$this-&amp;gt;file;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ob_start();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; require($file);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $content = ob_get_clean();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $content;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;function __call($func, array $args) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $method = array($this-&amp;gt;caller, $func);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return call_user_func_array($method, $args);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;function __get($var) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return htmlspecialchars($this-&amp;gt;caller-&amp;gt;$var);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 36.0pt;"&gt;&lt;span style="font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;$c = new Controller();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;$c-&amp;gt;dataXSS = '&lt;xss&gt;';&lt;o:p&gt;&lt;/o:p&gt;&lt;/xss&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;echo new View('output.phtml', $c);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;// ---- output.phtml&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&lt;/span&gt;&lt;/div&gt;&lt;h1&gt;Test View Controller&lt;/h1&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New';"&gt;&lt;/span&gt;&lt;/div&gt;Must be escaped: dataXSS ?&amp;gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Note that in the template we can access data from the controller directly like this: dataXSS ?&amp;gt;, but this data will be processed with htmlspecialchars() invisibly for you.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-5821722184298798216?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/5821722184298798216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=5821722184298798216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5821722184298798216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5821722184298798216'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/10/php-security-tips.html' title='PHP security tips'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-915550084622653694</id><published>2011-09-23T11:10:00.002+02:00</published><updated>2011-09-23T11:14:02.926+02:00</updated><title type='text'>Friend Share idea for Android</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;An Android (and other platforms including PC) app to share MP3 and other files QUICKLY among friends and people around them. The main aspect is that sharing happens without connection to the Internet – device to device.&lt;br /&gt;&lt;br /&gt;Upon downloading user has to specify his nickname so that he can be identified among other friends in the vicinity. An application will start searching for the same app running on other devices around you. WiFi works in a radius about 100 meters so your friends have to be close to be able to connect. Shown devices will be shown in the list sorted by the signal strength which roughly corresponds to the distance to them in the real life.&lt;br /&gt;&lt;br /&gt;Selecting a person allows to see files which they have shared (and maybe a currently playing MP3 file). Files can be downloaded by clicking on the download icon on the right (see the Android call-log app).&lt;br /&gt;&lt;br /&gt;Two shared folders for friends, for non-friends.&lt;br /&gt;&lt;br /&gt;Make friends function which asks to gently hit both phones (with gyro sensors) to confirm friending.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update: I have found out with amazement that such software already exists: &lt;a href="http://bu.mp/"&gt;http://bu.mp/&lt;/a&gt;. Are they reading my mind or the idea is just so obvious simple?&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.surfmobee.com/wp-content/uploads/2010/03/bump1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.surfmobee.com/wp-content/uploads/2010/03/bump1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-915550084622653694?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/915550084622653694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=915550084622653694' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/915550084622653694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/915550084622653694'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/09/friend-share-idea-for-android.html' title='Friend Share idea for Android'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-4241258282253073767</id><published>2011-08-10T14:14:00.000+02:00</published><updated>2011-08-10T14:14:13.063+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prius'/><title type='text'>Route Frankfurt -&gt; Le Grau du Roi</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Strangely the route &lt;a href="http://maps.google.com/maps?saddr=Unknown+road&amp;amp;daddr=Chemin+de+la+Montagne+de+Thouzon+to:Rue+le+Cours%2FD39+to:Rue+Paul+Gidon+to:Am+Borsdorfer&amp;amp;hl=en&amp;amp;ll=45.598666,8.4375&amp;amp;spn=12.79195,24.191895&amp;amp;sll=45.595137,5.88982&amp;amp;sspn=0.006246,0.011812&amp;amp;geocode=FfrtlwIdBBI_AA%3BFWmIngIdKiRMAA%3BFYh5nwIdxvdNAA%3BFfC5twIdtN1ZAA%3BFVtP_QIdXsyEAA&amp;amp;mra=ps&amp;amp;z=6&amp;amp;layer=t"&gt;Frankfurt -&amp;gt; Le Grau du Roi&lt;/a&gt; (1000 km) toll costs less than the route Le Grau du Roi -&amp;gt; Nice (300 km).&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Frankfurt -&amp;gt; LGDR:&amp;nbsp;31.40 EUR&lt;/li&gt;&lt;li&gt;LGDR -&amp;gt; Nice and back: 44.30 EUR&lt;/li&gt;&lt;li&gt;LGDR -&amp;gt; Frankfurt: 37.10 EUR&lt;/li&gt;&lt;/ul&gt;Just FYI.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-4241258282253073767?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/4241258282253073767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=4241258282253073767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/4241258282253073767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/4241258282253073767'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/08/route-frankfurt-le-grau-du-roi.html' title='Route Frankfurt -&gt; Le Grau du Roi'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-1883753695214116820</id><published>2011-07-20T12:57:00.000+02:00</published><updated>2011-07-20T12:57:53.911+02:00</updated><title type='text'>NL visit 2011</title><content type='html'>In relation to the &lt;a href="http://spidgorny.blogspot.com/2011/07/were-going-to-nl-for-three-day-trip.html"&gt;previous post&lt;/a&gt;, some things we have seen and some things we missed.&lt;br /&gt;Seen:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=scalea&amp;amp;hl=en&amp;amp;ll=52.063158,4.218356&amp;amp;spn=0.000345,0.001059&amp;amp;sll=50.136105,8.70053&amp;amp;sspn=0.045772,0.102911&amp;amp;t=h&amp;amp;z=21"&gt;Man made crater&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=scalea&amp;amp;hl=en&amp;amp;ll=52.104382,4.268418&amp;amp;spn=0,0.001059&amp;amp;sll=50.136105,8.70053&amp;amp;sspn=0.045772,0.102911&amp;amp;t=h&amp;amp;z=21&amp;amp;layer=c&amp;amp;cbll=52.10421,4.268418&amp;amp;panoid=fDt0ai0__MDrmXrmUJE6Fw&amp;amp;cbp=12,231.44,,0,-51.09"&gt;Lighthouse Den Haag&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=scalea&amp;amp;hl=en&amp;amp;ll=52.199881,4.389379&amp;amp;spn=0.001376,0.004238&amp;amp;sll=50.136105,8.70053&amp;amp;sspn=0.045772,0.102911&amp;amp;t=h&amp;amp;z=19&amp;amp;layer=c&amp;amp;cbll=52.199957,4.389499&amp;amp;panoid=LT8y650kDNrJkIoFRuJZ0g&amp;amp;cbp=12,349.35,,0,4.24"&gt;Katwijk am Zee&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=scalea&amp;amp;hl=en&amp;amp;ll=52.162636,4.485946&amp;amp;spn=0,0.004238&amp;amp;sll=50.136105,8.70053&amp;amp;sspn=0.045772,0.102911&amp;amp;t=h&amp;amp;z=19&amp;amp;layer=c&amp;amp;cbll=52.162636,4.485946&amp;amp;panoid=a-2CXQb_fZBRSxCRzW5plA&amp;amp;cbp=12,277.52,,0,0.63"&gt;Leiden Marktplatz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=scalea&amp;amp;hl=en&amp;amp;ll=52.100508,4.346313&amp;amp;spn=0.00069,0.002119&amp;amp;sll=50.136105,8.70053&amp;amp;sspn=0.045772,0.102911&amp;amp;t=h&amp;amp;z=20"&gt;Flowerhouse near grass field&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=scalea&amp;amp;hl=en&amp;amp;ll=51.908583,4.487885&amp;amp;spn=0,0.008476&amp;amp;sll=50.136105,8.70053&amp;amp;sspn=0.045772,0.102911&amp;amp;t=h&amp;amp;z=18&amp;amp;layer=c&amp;amp;cbll=51.908583,4.487885&amp;amp;panoid=0jsHcj3-22SherAmJETmsA&amp;amp;cbp=12,313.05,,0,-16.46"&gt;Erasmusbrug&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.splashtours.nl/"&gt;Splashtours&lt;/a&gt;&amp;nbsp;(&lt;a href="http://maps.google.com/maps?q=scalea&amp;amp;hl=en&amp;amp;ll=51.903135,4.481446&amp;amp;spn=0.001385,0.004238&amp;amp;sll=50.136105,8.70053&amp;amp;sspn=0.045772,0.102911&amp;amp;t=h&amp;amp;z=19"&gt;on water&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=scalea&amp;amp;hl=en&amp;amp;ll=51.919781,4.48958&amp;amp;spn=0.001385,0.004238&amp;amp;sll=50.136105,8.70053&amp;amp;sspn=0.045772,0.102911&amp;amp;t=h&amp;amp;z=19&amp;amp;layer=c&amp;amp;cbll=51.919781,4.48958&amp;amp;panoid=dd3aSgN-JNUFo7XAiH7pAw&amp;amp;cbp=12,29.94,,0,-0.06"&gt;Overblaak&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Not seen:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=scalea&amp;amp;hl=en&amp;amp;ll=51.9849,4.097316&amp;amp;spn=0.002765,0.008476&amp;amp;sll=50.136105,8.70053&amp;amp;sspn=0.045772,0.102911&amp;amp;t=h&amp;amp;z=18"&gt;End of the world beach&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=scalea&amp;amp;hl=en&amp;amp;ll=51.903573,4.164011&amp;amp;spn=0.011081,0.033903&amp;amp;sll=50.136105,8.70053&amp;amp;sspn=0.045772,0.102911&amp;amp;t=h&amp;amp;z=16"&gt;Brielle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=scalea&amp;amp;hl=en&amp;amp;ll=51.95026,4.050071&amp;amp;spn=0.002767,0.008476&amp;amp;sll=50.136105,8.70053&amp;amp;sspn=0.045772,0.102911&amp;amp;t=h&amp;amp;z=18"&gt;Colors of the containers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=scalea&amp;amp;hl=en&amp;amp;ll=51.99914,4.137694&amp;amp;spn=0.002764,0.008476&amp;amp;sll=50.136105,8.70053&amp;amp;sspn=0.045772,0.102911&amp;amp;t=h&amp;amp;z=18"&gt;Cottage district&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;General impressions: architects are stoned and it's good this way.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-1883753695214116820?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/1883753695214116820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=1883753695214116820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/1883753695214116820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/1883753695214116820'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/07/nl-visit-2011.html' title='NL visit 2011'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-3551179441404304477</id><published>2011-07-14T13:38:00.002+02:00</published><updated>2011-08-10T14:15:16.753+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to NL 2011'/><title type='text'>Take List</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.moneyandshit.com/wp-content/uploads/2011/03/packing_luggage_cat.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://www.moneyandshit.com/wp-content/uploads/2011/03/packing_luggage_cat.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Паспорта&lt;/li&gt;&lt;li&gt;Подтверждение из отеля&lt;/li&gt;&lt;li&gt;Самоучитель голландского&lt;/li&gt;&lt;li&gt;МП3 курс голландского&lt;/li&gt;&lt;li&gt;Плавки&lt;/li&gt;&lt;li&gt;Лопату большую&lt;/li&gt;&lt;li&gt;Пасочки&lt;/li&gt;&lt;li&gt;Плавательные игрушки&lt;/li&gt;&lt;li&gt;Воздушные змеи&lt;/li&gt;&lt;li&gt;Книгу про песочные замки&lt;/li&gt;&lt;li&gt;Памперсы&lt;/li&gt;&lt;li&gt;Ноутбук с кучей фильмиков&lt;/li&gt;&lt;li&gt;Включить ГПС при выезде&lt;/li&gt;&lt;li&gt;Икспериа Арк&lt;/li&gt;&lt;li&gt;Заехать к доктору&lt;/li&gt;&lt;li&gt;Полотенца,&lt;/li&gt;&lt;li&gt;Одежды на 2 дня&lt;/li&gt;&lt;li&gt;Теплую куртку&lt;/li&gt;&lt;li&gt;Палатку пляжную&lt;/li&gt;&lt;li&gt;Простилку&lt;/li&gt;&lt;li&gt;Очки&lt;/li&gt;&lt;li&gt;Доску для серфинга&lt;/li&gt;&lt;li&gt;Кредитку&lt;/li&gt;&lt;li&gt;Стульчик&lt;/li&gt;&lt;li&gt;Зарядку для мобилки&lt;/li&gt;&lt;li&gt;Хорошее настроение&lt;/li&gt;&lt;li&gt;Шорты&lt;/li&gt;&lt;li&gt;Фотык (без фоток) и зарядку&lt;/li&gt;&lt;li&gt;Крем от солнца (дождя?)&lt;/li&gt;&lt;li&gt;Тапки&lt;/li&gt;&lt;li&gt;Надувную подушку&lt;/li&gt;&lt;li&gt;Зубную щетку, пасту&lt;/li&gt;&lt;li&gt;Бритву и лезвия&lt;/li&gt;&lt;li&gt;Резиновые сапоги&lt;/li&gt;&lt;li&gt;Резиновый комбинезон&lt;/li&gt;&lt;li&gt;Фен&lt;/li&gt;&lt;li&gt;Карты бумажные (sic!)&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-3551179441404304477?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/3551179441404304477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=3551179441404304477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3551179441404304477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3551179441404304477'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/07/take-list.html' title='Take List'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-3100285638020413084</id><published>2011-07-13T02:12:00.002+02:00</published><updated>2011-07-13T03:33:31.982+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to NL 2011'/><title type='text'>We're going to NL for a three day trip. Some links to some interesting places.</title><content type='html'>Travel Map:&amp;nbsp;&lt;a href="http://maps.google.com/maps?saddr=Frankfurt,+Germany&amp;amp;daddr=Den+Haag,+Netherlands&amp;amp;hl=en&amp;amp;sll=51.06792,6.487825&amp;amp;sspn=2.903034,4.905396&amp;amp;geocode=FdWj_AIdp3SEACnFlnBHbwm9RzEAxrApUEMiBA%3BFeKFGgMdJ3pBAClxvZhCL7fFRzEQbB6NWt4ABA&amp;amp;mra=ls&amp;amp;z=8"&gt;Frankfurt to Den Haag&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?saddr=Frankfurt,+Germany&amp;amp;daddr=Den+Haag,+Netherlands&amp;amp;hl=en&amp;amp;ll=52.163745,4.455986&amp;amp;spn=0.005568,0.013669&amp;amp;sll=51.543026,6.863022&amp;amp;sspn=0.089786,0.153294&amp;amp;geocode=FdWj_AIdp3SEACnFlnBHbwm9RzEAxrApUEMiBA%3BFeKFGgMdJ3pBAClxvZhCL7fFRzEQbB6NWt4ABA&amp;amp;mra=mrv&amp;amp;t=h&amp;amp;z=17"&gt;Hotel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-w_HoDyRtszM/Thz12PYn0aI/AAAAAAAAIwo/1gLmgeFoVsc/s1600/F1000004.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://4.bp.blogspot.com/-w_HoDyRtszM/Thz12PYn0aI/AAAAAAAAIwo/1gLmgeFoVsc/s400/F1000004.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Castles:&lt;br /&gt;&lt;a href="http://maps.google.com/maps?saddr=Frankfurt,+Germany&amp;amp;daddr=Den+Haag,+Netherlands&amp;amp;hl=en&amp;amp;ll=52.075121,5.176674&amp;amp;spn=0.005546,0.013669&amp;amp;sll=51.543026,6.863022&amp;amp;sspn=0.089786,0.153294&amp;amp;geocode=FdWj_AIdp3SEACnFlnBHbwm9RzEAxrApUEMiBA%3BFeKFGgMdJ3pBAClxvZhCL7fFRzEQbB6NWt4ABA&amp;amp;mra=mrv&amp;amp;t=h&amp;amp;z=17"&gt;Fort Rhijnauwen&lt;/a&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?saddr=Frankfurt,+Germany&amp;amp;daddr=Den+Haag,+Netherlands&amp;amp;hl=en&amp;amp;ll=52.121461,4.988587&amp;amp;spn=0.01108,0.027337&amp;amp;sll=51.543026,6.863022&amp;amp;sspn=0.089786,0.153294&amp;amp;geocode=FdWj_AIdp3SEACnFlnBHbwm9RzEAxrApUEMiBA%3BFeKFGgMdJ3pBAClxvZhCL7fFRzEQbB6NWt4ABA&amp;amp;mra=mrv&amp;amp;t=h&amp;amp;z=16&amp;amp;iwloc=lyrftr:h,9787025623597051096,52.121501,4.986269"&gt;Kasteel de Haar&lt;/a&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?saddr=Frankfurt,+Germany&amp;amp;daddr=Den+Haag,+Netherlands&amp;amp;hl=en&amp;amp;ll=52.295672,5.162759&amp;amp;spn=0.011102,0.027337&amp;amp;sll=51.543026,6.863022&amp;amp;sspn=0.089786,0.153294&amp;amp;geocode=FdWj_AIdp3SEACnFlnBHbwm9RzEAxrApUEMiBA%3BFeKFGgMdJ3pBAClxvZhCL7fFRzEQbB6NWt4ABA&amp;amp;mra=mrv&amp;amp;t=h&amp;amp;z=16"&gt;Naarden!&lt;/a&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?saddr=Frankfurt,+Germany&amp;amp;daddr=Den+Haag,+Netherlands&amp;amp;hl=en&amp;amp;ll=52.334089,5.071947&amp;amp;spn=0.001387,0.003417&amp;amp;sll=51.543026,6.863022&amp;amp;sspn=0.089786,0.153294&amp;amp;geocode=FdWj_AIdp3SEACnFlnBHbwm9RzEAxrApUEMiBA%3BFeKFGgMdJ3pBAClxvZhCL7fFRzEQbB6NWt4ABA&amp;amp;mra=mrv&amp;amp;t=h&amp;amp;z=19"&gt;Muiderslot&lt;/a&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?q=Amerongen+&amp;amp;hl=en&amp;amp;ll=51.995444,5.458049&amp;amp;spn=0.005556,0.013669&amp;amp;sll=52.180511,4.966164&amp;amp;sspn=0.044261,0.076647&amp;amp;doflg=ptk&amp;amp;t=h&amp;amp;z=17"&gt;Amerongen&lt;/a&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?q=Loevestein&amp;amp;hl=en&amp;amp;ll=51.816382,5.021701&amp;amp;spn=0.002706,0.00479&amp;amp;sll=51.815928,5.022109&amp;amp;sspn=0.002706,0.00479&amp;amp;doflg=ptk&amp;amp;t=h&amp;amp;radius=0.12&amp;amp;z=18"&gt;Slot Loevestein&lt;/a&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?q=Duivenvoorde&amp;amp;hl=en&amp;amp;ll=52.111111,4.41784&amp;amp;spn=0.002771,0.00479&amp;amp;sll=51.816382,5.021701&amp;amp;sspn=0.002706,0.00479&amp;amp;doflg=ptk&amp;amp;t=h&amp;amp;z=18"&gt;Kasteel Duivenvoorde&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?saddr=Frankfurt,+Germany&amp;amp;daddr=Den+Haag,+Netherlands&amp;amp;hl=en&amp;amp;ll=52.620142,5.41008&amp;amp;spn=0.176332,0.437393&amp;amp;sll=51.543026,6.863022&amp;amp;sspn=0.089786,0.153294&amp;amp;geocode=FdWj_AIdp3SEACnFlnBHbwm9RzEAxrApUEMiBA%3BFeKFGgMdJ3pBAClxvZhCL7fFRzEQbB6NWt4ABA&amp;amp;mra=mrv&amp;amp;t=h&amp;amp;z=12"&gt;Route thru the sea&lt;/a&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?q=Zaanse+Schans,+Netherlands&amp;amp;hl=en&amp;amp;ll=52.475083,4.818004&amp;amp;spn=0.002748,0.00479&amp;amp;sll=52.11959,4.449914&amp;amp;sspn=0.010751,0.019162&amp;amp;doflg=ptk&amp;amp;t=h&amp;amp;z=18"&gt;Мельницы&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Classics:&lt;br /&gt;&lt;a href="http://maps.google.com/maps?saddr=Frankfurt,+Germany&amp;amp;daddr=Den+Haag,+Netherlands&amp;amp;hl=en&amp;amp;ll=52.11573,4.282125&amp;amp;spn=0.005574,0.013669&amp;amp;sll=51.543026,6.863022&amp;amp;sspn=0.089786,0.153294&amp;amp;geocode=FdWj_AIdp3SEACnFlnBHbwm9RzEAxrApUEMiBA%3BFeKFGgMdJ3pBAClxvZhCL7fFRzEQbB6NWt4ABA&amp;amp;mra=mrv&amp;amp;t=h&amp;amp;z=17"&gt;Scheveningen&lt;/a&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?saddr=Frankfurt,+Germany&amp;amp;daddr=Den+Haag,+Netherlands&amp;amp;hl=en&amp;amp;ll=52.099466,4.297264&amp;amp;spn=0.000697,0.001709&amp;amp;sll=51.543026,6.863022&amp;amp;sspn=0.089786,0.153294&amp;amp;geocode=FdWj_AIdp3SEACnFlnBHbwm9RzEAxrApUEMiBA%3BFeKFGgMdJ3pBAClxvZhCL7fFRzEQbB6NWt4ABA&amp;amp;mra=mrv&amp;amp;t=h&amp;amp;z=20"&gt;Madurodam&lt;/a&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?saddr=Frankfurt,+Germany&amp;amp;daddr=Den+Haag,+Netherlands&amp;amp;hl=en&amp;amp;ll=52.266582,4.543576&amp;amp;spn=0.01111,0.027337&amp;amp;sll=51.543026,6.863022&amp;amp;sspn=0.089786,0.153294&amp;amp;geocode=FdWj_AIdp3SEACnFlnBHbwm9RzEAxrApUEMiBA%3BFeKFGgMdJ3pBAClxvZhCL7fFRzEQbB6NWt4ABA&amp;amp;mra=mrv&amp;amp;t=h&amp;amp;z=16"&gt;Keukenhof&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gotoeurope.ru/topic/5.html"&gt;Достопримечательности Голландии&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.deotravel.ru/Holland/excursion_holland/"&gt;Достопримечательности Голландии. Музеи Голландии&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?q=Apeldoorn,+Gelderland,+Netherlands&amp;amp;hl=en&amp;amp;ll=52.176142,5.965126&amp;amp;spn=0.005533,0.013669&amp;amp;sll=52.475383,4.818492&amp;amp;sspn=0.02133,0.038323&amp;amp;geocode=FaqoHAMdxPxaAA&amp;amp;t=h&amp;amp;z=17"&gt;Моя предыдущая работа&lt;/a&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?q=Apeldoorn,+Gelderland,+Netherlands&amp;amp;hl=en&amp;amp;ll=51.970589,4.12388&amp;amp;spn=0.002779,0.006834&amp;amp;sll=52.475383,4.818492&amp;amp;sspn=0.02133,0.038323&amp;amp;geocode=FaqoHAMdxPxaAA&amp;amp;t=h&amp;amp;z=18"&gt;Край света&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://andrerieufans.com/img/images/ineke_wwl/scheveningen1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="253" src="http://andrerieufans.com/img/images/ineke_wwl/scheveningen1.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-3100285638020413084?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/3100285638020413084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=3100285638020413084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3100285638020413084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3100285638020413084'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/07/were-going-to-nl-for-three-day-trip.html' title='We&apos;re going to NL for a three day trip. Some links to some interesting places.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-w_HoDyRtszM/Thz12PYn0aI/AAAAAAAAIwo/1gLmgeFoVsc/s72-c/F1000004.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-9032519304468954423</id><published>2011-07-06T14:51:00.000+02:00</published><updated>2011-07-06T14:51:26.993+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>PHP: Transparent Self-Caching of Objects</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;When programming PHP I work with objects. Some objects exist only once in memory. Either just because they are&amp;nbsp;instantiated&amp;nbsp;once or by using a Singleton design pattern. Other objects are multiple. In PHP, it being a stateless language, these objects need to be created with every page load. Having too many objects loading every time will slow down your web-site. What comes as a natural solution is caching.&lt;br /&gt;Caching is often thought as an outside operation in regards to the objects. Thus it looks scary, you have to change the way you instantiate objects in your code (in many different places) so that it uses caching. Here I will present a way to implement an internal caching - objects will cache themselves almost seamlessly.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Look at the code below:&lt;br /&gt;&lt;!--?php&lt;/p--&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;class SlowObject {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;protected $id;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;static public $instances = array();&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;// public for debugging&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;function __construct($id) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;$this-&amp;gt;id = $id;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;sleep(1); // slow instantiation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;static function getInstance($id) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (!($inst = &amp;amp;self::$instances[$id])) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;$inst = new self($id);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;return $inst;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;// testing&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;$a = SlowObject::getInstance(1);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;$b = SlowObject::getInstance(2);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;$c = SlowObject::getInstance(1);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;echo 'Created '.sizeof(SlowObject::$instances).' objects in '.(microtime(true)-$_SERVER['REQUEST_TIME']).' sec.&lt;br /&gt;';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;This is some kind of extension to the Singleton pattern. Instead of really single instance we make a single instance for each supplied ID. Output:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Created 2 objects in 2.5048339366913 sec.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Note that it had created two unique objects (not three) and it took roughly two seconds (not three).&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;This alone gives performance improvements just because we're not creating objects with the same ID twice - only once for each ID.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Now we will extend this approach to cache all the objects of the same type to the disk (you can extend it to use memcache or APC to be even more effective, but disk is enough for demonstration purposes).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;!--?php&lt;/font--&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;class SlowObject {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;protected $id;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;static public $instances = array();&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;// public for debugging&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;function __construct($id) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;$this-&amp;gt;id = $id;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;sleep(1); // slow instantiation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;static function getInstance($id) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;$filename = '../cache/'.__CLASS__.'.'.$id.'.cache';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;$cached = @unserialize(file_get_contents($filename));&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (!is_object($cached)) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;$cached = self::getInstanceRaw($id);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;file_put_contents($filename, serialize($cached));&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;return $cached;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;static function getInstanceRaw($id) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if (!($inst = &amp;amp;self::$instances[$id])) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;$inst = new self($id);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;return $inst;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;// testing&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;$a = SlowObject::getInstance(1);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;$b = SlowObject::getInstance(2);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;$c = SlowObject::getInstance(1);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;echo 'Created '.sizeof(SlowObject::$instances).' objects in '.(microtime(true)-$_SERVER['REQUEST_TIME']).' sec.&lt;br /&gt;';&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;The first time you run this it outputs: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Created 2 objects in 2.9201810359955 sec.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Two seconds something is roughly the same time as before, but created object are now serialized into files. Next time you run this:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Created 0 objects in 0.27261805534363 sec.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Notice the difference? Run it multiple times in a row, it's very fast every time. And you didn't need to change your calling code much, just maybe from $a = new SlowObject($id); to $a = SlowObject::getInstance($id);. The in-memory and on-disk caching were attached internally to the object.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Now you should make sure that as soon as your data change (in DB for example) you stop using the cached object and create a new one with updated data (saving it again to the cache). It's as simple as deleting the cache file upon updating. Just check that you don't manipulate DB directly without calling update function on the objects somewhere else in your project.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;function update(array $update) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;@unlink('../cache/'.__CLASS__.'.'.$this-&amp;gt;id.'.cache');&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;parent::update($update);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;You may put this functionality into some base class and extend it every time you want your object nicely cache-able.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;I&lt;/span&gt;f you find this interesting, let me know and I show you the class which deals with saving objects to the files automatically (using __destruct function) and how did I solve a few gotchas.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-9032519304468954423?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/9032519304468954423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=9032519304468954423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/9032519304468954423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/9032519304468954423'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/07/php-transparent-self-caching-of-objects.html' title='PHP: Transparent Self-Caching of Objects'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-4203239833333555861</id><published>2011-07-06T13:45:00.001+02:00</published><updated>2011-07-06T13:46:28.280+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prius'/><title type='text'>Augmented Reality for Car Drivers</title><content type='html'>Like I have envisioned in &lt;a href="http://spidgorny.blogspot.com/2010/07/car-of-nearest-future.html"&gt;one of the previous posts&lt;/a&gt;, there is already AR for car drivers. It's not a full windshield projection monitor, it's just an Android app, but hey, it's just the beginning.&lt;br /&gt;&lt;a href="http://www.ionroad.com/"&gt;iOnRoad&lt;/a&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/SOXKegvSN5U" width="425"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-4203239833333555861?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/4203239833333555861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=4203239833333555861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/4203239833333555861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/4203239833333555861'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/07/augmented-reality-for-car-drivers.html' title='Augmented Reality for Car Drivers'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/SOXKegvSN5U/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-8997265342239805442</id><published>2011-06-27T13:51:00.002+02:00</published><updated>2011-06-27T13:54:13.289+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linguistics'/><category scheme='http://www.blogger.com/atom/ns#' term='esoteric'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>How did ancient languages get complicated in the first place</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I've heard from my German teacher that Latin and other languages of that time were more "complicated". One can argue that linguists don't operate with such categories as "simple" and "complicated" but you know what I mean. If not - read this post &lt;a href="http://www.ilovephilosophy.com/viewtopic.php?f=3&amp;amp;t=145180"&gt;Why is the grammar of old languages so complicated?&lt;/a&gt;&lt;br /&gt;Linguists rather speak in terms of "inflectional morphology", "morphological variation", "variation in phonemes"... They even counted these and other language features in each of the languages (2,236 to be precise and 504 in another study) and found out that the older the language - the more "complicated" it is:&amp;nbsp;&lt;a href="http://www.economist.com/node/15384310"&gt;Babelicious! Bigger languages are also simpler ones&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://whyevolutionistrue.wordpress.com/2011/04/16/where-on-earth-did-language-begin/"&gt;Where on Earth did language begin?&lt;/a&gt;&amp;nbsp;And the most complicated language in terms of&amp;nbsp;phonemes&amp;nbsp;variation is&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/%C7%83Kung_language"&gt;!Xu&lt;/a&gt; -&amp;nbsp;a language spoken in southern Africa which has 141 phonemes opposed to 44 in English. That correlates with the idea that Homo Sapiens evolved from Africa and&amp;nbsp;confirms what my German teacher said. But&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;How did ancient languages get complicated in the first place?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Linguists suggest three theories:&lt;br /&gt;1. Children learn languages easier if the language is more complicated (has more redundant "features"). Ridiculous!&lt;br /&gt;2. Complex languages are more precise in expressing the small peculiarities. This is generally true, but doesn't answer the question at all.&lt;br /&gt;3. Smaller language groups (total speakers of !Xu is ~45,000) teach their children their language more carefully. Could be, but doesn't answer the question at all.&lt;br /&gt;Having no better explanation I tend to refer to the works of&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Zecharia_Sitchin"&gt;Zecharia Sitchin&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.levashov.info/"&gt;Nicolai Levashov&lt;/a&gt;&amp;nbsp;which insist that human languages, culture and human themselves are seeded on Earth by the aliens. As astounding and naive as it may seem this theory does answer how did ancient languages get complicated in the first place.&lt;br /&gt;Please comment.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-8997265342239805442?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/8997265342239805442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=8997265342239805442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/8997265342239805442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/8997265342239805442'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/06/how-did-ancient-languages-get.html' title='How did ancient languages get complicated in the first place'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-759830192394884932</id><published>2011-06-17T12:25:00.003+02:00</published><updated>2011-12-21T12:08:49.502+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prius'/><title type='text'>ALL of the 2010 Toyota Prius How-To Youtube Videos</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://www.eurocarblog.com/post/1820/new-toyota-prius-videos"&gt;http://www.eurocarblog.com/post/1820/new-toyota-prius-videos&lt;/a&gt;&lt;br /&gt;+&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Head-Up Display: &lt;a href="http://www.youtube.com/watch?v=pyyHp3GI3X8"&gt;http://www.youtube.com/watch?v=pyyHp3GI3X8&lt;/a&gt;&amp;nbsp;(very  cool)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Lane Assist Feature: &lt;a href="http://www.youtube.com/watch?v=bB5nuy-1Eiw&amp;amp;feature=related"&gt;http://www.youtube.com/watch?v=bB5nuy-1Eiw&amp;amp;feature=related&lt;/a&gt;&amp;nbsp;(cool)&lt;/div&gt;&lt;div&gt;Interior Lights: &lt;a href="http://www.youtube.com/watch?v=A2WYraQolYc&amp;amp;feature=relmfu"&gt;http://www.youtube.com/watch?v=A2WYraQolYc&amp;amp;feature=relmfu&lt;/a&gt;&amp;nbsp;(not  so cool)&lt;/div&gt;&lt;div&gt;Windshield Wipers: &lt;a href="http://www.youtube.com/watch?v=hF4_3RWUGTE&amp;amp;feature=relmfu"&gt;http://www.youtube.com/watch?v=hF4_3RWUGTE&amp;amp;feature=relmfu&lt;/a&gt;&amp;nbsp;(not  so cool)&lt;/div&gt;&lt;div&gt;Air Conditioning: &lt;a href="http://www.youtube.com/watch?v=JfoCzm91ZZs&amp;amp;feature=relmfu"&gt;http://www.youtube.com/watch?v=JfoCzm91ZZs&amp;amp;feature=relmfu&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Instrument Panel: &lt;a href="http://www.youtube.com/watch?v=GMNM1aUutqk&amp;amp;feature=relmfu"&gt;http://www.youtube.com/watch?v=GMNM1aUutqk&amp;amp;feature=relmfu&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Backup Camera: &lt;a href="http://www.youtube.com/watch?v=aYvo9TiTJKs&amp;amp;feature=related"&gt;http://www.youtube.com/watch?v=aYvo9TiTJKs&amp;amp;feature=related&lt;/a&gt;&amp;nbsp;(cool)&lt;/div&gt;&lt;div&gt;Aux Audio: &lt;a href="http://www.youtube.com/watch?v=-pamOakRpDw&amp;amp;feature=relmfu"&gt;http://www.youtube.com/watch?v=-pamOakRpDw&amp;amp;feature=relmfu&lt;/a&gt;&amp;nbsp;(just  for completeness)&lt;/div&gt;&lt;div&gt;Headlights: &lt;a href="http://www.youtube.com/watch?v=2hmH3zw9_SQ&amp;amp;feature=related"&gt;http://www.youtube.com/watch?v=2hmH3zw9_SQ&amp;amp;feature=related&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Fuel Filler Door: &lt;a href="http://www.youtube.com/watch?v=WTzpC7u-yss&amp;amp;feature=related"&gt;http://www.youtube.com/watch?v=WTzpC7u-yss&amp;amp;feature=related&lt;/a&gt;&amp;nbsp;(just  for completeness)&lt;/div&gt;&lt;div&gt;Mirrors: &lt;a href="http://www.youtube.com/watch?v=xd_4Tk2GGX4&amp;amp;feature=related"&gt;http://www.youtube.com/watch?v=xd_4Tk2GGX4&amp;amp;feature=related&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Rear Cargo: &lt;a href="http://www.youtube.com/watch?v=XSVjr_OAdgM&amp;amp;feature=relmfu"&gt;http://www.youtube.com/watch?v=XSVjr_OAdgM&amp;amp;feature=relmfu&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Safety: &lt;a href="http://www.youtube.com/watch?v=2SFUV6hZVJA&amp;amp;feature=related"&gt;http://www.youtube.com/watch?v=2SFUV6hZVJA&amp;amp;feature=related&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Exterior: &lt;a href="http://www.youtube.com/watch?v=8zo1JZKsuyw&amp;amp;feature=relmfu"&gt;http://www.youtube.com/watch?v=8zo1JZKsuyw&amp;amp;feature=relmfu&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Cruise Control: &lt;a href="http://www.youtube.com/watch?v=nfzH6IJ_rBU&amp;amp;feature=relmfu"&gt;http://www.youtube.com/watch?v=nfzH6IJ_rBU&amp;amp;feature=relmfu&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Overview: &lt;a href="http://www.youtube.com/watch?v=UyW8G-729fE&amp;amp;feature=related"&gt;http://www.youtube.com/watch?v=UyW8G-729fE&amp;amp;feature=related&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Performance: &lt;a href="http://www.youtube.com/watch?v=EIbWDnvzT14&amp;amp;feature=relmfu"&gt;http://www.youtube.com/watch?v=EIbWDnvzT14&amp;amp;feature=relmfu&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Tire Pressure: &lt;a href="http://www.youtube.com/watch?v=e4MUqE8Xe2U"&gt;http://www.youtube.com/watch?v=e4MUqE8Xe2U&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Steering Wheel: &lt;a href="http://www.youtube.com/watch?v=JPgtMtdWku4&amp;amp;feature=related"&gt;http://www.youtube.com/watch?v=JPgtMtdWku4&amp;amp;feature=related&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Maintenance Myths: &lt;a href="http://www.youtube.com/watch?v=DtR2zH5-7d0&amp;amp;feature=related"&gt;http://www.youtube.com/watch?v=DtR2zH5-7d0&amp;amp;feature=related&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-759830192394884932?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/759830192394884932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=759830192394884932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/759830192394884932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/759830192394884932'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/06/all-of-2010-toyota-prius-how-to-youtube.html' title='ALL of the 2010 Toyota Prius How-To Youtube Videos'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-3824837850470734248</id><published>2011-06-17T12:23:00.001+02:00</published><updated>2011-06-17T12:23:38.555+02:00</updated><title type='text'>No comment</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-uNFrl-wYI1w/TfsrFQZyIOI/AAAAAAAAIuU/sAdmLf8k5Wk/s1600/IMAGE_352.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://2.bp.blogspot.com/-uNFrl-wYI1w/TfsrFQZyIOI/AAAAAAAAIuU/sAdmLf8k5Wk/s400/IMAGE_352.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-3824837850470734248?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/3824837850470734248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=3824837850470734248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3824837850470734248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3824837850470734248'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/06/no-comment.html' title='No comment'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-uNFrl-wYI1w/TfsrFQZyIOI/AAAAAAAAIuU/sAdmLf8k5Wk/s72-c/IMAGE_352.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-3030550051525827268</id><published>2011-06-17T12:20:00.000+02:00</published><updated>2011-06-17T12:20:21.778+02:00</updated><title type='text'>Transpose 2D array in PHP</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Transposing means swapping columns and rows so that columns become rows and vice versa. When searching for a nice function which I could copy/paste to my code I have found the following comment to the array_map() function (&lt;a href="http://de2.php.net/manual/en/function.array-map.php#86743"&gt;http://de2.php.net/manual/en/function.array-map.php#86743&lt;/a&gt;):&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;To transpose rectangular two-dimension array, use the following code:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;array_unshift($array, null);&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;$array = call_user_func_array("array_map", $array);&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;If you need to rotate rectangular two-dimension array on 90 degree, add the following line before or after (depending on the rotation direction you need) the code above:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;$array = array_reverse($array);&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;Here is example:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;$a&amp;nbsp;&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;= array(&lt;br /&gt;&amp;nbsp; array(&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;span class="keyword" style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="color: #007700;"&gt;&amp;nbsp; array(&lt;/span&gt;&lt;/span&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;1&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;2&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;3&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;),&lt;br /&gt;&amp;nbsp; array(&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;span class="keyword" style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="color: #007700;"&gt;&amp;nbsp; array(&lt;/span&gt;&lt;/span&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;4&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;5&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;6&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;));&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;array_unshift&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;(&lt;/span&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;$a&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;null&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;$a&amp;nbsp;&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;call_user_func_array&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;(&lt;/span&gt;&lt;span class="string" style="background-color: transparent; color: #dd0000;"&gt;"array_map"&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;$a&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;print_r&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;(&lt;/span&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;$a&lt;/span&gt;&lt;span class="keyword" style="background-color: transparent; color: #007700;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;span class="default" style="background-color: transparent; color: #0000bb;"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;Output:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;Array&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;(&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;[0] =&amp;gt; Array&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; (&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [0] =&amp;gt; 1&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [1] =&amp;gt; 4&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; )&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] =&amp;gt; Array&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; (&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [0] =&amp;gt; 2&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [1] =&amp;gt; 5&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; )&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2] =&amp;gt; Array&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; (&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [0] =&amp;gt; 3&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; [1] =&amp;gt; 6&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; )&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Consolas, 'Andale Mono WT', 'Andale Mono', 'Lucida Console', Monaco, 'Courier New', Courier, monospace; font-size: 14px;"&gt;)&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;These two lines has puzzled me for some time. I don't like being puzzled for long, so, after unpuzzling, it appears rather simp&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;le.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;The magic trick is in multiple arguments to the array_map() function. Minimal example: &lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;$a = array_map(NULL, array(1, 'a'), array(2, 'b')); &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;makes: &lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;array( &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; array(1, 2), &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; array('a', 'b') &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;); &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This way each element of the first parameter &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;array (1, 'a')&lt;/span&gt; gets combined with each element of the second parameter. &lt;br /&gt;&lt;br /&gt;The NULL callback function is a short-cut of: &lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;function ($a, $b) { &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; return array($a, $b); &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;} &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Anyway, I find this little hack fascinating.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-3030550051525827268?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/3030550051525827268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=3030550051525827268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3030550051525827268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3030550051525827268'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/06/transpose-2d-array-in-php.html' title='Transpose 2D array in PHP'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-3339450985692227973</id><published>2011-06-02T02:17:00.000+02:00</published><updated>2011-06-02T02:17:33.487+02:00</updated><title type='text'>Someone knows how to fill-in waiting time at the Frankfurt airport ;-)</title><content type='html'>&lt;iframe width="425" height="344" src="http://www.youtube.com/embed/itaBZJhrJg0?fs=1" frameborder="0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-3339450985692227973?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/3339450985692227973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=3339450985692227973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3339450985692227973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3339450985692227973'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/06/someone-knows-how-to-fill-in-waiting.html' title='Someone knows how to fill-in waiting time at the Frankfurt airport ;-)'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/itaBZJhrJg0/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-6578149860614104974</id><published>2011-06-01T00:27:00.002+02:00</published><updated>2011-06-17T12:22:06.493+02:00</updated><title type='text'>I’m looking for someone...</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 15px;"&gt;Buzzwords:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Android app&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Location aware&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Social communication&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Online, Web 2.0&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 14pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;"&gt;Preamble&lt;/span&gt;&lt;/h3&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Imagine  you’re on the business trip (or vacation) in some other city (like  Berlin). You’ve done your business (or sightseeing) and have some time  until you go to bed. You might feel very lonely in a large (or small)  town. There might be people all around you, locals, foreigners and even  from the your country (or even city). Imagine an app which would allow  you to get connected to some other lonely people out there (some maybe  just around the corner).&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;So  if such an application would exist, you would put your mobile device on  the key-chain and let it hang on your breast (or belly) showing (or  blinking) a message saying:&lt;/span&gt;&lt;br /&gt;&lt;div style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&amp;nbsp;&lt;/span&gt;&lt;img height="489px;" src="https://lh6.googleusercontent.com/4NYgYXv79nYYzRz4j06zLDMn1rMuzwD2GFPgXh0RqROZhjpFBYCRp5S3-PzJ3sFMtca8RV2RC2_EdTr0zkoqDuMlPPG4J2ssKQ3idZKKfpH06ZUIJ1JhrKQc-N-PrUA" width="331px;" /&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Note  the text in square brackets: it’s the selectable intention for a  meeting. This is required in order to filter out contacts from people  with dirty intentions.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;You  would walk around and occasionally somebody would read that directly  from your hanging mobile device and start talking to you in real life  (dream on!).&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;In  practice, you would have to switch to a map mode where you will see  placemarks indicating peoples’ location which have this app working with  a call-out with their selected intention for a meeting. It may look  like this:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&amp;nbsp;&lt;/span&gt;&lt;img height="450px;" src="https://lh3.googleusercontent.com/RyDC0G_-cvCwzaE72qBCLuRl-ptzwU_hEjnUa_VYOXstxdH6zfDmQzmP3OfMtkfGl0Meavdi1FYjJuk9SvcopjdkeQLNDcSKBXRKuWesIfS7GciDyWfrlJ6usE2JYIA" width="300px;" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Isn’t that awesome?&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;You  could start moving in the direction of the person that interests you  and look for someone with a cell phone hanging saying “I’m lonely too”.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;A  chat can be initiated in order to clear the incentives prior to meeting  in reality to save some time running to different people just to find  out they have found a boyfriend/girl already.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Some bullet points:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Privacy  is an issue. Allow controlling visibility of the photo and other  personal details (origin country, languages spoken, real name,  twitter/facebook accounts). Private information can be exchanged during  the chat (automatically, not by manual copy/paste/send, of course).&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Allow  disappearing from peers map if absolutely not interested in contacting  somebody (strange looks, disliked nationality, etc.)&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Gender  is a must (male, female, male gay, female gay (lesbian)). This probably  should not be hide-able as some people just plainly don’t want to meet  gays.&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Website with minimal features should be available for laptop users. Modern notebooks are location aware.&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;A server (web-server) needs to hold the active users coordinates and distribute it to people nearby. A single request saying:&lt;br class="kix-line-break" /&gt;GET /api/location?user=tapsy&amp;amp;lat=45.1234&amp;amp;long=8.1234&lt;br class="kix-line-break" /&gt;should  set the user as actively searching now (not offline), set users’  coordinates (change as the person is walking) and get the list of nearby  users as a response.&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;A  selection of ‘nearby’ parameter (range in meters) should allow people  with cars to scan wider range than people on the wheelchairs.&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Adding people to favorites (use Latitude?).&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;The main difference to Latitude is that you’re sharing your location with people you DON’T know and only those which are nearby.&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Setting  a ‘nearby’ property to 40000km (or what’s the Earth’s radius) would  allow to spy on all users of the app in real-time and should not be  possible.&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Allow  entering custom incentive text, but insist on selecting from a set of  20-40 predefined ones in order to avoid hard to understand and  misunderstood incentives.&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;The  difference to other dating sites is the location awareness and search  based on location in order to find peers in matter of minutes and not  weeks.&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Seems like a hot idea, tell me if you like it and would be using it yourself or why not. Vote at: &lt;a href="http://goo.gl/mod/aeG"&gt;http://goo.gl/mod/aeG&lt;/a&gt; &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-6578149860614104974?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/6578149860614104974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=6578149860614104974' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/6578149860614104974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/6578149860614104974'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/06/im-looking-for-someone.html' title='I’m looking for someone...'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-5484522392389187364</id><published>2011-04-11T12:32:00.000+02:00</published><updated>2011-12-21T12:07:14.994+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prius'/><title type='text'>Eco Driving Analytics</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://www.kaizen-analytics.com/2010/11/eco-driving-analytics.html?sms_ss=blogger&amp;amp;at_xt=4da2d85f6a503b2a%2C0"&gt;&lt;br /&gt;&lt;img src="http://1.bp.blogspot.com/_7qH7Lzz_TTU/TNcaaanWgwI/AAAAAAAAAu8/qo42ZaLuToU/s1600/prius-display-travel-consumption.png" /&gt;&lt;br /&gt;&lt;br /&gt;Eco Driving Analytics&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Isn’t that a cool car? I wish it would be possible to export the data on a USB stick and review / analyze on my own PC. That would be analytics nirvana. :-D&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-5484522392389187364?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.kaizen-analytics.com/2010/11/eco-driving-analytics.html?sms_ss=blogger&amp;at_xt=4da2d85f6a503b2a%2C0' title='Eco Driving Analytics'/><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/5484522392389187364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=5484522392389187364' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5484522392389187364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5484522392389187364'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/04/eco-driving-analytics.html' title='Eco Driving Analytics'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7qH7Lzz_TTU/TNcaaanWgwI/AAAAAAAAAu8/qo42ZaLuToU/s72-c/prius-display-travel-consumption.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-4046788909295991587</id><published>2011-04-01T10:20:00.001+02:00</published><updated>2011-12-21T12:06:46.617+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prius'/><title type='text'>Prius driving on it's own</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;As&amp;nbsp;Google is involved - it must be getting somewhere.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://0.gvt0.com/vi/GGvHahR_ZKQ/0.jpg" height="374" width="498"&gt;&lt;param name="movie" value="http://www.youtube.com/v/GGvHahR_ZKQ&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="498" height="374" src="http://www.youtube.com/v/GGvHahR_ZKQ&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-4046788909295991587?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/4046788909295991587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=4046788909295991587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/4046788909295991587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/4046788909295991587'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/04/prius-driving-on-its-own.html' title='Prius driving on it&apos;s own'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-5095374459000751605</id><published>2011-03-10T12:13:00.000+01:00</published><updated>2011-03-10T12:13:41.486+01:00</updated><title type='text'>Почему богатые не делятся деньгами с бедными</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Есть много степеней богатства, почти столько-же сколько и людей на свете. Для практичности выделяют более обобщенные уровни. Иногда 3:&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;нижший&lt;/li&gt;&lt;li&gt;средний и&lt;/li&gt;&lt;li&gt;высший класс.&lt;/li&gt;&lt;/ul&gt;Иногда 100 уровней и меряют их в процентах (3% богатых эксплуатируют 97% более бедных).&lt;br /&gt;&lt;div style="text-align: left;"&gt;В данном &lt;s&gt;материале&lt;/s&gt;, &lt;s&gt;произведении&lt;/s&gt;,&amp;nbsp;&lt;s&gt;обзоре&lt;/s&gt;, посте мы будем рассматривать двух конкретных представителей бедных и богатых относительно друг друга, а не в абсолютных величинах. Эта пара может представлять рабочего и директора завода, а может и бомжа в Лондоне получающего десятки фунтов в день и типичного представителя Никарагуа который работает за 1 доллар в день.&lt;/div&gt;&lt;div style="text-align: left;"&gt;Вряд-ли бомжи, как представители низшего уровня богатства, считают себя материально богатыми (про духовное богатство тут речь не идет). Им должно казаться, что почти все другие люди богаче их и могли бы и поделится парой долларов.&lt;/div&gt;&lt;div style="text-align: left;"&gt;Человек имеющий кров на головой, но еле сводящий концы с концами будет же считать, что у него нет свободных средств для подаяния. Если пойти и дальше по социальной лестнице вверх мы дойдем до директора завода, который не считает умесным поделится прибылью с нижестоящими, т.к. ему самому не хватает (на что не хватает не так важно, психологически он не чувствует что обладает "лишними" деньгами).&lt;/div&gt;&lt;div style="text-align: left;"&gt;Таким образом мы начинаем понимать, зачем &lt;a href="http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B0%D0%BD%D1%81%D0%BD%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BC%D0%BF%D0%B0%D0%BD%D0%B8%D1%8F"&gt;ТНК&lt;/a&gt;&amp;nbsp;пытаются заработать еще больше и не делятся деньгами даже с Никарагуанцами - им самим мало.&lt;/div&gt;&lt;div style="text-align: left;"&gt;Бедные же, в основном, не понимают как такое колличество денег может быть мало. Отсюда непонимание, зависть и революции, хотя есть примеры компаний которые все доходы раздают сотрудникам.&lt;/div&gt;&lt;div style="text-align: left;"&gt;Все, я выговорился.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-5095374459000751605?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/5095374459000751605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=5095374459000751605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5095374459000751605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5095374459000751605'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/03/blog-post.html' title='Почему богатые не делятся деньгами с бедными'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-6394569969794067048</id><published>2011-03-04T19:13:00.001+01:00</published><updated>2011-03-04T19:16:42.055+01:00</updated><title type='text'>What is the best?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;When you search for something in the area&amp;nbsp;you&amp;nbsp;are not familiar with,&amp;nbsp;often you want to find&amp;nbsp;the best of all options. You can find many results (with Google for example), but you still feel unsure which of the found things is the best (most used, de facto standard, most prominent, has most features, etc.). Maybe you find an answer here,&amp;nbsp;where people like you ask questions and share their knowledge and experiences. If not, ask yourself and benefit from the combined "crowd knowledge".&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://witb.appointment.at/"&gt;What is the best...&lt;/a&gt;&amp;nbsp;is a Web 2.0 website, where people can ask all kinds of questions beginning with "What is the best ...". While asking, people can propose some options and vote for them. Other people can propose other options and/or vote. The best answer (based on votes) will appear on top.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Interested? The site is not ready yet, it's still under construction. What I'm looking for is your help in organizing information on the site in such a way that it's convenient to use. Maybe you have suggestions or critique? What do you feel about the concept in general?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some things I have in mind:&lt;/div&gt;&lt;div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Integrate Facebook login&lt;/li&gt;&lt;li&gt;Integrate Add-this button&lt;/li&gt;&lt;li&gt;Allow subscribing to receive mail with new replies.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;a href="http://www.facebook.com/pages/What-is-the-best/137814116257108"&gt;What is the best... Facebook page (development news)&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-6394569969794067048?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/6394569969794067048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=6394569969794067048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/6394569969794067048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/6394569969794067048'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/03/what-is-best.html' title='What is the best?'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-7793498268603235579</id><published>2011-03-04T18:32:00.002+01:00</published><updated>2011-03-04T18:32:33.143+01:00</updated><title type='text'>Rechnung+</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #222222; font-family: Verdana; font-size: 12px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="bodytext" style="padding-bottom: 3px; padding-left: 0px; padding-right: 0px; padding-top: 3px;"&gt;&lt;a href="http://www.rechnung-plus.de/"&gt;Rechnung+&lt;/a&gt; is a web-tool for keeping track of the time spent on some work and making bills for it.&lt;/div&gt;&lt;div class="bodytext" style="padding-bottom: 3px; padding-left: 0px; padding-right: 0px; padding-top: 3px;"&gt;It is completely free&amp;nbsp;for freelancers.&lt;/div&gt;&lt;div class="bodytext" style="padding-bottom: 3px; padding-left: 0px; padding-right: 0px; padding-top: 3px;"&gt;It allows you to enter the time (as interval or duration) which you have spent on any work. You can categorize the work into projects. You can relate your work to a ticket - effectively grouping several work inside one project.&lt;/div&gt;&lt;div class="bodytext" style="padding-bottom: 3px; padding-left: 0px; padding-right: 0px; padding-top: 3px;"&gt;It allows you to make invoices for any subset of the work entered in the system. The calculation of the bills total time and money (taking care of VAT) will be done automatically. The invoices can be printed or saved into PDFs.&lt;/div&gt;&lt;div class="bodytext" style="padding-bottom: 3px; padding-left: 0px; padding-right: 0px; padding-top: 3px;"&gt;A powerful statistical report generator will help you to analyze the work you did by time or money, grouping work by day, week, month or year, comparing selected projects to each other. For every report you generate graphical chart will be generated automatically - visualizing the information and making it easier to perceive.&lt;/div&gt;&lt;div class="bodytext" style="padding-bottom: 3px; padding-left: 0px; padding-right: 0px; padding-top: 3px;"&gt;&lt;a href="http://www.rechnung-plus.de/"&gt;Rechnung+&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-7793498268603235579?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/7793498268603235579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=7793498268603235579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/7793498268603235579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/7793498268603235579'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/03/rechnung.html' title='Rechnung+'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-3194002682060980101</id><published>2011-02-23T16:36:00.000+01:00</published><updated>2011-02-23T16:36:20.002+01:00</updated><title type='text'>3D graphics animations in Excel</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;I have been once on the very boring meeting recently. If I had Internet connection on my notebook working I could entertain myself in other ways. But with nothing else but MS Office I opened Excel and tried making 3D surface chart with animation.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/7ucoeXEnkH0/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/7ucoeXEnkH0?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/7ucoeXEnkH0?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;Here's how I did it step-by-step instructions:&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in; mso-list: l0 level1 lfo3; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Enter a couple of decreasing degree values and fill to the right&lt;/div&gt;&lt;ul style="margin-top: 0in;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo1; tab-stops: list .5in;"&gt;Enter      a couple decreasing degree values vertically and fill to the bottom&lt;/li&gt;&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo1; tab-stops: list .5in;"&gt;On the      row below convert degrees to radians with the formula =RADIANS(C1)&lt;/li&gt;&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo1; tab-stops: list .5in;"&gt;Do the      same for the vertical row =RADIANS(A3) and fill the rest of the horizontal      and vertical cells&lt;/li&gt;&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo1; tab-stops: list .5in;"&gt;The corner      cell B2 will contain the phase component of the surface formula, put zero      there for now.&lt;/li&gt;&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo1; tab-stops: list .5in;"&gt;In the      cell C3 enter the formula for the surface point =SIN($B3*C$2+$B$2)&lt;br /&gt;This formula takes a sin of the radian value above the current cell multiplied      with a radian value on the left of the cell, adds a phase component (used      for animation).&lt;/li&gt;&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo1; tab-stops: list .5in;"&gt;Fill      the rest of the sheet with the same formula. Note that dollar signs in the      formula which makes copy/paste operation to keep (!) the cell address      prefixed with the dollar sign even though usually the formula which is      shifted is having its arguments shifted as well. This makes sure we a      locked to the B column (vertical radian values) and 2&lt;sup&gt;nd&lt;/sup&gt; row      (horizontal radian values).&lt;/li&gt;&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo1; tab-stops: list .5in;"&gt;Select      all the points and make a surface chart. You should get the static 3D function      graph similar to mine.&lt;/li&gt;&lt;/ul&gt;&lt;div class="MsoNormal"&gt;As for animating, remember the zero at $B$2? If you change it to 0.1 for example, you may notice the chart has moved a little bit. We only need to make it move automatically now.&lt;/div&gt;&lt;ul style="margin-top: 0in;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo1; tab-stops: list .5in;"&gt;Create      a new macro and start editing it.&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-SvSq8K7ACdo/TWUpVYwK5zI/AAAAAAAAIoY/yS0nNpwIm3A/s1600/macro-ss.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://1.bp.blogspot.com/-SvSq8K7ACdo/TWUpVYwK5zI/AAAAAAAAIoY/yS0nNpwIm3A/s320/macro-ss.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoPlainText" style="margin-left: .5in; mso-list: l2 level1 lfo1; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-weight: bold; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Enter the following into the selected macro:&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-weight: normal; mso-bidi-font-weight: bold;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;PauseTime = 15&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;' Set duration.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;strong&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-weight: normal; mso-bidi-font-weight: bold;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Start = timer&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;' Set start time.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;strong&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-weight: normal; mso-bidi-font-weight: bold;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Do While timer &amp;lt; Start + PauseTime&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;strong&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-weight: normal; mso-bidi-font-weight: bold;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Range("B2").Value = Range("B2").Value + 0.15&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;strong&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-weight: normal; mso-bidi-font-weight: bold;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DoEvents&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;' Yield to other processes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;strong&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-weight: normal; mso-bidi-font-weight: bold;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;st1:place w:st="on"&gt;Loop&lt;/st1:place&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;strong&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-weight: normal; mso-bidi-font-weight: bold;"&gt;&lt;st1:place w:st="on"&gt;&lt;br /&gt;&lt;/st1:place&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;strong&gt;&lt;span style="font-weight: normal; mso-bidi-font-weight: bold;"&gt;This code is running for 15 seconds repeatedly adding 0.15 to the value in the B2 cell, which makes the 3D chart move a frame. DoEvents() is allowing Excel to redraw the chart, without it the cell value will increase but Excel will not have time to paint the new chart.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;ul style="margin-top: 0in;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l1 level1 lfo2; tab-stops: list .5in;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal; mso-bidi-font-weight: bold;"&gt;Assign a shortcut key      (like Ctrl-A) to run this macro easily. And press the shortcut to test.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="mso-list: l1 level1 lfo2; tab-stops: list .5in;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal; mso-bidi-font-weight: bold;"&gt;You may want to play      around with another formula: =SIN($B19+$B$2)*COS(E$2+$B$2*2)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-3194002682060980101?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/3194002682060980101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=3194002682060980101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3194002682060980101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3194002682060980101'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/02/3d-graphics-animations-in-excel.html' title='3D graphics animations in Excel'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-SvSq8K7ACdo/TWUpVYwK5zI/AAAAAAAAIoY/yS0nNpwIm3A/s72-c/macro-ss.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-5728241917576351759</id><published>2011-02-03T00:50:00.001+01:00</published><updated>2011-02-03T00:52:13.284+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>Petition to release Zend Studio 5.5.1 source code.</title><content type='html'>Zend Studio 5.5.1 is the latest version of the famous PHP IDE which is not based on Eclipse. The next Zend Studio for Eclipse 6 has used the same name, but is a completely different software. Zend Technologies Ltd. has taken the open-source general purpose IDE and extended it to be suitable for PHP development. The main reason for the switch IMHO was that Eclipse is a well know, well supported IDE and Zend Technologies Ltd. can profit from many public extensions and improvements to Eclipse and can concentrate on the PHP support.&lt;br /&gt;&lt;br /&gt;Zend Studio 5 has been almost the perfect IDE. Extremely fast (especially compared to Eclipse), relatively robust (crashes from time to time), but very well sewed. It had native (S)FTP support, more native then ZS4E. It had the debugger, profiler, code analyzer, CSV/SVN support - everything that PHP programmer ever needed.&lt;br /&gt;&lt;br /&gt;ZS 5 is in many aspects superior to ZS4E and currently lacks some new features (PHP 5.3, Mercurial). Therefore we're kindly asking Zend&amp;nbsp;Technologies Ltd. to release Zend Studio 5 source code to public. We are sure there are Java enthusiasts who will fix the stability issues and implement new features. The only reason Zend Technologies Ltd. has not done so already is because open-source ZS5+ may be a threat to their profits. Still we are sure that open-source product will only increase the popularity of the Zend Technologies Ltd. as a leading PHP company which will trigger increased profits in the long term.&lt;br /&gt;&lt;br /&gt;Please comment to support this petition and share this page with everybody who might be interested.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-5728241917576351759?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/5728241917576351759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=5728241917576351759' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5728241917576351759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5728241917576351759'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/02/petition-to-release-zend-studio-551.html' title='Petition to release Zend Studio 5.5.1 source code.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-3791538650860240165</id><published>2011-02-03T00:50:00.000+01:00</published><updated>2011-02-03T00:50:00.497+01:00</updated><title type='text'>1-Click Installer</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_NXx0b5VtFP0/TULnhmuUuNI/AAAAAAAAIjw/3F6IlSz-KTc/s1600/1ci.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_NXx0b5VtFP0/TULnhmuUuNI/AAAAAAAAIjw/3F6IlSz-KTc/s320/1ci.png" width="235" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;With the increasing popularity of portable software as well as single EXE file software (for example &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896653"&gt;Process Explorer&lt;/a&gt;) there appears to be a need for a 1-click installer.&lt;br /&gt;&lt;br /&gt;1-click installer will merely add a new context menu item to the Windows Explorer called "1-click install" for EXE files. Clicking it will copy the EXE file into C:\Program Files\ (or whatever path is set in the registry) and create a start-menu item with the same name. Two simple operations, which can be easily automatized. &lt;br /&gt;&lt;br /&gt;It may need to be working on folders as well. In this case the whole folder will be copied and the shortcut should be created to the largest EXE file in that folder?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-3791538650860240165?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/3791538650860240165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=3791538650860240165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3791538650860240165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3791538650860240165'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/02/1-click-installer.html' title='1-Click Installer'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NXx0b5VtFP0/TULnhmuUuNI/AAAAAAAAIjw/3F6IlSz-KTc/s72-c/1ci.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-885621019489634816</id><published>2011-01-04T18:44:00.000+01:00</published><updated>2011-02-03T00:52:54.481+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prius'/><title type='text'>Car Driving Styles</title><content type='html'>There are different driving styles. Novice drivers tend to be overly careful and slow. Some drivers remain in that state for their whole life. Most, however, evolve and become overly confident in themselves.&lt;br /&gt;&lt;br /&gt;Such drivers drive too fast and hate every driver that's driving slower then 200 km/h.&lt;br /&gt;&lt;br /&gt;Only the selected cultivated highly experienced people evolve into something bigger - serious, responsive, polite, friendly to other drivers, and best of all, remain as such even when in a hurry. They value not only their own time but also the time of others, understand and truly share the idea that the overall time of all travelers needs to be minimized and not only your own driving time on the price of time of others.&lt;br /&gt;&lt;br /&gt;It took me a couple of months to outgrow the first novice stage. It took me 9 years of daily driving to glorify up to the responsible driver level.&lt;br /&gt;&lt;br /&gt;Which level are you currently in? Make a comment below.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-885621019489634816?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/885621019489634816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=885621019489634816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/885621019489634816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/885621019489634816'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2011/01/car-driving-styles.html' title='Car Driving Styles'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-5593901430497671243</id><published>2010-11-27T00:18:00.002+01:00</published><updated>2011-02-03T00:52:13.285+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>DebugPanel - Web 2.0 way of print_r()</title><content type='html'>&lt;h1&gt;DebugPanel - Web 2.0 way of print_r()&lt;/h1&gt;&lt;a href="http://4.bp.blogspot.com/_NXx0b5VtFP0/TPBA7TmQ_aI/AAAAAAAAIhk/2EhCClzjAnE/s1600/DebugPanelScreenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_NXx0b5VtFP0/TPBA7TmQ_aI/AAAAAAAAIhk/2EhCClzjAnE/s1600/DebugPanelScreenshot.png" /&gt;&lt;/a&gt;&lt;h2&gt;Target Audience&lt;/h2&gt;&lt;p&gt;Novice and intermediate PHP developers who are debugging the code by inserting&lt;/p&gt;&lt;pre class="brush: php"&gt;&lt;br /&gt;print_r($var); // or&lt;br /&gt;var_dump($var); // or&lt;br /&gt;var_export($var);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;Note: those who are using &lt;a href="http://www.php-debugger.com/dbg/"&gt;DBG&lt;/a&gt;, &lt;a href="http://www.xdebug.org/"&gt;Xdebug&lt;/a&gt;, &lt;a href="http://www.thierryb.net/pdtwiki/index.php?title=Using_PDT_:_Installation_:_Installing_the_Zend_Debugger"&gt;Zend Debugger&lt;/a&gt; or &lt;a href="http://pelfusion.com/tools/how-to-debug-php-code-and-useful-php-debugging-tools/"&gt;others&lt;/a&gt;, please ignore this "lame" script - it will only make you laugh.&lt;/em&gt;&lt;/p&gt;&lt;h2&gt;Purpose&lt;/h2&gt;&lt;p&gt;Most of PHP developers start debugging by inserting something like this in their code and seeing results on the screen.&lt;/p&gt;&lt;pre class="brush: php"&gt;&lt;br /&gt;$var = call_some_obscure_function();&lt;br /&gt;print '&amp;lt;pre&gt;'.print_r($var, true).'&amp;lt;/pre&gt;';&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;DebugPanel also outputs the variable contents on the screen, but not directly at the place where it's called, but in a window floating over your script output with many convenience features.&lt;/p&gt;&lt;h2&gt;Feature list&lt;/h2&gt;&lt;ul&gt; &lt;li&gt;Collect all variable dumps in one place.&lt;/li&gt; &lt;li&gt;Highlight the syntax a little (different variable types get different background).&lt;/li&gt; &lt;li&gt;Save screen space by toggling visibility of different variables.&lt;/li&gt; &lt;li&gt;Handle multidimentional arrays with ease.&lt;/li&gt; &lt;li&gt;DebugPanel is displayed with &lt;code&gt;position: absolute&lt;/code&gt; which is not interfering with the output of your script.&lt;/li&gt; &lt;li&gt;Drag and drop DebugPanel so it will not cover important information on your screen.&lt;/li&gt; &lt;li&gt;Never get warnings that you are trying to send HTTP headers or set cookies AFTER outputting debug information.&lt;/li&gt; &lt;li&gt;Handle objects as easy as multidimentional arrays.&lt;/li&gt; &lt;li&gt;Use the included &lt;a href="http://www.adepteo.net/profiler/index.php"&gt;PHP profiler&lt;/a&gt; to find the slowest code block in your script.&lt;/li&gt; &lt;li&gt;Use the included server statistics module to know what's going on with your server.&lt;/li&gt; &lt;li&gt;Remembers it's position after dragging, giving you pleasant debugging time!&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;h2&gt;Demo&lt;/h2&gt;&lt;p&gt;If you haven't noticed - here it is, on the right of this page. Drag it and inspect it. Click on array titles to toggle visibility.&lt;/p&gt;&lt;h2&gt;Usage&lt;/h2&gt;&lt;h3&gt;Step 1&lt;/h3&gt;&lt;p&gt;Include the PHP class into your initialization (bootstraping) script.&lt;/p&gt;&lt;pre class="brush: php"&gt;&lt;br /&gt;require_once('class.DebugPanel.php');&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;It will automatically attach itself to the end of your script by using&lt;/p&gt;&lt;pre class="brush: php"&gt;&lt;br /&gt;register_shutdown_function()&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;and so render the DebugPanel in the browser.&lt;/p&gt;&lt;h3&gt;Step 2&lt;/h3&gt;&lt;p&gt;Call&lt;/p&gt;&lt;pre class="brush: php"&gt;&lt;br /&gt;&lt;br /&gt;dp('return value from strange function', $var);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;every time you want to debug something.&lt;/p&gt;&lt;h2&gt;Download&lt;/h2&gt;&lt;a href="http://rapidshare.com/files/433351455/DebugPanel.zip"&gt;DebugPanel.zip&lt;/a&gt;&lt;br&gt;&lt;em&gt;Somebody wants to host the file for me?&lt;/em&gt;&lt;h2&gt;Todo&lt;/h2&gt;&lt;p&gt;I don't have any plans yet. Please try DebugPanel and report bugs and suggestions.&lt;/p&gt;&lt;h2&gt;Hint about Taylor Profiler&lt;/h2&gt;&lt;p&gt;That's the way I use Taylor Profiler in my code (which takes care of the current class name and current function name in one go):&lt;/p&gt;&lt;pre class="brush: php"&gt;&lt;br /&gt;function some_slow_function() {&lt;br /&gt; if (isset($GLOBALS['profiler'])) $GLOBALS['profiler']-&gt;startTimer(__METHOD__);&lt;br /&gt; sleep(1);&lt;br /&gt; if (isset($GLOBALS['profiler'])) $GLOBALS['profiler']-&gt;stopTimer(__METHOD__);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;style&gt;.floatTime { -moz-border-radius-bottomleft:5px; -moz-border-radius-bottomright:5px; background-color:#22221F; color:#FFF4A7; left:50%; padding:0.5em; position:fixed; top:0; width:auto; z-index: 300;}.DebugPanel { position: fixed; left: 800px; top: 500px; border: solid 1px #ACCEFF; background: white; padding: 0px; display: none; max-width: 1000px; max-height: 800px; overflow: auto; -moz-box-shadow: 0px 0px 4px #666; -webkit-box-shadow: 0px 0px 4px #666; box-shadow: 0px 0px 4px #666; font-family: verdana; font-size: 10pt;z-index: 10000;}.flying { -moz-box-shadow: 0px 0px 9px #666; -webkit-box-shadow: 0px 0px 9px #666; box-shadow: 0px 0px 9px #666; zoom: 1.02; -moz-transform: scale(1.02);}.DebugPanel * { font-size: 8pt;}.DebugPanel h5 { font-size: 12pt; margin: 0; cursor: move; background-color: #ACCEFF; padding: 2px;}.DebugPanel h6 { font-size: 10pt; margin: 0; cursor: default; padding: 2px;}.DebugPanel .panel { border: solid 1px #ACCEFF; margin: 0px 0;}.DebugPanel .panel .content { padding: 0 0px 0px 0px;}.view_array,.view_array th,.view_array td { border-collapse: collapse; border: solid 1px #007700;}.view_array { width: 100%;}.view_array td {}.view_array .overflow { white-space: wrap; overflow: auto;}.object { color: #A419A4; background-color: #FFEFFF;}.array { color: #007700; background-color: #EFFFEF;}.string { color: #000088; background-color: #EFEFFF;}.NULL { color: #888888; background-color: #EEEEEE;}.boolean { color: #F08316; background-color: #FFEECC;}&lt;/style&gt;&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&gt;&lt;/script&gt;&lt;script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"&gt;&lt;/script&gt;&lt;script src="https://github.com/carhartl/jquery-cookie/raw/master/jquery.cookie.js"&gt;&lt;/script&gt;&lt;script src="http://jquery-json.googlecode.com/files/jquery.json-2.2.min.js"&gt;&lt;/script&gt;&lt;script&gt;jQuery.noConflict();jQuery(function ($) { var DebugPanel = $('.DebugPanel'); // restore position var cookie = $.evalJSON($.cookie('DebugPanel')); if (cookie) {  DebugPanel.css('left', cookie.position ? cookie.position.left : 800);  DebugPanel.css('top', cookie.position ? cookie.position.top : 500);  for (var i in cookie.open) {   //console.log(i);   DebugPanel.find('h6:contains('+i+')').nextAll().css('display', cookie.open[i] ? 'block' : 'none'); // hide hidden elements  }; } else {  cookie = {}; } DebugPanel.css('display', 'block'); DebugPanel.draggable({  handle: 'h5',  opacity: 0.95,  start: function (e) {   $(this).addClass('flying');  },  stop: function (e) {   $(this).removeClass('flying');   //console.log(this);   cookie.position = {    left: $(this).offset().left,    top : $(this).offset().top - $(document).scrollTop()   };   $.cookie('DebugPanel', $.toJSON(cookie), 365);  } }); var panels = $('.DebugPanel').find('.panel'); //console.log(panels); panels.find('h6').click(function () {  var savedClicker = $(this);  $(this).nextAll().slideToggle(function (p1, p2) {   cookie.open = cookie.open ? cookie.open : {};   cookie.position = {    left: $(this).offset().left,    top : $(this).offset().top - $(document).scrollTop()   };   var key = savedClicker.text();   //console.log(this, p1, p2, savedClicker, key);   cookie.open[key] = $(this).css('display') == 'block';   $.cookie('DebugPanel', $.toJSON(cookie), 365);  }); });});&lt;/script&gt;&lt;div class="DebugPanel"&gt;&lt;div class="panel"&gt;  &lt;h5 class="string"&gt;DebugPanel&lt;/h5&gt;&lt;div class="content"&gt;&lt;div class="panel"&gt;  &lt;h6 class="object"&gt;Request (array[7])&lt;/h6&gt;&lt;div class="content"&gt;&lt;table class="view_array array"&gt;&lt;thead&gt;&lt;tr &gt;&lt;th &gt;key&lt;/th&gt;&lt;th &gt;typeName&lt;/th&gt;&lt;th &gt;value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;colgroup&gt;&lt;col class="key"&gt;&lt;/col&gt;&lt;col class="typeName"&gt;&lt;/col&gt;&lt;col class="value"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tr class="odd" &gt;&lt;td &gt;v1st&lt;/td&gt;&lt;td class="string"&gt;string(16)&lt;/td&gt;&lt;td class="string overflow"&gt;8485AB8ACB4BBF90&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;MANTIS_VIEW_ALL_COOKIE&lt;/td&gt;&lt;td class="string"&gt;string(2)&lt;/td&gt;&lt;td class="string overflow"&gt;50&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;_csoot&lt;/td&gt;&lt;td class="string"&gt;string(13)&lt;/td&gt;&lt;td class="string overflow"&gt;1268814504774&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;_csuid&lt;/td&gt;&lt;td class="string"&gt;string(16)&lt;/td&gt;&lt;td class="string overflow"&gt;48b417b23862dc80&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;MANTIS_STRING_COOKIE&lt;/td&gt;&lt;td class="string"&gt;string(64)&lt;/td&gt;&lt;td class="string overflow"&gt;8bac76e935a27df7c99e72a7536cbfaae589e74d8380b7c59f407a5626c4508d&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;MANTIS_PROJECT_COOKIE&lt;/td&gt;&lt;td class="string"&gt;string(1)&lt;/td&gt;&lt;td class="string overflow"&gt;6&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;livecid&lt;/td&gt;&lt;td class="string"&gt;string(32)&lt;/td&gt;&lt;td class="string overflow"&gt;WI0om32G7446uxjqY4Kzg3Rs5LhQ8Fr2&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="panel"&gt;  &lt;h6 class="object"&gt;System Variables (array[7])&lt;/h6&gt;&lt;div class="content"&gt;&lt;table class="view_array array"&gt;&lt;thead&gt;&lt;tr &gt;&lt;th &gt;key&lt;/th&gt;&lt;th &gt;typeName&lt;/th&gt;&lt;th &gt;value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;colgroup&gt;&lt;col class="key"&gt;&lt;/col&gt;&lt;col class="typeName"&gt;&lt;/col&gt;&lt;col class="value"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tr class="odd" &gt;&lt;td &gt;REQUEST&lt;/td&gt;&lt;td class="array"&gt;array[7]&lt;/td&gt;&lt;td class="array"&gt;&lt;div class="panel"&gt;  &lt;h6 class="object"&gt;REQUEST (array[7])&lt;/h6&gt;&lt;div class="content"&gt;&lt;table class="view_array array"&gt;&lt;thead&gt;&lt;tr &gt;&lt;th &gt;key&lt;/th&gt;&lt;th &gt;typeName&lt;/th&gt;&lt;th &gt;value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;colgroup&gt;&lt;col class="key"&gt;&lt;/col&gt;&lt;col class="typeName"&gt;&lt;/col&gt;&lt;col class="value"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tr class="odd" &gt;&lt;td &gt;v1st&lt;/td&gt;&lt;td class="string"&gt;string(16)&lt;/td&gt;&lt;td class="string overflow"&gt;8485AB8ACB4BBF90&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;MANTIS_VIEW_ALL_COOKIE&lt;/td&gt;&lt;td class="string"&gt;string(2)&lt;/td&gt;&lt;td class="string overflow"&gt;50&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;_csoot&lt;/td&gt;&lt;td class="string"&gt;string(13)&lt;/td&gt;&lt;td class="string overflow"&gt;1268814504774&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;_csuid&lt;/td&gt;&lt;td class="string"&gt;string(16)&lt;/td&gt;&lt;td class="string overflow"&gt;48b417b23862dc80&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;MANTIS_STRING_COOKIE&lt;/td&gt;&lt;td class="string"&gt;string(64)&lt;/td&gt;&lt;td class="string overflow"&gt;8bac76e935a27df7c99e72a7536cbfaae589e74d8380b7c59f407a5626c4508d&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;MANTIS_PROJECT_COOKIE&lt;/td&gt;&lt;td class="string"&gt;string(1)&lt;/td&gt;&lt;td class="string overflow"&gt;6&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;livecid&lt;/td&gt;&lt;td class="string"&gt;string(32)&lt;/td&gt;&lt;td class="string overflow"&gt;WI0om32G7446uxjqY4Kzg3Rs5LhQ8Fr2&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;GET&lt;/td&gt;&lt;td class="array"&gt;array[0]&lt;/td&gt;&lt;td class="array"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;POST&lt;/td&gt;&lt;td class="array"&gt;array[0]&lt;/td&gt;&lt;td class="array"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;FILES&lt;/td&gt;&lt;td class="array"&gt;array[0]&lt;/td&gt;&lt;td class="array"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;COOKIE&lt;/td&gt;&lt;td class="array"&gt;array[7]&lt;/td&gt;&lt;td class="array"&gt;&lt;div class="panel"&gt;  &lt;h6 class="object"&gt;COOKIE (array[7])&lt;/h6&gt;&lt;div class="content"&gt;&lt;table class="view_array array"&gt;&lt;thead&gt;&lt;tr &gt;&lt;th &gt;key&lt;/th&gt;&lt;th &gt;typeName&lt;/th&gt;&lt;th &gt;value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;colgroup&gt;&lt;col class="key"&gt;&lt;/col&gt;&lt;col class="typeName"&gt;&lt;/col&gt;&lt;col class="value"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tr class="odd" &gt;&lt;td &gt;v1st&lt;/td&gt;&lt;td class="string"&gt;string(16)&lt;/td&gt;&lt;td class="string overflow"&gt;8485AB8ACB4BBF90&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;MANTIS_VIEW_ALL_COOKIE&lt;/td&gt;&lt;td class="string"&gt;string(2)&lt;/td&gt;&lt;td class="string overflow"&gt;50&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;_csoot&lt;/td&gt;&lt;td class="string"&gt;string(13)&lt;/td&gt;&lt;td class="string overflow"&gt;1268814504774&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;_csuid&lt;/td&gt;&lt;td class="string"&gt;string(16)&lt;/td&gt;&lt;td class="string overflow"&gt;48b417b23862dc80&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;MANTIS_STRING_COOKIE&lt;/td&gt;&lt;td class="string"&gt;string(64)&lt;/td&gt;&lt;td class="string overflow"&gt;8bac76e935a27df7c99e72a7536cbfaae589e74d8380b7c59f407a5626c4508d&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;MANTIS_PROJECT_COOKIE&lt;/td&gt;&lt;td class="string"&gt;string(1)&lt;/td&gt;&lt;td class="string overflow"&gt;6&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;livecid&lt;/td&gt;&lt;td class="string"&gt;string(32)&lt;/td&gt;&lt;td class="string overflow"&gt;WI0om32G7446uxjqY4Kzg3Rs5LhQ8Fr2&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;SESSION&lt;/td&gt;&lt;td class="NULL"&gt;NULL&lt;/td&gt;&lt;td class="NULL"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;GLOBALS&lt;/td&gt;&lt;td class="NULL"&gt;NULL&lt;/td&gt;&lt;td class="NULL"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="panel"&gt;  &lt;h6 class="object"&gt;Test (array[8])&lt;/h6&gt;&lt;div class="content"&gt;&lt;table class="view_array array"&gt;&lt;thead&gt;&lt;tr &gt;&lt;th &gt;key&lt;/th&gt;&lt;th &gt;typeName&lt;/th&gt;&lt;th &gt;value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;colgroup&gt;&lt;col class="key"&gt;&lt;/col&gt;&lt;col class="typeName"&gt;&lt;/col&gt;&lt;col class="value"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tr class="odd" &gt;&lt;td &gt;string&lt;/td&gt;&lt;td class="string"&gt;string(12)&lt;/td&gt;&lt;td class="string overflow"&gt;Hello World!&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;int&lt;/td&gt;&lt;td class="integer"&gt;integer(2)&lt;/td&gt;&lt;td class="integer overflow"&gt;10&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;double&lt;/td&gt;&lt;td class="double"&gt;double(6)&lt;/td&gt;&lt;td class="double overflow"&gt;3.1428&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;null&lt;/td&gt;&lt;td class="NULL"&gt;NULL&lt;/td&gt;&lt;td class="NULL"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;bool&lt;/td&gt;&lt;td class="boolean"&gt;boolean(1)&lt;/td&gt;&lt;td class="boolean overflow"&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;array&lt;/td&gt;&lt;td class="array"&gt;array[5]&lt;/td&gt;&lt;td class="array"&gt;&lt;div class="panel"&gt;  &lt;h6 class="object"&gt;array (array[5])&lt;/h6&gt;&lt;div class="content"&gt;&lt;table class="view_array array"&gt;&lt;thead&gt;&lt;tr &gt;&lt;th &gt;key&lt;/th&gt;&lt;th &gt;typeName&lt;/th&gt;&lt;th &gt;value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;colgroup&gt;&lt;col class="key"&gt;&lt;/col&gt;&lt;col class="typeName"&gt;&lt;/col&gt;&lt;col class="value"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tr class="odd" &gt;&lt;td &gt;0&lt;/td&gt;&lt;td class="integer"&gt;integer(1)&lt;/td&gt;&lt;td class="integer overflow"&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;1&lt;/td&gt;&lt;td class="integer"&gt;integer(1)&lt;/td&gt;&lt;td class="integer overflow"&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;2&lt;/td&gt;&lt;td class="integer"&gt;integer(1)&lt;/td&gt;&lt;td class="integer overflow"&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;3&lt;/td&gt;&lt;td class="integer"&gt;integer(1)&lt;/td&gt;&lt;td class="integer overflow"&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;4&lt;/td&gt;&lt;td class="string"&gt;string(5)&lt;/td&gt;&lt;td class="string overflow"&gt;asd&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;panel&lt;/td&gt;&lt;td class="array"&gt;array[1]&lt;/td&gt;&lt;td class="array"&gt;&lt;div class="panel"&gt;  &lt;h6 class="object"&gt;panel (array[1])&lt;/h6&gt;&lt;div class="content"&gt;&lt;table class="view_array array"&gt;&lt;thead&gt;&lt;tr &gt;&lt;th &gt;key&lt;/th&gt;&lt;th &gt;typeName&lt;/th&gt;&lt;th &gt;value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;colgroup&gt;&lt;col class="key"&gt;&lt;/col&gt;&lt;col class="typeName"&gt;&lt;/col&gt;&lt;col class="value"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tr class="odd" &gt;&lt;td &gt;info&lt;/td&gt;&lt;td class="array"&gt;array[1]&lt;/td&gt;&lt;td class="array"&gt;&lt;div class="panel"&gt;  &lt;h6 class="object"&gt;info (array[1])&lt;/h6&gt;&lt;div class="content"&gt;&lt;table class="view_array array"&gt;&lt;thead&gt;&lt;tr &gt;&lt;th &gt;key&lt;/th&gt;&lt;th &gt;typeName&lt;/th&gt;&lt;th &gt;value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;colgroup&gt;&lt;col class="key"&gt;&lt;/col&gt;&lt;col class="typeName"&gt;&lt;/col&gt;&lt;col class="value"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tr class="odd" &gt;&lt;td &gt;position&lt;/td&gt;&lt;td class="string"&gt;string(5)&lt;/td&gt;&lt;td class="string overflow"&gt;fixed&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;someHTML&lt;/td&gt;&lt;td class="object"&gt;htmlString&lt;/td&gt;&lt;td class="object"&gt;&lt;div class="panel"&gt;  &lt;h6 class="object"&gt;someHTML (htmlString)&lt;/h6&gt;&lt;div class="content"&gt;&lt;big&gt;Hi&lt;/big&gt;I am an &lt;span style="text-decoration: small-caps;"&gt;HTML&lt;/span&gt; string.&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="panel"&gt;  &lt;h6 class="object"&gt;TaylorProfiler (htmlString)&lt;/h6&gt;&lt;div class="content"&gt;&lt;table class="view_array"&gt;&lt;thead&gt;&lt;tr &gt;&lt;th &gt;nr&lt;/th&gt;&lt;th align="right"&gt;count&lt;/th&gt;&lt;th align="right"&gt;time, ms&lt;/th&gt;&lt;th align="right"&gt;percent&lt;/th&gt;&lt;th &gt;routine&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;colgroup&gt;&lt;col class="nr"&gt;&lt;/col&gt;&lt;col class="count"&gt;&lt;/col&gt;&lt;col class="time, ms"&gt;&lt;/col&gt;&lt;col class="percent"&gt;&lt;/col&gt;&lt;col class="routine"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tr class="odd" &gt;&lt;td &gt;1&lt;/td&gt;&lt;td align="right"&gt;1x&lt;/td&gt;&lt;td align="right"&gt;1000.20&lt;/td&gt;&lt;td align="right"&gt;99.78%&lt;/td&gt;&lt;td &gt;some_slow_function&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;2&lt;/td&gt;&lt;td align="right"&gt;0x&lt;/td&gt;&lt;td align="right"&gt;0.00&lt;/td&gt;&lt;td align="right"&gt;0.22%&lt;/td&gt;&lt;td &gt;Missed&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;3&lt;/td&gt;&lt;td align="right"&gt;1x&lt;/td&gt;&lt;td align="right"&gt;0.03&lt;/td&gt;&lt;td align="right"&gt;0.00%&lt;/td&gt;&lt;td &gt;unprofiled&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even footer"&gt;&lt;td &gt;&lt;/td&gt;&lt;td align="right"&gt;&lt;/td&gt;&lt;td align="right"&gt;1002.40&lt;/td&gt;&lt;td align="right"&gt;100.22%&lt;/td&gt;&lt;td &gt;OVERALL TIME&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="panel"&gt;  &lt;h6 class="object"&gt;Server Stat (htmlString)&lt;/h6&gt;&lt;div class="content"&gt;&lt;fieldset&gt;&lt;legend&gt;PHP Info&lt;/legend&gt;&lt;table width="100%"&gt;&lt;thead&gt;&lt;tr &gt;&lt;th &gt;&lt;/th&gt;&lt;th &gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;colgroup&gt;&lt;col class="param"&gt;&lt;/col&gt;&lt;col class="value"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tr class="odd" &gt;&lt;td &gt;Server&lt;/td&gt;&lt;td &gt;localhost&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;PHP&lt;/td&gt;&lt;td &gt;5.2.8&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;Server time&lt;/td&gt;&lt;td &gt;16:27:50&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;memory_limit&lt;/td&gt;&lt;td &gt;262144.000 Kb&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;Mem. used&lt;/td&gt;&lt;td &gt;931.320 Kb&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;Mem. used %&lt;/td&gt;&lt;td style="width: 100px; background: no-repeat url(bar.php?rating=0.35527050495148);"&gt;0.355%&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;Mem. peak&lt;/td&gt;&lt;td &gt;931.781 Kb&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;Sess. size&lt;/td&gt;&lt;td &gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/fieldset&gt;&lt;fieldset&gt;&lt;legend&gt;Server Info&lt;/legend&gt;&lt;div id="div_SystemInfo"&gt;&lt;table width="100%"&gt;&lt;thead&gt;&lt;tr &gt;&lt;th &gt;&lt;/th&gt;&lt;th &gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;colgroup&gt;&lt;col class="param"&gt;&lt;/col&gt;&lt;col class="value"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tr class="odd" &gt;&lt;td &gt;Disk space&lt;/td&gt;&lt;td &gt;20480.617 Mb&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;Disk used&lt;/td&gt;&lt;td &gt;13353.773 Mb&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;Disk used %&lt;/td&gt;&lt;td style="width: 100px; background: no-repeat url(bar.php?rating=65.202006928044);"&gt;65.202%&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;CPU used %&lt;/td&gt;&lt;td style="width: 100px; background: no-repeat url(bar.php?rating=5.7356608478803);"&gt;5.736%&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;RAM&lt;/td&gt;&lt;td &gt;3955.957 Mb&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;RAM used&lt;/td&gt;&lt;td &gt;3215.152 Mb&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;RAM used %&lt;/td&gt;&lt;td style="width: 100px; background: no-repeat url(bar.php?rating=81.273692265916);"&gt;81.274%&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even" &gt;&lt;td &gt;Uptime&lt;/td&gt;&lt;td &gt;82D 01:40:55&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd" &gt;&lt;td &gt;Server load&lt;/td&gt;&lt;td &gt;0.21&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;  &lt;!--input type="checkbox" onclick="reloadServerInfo(this);" id="input_reload"&gt; &lt;label for="input_reload"&gt;Reload&lt;/label--&gt;  &lt;/fieldset&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-5593901430497671243?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/5593901430497671243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=5593901430497671243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5593901430497671243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5593901430497671243'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/11/debugpanel-web-20-way-of-printr.html' title='DebugPanel - Web 2.0 way of print_r()'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NXx0b5VtFP0/TPBA7TmQ_aI/AAAAAAAAIhk/2EhCClzjAnE/s72-c/DebugPanelScreenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-6046653433126552977</id><published>2010-11-25T13:48:00.001+01:00</published><updated>2011-02-03T00:52:13.285+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>What requests do browsers' “F5” and “Ctrl + F5” refreshes generate?</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_NXx0b5VtFP0/TO5bI9SP3qI/AAAAAAAAIhg/jjndjBCHHX0/s1600/f5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="393" src="http://4.bp.blogspot.com/_NXx0b5VtFP0/TO5bI9SP3qI/AAAAAAAAIhg/jjndjBCHHX0/s400/f5.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Source:&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate/385491#385491"&gt;http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate/385491#385491&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-6046653433126552977?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/6046653433126552977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=6046653433126552977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/6046653433126552977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/6046653433126552977'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/11/what-requests-do-browsers-f5-and-ctrl.html' title='What requests do browsers&apos; “F5” and “Ctrl + F5” refreshes generate?'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NXx0b5VtFP0/TO5bI9SP3qI/AAAAAAAAIhg/jjndjBCHHX0/s72-c/f5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-1363772493338339049</id><published>2010-11-17T17:52:00.004+01:00</published><updated>2011-02-03T00:52:13.285+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>Elastic Feedback</title><content type='html'>I wanted to learn the animation features of jQuery and made the elastic feedback effect.&lt;br /&gt;There's just a container DIV with a ball inside. The ball is made draggable, and once released it will elastically return to it's original position. The actual JavaScript code is amazingly short (thanks to the plugins).&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_NXx0b5VtFP0/TOQGK7H5z3I/AAAAAAAAIhc/JaVo04KFq_4/s1600/elasticFeedback.js.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_NXx0b5VtFP0/TOQGK7H5z3I/AAAAAAAAIhc/JaVo04KFq_4/s1600/elasticFeedback.js.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="containerBall"&gt;&lt;div id="ball"&gt;&lt;img src="http://www.usafsports.com/Images/soccer-ball.gif"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://gsgd.co.uk/sandbox/jquery/easing/jquery.easing.1.3.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;style&gt;.containerBall { margin: auto; width: 500px; height: 500px; border: solid 1px silver;}#ball { width: 50px; height: 50px; position: relative; left: 225px; /* 640 / 2 - 50 / 2 */ top: 225px; /* 480 / 2 - 50 / 2 */}#ball img { width: 50px; height: 50px;}&lt;/style&gt;&lt;br /&gt;&lt;script&gt;$(document).ready(function () { $('#ball').draggable({  containment: 'parent',  stop: function (event, ui) {   ui.helper.animate({    top: ui.originalPosition.top,    left: ui.originalPosition.left,   }, {    duration: 1000,    easing: 'easeOutElastic'   });  } });});&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-1363772493338339049?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/1363772493338339049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=1363772493338339049' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/1363772493338339049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/1363772493338339049'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/11/elastic-feedback.html' title='Elastic Feedback'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NXx0b5VtFP0/TOQGK7H5z3I/AAAAAAAAIhc/JaVo04KFq_4/s72-c/elasticFeedback.js.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-610590025494348851</id><published>2010-11-03T18:22:00.001+01:00</published><updated>2011-02-03T00:52:54.481+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prius'/><title type='text'>Automobile Traffic Trains</title><content type='html'>Now that &lt;a href="http://www.toyota.de/cars/new_cars/prius/index.aspx"&gt;Prius III&lt;/a&gt; (they call it &lt;a href="http://www.toyota.com/prius-hybrid/"&gt;Prius 2010&lt;/a&gt; in US) and some other new cars has the &lt;a href="http://www.youtube.com/watch?v=RSXnigZaDNk"&gt;Lane Keep Assist&lt;/a&gt;&amp;nbsp;(&lt;a href="http://en.wikipedia.org/wiki/Lane_departure_warning_system"&gt;Wiki&lt;/a&gt;),&amp;nbsp;&lt;a href="http://www.youtube.com/watch?v=W-pTakVadH4&amp;amp;feature=related"&gt;Pre Collision System&lt;/a&gt; (&lt;a href="http://en.wikipedia.org/wiki/Adaptive_cruise_control"&gt;Wiki&lt;/a&gt;) and &lt;a href="http://www.youtube.com/watch?v=tjvfCoUFUNs&amp;amp;feature=channel"&gt;Dynamic Radar Cruise Control&lt;/a&gt; why not combining them into a &lt;i&gt;Active Dynamic Traffic&amp;nbsp;Follow up&amp;nbsp;System&lt;/i&gt; which would allow the driver to snore (joking) while driving as GPS navigation will know the route, LKA will keep your car straight and DRCC will make sure you follow the car in front of you?&lt;br /&gt;Many cars equipped with Active Dynamic Traffic Follow up System would be chaining to each other, switch the lanes automatically (&lt;a href="http://www.benzinsider.com/2007/09/blind-spot-assist-greater-safety-when-changing-lanes/"&gt;Blind Spot Assist&lt;/a&gt;) and get you to your destination without your effort.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.azosensors.com/images/News/NewsImage_1446.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.azosensors.com/images/News/NewsImage_1446.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This system doesn't require a lot of investment into the highway infrastructure itself, the road remains passive. It raises the safeness of the driving a lot - no risky&amp;nbsp;maneuverers, it will keep the safe distance in all circumstances and will react in a split second instead of &lt;a href="http://www.visualexpert.com/Resources/reactiontime.html"&gt;1.5 seconds human reaction time&lt;/a&gt;.&lt;br /&gt;One important thing to note: there must be a loud buzzer to wake the driver (can he be called a driver still?) when approaching the highway exit ;-).&lt;br /&gt;It doesn't seem like a lot of work to me, all the components exist already - they only need to be combined in a central car computer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-610590025494348851?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/610590025494348851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=610590025494348851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/610590025494348851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/610590025494348851'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/11/automobile-traffic-trains.html' title='Automobile Traffic Trains'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-3190008388567731256</id><published>2010-10-14T18:39:00.001+02:00</published><updated>2011-02-03T00:52:13.285+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>FloatBox (floating effect for &lt;div&gt; using CSS3 box-shadow)</title><content type='html'>I've been bored at the &lt;a href="http://phpconference.com/"&gt;IPC10&lt;/a&gt; so I've been playing around a bit and made a hovering floating box effect in JavaScript. This thing is dynamic so the screenshot is not so useful.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_NXx0b5VtFP0/TLcuuCui6HI/AAAAAAAAIg8/hnP_hAL1Cnc/s1600/floatBox.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="151" src="http://2.bp.blogspot.com/_NXx0b5VtFP0/TLcuuCui6HI/AAAAAAAAIg8/hnP_hAL1Cnc/s400/floatBox.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The script is using &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; and &lt;a href="http://www.bitstorm.org/jquery/shadow-animation/"&gt;Shadow animation jQuery-plugin&lt;/a&gt;. I had to fix the RegExp of the plugin to accept negative shadow offsets like this: &lt;br /&gt;&lt;blockquote&gt;(-?\+?[0-9]+)&lt;/blockquote&gt;&amp;nbsp;Download: &lt;a href="http://jump.fm/CUKDM"&gt;http://jump.fm/CUKDM&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-3190008388567731256?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/3190008388567731256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=3190008388567731256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3190008388567731256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3190008388567731256'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/10/floatbox-floating-effect-for-using-css3.html' title='FloatBox (floating effect for &amp;lt;div&amp;gt; using CSS3 box-shadow)'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NXx0b5VtFP0/TLcuuCui6HI/AAAAAAAAIg8/hnP_hAL1Cnc/s72-c/floatBox.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-4782748056525133061</id><published>2010-10-12T15:12:00.001+02:00</published><updated>2011-02-03T00:52:13.286+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>International PHP Conference from the inside</title><content type='html'>This is how &lt;a href="http://phpconference.com/"&gt;IPC&lt;/a&gt; looks like from inside:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_NXx0b5VtFP0/TLReptxVbvI/AAAAAAAAIg4/UTn19_Z4rCM/s1600/IMAGE_843.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://4.bp.blogspot.com/_NXx0b5VtFP0/TLReptxVbvI/AAAAAAAAIg4/UTn19_Z4rCM/s400/IMAGE_843.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-4782748056525133061?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/4782748056525133061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=4782748056525133061' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/4782748056525133061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/4782748056525133061'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/10/international-php-conference-from.html' title='International PHP Conference from the inside'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NXx0b5VtFP0/TLReptxVbvI/AAAAAAAAIg4/UTn19_Z4rCM/s72-c/IMAGE_843.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-204819555895317995</id><published>2010-10-08T18:16:00.000+02:00</published><updated>2010-10-08T18:16:23.503+02:00</updated><title type='text'>Alien rods invasion 2010 (skyfish, solar entities)</title><content type='html'>&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/bZp7Vd1-7nY?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/bZp7Vd1-7nY?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-204819555895317995?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/204819555895317995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=204819555895317995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/204819555895317995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/204819555895317995'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/10/alien-rods-invasion-2010-skyfish-solar.html' title='Alien rods invasion 2010 (skyfish, solar entities)'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-8358776337330532742</id><published>2010-10-08T16:58:00.000+02:00</published><updated>2010-10-08T16:58:23.351+02:00</updated><title type='text'>Repost from the Get Rich Blog: There are two types of people. Those who strive and those who don’t.</title><content type='html'>There are two types of people. Those who strive and those who don’t.&lt;br /&gt;&lt;br /&gt;You should know the normal people. They go to their work, get their salary, meet with friends, drink beer and even watch TV. They even save some money for a vacation or hobbies but don’t have a Goal (capital G). They may have a goal to get better house, car, postcards collection…, but it’s not something they think of every minute. They just live with auto-pilot turned on. I don’t mean they are bad in any way, but they are not doing what other type of people do.&lt;br /&gt;&lt;br /&gt;The striving people are not satisfied. They eager to change their life. While most of them eager for money, some eager for peace in the world or personal spiritual development. Those people understand that watching TV is not only killing time. They understand that working for some guy is like a permitted slavery. They understand what means to be independent - you can do what you want (legally), regardless of how much money you have or what your boss thinks (they don’t have a boss) or what their neighbours think.&lt;br /&gt;&lt;br /&gt;I’ll try to estimate the ratio between those types of people. On average a company has 1000 employees (who knows more exactly?). So there is just one striving person in a thousand. It is likely the boss of the company (if he made the company from the scratch). Sometimes there’s noone.&lt;br /&gt;&lt;br /&gt;There are also those who are in the middle. They understand (like striving people) but are not yet on the way to their Goal.&lt;br /&gt;&lt;br /&gt;What kind of person are you?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-8358776337330532742?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/8358776337330532742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=8358776337330532742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/8358776337330532742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/8358776337330532742'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/10/repost-from-get-rich-blog-there-are-two.html' title='Repost from the Get Rich Blog: There are two types of people. Those who strive and those who don’t.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-3664329173052536620</id><published>2010-10-08T16:56:00.002+02:00</published><updated>2011-06-01T00:31:19.663+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prius'/><title type='text'>Repost of the GPS navigation software ideas I had in 2007</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;h1&gt;&lt;span lang="EN-US"&gt;About&lt;/span&gt;&lt;/h1&gt;&lt;div class="bodytext"&gt;This site is about a new PDA GPS navigation system called we-go. Why having another when there are already a lot? Read on... &lt;/div&gt;&lt;h1&gt;&lt;span lang="EN-US"&gt;Disadvantages of the existing navigation software&lt;/span&gt;&lt;/h1&gt;&lt;div class="bodytext"&gt;I started working on we-go because the existing software didn’t satisfy my needs:&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;They cost money&lt;/span&gt;&lt;/li&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Their user      interface is far from being user friendly&lt;/span&gt;&lt;/li&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;They are mostly      2D even when they display it on the pseudo-3D perspective&lt;/span&gt;&lt;/li&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;The maps get      rarely updated&lt;/span&gt;&lt;/li&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;No way to use      bitmap maps (aerial map of the region - &lt;a href="http://maps.google.com/" target="_blank"&gt;Google Maps&lt;/a&gt;) or if there is one,      then the combination of vector and bitmap data on the same screen is not      possible.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;&lt;span lang="EN-US"&gt;Key features of we-go&lt;/span&gt;&lt;/h1&gt;&lt;div class="bodytext"&gt;I think navigation software can be much better:&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;It should be      free&lt;/span&gt;&lt;/li&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Maps should be      updated as frequently as possible&lt;/span&gt;&lt;/li&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;3D view is not      a cool feature; it’s a visual aid for navigation.       Think of a highway intersection where there can be even more than  three      lanes over each other. See how it’s displayed in pseudo-3D  compared to the      real 3D view.&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;User      interface should be skin-able&lt;/span&gt;&lt;span lang="EN-US"&gt; to allow for customizing the      user interface for each individual user.&lt;/span&gt;&lt;span lang="EN-US"&gt;      &lt;/span&gt;&lt;span lang="EN-US"&gt;T&lt;/span&gt;&lt;span lang="EN-US"&gt;his  is the most important for navigation software      because it’s used  during the intensive traffic and the time necessary to      perform an  operation should be minimized&lt;/span&gt;&lt;span lang="EN-US"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Bitmap maps      like those found in &lt;a href="http://maps.google.com/" target="_blank"&gt;Google Maps&lt;/a&gt;      could be layered over for even greater navigation hints.&lt;/span&gt;&lt;/li&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;A       desktop version of the program with all the features of the PDA  version      should be available (.NET can help with it) for managing  the data, route      pre-planning and transfer of the collected GPS data  (see next topic) to      the server.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;&lt;span lang="EN-US"&gt;&lt;a name='more'&gt;&lt;/a&gt;Handicaps to jump over&lt;/span&gt;&lt;/h1&gt;&lt;div class="bodytext"&gt;The software itself is not enough to fulfill all the  tasks of navigation. The data of different kind are as crucial as the  software itself. Here are ideas where to get the missing data from:&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Maps. Usually      maps are bought from &lt;a href="http://www.teleatlas.com/" target="_blank"&gt;Tele Atlas&lt;/a&gt; or      &lt;a href="http://www.navteq.com/" target="_blank"&gt;NAVTEQ&lt;/a&gt;. Buying maps from them would      not only violate the free software principal of we-go, but would not give large enough data updat&lt;/span&gt;&lt;span lang="EN-US"&gt;e&lt;/span&gt;&lt;span lang="EN-US"&gt; rate&lt;/span&gt;&lt;span lang="EN-US"&gt;.  In the case of we-go the data for the      roads will come from the  users driving on them. That’s not unique way to      gather the road  information, but that’s unique that everybody is      contributing to  the system not only the special teams of cartography      trucks. This  solution gives the cheapness of the maps together with the      most  frequent updates to the maps as possible. And I don’t need to pay for       it. &lt;/span&gt;&lt;span lang="EN-US"&gt;J&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;As  a side effect, collecting data of GPS positions of many cars allows us       to find out the traffic lights rules: duration of each color, the  ordering      of green color switches on the same intersection. &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Height maps can      be obtained from &lt;a href="http://edc.usgs.gov/products/elevation/gtopo30/gtopo30.html" target="_blank"&gt;USGS      GTOPO30&lt;/a&gt;. The resolution is about 1km, the missing details to be      covered by collecting GPS data from end users.      (Yes, GPS supplies you with the height from the see level information as      well.)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Bitmap      maps can be downloaded from different sources including but not      exclusively from &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://maps.google.com/" target="_blank"&gt;Google      Maps&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;. Downloading from &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://maps.google.com/" target="_blank"&gt;Google Maps&lt;/a&gt; &lt;/span&gt;&lt;span lang="EN-US"&gt;can       be online for users with internet in the car or offline - using  the desktop      version to retrieve the maps for the selected area or  route.&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Collecting  map      by driving and recording the GPS data is not enough to know  the street      names and house numbers. There is got to be a way of  specifying this      information by users (if they want and can). So in  the beginning we-go would      not have any addresses available. And  that’s the point: we will build the      database of addresses unrelated  to any authorities and regardless of any      borders.&lt;/span&gt;&lt;/li&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;There      is a small relief as there is an open database of German city names and      postcodes related to GPS coordinates at &lt;a href="http://opengeodb.hoppe-media.com/index.php?FrontPage_en" target="_blank"&gt;OpenGeoDB&lt;/a&gt;.       This would be the first possible way of navigating where there is  no      street information collected. Similar databases can be available  or      obtained for other countries.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;&lt;span lang="EN-US"&gt;Code structure&lt;/span&gt;&lt;/h1&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;I  imagine that      the data for the final rendered picture should come  asynchronously. This      means that in the situation when CPU is busy  with something, graphical      engine may not have the height map  information and would need to display      the view in preudo-3D, but in  the same time it ensures that the frame rate      will not drop and the  navigation will be interrupted leaving the user      helpless as where  to drive. In the current navigation systems this effect      is  especially annoying as the device tends to react sluggish especially on       complicated intersections where navigation help is especially  important.      Another example could be missing road names or not yet  loaded far roads      which will be needed only later and not now. It  also has a win on the      startup time, as only little amount of data  has to be loaded before the actual      navigation starts.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Currently  the      calculated route is defined once during route calculation and  is only      changed when the driver drives off the route. I would like  to have we-go telling      me on each crossing that there is another way  which is maybe just 30      seconds (estimated) longer, but in my  current road conditions will be      preferable because of the traffic  jam or just because this road has been      driven by me too often and  got boring.&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;In  relation      with previous item we-go could detect that driving 5km/h  or stopping on      the highway means the traffic jam and would suggest  the detour without      being asked to do so. In other words it should  be active and proactive.&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;I imagine      having 3D navigation window with the following layers (only some of them      may be available at the time):&lt;/span&gt;&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="circle"&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;3D       rough surface&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;3D       detailed surface (may not cover the whole globe)&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Vector       roads&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Vector       road names&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Semitransparent       aerial bitmap of the area&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Preplanned       route&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Alternative       routes with information how much slower they are (e.g.: +3:15 min, -1.2       km)&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Car       position&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Actual       GPS position (dot like in i-go)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;On  top of the 3D      view there can be several layers of 2D information  and buttons (configurable      with INI-file, BTW INI-file should be  watched for changes, so that changes      can be previewed without  time-consuming restarting of the program). Simple      information can  be shown opaque near to the border:&lt;/span&gt;&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="circle"&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Time,       date&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Current       speed&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Current       GPS location (less important)&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Maximum       speed on that road&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Destination       (I sometimes find myself following my navigation software with old or       incorrect destination set)&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Time       to destination&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Distance       to destination&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;GPS       reception strength&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Compass&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Battery       indicator&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Next       turn or action (e.g.: turn left or enter the highway)&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Time       to the next turn or action&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Distance       to the next turn or action&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Clicking  at      upper right corner should minimize the software immediately  (many PDAs are      equipped with the cellular-phone or user needs to  react on the event      notification)&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Clicking       anywhere else should bring the semi-transparent (!!! it allows to  continue      navigation even when buttons are visible)  user-configurable set of mostly      frequently used buttons like:&lt;/span&gt;&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="circle"&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Cancel       route&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Turn       off sound&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Start       navigating somewhere else&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Enlarge/reduce       the zoom (I prefer to use hardware buttons for this)&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Etc.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;BTW,  regarding      finding the navigation target: I think it’s worth having  general input      field for finding whether city, street name, POI  name without specifying precisely      what is it you are typing. This  allows finding faster what you are looking      for by typing first  several letters of the name without clicking on the      country, typing  the city, typing the street or POI name only after that.&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;The  list of      suggested destinations should not be sorted  alphabetically, but should be      sorted by the frequency this item was  searched by specific user or all      users (remember the global  database) and size of the city. For example      typing simply "f"  should first show me Frankfurt am Main instead      of hundreds of  smaller villages (think of &lt;a href="http://www.google.com/webhp?complete=1&amp;amp;hl=en" target="_blank"&gt;Google Suggest&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt;&lt;span lang="EN-US"&gt;Technical details&lt;/span&gt;&lt;/h1&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;The code should      be written in .NET&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;The  code should      be shared between PC and PDA versions as much as  possible (I can imagine      that showing 3D display window can be much  different on the PC and on PDA)&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;The asynchronous      data delivery classes should be named “suppliers”.&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;All  data should      be stored in a database. I don’t want to invent the  new file formats and      write reader and writer classes for them. I  know MS Access API exists      already for .NET, but sqlite could be a  faster solution, which, although,      requires native code.&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Having  database      for everything really solves a lot of problems with data  access      methodology and speed (I suppose SQL-database is already  optimized a lot      for quick data access). This seamlessly allows for  easy new data storage.&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;We  can use MySQL      as free database for the huge online database of  everything. Route analyzer-spider      would crawl every submitted road  from users to fill the gaps in the      existing vector maps and  detailed height maps.&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Once  connection      to the server is possible we-go would submit all  collected raw GPS data to      the server and download updated road  information, height-map information, road      names and whatever else  gets updated. Having local database for storing      the data simplifies  finding out what has changed a lot as well as requires      much less  data to be transferred between the server and the client (it      will  not download the complete map of the changed city but really only the       roads and POI that had changed or added).&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;I  think of      having single version of we-go with all debugging  functionality always      enabled, but it is simply not visible for the  users who just started using      a system. It should be easily  available if users want to get deeper into      we-go.&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #00000a; line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Commercial license      should be available for companies willing to pre-install we-go on their      hardware.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;I       am looking for sponsors and donations as we-go doesn’t yet allow  me to      feed from itself. My fulltime dedication to the project would  boost the      speed of development a lot.&lt;/span&gt;&lt;/li&gt;&lt;li style="line-height: 12pt;"&gt;&lt;span lang="EN-US"&gt;Community      support is the question of life-and-death for we-go.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-3664329173052536620?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/3664329173052536620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=3664329173052536620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3664329173052536620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3664329173052536620'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/10/repost-of-gps-navigation-software-ideas.html' title='Repost of the GPS navigation software ideas I had in 2007'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-3534085805724027739</id><published>2010-09-21T16:56:00.002+02:00</published><updated>2011-06-17T12:27:16.891+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>Displaying data from myTinyTodo somewhere else</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;For my project bug tracking I use &lt;a href="http://www.mytinytodo.net/"&gt;myTinyTodo&lt;/a&gt;. One day I decided that it would be nice to show my todo list to the beta users of my project. So here's a simple class which is doing the job.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;/**&lt;br /&gt;&amp;nbsp;* Class to read data from http://www.mytinytodo.net/ and display it somewhere else (as a part of your own application).&lt;br /&gt;&amp;nbsp;* Allows to integrate your todo list into some other web-site.&lt;br /&gt;&amp;nbsp;* You only need to comment line 68 in todo/ajax.php "exit;" for this class to work. THIS IS IMPORTANT!&lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;* © 2010 spidgorny@gmail.com&lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;class Todo {&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // structure: array('total' =&amp;gt; 15, 'list' =&amp;gt; array(...));&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected $tasks = array();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // the data will be stored here&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* We imitate an AJAX request for the data and grab it with ob_get_clean().&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* Then we decode JSON data and voilà!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function __construct($tab = 1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $_GET['loadTasks'] = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $_GET['list'] = $tab;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // which tab to display&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $_GET['compl'] = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $_GET['sort'] = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $_GET['tz'] = 120;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $_GET['rnd'] = rand();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //debug($_GET);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ob_start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; require_once('todo/init.php');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $GLOBALS['lang'] = Lang::instance();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; require_once('todo/ajax.php');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $json = ob_get_clean();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $this-&amp;gt;tasks = json_decode($json, TRUE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //debug($this-&amp;gt;tasks);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Download: &lt;a href="http://pastebin.com/FgQNapF3"&gt;http://pastebin.com/FgQNapF3&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-3534085805724027739?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/3534085805724027739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=3534085805724027739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3534085805724027739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3534085805724027739'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/09/displaying-data-from-mytinytodo.html' title='Displaying data from myTinyTodo somewhere else'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-7500332305375089262</id><published>2010-09-20T17:26:00.003+02:00</published><updated>2011-02-03T00:52:54.482+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prius'/><title type='text'>Three Prius Tricks</title><content type='html'>I'm am an owner of European Prius II (2006) and want to share some tips which I find useful, but which took me some time to grasp.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;You can go as fast as 182 km/h on Prius if you step on the accelerator (driving at 180) and then the road starts going downhill. It takes the system several seconds to adjust to reduced necessary torque and until then it keeps accelerating as if you're going up-hill leading to 182 (I did this several times already).&lt;br /&gt;You can get 181 km/h on the plain road by stepping on the accelerator, but that's not as interesting.&lt;/li&gt;&lt;li&gt;Don't use "B" mode to regenerate more energy (I was doing it on every traffic light for half a year because of many contradicting posts in the forums). Read &lt;a href="http://www.techno-fandom.org/%7Ehobbit/cars/b-mode.html"&gt;this&lt;/a&gt; and apply brakes gently to regenerate more. Use "B" mode only when going down-hill (that's the rare case when you should follow the manual and you will do it right).&lt;/li&gt;&lt;li&gt;If you don't like &lt;a href="http://ffh.squarespace.com/blog/2009/7/8/the-myth-of-pulse-and-glide.html"&gt;Pulse&amp;amp;Glide&lt;/a&gt; technique then at least use Glide mode to reduce the breaking force when approaching a distant red light.&lt;/li&gt;&lt;li&gt;&lt;a href="http://ffh.squarespace.com/blog/2010/2/26/navigation-without-gps.html"&gt;Navigation without GPS&lt;/a&gt; applies to Prius II as well! I noticed it in the underground parking and the system information screen has some kind of bearing information (displayed in degrees) which, combined with distance traveled, can replace GPS for some short distances.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_NXx0b5VtFP0/TJxgJPEOTUI/AAAAAAAAIg0/hxlJvYwnJsM/s1600/IMAGE_792.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://3.bp.blogspot.com/_NXx0b5VtFP0/TJxgJPEOTUI/AAAAAAAAIg0/hxlJvYwnJsM/s400/IMAGE_792.jpg" width="400" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;How to get to the system information screen in Prius II - get to the display screen and follow the instructions &lt;a href="http://www.bobrichardson.com/prius_voice_problems.html"&gt;here&lt;/a&gt; (it's not on the Navigation Voice screen, at least not in Prius II).&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-7500332305375089262?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/7500332305375089262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=7500332305375089262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/7500332305375089262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/7500332305375089262'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/09/three-prius-tricks.html' title='Three Prius Tricks'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NXx0b5VtFP0/TJxgJPEOTUI/AAAAAAAAIg0/hxlJvYwnJsM/s72-c/IMAGE_792.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-1935228157681961968</id><published>2010-09-20T16:48:00.001+02:00</published><updated>2011-06-17T12:28:42.028+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>array_merge() vs array concatenation and array_merge_recursive_overwrite()</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I never seem to remember all the differences and aspects of the &lt;a href="http://php.net/manual/en/function.array-merge.php"&gt;array_merge()&lt;/a&gt; function and &lt;a href="http://www.php.net/manual/en/language.operators.array.php"&gt;array concatenation&lt;/a&gt; (not even documented thoroughly). On top there is this &lt;a href="http://www.php.net/manual/en/function.array-merge-recursive.php"&gt;array_merge_recursive()&lt;/a&gt; which behaves like array_merge() though.&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;To start with I’ll say that array() + array() (called array concatenation) is in general NOT the same as array_merge(). It may behave in the same way if your arrays have all keys different. In this case you get both function and operator return the same result:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_NXx0b5VtFP0/TJdzTwmPyMI/AAAAAAAAIgU/0R8uOAmZJjw/s1600/s1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_NXx0b5VtFP0/TJdzTwmPyMI/AAAAAAAAIgU/0R8uOAmZJjw/s320/s1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Next step: the function and the operator differ in the way they process numeric indexes as opposed to string keys. &lt;/div&gt;&lt;div class="MsoNormal"&gt;For numeric indexes:&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;operator + is appending new numeric indexes to the end of array 1, but keeps the newly added indexes intact.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;array_merge() is appending second array values and reindexing all indexes starting from 0.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;both will NOT overwrite the values in array 1 with values of array 2. &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_NXx0b5VtFP0/TJdzknpdudI/AAAAAAAAIgc/M8AomWeYbXA/s1600/s2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_NXx0b5VtFP0/TJdzknpdudI/AAAAAAAAIgc/M8AomWeYbXA/s320/s2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in; text-indent: 0in;"&gt;For string indexes:&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;operator + is NOT overwriting the values&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;array_merge() is &lt;b&gt;overwriting&lt;/b&gt;. &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_NXx0b5VtFP0/TJdzpE1YkvI/AAAAAAAAIgk/-0ZqWWCZkgs/s1600/s3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_NXx0b5VtFP0/TJdzpE1YkvI/AAAAAAAAIgk/-0ZqWWCZkgs/s320/s3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;both will not reindex string keys (this makes no sense, really).&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;array_merge_recursive() is doing something unprecedented and undocumented though. For a value with the same key it’s making a sub-array with both values combined.&amp;nbsp; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_NXx0b5VtFP0/TJdzuVNRlPI/AAAAAAAAIgs/W2BcM_eNIHM/s1600/s4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_NXx0b5VtFP0/TJdzuVNRlPI/AAAAAAAAIgs/W2BcM_eNIHM/s320/s4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;That’s why people create such an amount of custom merge functions like&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span class="comment"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="comment"&gt;&lt;span style="font-family: 'Courier New';"&gt;array_merge_recursive_distinct&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span class="html"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="font-family: 'Courier New';"&gt;array_merge_recursive_leftsource&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span class="default"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="default"&gt;&lt;span style="font-family: 'Courier New';"&gt;array_merge_recursive_unique&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span class="html"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="font-family: 'Courier New';"&gt;array_merge_recursive_keys&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span class="default"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="default"&gt;&lt;span style="font-family: 'Courier New';"&gt;array_merge_recursive_keep_keys&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span class="default"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="default"&gt;&lt;span style="font-family: 'Courier New';"&gt;array_merge_recursive2&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span class="html"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="font-family: 'Courier New';"&gt;array_merge_replace&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span class="html"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="html"&gt;&lt;span style="font-family: 'Courier New';"&gt;array_merge_n&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span class="default"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="default"&gt;&lt;span style="font-family: 'Courier New';"&gt;array_merge_2&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span class="default"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="default"&gt;&lt;span style="font-family: 'Courier New';"&gt;array_merge_replace_recursive&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: inherit;"&gt;&lt;span class="default"&gt;all of which are described in the comments to &lt;a href="http://www.php.net/manual/en/function.array-merge-recursive.php"&gt;http://www.php.net/manual/en/function.array-merge-recursive.php&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in; text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in; text-indent: 0in;"&gt;As you see the choice of the way to combine arrays is not so trivial. I’ve tried to summarize the data into the following table.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in; text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border: 1pt solid windowtext; padding: 0in 5.4pt; width: 128pt;" valign="top" width="171"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;b&gt;Operation/Function&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: windowtext windowtext windowtext -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 81.35pt;" valign="top" width="108"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;b&gt;Source Data&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: windowtext windowtext windowtext -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 73pt;" valign="top" width="97"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;b&gt;Overwrite?&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: windowtext windowtext windowtext -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 62.3pt;" valign="top" width="83"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;b&gt;Reindex?&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: windowtext windowtext windowtext -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 71.9pt;" valign="top" width="96"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;b&gt;Recursive?&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: windowtext windowtext windowtext -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 66.7pt;" valign="top" width="89"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;b&gt;Compares&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: windowtext windowtext windowtext -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 75.85pt;" valign="top" width="101"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;b&gt;KeysOrder?&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 128pt;" valign="top" width="171"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;array() + array()&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 81.35pt;" valign="top" width="108"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Numeric&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 73pt;" valign="top" width="97"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;NO&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 62.3pt;" valign="top" width="83"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;No&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 71.9pt;" valign="top" width="96"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Yes&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 66.7pt;" valign="top" width="89"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Keys!&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 75.85pt;" valign="top" width="101"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;important&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 128pt;" valign="top" width="171"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;array() + array()&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 81.35pt;" valign="top" width="108"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Associative&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 73pt;" valign="top" width="97"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;NO&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 62.3pt;" valign="top" width="83"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;No&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 71.9pt;" valign="top" width="96"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Yes&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 66.7pt;" valign="top" width="89"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Keys!&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 75.85pt;" valign="top" width="101"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;important&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 128pt;" valign="top" width="171"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;array_merge(a, a)&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 81.35pt;" valign="top" width="108"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Numeric&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 73pt;" valign="top" width="97"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;NO!!!&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 62.3pt;" valign="top" width="83"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;YES&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 71.9pt;" valign="top" width="96"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;No, ?&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 66.7pt;" valign="top" width="89"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Values!&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 75.85pt;" valign="top" width="101"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 128pt;" valign="top" width="171"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;array_merge(a, a)&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 81.35pt;" valign="top" width="108"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Associative&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 73pt;" valign="top" width="97"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Yes&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 62.3pt;" valign="top" width="83"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;NO&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 71.9pt;" valign="top" width="96"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;No, ?&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 66.7pt;" valign="top" width="89"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Values!&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 75.85pt;" valign="top" width="101"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 128pt;" valign="top" width="171"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;array_merge_recursive&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 81.35pt;" valign="top" width="108"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Numeric&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 73pt;" valign="top" width="97"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 62.3pt;" valign="top" width="83"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 71.9pt;" valign="top" width="96"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 66.7pt;" valign="top" width="89"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 75.85pt;" valign="top" width="101"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 128pt;" valign="top" width="171"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;array_merge_recursive&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(230, 230, 230); border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 81.35pt;" valign="top" width="108"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;Associative&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 73pt;" valign="top" width="97"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 62.3pt;" valign="top" width="83"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 71.9pt;" valign="top" width="96"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 66.7pt;" valign="top" width="89"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 75.85pt;" valign="top" width="101"&gt;&lt;div class="MsoNormal" style="text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in; text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in; text-indent: 0in;"&gt;This was much to hard for me to remember so I’ve made a function which serves most of my purposes and behaves consistently and conveniently:&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;it preserves keys both indexes and string keys (no-reindexing)&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;it overwrites values from array1 with values of array2 provided they have the same keys&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;it works recursively as much as it can, but doesn’t create sub-arrays when source values are not arrays&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;pretty simple and straightforward it is (probably too simple to be built-in into PHP).&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in; text-indent: 0in;"&gt;Enjoy:&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in; text-indent: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;function array_merge_recursive_overwrite($ar1, $ar2) {&lt;/span&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!is_array($ar1)) {&lt;/span&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ar1 = $ar2;&lt;/span&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (!is_array($ar2)) {&lt;/span&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //return $ar1;&lt;/span&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/span&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($ar2 as $key2 =&amp;gt; $val2) {&lt;/span&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $subindex = isset($ar1[$key2]) ? $ar1[$key2] : NULL;&lt;/span&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ar1[$key2] = array2::array_merge_recursive_overwrite($subindex, $val2);&lt;/span&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $ar1;&lt;/span&gt;&lt;/div&gt;&lt;div align="left" class="code" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-1935228157681961968?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/1935228157681961968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=1935228157681961968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/1935228157681961968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/1935228157681961968'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/09/arraymerge-vs-array-concatenation-and.html' title='array_merge() vs array concatenation and array_merge_recursive_overwrite()'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NXx0b5VtFP0/TJdzTwmPyMI/AAAAAAAAIgU/0R8uOAmZJjw/s72-c/s1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-7271919473991904921</id><published>2010-07-30T14:42:00.002+02:00</published><updated>2011-06-17T12:29:19.957+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prius'/><title type='text'>Car of the nearest future</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Recently I've been driving some couple of thousands km in a couple of days (&lt;a href="http://maps.google.de/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=Frankfurt&amp;amp;daddr=Zadar,+Croatia+to:Scalea+to:Frankfurt&amp;amp;geocode=FRik_AIdOnSEACnFlnBHbwm9RzEAxrApUEMiBA%3BFb4joQIdF2DoACmPuMDSYvphRzGEB_QTHD4yEg%3BFXKFXwIdRvPwACmXG970Eh4_EzHQIeJOrpULBA%3BFRik_AIdOnSEACnFlnBHbwm9RzEAxrApUEMiBA&amp;amp;hl=en&amp;amp;mra=ls&amp;amp;sll=44.96309,11.72357&amp;amp;sspn=22.600986,14.699707&amp;amp;ie=UTF8&amp;amp;z=6"&gt;from Frankfurt to Zadar to Scalea to Frankfurt&lt;/a&gt;) and you might know that 37 hours driving can be very boring. It's during this long boring time I was dreaming of what my car could become in the near future.&lt;br /&gt;&lt;br /&gt;Here are my dreams listed in no particular order. Now that own Prius II and like it, I've taken Prius III as a base (pretty advanced vehicle, BTW) and thought of some extra features.&lt;br /&gt;&lt;br /&gt;A couple of futuristic features which make Prius III a good base candidate for “the car of the future”:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It has a “&lt;a href="http://www.youtube.com/watch?v=bB5nuy-1Eiw"&gt;Lane Assist&lt;/a&gt;” feature keeping you in the middle of the lane.&lt;/li&gt;&lt;li&gt;It has a “&lt;a href="http://www.youtube.com/watch?v=CCu6jtlaZ2Q"&gt;Smart Key&lt;/a&gt;” feature allowing you to open and close the car without touching you car keys. &lt;/li&gt;&lt;li&gt;It has a “&lt;a href="http://www.youtube.com/watch?v=CCu6jtlaZ2Q"&gt;Pre Collision System&lt;/a&gt;” which applies brakes when you’re about to crash into something. &lt;/li&gt;&lt;li&gt;An “&lt;a href="http://www.youtube.com/watch?v=2eng94_flJw"&gt;Intelligent Parking Assist&lt;/a&gt;” which can park the car in the relatively narrow space automatically.&lt;/li&gt;&lt;li&gt;“Head-Up Display” like in the Jet Fighters.&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.toyota.com.au/TWR/content/static/65255.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://www.toyota.com.au/TWR/content/static/65255.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Now my extension requests:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hey Toyota, get a softer arm rests both on the door and in the middle arm rest. My elbows got hurt and I had to put towels to soften it. This is my priority #1, but maybe it's fixed in Prius III though.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The fuel indicator could be more sensitive and show the fuel level in percents instead of 1/10 of the tank.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Get some way of smelling diesel and stop fuelling with wrong type of fuel (yes, it happened to me).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Even the stupidest of cars shows how many km you can go with the fuel rests that you have.&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://content.scout24.ch/CmsImages/8675.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="210" src="http://content.scout24.ch/CmsImages/8675.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;Update: Prius III has it  &lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_NXx0b5VtFP0/TFLHVvjNdUI/AAAAAAAAIXk/wl3lBahJc34/s1600/distance2E.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="51" src="http://4.bp.blogspot.com/_NXx0b5VtFP0/TFLHVvjNdUI/AAAAAAAAIXk/wl3lBahJc34/s200/distance2E.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;The vehicle could notice the low fuel level and automatically search for the next fuel station along the route, add it as via point and inform the driver whether it's the last chance or he can go further to the next fuel station still.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Automatic tire pressure detection and pumping (there was a post apocalyptic movie with such feature about 20 years ago).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Or even better use the &lt;a href="http://en.wikipedia.org/wiki/Tweel"&gt;Tweel&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.myhonestmechanic.com/uploads/tweel1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://www.myhonestmechanic.com/uploads/tweel1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The current windshield can be made into a large semi-transparent LCD display able to show additional information about the objects visible to the driver. It could show the speed of the cars in front of you, detect make/brand of them, show full-screen (full-windshield) driving instructions and many other things.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_NXx0b5VtFP0/TFLIA2nYLNI/AAAAAAAAIXs/ekSWvQUKiKY/s1600/highwayView.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="289" src="http://4.bp.blogspot.com/_NXx0b5VtFP0/TFLIA2nYLNI/AAAAAAAAIXs/ekSWvQUKiKY/s640/highwayView.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It could also detect road signs (with speed limits for example) and display them in the corner of the windshield while this road sign is due (see the image above).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Install rain sensor into Prius, it exists for many years now.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.bmw.com/com/en/insights/technology/technology_guide/articles/_shared/img/rain_sensor.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="116" src="http://www.bmw.com/com/en/insights/technology/technology_guide/articles/_shared/img/rain_sensor.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Turn off the cabin and headlights (to save the battery) if the car is locked and nobody is inside (Prius has a seat-belt warning, so it’s not a big deal to detect peoples’ presence).&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_NXx0b5VtFP0/TFLIaaRFVVI/AAAAAAAAIX0/AQqVDFyota0/s1600/seatbelt.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_NXx0b5VtFP0/TFLIaaRFVVI/AAAAAAAAIX0/AQqVDFyota0/s320/seatbelt.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Allow driving in a follow-the-leader mode where I can track the car in front of me (on the Navi or on the LED-windshield) and follow it. This will allow me to catch up even if I get lost (like in GTA).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.supercheats.com/guides/files/guid/grand-theft-auto-4/rb-pursuit.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="http://www.supercheats.com/guides/files/guid/grand-theft-auto-4/rb-pursuit.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The “Select User” function should also remember the left and right mirrors orientation (similar to the feature in one of the sports cars). Ideally it should detect the driver automatically (by the weight, fingerprint reader on the On/Off button or any other means).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_NXx0b5VtFP0/TFLIrQkFvEI/AAAAAAAAIX8/kLfu1jsaTZI/s1600/powerFingerprint.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_NXx0b5VtFP0/TFLIrQkFvEI/AAAAAAAAIX8/kLfu1jsaTZI/s320/powerFingerprint.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Driving backwards could detect obstacles and brake automatically (in the case of a sudden child on the way or a dog, which is easy to overlook because of their low height).&lt;/li&gt;&lt;/ul&gt;Do you have more realistic ideas for the future car improvements? Send a comment, I’ll post best ideas in the update to this post.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-7271919473991904921?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/7271919473991904921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=7271919473991904921' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/7271919473991904921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/7271919473991904921'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/07/car-of-nearest-future.html' title='Car of the nearest future'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NXx0b5VtFP0/TFLHVvjNdUI/AAAAAAAAIXk/wl3lBahJc34/s72-c/distance2E.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-5810344801304497611</id><published>2010-06-21T12:37:00.004+02:00</published><updated>2011-06-17T12:29:52.073+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>CSS3 Full-Screen Gradient Flashlight (jQuery)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Want to share a small tech-demo which simulates a moving flashlight (spotlight) over your web-site (without using Adobe Flash). The light is following mouse cursor. Uses jQuery. See the screenshot and the corresponding code:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_NXx0b5VtFP0/TB8-7Czf6xI/AAAAAAAAIXM/y1KNDtvDUa4/s1600/flashlight.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" src="http://1.bp.blogspot.com/_NXx0b5VtFP0/TB8-7Czf6xI/AAAAAAAAIXM/y1KNDtvDUa4/s400/flashlight.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;a name='more'&gt;&lt;/a&gt;&amp;lt;html&amp;gt;&lt;br /&gt; &amp;lt;head&amp;gt;&lt;br /&gt;  &amp;lt;style&amp;gt;&lt;br /&gt;   .fl {&lt;br /&gt;    background-image: -moz-radial-gradient(center 45deg, circle closest-corner, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 255) 10%);&lt;br /&gt;       background-image: -webkit-gradient(radial, center center, 0, center center, 350, from(rgba(255, 255, 255, 0)), to(rgba(0, 0, 0, 255)));&lt;br /&gt;    width: 5000px;&lt;br /&gt;    height: 5000px;&lt;br /&gt;    position: absolute;&lt;br /&gt;   }&lt;br /&gt;  &amp;lt;/style&amp;gt;&lt;br /&gt;  &amp;lt;script type="text/javascript"&lt;br /&gt; src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;  &amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;    $(document).mousemove(function(e){&lt;br /&gt;        $("#fl").css({&lt;br /&gt;            top: (e.pageY - 2500) + "px",&lt;br /&gt;            left: (e.pageX - 2500) + "px"&lt;br /&gt;        });&lt;br /&gt;    });&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/head&amp;gt;&lt;br /&gt; &amp;lt;body style="&lt;br /&gt;  height: 100%;&lt;br /&gt;  margin: 0;&lt;br /&gt;  padding: 0;&lt;br /&gt;  background: url(http://www.onestopwebmasters.com/wp-content/uploads/2009/12/new-vista-wallpaper.jpg);&lt;br /&gt;  overflow-x: hidden;&lt;br /&gt;  "&amp;gt;&lt;br /&gt;  &amp;lt;div class="fl" id="fl"&amp;gt;&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-5810344801304497611?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/5810344801304497611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=5810344801304497611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5810344801304497611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5810344801304497611'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/06/css3-full-screen-gradient-flashlight.html' title='CSS3 Full-Screen Gradient Flashlight (jQuery)'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NXx0b5VtFP0/TB8-7Czf6xI/AAAAAAAAIXM/y1KNDtvDUa4/s72-c/flashlight.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-1722775010784823782</id><published>2010-06-18T12:23:00.006+02:00</published><updated>2011-02-03T00:52:54.482+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prius'/><title type='text'>Prius as service car in Frankfurt</title><content type='html'>I'm a fan of Prius and live in Frankfurt. Fan pictures of service-Prii (Priuses).&lt;br /&gt;Location: Alte-Oper Frankfurt.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_NXx0b5VtFP0/TBtIe8IMkJI/AAAAAAAAIWs/MVKK4G_bFfw/s1600/IMAG0316.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_NXx0b5VtFP0/TBtIe8IMkJI/AAAAAAAAIWs/MVKK4G_bFfw/s400/IMAG0316.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_NXx0b5VtFP0/TBtIgYPzO3I/AAAAAAAAIW0/Ml-RbpbOqEM/s1600/IMAG0317.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_NXx0b5VtFP0/TBtIgYPzO3I/AAAAAAAAIW0/Ml-RbpbOqEM/s400/IMAG0317.jpg" width="400" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_NXx0b5VtFP0/TBtIhOIvFaI/AAAAAAAAIW8/D5aLyJqZjiA/s1600/IMAG0318.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_NXx0b5VtFP0/TBtIhOIvFaI/AAAAAAAAIW8/D5aLyJqZjiA/s400/IMAG0318.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Location: Sandweg.&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_NXx0b5VtFP0/TBtOPt1fyyI/AAAAAAAAIXE/-YJm4e17n8Q/s1600/IMAG0193.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_NXx0b5VtFP0/TBtOPt1fyyI/AAAAAAAAIXE/-YJm4e17n8Q/s400/IMAG0193.jpg" width="240" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_NXx0b5VtFP0/TBtIhOIvFaI/AAAAAAAAIW8/D5aLyJqZjiA/s1600/IMAG0318.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-1722775010784823782?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/1722775010784823782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=1722775010784823782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/1722775010784823782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/1722775010784823782'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2010/06/prius-as-service-car-in-frankfurt.html' title='Prius as service car in Frankfurt'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NXx0b5VtFP0/TBtIe8IMkJI/AAAAAAAAIWs/MVKK4G_bFfw/s72-c/IMAG0316.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-3117086421239510335</id><published>2009-12-10T19:07:00.004+01:00</published><updated>2011-02-03T00:52:13.287+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>Extension to the bookmark JSON viewer to have collapsable folders</title><content type='html'>This is a follow-up of my previous post on "&lt;a href="http://spidgorny.blogspot.com/2009/12/parse-and-display-firefox-bookmarksjson.html"&gt;Parse and display Firefox bookmarks.json on the fly as HTML with jQuery&lt;/a&gt;". The modification allows to collapse/expand (open/close) the bookmark folders. The collapsed folders are stored in cookies, this way they persist between page views. &lt;a href="http://pastebin.ca/1709873"&gt;Download the new code&lt;/a&gt; and put it into your Firefox profile folder.&lt;br /&gt;&lt;br /&gt;I want to stress one aspect of this small "application". The whole application is done in Javascript, it requires no PHP or even the web-server at all and even the body part of the HTML is empty. The whole thing that you see is dynamically generated with Javascript. Quite a different approach to the usual web-programming.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-3117086421239510335?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/3117086421239510335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=3117086421239510335' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3117086421239510335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/3117086421239510335'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2009/12/extension-to-bookmark-json-viewer-to.html' title='Extension to the bookmark JSON viewer to have collapsable folders'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-6203746607853762058</id><published>2009-12-07T14:15:00.004+01:00</published><updated>2011-06-17T12:30:26.137+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>Parse and display Firefox bookmarks.json on the fly as HTML with jQuery</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;Abstract&lt;/b&gt;: this small HTML/JS/CSS file is parsing the bookmarks.json file located in the Firefox profile directory and displays all of your bookmarks as HTML. This file can be set at a default home page and so you can choose any of your bookmarks with less clicks.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Screenshot&lt;/b&gt;:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_NXx0b5VtFP0/Sxz--KFEEiI/AAAAAAAAFec/3eVMZq0DzDY/s1600-h/showBookmarks.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="384" src="http://3.bp.blogspot.com/_NXx0b5VtFP0/Sxz--KFEEiI/AAAAAAAAFec/3eVMZq0DzDY/s400/showBookmarks.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Note&lt;/b&gt;: This code has been programmed as an exercise to learn jQuery, but serves my own practical needs as well. The same effect (displaying bookmarks) can probably be archived by using a Firefox plugin, but I like it this way.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Usage&lt;/b&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://pastebin.com/f27581b10"&gt;Download the code&lt;/a&gt; and put it into your &lt;a href="http://support.mozilla.com/en-US/kb/Profiles#How_to_find_your_profile"&gt;Firefox profile directory&lt;/a&gt; "bookmarkbackups" subfolder.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Adjust the name of the bookmark file on line 58.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Navigate to the file like this: file:///C:/Home/Mozilla/bookmarkbackups/view.html. The exact address will be different on your computer (&lt;a href="http://support.mozilla.com/en-US/kb/Profiles#How_to_find_your_profile"&gt;how to find out&lt;/a&gt;).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Optionally &lt;a href="http://www.simplehelp.net/2006/07/02/how-to-change-your-browsers-start-page/#ff"&gt;set this URL as a default&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;Code documentation&lt;/b&gt;: the script is loading jQuery from google.com and loads the specified JSON file upon startup. Then it converts it from JSON to Javascript objects and loops through them making DIVs for folders and A HREF for bookmarks.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What's next&lt;/b&gt;: I hope this code makes an interesting reading for jQuery novices. I'm happy to receive comments and improvements to this code.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dirty PR&lt;/b&gt;: &lt;a href="http://spidgorny.blogspot.com/#links"&gt;see the links on the right&lt;/a&gt; for other sites I've made.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-6203746607853762058?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/6203746607853762058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=6203746607853762058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/6203746607853762058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/6203746607853762058'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2009/12/parse-and-display-firefox-bookmarksjson.html' title='Parse and display Firefox bookmarks.json on the fly as HTML with jQuery'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NXx0b5VtFP0/Sxz--KFEEiI/AAAAAAAAFec/3eVMZq0DzDY/s72-c/showBookmarks.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-6528945092582868862</id><published>2009-12-03T10:30:00.001+01:00</published><updated>2011-02-03T00:52:13.287+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>RIP Zend Studio 5.5.1</title><content type='html'>Although it's been several years since Zend Studio development has been ceased (the new product Zend Studio 6+ is a completely different application with just the same name), I'm still using it. And I know there are others who just can't get used to the new Exclipse IDE (&lt;a href="http://www.zend.com/forums/index.php?t=msg&amp;amp;goto=20815&amp;amp;S=f9b2ca727f9976fa0584e44e1706c159&amp;amp;srch=zend+studio+5"&gt;Can't believe zend made this&lt;/a&gt;). Here I'll describe some of the bad things in Zend Studio (not necessary bugs) and propose a list of new features (this makes no sense, I know).&lt;br /&gt;&lt;br /&gt;Problems:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hangs a lot. Especially when switching projects or using SVN, CPU usage goes to 100% (or 50% on dual-core) and you can't close it, except for killing javaw.exe.&lt;/li&gt;&lt;li&gt;No code completion for arrays:&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_NXx0b5VtFP0/Sxd99Q2u84I/AAAAAAAAFd0/UZB6fyhRmew/s1600-h/noCodeCompletion.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_NXx0b5VtFP0/Sxd99Q2u84I/AAAAAAAAFd0/UZB6fyhRmew/s320/noCodeCompletion.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Impossible features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Some nice refactoring like clicking on variable and making it a class member (with replacement suggestions from other places in the code):&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_NXx0b5VtFP0/SxeE8Aw391I/AAAAAAAAFd8/DxpfQrq3Xqc/s1600-h/refactoringSuggestion.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_NXx0b5VtFP0/SxeE8Aw391I/AAAAAAAAFd8/DxpfQrq3Xqc/s640/refactoringSuggestion.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;to be continued...&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-6528945092582868862?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/6528945092582868862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=6528945092582868862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/6528945092582868862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/6528945092582868862'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2009/12/rip-zend-studio-551.html' title='RIP Zend Studio 5.5.1'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NXx0b5VtFP0/Sxd99Q2u84I/AAAAAAAAFd0/UZB6fyhRmew/s72-c/noCodeCompletion.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-5733021972049259440</id><published>2009-08-28T23:50:00.003+02:00</published><updated>2011-02-03T00:52:13.287+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDev'/><title type='text'>Seeing all Google Analytics profiles at once</title><content type='html'>As I have several different sites to manage in Google Analytics (and more come from time to time) I wished I could have a quick overview of all the profiles under my control. I found no ready software for this hence I wrote it myself. Here you can see the first initial version. If anybody extends it, please let me know so others can download it too.&lt;br /&gt;Screenshot:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_NXx0b5VtFP0/SphQR3fwpVI/AAAAAAAAE1I/W8kuNa9nbso/s1600-h/gaChart.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_NXx0b5VtFP0/SphQR3fwpVI/AAAAAAAAE1I/W8kuNa9nbso/s400/gaChart.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Download PHP source: &lt;a href="http://upload.info/m810ommk69ea/gaChart.rar"&gt;gaChart.rar&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Installation instructions: copy the files (there's just two) to your web-server, change index.php to contain your own Google Analytics login and password (line 15) and run index.php with web-browser.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Should you like to use this, but don't have a web-server, please let me know and I will install it on my server for everybody to test.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Disclaimer: I've used the Google Analytics PHP library from &lt;a href="http://www.askaboutphp.com/tutorials/63/google-analytics-api-class-for-php.html"&gt;http://www.askaboutphp.com/tutorials/63/google-analytics-api-class-for-php.html&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-5733021972049259440?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/5733021972049259440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=5733021972049259440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5733021972049259440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/5733021972049259440'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2009/08/seeing-all-googla-analytics-profiles-at.html' title='Seeing all Google Analytics profiles at once'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NXx0b5VtFP0/SphQR3fwpVI/AAAAAAAAE1I/W8kuNa9nbso/s72-c/gaChart.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114339704495226455</id><published>2006-03-26T20:16:00.000+02:00</published><updated>2009-08-28T15:36:43.506+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Top 20 Hauses</title><content type='html'>&lt;a href="http://www.interhome.de/buchung/basket/01/59/buchung.css/719595"&gt;http://www.interhome.de/buchung/basket/01/59/buchung.css/719595&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114339704495226455?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114339704495226455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114339704495226455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114339704495226455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114339704495226455'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/top-20-hauses.html' title='Top 20 Hauses'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114338635550451279</id><published>2006-03-26T17:17:00.000+02:00</published><updated>2009-08-28T15:36:43.506+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Hausboot.</title><content type='html'>&lt;a href="http://www.wasserundland.de/"&gt;h&lt;/a&gt;&lt;a href="http://www.wasserundland.de/"&gt;ttp://www.wasserundland.de/ &lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ferien-auf-dem-wasser.de/"&gt;http://www.ferien-auf-dem-wasser.de/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114338635550451279?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114338635550451279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114338635550451279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114338635550451279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114338635550451279'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/hausboot.html' title='Hausboot.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114324430977857761</id><published>2006-03-25T00:50:00.000+01:00</published><updated>2009-08-28T15:36:43.506+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Ferienwohnungen.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.interhome.de/images/logo_ih.gif"&gt;&lt;img style="cursor: pointer; width: 320px;" src="http://www.interhome.de/images/logo_ih.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.interhome.de/index.asp?userlang=01&amp;&amp;amp;rdgo=N&amp;so=59"&gt;http://www.interhome.de/index.asp?userlang=01&amp;amp;amp;&amp;rdgo=N&amp;amp;so=59 &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114324430977857761?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114324430977857761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114324430977857761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114324430977857761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114324430977857761'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/ferienwohnungen.html' title='Ferienwohnungen.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114324402981095927</id><published>2006-03-25T00:46:00.000+01:00</published><updated>2009-08-28T15:36:43.506+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Политическая карта с названиями регионов.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.aboutromania.com/FrancePoliticalMap.gif"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.aboutromania.com/FrancePoliticalMap.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114324402981095927?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114324402981095927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114324402981095927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114324402981095927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114324402981095927'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/blog-post_114324402981095927.html' title='Политическая карта с названиями регионов.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114323366227107704</id><published>2006-03-24T21:52:00.000+01:00</published><updated>2009-08-28T15:36:43.507+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>О путешествии на катере на немецком</title><content type='html'>Вот тут еще разные подробности, как это здорово и приятно скользить по паутине французских рек на небольшом катере.&lt;br /&gt;&lt;a href="http://www.diplomatie.gouv.fr/label_france/DEUTSCH/REGION/eau/eau.html"&gt;http://www.diplomatie.gouv.fr/label_france/DEUTSCH/REGION/eau/eau.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114323366227107704?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114323366227107704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114323366227107704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114323366227107704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114323366227107704'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/blog-post_114323366227107704.html' title='О путешествии на катере на немецком'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114323180089770592</id><published>2006-03-24T21:15:00.000+01:00</published><updated>2009-08-28T15:36:43.507+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Palavas-les-Flots</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4842/2559/1600/palavas.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4842/2559/400/palavas.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.slideguide.com/bodypalavasmab32.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.slideguide.com/bodypalavasmab32.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.chezbailly.com/images/Palavas-les-Flots%20Phare.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.chezbailly.com/images/Palavas-les-Flots%20Phare.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Городок под Монпелье на море. С красивым отелем и на полуострове-косе. Вода с двух сторон. В Монпелье типа можно работать в ИТ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114323180089770592?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114323180089770592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114323180089770592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114323180089770592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114323180089770592'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/palavas-les-flots.html' title='Palavas-les-Flots'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114321236748759481</id><published>2006-03-24T15:52:00.000+01:00</published><updated>2009-08-28T15:36:43.507+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Школьные каникулы во Франции.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.education.gouv.fr/_gfx/ill_carte_france.gif"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.education.gouv.fr/_gfx/ill_carte_france.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.education.gouv.fr/prat/calendrier/calendrier.php"&gt;http://www.education.gouv.fr/prat/calendrier/calendrier.php &lt;/a&gt;&lt;br /&gt;Синяя зона: du samedi &lt;b&gt;[15-04-06] &lt;/b&gt;au mardi &lt;b&gt;[02-05-06]&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;Зеленая зона: du samedi &lt;b&gt;[22-04-06] &lt;/b&gt;au mardi &lt;b&gt;[09-05-06]&lt;br /&gt;&lt;/b&gt;Мы едем: 08-04-06 .. 18-04-06&lt;br /&gt;Перекрытия есть - в синюю зону надо ехать сначала (с 08-04-06 по 14-04-06). Придется ехать через Швейцарию. Потом по берегу с востока на запад. Возражения есть?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114321236748759481?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114321236748759481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114321236748759481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114321236748759481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114321236748759481'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/blog-post_114321236748759481.html' title='Школьные каникулы во Франции.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114321150756720678</id><published>2006-03-24T15:43:00.000+01:00</published><updated>2009-08-28T15:36:43.507+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Марине понравится...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img.turizm.ru/france/img/inna3.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://img.turizm.ru/france/img/inna3.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.turizm.ru/france/articles/p-1235.html"&gt;http://www.turizm.ru/france/articles/p-1235.html &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114321150756720678?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114321150756720678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114321150756720678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114321150756720678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114321150756720678'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/blog-post_114321150756720678.html' title='Марине понравится...'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114321118463699262</id><published>2006-03-24T15:36:00.000+01:00</published><updated>2009-08-28T15:36:43.507+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>St. Tropez</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4842/2559/1600/map3.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4842/2559/400/map3.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phonk.net/Images/St-Tropez/000524-St-Tropez.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.phonk.net/Images/St-Tropez/000524-St-Tropez.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114321118463699262?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114321118463699262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114321118463699262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114321118463699262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114321118463699262'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/st-tropez.html' title='St. Tropez'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114321075108851817</id><published>2006-03-24T15:28:00.000+01:00</published><updated>2009-08-28T15:36:43.507+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Avignon.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://wwwhome.cs.utwente.nl/%7Ejagersaa/Provence/Images/Avignon.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://wwwhome.cs.utwente.nl/%7Ejagersaa/Provence/Images/Avignon.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.avignon-et-provence.com/avignon-tourisme/img/carte-avignon-provence.gif"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.avignon-et-provence.com/avignon-tourisme/img/carte-avignon-provence.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Забегая вперед, скажем, что дорога от Страсбурга до Марселя обошлась примерно в 100 евро. Впрочем, есть альтернатива - ехать не по хайвею, а по параллельным ему дорогам местного значения, но другого скоростного режима. Кроме того, о немецком придорожном благолепии можно сразу забыть. Пива не купить, с едой проблемы. Под Лионом с трудом нашли какую-то харчевню на другой стороне дороги…&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114321075108851817?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114321075108851817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114321075108851817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114321075108851817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114321075108851817'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/avignon.html' title='Avignon.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114321020521240720</id><published>2006-03-24T15:23:00.000+01:00</published><updated>2009-08-28T15:36:43.508+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Carcassone. Details.</title><content type='html'>&lt;a href="http://www.turizm.ru/france/articles/p-1218.html"&gt;http://www.turizm.ru/france/articles/p-1218.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114321020521240720?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114321020521240720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114321020521240720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114321020521240720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114321020521240720'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/carcassone-details.html' title='Carcassone. Details.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114320984810662742</id><published>2006-03-24T15:16:00.000+01:00</published><updated>2009-08-28T15:36:43.508+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Monaco.</title><content type='html'>&lt;blockquote&gt;Старые лимузины и сегодня встречаются на улицах Монако - все вылизанные, заново отделанные, сверкающие. В Монако не бывает битых или даже слегка помятых машин. Если вы собрались ехать туда на личном автотранспорте, учтите: машина должна выглядеть oХkey, иначе ее в княжество не впустят. Знакомой переводчице, опаздывающей на гонки в Монте-Карло, на которых она должна была работать, пришлось в течение получаса уламывать и задабривать взятками (майками с эмблемой гонок) полицейских - в конце концов ее впустили, но взяли обещание, что, добравшись до места, она поставит машину где-нибудь за углом и не станет пользоваться ею внутри страны.&lt;/blockquote&gt;http://www.turizm.ru/france/articles/p-1221.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114320984810662742?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114320984810662742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114320984810662742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320984810662742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320984810662742'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/monaco.html' title='Monaco.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114320934217693148</id><published>2006-03-24T15:07:00.000+01:00</published><updated>2009-08-28T15:36:43.508+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Nice. February.</title><content type='html'>&lt;blockquote&gt;И, наконец, по воде поплыли лодки, а в них создатели цветочных композиций целыми семьями с детьми, с собаками. Публика их узнаёт, подбадривает, а они бросают зрителям охапками цветы: мимозы, гвоздики. На импровизированных трибунах соревнование, кто больше словит. Это и есть "битва цветов"! По городу потом все ходят с букетами.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;http://www.turizm.ru/france/stories/p-2242.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114320934217693148?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114320934217693148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114320934217693148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320934217693148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320934217693148'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/nice-february.html' title='Nice. February.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114320868463394184</id><published>2006-03-24T14:50:00.000+01:00</published><updated>2009-08-28T15:36:43.508+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Не в тему, но интересно. Диснейленд.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.panrejser.dk/images/disney/map_ass_1024x707.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.panrejser.dk/images/disney/map_ass_1024x707.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Обзор: http://www.turizm.ru/france/articles/p-1222.html&lt;br /&gt;Цены:&lt;br /&gt;                                                 Erwachsene             Kinder&lt;br /&gt;1-Tag                / 1 Park -Ticket                42 Euro                             34 Euro&lt;br /&gt;1-Tag-Park-Hopper-Ticket        51 Euro                             43 Euro&lt;br /&gt;2-Tages-Park-Hopper-Ticket    93 Euro                             77 Euro&lt;br /&gt;3-Tages-Park-Hopper-Ticket    113 Euro                             92 Euro&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114320868463394184?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114320868463394184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114320868463394184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320868463394184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320868463394184'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/blog-post_114320868463394184.html' title='Не в тему, но интересно. Диснейленд.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114320717875731650</id><published>2006-03-24T14:31:00.000+01:00</published><updated>2009-08-28T15:36:43.508+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Не по теме но интересно. Сан-Вермишель.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.rennes-almaty.com/visite2004/25%20juin%20022%20Mont%20St%20Michel.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.rennes-almaty.com/visite2004/25%20juin%20022%20Mont%20St%20Michel.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;http://www.turizm.ru/france/articles/p-1223.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114320717875731650?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114320717875731650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114320717875731650' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320717875731650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320717875731650'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/blog-post_24.html' title='Не по теме но интересно. Сан-Вермишель.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114320577720714747</id><published>2006-03-24T13:22:00.000+01:00</published><updated>2009-08-28T15:36:43.508+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Ссылки на отзывы туристов.</title><content type='html'>Чуваки на джипе с россии во францию: http://www.turizm.ru/france/articles/p-2321.html&lt;br /&gt;Чуваки тоже на джипе с испании в германию: http://www.tours.ru/country/stories.asp?id_stories=4989&amp;amp;id_country=FR&lt;br /&gt;Лазурный берег: http://www.turizm.ru/france/p-1214.html&lt;br /&gt;Средняя температура в Ницце в Апреле - 13 градусов: http://www.turizm.ru/france/p-188.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114320577720714747?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114320577720714747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114320577720714747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320577720714747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320577720714747'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/blog-post.html' title='Ссылки на отзывы туристов.'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114320271606681390</id><published>2006-03-24T13:17:00.000+01:00</published><updated>2009-08-28T15:36:43.508+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Formule 1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.hotelformule1.com/formule1/gb/images/cartographie/carte_france_se.gif"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.hotelformule1.com/formule1/gb/images/cartographie/carte_france_se.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;В Формуле1 останавливаться будет дорого и не интересно, но на всякий случай проверил - в этом районе формул полно. Цены: 28-30 ЕУР за комнату с двух-этажной кроватью.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114320271606681390?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114320271606681390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114320271606681390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320271606681390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320271606681390'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/formule-1.html' title='Formule 1'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114320003129770562</id><published>2006-03-24T12:29:00.000+01:00</published><updated>2009-08-28T15:36:43.509+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Lyosha's tip</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mvl.mit.edu/ISS/ParabolicFlt_Photos/Photos1_Mar02/St_Emilion.JPG"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://mvl.mit.edu/ISS/ParabolicFlt_Photos/Photos1_Mar02/St_Emilion.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.celestiamotherlode.net/catalog/images/screenshots/earth/France_Arcachon_basin_L6-8_BM32k_VT__jdou.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.celestiamotherlode.net/catalog/images/screenshots/earth/France_Arcachon_basin_L6-8_BM32k_VT__jdou.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://c.chevalier7.free.fr/dune%20du%20pyla.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://c.chevalier7.free.fr/dune%20du%20pyla.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Oleksiy Chagovets (10:52 PM) :&lt;br /&gt;тогда в Нормандию :-)&lt;br /&gt;или на юго-восток Франции!!! около Бордо&lt;br /&gt;Oleksiy Chagovets (10:53 PM) :&lt;br /&gt;там где залив в котором устриц выращивают и самая большая дюна в Европе&lt;br /&gt;Marina (10:53 PM) :&lt;br /&gt;ок, если доедем, у нас дней 8-9 будет&lt;br /&gt;Oleksiy Chagovets (10:54 PM) :&lt;br /&gt;ключевые слова:&lt;br /&gt;Arcachon (город и залив)&lt;br /&gt;Dune de Pyla&lt;br /&gt;Marina (10:55 PM) :&lt;br /&gt;ок, спасибо, посмотрим&lt;br /&gt;Oleksiy Chagovets (10:55 PM) :&lt;br /&gt;по пути можно заехать в St.Emilion подегустировать вин - это тоже около Бордо&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114320003129770562?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114320003129770562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114320003129770562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320003129770562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114320003129770562'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/lyoshas-tip.html' title='Lyosha&apos;s tip'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114319963943732745</id><published>2006-03-24T12:26:00.000+01:00</published><updated>2009-08-28T15:36:43.509+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Largest bridge in France (on Earth?)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pro.wanadoo.fr/tannerie.lauret/Acces%20a%20Millau.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px;" src="http://pro.wanadoo.fr/tannerie.lauret/Acces%20a%20Millau.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.architect-work.be/admin/files/Foto%20Greisch%20Millau.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px;" src="http://www.architect-work.be/admin/files/Foto%20Greisch%20Millau.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114319963943732745?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114319963943732745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114319963943732745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114319963943732745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114319963943732745'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/largest-bridge-in-france-on-earth.html' title='Largest bridge in France (on Earth?)'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114319935004549544</id><published>2006-03-24T12:19:00.000+01:00</published><updated>2009-08-28T15:36:43.509+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Way 2</title><content type='html'>Frankfurt - Montpellier (over Lyon).  994 km. 9:56h.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4842/2559/1600/way2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4842/2559/400/way2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114319935004549544?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114319935004549544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114319935004549544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114319935004549544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114319935004549544'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/way-2.html' title='Way 2'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114319917995055751</id><published>2006-03-24T12:15:00.000+01:00</published><updated>2009-08-28T15:36:43.509+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Way 1</title><content type='html'>Frankfurt - Nice. 974 km. 9:40h. We'll have to go through Schweiz - +25 EUR za proezd&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4842/2559/1600/way1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/4842/2559/400/way1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114319917995055751?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114319917995055751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114319917995055751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114319917995055751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114319917995055751'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/way-1.html' title='Way 1'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114319879987514120</id><published>2006-03-24T12:11:00.000+01:00</published><updated>2009-08-28T15:36:43.509+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Carcassone</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.naryves.com/pj/france/carcassonneaerial.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px;" src="http://www.naryves.com/pj/france/carcassonneaerial.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.geraldbrimacombe.com/France/France%20-%20Carcassone.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px;" src="http://www.geraldbrimacombe.com/France/France%20-%20Carcassone.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114319879987514120?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114319879987514120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114319879987514120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114319879987514120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114319879987514120'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/carcassone.html' title='Carcassone'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24655256.post-114319814271335019</id><published>2006-03-24T12:01:00.000+01:00</published><updated>2009-08-28T15:36:43.509+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Going to France 2006'/><title type='text'>Going to France</title><content type='html'>&lt;div style="text-align: left;"&gt;Preved!&lt;br /&gt;Мы типа собрались во Францию. Предлагаю использовать этот сайт для обсуждения и сохранения информации о нашей поездке. Сначала нужно определить куда мы хотим, потом куда мы можем, а потом где мы будем спать.&lt;br /&gt;Итак, список: куда можно поехать:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24655256-114319814271335019?l=spidgorny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spidgorny.blogspot.com/feeds/114319814271335019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24655256&amp;postID=114319814271335019' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114319814271335019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24655256/posts/default/114319814271335019'/><link rel='alternate' type='text/html' href='http://spidgorny.blogspot.com/2006/03/going-to-france.html' title='Going to France'/><author><name>Slawa</name><uri>http://www.blogger.com/profile/09327699472376623382</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
