<?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-5902573405229587292</id><updated>2012-02-05T17:48:45.693+02:00</updated><category term='PHP'/><category term='philosophy'/><category term='web2.0'/><category term='UTF-8'/><title type='text'>Tyrons coding blog</title><subtitle type='html'>...AJAXifying the world.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5902573405229587292.post-6040991370734045795</id><published>2012-01-25T17:14:00.001+02:00</published><updated>2012-02-01T22:23:22.625+02:00</updated><title type='text'>Why the phpMyAdmin Status Monitor is awesome</title><content type='html'>So today I checked out my vServer performance using the &lt;i&gt;phpMyAdmin Status Monitor &lt;/i&gt;that I have coded last summer, because a user notified me that a certain webpage doesn't load.&lt;br /&gt;I couldn't figure out the problem as the site loaded normally for me and the server wasn't overloaded, however somehow I ended up hammering on the refresh button in the server tab to check what MySQL processes were running because it was fun and interesting.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-5S9w3ditLXs/TyAUUgvCuLI/AAAAAAAAAu8/f5rxZDDa7CM/s1600/refresh.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="120" src="http://4.bp.blogspot.com/-5S9w3ditLXs/TyAUUgvCuLI/AAAAAAAAAu8/f5rxZDDa7CM/s400/refresh.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;So then one process did appear that was currently sorting the results of a query. It looked like a candidate for optimization. So I threw it into the query analyzer.&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/-FOjp2tNAluk/TyAUtE83DyI/AAAAAAAAAvE/CHTXSCVl3yA/s1600/queryanalyzer1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="276" src="http://2.bp.blogspot.com/-FOjp2tNAluk/TyAUtE83DyI/AAAAAAAAAvE/CHTXSCVl3yA/s400/queryanalyzer1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;My assumption turned out to be correct. This query is used to determine when the visitor last visited the website, and it took 0.3 seconds to execute. It happens to be run on every page visit on of my websites.&lt;br /&gt;&lt;br /&gt;So, being already in phpMyAdmin, I head over to the table in question and add an index for this field.&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span class="syntax_alpha syntax_alpha_reservedWord" style="color: #990099; font-weight: bold; text-transform: uppercase;"&gt;ALTER&lt;/span&gt;&amp;nbsp;&lt;span class="syntax_alpha syntax_alpha_reservedWord" style="color: #990099; font-weight: bold; text-transform: uppercase;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #444444; font-family: Verdan, Arial, Tahoma; font-size: 14px; text-align: -webkit-left;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="syntax_quote syntax_quote_backtick" style="color: green; font-family: Verdan, Arial, Tahoma; font-size: 14px; text-align: -webkit-left; white-space: pre;"&gt;`cc_counter`&lt;/span&gt;&lt;span style="color: #444444; font-family: Verdan, Arial, Tahoma; font-size: 14px; text-align: -webkit-left;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="syntax_alpha syntax_alpha_reservedWord" style="color: #990099; font-family: Verdan, Arial, Tahoma; font-size: 14px; font-weight: bold; text-align: -webkit-left; text-transform: uppercase;"&gt;ADD&lt;/span&gt;&lt;span style="color: #444444; font-family: Verdan, Arial, Tahoma; font-size: 14px; text-align: -webkit-left;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="syntax_alpha syntax_alpha_reservedWord" style="color: #990099; font-family: Verdan, Arial, Tahoma; font-size: 14px; font-weight: bold; text-align: -webkit-left; text-transform: uppercase;"&gt;INDEX&lt;/span&gt;&lt;span style="color: #444444; font-family: Verdan, Arial, Tahoma; font-size: 14px; text-align: -webkit-left;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="syntax_punct syntax_punct_bracket_open_round" style="color: magenta; font-family: Verdan, Arial, Tahoma; font-size: 14px; text-align: -webkit-left;"&gt;(&lt;/span&gt;&lt;span style="color: #444444; font-family: Verdan, Arial, Tahoma; font-size: 14px; text-align: -webkit-left;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="syntax_quote syntax_quote_backtick" style="color: green; font-family: Verdan, Arial, Tahoma; font-size: 14px; text-align: -webkit-left; white-space: pre;"&gt;`ip`&lt;/span&gt;&lt;span style="color: #444444; font-family: Verdan, Arial, Tahoma; font-size: 14px; text-align: -webkit-left;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="syntax_punct syntax_punct_bracket_close_round" style="color: magenta; font-family: Verdan, Arial, Tahoma; font-size: 14px; text-align: -webkit-left;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white;"&gt;Now lets run this query again:&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: -webkit-left;"&gt;&lt;span style="background-color: white; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-OD1ysth2FeU/TyAVtlrbVaI/AAAAAAAAAvM/lrviQNVw9jQ/s1600/queryanalyzer2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="368" src="http://3.bp.blogspot.com/-OD1ysth2FeU/TyAVtlrbVaI/AAAAAAAAAvM/lrviQNVw9jQ/s400/queryanalyzer2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-left;"&gt;&lt;span style="background-color: white; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-left;"&gt;&lt;span style="background-color: white; text-align: -webkit-auto;"&gt;Well that sounds much better doesn't it! From 300ms to 0.8ms. Around 375 times faster now. While we're at it, we might as well write this query correctly.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-left;"&gt;&lt;span style="background-color: white; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-3CKuuurWZMw/TyAWMSFg74I/AAAAAAAAAvU/0wjY9u5vVw4/s1600/queryanalyzer3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="333" src="http://4.bp.blogspot.com/-3CKuuurWZMw/TyAWMSFg74I/AAAAAAAAAvU/0wjY9u5vVw4/s400/queryanalyzer3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-left;"&gt;&lt;span style="background-color: white; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-left;"&gt;&lt;span style="background-color: white; text-align: -webkit-auto;"&gt;As we only require the newest visit it is enough find MAX(time) of the visitor in question. Another 40% faster, which results in a speedup of around 525 times compared to the original.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;So we not only saved ~0.3 seconds of loading time per visit but also reduced the required CPU time allowing greater workload on the server.&lt;/div&gt;&lt;div style="text-align: -webkit-left;"&gt;&lt;span style="background-color: white; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-left;"&gt;&lt;span style="background-color: white; text-align: -webkit-auto;"&gt;If you are running whatever self written code on your servers or webspace, get the new &lt;a href="http://www.phpmyadmin.net/"&gt;phpMyAdmin&amp;nbsp;3.5&lt;/a&gt;, check out your database load and optimize your queries. It's very&amp;nbsp;gratifying work ;-)&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-left;"&gt;&lt;span style="background-color: white; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-left;"&gt;&lt;span style="background-color: white; text-align: -webkit-auto;"&gt;P.S.: I'm aware that this might be an exceptional case, since a well designed database layout would have proper indexes from the very start. Nonetheless the &lt;i&gt;Status Monitor &lt;/i&gt;is a great tool for surgical improvements on bad code like this one. Also in projects that slowly grow over time the chances are not too low to miss out on creating an index where it would be needed.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-6040991370734045795?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/6040991370734045795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2012/01/why-phpmyadmin-status-monitor-is.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/6040991370734045795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/6040991370734045795'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2012/01/why-phpmyadmin-status-monitor-is.html' title='Why the phpMyAdmin Status Monitor is awesome'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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/-5S9w3ditLXs/TyAUUgvCuLI/AAAAAAAAAu8/f5rxZDDa7CM/s72-c/refresh.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5902573405229587292.post-3496659490062060974</id><published>2012-01-03T12:55:00.002+02:00</published><updated>2012-01-03T12:58:45.176+02:00</updated><title type='text'>Anego CMS Modules - Report 6</title><content type='html'>Due to the holidays this report has been slightly delayed ;-)&lt;br /&gt;However, I'm happy to report that the gallery module is now mostly finished and only a number of smaller features are missing. Since the last report I've completed:&lt;br /&gt;- Store/Restore image size and crop area&lt;br /&gt;- All the server side code&lt;br /&gt;- Default sizes from which the user can select from. This includes default sizes for the original image, the preview image and the crop area.&lt;br /&gt;- Pictures can be deleted.&lt;br /&gt;- There's now default sizes for the original and preview image which is a per-gallery setting.&lt;br /&gt;- Drag&amp;amp;Drop image reordering is finally working too. I've had difficulties getting jQuery UI Sortable to work, the bug being wrong event bubbling.&lt;br /&gt;- Added a very simple pagination for the blog (not related to the gallery module)&lt;br /&gt;- A ton of bug fixing&lt;br /&gt;&lt;br /&gt;The gallery module is now also&amp;nbsp;being tested and&amp;nbsp;running the gallery on my wife's website saraty.com. I was happy to hear that she is very pleased with the simplicity of setting up a gallery. Below is a screenshot of an image being edited.&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/-PnxCPHn1-OU/TwLdv_KOkyI/AAAAAAAAAuk/2kFKKA8r_T8/s1600/gallerymodule.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://4.bp.blogspot.com/-PnxCPHn1-OU/TwLdv_KOkyI/AAAAAAAAAuk/2kFKKA8r_T8/s320/gallerymodule.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Until the end of January the only things left to do are:&lt;br /&gt;- There is one bug left to fix with image reordering&lt;br /&gt;- Classic style file upload with file selection&lt;br /&gt;- If there is time left, there could be some per-gallery-batch-image-resize so one could easily change all the preview and original image sizes.&lt;br /&gt;- Write documentation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-3496659490062060974?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/3496659490062060974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2012/01/anego-cms-modules-report-6.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/3496659490062060974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/3496659490062060974'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2012/01/anego-cms-modules-report-6.html' title='Anego CMS Modules - Report 6'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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/-PnxCPHn1-OU/TwLdv_KOkyI/AAAAAAAAAuk/2kFKKA8r_T8/s72-c/gallerymodule.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5902573405229587292.post-6074636260389116093</id><published>2011-12-18T00:42:00.001+02:00</published><updated>2011-12-18T00:42:52.872+02:00</updated><title type='text'>Anego CMS Modules - Report 5</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;In the last 2 Weeks I've been busy implementing a small image editor that allows the user to crop and resize images for the gallery. It turned out to be unexpectedly much work to create a 3-in-1 Image resizer, Cropper and Dragging tool that has some usability. Hence, I wasn't able to write the server code for it yet, which is however the easiest part. For the next report there's a number of&amp;nbsp;functionalities that I have to build:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Store and restore the image size and cropped area so a user doesn't need to select it from anew if he wanted the picture just a bit bigger.&lt;/li&gt;&lt;li&gt;Server code for cropping and resizing&lt;/li&gt;&lt;li&gt;Allow image editing of both thumbnail and full size picture. For this I have already refactored the image editing code into a jquery plugin for it to be modular.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-Dy81CWzJl4I/Tu0WyP4J53I/AAAAAAAAAuY/IJEmI8-93nI/s1600/imageedit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="309" src="http://2.bp.blogspot.com/-Dy81CWzJl4I/Tu0WyP4J53I/AAAAAAAAAuY/IJEmI8-93nI/s320/imageedit.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;For this project I will probably drop my plans for improving the blog and focus entirely on the gallery. I realize it's a better choice to have a feature-complete, versatile gallery module, rather than having 2 not very finished modules.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-6074636260389116093?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/6074636260389116093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/12/anego-cms-modules-report-5.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/6074636260389116093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/6074636260389116093'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/12/anego-cms-modules-report-5.html' title='Anego CMS Modules - Report 5'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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/-Dy81CWzJl4I/Tu0WyP4J53I/AAAAAAAAAuY/IJEmI8-93nI/s72-c/imageedit.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5902573405229587292.post-3919608981344630970</id><published>2011-12-04T19:35:00.001+02:00</published><updated>2011-12-04T19:39:45.670+02:00</updated><title type='text'>Anego CMS Modules - Report 4</title><content type='html'>Since last update I've added a settings dialog for each image so users can change their properties such as description and thumbnail. This information is also saved and stored in database now.&lt;br /&gt;&lt;br /&gt;Also I've found a great image cropping tool named &lt;a href="http://deepliquid.com/content/Jcrop.html"&gt;Jcrop&lt;/a&gt;&amp;nbsp;which I probably will be implementing until next time. I'm also considering to add a thumbnail resize feature like in &lt;a href="http://demos.webdesignledger.com/jquery_image_grid/example2.htm"&gt;this demo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And finally I've been fixing a few bugs in the dialog code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-3919608981344630970?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/3919608981344630970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/12/anego-cms-modules-report-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/3919608981344630970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/3919608981344630970'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/12/anego-cms-modules-report-3.html' title='Anego CMS Modules - Report 4'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-1428261755077318922</id><published>2011-11-20T10:47:00.001+02:00</published><updated>2011-11-20T10:55:48.546+02:00</updated><title type='text'>Anego CMS Modules - Report 3</title><content type='html'>In this 2 weeks I've had to do some major refactoring of Anegos dialog code so that it allows multiple dialogs. This will be needed so e.g. one can open a gallery settings dialog while being in the edit mode.&lt;br /&gt;&lt;br /&gt;In the process I had to touch a lot of code, so I also cleaned up much of the code style. I've also found a number of bugs that I fixed.&lt;br /&gt;&lt;br /&gt;The progress on the Gallery itself though hasn't gone much further. I've made only small additions and until the last day I spent a lot of time getting &lt;i&gt;jQuery UI Sortable &lt;/i&gt;working on the images so one can Drag&amp;amp;Drop them but I failed. There must be something bugged with that widget.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-1428261755077318922?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/1428261755077318922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/11/anego-cms-modules-report-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/1428261755077318922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/1428261755077318922'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/11/anego-cms-modules-report-3.html' title='Anego CMS Modules - Report 3'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-1377633950991355570</id><published>2011-11-05T16:56:00.004+02:00</published><updated>2011-11-05T16:56:27.519+02:00</updated><title type='text'>Anego CMS Modules - Report 2</title><content type='html'>Unfortunately I couldn't find much time to invest on this Project so I will have to catch up within the following 2 weeks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-1377633950991355570?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/1377633950991355570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/11/anego-cms-modules-report-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/1377633950991355570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/1377633950991355570'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/11/anego-cms-modules-report-2.html' title='Anego CMS Modules - Report 2'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-3312128371648187414</id><published>2011-10-22T22:04:00.000+03:00</published><updated>2011-10-22T22:07:42.894+03:00</updated><title type='text'>Anego CMS Modules - Report 1</title><content type='html'>&lt;b&gt;Week 1&lt;/b&gt;&lt;br /&gt;I've spent most time contemplating on how to build a good UI for the Gallery module and researching on HTML5 File upload. Since there is already existing libraries for Drag&amp;amp;Drop file upload I don't have to reinvent the wheel. However as this technology is fairly new, I guess not to many solutions exists for it yet. At least not as jQuery plugin, which for me is a must for better code quality. In particular I've been weighing the pros and cons of:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/weixiyen/jquery-filedrop"&gt;jQuery filedrop&lt;/a&gt;: A basic do-it-yourself Drag&amp;amp;Drop file upload that only covers the actual uploading and lets the user implement all the UI related stuff.&lt;/li&gt;&lt;li&gt;&lt;a href="http://aquantum-demo.appspot.com/file-upload"&gt;jQuery File Upload&lt;/a&gt;: A fully featured Drag&amp;amp;Drop file upload with GUI that has it all, but requires jQuery UI and the&amp;nbsp;jQuery Templates plugin.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;In the end I decided to go for &lt;i&gt;jQuery filedrop&lt;/i&gt; because I have a strong desire to directly integrate the uploading part into the gallery view, which is not possible with the already integrated UI of &lt;i&gt;jQuery File Upload.&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;Week 2&lt;/b&gt;&lt;br /&gt;This week I mostly invested in a massive refactoring of the module system of Anego and improve the code style in many areas to increase the readability and extensibility. Towards the end of the week I was able to implement the basic Drag&amp;amp;Drop file upload and thumbnail generation. The most important infrastructure for the gallery module is now ready. This basically means the most important design decisions are made and it's mostly just fleshing out each&amp;nbsp;functionality&amp;nbsp;now.&lt;br /&gt;&lt;br /&gt;Also I'm am happy to report that Anego also has been accepted as part of a project for my Lecture 'Advanced Software Engineering' where a Team of 6 Students (including me) will do some great improvements on the core &amp;nbsp;system. The blog and gallery module stays untouched by this though - they are treated as a different project.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-3312128371648187414?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/3312128371648187414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/10/anego-cms-modules-report-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/3312128371648187414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/3312128371648187414'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/10/anego-cms-modules-report-1.html' title='Anego CMS Modules - Report 1'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-1435023626279180664</id><published>2011-10-08T21:51:00.000+03:00</published><updated>2011-10-08T22:03:06.246+03:00</updated><title type='text'>A new Project: 2 Anego CMS Modules</title><content type='html'>Starting from last week, I have begun a new project that will focus on 2 modules of my experimental content management system Anego CMS. This project will end not later than January 2011 due to the fact that this project will be part of my bachelor studies in software engineering.&lt;br /&gt;&lt;br /&gt;Anego is a new, basic and still pretty unstable (in terms of backwards compatibility) cms that I have been working on for the last few years and is powering not only my website (tyron.at) but also my wife's (saraty.com), my brother's (simpleit.at) and any small business websites that I can make my customer (I've got 3 so far!) ;-)&lt;br /&gt;&lt;br /&gt;My CMS is using a new model for representing a website page - it is broken down into elements that can be dragged and organized to the users preference. Each of these elements is seen as a "Content Element" plugin/module that users may add and remove to Anego.&lt;br /&gt;&lt;br /&gt;There already exists a very basic blog module that allows the creation, editing and deleting of blog entries and a simple comment feature to each blog entry.&amp;nbsp;My Job is it now to improve the blog module, that include the following points:&lt;br /&gt;- Module Interface - The current implementation of module support within Anego is rather unstable, it may have to change quite substantially, thus any already written modules will need to be adjusted accordingly&lt;br /&gt;- Pagination - Currently all blog entries are displayed in one page. Proper pagination needs to be added.&lt;br /&gt;- Archive and Navigation - There currently no overview over the written blog entries, an intelligent way of displaying a list of blog entries needs to be found, as well as implementing archivation features (navigation by year/month or similar)&lt;br /&gt;- RSS Feeds - A blog without RSS support is quite useless.&lt;br /&gt;- Settings: A settings dialog for changing some basic properties such as commenting, entries per page, etc. should be added. &lt;br /&gt;- Comment Anti-Spam and maybe signup by google/facebook/openid/etc: The current implementation of comments may be vulnerable to spam&lt;br /&gt;- Ideally possibility of writing hidden drafts and preview&lt;br /&gt;&lt;br /&gt;Also I will implement a Gallery module that should have at least following features:&lt;br /&gt;- HTML5 Multi-Upload-Support and ideally batch-resizing&amp;nbsp;of Pictures&lt;br /&gt;- Display gallery as grid with fancy zooming&lt;br /&gt;- Drag&amp;amp;Drop reordering of pictures&lt;br /&gt;And depending on the required time investment I would also add:&lt;br /&gt;- Gallery Settings: Allowing some display options such as thumbnail size, picture descriptions, pre-loading of images, image zoom type, maybe watermark&lt;br /&gt;- Different gallery display types: classic gallery, image slider, etc.&lt;br /&gt;&lt;br /&gt;So altogether its going to be an exciting winter!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-1435023626279180664?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/1435023626279180664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/10/new-project-anego-cms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/1435023626279180664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/1435023626279180664'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/10/new-project-anego-cms.html' title='A new Project: 2 Anego CMS Modules'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-13533281496273690</id><published>2011-09-09T23:11:00.001+03:00</published><updated>2011-09-09T23:12:16.299+03:00</updated><title type='text'>Web Application Security Scanner</title><content type='html'>Yesterday I stumbled upon a whole range of software I didn't know it exists. I've found &lt;a href="http://www.mavitunasecurity.com/netsparker/"&gt;Netsparker&lt;/a&gt;, that can automatically scan a website for&amp;nbsp;vulnerabilities&amp;nbsp;such as SQL Injection and Cross Site Scripting threats. All it needs is the URL to your website and it searches and exploits every possible interaction with server side scripts.&lt;br /&gt;&lt;br /&gt;There is a &lt;a href="http://www.mavitunasecurity.com/communityedition/"&gt;Community Edition of Netsparker&lt;/a&gt;, which is free but has limited features. Nonetheless it helped me find *a lot* of SQL Injection and XSS threats on my websites. If you run any type of non-static website, I'd strongly suggest to try out this tool. I am damn glad to have used it.&lt;br /&gt;&lt;br /&gt;You might also want to check out the &lt;a href="http://sectooladdict.blogspot.com/2011/08/commercial-web-application-scanner.html"&gt;comparison of 60 similar tools&lt;/a&gt; in this area.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-13533281496273690?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/13533281496273690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/09/web-application-security-scanner.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/13533281496273690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/13533281496273690'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/09/web-application-security-scanner.html' title='Web Application Security Scanner'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5902573405229587292.post-7142382147846854968</id><published>2011-08-22T10:09:00.004+03:00</published><updated>2011-08-22T12:08:24.206+03:00</updated><title type='text'>Week 13 report</title><content type='html'>&lt;div&gt;Since my project was pretty much completed already I didn't have much left to do other than to keep testing and build some additional features.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I originally had only a few regex's to pretty print the sql queries which of course doesn't work for recursing patterns of subqueries. So I've used the tokenizer from CodeMirror and the MySQL Mode to iterate through each token and pretty print it. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;What I made this week:&lt;/b&gt;&lt;div&gt;- Rewrote the SQL Pretty printer for the &lt;i&gt;Query Analyzer &lt;/i&gt;dialog. &lt;/div&gt;&lt;div&gt;- Easy editing of byte values on the Server variables page&lt;/div&gt;&lt;div&gt;- Lots of fixes and small adjustments&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's a screenshot that shows the majority of what I've been building this summer:&lt;/div&gt;&lt;div&gt;&lt;a href="http://tyron.at/files/monitor.png"&gt;&lt;img src="http://3.bp.blogspot.com/-6L9kUJWU9-g/TlIb5VuhuII/AAAAAAAAAt0/zn2rKASN_kQ/s320/monitor.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5643603954947438722" style="cursor: pointer; width: 320px; height: 218px; " /&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/5902573405229587292-7142382147846854968?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/7142382147846854968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/08/week-13-report.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/7142382147846854968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/7142382147846854968'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/08/week-13-report.html' title='Week 13 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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/-6L9kUJWU9-g/TlIb5VuhuII/AAAAAAAAAt0/zn2rKASN_kQ/s72-c/monitor.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5902573405229587292.post-1889154321415440172</id><published>2011-08-14T22:20:00.003+03:00</published><updated>2011-08-14T22:35:02.077+03:00</updated><title type='text'>Week 12 report</title><content type='html'>My Project is completed. The only thing that is left to do is to improve the code style, write some documentation on the phpMyAdmin wiki, fix any occurring bugs and tweak some things here and there.&lt;div&gt;I still added a new feature this week which took a lot of rewriting in the monitor code. It is now very easy to add preset charts over calculated values. I've already added two, which is for &lt;i&gt;Query cache efficiency &lt;/i&gt;and &lt;i&gt;Query cache usage (%). &lt;/i&gt;The reason why I had to rewrite a lot is because in case of the query cache usage, it also required a server variable (query cache size). So I've adjusted the chart configuration code to be more generic about the required data.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What I did this week:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- One new feature: Preset charts over calculated values. Newly added: Query cache efficiency and query cache usage (%).&lt;/div&gt;&lt;div&gt;- Improved page load performance by loading the monitor code on demand (+ other speed improvements)&lt;/div&gt;&lt;div&gt;- Implemented and improved the new tooltip system made by Aris&lt;/div&gt;&lt;div&gt;- Added and adjusted some rules for the Advisor system&lt;/div&gt;&lt;div&gt;- Made lots of code style improvements&lt;/div&gt;&lt;div&gt;- Lots of bugfixing&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What I will do next week:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- Documentation&lt;/div&gt;&lt;/div&gt;&lt;div&gt;- Keep tweaking and scrubbing the code :-)&lt;/div&gt;&lt;div&gt;- Build stuff from my week 10 ideas list again with the leftover time&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-1889154321415440172?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/1889154321415440172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/08/week-12-report.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/1889154321415440172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/1889154321415440172'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/08/week-12-report.html' title='Week 12 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5902573405229587292.post-722147337588101703</id><published>2011-08-08T09:43:00.003+03:00</published><updated>2011-08-08T09:56:42.944+03:00</updated><title type='text'>Week 11 report</title><content type='html'>This week I have been coding hard on the Advisor system that I planned for a long time. It uses the mysqltuner 2.0 config as a base, though I have added much more information about each rule/recommendation.&lt;div&gt;Here is an example rule in mysqltuner2.0&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;Query cache efficiency (%)|||&amp;lt;20|||Qcache_hits/(Com_select+Qcache_hits)*100|||query cache not efficient, consider increasing query_cache_limit.&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;This is how it looks in the pma version:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;rule 'Query cache efficiency (%)' [Com_select + Qcache_hits &amp;gt; 0 &amp;amp;&amp;amp; !fired('Query cache disabled')]&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Qcache_hits / (Com_select + Qcache_hits) * 100&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;value  &amp;lt; 20&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Query cache not running efficiently, it has a low hit rate.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Consider increasing {query_cache_limit}.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;The current query cache hit rate of %s% is below 20% | round(value,1)&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you can see, there is now 3 text lines. They are displayed title with 'issue','recommendation' and 'justification'. This way the user can make a more wise decision on how to improve the performance (or ignore the recommendation altogether)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This rule syntax is being parsed by a simple rules engine I have coded this week. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What I made this week:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- Advisor system:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;- Built rules file and rules parser&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;- User interface that displays the recommendations&lt;/div&gt;&lt;div&gt;- New status variables "filter" that allows one to display the unformatted values (so one can copy and calculate own perfomance measures)&lt;/div&gt;&lt;div&gt;&lt;b&gt; &lt;/b&gt;- Fixed a security issues with last weeks changes and other small improvements&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What I will do next week:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- I will need to find a good way of adding i10n to the rules file&lt;/div&gt;&lt;div&gt;- Improve code style, write documentation etc.&lt;/div&gt;&lt;div&gt;- With leftover time, build some of the features from last weeks idea list (week 10 blog report)&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&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/5902573405229587292-722147337588101703?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/722147337588101703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/08/week-11-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/722147337588101703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/722147337588101703'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/08/week-11-report.html' title='Week 11 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-7070653767824745908</id><published>2011-07-31T16:08:00.009+03:00</published><updated>2011-08-18T13:17:10.189+03:00</updated><title type='text'>Week 10 report</title><content type='html'>&lt;div&gt;This was a really interesting weekend. I've been digging through my newly discovered MySQL tuning tools most of the time, and discovered 2 great ideas that I could include to my monitor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First is the mysqltuner 2.0 ruleset that I already mentioned, which I plan to add this week.&lt;/div&gt;&lt;div&gt;And the other is mk-query-profiler from the maatkit command line tools. It uses 'SHOW SESSION STATUS' to read lots of very interesting data about single executed queries. This would be a wonderful addition to my 'Query Analyzer Dialog'.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What I made this week:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I started out realizing that the slow query log loading didn't work at all, so I had to do some bug fixing there. Having the slow log working again I noticed that I forgot to implement grouping/summarization of the slow query columns such as examined_rows, sent_rows, lock_time etc. It took quite some code rearrangement to fix this.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And I kept finding new bugs that I had to fix first. One for example was that the query profiling information in the 'Query Analyzer Dialog' was recorded for the wrong query.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the remaining time of the week I implemented &lt;/div&gt;&lt;div&gt;- chart config import and export using json as data format&lt;/div&gt;&lt;div&gt;- chart title and series label editing dialog&lt;/div&gt;&lt;div&gt;- a small look into drizzle support. With a small patch most of the status page now works under drizzle (some values don't exist and return php notices though)&lt;/div&gt;&lt;div&gt;- a fix for cpu charts not displaying anything&lt;/div&gt;&lt;div&gt;- error handling when the pma session runs out. It now displays a dialog asking the user to reload the page&lt;/div&gt;&lt;div&gt;- in the 'query analyzer dialog' it now displays all explain outputs (there are multiple explain rows when multiple tables are used)&lt;/div&gt;&lt;div&gt;- added a check for mysql versions that don't support table logging (&amp;lt; 5.1.6)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So lots of small needed fixes and adjustments, plus a unexpected power outage on friday that lasted most of the day kept me from writing actual code for the advisory system.&lt;/div&gt;&lt;div style="font-weight: bold; "&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What I will do next week:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- Advisory system using mysqltuner 2.0 ruleset&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What I still would like to do for phpMyAdmin, though not mission critical for my project:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;- Display chart from display table page: Handle big amounts of data with &lt;a href="http://www.highcharts.com/demo/dynamic-master-detail"&gt;zoomable charts&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;s&gt;- Debug server variables table width auto-adjustment (doesn't always adjust properly)&lt;/s&gt;&lt;/div&gt;&lt;div&gt;- Fix UI of create table dialog / enum editor&lt;/div&gt;&lt;div&gt;- Status Monitor: Add disable general_log + truncate table link to setup dialog&lt;/div&gt;&lt;div&gt;- rewrite &lt;a href="http://wiki.phpmyadmin.net/pma/Charts"&gt;charts page on the wiki&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;[Edit 01.08.11]&lt;/div&gt;&lt;div&gt;&lt;s&gt;- One more &lt;b&gt;great idea: &lt;/b&gt;For the Monitor charts:&lt;b&gt; &lt;/b&gt;Allow charting over calculated variables, like the query cache hitrate (Hit rate = Qcache_hits / (Qcache_hits + Com_select))&lt;/s&gt;&lt;/div&gt;&lt;div&gt;[Edit 02.08.11] I never run out of ideas -_-&lt;/div&gt;&lt;div&gt;&lt;s&gt;- Fix the query analyzer sql formatter to not fail on subqueries or on occurring strings like "this is where the formatter fails"&lt;/s&gt;&lt;/div&gt;&lt;div&gt;- Add a 'Search' - link to the monitor tab allowing one to make searches over slow log / general log and their EXPLAIN's (e.g. find all queries using temporary tables)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-7070653767824745908?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/7070653767824745908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/07/week-10-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/7070653767824745908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/7070653767824745908'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/07/week-10-report.html' title='Week 10 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-6664296718722379306</id><published>2011-07-30T16:38:00.011+03:00</published><updated>2011-07-31T16:37:55.143+03:00</updated><title type='text'>The extinction of the MySQL Tuning tools</title><content type='html'>On my journey of implementing tuning/optimizing tools for phpMyAdmin I've came across many already existing open source tools in that area.&lt;div&gt;I'm starting to realize though, to my surprise, that most of these tools haven't been updated or gained new features for a year or more. You rarely get to read recent blog postings about variable tuning either.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The most well known tools are:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://jeremy.zawodny.com/mysql/mytop/"&gt;mytop&lt;/a&gt; - Like the *nix top but for mysql threads. Last release is from Feb 2007&lt;/li&gt;&lt;li&gt;&lt;a href="http://hackmysql.com/mysqlreport"&gt;mysqlreport&lt;/a&gt; - &lt;i&gt;'...makes a friendly report of important MySQL status values'&lt;/i&gt;. Last release on April 2008 and official statement of no longer being maintained.&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/rackerhacker/MySQLTuner-perl"&gt;mysqltuner&lt;/a&gt; - makes tuning recommendations. Last release from April 2011 but from what I could see only bug fixes and cosmetic changes since it's first release in 2008&lt;/li&gt;&lt;li&gt;&lt;a href="https://launchpad.net/mysqltuner"&gt;mysqltuner 2.0&lt;/a&gt; - a misleadingly named mysqltuner fork by Sheeri K. Cabral. Last release in April 2010. Was only active for 5 months. &lt;/li&gt;&lt;/ul&gt;&lt;div&gt;So I'm quite baffled that I seem to be the only one who's currently working on a open source MySQL tuning tool, despite the fact that MySQL is getting quite popular nowadays. I really wonder why so little progress is being made in this direction.  Though, I'd love to hear that this is not the case and there's is some recent tools I just haven't found.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Either way, while looking at the tools, I saw that mysqltuner 2.0 uses a comprehensive set of rules to build the recommendations. Since it has been build by a database professional, actually quite a celebrity in the db world, from what I could read, I will probably use it as the basis for my suggestions/advisory system. Gladly the GPL-License allows me to do so :)&lt;/div&gt;&lt;div&gt;This is very useful since it will save me a lot of work "inventing" the recommendation rules, for which you need a lot of MySQL experience.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also I'm the only pma gsoc student that posts project related stuff which is not a weekly report! :(&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[Edit 31.07.11] Ok, I just ran into all the &lt;a href="http://www.mysqlperformanceblog.com/tools/"&gt;more recent tools&lt;/a&gt; that I failed to find, the most extensive one being maatkit. Definitely gonna check out that one!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-6664296718722379306?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/6664296718722379306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/07/extinction-of-mysql-tuning-tools.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/6664296718722379306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/6664296718722379306'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/07/extinction-of-mysql-tuning-tools.html' title='The extinction of the MySQL Tuning tools'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-4580676850359535752</id><published>2011-07-24T22:47:00.005+03:00</published><updated>2011-07-28T19:56:01.364+03:00</updated><title type='text'>Week 9 report</title><content type='html'>&lt;div&gt;This week did quite turn out as I planned to but ended with good results nonetheless. &lt;/div&gt;&lt;div&gt;An unusually big amount of time I had to invest in tracking down a series of bugs.&lt;/div&gt;&lt;div&gt;For the CSS Sprites I built last week, I had to rewrite PMA_linkOrButton() which is a core function of phpMyAdmin, so that took quite a while as well. But in the progress I was able to fix a bug and make the code cleaner.&lt;/div&gt;&lt;div&gt;I still didn't find the time to improve the settings import/export and IE compatibility.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But apart from that I have built a 'Query analyzer' Dialog that is reachable through clicking 'SELECT' - Statements in the Log Table. It allows one to get profiling and 'EXPLAIN' information about that query. I have also built a very simple Javascript MySQL Formatter do display the query nicely in an editable area, so one can also tweak the query and check for execution time changes. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And the last addition was another possibility to filter the log data. If enabled, it removes variable data in WHERE statements with regexp magic, then regroups the queries. So for example if you have a user table that has a name and user id column and your code does hundreds of queries to get the name of different user ids, these queries will be grouped together into one.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And finally I have now a concrete idea on how to build the Advisory/Suggestion system. &lt;/div&gt;&lt;div&gt;- I will add a few advisories inside the query analyzer dialog, using the profiling and explain information.&lt;/div&gt;&lt;div&gt;- On the 'Status/Server variables' Tab I will add a button that allows the user to start a variable analyzer that throws out suggestions for the server variables based on the values of the status variables.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once that is done, my GSoC project is completed :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;What I made this week&lt;/b&gt;&lt;div&gt;- 'Query Analyzer' - Dialog. Pretty prints the query, shows profiling information, shows EXPLAIN information&lt;/div&gt;&lt;div&gt;- Filter: Group queries, ignoring the variable data&lt;/div&gt;&lt;div&gt;- Lots of bug fixing&lt;/div&gt;&lt;div&gt;- More work on CSS Sprites, also now documented on the wiki&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What I will do next week&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- Hopefully get to the import/export part&lt;/div&gt;&lt;div&gt;- Advisory system&lt;/div&gt;&lt;div&gt;- [Edit 26.07] I forgot that I still need to implement the chart editing feature. It should allow one to rename the chart title and series. &lt;/div&gt;&lt;div&gt;- [Edit 28.07] I also forgot that I still need to fix the appearing empty spaces in the chart grid when changing columns count&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-4580676850359535752?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/4580676850359535752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/07/week-9-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/4580676850359535752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/4580676850359535752'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/07/week-9-report.html' title='Week 9 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-7474609592953988353</id><published>2011-07-17T23:25:00.003+03:00</published><updated>2011-07-18T00:03:20.591+03:00</updated><title type='text'>Week 8 report</title><content type='html'>&lt;div&gt;This week I've done a good portion on finalizing the monitor, such as chart ordering and i10n. After that I've invested a considerable amount of time in replacing the big amounts of icon images in phpMyAdmin with CSS Sprites, since they improve page loading speed and allow for better style customization.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since the Monitor is now not far from finished, I can start focusing on some type of Advisory/Suggestion System that can give the user hints for optimizing their configuration and server queries. I will need to put together a plan on how to infer those advisories and a proper visualization of them. For that I've already done some research of whether I can solve that with a business rule engine - as it would be just wonderful to have all these advisories/suggestions getting inferred from a set of well organized rules. To my disappointment there seems very little available for PHP. But I will keep looking.&lt;/div&gt;&lt;div style="font-weight: bold; "&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;What I made this week:&lt;/b&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- Disable CPU and Memory graph for database server that are not local(-host)&lt;/div&gt;&lt;div&gt;- i10n&lt;/div&gt;&lt;div&gt;- Wrote a jQuery Plugin for convenient element reordering in tables, since I couldn't find any good solution for that: &lt;a href="http://tyron.at/tmp/ts.html"&gt;http://tyron.at/tmp/ts.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;This allows for easy reordering of charts now.  &lt;/div&gt;&lt;div&gt;- Replaced chart size settings with amount of columns. The charts automatically size to the dimensions of the viewable area.&lt;/div&gt;&lt;div&gt;- The chart ordering is now saved  as well. It will keep its order after a reload/restart of the browser.&lt;/div&gt;&lt;div&gt;- Improved usability of the returned log data table by adding a 'total sum' row at the bottom and adding a way of filtering the query texts. So now one can just type a table name and you get to see how many queries have been executed on that table (not pushed to my repo yet).&lt;/div&gt;&lt;div&gt;- I've spent a lot of time to add &lt;a href="http://css-tricks.com/158-css-sprites/"&gt;CSS Sprites&lt;/a&gt; to all of phpMyAdmin to replace the big amounts of single icon files currently being used. In a few tests I noticed a reduction of 20-30% of GET requests on a page load, resulting in the page being loaded faster. But it will also make it easier to customize themes and will make the pma code more readable.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What I will do next week:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- Still need to work on that settings import/export &amp;amp; IE compatibility&lt;/div&gt;&lt;div&gt;- Some feature that allows you get profiling information from the queries in the returned log data&lt;/div&gt;&lt;div&gt;- Check out what the possibilities are for displaying statistics or list over server queries that failed with an error and whether it would be of any use to read from the log files instead of the log table.&lt;/div&gt;&lt;div&gt;- Flesh out a concept for the Advisory/Suggestion system.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-7474609592953988353?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/7474609592953988353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/07/week-8-report.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/7474609592953988353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/7474609592953988353'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/07/week-8-report.html' title='Week 8 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5902573405229587292.post-5109357673829413406</id><published>2011-07-11T16:55:00.009+03:00</published><updated>2011-07-30T21:16:54.824+03:00</updated><title type='text'>Under attack</title><content type='html'>Sigh, I'm currently trying to reduce the damage caused by a DDoS attack on my server. &lt;div&gt;A hacker has found a weak spot in one of my oldest websites (the PHP code I wrote for it is like 5-8 years old).  I've taken the site offline now, nonetheless the flood of requests still seems to slow down the server. But at least it responds again. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The hacker has abused the fact that the comments list on that site has no limit in how much shall be displayed, so the hacker completely overloads the MySQL Server by flooding requests to load all 51000 Comments. Most of you probably gonna slap your forehead when you read this, I do too ;) But this website was made when I started with PHP and serves only a really small gaming community. I have left that community years ago, but left the site online. And the code remained mostly untouched since then. I will need to take it down permanently some day, and let that collection of really bad PHP code rest in peace.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By the way the first indication of a DDoS Attack I found through my newly programmed Monitor Tab in phpMyAdmin which showed me that some queries have been executed several thousand times. So thats an epic win right there :D&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Looking at the logs, the attack is truly distributed. I checked some of the IPs with reverse DNS -the results: Saudi Arabia, Brazil, one ip from Amazon Web Services, China, Romania, ....&lt;/div&gt;&lt;div&gt;Might generate some statistics over all these ips once the attack is over, that would be awesome to have.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[Edit:]&lt;/div&gt;&lt;div&gt;&lt;b&gt;Mini-Statistics:&lt;/b&gt; (counting from like 1 hour after the attack has started)&lt;/div&gt;&lt;div&gt;&lt;div&gt;Amount of DDoS Attacks: 202.299&lt;/div&gt;&lt;div&gt;Amount of IPs from where the attacks come from: 1.106&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/5902573405229587292-5109357673829413406?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/5109357673829413406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/07/under-attack.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/5109357673829413406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/5109357673829413406'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/07/under-attack.html' title='Under attack'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-8265628906496980006</id><published>2011-07-10T21:33:00.004+03:00</published><updated>2011-07-10T21:41:07.317+03:00</updated><title type='text'>GSoC Project LoC</title><content type='html'>Since I love making statistics, I checked very roughly how much lines of code I've added to the phpMyAdmin codebase so far. This does not include a bunch of smaller patches and small code changes, and of course a lot of it is newlines and comments:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;functions.js  : ~100 LoC&lt;/div&gt;&lt;div&gt;server_status.php: ~1000 LoC&lt;/div&gt;&lt;div&gt;server_status.js: 1380 LoC&lt;/div&gt;&lt;div&gt;server_variables.js: 160 LoC&lt;/div&gt;&lt;div&gt;tbl_chart.php: 140 LoC&lt;/div&gt;&lt;div&gt;tbl_chart.js: 240 LoC&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Total: 3020 LoC&lt;/b&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/5902573405229587292-8265628906496980006?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/8265628906496980006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/07/project-loc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/8265628906496980006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/8265628906496980006'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/07/project-loc.html' title='GSoC Project LoC'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-6066491949911656095</id><published>2011-07-10T20:41:00.006+03:00</published><updated>2011-07-10T21:21:05.370+03:00</updated><title type='text'>Week 7 report</title><content type='html'>I've been making good progress on the 'Monitor' Tab. Now the user has the ability to select a time span in any chart, which will load intelligently grouped data from the logs. &lt;div&gt;Also the current configuration is now saved in the browsers local storage (however, currently it doesn't save how the charts are ordered).&lt;/div&gt;&lt;div&gt;&lt;div&gt;I'm quite happy how the monitor turned out so far, though there's still a lot of rough edges that I will have to even out ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Regarding intelligently grouped data:&lt;/i&gt;&lt;/div&gt;&lt;div&gt;Currently, selecting log data does the following (more will come):&lt;/div&gt;&lt;div&gt;- Returns only INSERT, UPDATE, DELETE, SELECT&lt;/div&gt;&lt;div&gt;- Groups together queries that are identical and therefore adds a 'count' column to the result table. &lt;/div&gt;&lt;div&gt;- Truncates long INSERTs and UPDATEs (above 300 chars)&lt;/div&gt;&lt;div&gt;- If selected, groups together INSERTs into the same table. &lt;/div&gt;&lt;div&gt;- Also creates some statistics what query types have been found in this time range&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;What I made this week:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;- Linux CPU / Swap Usage are now correct&lt;/div&gt;&lt;div&gt;- Lots of UI work on for selecting data from the logs. The user can now select a time span in any chart that will load the logs from the general_log or slow_log in that given time span.&lt;/div&gt;&lt;div&gt;- Play/Pause button&lt;/div&gt;&lt;div&gt;- An Instructions/Setup dialog that contains useful information on how to use the Monitor, as well as a bunch of links that allow the user to configure the server to start logging.&lt;/div&gt;&lt;div&gt;- A first implementation of saving the settings to the browsers storage (localStorage)&lt;/div&gt;&lt;div&gt;- A lot of other small UI improvements (e.g. edit mode, better chart tooltip)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What I will do next week:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I will have a lot of small things to do for the Monitor:&lt;/div&gt;&lt;div&gt;- Take into consideration that not every server is on localhost&lt;/div&gt;&lt;div&gt;- Test Monitor without super user rights&lt;/div&gt;&lt;div&gt;- Proper l10n&lt;/div&gt;&lt;div&gt;- A better "chart grid". I think one should be able to select how many 'columns' of charts he wants to have. Maybe some autosize to window width would be useful too.&lt;/div&gt;- More ways to save the monitor settings&lt;br /&gt;&lt;div style="padding:0px; margin:0px; padding-left:15px; "&gt;- IE compatibility&lt;br /&gt;- Import/Export config&lt;br /&gt;- Save how the charts are ordered&lt;/div&gt;&lt;br /&gt;&lt;div&gt;- More ways to extract the data you need for optimizing server/queries&lt;/div&gt;&lt;div&gt;- Generally improve the Monitor to make it more usable for query optimization. Need to research on this a bit more.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If some time is left, I will improve some other parts of pma on which I have wrote a lot of suggestions on the mailing list (i.e. create table dialog).&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/5902573405229587292-6066491949911656095?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/6066491949911656095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/07/week-7-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/6066491949911656095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/6066491949911656095'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/07/week-7-report.html' title='Week 7 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-7326246519978000872</id><published>2011-07-03T00:37:00.000+03:00</published><updated>2011-07-03T23:40:32.866+03:00</updated><title type='text'>Week 6 report</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;This week I made some more progress on the new 'Monitor' tab. But I was also looking up on other query/server optimizer tools, to see how they solved it.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;There's is 2 very good presentations from &lt;a href="http://www.youtube.com/watch?v=onoBTTprCS0"&gt;Oracle&lt;/a&gt; and the &lt;a href="http://www.youtube.com/watch?v=YwxZIOYf_HQ"&gt;Pythian Group&lt;/a&gt; that I recommend watching to anyone who is interested in this topic.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;What I made this week:&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;- A bit of more research how other query optimizer tools are built&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;- In the 'Monitor' Tab the charts can now be removed again and the UI is a bit better&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;- For all the charts, the chart size and refresh rate is changeable (this included building a tiny popup box)&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;- I've implemented cpu, memory and swap usage for windows and linux, however cpu and swap for linux still seem to display incorrect values. Some calcuation must be wrong or a name mistyped, I couldn't figure it out yet.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;What I'm going to do next week:&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;- Fix cpu and swap chart for linux&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;- Below the charts will be starting to build a UI for selecting data from the slow query log and general log&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;- Some sort of play/pause button&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;- When there's time left: Safe the charts to the browser localstorage (next version will add saving to db)&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-7326246519978000872?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/7326246519978000872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/07/week-6-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/7326246519978000872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/7326246519978000872'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/07/week-6-report.html' title='Week 6 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-5349784134945021717</id><published>2011-06-26T23:44:00.002+03:00</published><updated>2011-06-26T23:45:40.627+03:00</updated><title type='text'>Week 5 report</title><content type='html'>Little to report this week. I've again fixed a lot of bugs and visual issues on my existing code, such as:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For live charting there was a 'race condition' bug. When the user changed the chart refresh rate while an ajax request is in progress, it would the ajax requests would start twice each interval.&amp;nbsp;&lt;/li&gt;&lt;li&gt;For users where client and server are in a different timezone the chart did not work. I fixed this by always using the server time.&amp;nbsp;&lt;/li&gt;&lt;li&gt;And as planned, I have done a considerable amount of research on how to build a query optimizer. I came to the conclusion that I will build a tool similar to the MySQL Query optimizer from Oracle.&lt;br /&gt;And finally, I have already started coding this tool this week.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;So my plan for the next few weeks is to build:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A page where the user can monitor as many variables as he wants. It will offer a UI to add/remove charts.&lt;/li&gt;&lt;li&gt;If the db server is local, the user can also select to display cpu usage and memory usage&lt;/li&gt;&lt;li&gt;I want to have one or several&amp;nbsp;possibilities&amp;nbsp;to display queries for a certain timeframe, extracted from the general_log and/or slow_query log.&lt;/li&gt;&lt;li&gt;Either some sort of data recording or a play/pause button + zoom feature&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Having such functionality should allow one to systematically identify badly performing queries.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Although it seems so obvious now to build a query optimizer in this way, it took me quite a lot of thinking to figure this out. So I'm glad I've accomplished that this week.&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-5349784134945021717?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/5349784134945021717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/06/week-5-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/5349784134945021717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/5349784134945021717'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/06/week-5-report.html' title='Week 5 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-6464660999400740263</id><published>2011-06-19T23:48:00.002+03:00</published><updated>2011-06-19T23:48:16.129+03:00</updated><title type='text'>Week 4 report</title><content type='html'>Right in the beginning of Week 4 my mentor proposed to merge all the coding I've done so far to the master branch of pma. So I spent most of the time formatting the code, adding localization and tracking down bugs which were plentiful, since I didn't test my code with all configurations.&lt;br /&gt;That and other problems &lt;span class="Apple-style-span" style="font-size: x-small;"&gt;(1. git making problems because my repos is synced over dropbox, 2. my wife's flight on&amp;nbsp;Friday&amp;nbsp;got cancelled due to technical problems, 3. my hurting shoulders force me to make regular breaks from the PC) &amp;nbsp;&lt;/span&gt;kept me from reaching all the goals I planned for this week.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What I did this week:&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- &lt;/b&gt;Clean, localize and fix my code for merging it to the master branch&lt;br /&gt;- Process/Connection charting on the status page&lt;br /&gt;- Server variable editing on the variables page. This will be really helpful for users tweaking mysql server performance. Also the table width adjusts to the window width now, because long variables cause the table to be over 100% wide, through that you can't see the variable name and it's value without scrolling horizontally.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What I will do next week:&lt;/b&gt;&lt;br /&gt;- I probably will need to spend most of the time to flesh out some concrete concepts on how to make good use of the slow query log and general log. Simply displaying those tables will not result in something useful, so it might be a good idea to instead generate charts over the log data. That will require more research on how performance issues can be pinned down with those 2 logs. So in the process I also might have some starting point for a sort of 'performance advisor' system that I planned. Secondly, I guess I will have to build myself some sort of testing&amp;nbsp;environment, that is, simulating heavy load on my local mysql server.&lt;br /&gt;&lt;br /&gt;- Also I still hope to implement the data selection for table charting that I planned to build last week.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-6464660999400740263?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/6464660999400740263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/06/week-4-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/6464660999400740263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/6464660999400740263'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/06/week-4-report.html' title='Week 4 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-6200914045180202677</id><published>2011-06-13T00:22:00.003+03:00</published><updated>2011-06-13T00:26:57.400+03:00</updated><title type='text'>Week 3 report</title><content type='html'>I've achieved most of my goals except for the network traffic graph, mostly because I don't know how to aesthetically include it to the current tab. Also by Suggestion of my Mentor I didn't implement JPEG and PDF export as it is not really required.&lt;br /&gt;One really nice thing I've done now is putting awesome looking highcharts everywhere and deleted all pChart related files from my repository.&lt;br /&gt;And while I was replacing the table charting I realized that the previous implementation was veeery basic, so I added some more features like allowing which column to use as x-axis and therefore removed the margin field because they seem pretty useless to me. Here's a comparison (for the old version I had the data in the wrong format):&lt;br /&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://4.bp.blogspot.com/-7Pq0iBnztsU/TfUoLGpvXCI/AAAAAAAAAsQ/xrqzh7e2ATE/s1600/tabl_chart_new.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="116" src="http://4.bp.blogspot.com/-7Pq0iBnztsU/TfUoLGpvXCI/AAAAAAAAAsQ/xrqzh7e2ATE/s200/tabl_chart_new.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/-nHyGmh9LIec/TfUn0Y_5aiI/AAAAAAAAAsM/GJTrNqNlxWE/s1600/tabl_chart_old.png" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="118" src="http://3.bp.blogspot.com/-nHyGmh9LIec/TfUn0Y_5aiI/AAAAAAAAAsM/GJTrNqNlxWE/s200/tabl_chart_old.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;Also for big amounts of data, the graph (in the old and new version) is completely overwhelmed, so I'm thinking of adding a feature that allows you to select which region of data you want to display. Last friday I was mostly investigating on how to do that. Probably will use some really good &lt;a href="http://www.highcharts.com/demo/dynamic-master-detail"&gt;feature&lt;/a&gt; from Highcharts.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Something I forgot to mention last week: In my original proposal I suggested to use the slow_query_log with a long_query_time set to zero. But in my tests it appeared that not every query is logged although it's supposed to. Unfortunately there is little information available about setting long_query_time to zero; I also &lt;a href="http://forums.mysql.com/read.php?20,420526,420695#msg-420695"&gt;asked&lt;/a&gt; in the official mysql forums with no real success a long time ago. I probably will have to use the general query log alone and/or make a bug report about this hoping for it to get fixed.&lt;br /&gt;That is a bit unfortunate because the slow_query_log would have provided us with useful information which is not present in the general_log. Either way, I'm still going to build a 'slow queries' tab to help identify slow queries.&lt;br /&gt;&lt;br /&gt;And finally I'm thinking of whether I should build some small interface that allows one to edit the variables on the variables page. That probably might also be quite helpful when trying to optimize the server.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;What I did this week:&lt;/b&gt;&lt;br /&gt;- Processes + Connections chart in the server traffic tab on the server status page&lt;br /&gt;- Chart Export now also works for SVG, whereas JPEG and PDF is now removed&lt;br /&gt;- Replaced pChart charts everywhere with Highcharts&lt;br /&gt;- Quite some bug fixing and code cleanup&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;What I'm planning for next week:&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- &lt;/b&gt;Getting an idea how to place the network traffic graph and implement it&lt;br /&gt;- Add above discussed data selection to the table charting, if it doesn't consume too much time.&lt;br /&gt;- Add a 'slow queries' tab to the server status page&lt;br /&gt;- Probably adding some edit feature for server variables.&lt;br /&gt;- With the remaining time: Evaluate some useful information extractions from the general_log&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-6200914045180202677?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/6200914045180202677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/06/week-3-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/6200914045180202677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/6200914045180202677'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/06/week-3-report.html' title='Week 3 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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/-7Pq0iBnztsU/TfUoLGpvXCI/AAAAAAAAAsQ/xrqzh7e2ATE/s72-c/tabl_chart_new.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5902573405229587292.post-3208415290326563842</id><published>2011-06-07T22:39:00.013+03:00</published><updated>2011-06-08T01:02:30.976+03:00</updated><title type='text'>Small progress report</title><content type='html'>A before/after screenshot after replacing pChart with Highcharts for the data when query profiling is enabled. The Highcharts-chart also shows a more informative, better looking tooltip than pChart does.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-oSyTt2pTF2U/Te5_cd_RMiI/AAAAAAAAAro/sCAgZrAsSTM/s1600/profiling_before.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="198" src="http://1.bp.blogspot.com/-oSyTt2pTF2U/Te5_cd_RMiI/AAAAAAAAAro/sCAgZrAsSTM/s320/profiling_before.png" width="320" /&gt;&lt;/a&gt;&lt;/div&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://3.bp.blogspot.com/-yxrEnLNh_fk/Te6AZaqsFVI/AAAAAAAAArw/LAt2bGi96sM/s1600/profiling_after.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="193" src="http://3.bp.blogspot.com/-yxrEnLNh_fk/Te6AZaqsFVI/AAAAAAAAArw/LAt2bGi96sM/s320/profiling_after.png" width="320" /&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/5902573405229587292-3208415290326563842?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/3208415290326563842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/06/small-progress-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/3208415290326563842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/3208415290326563842'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/06/small-progress-report.html' title='Small progress report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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/-oSyTt2pTF2U/Te5_cd_RMiI/AAAAAAAAAro/sCAgZrAsSTM/s72-c/profiling_before.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5902573405229587292.post-2030949362172431953</id><published>2011-06-06T01:10:00.002+03:00</published><updated>2011-06-06T01:13:59.303+03:00</updated><title type='text'>Week 2 report</title><content type='html'>I'm really happy how my second week turned out because I've got the permit from my Mentor to replace pmas current and rather undynamic, server-side charting library pChart with a client-side library called highcharts which gives me much more possibilities and speed improvement. The reason pChart was selected for use in pma is that an image generated chart would allow the user to save/export it. However in the way pChart is currently implemented a export is not possible because the charts that are being sent to the client are split into 20 pieces using &lt;a href="http://en.wikipedia.org/wiki/Data_URI_scheme"&gt;Data URI Scheme&lt;/a&gt;&amp;nbsp;for compatibility reasons (IE8 limits data urls to 32kb).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What I did this week:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;- My initial goal to merge some of the pages turned out that I've currently put the processes list into the status pages, whereas the other pages Charsets, Engines and Variables have been put and the end of the menu bar by Marc, which is also a good solution.&lt;br /&gt;&lt;br /&gt;- I've successfully added real-time charting the way I planned it. Currently it's working for queries sent to the server on the query statistics tab, which also gives very useful information on each points tooltip where it displays what type of queries have been sent. And I'm happy that after lots of research I could solve the main concern of client-side charting libraries, which is the exporting of charts. Highcharts does have an export feature, but it's relying on either an external service provided by highcharts.com or uses Batik, a library written in Java to parse and convert SVG. Since the pma team (and me too) prefers to not rely on an external service (and adding java as requirement is out of question) I added a small js library called canvg that can convert SVG-Graphics into a html5 canvas element which is already stored as image internally. With only minimal changes I was able to adjust the already provided export feature by highcharts to make it convert to a html5 canvas and is then sent via POST to a php script that basically just echos it back with a force-download header. I might add the lib&amp;nbsp;&lt;a href="https://github.com/dcneiner/Downloadify"&gt;Downloadify&lt;/a&gt;, that would save us the echo service altogether.&lt;br /&gt;Best of all is that, charting and exporting should both work in all major browsers. Exporting in IE8 currently does not work due to a bug in canvg that I have reported and already is&amp;nbsp;acknowledged&amp;nbsp;by the original author and thus hopefully fixed soon.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What I'm planning for next week:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;- Currently there is only one real-time chart for queries. I'd also like to add one for processes and connections &amp;nbsp;and maybe for network traffic.&lt;br /&gt;&lt;br /&gt;- The chart export currently only exports to PNG, I will look into the code to see whether I can also add SVG, PDF and JPEG export.&lt;br /&gt;&lt;br /&gt;- But most of all, I will be looking forward to replace pChart with highcharts. Since pChart is used at only 3 places this should be fairly easy (but maybe time consuming). Replacing the charts for query statistics and profiling will be a piece of cake, since the charting data is being sent along anyway. Only the work on replacing pChart for graphical display of query results will be a bit bigger.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-2030949362172431953?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/2030949362172431953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/06/week-2-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/2030949362172431953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/2030949362172431953'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/06/week-2-report.html' title='Week 2 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-7973196144237423955</id><published>2011-05-28T23:03:00.000+03:00</published><updated>2011-05-28T23:03:59.711+03:00</updated><title type='text'>Week 1 report</title><content type='html'>As mentioned in my previous blog I spent the last days learning for a really difficult (and probably last) exam that I had yesterday (and gladly turned out well), so I had not so much time to work on pma.&lt;br /&gt;What I did accomplish however is a bigger reorganization of the code, so that the single tabs of the status page can be refreshed via ajax. Also I fixed some bugs that I introduced with the changes I made in the week before as well as some fixes in other parts of pma. And finally I have fixed the reported bug 'Query Statistics add to well over 250% - ID: 3242060'.&lt;br /&gt;&lt;br /&gt;Altogether I would say my project goal 'Restructure the page, add more interactivity to it' has been completed, and I have come up with a good idea for server status charting which is what I'm going to work on next week. Also I want to merge together some pages, which I already wanted to do last week, but lacked the time.&lt;br /&gt;&lt;br /&gt;My initial idea of using a cronjob to record server status variables over time in order to chart them has the big disadvantage that additional setup is required which not every user can do as well as a low data density since cronjobs can not run more often than once every minute.&lt;br /&gt;&lt;br /&gt;So I'm thinking to first implemented a windows task-manager-like charting that does an AJAX request every x seconds and thus slowly filling the chart. That allows for accurate&amp;nbsp;real-time&amp;nbsp;information which does not require any setup. For long term server status charting, a cronjob method could still be implemented as alternative.&lt;br /&gt;&lt;br /&gt;Looking forward to build more cool stuff! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-7973196144237423955?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/7973196144237423955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/05/week-1-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/7973196144237423955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/7973196144237423955'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/05/week-1-report.html' title='Week 1 report'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-5611248131234327665</id><published>2011-05-23T18:13:00.000+03:00</published><updated>2011-05-23T18:13:10.573+03:00</updated><title type='text'>First day of work</title><content type='html'>So today is the first official working day for the google summer of code. Gladly I could finish quite some work already last week so I can spend some more time learning for my last exam on friday.&lt;br /&gt;&lt;br /&gt;What I've done so far for the status page:&lt;br /&gt;- Reorganized the layout and separated the statistics into tabs&lt;br /&gt;-&amp;nbsp;JavaScript&amp;nbsp;filtering by name, category and alarm values.&lt;br /&gt;- Query chart loads&amp;nbsp;asynchronously&amp;nbsp;to speed up page loading&lt;br /&gt;&lt;br /&gt;I also added the&amp;nbsp;JavaScript&amp;nbsp;filtering by name to the variables page.&lt;br /&gt;&lt;br /&gt;What I'm going to do this week:&lt;br /&gt;- i18n for the added Texts&lt;br /&gt;- some CSS fixes, that will also improve other parts of phpMyAdmin&lt;br /&gt;- Putting together Charsets, Engines, Processes and Status page into one page&lt;br /&gt;- From what time is left: Further research on a proper history recording for server load and query history.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-5611248131234327665?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/5611248131234327665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/05/first-day-of-work.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/5611248131234327665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/5611248131234327665'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/05/first-day-of-work.html' title='First day of work'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5902573405229587292.post-2595807157572130310</id><published>2011-05-15T22:00:00.000+03:00</published><updated>2011-05-15T22:00:48.220+03:00</updated><title type='text'>Prepared to code</title><content type='html'>Since I have a fairly difficult exam (statistics &amp;amp;&amp;nbsp;probability theory - how fitting ;), on may 27 I thought I start doing some coding a week earlier so I have enough time to learn in the evenings.&lt;br /&gt;&lt;br /&gt;So tomorrow, I am going to restructure the status variables into one big table and then add filtering options that filter values with javascript. This can happen without AJAX, so it should turn out really fast.&lt;br /&gt;I'm thinking of a simple textarea that filters the values as you type, as well as a checkbox to filter for bad values (the ones marked red) and a drop-down list for filtering by category.&lt;br /&gt;&lt;br /&gt;Once that is done, I will start my work on some proper server status recording &amp;amp; charts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-2595807157572130310?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/2595807157572130310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/05/prepared-to-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/2595807157572130310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/2595807157572130310'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/05/prepared-to-code.html' title='Prepared to code'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-3882132852298411044</id><published>2011-04-30T14:24:00.009+03:00</published><updated>2011-05-01T16:45:40.232+03:00</updated><title type='text'>Some better colors for charts</title><content type='html'>&lt;div&gt;I've decided to browse through some of the phpMyAdmin code in order to get more familiar with it. &lt;/div&gt;&lt;div&gt;So I started my day by looking through all the include files of server_status.php (finding all kinds of curiosities like &lt;i&gt;&lt;span class="Apple-style-span"&gt;/* We must do hard way... but almost no chance to execute this */&lt;/span&gt;&lt;/i&gt;) and somehow ended up with recoding the chart classes to make them use theme-specific colors, since I found those green colors awfully unfitting from the day I saw them. Also, when I'm going to rebuild the Status page, I don't want to have green graphs there ;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So this is the result in the themes original and pmahomme (before/after pics):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/-GCwPtI8D-p0/TbvzMro67EI/AAAAAAAAApQ/6YgxfpTxpLs/s1600/pma_chart_original.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img src="http://2.bp.blogspot.com/-GCwPtI8D-p0/TbvzMro67EI/AAAAAAAAApQ/6YgxfpTxpLs/s320/pma_chart_original.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5601337960763681858" style="cursor: pointer; width: 320px; height: 281px; " /&gt;&lt;/a&gt; &lt;a href="http://3.bp.blogspot.com/-WU6Zs1HUlyw/TbvzHRZYPfI/AAAAAAAAApI/pegaCxtybcU/s1600/pma_chart_homme.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img src="http://3.bp.blogspot.com/-WU6Zs1HUlyw/TbvzHRZYPfI/AAAAAAAAApI/pegaCxtybcU/s320/pma_chart_homme.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5601337867819826674" style="cursor: pointer; width: 320px; height: 258px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since there was such a nice 'layout.inc.php' in each theme folder defining some colors, I thought it'd be best place to put the color definitions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I will be posting the patch to the mailing list and push the changes to my repos once I figured out how it works :|&lt;/div&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/5902573405229587292-3882132852298411044?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/3882132852298411044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/04/some-better-colors-for-charts.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/3882132852298411044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/3882132852298411044'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/04/some-better-colors-for-charts.html' title='Some better colors for charts'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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/-GCwPtI8D-p0/TbvzMro67EI/AAAAAAAAApQ/6YgxfpTxpLs/s72-c/pma_chart_original.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5902573405229587292.post-1404663508067818825</id><published>2011-04-26T11:18:00.002+03:00</published><updated>2011-04-26T12:32:29.516+03:00</updated><title type='text'>GSoC 2011: More Statistics for the status page</title><content type='html'>&lt;div&gt;I am very delighted to hear that my proposal for 'Query statistics &amp;amp; charts for the status page' has been accepted to the Google summer of Code Program. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the course of the next few months I will turn the phpMyAdmin Status page from a plain collection of server variables into a sophisticated query statistics and analytics tool, as well as server health statistics. But I also really would like to add some completely unplanned improvements since I always get countless ideas what could be done better while I'm coding. However, I will make sure that it's actually useful for everyone by communicating actively about my progress and ideas on the pma mailing list.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is a short summary of what I've planned, for now:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Restructure the status page. Organize status variables into jQuery Tabs.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add some code that allows for recording of server status data, and use those in return to generate graphs about the general server health. In the process of this I would also like to make sure that the configuration of the database (where the data will be stored in) can be done easily through the phpMyAdmin interface, and not through the config.inc.php. Unfortunately this feature will be limited to users that have the possibility to set up cronjobs.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;With the help of MySQLs slow_query_log we can extract a bunch of very useful graphs such as:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Amount of queries by user&lt;/li&gt;&lt;li&gt;Amount of queries vs time chart, to help identify at what times the server is more busy&lt;/li&gt;&lt;li&gt;List of particularly slow queries&lt;/li&gt;&lt;li&gt;Common queries that use non-indexed fields in the WHERE Statement, which is a well known performance pitfall.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;To some degree, I'd like to develop a tool that helps with optimizing queries. I would do this by looking at well known optimization techniques and trying to identify programmatically where they could be applied to.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;I am very excited in implementing these features, since I regularly use phpMyAdmin myself and always enjoy looking at the statistics. So these changes will benefit me directly when working on future Website projects.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lastly I would like to thank the phpMyAdmin Mentors for choosing my project and Google for this amazing program!&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/5902573405229587292-1404663508067818825?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/1404663508067818825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2011/04/gsoc-2011-more-statistics-for-status.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/1404663508067818825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/1404663508067818825'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2011/04/gsoc-2011-more-statistics-for-status.html' title='GSoC 2011: More Statistics for the status page'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-97167825028315873</id><published>2009-11-24T02:13:00.010+02:00</published><updated>2009-12-23T16:53:59.920+02:00</updated><title type='text'>10 Great Libraries/Links for Web2.0 Websites</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A few great Javascript Libraries and other Links that I used and which I'd like to share:&lt;/p&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;1. &lt;a href="http://www.berniecode.com/writing/animator.html"&gt;Animator&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Create perfectly smooth animations with this library, you can even use CSS to describe the animation transitions. There's probably no animation idea &lt;i&gt;Animator&lt;b&gt; &lt;/b&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;couldn't handle.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;Easy to implement and fairly easy to use.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;2. &lt;a href="http://www.dolem.com/lytebox/"&gt;Lytebox&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;A packed, single file version of the &lt;a href="http://www.huddletogether.com/projects/lightbox2/"&gt;Lightbox 2&lt;/a&gt;, which is great for overlaying pictures on your website. Particularly great for galleries, as it let's you navigate through the images. &lt;/div&gt;&lt;div&gt;Very easy to implement and very easy to use (just add a &lt;i&gt;rel&lt;/i&gt; parameter to your linked images)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;3. &lt;a href="http://www.dhtmlgoodies.com/index.html?page=folderTree"&gt;Drag&amp;amp;Drop Tree&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;If you want intuitive file management, then drag&amp;amp;drop in trees is the way to go. The gurus at dhtmlgoodies.com offer you one good implementation of that. Though it took quite some adjustments for me to get it working smoothly, it was a great help to me.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;4. &lt;a href="http://digitarald.de/project/fancyupload/3-0/showcase/photoqueue/"&gt;Fancy Uploader&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The one thing HTML4/XHTML is missing: Multiple file upload within one dialog. A great tool to make your uploads more user friendly. A bit hard to set up though.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;5. &lt;a href="http://code.google.com/p/reallysimplehistory/"&gt;Really Simple History&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;I haven't used this one yet but I'm planning to implement this into my website.  One problem with making a website fully AJAX is that the functionality of the history button gets lost. This lib is one way how to bring it back.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;6. &lt;a href="http://homepage.ntlworld.com/bobosola/"&gt;PNGfix&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;IE6 is not the newest browser, but still being used by a lot of people. And one big frustration about making a website IE6 compatible is that it's lacking alpha transparency. This small script automatically fixes all PNG-Images in your source code through a microsoft filter. All you gotta do is to load the script.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;7. &lt;/b&gt;&lt;span class="Apple-style-span"&gt;&lt;a href="http://ajaxload.info/"&gt;&lt;b&gt;Ajaxload.info&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;A collection for fully customizable Web2.0 loading animations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;8. &lt;/b&gt;&lt;a href="http://googlesystem.blogspot.com/2009/06/tips-for-making-websites-run-faster.html"&gt;&lt;b&gt;Tips for Making Websites Run Faster&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/div&gt;&lt;div&gt;A great Firefox plug in that gives you many tips on how to optimize your website speed&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;9. &lt;/b&gt;&lt;a href="http://www.famfamfam.com/lab/icons/silk/"&gt;&lt;b&gt;Silk Icons&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;1000 Free-to-use awesome-looking 16x16 Pixel icons. I use them everywhere&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;10. &lt;/b&gt;&lt;a href="http://www.freesound.org/index.php"&gt;&lt;b&gt;The Free Sound Project&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;A collection of free sounds&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/5902573405229587292-97167825028315873?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/97167825028315873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2009/11/great-javascript-resources.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/97167825028315873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/97167825028315873'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2009/11/great-javascript-resources.html' title='10 Great Libraries/Links for Web2.0 Websites'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-1589831791799017616</id><published>2009-11-22T02:52:00.019+02:00</published><updated>2010-12-30T19:42:07.922+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><title type='text'>Web 2.0 Thoughts</title><content type='html'>&lt;span&gt;As a web developer you are confronted with a massive wave of emerging technologies like scripting languages (PHP, Python, Ruby on Rails, Zope,..), data storage systems (MySQL, PostgreeSQL, SQLite, XML, Cloud), protocols (JSON, AJAX/HTTP), web services (twitter, youtube, gmail, facebook,..), content management systems (Typo3, Joomla,...) and ever growing software, addons &lt;/span&gt;and libraries.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nowadays being a web developer is a completely different matter like it was 7 years ago when I started my "Internet-career". Back then, it still was an achievement to be able to create your own file upload and file listing in simple HTML and PHP. Over the years, the server side scripting languages have become less and less important and follow a shadowy existence by now, as the client scripting side, namely JavaScript, was put in the spotlight with it's great promise: AJAX.&lt;/div&gt;&lt;div&gt;If you want to have a modern website it is infeasible not to use JavaScript, which increases the efforts by much more than it was 7 years ago. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We all follow the hidden obligation to re-implement 40 years of user interface design into every common browser, without breaking compatibility to older browsers or technologies (like the Browsers Back button).&lt;/div&gt;&lt;div&gt;That not only requires a big set of expertise and will of learning but also endless nights of experimenting and trying out which configuration works for which browser.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Gladly, many many excellent tools and libraries have been written, available for the greater public on which I stumble upon from time to time. &lt;/div&gt;&lt;div&gt;I'm particularly astonished about all the existing JavaScript Libararies like Prototype, jQuery, DoJo, Mootools, etc. serving Multipurpose functionality to the mass. They seem to have a big establishment in Web2.0 Websites by now. &lt;/div&gt;&lt;div&gt;Frankly, I was never a big fan of bulky libraries when you have the chance to put together or program the things you need yourself.&lt;/div&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/5902573405229587292-1589831791799017616?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/1589831791799017616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2009/11/web-20-thoughts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/1589831791799017616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/1589831791799017616'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2009/11/web-20-thoughts.html' title='Web 2.0 Thoughts'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-9031598830823179853</id><published>2009-10-17T20:24:00.014+03:00</published><updated>2010-12-30T19:53:15.147+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UTF-8'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>How to make your PHP Website UTF8 ready</title><content type='html'>&lt;span style="font-family:verdana;"&gt;After many days of frustration I think, I hope, I finally figured out how to configure my server and php code the right way to enable bug free UTF-8 on my website, which certainly took me a day or two to achieve.&lt;/span&gt;&lt;span style="font-family:lucida grande;"&gt;     &lt;/span&gt;&lt;span style="font-family:verdana;"&gt; Lets begin with the...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;"&gt;&lt;span style="font-size:130%;"&gt;Browser&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style=";font-family:verdana;font-size:100%;"&gt; From what I have seen is that at least Firefox and IE listen just to the Line&lt;/span&gt;&lt;span style="font-style: italic;font-family:lucida grande;"&gt;&lt;span style="font-size:100%;"&gt; 'Content-Type: text/html;'&lt;/span&gt; charset=utf-8&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;' in the HTTP header and simply ignore my meta tag on my websites:&lt;/span&gt; &lt;pre id="line1" style="font-family:verdana;"&gt;&lt;blockquote style="font-style: italic;"&gt;&lt;span class="start-tag"&gt;&amp;lt;meta&lt;/span&gt;&lt;span class="attribute-name"&gt; http-equiv&lt;/span&gt;=&lt;span class="attribute-value"&gt;"Content-Type" &lt;/span&gt;&lt;span class="attribute-name"&gt;content&lt;/span&gt;=&lt;span class="attribute-value"&gt;"text/html;charset=utf-8"&lt;/span&gt;&gt;&lt;br /&gt;&lt;/blockquote&gt;So the first thing I did is to add this line of php code before any text is printed out: &lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;header('Content-type: text/html; charset=utf-8');&lt;/span&gt;&lt;/blockquote&gt;&lt;/pre&gt;&lt;span style="font-family:verdana;"&gt; But its also possible to achieve the same using the AddDefaultCharSet directive in the apache config.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;MySQL Database&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;MySQL allows collations to be set on each table and text/char field. As the MySQL manual already tells this setting won't concern you at all until you start searching with unicode characters. So you can leave that to whatever setting you want when you don't search for it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;PHP Code&lt;/span&gt;&lt;br /&gt;I've ran into several difficulties when writing user input from a form into my database.&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;The first thing I had to change is to append the parameter &lt;span style="font-style: italic;"&gt;accept-charset="UTF-8"&lt;/span&gt; to all my &amp;lt;form&amp;gt;'s otherwise you'll get some ISO encoded chars in your DB.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Secondly, I ran into a bug when using htmlentities() converting umlauts wrongly. I realized you also need to tell htmlentities() the charset in which you want to work on. I solved it with using &lt;span style="font-style: italic;"&gt;htmlentities($mytext,ENT_COMPAT,'UTF-8');&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;AJAX&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;When I was in the process of getting UTF-8 working I always suspected that my AJAX code / XMLHttpRequest() was some of the cause of the problems. But the only point where you can do something with the charset is by setting the request header (myRequest.setRequestHeader) for the right content-type (just like with the browser http header) before sending your http request. And I guess when you don't explicitly specifiy your charset there the Browser uses the Content-Type charset given from the website&lt;/span&gt;s http header.&lt;/span&gt;&lt;div&gt;&lt;span style="font-family:verdana;"&gt;So no tweaks needed here. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:verdana;"&gt;If you got this all your done! Your Site should work for 99.5% of your users.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-9031598830823179853?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/9031598830823179853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2009/10/how-to-make-your-php-website-utf8-ready.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/9031598830823179853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/9031598830823179853'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2009/10/how-to-make-your-php-website-utf8-ready.html' title='How to make your PHP Website UTF8 ready'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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-5902573405229587292.post-2888451083437215540</id><published>2009-09-30T05:24:00.001+03:00</published><updated>2009-10-18T15:51:38.628+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UTF-8'/><title type='text'>Why UTF-8 sucks</title><content type='html'>&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Because you can configure it at every goddamn place. Assuming I want to set up an ordinary website with php and mysql. Then you can configure it at:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Apache config&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PHP config&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PHP MySQL module config&lt;/li&gt;&lt;li&gt;MySQL general config&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Each text/char/varchar field in the particular MySQL tables&lt;/li&gt;&lt;li&gt;When you process the Data in your PHP Script and when you receive/transport Data via GET/POST&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the metadata each HTML site&lt;/li&gt;&lt;li&gt;On each AJAX Request you make&lt;br /&gt;&lt;/li&gt;&lt;li&gt;On each browser visiting the site&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Thats not only plain confusing for the admin but between each program/module you have the possibility to somehow screw up something with the conversion if not all of them is set to UTF-8&lt;br /&gt;It's always been a pain in the ass to make my websites UTF-8; some users always had problems getting it displayer correctly.&lt;br /&gt;&lt;br /&gt;Now i got the problem that normally submitted data works fine, but data containing umlauts submitted over AJAX are displayed wrongly. Hail utf-8 -.-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5902573405229587292-2888451083437215540?l=tyronx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tyronx.blogspot.com/feeds/2888451083437215540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tyronx.blogspot.com/2009/09/why-utf-8-sucks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/2888451083437215540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5902573405229587292/posts/default/2888451083437215540'/><link rel='alternate' type='text/html' href='http://tyronx.blogspot.com/2009/09/why-utf-8-sucks.html' title='Why UTF-8 sucks'/><author><name>Tyron M</name><uri>http://www.blogger.com/profile/12756803063531956976</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></feed>
