diff --git a/about/index.html b/about/index.html index 2575ce3bb..299f4c773 100644 --- a/about/index.html +++ b/about/index.html @@ -185,6 +185,10 @@

Recent Posts

diff --git a/atom.xml b/atom.xml index b7ecc3b40..1fc078487 100644 --- a/atom.xml +++ b/atom.xml @@ -4,7 +4,7 @@ <![CDATA[atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ @@ -13,6 +13,53 @@ Octopress + + <![CDATA[Call for Ideas: Graphical Test Coverage Reports]]> + + 2015-07-27T13:04:00+03:00 + http://atodorov.org/blog/2015/07/27/call-for-ideas-graphical-test-coverage-reports + If you are working with Python and writing unit tests chances are you are +familiar with the coverage reporting +tool. However there are testing scenarios in which we either don’t use unit tests +or maybe execute different code paths(test cases) independent of each other.

+ +

For example, this is the case with installation testing in Fedora. Because anaconda +- the installer is very complex the easiest way is to test it live, not with unit tests. +Even though we can get a coverage report (anaconda is written in Python) it reflects +only the test case it was collected from.

+ +

coverage combine can be used to combine several data files and produce an aggregate +report. This can tell you how much test coverage you have across all your tests.

+ +

As far as I can tell Python’s coverage doesn’t tell you how many times a particular +line of code has been executed. It also doesn’t tell you which test cases executed +a particular line +(see PR #59). +In the Fedora example, I have the feeling many of our tests are touching the same +code base and not contributing that much to the overall test coverage. +So I started working on these items.

+ +

I imagine a script which will read coverage data from several test executions +(preferably in JSON format, +PR #60) and produce a +graphical report similar to what GitHub does for your commit activity.

+ +

See an example here!

+ +

The example uses darker colors to indicate more line executions, lighter for less +executions. Check the HTML for the actual numbers b/c there are no hints yet. +The input JSON files are +here and +the script to generate the above HTML is at +GitHub.

+ +

Now I need your ideas and comments!

+ +

What kinds of coverage reports are you using in your job ? How do you generate them ? +How do they look like ?

+]]>
+
+ <![CDATA[Open Data Event Coming to Sofia]]> @@ -2173,63 +2220,6 @@ the system has. I’ve still not figured that out entirely.

For more information please read Chapter 25 from Red Hat’s Storage Administration Guide

-]]> -
- - - <![CDATA[Mining E-mail Identities with Gravatar]]> - - 2015-03-16T23:16:00+02:00 - http://atodorov.org/blog/2015/03/16/mining-e-mail-identities-with-gravatar - Recently I’ve laid my hands on a list of little over 7000 email addresses. -This begs the question how much of them are still in use and what for ?

- -

My data is not fresh so I’ve uploaded the list to Facebook and created a custom -audience. 2400 of 7129 addresses were recognized - 30% of these addresses are -on Facebook and easy to target! Need to figure out which ones.

- -

I could have tried some sort of batch search combined with the custom audience -functionality but I didn’t find an API for that and decided not to bother. -Instead I’ve opted for Gravatar.

- -
gravatars.sh
-
1
-2
-3
-4
-5
-6
-
#!/bin/bash
-
-while read LINE; do
-    HASH=`echo -n $LINE | md5sum | cut -f1 -d' '`
-    wget "http://gravatar.com/avatar/$HASH" -O "$LINE"
-done < /dev/stdin
-
- - -

Feed gravatars.sh with the email list and it will download all images to the -current working directory and use the address as the file name. After -md5sum *@* | cut -f1 -d' ' | sort | uniq -c I quickly noticed the following:

- -
    -
  • 4563 addresses have the a1719586837f0fdac8835f74cf4ef04a check-sum; These are -not found on Gravatar.
  • -
  • 2400 addresses have the d5fe5cbcc31cff5f8ac010db72eb000c check-sum. These are -addresses which are registered with Gravatar but didn’t bother to change the default -image.
  • -
  • 166 remaining addresses, each with a different check-sum. These have their custom -pictures uploaded to Gravatar and probably much more actively used.
  • -
- - -

A second check with Facebook reveals 900 out of these 2566 addresses were recognized. -This begs the question is Facebook showing incorrect stats or are there 1500 addresses -using Gravatar (or have used at some point) which are not on Facebook ?

- -

At least some of the remaining 4000 addresses are still active and used to send emails. -Next I will be looking for ways to identify them. Any suggestions and comments are more -than welcome!

]]>
diff --git a/blog/2011/03/14/usb-multi-seat-on-red-hat-enterprise-linux-6/index.html b/blog/2011/03/14/usb-multi-seat-on-red-hat-enterprise-linux-6/index.html index 108162cc9..3c8a2cbee 100644 --- a/blog/2011/03/14/usb-multi-seat-on-red-hat-enterprise-linux-6/index.html +++ b/blog/2011/03/14/usb-multi-seat-on-red-hat-enterprise-linux-6/index.html @@ -494,6 +494,10 @@

Recent Posts

diff --git a/blog/2011/09/15/protected-rpm-repositories-with-yum-and-ssl/index.html b/blog/2011/09/15/protected-rpm-repositories-with-yum-and-ssl/index.html index 70076d079..57b82d419 100644 --- a/blog/2011/09/15/protected-rpm-repositories-with-yum-and-ssl/index.html +++ b/blog/2011/09/15/protected-rpm-repositories-with-yum-and-ssl/index.html @@ -399,6 +399,10 @@

Recent Posts

diff --git a/blog/2012/02/10/spinning-up-a-development-instance-on-openshift/index.html b/blog/2012/02/10/spinning-up-a-development-instance-on-openshift/index.html index 444ed68c2..db5eb3d2e 100644 --- a/blog/2012/02/10/spinning-up-a-development-instance-on-openshift/index.html +++ b/blog/2012/02/10/spinning-up-a-development-instance-on-openshift/index.html @@ -250,6 +250,10 @@

Recent Posts

diff --git a/blog/2012/02/18/how-to-update-dependencies-on-openshift/index.html b/blog/2012/02/18/how-to-update-dependencies-on-openshift/index.html index 49d1b330c..807efc089 100644 --- a/blog/2012/02/18/how-to-update-dependencies-on-openshift/index.html +++ b/blog/2012/02/18/how-to-update-dependencies-on-openshift/index.html @@ -328,6 +328,10 @@

Recent Posts

diff --git a/blog/2012/03/09/how-to-get-to-the-openshift-shell/index.html b/blog/2012/03/09/how-to-get-to-the-openshift-shell/index.html index 5461efbb2..2b747a225 100644 --- a/blog/2012/03/09/how-to-get-to-the-openshift-shell/index.html +++ b/blog/2012/03/09/how-to-get-to-the-openshift-shell/index.html @@ -261,6 +261,10 @@

Recent Posts

diff --git a/blog/2012/03/14/openshift-cron-takes-over-celerybeat/index.html b/blog/2012/03/14/openshift-cron-takes-over-celerybeat/index.html index 2fa7b6f72..f43d92096 100644 --- a/blog/2012/03/14/openshift-cron-takes-over-celerybeat/index.html +++ b/blog/2012/03/14/openshift-cron-takes-over-celerybeat/index.html @@ -357,6 +357,10 @@

Recent Posts

diff --git a/blog/2012/04/17/using-openshift-as-amazon-cloudfront-origin-server/index.html b/blog/2012/04/17/using-openshift-as-amazon-cloudfront-origin-server/index.html index 5baf08703..e8fd8b81c 100644 --- a/blog/2012/04/17/using-openshift-as-amazon-cloudfront-origin-server/index.html +++ b/blog/2012/04/17/using-openshift-as-amazon-cloudfront-origin-server/index.html @@ -334,6 +334,10 @@

Recent Posts

diff --git a/blog/2012/05/19/cross-domain-ajax-served-from-cdn/index.html b/blog/2012/05/19/cross-domain-ajax-served-from-cdn/index.html index 4cd927e1d..77de9ed67 100644 --- a/blog/2012/05/19/cross-domain-ajax-served-from-cdn/index.html +++ b/blog/2012/05/19/cross-domain-ajax-served-from-cdn/index.html @@ -364,6 +364,10 @@

Recent Posts

diff --git a/blog/2012/07/12/combining-pdf-files-on-the-command-line/index.html b/blog/2012/07/12/combining-pdf-files-on-the-command-line/index.html index 26391ccc5..8457d9cb1 100644 --- a/blog/2012/07/12/combining-pdf-files-on-the-command-line/index.html +++ b/blog/2012/07/12/combining-pdf-files-on-the-command-line/index.html @@ -245,6 +245,10 @@

Recent Posts

diff --git a/blog/2012/07/13/mission-impossible-abrt-bugzilla-plugin-on-rhel6/index.html b/blog/2012/07/13/mission-impossible-abrt-bugzilla-plugin-on-rhel6/index.html index cb2ff9d6a..3575e1086 100644 --- a/blog/2012/07/13/mission-impossible-abrt-bugzilla-plugin-on-rhel6/index.html +++ b/blog/2012/07/13/mission-impossible-abrt-bugzilla-plugin-on-rhel6/index.html @@ -285,6 +285,10 @@

Recent Posts

diff --git a/blog/2013/01/28/hello-world/index.html b/blog/2013/01/28/hello-world/index.html index dcb400ef7..c4241551c 100644 --- a/blog/2013/01/28/hello-world/index.html +++ b/blog/2013/01/28/hello-world/index.html @@ -237,6 +237,10 @@

Recent Posts

diff --git a/blog/2013/01/28/remove-query-string-with-javascript-and-html5/index.html b/blog/2013/01/28/remove-query-string-with-javascript-and-html5/index.html index 6dfeb7e15..5318cb365 100644 --- a/blog/2013/01/28/remove-query-string-with-javascript-and-html5/index.html +++ b/blog/2013/01/28/remove-query-string-with-javascript-and-html5/index.html @@ -305,6 +305,10 @@

Recent Posts

diff --git a/blog/2013/01/30/startup-talk-5-book-list/index.html b/blog/2013/01/30/startup-talk-5-book-list/index.html index 218e59c95..fbb0af5b1 100644 --- a/blog/2013/01/30/startup-talk-5-book-list/index.html +++ b/blog/2013/01/30/startup-talk-5-book-list/index.html @@ -249,6 +249,10 @@

Recent Posts

diff --git a/blog/2013/01/31/click-tracking-without-mailchimp/index.html b/blog/2013/01/31/click-tracking-without-mailchimp/index.html index cfa428642..c3cd168e0 100644 --- a/blog/2013/01/31/click-tracking-without-mailchimp/index.html +++ b/blog/2013/01/31/click-tracking-without-mailchimp/index.html @@ -309,6 +309,10 @@

Recent Posts

diff --git a/blog/2013/01/31/tip-save-money-on-amazon-buy-used-books/index.html b/blog/2013/01/31/tip-save-money-on-amazon-buy-used-books/index.html index 4c1811838..60ae896fd 100644 --- a/blog/2013/01/31/tip-save-money-on-amazon-buy-used-books/index.html +++ b/blog/2013/01/31/tip-save-money-on-amazon-buy-used-books/index.html @@ -234,6 +234,10 @@

Recent Posts

diff --git a/blog/2013/02/05/performance-test-md5-sha1-sha256-sha512/index.html b/blog/2013/02/05/performance-test-md5-sha1-sha256-sha512/index.html index e6208177c..7a9525c3f 100644 --- a/blog/2013/02/05/performance-test-md5-sha1-sha256-sha512/index.html +++ b/blog/2013/02/05/performance-test-md5-sha1-sha256-sha512/index.html @@ -315,6 +315,10 @@

Recent Posts

diff --git a/blog/2013/02/08/the-shoes-start-up/index.html b/blog/2013/02/08/the-shoes-start-up/index.html index 96c4abeca..bc7b8103b 100644 --- a/blog/2013/02/08/the-shoes-start-up/index.html +++ b/blog/2013/02/08/the-shoes-start-up/index.html @@ -235,6 +235,10 @@

Recent Posts

diff --git a/blog/2013/02/13/secure-vnc-installation-red-hat-enterprise-linux/index.html b/blog/2013/02/13/secure-vnc-installation-red-hat-enterprise-linux/index.html index e2a02112c..32d727194 100644 --- a/blog/2013/02/13/secure-vnc-installation-red-hat-enterprise-linux/index.html +++ b/blog/2013/02/13/secure-vnc-installation-red-hat-enterprise-linux/index.html @@ -343,6 +343,10 @@

Recent Posts

diff --git a/blog/2013/02/20/how-large-are-my-mysql-tables/index.html b/blog/2013/02/20/how-large-are-my-mysql-tables/index.html index 8be6da662..a7e61af20 100644 --- a/blog/2013/02/20/how-large-are-my-mysql-tables/index.html +++ b/blog/2013/02/20/how-large-are-my-mysql-tables/index.html @@ -282,6 +282,10 @@

Recent Posts

diff --git a/blog/2013/02/21/tip-generating-directory-listings-with-wget/index.html b/blog/2013/02/21/tip-generating-directory-listings-with-wget/index.html index 511123d5a..cf58da5ba 100644 --- a/blog/2013/02/21/tip-generating-directory-listings-with-wget/index.html +++ b/blog/2013/02/21/tip-generating-directory-listings-with-wget/index.html @@ -225,6 +225,10 @@

Recent Posts

diff --git a/blog/2013/02/26/performance-test-amazon-ebs-vs-instance-storage-pt1/index.html b/blog/2013/02/26/performance-test-amazon-ebs-vs-instance-storage-pt1/index.html index 6f60feae3..9375fcfa1 100644 --- a/blog/2013/02/26/performance-test-amazon-ebs-vs-instance-storage-pt1/index.html +++ b/blog/2013/02/26/performance-test-amazon-ebs-vs-instance-storage-pt1/index.html @@ -336,6 +336,10 @@

Recent Posts

diff --git a/blog/2013/02/28/email-logging-django-redhat-openshift-amazon-ses/index.html b/blog/2013/02/28/email-logging-django-redhat-openshift-amazon-ses/index.html index 0d99a7142..89054757e 100644 --- a/blog/2013/02/28/email-logging-django-redhat-openshift-amazon-ses/index.html +++ b/blog/2013/02/28/email-logging-django-redhat-openshift-amazon-ses/index.html @@ -300,6 +300,10 @@

Recent Posts

diff --git a/blog/2013/03/06/tip-delete-user-profiles-django-social-auth/index.html b/blog/2013/03/06/tip-delete-user-profiles-django-social-auth/index.html index cb425c078..90311eb55 100644 --- a/blog/2013/03/06/tip-delete-user-profiles-django-social-auth/index.html +++ b/blog/2013/03/06/tip-delete-user-profiles-django-social-auth/index.html @@ -245,6 +245,10 @@

Recent Posts

diff --git a/blog/2013/03/07/python-twitter-django-social-auth-hello-new-user/index.html b/blog/2013/03/07/python-twitter-django-social-auth-hello-new-user/index.html index bdd370329..6b1556167 100644 --- a/blog/2013/03/07/python-twitter-django-social-auth-hello-new-user/index.html +++ b/blog/2013/03/07/python-twitter-django-social-auth-hello-new-user/index.html @@ -382,6 +382,10 @@

Recent Posts

diff --git a/blog/2013/03/14/django-social-auth-tip-reminder-of-login-provider/index.html b/blog/2013/03/14/django-social-auth-tip-reminder-of-login-provider/index.html index 495da7e12..4d67eaf24 100644 --- a/blog/2013/03/14/django-social-auth-tip-reminder-of-login-provider/index.html +++ b/blog/2013/03/14/django-social-auth-tip-reminder-of-login-provider/index.html @@ -346,6 +346,10 @@

Recent Posts

diff --git a/blog/2013/03/19/bug-in-nokia-software-shows-wrong-caller-id/index.html b/blog/2013/03/19/bug-in-nokia-software-shows-wrong-caller-id/index.html index cdd1e0f29..b9d40243f 100644 --- a/blog/2013/03/19/bug-in-nokia-software-shows-wrong-caller-id/index.html +++ b/blog/2013/03/19/bug-in-nokia-software-shows-wrong-caller-id/index.html @@ -300,6 +300,10 @@

Recent Posts

diff --git a/blog/2013/03/20/virtualization-platforms-supported-by-red-hat-enterprise-linux/index.html b/blog/2013/03/20/virtualization-platforms-supported-by-red-hat-enterprise-linux/index.html index 3e697714d..7c8f642bb 100644 --- a/blog/2013/03/20/virtualization-platforms-supported-by-red-hat-enterprise-linux/index.html +++ b/blog/2013/03/20/virtualization-platforms-supported-by-red-hat-enterprise-linux/index.html @@ -287,6 +287,10 @@

Recent Posts

diff --git a/blog/2013/03/21/django-queryset-tip-search-and-order-by-exact-match/index.html b/blog/2013/03/21/django-queryset-tip-search-and-order-by-exact-match/index.html index a60b32897..85a7ee8cb 100644 --- a/blog/2013/03/21/django-queryset-tip-search-and-order-by-exact-match/index.html +++ b/blog/2013/03/21/django-queryset-tip-search-and-order-by-exact-match/index.html @@ -285,6 +285,10 @@

Recent Posts

diff --git a/blog/2013/03/24/upcoming-hackatons-in-sofia/index.html b/blog/2013/03/24/upcoming-hackatons-in-sofia/index.html index b25e9da8a..0cac72c62 100644 --- a/blog/2013/03/24/upcoming-hackatons-in-sofia/index.html +++ b/blog/2013/03/24/upcoming-hackatons-in-sofia/index.html @@ -264,6 +264,10 @@

Recent Posts

diff --git a/blog/2013/03/25/the-silicon-prairie-movie/index.html b/blog/2013/03/25/the-silicon-prairie-movie/index.html index c194e82a3..2b17b45f1 100644 --- a/blog/2013/03/25/the-silicon-prairie-movie/index.html +++ b/blog/2013/03/25/the-silicon-prairie-movie/index.html @@ -260,6 +260,10 @@

Recent Posts

diff --git a/blog/2013/03/26/to-fork-or-not-to-fork-the-mate-story/index.html b/blog/2013/03/26/to-fork-or-not-to-fork-the-mate-story/index.html index b9e435b00..7acc215f9 100644 --- a/blog/2013/03/26/to-fork-or-not-to-fork-the-mate-story/index.html +++ b/blog/2013/03/26/to-fork-or-not-to-fork-the-mate-story/index.html @@ -244,6 +244,10 @@

Recent Posts

diff --git a/blog/2013/03/27/what-runs-your-startup-useful-at-night/index.html b/blog/2013/03/27/what-runs-your-startup-useful-at-night/index.html index d04d84a9a..1796e52b8 100644 --- a/blog/2013/03/27/what-runs-your-startup-useful-at-night/index.html +++ b/blog/2013/03/27/what-runs-your-startup-useful-at-night/index.html @@ -257,6 +257,10 @@

Recent Posts

diff --git a/blog/2013/03/27/what-runs-your-startup/index.html b/blog/2013/03/27/what-runs-your-startup/index.html index fea4821c0..7a619ca0b 100644 --- a/blog/2013/03/27/what-runs-your-startup/index.html +++ b/blog/2013/03/27/what-runs-your-startup/index.html @@ -230,6 +230,10 @@

Recent Posts

diff --git a/blog/2013/03/29/bug-in-the-fridge/index.html b/blog/2013/03/29/bug-in-the-fridge/index.html index f9a894d7b..282fa4351 100644 --- a/blog/2013/03/29/bug-in-the-fridge/index.html +++ b/blog/2013/03/29/bug-in-the-fridge/index.html @@ -255,6 +255,10 @@

Recent Posts

diff --git a/blog/2013/04/03/what-runs-your-startup-ucha.se/index.html b/blog/2013/04/03/what-runs-your-startup-ucha.se/index.html index 4e396cb55..fbfc7d81f 100644 --- a/blog/2013/04/03/what-runs-your-startup-ucha.se/index.html +++ b/blog/2013/04/03/what-runs-your-startup-ucha.se/index.html @@ -261,6 +261,10 @@

Recent Posts

diff --git a/blog/2013/04/06/tip-renaming-model-fields-in-django/index.html b/blog/2013/04/06/tip-renaming-model-fields-in-django/index.html index 8d5d7a7d6..18158ca37 100644 --- a/blog/2013/04/06/tip-renaming-model-fields-in-django/index.html +++ b/blog/2013/04/06/tip-renaming-model-fields-in-django/index.html @@ -283,6 +283,10 @@

Recent Posts

diff --git a/blog/2013/04/06/using-django-built-in-template-tags-and-filters-in-code/index.html b/blog/2013/04/06/using-django-built-in-template-tags-and-filters-in-code/index.html index 424bc4394..e34906d75 100644 --- a/blog/2013/04/06/using-django-built-in-template-tags-and-filters-in-code/index.html +++ b/blog/2013/04/06/using-django-built-in-template-tags-and-filters-in-code/index.html @@ -244,6 +244,10 @@

Recent Posts

diff --git a/blog/2013/04/08/what-runs-your-startup-maistorplus/index.html b/blog/2013/04/08/what-runs-your-startup-maistorplus/index.html index 1db71d720..c5ab034ac 100644 --- a/blog/2013/04/08/what-runs-your-startup-maistorplus/index.html +++ b/blog/2013/04/08/what-runs-your-startup-maistorplus/index.html @@ -258,6 +258,10 @@

Recent Posts

diff --git a/blog/2013/04/09/creating-rpm-spec-files-from-scratch-using-vim/index.html b/blog/2013/04/09/creating-rpm-spec-files-from-scratch-using-vim/index.html index 0e085991b..fa86482b9 100644 --- a/blog/2013/04/09/creating-rpm-spec-files-from-scratch-using-vim/index.html +++ b/blog/2013/04/09/creating-rpm-spec-files-from-scratch-using-vim/index.html @@ -231,6 +231,10 @@

Recent Posts

diff --git a/blog/2013/04/15/hackfmi-post-mortem/index.html b/blog/2013/04/15/hackfmi-post-mortem/index.html index fbf5d1328..caa58c4aa 100644 --- a/blog/2013/04/15/hackfmi-post-mortem/index.html +++ b/blog/2013/04/15/hackfmi-post-mortem/index.html @@ -331,6 +331,10 @@

Recent Posts

diff --git a/blog/2013/04/16/quick-script-for-khan-academy/index.html b/blog/2013/04/16/quick-script-for-khan-academy/index.html index 79adbb3e4..d8649df5f 100644 --- a/blog/2013/04/16/quick-script-for-khan-academy/index.html +++ b/blog/2013/04/16/quick-script-for-khan-academy/index.html @@ -234,6 +234,10 @@

Recent Posts

diff --git a/blog/2013/04/19/hackfmi-code-stats/index.html b/blog/2013/04/19/hackfmi-code-stats/index.html index a2d1d5c06..39c691b53 100644 --- a/blog/2013/04/19/hackfmi-code-stats/index.html +++ b/blog/2013/04/19/hackfmi-code-stats/index.html @@ -276,6 +276,10 @@

Recent Posts

diff --git a/blog/2013/04/23/what-runs-your-startup-deed/index.html b/blog/2013/04/23/what-runs-your-startup-deed/index.html index 74fa7fe96..ddc2851ba 100644 --- a/blog/2013/04/23/what-runs-your-startup-deed/index.html +++ b/blog/2013/04/23/what-runs-your-startup-deed/index.html @@ -258,6 +258,10 @@

Recent Posts

diff --git a/blog/2013/04/24/how-to-deploy-python-hotfix-on-redhat-openshift-cloud/index.html b/blog/2013/04/24/how-to-deploy-python-hotfix-on-redhat-openshift-cloud/index.html index 00f2591fc..e750e802a 100644 --- a/blog/2013/04/24/how-to-deploy-python-hotfix-on-redhat-openshift-cloud/index.html +++ b/blog/2013/04/24/how-to-deploy-python-hotfix-on-redhat-openshift-cloud/index.html @@ -316,6 +316,10 @@

Recent Posts

diff --git a/blog/2013/04/26/personal-experience-with-credit-card-fraud/index.html b/blog/2013/04/26/personal-experience-with-credit-card-fraud/index.html index b160e984d..07337c306 100644 --- a/blog/2013/04/26/personal-experience-with-credit-card-fraud/index.html +++ b/blog/2013/04/26/personal-experience-with-credit-card-fraud/index.html @@ -275,6 +275,10 @@

Recent Posts

diff --git a/blog/2013/04/27/the-best-it-school-in-bulgaria/index.html b/blog/2013/04/27/the-best-it-school-in-bulgaria/index.html index b005582d0..a18f6895d 100644 --- a/blog/2013/04/27/the-best-it-school-in-bulgaria/index.html +++ b/blog/2013/04/27/the-best-it-school-in-bulgaria/index.html @@ -288,6 +288,10 @@

Recent Posts

diff --git a/blog/2013/05/02/why-instagram-could-not-be-founded-in-europe/index.html b/blog/2013/05/02/why-instagram-could-not-be-founded-in-europe/index.html index ea84bb850..da1b6e55f 100644 --- a/blog/2013/05/02/why-instagram-could-not-be-founded-in-europe/index.html +++ b/blog/2013/05/02/why-instagram-could-not-be-founded-in-europe/index.html @@ -292,6 +292,10 @@

Recent Posts

diff --git a/blog/2013/05/14/dual-password-encryption-with-encfs-on-red-hat-enterprise-linux-6/index.html b/blog/2013/05/14/dual-password-encryption-with-encfs-on-red-hat-enterprise-linux-6/index.html index cb4f6a03e..100201d55 100644 --- a/blog/2013/05/14/dual-password-encryption-with-encfs-on-red-hat-enterprise-linux-6/index.html +++ b/blog/2013/05/14/dual-password-encryption-with-encfs-on-red-hat-enterprise-linux-6/index.html @@ -411,6 +411,10 @@

Recent Posts

diff --git a/blog/2013/05/17/linux-and-python-tools-to-compare-images/index.html b/blog/2013/05/17/linux-and-python-tools-to-compare-images/index.html index c5903a862..f807c408d 100644 --- a/blog/2013/05/17/linux-and-python-tools-to-compare-images/index.html +++ b/blog/2013/05/17/linux-and-python-tools-to-compare-images/index.html @@ -312,6 +312,10 @@

Recent Posts

diff --git a/blog/2013/05/23/balkan-venture-forum-sofia-post-mortem/index.html b/blog/2013/05/23/balkan-venture-forum-sofia-post-mortem/index.html index 505ef61f2..52a7acf95 100644 --- a/blog/2013/05/23/balkan-venture-forum-sofia-post-mortem/index.html +++ b/blog/2013/05/23/balkan-venture-forum-sofia-post-mortem/index.html @@ -264,6 +264,10 @@

Recent Posts

diff --git a/blog/2013/05/27/it-jobs-prediction-quality-engineering-devops-augmented-reality/index.html b/blog/2013/05/27/it-jobs-prediction-quality-engineering-devops-augmented-reality/index.html index 88655b89c..19f315179 100644 --- a/blog/2013/05/27/it-jobs-prediction-quality-engineering-devops-augmented-reality/index.html +++ b/blog/2013/05/27/it-jobs-prediction-quality-engineering-devops-augmented-reality/index.html @@ -263,6 +263,10 @@

Recent Posts

diff --git a/blog/2013/05/30/configuring-anonymous-ftp-uploads-on-red-hat-enterprise-linux-6/index.html b/blog/2013/05/30/configuring-anonymous-ftp-uploads-on-red-hat-enterprise-linux-6/index.html index cb0a941d0..cc631696a 100644 --- a/blog/2013/05/30/configuring-anonymous-ftp-uploads-on-red-hat-enterprise-linux-6/index.html +++ b/blog/2013/05/30/configuring-anonymous-ftp-uploads-on-red-hat-enterprise-linux-6/index.html @@ -243,6 +243,10 @@

Recent Posts

diff --git a/blog/2013/05/30/why-vmware-multi-hypervisor-manager-architecture-is-wrong/index.html b/blog/2013/05/30/why-vmware-multi-hypervisor-manager-architecture-is-wrong/index.html index c4f0d2d2d..dfada87d0 100644 --- a/blog/2013/05/30/why-vmware-multi-hypervisor-manager-architecture-is-wrong/index.html +++ b/blog/2013/05/30/why-vmware-multi-hypervisor-manager-architecture-is-wrong/index.html @@ -263,6 +263,10 @@

Recent Posts

diff --git a/blog/2013/05/31/call-of-the-open-source-guru/index.html b/blog/2013/05/31/call-of-the-open-source-guru/index.html index 854e0ec3f..a5dc6cc64 100644 --- a/blog/2013/05/31/call-of-the-open-source-guru/index.html +++ b/blog/2013/05/31/call-of-the-open-source-guru/index.html @@ -300,6 +300,10 @@

Recent Posts

diff --git a/blog/2013/06/02/sofiavalley-ui-bug/index.html b/blog/2013/06/02/sofiavalley-ui-bug/index.html index 042322ab3..b1766be19 100644 --- a/blog/2013/06/02/sofiavalley-ui-bug/index.html +++ b/blog/2013/06/02/sofiavalley-ui-bug/index.html @@ -231,6 +231,10 @@

Recent Posts

diff --git a/blog/2013/06/07/software-developer-employee-vs-contractor-part-1/index.html b/blog/2013/06/07/software-developer-employee-vs-contractor-part-1/index.html index e85fff188..c8a540ce5 100644 --- a/blog/2013/06/07/software-developer-employee-vs-contractor-part-1/index.html +++ b/blog/2013/06/07/software-developer-employee-vs-contractor-part-1/index.html @@ -385,6 +385,10 @@

Recent Posts

diff --git a/blog/2013/06/09/another-day-at-the-office/index.html b/blog/2013/06/09/another-day-at-the-office/index.html index e4496c57a..7e0da1f88 100644 --- a/blog/2013/06/09/another-day-at-the-office/index.html +++ b/blog/2013/06/09/another-day-at-the-office/index.html @@ -239,6 +239,10 @@

Recent Posts

diff --git a/blog/2013/06/14/personal-experience-with-credit-card-fraud-pt2/index.html b/blog/2013/06/14/personal-experience-with-credit-card-fraud-pt2/index.html index bb37ecabf..5f367bce1 100644 --- a/blog/2013/06/14/personal-experience-with-credit-card-fraud-pt2/index.html +++ b/blog/2013/06/14/personal-experience-with-credit-card-fraud-pt2/index.html @@ -226,6 +226,10 @@

Recent Posts

diff --git a/blog/2013/06/18/nibbler-w3c-validator-on-steroids/index.html b/blog/2013/06/18/nibbler-w3c-validator-on-steroids/index.html index 8f673607b..c0296e878 100644 --- a/blog/2013/06/18/nibbler-w3c-validator-on-steroids/index.html +++ b/blog/2013/06/18/nibbler-w3c-validator-on-steroids/index.html @@ -232,6 +232,10 @@

Recent Posts

diff --git a/blog/2013/06/19/django-tips-using-cache-for-stateful-http/index.html b/blog/2013/06/19/django-tips-using-cache-for-stateful-http/index.html index cb4835075..2ca574815 100644 --- a/blog/2013/06/19/django-tips-using-cache-for-stateful-http/index.html +++ b/blog/2013/06/19/django-tips-using-cache-for-stateful-http/index.html @@ -297,6 +297,10 @@

Recent Posts

diff --git a/blog/2013/06/19/tip-caching-large-objects-for-celery-and-amazon-sqs/index.html b/blog/2013/06/19/tip-caching-large-objects-for-celery-and-amazon-sqs/index.html index 226e57af7..fde66a805 100644 --- a/blog/2013/06/19/tip-caching-large-objects-for-celery-and-amazon-sqs/index.html +++ b/blog/2013/06/19/tip-caching-large-objects-for-celery-and-amazon-sqs/index.html @@ -281,6 +281,10 @@

Recent Posts

diff --git a/blog/2013/06/20/even-facebook-has-bugs/index.html b/blog/2013/06/20/even-facebook-has-bugs/index.html index 65d72cfc3..c77f18c93 100644 --- a/blog/2013/06/20/even-facebook-has-bugs/index.html +++ b/blog/2013/06/20/even-facebook-has-bugs/index.html @@ -229,6 +229,10 @@

Recent Posts

diff --git a/blog/2013/06/24/twilio-is-located-in-amazon-web-services-us-east/index.html b/blog/2013/06/24/twilio-is-located-in-amazon-web-services-us-east/index.html index 0c45c5cc9..1d1dd26f0 100644 --- a/blog/2013/06/24/twilio-is-located-in-amazon-web-services-us-east/index.html +++ b/blog/2013/06/24/twilio-is-located-in-amazon-web-services-us-east/index.html @@ -468,6 +468,10 @@

Recent Posts

diff --git a/blog/2013/06/26/performance-test-amazon-elasticache-vs-amazon-s3/index.html b/blog/2013/06/26/performance-test-amazon-elasticache-vs-amazon-s3/index.html index 210eef725..640e994ed 100644 --- a/blog/2013/06/26/performance-test-amazon-elasticache-vs-amazon-s3/index.html +++ b/blog/2013/06/26/performance-test-amazon-elasticache-vs-amazon-s3/index.html @@ -440,6 +440,10 @@

Recent Posts

diff --git a/blog/2013/07/01/july-events-blackberry-mini-jam-and-devel-conference/index.html b/blog/2013/07/01/july-events-blackberry-mini-jam-and-devel-conference/index.html index a6e30d791..e93600103 100644 --- a/blog/2013/07/01/july-events-blackberry-mini-jam-and-devel-conference/index.html +++ b/blog/2013/07/01/july-events-blackberry-mini-jam-and-devel-conference/index.html @@ -270,6 +270,10 @@

Recent Posts

diff --git a/blog/2013/07/04/give-a-book-get-a-laptop-with-discount/index.html b/blog/2013/07/04/give-a-book-get-a-laptop-with-discount/index.html index 6257abe74..e29238e44 100644 --- a/blog/2013/07/04/give-a-book-get-a-laptop-with-discount/index.html +++ b/blog/2013/07/04/give-a-book-get-a-laptop-with-discount/index.html @@ -252,6 +252,10 @@

Recent Posts

diff --git a/blog/2013/07/08/tip-setting-secure-env-variables-on-red-hat-openshift/index.html b/blog/2013/07/08/tip-setting-secure-env-variables-on-red-hat-openshift/index.html index dacce661f..c65f6feae 100644 --- a/blog/2013/07/08/tip-setting-secure-env-variables-on-red-hat-openshift/index.html +++ b/blog/2013/07/08/tip-setting-secure-env-variables-on-red-hat-openshift/index.html @@ -277,6 +277,10 @@

Recent Posts

diff --git a/blog/2013/07/13/how-to-get-a-free-blackberry-z10/index.html b/blog/2013/07/13/how-to-get-a-free-blackberry-z10/index.html index 720b5de14..5e099cc0b 100644 --- a/blog/2013/07/13/how-to-get-a-free-blackberry-z10/index.html +++ b/blog/2013/07/13/how-to-get-a-free-blackberry-z10/index.html @@ -278,6 +278,10 @@

Recent Posts

diff --git a/blog/2013/07/14/importing-vcard-contacts-to-blackberry-z10-sucks/index.html b/blog/2013/07/14/importing-vcard-contacts-to-blackberry-z10-sucks/index.html index 92a1c9803..47ae08077 100644 --- a/blog/2013/07/14/importing-vcard-contacts-to-blackberry-z10-sucks/index.html +++ b/blog/2013/07/14/importing-vcard-contacts-to-blackberry-z10-sucks/index.html @@ -310,6 +310,10 @@

Recent Posts

diff --git a/blog/2013/07/17/exploring-blackberry-10-nmap/index.html b/blog/2013/07/17/exploring-blackberry-10-nmap/index.html index 561e4fc8c..69d9b5c29 100644 --- a/blog/2013/07/17/exploring-blackberry-10-nmap/index.html +++ b/blog/2013/07/17/exploring-blackberry-10-nmap/index.html @@ -360,6 +360,10 @@

Recent Posts

diff --git a/blog/2013/07/17/tip-how-to-enable-usb-networking-between-blackberry-z10-and-red-hat-enterprise-linux-6/index.html b/blog/2013/07/17/tip-how-to-enable-usb-networking-between-blackberry-z10-and-red-hat-enterprise-linux-6/index.html index f49bf3184..96c70132f 100644 --- a/blog/2013/07/17/tip-how-to-enable-usb-networking-between-blackberry-z10-and-red-hat-enterprise-linux-6/index.html +++ b/blog/2013/07/17/tip-how-to-enable-usb-networking-between-blackberry-z10-and-red-hat-enterprise-linux-6/index.html @@ -267,6 +267,10 @@

Recent Posts

diff --git a/blog/2013/07/18/git-history-stats-and-project-cost-estimation/index.html b/blog/2013/07/18/git-history-stats-and-project-cost-estimation/index.html index 6e43069dc..cd3489c91 100644 --- a/blog/2013/07/18/git-history-stats-and-project-cost-estimation/index.html +++ b/blog/2013/07/18/git-history-stats-and-project-cost-estimation/index.html @@ -232,6 +232,10 @@

Recent Posts

diff --git a/blog/2013/07/19/ssh-from-linux-to-blackberry-z10/index.html b/blog/2013/07/19/ssh-from-linux-to-blackberry-z10/index.html index 09e051782..c8db3e13c 100644 --- a/blog/2013/07/19/ssh-from-linux-to-blackberry-z10/index.html +++ b/blog/2013/07/19/ssh-from-linux-to-blackberry-z10/index.html @@ -461,6 +461,10 @@

Recent Posts

diff --git a/blog/2013/07/20/text-to-speech-for-bulgarian/index.html b/blog/2013/07/20/text-to-speech-for-bulgarian/index.html index bea8c66e4..7533cbbd9 100644 --- a/blog/2013/07/20/text-to-speech-for-bulgarian/index.html +++ b/blog/2013/07/20/text-to-speech-for-bulgarian/index.html @@ -310,6 +310,10 @@

Recent Posts

diff --git a/blog/2013/07/29/what-runs-your-startup-imagga/index.html b/blog/2013/07/29/what-runs-your-startup-imagga/index.html index 05c2a3f5a..a9edecf14 100644 --- a/blog/2013/07/29/what-runs-your-startup-imagga/index.html +++ b/blog/2013/07/29/what-runs-your-startup-imagga/index.html @@ -263,6 +263,10 @@

Recent Posts

diff --git a/blog/2013/07/29/what-runs-your-startup-retidoc/index.html b/blog/2013/07/29/what-runs-your-startup-retidoc/index.html index 32b2dbdbb..a5d05bf6b 100644 --- a/blog/2013/07/29/what-runs-your-startup-retidoc/index.html +++ b/blog/2013/07/29/what-runs-your-startup-retidoc/index.html @@ -250,6 +250,10 @@

Recent Posts

diff --git a/blog/2013/07/31/how-i-created-a-website-in-two-days-without-coding/index.html b/blog/2013/07/31/how-i-created-a-website-in-two-days-without-coding/index.html index 1f1e82c98..fb3be1e7b 100644 --- a/blog/2013/07/31/how-i-created-a-website-in-two-days-without-coding/index.html +++ b/blog/2013/07/31/how-i-created-a-website-in-two-days-without-coding/index.html @@ -279,6 +279,10 @@

Recent Posts

diff --git a/blog/2013/07/31/ui-bug-for-opensource-dot-com/index.html b/blog/2013/07/31/ui-bug-for-opensource-dot-com/index.html index 27a479739..b7b077537 100644 --- a/blog/2013/07/31/ui-bug-for-opensource-dot-com/index.html +++ b/blog/2013/07/31/ui-bug-for-opensource-dot-com/index.html @@ -225,6 +225,10 @@

Recent Posts

diff --git a/blog/2013/08/01/laptop-vs-smartphone-part-one/index.html b/blog/2013/08/01/laptop-vs-smartphone-part-one/index.html index 9126ab438..672174466 100644 --- a/blog/2013/08/01/laptop-vs-smartphone-part-one/index.html +++ b/blog/2013/08/01/laptop-vs-smartphone-part-one/index.html @@ -388,6 +388,10 @@

Recent Posts

diff --git a/blog/2013/08/01/why-taking-orders-by-phone-works-for-my-start-up/index.html b/blog/2013/08/01/why-taking-orders-by-phone-works-for-my-start-up/index.html index 756251fd9..fb77009cf 100644 --- a/blog/2013/08/01/why-taking-orders-by-phone-works-for-my-start-up/index.html +++ b/blog/2013/08/01/why-taking-orders-by-phone-works-for-my-start-up/index.html @@ -277,6 +277,10 @@

Recent Posts

diff --git a/blog/2013/08/02/summer-hackathon-in-sofia/index.html b/blog/2013/08/02/summer-hackathon-in-sofia/index.html index aafd11548..489f6482c 100644 --- a/blog/2013/08/02/summer-hackathon-in-sofia/index.html +++ b/blog/2013/08/02/summer-hackathon-in-sofia/index.html @@ -237,6 +237,10 @@

Recent Posts

diff --git a/blog/2013/08/03/quick-update-laptop-vs-smartphone-updated/index.html b/blog/2013/08/03/quick-update-laptop-vs-smartphone-updated/index.html index 3bbc729a5..f7fc38a64 100644 --- a/blog/2013/08/03/quick-update-laptop-vs-smartphone-updated/index.html +++ b/blog/2013/08/03/quick-update-laptop-vs-smartphone-updated/index.html @@ -214,6 +214,10 @@

Recent Posts

diff --git a/blog/2013/08/04/exploring-blackberry-10-application-security-model/index.html b/blog/2013/08/04/exploring-blackberry-10-application-security-model/index.html index b31850c99..8b87da347 100644 --- a/blog/2013/08/04/exploring-blackberry-10-application-security-model/index.html +++ b/blog/2013/08/04/exploring-blackberry-10-application-security-model/index.html @@ -404,6 +404,10 @@

Recent Posts

diff --git a/blog/2013/08/05/exploring-blackberry-10-environment-variables/index.html b/blog/2013/08/05/exploring-blackberry-10-environment-variables/index.html index 3a8e4c070..9c8633036 100644 --- a/blog/2013/08/05/exploring-blackberry-10-environment-variables/index.html +++ b/blog/2013/08/05/exploring-blackberry-10-environment-variables/index.html @@ -437,6 +437,10 @@

Recent Posts

diff --git a/blog/2013/08/07/notes-from-two-interesting-guadec-talks/index.html b/blog/2013/08/07/notes-from-two-interesting-guadec-talks/index.html index 24781c72d..2420054a5 100644 --- a/blog/2013/08/07/notes-from-two-interesting-guadec-talks/index.html +++ b/blog/2013/08/07/notes-from-two-interesting-guadec-talks/index.html @@ -235,6 +235,10 @@

Recent Posts

diff --git a/blog/2013/08/07/the-51st-annual-meeting-of-the-association-for-computational-linguistics/index.html b/blog/2013/08/07/the-51st-annual-meeting-of-the-association-for-computational-linguistics/index.html index 21bc9157a..eda5df7a4 100644 --- a/blog/2013/08/07/the-51st-annual-meeting-of-the-association-for-computational-linguistics/index.html +++ b/blog/2013/08/07/the-51st-annual-meeting-of-the-association-for-computational-linguistics/index.html @@ -226,6 +226,10 @@

Recent Posts

diff --git a/blog/2013/08/13/the-rise-of-io-domains-for-well-crafted-web-services/index.html b/blog/2013/08/13/the-rise-of-io-domains-for-well-crafted-web-services/index.html index 809f31a20..e46b0f044 100644 --- a/blog/2013/08/13/the-rise-of-io-domains-for-well-crafted-web-services/index.html +++ b/blog/2013/08/13/the-rise-of-io-domains-for-well-crafted-web-services/index.html @@ -220,6 +220,10 @@

Recent Posts

diff --git a/blog/2013/08/23/how-to-find-your-red-hat-account-number/index.html b/blog/2013/08/23/how-to-find-your-red-hat-account-number/index.html index 3c068e34b..65e0a66e6 100644 --- a/blog/2013/08/23/how-to-find-your-red-hat-account-number/index.html +++ b/blog/2013/08/23/how-to-find-your-red-hat-account-number/index.html @@ -228,6 +228,10 @@

Recent Posts

diff --git a/blog/2013/08/23/red-hats-bugzilla-hits-one-million-bugs/index.html b/blog/2013/08/23/red-hats-bugzilla-hits-one-million-bugs/index.html index c3378f069..a35cf9874 100644 --- a/blog/2013/08/23/red-hats-bugzilla-hits-one-million-bugs/index.html +++ b/blog/2013/08/23/red-hats-bugzilla-hits-one-million-bugs/index.html @@ -231,6 +231,10 @@

Recent Posts

diff --git a/blog/2013/08/23/small-but-annoying-twitter-bug/index.html b/blog/2013/08/23/small-but-annoying-twitter-bug/index.html index 4d6daa38e..4e85cd32a 100644 --- a/blog/2013/08/23/small-but-annoying-twitter-bug/index.html +++ b/blog/2013/08/23/small-but-annoying-twitter-bug/index.html @@ -223,6 +223,10 @@

Recent Posts

diff --git a/blog/2013/09/02/bug-analysis-of-rhbz-1337/index.html b/blog/2013/09/02/bug-analysis-of-rhbz-1337/index.html index 4349a531e..ef5897cfc 100644 --- a/blog/2013/09/02/bug-analysis-of-rhbz-1337/index.html +++ b/blog/2013/09/02/bug-analysis-of-rhbz-1337/index.html @@ -237,6 +237,10 @@

Recent Posts

diff --git a/blog/2013/09/14/upcoming-talk-fedora-test-days-in-sofia/index.html b/blog/2013/09/14/upcoming-talk-fedora-test-days-in-sofia/index.html index 51cb7d761..ec1a87c97 100644 --- a/blog/2013/09/14/upcoming-talk-fedora-test-days-in-sofia/index.html +++ b/blog/2013/09/14/upcoming-talk-fedora-test-days-in-sofia/index.html @@ -241,6 +241,10 @@

Recent Posts

diff --git a/blog/2013/09/15/lenovo-rants-battery-and-dock-flaws/index.html b/blog/2013/09/15/lenovo-rants-battery-and-dock-flaws/index.html index 1d868dcea..eb686ebae 100644 --- a/blog/2013/09/15/lenovo-rants-battery-and-dock-flaws/index.html +++ b/blog/2013/09/15/lenovo-rants-battery-and-dock-flaws/index.html @@ -264,6 +264,10 @@

Recent Posts

diff --git a/blog/2013/09/23/facebook-ui-bug-strikes-again-at-hackfmi/index.html b/blog/2013/09/23/facebook-ui-bug-strikes-again-at-hackfmi/index.html index 3d80cd49f..ba27563d7 100644 --- a/blog/2013/09/23/facebook-ui-bug-strikes-again-at-hackfmi/index.html +++ b/blog/2013/09/23/facebook-ui-bug-strikes-again-at-hackfmi/index.html @@ -228,6 +228,10 @@

Recent Posts

diff --git a/blog/2013/09/23/fedora-test-days-are-coming-to-sofia/index.html b/blog/2013/09/23/fedora-test-days-are-coming-to-sofia/index.html index 8a0eac479..9a83e7a62 100644 --- a/blog/2013/09/23/fedora-test-days-are-coming-to-sofia/index.html +++ b/blog/2013/09/23/fedora-test-days-are-coming-to-sofia/index.html @@ -270,6 +270,10 @@

Recent Posts

diff --git a/blog/2013/10/07/fedora-20-virtualization-and-gnome-test-days-at-init-lab-this-week/index.html b/blog/2013/10/07/fedora-20-virtualization-and-gnome-test-days-at-init-lab-this-week/index.html index ebd730095..759015943 100644 --- a/blog/2013/10/07/fedora-20-virtualization-and-gnome-test-days-at-init-lab-this-week/index.html +++ b/blog/2013/10/07/fedora-20-virtualization-and-gnome-test-days-at-init-lab-this-week/index.html @@ -232,6 +232,10 @@

Recent Posts

diff --git a/blog/2013/10/08/fedora-20-virtualization-test-day-post-mortem/index.html b/blog/2013/10/08/fedora-20-virtualization-test-day-post-mortem/index.html index dfd2bf160..70e4e7128 100644 --- a/blog/2013/10/08/fedora-20-virtualization-test-day-post-mortem/index.html +++ b/blog/2013/10/08/fedora-20-virtualization-test-day-post-mortem/index.html @@ -256,6 +256,10 @@

Recent Posts

diff --git a/blog/2013/10/11/fedora-20-gnome-3-dot-10-test-day-post-mortem/index.html b/blog/2013/10/11/fedora-20-gnome-3-dot-10-test-day-post-mortem/index.html index 4d9d783bc..ecef81b70 100644 --- a/blog/2013/10/11/fedora-20-gnome-3-dot-10-test-day-post-mortem/index.html +++ b/blog/2013/10/11/fedora-20-gnome-3-dot-10-test-day-post-mortem/index.html @@ -257,6 +257,10 @@

Recent Posts

diff --git a/blog/2013/10/11/this-week-python-chris-dibona-openshift/index.html b/blog/2013/10/11/this-week-python-chris-dibona-openshift/index.html index ee19dadf7..15313076c 100644 --- a/blog/2013/10/11/this-week-python-chris-dibona-openshift/index.html +++ b/blog/2013/10/11/this-week-python-chris-dibona-openshift/index.html @@ -254,6 +254,10 @@

Recent Posts

diff --git a/blog/2013/10/12/tip-installing-missing-debuginfo-packages-for-abrt/index.html b/blog/2013/10/12/tip-installing-missing-debuginfo-packages-for-abrt/index.html index 17fe7b074..919928eea 100644 --- a/blog/2013/10/12/tip-installing-missing-debuginfo-packages-for-abrt/index.html +++ b/blog/2013/10/12/tip-installing-missing-debuginfo-packages-for-abrt/index.html @@ -231,6 +231,10 @@

Recent Posts

diff --git a/blog/2013/10/13/tip-extending-btrfs-filesystem-for-fedora-virtual-machine/index.html b/blog/2013/10/13/tip-extending-btrfs-filesystem-for-fedora-virtual-machine/index.html index 89c34ed74..1d9dc7ea6 100644 --- a/blog/2013/10/13/tip-extending-btrfs-filesystem-for-fedora-virtual-machine/index.html +++ b/blog/2013/10/13/tip-extending-btrfs-filesystem-for-fedora-virtual-machine/index.html @@ -417,6 +417,10 @@

Recent Posts

diff --git a/blog/2013/10/25/hackfmi-2013-hacker-gifts/index.html b/blog/2013/10/25/hackfmi-2013-hacker-gifts/index.html index 23c24ad9d..0b0e14046 100644 --- a/blog/2013/10/25/hackfmi-2013-hacker-gifts/index.html +++ b/blog/2013/10/25/hackfmi-2013-hacker-gifts/index.html @@ -244,6 +244,10 @@

Recent Posts

diff --git a/blog/2013/11/01/my-first-article-for-opensource-dot-com/index.html b/blog/2013/11/01/my-first-article-for-opensource-dot-com/index.html index 6434729f3..8ebd223c7 100644 --- a/blog/2013/11/01/my-first-article-for-opensource-dot-com/index.html +++ b/blog/2013/11/01/my-first-article-for-opensource-dot-com/index.html @@ -232,6 +232,10 @@

Recent Posts

diff --git a/blog/2013/11/13/keeping-backwards-compatibility-for-pykickstart/index.html b/blog/2013/11/13/keeping-backwards-compatibility-for-pykickstart/index.html index 0cbd355d6..fbe31ceaf 100644 --- a/blog/2013/11/13/keeping-backwards-compatibility-for-pykickstart/index.html +++ b/blog/2013/11/13/keeping-backwards-compatibility-for-pykickstart/index.html @@ -251,6 +251,10 @@

Recent Posts

diff --git a/blog/2013/11/19/open-source-quality-assurance-infrastructure-for-fedora-qa/index.html b/blog/2013/11/19/open-source-quality-assurance-infrastructure-for-fedora-qa/index.html index 8cb22b12b..437effede 100644 --- a/blog/2013/11/19/open-source-quality-assurance-infrastructure-for-fedora-qa/index.html +++ b/blog/2013/11/19/open-source-quality-assurance-infrastructure-for-fedora-qa/index.html @@ -341,6 +341,10 @@

Recent Posts

diff --git a/blog/2013/11/19/tip-cut-leading-or-trailing-fields-from-strings-in-bash/index.html b/blog/2013/11/19/tip-cut-leading-or-trailing-fields-from-strings-in-bash/index.html index ed22fc599..c23acc8a2 100644 --- a/blog/2013/11/19/tip-cut-leading-or-trailing-fields-from-strings-in-bash/index.html +++ b/blog/2013/11/19/tip-cut-leading-or-trailing-fields-from-strings-in-bash/index.html @@ -244,6 +244,10 @@

Recent Posts

diff --git a/blog/2013/11/29/bug-python-urlgrabber-curl-fedora-amazon-linux/index.html b/blog/2013/11/29/bug-python-urlgrabber-curl-fedora-amazon-linux/index.html index 3c2a7383c..9aa3ab5c8 100644 --- a/blog/2013/11/29/bug-python-urlgrabber-curl-fedora-amazon-linux/index.html +++ b/blog/2013/11/29/bug-python-urlgrabber-curl-fedora-amazon-linux/index.html @@ -282,6 +282,10 @@

Recent Posts

diff --git a/blog/2013/12/06/duplicate-amazon-sqs-messages-cause-multiple-emails/index.html b/blog/2013/12/06/duplicate-amazon-sqs-messages-cause-multiple-emails/index.html index c7d61c0d9..b5bdb44cc 100644 --- a/blog/2013/12/06/duplicate-amazon-sqs-messages-cause-multiple-emails/index.html +++ b/blog/2013/12/06/duplicate-amazon-sqs-messages-cause-multiple-emails/index.html @@ -277,6 +277,10 @@

Recent Posts

diff --git a/blog/2013/12/09/book-review-ux-for-lean-startups/index.html b/blog/2013/12/09/book-review-ux-for-lean-startups/index.html index acd003318..293b15566 100644 --- a/blog/2013/12/09/book-review-ux-for-lean-startups/index.html +++ b/blog/2013/12/09/book-review-ux-for-lean-startups/index.html @@ -282,6 +282,10 @@

Recent Posts

diff --git a/blog/2013/12/11/idempotent-django-email-sender-with-amazon-sqs-and-memcache/index.html b/blog/2013/12/11/idempotent-django-email-sender-with-amazon-sqs-and-memcache/index.html index d49e124eb..e6e96261f 100644 --- a/blog/2013/12/11/idempotent-django-email-sender-with-amazon-sqs-and-memcache/index.html +++ b/blog/2013/12/11/idempotent-django-email-sender-with-amazon-sqs-and-memcache/index.html @@ -240,6 +240,10 @@

Recent Posts

diff --git a/blog/2013/12/18/can-i-use-android-phone-as-smart-card-reader/index.html b/blog/2013/12/18/can-i-use-android-phone-as-smart-card-reader/index.html index ff8f0c77b..f8510ee78 100644 --- a/blog/2013/12/18/can-i-use-android-phone-as-smart-card-reader/index.html +++ b/blog/2013/12/18/can-i-use-android-phone-as-smart-card-reader/index.html @@ -245,6 +245,10 @@

Recent Posts

diff --git a/blog/2013/12/22/django-template-tag-inheritance-howto/index.html b/blog/2013/12/22/django-template-tag-inheritance-howto/index.html index a62f3506d..99019bda2 100644 --- a/blog/2013/12/22/django-template-tag-inheritance-howto/index.html +++ b/blog/2013/12/22/django-template-tag-inheritance-howto/index.html @@ -257,6 +257,10 @@

Recent Posts

diff --git a/blog/2013/12/24/upstream-test-suite-status-of-fedora-20/index.html b/blog/2013/12/24/upstream-test-suite-status-of-fedora-20/index.html index 5c4d0d39f..873f621c9 100644 --- a/blog/2013/12/24/upstream-test-suite-status-of-fedora-20/index.html +++ b/blog/2013/12/24/upstream-test-suite-status-of-fedora-20/index.html @@ -267,6 +267,10 @@

Recent Posts

diff --git a/blog/2014/01/02/book-review-of-2013/index.html b/blog/2014/01/02/book-review-of-2013/index.html index f8de3f4a0..fd8cd8a1d 100644 --- a/blog/2014/01/02/book-review-of-2013/index.html +++ b/blog/2014/01/02/book-review-of-2013/index.html @@ -309,6 +309,10 @@

Recent Posts

diff --git a/blog/2014/01/28/book-review-january-2014/index.html b/blog/2014/01/28/book-review-january-2014/index.html index 16a8974c3..c25666c8f 100644 --- a/blog/2014/01/28/book-review-january-2014/index.html +++ b/blog/2014/01/28/book-review-january-2014/index.html @@ -282,6 +282,10 @@

Recent Posts

diff --git a/blog/2014/02/03/fosdem-2014-report-day-1-python-stands-lightning-talks/index.html b/blog/2014/02/03/fosdem-2014-report-day-1-python-stands-lightning-talks/index.html index 18ffef3eb..4e0b20e6b 100644 --- a/blog/2014/02/03/fosdem-2014-report-day-1-python-stands-lightning-talks/index.html +++ b/blog/2014/02/03/fosdem-2014-report-day-1-python-stands-lightning-talks/index.html @@ -274,6 +274,10 @@

Recent Posts

diff --git a/blog/2014/02/03/fosdem-2014-report-day-2-testing-and-automation/index.html b/blog/2014/02/03/fosdem-2014-report-day-2-testing-and-automation/index.html index 7a932481e..81dcd47ce 100644 --- a/blog/2014/02/03/fosdem-2014-report-day-2-testing-and-automation/index.html +++ b/blog/2014/02/03/fosdem-2014-report-day-2-testing-and-automation/index.html @@ -301,6 +301,10 @@

Recent Posts

diff --git a/blog/2014/02/07/aws-tip-shrinking-ebs-root-volume-size/index.html b/blog/2014/02/07/aws-tip-shrinking-ebs-root-volume-size/index.html index 4952db202..0cba85e7c 100644 --- a/blog/2014/02/07/aws-tip-shrinking-ebs-root-volume-size/index.html +++ b/blog/2014/02/07/aws-tip-shrinking-ebs-root-volume-size/index.html @@ -273,6 +273,10 @@

Recent Posts

diff --git a/blog/2014/02/07/tip-how-to-build-updates.img-for-fedora/index.html b/blog/2014/02/07/tip-how-to-build-updates.img-for-fedora/index.html index 3ccc4ff40..cdbef6a4c 100644 --- a/blog/2014/02/07/tip-how-to-build-updates.img-for-fedora/index.html +++ b/blog/2014/02/07/tip-how-to-build-updates.img-for-fedora/index.html @@ -331,6 +331,10 @@

Recent Posts

diff --git a/blog/2014/02/08/articles-week-git-submodules-stopping-spam-without-captcha/index.html b/blog/2014/02/08/articles-week-git-submodules-stopping-spam-without-captcha/index.html index b28059738..5752f8700 100644 --- a/blog/2014/02/08/articles-week-git-submodules-stopping-spam-without-captcha/index.html +++ b/blog/2014/02/08/articles-week-git-submodules-stopping-spam-without-captcha/index.html @@ -223,6 +223,10 @@

Recent Posts

diff --git a/blog/2014/02/10/moving-tmp-from-ebs-to-instance-storage/index.html b/blog/2014/02/10/moving-tmp-from-ebs-to-instance-storage/index.html index d5d2440f0..830dd1cb2 100644 --- a/blog/2014/02/10/moving-tmp-from-ebs-to-instance-storage/index.html +++ b/blog/2014/02/10/moving-tmp-from-ebs-to-instance-storage/index.html @@ -329,6 +329,10 @@

Recent Posts

diff --git a/blog/2014/02/19/7-years-1400-bugs-red-hat-qa/index.html b/blog/2014/02/19/7-years-1400-bugs-red-hat-qa/index.html index 497153eff..bbf255f36 100644 --- a/blog/2014/02/19/7-years-1400-bugs-red-hat-qa/index.html +++ b/blog/2014/02/19/7-years-1400-bugs-red-hat-qa/index.html @@ -580,6 +580,10 @@

Recent Posts

diff --git a/blog/2014/02/21/skip-or-render-specific-blocks-from-jinja2-templates/index.html b/blog/2014/02/21/skip-or-render-specific-blocks-from-jinja2-templates/index.html index eb41be989..131f384ab 100644 --- a/blog/2014/02/21/skip-or-render-specific-blocks-from-jinja2-templates/index.html +++ b/blog/2014/02/21/skip-or-render-specific-blocks-from-jinja2-templates/index.html @@ -428,6 +428,10 @@

Recent Posts

diff --git a/blog/2014/02/27/mocking-django-auth-profile-module-without-database/index.html b/blog/2014/02/27/mocking-django-auth-profile-module-without-database/index.html index 61825e541..db4ad6b9a 100644 --- a/blog/2014/02/27/mocking-django-auth-profile-module-without-database/index.html +++ b/blog/2014/02/27/mocking-django-auth-profile-module-without-database/index.html @@ -355,6 +355,10 @@

Recent Posts

diff --git a/blog/2014/02/28/action-improving-test-coverage-in-fedora/index.html b/blog/2014/02/28/action-improving-test-coverage-in-fedora/index.html index 5674fb731..7c5a3b230 100644 --- a/blog/2014/02/28/action-improving-test-coverage-in-fedora/index.html +++ b/blog/2014/02/28/action-improving-test-coverage-in-fedora/index.html @@ -258,6 +258,10 @@

Recent Posts

diff --git a/blog/2014/03/03/last-week-in-fedora-qa/index.html b/blog/2014/03/03/last-week-in-fedora-qa/index.html index 746a40553..1297eb6de 100644 --- a/blog/2014/03/03/last-week-in-fedora-qa/index.html +++ b/blog/2014/03/03/last-week-in-fedora-qa/index.html @@ -275,6 +275,10 @@

Recent Posts

diff --git a/blog/2014/03/04/how-do-you-test-fonts/index.html b/blog/2014/03/04/how-do-you-test-fonts/index.html index 441737631..07cfff17c 100644 --- a/blog/2014/03/04/how-do-you-test-fonts/index.html +++ b/blog/2014/03/04/how-do-you-test-fonts/index.html @@ -255,6 +255,10 @@

Recent Posts

diff --git a/blog/2014/03/07/reducing-aws-cloud-costs-real-money-example/index.html b/blog/2014/03/07/reducing-aws-cloud-costs-real-money-example/index.html index 451ea95de..bd65db8c4 100644 --- a/blog/2014/03/07/reducing-aws-cloud-costs-real-money-example/index.html +++ b/blog/2014/03/07/reducing-aws-cloud-costs-real-money-example/index.html @@ -292,6 +292,10 @@

Recent Posts

diff --git a/blog/2014/03/17/how-do-you-test-thai-scalable-fonts/index.html b/blog/2014/03/17/how-do-you-test-thai-scalable-fonts/index.html index 387a5a223..1e77e33e9 100644 --- a/blog/2014/03/17/how-do-you-test-thai-scalable-fonts/index.html +++ b/blog/2014/03/17/how-do-you-test-thai-scalable-fonts/index.html @@ -222,6 +222,10 @@

Recent Posts

diff --git a/blog/2014/03/19/sms-pin-verification-with-twilio-and-django/index.html b/blog/2014/03/19/sms-pin-verification-with-twilio-and-django/index.html index 6efe6e4fb..175ff9d2f 100644 --- a/blog/2014/03/19/sms-pin-verification-with-twilio-and-django/index.html +++ b/blog/2014/03/19/sms-pin-verification-with-twilio-and-django/index.html @@ -369,6 +369,10 @@

Recent Posts

diff --git a/blog/2014/03/28/i-need-an-app-to-connect-with-my-facebook-page-fans/index.html b/blog/2014/03/28/i-need-an-app-to-connect-with-my-facebook-page-fans/index.html index f5fdfa4cc..725dc256a 100644 --- a/blog/2014/03/28/i-need-an-app-to-connect-with-my-facebook-page-fans/index.html +++ b/blog/2014/03/28/i-need-an-app-to-connect-with-my-facebook-page-fans/index.html @@ -274,6 +274,10 @@

Recent Posts

diff --git a/blog/2014/04/01/happy-april-fools-day/index.html b/blog/2014/04/01/happy-april-fools-day/index.html index 012e089a8..a27190ed4 100644 --- a/blog/2014/04/01/happy-april-fools-day/index.html +++ b/blog/2014/04/01/happy-april-fools-day/index.html @@ -223,6 +223,10 @@

Recent Posts

diff --git a/blog/2014/04/08/positive-biological-effects-of-open-source-on-humans/index.html b/blog/2014/04/08/positive-biological-effects-of-open-source-on-humans/index.html index 7d2510c0f..8e37b074d 100644 --- a/blog/2014/04/08/positive-biological-effects-of-open-source-on-humans/index.html +++ b/blog/2014/04/08/positive-biological-effects-of-open-source-on-humans/index.html @@ -323,6 +323,10 @@

Recent Posts

diff --git a/blog/2014/04/15/beware-of-django-default-model-field-option-when-using-datetime-now/index.html b/blog/2014/04/15/beware-of-django-default-model-field-option-when-using-datetime-now/index.html index ae596e74e..45f778315 100644 --- a/blog/2014/04/15/beware-of-django-default-model-field-option-when-using-datetime-now/index.html +++ b/blog/2014/04/15/beware-of-django-default-model-field-option-when-using-datetime-now/index.html @@ -258,6 +258,10 @@

Recent Posts

diff --git a/blog/2014/04/23/how-to-open-source-existing-proprietary-code-in-10-steps/index.html b/blog/2014/04/23/how-to-open-source-existing-proprietary-code-in-10-steps/index.html index 1f62fd87e..f94f654db 100644 --- a/blog/2014/04/23/how-to-open-source-existing-proprietary-code-in-10-steps/index.html +++ b/blog/2014/04/23/how-to-open-source-existing-proprietary-code-in-10-steps/index.html @@ -241,6 +241,10 @@

Recent Posts

diff --git a/blog/2014/04/30/hackfmi-post-mortem/index.html b/blog/2014/04/30/hackfmi-post-mortem/index.html index fcaf7e66c..afef43356 100644 --- a/blog/2014/04/30/hackfmi-post-mortem/index.html +++ b/blog/2014/04/30/hackfmi-post-mortem/index.html @@ -281,6 +281,10 @@

Recent Posts

diff --git a/blog/2014/05/03/howto-django-forms-with-dynamic-fields/index.html b/blog/2014/05/03/howto-django-forms-with-dynamic-fields/index.html index e22a237ea..bee9c2391 100644 --- a/blog/2014/05/03/howto-django-forms-with-dynamic-fields/index.html +++ b/blog/2014/05/03/howto-django-forms-with-dynamic-fields/index.html @@ -303,6 +303,10 @@

Recent Posts

diff --git a/blog/2014/05/04/screen-magnifier-and-smart-phone-has-anyone-used-it/index.html b/blog/2014/05/04/screen-magnifier-and-smart-phone-has-anyone-used-it/index.html index 3d36b95f7..0c36d32e6 100644 --- a/blog/2014/05/04/screen-magnifier-and-smart-phone-has-anyone-used-it/index.html +++ b/blog/2014/05/04/screen-magnifier-and-smart-phone-has-anyone-used-it/index.html @@ -236,6 +236,10 @@

Recent Posts

diff --git a/blog/2014/05/06/opensource-dot-com-article-10-steps-to-migrate-your-closed-software-to-open-source/index.html b/blog/2014/05/06/opensource-dot-com-article-10-steps-to-migrate-your-closed-software-to-open-source/index.html index c643415fd..ae7ef6fe3 100644 --- a/blog/2014/05/06/opensource-dot-com-article-10-steps-to-migrate-your-closed-software-to-open-source/index.html +++ b/blog/2014/05/06/opensource-dot-com-article-10-steps-to-migrate-your-closed-software-to-open-source/index.html @@ -225,6 +225,10 @@

Recent Posts

diff --git a/blog/2014/05/13/book-review-last-3-months/index.html b/blog/2014/05/13/book-review-last-3-months/index.html index a05af8539..bf0bdb5a2 100644 --- a/blog/2014/05/13/book-review-last-3-months/index.html +++ b/blog/2014/05/13/book-review-last-3-months/index.html @@ -296,6 +296,10 @@

Recent Posts

diff --git a/blog/2014/05/19/i-want-to-be-a-robot-book-review-the-singularity-is-near/index.html b/blog/2014/05/19/i-want-to-be-a-robot-book-review-the-singularity-is-near/index.html index 164ad6c91..eb4232149 100644 --- a/blog/2014/05/19/i-want-to-be-a-robot-book-review-the-singularity-is-near/index.html +++ b/blog/2014/05/19/i-want-to-be-a-robot-book-review-the-singularity-is-near/index.html @@ -272,6 +272,10 @@

Recent Posts

diff --git a/blog/2014/05/29/twilio-meetup-and-digitalk-2014-day-1/index.html b/blog/2014/05/29/twilio-meetup-and-digitalk-2014-day-1/index.html index d7ff49954..b2629eb2b 100644 --- a/blog/2014/05/29/twilio-meetup-and-digitalk-2014-day-1/index.html +++ b/blog/2014/05/29/twilio-meetup-and-digitalk-2014-day-1/index.html @@ -268,6 +268,10 @@

Recent Posts

diff --git a/blog/2014/06/01/digitalk-day-2-report/index.html b/blog/2014/06/01/digitalk-day-2-report/index.html index fd0c06218..e41efd44a 100644 --- a/blog/2014/06/01/digitalk-day-2-report/index.html +++ b/blog/2014/06/01/digitalk-day-2-report/index.html @@ -245,6 +245,10 @@

Recent Posts

diff --git a/blog/2014/06/02/bulgaria-web-summit-report/index.html b/blog/2014/06/02/bulgaria-web-summit-report/index.html index 5d897d0cc..70af1e8fa 100644 --- a/blog/2014/06/02/bulgaria-web-summit-report/index.html +++ b/blog/2014/06/02/bulgaria-web-summit-report/index.html @@ -262,6 +262,10 @@

Recent Posts

diff --git a/blog/2014/06/11/summary-of-evolve-digital/index.html b/blog/2014/06/11/summary-of-evolve-digital/index.html index 9acc84d65..f32730831 100644 --- a/blog/2014/06/11/summary-of-evolve-digital/index.html +++ b/blog/2014/06/11/summary-of-evolve-digital/index.html @@ -293,6 +293,10 @@

Recent Posts

diff --git a/blog/2014/06/26/using-d-link-dap-1320-wireless-range-extender-with-mac-filtering/index.html b/blog/2014/06/26/using-d-link-dap-1320-wireless-range-extender-with-mac-filtering/index.html index a71f40882..caa64e895 100644 --- a/blog/2014/06/26/using-d-link-dap-1320-wireless-range-extender-with-mac-filtering/index.html +++ b/blog/2014/06/26/using-d-link-dap-1320-wireless-range-extender-with-mac-filtering/index.html @@ -249,6 +249,10 @@

Recent Posts

diff --git a/blog/2014/06/30/software-design-vol-1/index.html b/blog/2014/06/30/software-design-vol-1/index.html index e04c4a0af..144496de6 100644 --- a/blog/2014/06/30/software-design-vol-1/index.html +++ b/blog/2014/06/30/software-design-vol-1/index.html @@ -283,6 +283,10 @@

Recent Posts

diff --git a/blog/2014/07/12/tip-collecting-emails-with-webhooks-uservoice-wordpress/index.html b/blog/2014/07/12/tip-collecting-emails-with-webhooks-uservoice-wordpress/index.html index 642ef0053..d2934813c 100644 --- a/blog/2014/07/12/tip-collecting-emails-with-webhooks-uservoice-wordpress/index.html +++ b/blog/2014/07/12/tip-collecting-emails-with-webhooks-uservoice-wordpress/index.html @@ -333,6 +333,10 @@

Recent Posts

diff --git a/blog/2014/07/18/snake-is-no-longer-needed-to-run-installation-tests-in-beaker/index.html b/blog/2014/07/18/snake-is-no-longer-needed-to-run-installation-tests-in-beaker/index.html index 2d0fb2be1..6bd70a3a9 100644 --- a/blog/2014/07/18/snake-is-no-longer-needed-to-run-installation-tests-in-beaker/index.html +++ b/blog/2014/07/18/snake-is-no-longer-needed-to-run-installation-tests-in-beaker/index.html @@ -259,6 +259,10 @@

Recent Posts

diff --git a/blog/2014/07/19/book-review-how-to-win-friends/index.html b/blog/2014/07/19/book-review-how-to-win-friends/index.html index 326c24597..e89613fd9 100644 --- a/blog/2014/07/19/book-review-how-to-win-friends/index.html +++ b/blog/2014/07/19/book-review-how-to-win-friends/index.html @@ -298,6 +298,10 @@

Recent Posts

diff --git a/blog/2014/08/03/book-review-4-hour-workweek/index.html b/blog/2014/08/03/book-review-4-hour-workweek/index.html index 44dae0016..6590fd311 100644 --- a/blog/2014/08/03/book-review-4-hour-workweek/index.html +++ b/blog/2014/08/03/book-review-4-hour-workweek/index.html @@ -333,6 +333,10 @@

Recent Posts

diff --git a/blog/2014/09/30/traction-a-startup-guide-to-getting-customers/index.html b/blog/2014/09/30/traction-a-startup-guide-to-getting-customers/index.html index 74a910162..835bceece 100644 --- a/blog/2014/09/30/traction-a-startup-guide-to-getting-customers/index.html +++ b/blog/2014/09/30/traction-a-startup-guide-to-getting-customers/index.html @@ -287,6 +287,10 @@

Recent Posts

diff --git a/blog/2014/10/13/shutdown-your-startup-in-7-steps/index.html b/blog/2014/10/13/shutdown-your-startup-in-7-steps/index.html index 522fd0d3e..607516f81 100644 --- a/blog/2014/10/13/shutdown-your-startup-in-7-steps/index.html +++ b/blog/2014/10/13/shutdown-your-startup-in-7-steps/index.html @@ -308,6 +308,10 @@

Recent Posts

diff --git a/blog/2014/10/14/mtel-fuck-up-online-invoices/index.html b/blog/2014/10/14/mtel-fuck-up-online-invoices/index.html index a797f749a..04556ecb1 100644 --- a/blog/2014/10/14/mtel-fuck-up-online-invoices/index.html +++ b/blog/2014/10/14/mtel-fuck-up-online-invoices/index.html @@ -264,6 +264,10 @@

Recent Posts

diff --git a/blog/2014/11/05/performance-profiling-in-python-with-cprofile/index.html b/blog/2014/11/05/performance-profiling-in-python-with-cprofile/index.html index 891bc782b..5aea13d0d 100644 --- a/blog/2014/11/05/performance-profiling-in-python-with-cprofile/index.html +++ b/blog/2014/11/05/performance-profiling-in-python-with-cprofile/index.html @@ -267,6 +267,10 @@

Recent Posts

diff --git a/blog/2014/11/05/speeding-up-celery-backends/index.html b/blog/2014/11/05/speeding-up-celery-backends/index.html index d5984cab7..fa2e9a15b 100644 --- a/blog/2014/11/05/speeding-up-celery-backends/index.html +++ b/blog/2014/11/05/speeding-up-celery-backends/index.html @@ -308,6 +308,10 @@

Recent Posts

diff --git a/blog/2014/11/07/speeding-up-celery-backends-part-2/index.html b/blog/2014/11/07/speeding-up-celery-backends-part-2/index.html index ca1c10d34..2ffc49af5 100644 --- a/blog/2014/11/07/speeding-up-celery-backends-part-2/index.html +++ b/blog/2014/11/07/speeding-up-celery-backends-part-2/index.html @@ -283,6 +283,10 @@

Recent Posts

diff --git a/blog/2014/11/11/speeding-up-celery-backends-part-3/index.html b/blog/2014/11/11/speeding-up-celery-backends-part-3/index.html index 4dc4b6137..0bcf65678 100644 --- a/blog/2014/11/11/speeding-up-celery-backends-part-3/index.html +++ b/blog/2014/11/11/speeding-up-celery-backends-part-3/index.html @@ -298,6 +298,10 @@

Recent Posts

diff --git a/blog/2014/11/17/hackfmi-sms-delivery-powered-by-twilio/index.html b/blog/2014/11/17/hackfmi-sms-delivery-powered-by-twilio/index.html index 032df9308..d24f33700 100644 --- a/blog/2014/11/17/hackfmi-sms-delivery-powered-by-twilio/index.html +++ b/blog/2014/11/17/hackfmi-sms-delivery-powered-by-twilio/index.html @@ -243,6 +243,10 @@

Recent Posts

diff --git a/blog/2014/11/18/proxy-support-for-wrk-http-benchmarking-tool/index.html b/blog/2014/11/18/proxy-support-for-wrk-http-benchmarking-tool/index.html index 7912b6b82..41b30e968 100644 --- a/blog/2014/11/18/proxy-support-for-wrk-http-benchmarking-tool/index.html +++ b/blog/2014/11/18/proxy-support-for-wrk-http-benchmarking-tool/index.html @@ -261,6 +261,10 @@

Recent Posts

diff --git a/blog/2014/11/19/speed-comparison-of-web-proxies-written-in-python-twisted-and-go/index.html b/blog/2014/11/19/speed-comparison-of-web-proxies-written-in-python-twisted-and-go/index.html index 8cfe46556..ecc35ab1b 100644 --- a/blog/2014/11/19/speed-comparison-of-web-proxies-written-in-python-twisted-and-go/index.html +++ b/blog/2014/11/19/speed-comparison-of-web-proxies-written-in-python-twisted-and-go/index.html @@ -383,6 +383,10 @@

Recent Posts

diff --git a/blog/2014/12/22/blackberry-z10-is-killing-my-wifi-router/index.html b/blog/2014/12/22/blackberry-z10-is-killing-my-wifi-router/index.html index 57b864188..0a1eb4488 100644 --- a/blog/2014/12/22/blackberry-z10-is-killing-my-wifi-router/index.html +++ b/blog/2014/12/22/blackberry-z10-is-killing-my-wifi-router/index.html @@ -237,6 +237,10 @@

Recent Posts

diff --git a/blog/2015/01/05/endless-loop-bug-candy-crush-saga-level-80/index.html b/blog/2015/01/05/endless-loop-bug-candy-crush-saga-level-80/index.html index aec05e5ab..9e737179c 100644 --- a/blog/2015/01/05/endless-loop-bug-candy-crush-saga-level-80/index.html +++ b/blog/2015/01/05/endless-loop-bug-candy-crush-saga-level-80/index.html @@ -235,6 +235,10 @@

Recent Posts

diff --git a/blog/2015/01/07/2-barcode-related-bugs-in-myfitnesspal/index.html b/blog/2015/01/07/2-barcode-related-bugs-in-myfitnesspal/index.html index b9b802157..d9047ff2c 100644 --- a/blog/2015/01/07/2-barcode-related-bugs-in-myfitnesspal/index.html +++ b/blog/2015/01/07/2-barcode-related-bugs-in-myfitnesspal/index.html @@ -263,6 +263,10 @@

Recent Posts

diff --git a/blog/2015/01/09/pedometer-bug-in-samsung-gear-fit-smartwatch/index.html b/blog/2015/01/09/pedometer-bug-in-samsung-gear-fit-smartwatch/index.html index 72c326f57..2cfd9dda8 100644 --- a/blog/2015/01/09/pedometer-bug-in-samsung-gear-fit-smartwatch/index.html +++ b/blog/2015/01/09/pedometer-bug-in-samsung-gear-fit-smartwatch/index.html @@ -291,6 +291,10 @@

Recent Posts

diff --git a/blog/2015/03/16/mining-e-mail-identities-with-gravatar/index.html b/blog/2015/03/16/mining-e-mail-identities-with-gravatar/index.html index f4655b638..5b0d3924f 100644 --- a/blog/2015/03/16/mining-e-mail-identities-with-gravatar/index.html +++ b/blog/2015/03/16/mining-e-mail-identities-with-gravatar/index.html @@ -260,6 +260,10 @@

Recent Posts

diff --git a/blog/2015/04/07/how-to-configure-iscsi-target-on-red-hat-enterprise-linux-7/index.html b/blog/2015/04/07/how-to-configure-iscsi-target-on-red-hat-enterprise-linux-7/index.html index da385d38a..f777783ad 100644 --- a/blog/2015/04/07/how-to-configure-iscsi-target-on-red-hat-enterprise-linux-7/index.html +++ b/blog/2015/04/07/how-to-configure-iscsi-target-on-red-hat-enterprise-linux-7/index.html @@ -517,6 +517,10 @@

Recent Posts

diff --git a/blog/2015/04/08/how-to-configure-targetcli-to-listen-on-ipv4-and-ipv6/index.html b/blog/2015/04/08/how-to-configure-targetcli-to-listen-on-ipv4-and-ipv6/index.html index c0142e35a..1cfb77be0 100644 --- a/blog/2015/04/08/how-to-configure-targetcli-to-listen-on-ipv4-and-ipv6/index.html +++ b/blog/2015/04/08/how-to-configure-targetcli-to-listen-on-ipv4-and-ipv6/index.html @@ -276,6 +276,10 @@

Recent Posts

diff --git a/blog/2015/04/08/tip-linux-io-default-lun-is-0-instead-of-1/index.html b/blog/2015/04/08/tip-linux-io-default-lun-is-0-instead-of-1/index.html index d5cdb7c7d..24ecbb188 100644 --- a/blog/2015/04/08/tip-linux-io-default-lun-is-0-instead-of-1/index.html +++ b/blog/2015/04/08/tip-linux-io-default-lun-is-0-instead-of-1/index.html @@ -250,6 +250,10 @@

Recent Posts

diff --git a/blog/2015/04/14/how-to-find-if-lvm-volume-is-thinly-provisioned/index.html b/blog/2015/04/14/how-to-find-if-lvm-volume-is-thinly-provisioned/index.html index 34382e871..81e8d848b 100644 --- a/blog/2015/04/14/how-to-find-if-lvm-volume-is-thinly-provisioned/index.html +++ b/blog/2015/04/14/how-to-find-if-lvm-volume-is-thinly-provisioned/index.html @@ -255,6 +255,10 @@

Recent Posts

diff --git a/blog/2015/04/20/videos-from-bulgaria-web-summit-2015/index.html b/blog/2015/04/20/videos-from-bulgaria-web-summit-2015/index.html index cb6efba2d..6b13da54e 100644 --- a/blog/2015/04/20/videos-from-bulgaria-web-summit-2015/index.html +++ b/blog/2015/04/20/videos-from-bulgaria-web-summit-2015/index.html @@ -259,6 +259,10 @@

Recent Posts

diff --git a/blog/2015/04/26/installing-red-hat-enterprise-linux-7-on-macbook-air-2015/index.html b/blog/2015/04/26/installing-red-hat-enterprise-linux-7-on-macbook-air-2015/index.html index a8305ba07..3a3ac161b 100644 --- a/blog/2015/04/26/installing-red-hat-enterprise-linux-7-on-macbook-air-2015/index.html +++ b/blog/2015/04/26/installing-red-hat-enterprise-linux-7-on-macbook-air-2015/index.html @@ -1329,6 +1329,10 @@

Recent Posts

diff --git a/blog/2015/04/27/compiling-broadcom-wl-kmod-wifi-driver-for-rhel-7/index.html b/blog/2015/04/27/compiling-broadcom-wl-kmod-wifi-driver-for-rhel-7/index.html index afe81d2ce..7920d4ab2 100644 --- a/blog/2015/04/27/compiling-broadcom-wl-kmod-wifi-driver-for-rhel-7/index.html +++ b/blog/2015/04/27/compiling-broadcom-wl-kmod-wifi-driver-for-rhel-7/index.html @@ -261,6 +261,10 @@

Recent Posts

diff --git a/blog/2015/04/27/disabling-macbook-startup-sound-in-linux/index.html b/blog/2015/04/27/disabling-macbook-startup-sound-in-linux/index.html index f619d7d4f..320a5f1b7 100644 --- a/blog/2015/04/27/disabling-macbook-startup-sound-in-linux/index.html +++ b/blog/2015/04/27/disabling-macbook-startup-sound-in-linux/index.html @@ -276,6 +276,10 @@

Recent Posts

diff --git a/blog/2015/04/27/how-to-enable-backspace-key-to-navigate-back-in-firefox/index.html b/blog/2015/04/27/how-to-enable-backspace-key-to-navigate-back-in-firefox/index.html index 7f789e299..d4e73bbcf 100644 --- a/blog/2015/04/27/how-to-enable-backspace-key-to-navigate-back-in-firefox/index.html +++ b/blog/2015/04/27/how-to-enable-backspace-key-to-navigate-back-in-firefox/index.html @@ -220,6 +220,10 @@

Recent Posts

diff --git a/blog/2015/04/29/fixing-display-brightness-on-macbook-air-with-rhel-7/index.html b/blog/2015/04/29/fixing-display-brightness-on-macbook-air-with-rhel-7/index.html index 7f04ee818..8e4b9986b 100644 --- a/blog/2015/04/29/fixing-display-brightness-on-macbook-air-with-rhel-7/index.html +++ b/blog/2015/04/29/fixing-display-brightness-on-macbook-air-with-rhel-7/index.html @@ -266,6 +266,10 @@

Recent Posts

diff --git a/blog/2015/04/29/rhel-7-repository-for-macbook-air/index.html b/blog/2015/04/29/rhel-7-repository-for-macbook-air/index.html index c440d1114..3803b682e 100644 --- a/blog/2015/04/29/rhel-7-repository-for-macbook-air/index.html +++ b/blog/2015/04/29/rhel-7-repository-for-macbook-air/index.html @@ -244,6 +244,10 @@

Recent Posts

diff --git a/blog/2015/04/30/fixing-tilde-and-function-keys-mapping-for-macbook-air-on-linux/index.html b/blog/2015/04/30/fixing-tilde-and-function-keys-mapping-for-macbook-air-on-linux/index.html index d799bee67..7d52e40f9 100644 --- a/blog/2015/04/30/fixing-tilde-and-function-keys-mapping-for-macbook-air-on-linux/index.html +++ b/blog/2015/04/30/fixing-tilde-and-function-keys-mapping-for-macbook-air-on-linux/index.html @@ -239,6 +239,10 @@

Recent Posts

diff --git a/blog/2015/05/01/compiling-twinkle-sip-phone-on-rhel-7/index.html b/blog/2015/05/01/compiling-twinkle-sip-phone-on-rhel-7/index.html index 34f14b6e0..4878e96c7 100644 --- a/blog/2015/05/01/compiling-twinkle-sip-phone-on-rhel-7/index.html +++ b/blog/2015/05/01/compiling-twinkle-sip-phone-on-rhel-7/index.html @@ -247,6 +247,10 @@

Recent Posts

diff --git a/blog/2015/05/04/thunderbolt-to-ethernet-adapter-on-linux/index.html b/blog/2015/05/04/thunderbolt-to-ethernet-adapter-on-linux/index.html index c401d3583..1f66b1119 100644 --- a/blog/2015/05/04/thunderbolt-to-ethernet-adapter-on-linux/index.html +++ b/blog/2015/05/04/thunderbolt-to-ethernet-adapter-on-linux/index.html @@ -260,6 +260,10 @@

Recent Posts

diff --git a/blog/2015/05/05/using-usb-to-vga-adapter-on-macbook-air-with-linux/index.html b/blog/2015/05/05/using-usb-to-vga-adapter-on-macbook-air-with-linux/index.html index b92294353..cc5ac71ef 100644 --- a/blog/2015/05/05/using-usb-to-vga-adapter-on-macbook-air-with-linux/index.html +++ b/blog/2015/05/05/using-usb-to-vga-adapter-on-macbook-air-with-linux/index.html @@ -241,6 +241,10 @@

Recent Posts

diff --git a/blog/2015/05/13/why-does-sysctl-not-write-under-slash-sys/index.html b/blog/2015/05/13/why-does-sysctl-not-write-under-slash-sys/index.html index a816d8e1a..2efc76433 100644 --- a/blog/2015/05/13/why-does-sysctl-not-write-under-slash-sys/index.html +++ b/blog/2015/05/13/why-does-sysctl-not-write-under-slash-sys/index.html @@ -239,6 +239,10 @@

Recent Posts

diff --git a/blog/2015/05/20/free-software-testing-books/index.html b/blog/2015/05/20/free-software-testing-books/index.html index 653be09e5..6942d485e 100644 --- a/blog/2015/05/20/free-software-testing-books/index.html +++ b/blog/2015/05/20/free-software-testing-books/index.html @@ -230,6 +230,10 @@

Recent Posts

diff --git a/blog/2015/05/22/devit-conf-2015-impressions/index.html b/blog/2015/05/22/devit-conf-2015-impressions/index.html index 81764eaab..cfd3b4577 100644 --- a/blog/2015/05/22/devit-conf-2015-impressions/index.html +++ b/blog/2015/05/22/devit-conf-2015-impressions/index.html @@ -286,6 +286,10 @@

Recent Posts

diff --git a/blog/2015/07/01/open-data-event-coming-to-sofia/index.html b/blog/2015/07/01/open-data-event-coming-to-sofia/index.html index f89f152fc..c8cd48ae1 100644 --- a/blog/2015/07/01/open-data-event-coming-to-sofia/index.html +++ b/blog/2015/07/01/open-data-event-coming-to-sofia/index.html @@ -201,6 +201,8 @@

Open Data Event Coming to Sofia

« DEVit Conf 2015 Impressions + Call for Ideas: Graphical Test Coverage Reports » +

@@ -253,6 +255,10 @@

Recent Posts

diff --git a/blog/2015/07/27/call-for-ideas-graphical-test-coverage-reports/index.html b/blog/2015/07/27/call-for-ideas-graphical-test-coverage-reports/index.html new file mode 100644 index 000000000..f94dcee0e --- /dev/null +++ b/blog/2015/07/27/call-for-ideas-graphical-test-coverage-reports/index.html @@ -0,0 +1,399 @@ + + + + + + + + Call for Ideas: Graphical Test Coverage Reports + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+you can logoff, but you can never leave +
+
+
+ +
+ +
+
+
+
+ +
+ +

Call for Ideas: Graphical Test Coverage Reports

+ + +

+ + + + + + + + + + + + + + + | Comments + +

+ +
+ + +

If you are working with Python and writing unit tests chances are you are +familiar with the coverage reporting +tool. However there are testing scenarios in which we either don’t use unit tests +or maybe execute different code paths(test cases) independent of each other.

+ +

For example, this is the case with installation testing in Fedora. Because anaconda +- the installer is very complex the easiest way is to test it live, not with unit tests. +Even though we can get a coverage report (anaconda is written in Python) it reflects +only the test case it was collected from.

+ +

coverage combine can be used to combine several data files and produce an aggregate +report. This can tell you how much test coverage you have across all your tests.

+ +

As far as I can tell Python’s coverage doesn’t tell you how many times a particular +line of code has been executed. It also doesn’t tell you which test cases executed +a particular line +(see PR #59). +In the Fedora example, I have the feeling many of our tests are touching the same +code base and not contributing that much to the overall test coverage. +So I started working on these items.

+ +

I imagine a script which will read coverage data from several test executions +(preferably in JSON format, +PR #60) and produce a +graphical report similar to what GitHub does for your commit activity.

+ +

See an example here!

+ +

The example uses darker colors to indicate more line executions, lighter for less +executions. Check the HTML for the actual numbers b/c there are no hints yet. +The input JSON files are +here and +the script to generate the above HTML is at +GitHub.

+ +

Now I need your ideas and comments!

+ +

What kinds of coverage reports are you using in your job ? How do you generate them ? +How do they look like ?

+
+ + + +
+ +
+

Comments

+
+
+
+ +
+ + + + +
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + diff --git a/blog/archives/index.html b/blog/archives/index.html index e6a8959b8..a8ced4c8e 100644 --- a/blog/archives/index.html +++ b/blog/archives/index.html @@ -9,9 +9,8 @@ - + @@ -89,6 +88,20 @@

Blog Archive

2015

+
+ +

Call for Ideas: Graphical Test Coverage Reports

+ + + + + +
+ + +

Open Data Event Coming to Sofia

@@ -2660,6 +2673,10 @@

Recent Posts

diff --git a/blog/categories/ado/atom.xml b/blog/categories/ado/atom.xml index 8e37776da..4d370db06 100644 --- a/blog/categories/ado/atom.xml +++ b/blog/categories/ado/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: ADO | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/ado/index.html b/blog/categories/ado/index.html index a3c386d0d..77ce54e33 100644 --- a/blog/categories/ado/index.html +++ b/blog/categories/ado/index.html @@ -146,6 +146,10 @@

Recent Posts

diff --git a/blog/categories/amazon/atom.xml b/blog/categories/amazon/atom.xml index 6eb788ecf..c413e9b04 100644 --- a/blog/categories/amazon/atom.xml +++ b/blog/categories/amazon/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Amazon | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/amazon/index.html b/blog/categories/amazon/index.html index 4b76e5ecd..a44275efa 100644 --- a/blog/categories/amazon/index.html +++ b/blog/categories/amazon/index.html @@ -390,6 +390,10 @@

Recent Posts

diff --git a/blog/categories/android/atom.xml b/blog/categories/android/atom.xml index f1f23af36..ace30a1c0 100644 --- a/blog/categories/android/atom.xml +++ b/blog/categories/android/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Android | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/android/index.html b/blog/categories/android/index.html index 452177142..d6c53a729 100644 --- a/blog/categories/android/index.html +++ b/blog/categories/android/index.html @@ -146,6 +146,10 @@

Recent Posts

diff --git a/blog/categories/azure/atom.xml b/blog/categories/azure/atom.xml index 7602d6e6d..38439cad2 100644 --- a/blog/categories/azure/atom.xml +++ b/blog/categories/azure/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Azure | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/azure/index.html b/blog/categories/azure/index.html index b7c386372..5474949e1 100644 --- a/blog/categories/azure/index.html +++ b/blog/categories/azure/index.html @@ -146,6 +146,10 @@

Recent Posts

diff --git a/blog/categories/blackberry/atom.xml b/blog/categories/blackberry/atom.xml index 50263aed7..bf7f741e9 100644 --- a/blog/categories/blackberry/atom.xml +++ b/blog/categories/blackberry/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: BlackBerry | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/blackberry/index.html b/blog/categories/blackberry/index.html index bc973c4a4..5cbfda299 100644 --- a/blog/categories/blackberry/index.html +++ b/blog/categories/blackberry/index.html @@ -261,6 +261,10 @@

Recent Posts

diff --git a/blog/categories/books/atom.xml b/blog/categories/books/atom.xml index 4474cc27a..f562718fe 100644 --- a/blog/categories/books/atom.xml +++ b/blog/categories/books/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: books | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/books/index.html b/blog/categories/books/index.html index 70e8232eb..10b07d571 100644 --- a/blog/categories/books/index.html +++ b/blog/categories/books/index.html @@ -292,6 +292,10 @@

Recent Posts

diff --git a/blog/categories/bugs/atom.xml b/blog/categories/bugs/atom.xml index 9acd41bed..3014fd0be 100644 --- a/blog/categories/bugs/atom.xml +++ b/blog/categories/bugs/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: bugs | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/bugs/index.html b/blog/categories/bugs/index.html index 12c370f7b..0b19f358f 100644 --- a/blog/categories/bugs/index.html +++ b/blog/categories/bugs/index.html @@ -404,6 +404,10 @@

Recent Posts

diff --git a/blog/categories/cloud/atom.xml b/blog/categories/cloud/atom.xml index 8d38523c9..465e0c93e 100644 --- a/blog/categories/cloud/atom.xml +++ b/blog/categories/cloud/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: cloud | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/cloud/index.html b/blog/categories/cloud/index.html index 5c381f7f4..979713cee 100644 --- a/blog/categories/cloud/index.html +++ b/blog/categories/cloud/index.html @@ -460,6 +460,10 @@

Recent Posts

diff --git a/blog/categories/cloudfront/atom.xml b/blog/categories/cloudfront/atom.xml index bf6964b6b..aa879039f 100644 --- a/blog/categories/cloudfront/atom.xml +++ b/blog/categories/cloudfront/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: CloudFront | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/cloudfront/index.html b/blog/categories/cloudfront/index.html index 8d81fa8db..46d9f5248 100644 --- a/blog/categories/cloudfront/index.html +++ b/blog/categories/cloudfront/index.html @@ -146,6 +146,10 @@

Recent Posts

diff --git a/blog/categories/couchdb/atom.xml b/blog/categories/couchdb/atom.xml index 8b8fc307c..74fe35a40 100644 --- a/blog/categories/couchdb/atom.xml +++ b/blog/categories/couchdb/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: CouchDB | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/couchdb/index.html b/blog/categories/couchdb/index.html index 7e645540e..a250dd9fc 100644 --- a/blog/categories/couchdb/index.html +++ b/blog/categories/couchdb/index.html @@ -146,6 +146,10 @@

Recent Posts

diff --git a/blog/categories/django-social-auth/atom.xml b/blog/categories/django-social-auth/atom.xml index 0defe0178..ef755222f 100644 --- a/blog/categories/django-social-auth/atom.xml +++ b/blog/categories/django-social-auth/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: django-social-auth | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/django-social-auth/index.html b/blog/categories/django-social-auth/index.html index 2b5dfa334..786232b53 100644 --- a/blog/categories/django-social-auth/index.html +++ b/blog/categories/django-social-auth/index.html @@ -174,6 +174,10 @@

Recent Posts

diff --git a/blog/categories/django/atom.xml b/blog/categories/django/atom.xml index b8c038c64..92813c60c 100644 --- a/blog/categories/django/atom.xml +++ b/blog/categories/django/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Django | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ @@ -13,6 +13,53 @@ Octopress + + <![CDATA[Call for Ideas: Graphical Test Coverage Reports]]> + + 2015-07-27T13:04:00+03:00 + http://atodorov.org/blog/2015/07/27/call-for-ideas-graphical-test-coverage-reports + If you are working with Python and writing unit tests chances are you are +familiar with the coverage reporting +tool. However there are testing scenarios in which we either don't use unit tests +or maybe execute different code paths(test cases) independent of each other.

+ +

For example, this is the case with installation testing in Fedora. Because anaconda +- the installer is very complex the easiest way is to test it live, not with unit tests. +Even though we can get a coverage report (anaconda is written in Python) it reflects +only the test case it was collected from.

+ +

coverage combine can be used to combine several data files and produce an aggregate +report. This can tell you how much test coverage you have across all your tests.

+ +

As far as I can tell Python's coverage doesn't tell you how many times a particular +line of code has been executed. It also doesn't tell you which test cases executed +a particular line +(see PR #59). +In the Fedora example, I have the feeling many of our tests are touching the same +code base and not contributing that much to the overall test coverage. +So I started working on these items.

+ +

I imagine a script which will read coverage data from several test executions +(preferably in JSON format, +PR #60) and produce a +graphical report similar to what GitHub does for your commit activity.

+ +

See an example here!

+ +

The example uses darker colors to indicate more line executions, lighter for less +executions. Check the HTML for the actual numbers b/c there are no hints yet. +The input JSON files are +here and +the script to generate the above HTML is at +GitHub.

+ +

Now I need your ideas and comments!

+ +

What kinds of coverage reports are you using in your job ? How do you generate them ? +How do they look like ?

+]]>
+
+ <![CDATA[DEVit Conf 2015 Impressions]]> @@ -242,85 +289,6 @@ not spend anymore time on this problem soon.

current limitations by using Kombu directly (see this gist) with a transport that uses either a UNIX domain socket or a name pipe (FIFO) file.

-]]> -
- - - <![CDATA[Speeding up Celery Backends, Part 2]]> - - 2014-11-07T15:48:00+02:00 - http://atodorov.org/blog/2014/11/07/speeding-up-celery-backends-part-2 - In the first part of this -post I looked at a few celery backends and discovered they didn't meet my needs. -Why is the Celery stack slow? How slow is it actually?

- -

How slow is Celery in practice

- -
    -
  • Queue: 500`000 msg/sec
  • -
  • Kombu: 14`000 msg/sec
  • -
  • Celery: 2`000 msg/sec
  • -
- - -

Detailed test description

- -

There are three main components of the Celery stack:

- -
    -
  • Celery itself
  • -
  • Kombu which handles the transport layer
  • -
  • Python Queue()'s underlying everything
  • -
- - -

Using the Queue and Kombu tests -run for 1 000 000 messages I got the following results:

- -
    -
  • Raw Python Queue: Msgs per sec: 500`000
  • -
  • Raw Kombu without Celery where kombu/utils/__init__.py:uuid() is set to return 0 - -
      -
    • with json serializer: Msgs per sec: 5`988
    • -
    • with pickle serializer: Msgs per sec: 12`820
    • -
    • with the custom mem_serializer from part 1: -Msgs per sec: 14`492
    • -
    -
  • -
- - -

Note: when the test is executed with 100K messages mem_serializer yielded -25`000 msg/sec then the performance is saturated. I've observed similar behavior -with raw Python Queue()'s. I saw some cache buffers being managed internally to avoid OOM -exceptions. This is probably the main reason performance becomes saturated over a longer -execution.

- -
    -
  • Using celery_load_test.py modified to -loop 1 000 000 times I got 1908.0 tasks created per sec.
  • -
- - -

Another interesting this worth outlining - in the kombu test there are these lines: -

1
-2
-3
-4
-5
-6
-
with producers[connection].acquire(block=True) as producer:</p>
-
-<pre><code>for j in range(1000000):
-</code></pre>
-
-<p>

- -

If we swap them the performance drops down to 3875 msg/sec which is comparable with the -Celery results. Indeed inside Celery there's the same with producer.acquire(block=True) -construct which is executed every time a new task is published. Next I will be looking -into this to figure out exactly where the slowliness comes from.

]]>
diff --git a/blog/categories/django/index.html b/blog/categories/django/index.html index c21951544..4198bc7ff 100644 --- a/blog/categories/django/index.html +++ b/blog/categories/django/index.html @@ -87,6 +87,20 @@

Category: Django

2015

+ + + +
diff --git a/blog/categories/ec2/atom.xml b/blog/categories/ec2/atom.xml index f71690ab6..59e1e74c8 100644 --- a/blog/categories/ec2/atom.xml +++ b/blog/categories/ec2/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: EC2 | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/ec2/index.html b/blog/categories/ec2/index.html index 2d6b5e487..e16fb0b14 100644 --- a/blog/categories/ec2/index.html +++ b/blog/categories/ec2/index.html @@ -160,6 +160,10 @@

Recent Posts

diff --git a/blog/categories/elasticache/atom.xml b/blog/categories/elasticache/atom.xml index 75ea41e8a..e7929bae9 100644 --- a/blog/categories/elasticache/atom.xml +++ b/blog/categories/elasticache/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: ElastiCache | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/elasticache/index.html b/blog/categories/elasticache/index.html index 08e4f0d19..25063c2d9 100644 --- a/blog/categories/elasticache/index.html +++ b/blog/categories/elasticache/index.html @@ -146,6 +146,10 @@

Recent Posts

diff --git a/blog/categories/events/atom.xml b/blog/categories/events/atom.xml index 8d1817ba4..7b7f0985b 100644 --- a/blog/categories/events/atom.xml +++ b/blog/categories/events/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: events | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/events/index.html b/blog/categories/events/index.html index 91e5caf53..0715023d2 100644 --- a/blog/categories/events/index.html +++ b/blog/categories/events/index.html @@ -390,6 +390,10 @@

Recent Posts

diff --git a/blog/categories/fedora-planet/atom.xml b/blog/categories/fedora-planet/atom.xml index 1bc77c586..82991777b 100644 --- a/blog/categories/fedora-planet/atom.xml +++ b/blog/categories/fedora-planet/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: fedora.planet | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ @@ -13,6 +13,53 @@ Octopress + + <![CDATA[Call for Ideas: Graphical Test Coverage Reports]]> + + 2015-07-27T13:04:00+03:00 + http://atodorov.org/blog/2015/07/27/call-for-ideas-graphical-test-coverage-reports + If you are working with Python and writing unit tests chances are you are +familiar with the coverage reporting +tool. However there are testing scenarios in which we either don't use unit tests +or maybe execute different code paths(test cases) independent of each other.

+ +

For example, this is the case with installation testing in Fedora. Because anaconda +- the installer is very complex the easiest way is to test it live, not with unit tests. +Even though we can get a coverage report (anaconda is written in Python) it reflects +only the test case it was collected from.

+ +

coverage combine can be used to combine several data files and produce an aggregate +report. This can tell you how much test coverage you have across all your tests.

+ +

As far as I can tell Python's coverage doesn't tell you how many times a particular +line of code has been executed. It also doesn't tell you which test cases executed +a particular line +(see PR #59). +In the Fedora example, I have the feeling many of our tests are touching the same +code base and not contributing that much to the overall test coverage. +So I started working on these items.

+ +

I imagine a script which will read coverage data from several test executions +(preferably in JSON format, +PR #60) and produce a +graphical report similar to what GitHub does for your commit activity.

+ +

See an example here!

+ +

The example uses darker colors to indicate more line executions, lighter for less +executions. Check the HTML for the actual numbers b/c there are no hints yet. +The input JSON files are +here and +the script to generate the above HTML is at +GitHub.

+ +

Now I need your ideas and comments!

+ +

What kinds of coverage reports are you using in your job ? How do you generate them ? +How do they look like ?

+]]>
+
+ <![CDATA[DEVit Conf 2015 Impressions]]> @@ -164,54 +211,6 @@ but I have no idea what the status is. For more info see:

  • http://airlied.livejournal.com/80797.html
  • -]]> -
    - - - <![CDATA[Thunderbolt to Ethernet Adapter on Linux]]> - - 2015-05-04T22:27:00+03:00 - http://atodorov.org/blog/2015/05/04/thunderbolt-to-ethernet-adapter-on-linux - As it seems my -Thunderbolt to gigabit Ethernet adapter -works with -RHEL 7 on a MacBook Air -despite some reports it may not.

    - -

    After plugging the device is automatically recognized and the tg3 driver is loaded. -Detailed lspci below:

    - -
    0a:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM57762 Gigabit Ethernet PCIe
    -    Subsystem: Apple Inc. Device 00f6
    -    Physical Slot: 9
    -    Flags: bus master, fast devsel, latency 0, IRQ 19
    -    Memory at cd800000 (64-bit, prefetchable) [size=64K]
    -    Memory at cd810000 (64-bit, prefetchable) [size=64K]
    -    [virtual] Expansion ROM at cd820000 [disabled] [size=64K]
    -    Capabilities: [48] Power Management version 3
    -    Capabilities: [50] Vital Product Data
    -    Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+
    -    Capabilities: [a0] MSI-X: Enable+ Count=6 Masked-
    -    Capabilities: [ac] Express Endpoint, MSI 00
    -    Capabilities: [100] Advanced Error Reporting
    -    Capabilities: [13c] Device Serial Number 00-00-ac-87-a3-25-20-33
    -    Capabilities: [150] Power Budgeting <?>
    -    Capabilities: [160] Virtual Channel
    -    Capabilities: [1b0] Latency Tolerance Reporting
    -    Kernel driver in use: tg3
    -
    - -

    Unplugging and pluggin back in the network cable works as expected. -I did see my computer freeze 2 out of 10 times when I've unplugged the Thunderbolt -adapter but couldn't reproduce it repliably or grab more info.

    - -

    For the record this is with kernel 3.10.0-229.1.2.el7.x86_64 which is missing -this -upstream commit. -I'm not sure why it works though.

    - -

    If I remember correctly tg3 is available during installation so you should -be able to use the Thunderbolt adapter instead of WiFi as well.

    ]]>
    diff --git a/blog/categories/fedora-planet/index.html b/blog/categories/fedora-planet/index.html index 048b0b344..f8e280cbc 100644 --- a/blog/categories/fedora-planet/index.html +++ b/blog/categories/fedora-planet/index.html @@ -87,6 +87,20 @@

    Category: fedora.planet

    2015

    + + + +
    diff --git a/blog/categories/fedora/atom.xml b/blog/categories/fedora/atom.xml index a224bf4d9..20c060379 100644 --- a/blog/categories/fedora/atom.xml +++ b/blog/categories/fedora/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Fedora | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ @@ -13,6 +13,53 @@ Octopress + + <![CDATA[Call for Ideas: Graphical Test Coverage Reports]]> + + 2015-07-27T13:04:00+03:00 + http://atodorov.org/blog/2015/07/27/call-for-ideas-graphical-test-coverage-reports + If you are working with Python and writing unit tests chances are you are +familiar with the coverage reporting +tool. However there are testing scenarios in which we either don't use unit tests +or maybe execute different code paths(test cases) independent of each other.

    + +

    For example, this is the case with installation testing in Fedora. Because anaconda +- the installer is very complex the easiest way is to test it live, not with unit tests. +Even though we can get a coverage report (anaconda is written in Python) it reflects +only the test case it was collected from.

    + +

    coverage combine can be used to combine several data files and produce an aggregate +report. This can tell you how much test coverage you have across all your tests.

    + +

    As far as I can tell Python's coverage doesn't tell you how many times a particular +line of code has been executed. It also doesn't tell you which test cases executed +a particular line +(see PR #59). +In the Fedora example, I have the feeling many of our tests are touching the same +code base and not contributing that much to the overall test coverage. +So I started working on these items.

    + +

    I imagine a script which will read coverage data from several test executions +(preferably in JSON format, +PR #60) and produce a +graphical report similar to what GitHub does for your commit activity.

    + +

    See an example here!

    + +

    The example uses darker colors to indicate more line executions, lighter for less +executions. Check the HTML for the actual numbers b/c there are no hints yet. +The input JSON files are +here and +the script to generate the above HTML is at +GitHub.

    + +

    Now I need your ideas and comments!

    + +

    What kinds of coverage reports are you using in your job ? How do you generate them ? +How do they look like ?

    +]]>
    +
    + <![CDATA[Videos from Bulgaria Web Summit 2015]]> @@ -222,341 +269,6 @@ without removing the default IPv4 one targetcli will throw an error:

    For more information about targetcli usage see my previous post How to Configure iSCSI Target on Red Hat Enterprise Linux 7.

    -]]> -
    - - - <![CDATA[How to Configure iSCSI Target on Red Hat Enterprise Linux 7]]> - - 2015-04-07T15:52:00+03:00 - http://atodorov.org/blog/2015/04/07/how-to-configure-iscsi-target-on-red-hat-enterprise-linux-7 - Linux-IO (LIO) Target is an open-source implementation of the SCSI target that -has become the standard one included in the Linux kernel and the one present in -Red Hat Enterprise Linux 7. The popular scsi-target-utils package is replaced -by the newer targetcli which makes configuring a software iSCSI target quite -different.

    - -

    In earlier versions one had to edit the /etc/tgtd/targets.conf file and -service tgtd restart. Here is an example configuration:

    - -
    <target iqn.2008-09.com.example:server.target1>
    -    backing-store /dev/vg_iscsi/lv_lun1
    -    backing-store /dev/vg_iscsi/lv_lun2
    -
    -    incominguser user2 secretpass23
    -    outgoinguser userA secretpassA
    -</target>
    -
    - -

    targetcli can be used either as an interactive shell or as stand alone commands. -Here is an example shell session which creates a file-based disk image. Comments are -provided inline:

    - -

    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -29
    -30
    -31
    -32
    -33
    -34
    -35
    -36
    -37
    -38
    -39
    -40
    -41
    -42
    -43
    -44
    -45
    -46
    -47
    -48
    -49
    -50
    -51
    -52
    -53
    -54
    -55
    -56
    -57
    -58
    -59
    -60
    -61
    -62
    -63
    -64
    -65
    -66
    -67
    -68
    -69
    -70
    -71
    -72
    -73
    -74
    -75
    -76
    -77
    -78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
    -96
    -97
    -98
    -99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -
    </p>
    -
    -<h1>yum install -y targetcli</h1>
    -
    -<h1>systemctl enable target</h1>
    -
    -<h1>targetcli</h1>
    -
    -<h1>first create a disk image with the name of disk1. All files are sparsely created.</h1>
    -
    -<p>/> backstores/fileio create disk1 /var/lib/libvirt/images/disk1.img 10G
    -Created fileio disk1 with size 10737418240</p>
    -
    -<h1>create an iSCSI target. NB: this only defines the target</h1>
    -
    -<p>/> iscsi/ create iqn.2015-04.com.example:target1
    -Created target iqn.2015-04.com.example:target1.
    -Created TPG 1.
    -Global pref auto_add_default_portal=true
    -Created default portal listening on all IPs (0.0.0.0), port 3260.</p>
    -
    -<h1>TPGs (Target Portal Groups) allow the iSCSI to support multiple complete</h1>
    -
    -<h1>configurations within one target. This is useful for complex quality-of-service</h1>
    -
    -<h1>configurations. targetcli will automatically create one TPG when the target</h1>
    -
    -<h1>is created, and almost all setups only need one.</h1>
    -
    -<h1>switch to TPG definition for our target</h1>
    -
    -<p>/> cd iscsi/iqn.2015-04.com.example:target1/tpg1</p>
    -
    -<h1>list the contents</h1>
    -
    -<p>/iscsi/iqn.20...:target1/tpg1> ls
    -o- tpg1 ..................................................................................................... [no-gen-acls, no-auth]
    -  o- acls ................................................................................................................ [ACLs: 0]
    -  o- luns ................................................................................................................ [LUNs: 0]
    -  o- portals .......................................................................................................... [Portals: 1]</p>
    -
    -<pre><code>o- 0.0.0.0:3260 ........................................................................................................... [OK]
    -</code></pre>
    -
    -<h1>create a portal aka IP:port pairs which expose the target on the network</h1>
    -
    -<p>/iscsi/iqn.20...:target1/tpg1> portals/ create
    -Using default IP port 3260
    -Binding to INADDR_ANY (0.0.0.0)
    -This NetworkPortal already exists in configFS.</p>
    -
    -<h1>create logical units (LUNs) aka disks inside our target</h1>
    -
    -<h1>in other words bind the target to its on-disk storage</h1>
    -
    -<p>/iscsi/iqn.20...:target1/tpg1> luns/ create /backstores/fileio/disk1
    -Created LUN 0.</p>
    -
    -<h1>disable authentication</h1>
    -
    -<p>/iscsi/iqn.20...:target1/tpg1> set attribute authentication=0
    -Parameter authentication is now '0'.</p>
    -
    -<h1>enable read/write mode</h1>
    -
    -<p>/iscsi/iqn.20...:target1/tpg1> set attribute demo_mode_write_protect=0
    -Parameter demo_mode_write_protect is now '0'.</p>
    -
    -<h1>Enable generate_node_acls mode. This can be thought of as</h1>
    -
    -<h1>"ignore ACLs mode" -- both  authentication and LUN mapping</h1>
    -
    -<h1>will then use the TPG settings.</h1>
    -
    -<p>/iscsi/iqn.20...:target1/tpg1> set attribute generate_node_acls=1
    -Parameter generate_node_acls is now '1'.</p>
    -
    -<p>/iscsi/iqn.20...:target1/tpg1> ls
    -o- tpg1 ........................................................................................................ [gen-acls, no-auth]
    -  o- acls ................................................................................................................ [ACLs: 0]
    -  o- luns ................................................................................................................ [LUNs: 1]
    -  | o- lun0 ..................................................................... [fileio/disk1 (/var/lib/libvirt/images/disk1.img)]
    -  o- portals .......................................................................................................... [Portals: 1]</p>
    -
    -<pre><code>o- 0.0.0.0:3260 ........................................................................................................... [OK]
    -</code></pre>
    -
    -<h1>exit or Ctrl+D will save the configuration under /etc/target/saveconfig.json</h1>
    -
    -<p>/iscsi/iqn.20...:target1/tpg1> exit
    -Global pref auto_save_on_exit=true
    -Last 10 configs saved in /etc/target/backup.
    -Configuration saved to /etc/target/saveconfig.json</p>
    -
    -<h1>after creating a second target the layout looks like this</h1>
    -
    -<p>/> ls
    -o- / ......................................................................................................................... [...]
    -  o- backstores .............................................................................................................. [...]
    -  | o- block .................................................................................................. [Storage Objects: 0]
    -  | o- fileio ................................................................................................. [Storage Objects: 2]
    -  | | o- disk1 .................................................. [/var/lib/libvirt/images/disk1.img (10.0GiB) write-back activated]
    -  | | o- disk2 .................................................. [/var/lib/libvirt/images/disk2.img (10.0GiB) write-back activated]
    -  | o- pscsi .................................................................................................. [Storage Objects: 0]
    -  | o- ramdisk ................................................................................................ [Storage Objects: 0]
    -  o- iscsi ............................................................................................................ [Targets: 2]
    -  | o- iqn.2015-04.com.example:target1 ................................................................................... [TPGs: 1]
    -  | | o- tpg1 .................................................................................................. [gen-acls, no-auth]
    -  | |   o- acls .......................................................................................................... [ACLs: 0]
    -  | |   o- luns .......................................................................................................... [LUNs: 1]
    -  | |   | o- lun0 ............................................................... [fileio/disk1 (/var/lib/libvirt/images/disk1.img)]
    -  | |   o- portals .................................................................................................... [Portals: 1]
    -  | |     o- 0.0.0.0:3260 ..................................................................................................... [OK]
    -  | o- iqn.2015-04.com.example:target2 ................................................................................... [TPGs: 1]
    -  |   o- tpg1 .................................................................................................. [gen-acls, no-auth]
    -  |     o- acls .......................................................................................................... [ACLs: 0]
    -  |     o- luns .......................................................................................................... [LUNs: 1]
    -  |     | o- lun0 ............................................................... [fileio/disk2 (/var/lib/libvirt/images/disk2.img)]
    -  |     o- portals .................................................................................................... [Portals: 1]
    -  |       o- 0.0.0.0:3260 ..................................................................................................... [OK]
    -  o- loopback ......................................................................................................... [Targets: 0]</p>
    -
    -<h1>enable CHAP and Reverse CHAP (mutual) for both discovery and login authentication</h1>
    -
    -<h1>discovery authentication is enabled under the global iscsi node</h1>
    -
    -<p>/> cd /iscsi
    -/iscsi> set discovery_auth enable=1
    -/iscsi> set discovery_auth userid=IncomingUser
    -/iscsi> set discovery_auth password=SomePassword1
    -/iscsi> set discovery_auth mutual_userid=OutgoingUser
    -/iscsi> set discovery_auth mutual_password=AnotherPassword2</p>
    -
    -<h1>login authentication is enabled either under the TPG node or under ACLs</h1>
    -
    -<p>/iscsi> cd iqn.2015-04.com.example:target1/tpg1
    -/iscsi/iqn.20...:target1/tpg1> set attribute authentication=1
    -/iscsi/iqn.20...:target1/tpg1> set auth userid=IncomingUser2
    -/iscsi/iqn.20...:target1/tpg1> set auth password=SomePassword3
    -/iscsi/iqn.20...:target1/tpg1> set auth mutual_userid=OutgoingUser2
    -/iscsi/iqn.20...:target1/tpg1> set auth mutual_password=AnotherPassword4
    -/iscsi/iqn.20...:target1/tpg1> exit</p>
    -
    -<p>

    - -

    Hints:

    - -
      -
    • activating targetcli service at boot is mandatory, otherwise your configuration won’t be read after a reboot
    • -
    • if you type cd targetcli will display an interactive node tree
    • -
    • after configuration is saved you don't need to restart anything
    • -
    • the old scsi-target-utils doesn't support discovery authentication
    • -
    • targetcli allows kernel memory to be shared as a block SCSI device via the -ramdisk backstore. It also supports "nullio" mode, which discards all writes, and returns all-zeroes for reads.
    • -
    • I'm having troubles configuring portals to listen both on any IPv4 addresses and any IPv6 addresses -the system has. I've still not figured that out entirely.
    • -
    - - -

    For more information please read Chapter 25 from Red Hat's -Storage Administration Guide

    ]]>
    diff --git a/blog/categories/fedora/index.html b/blog/categories/fedora/index.html index 3d213b428..1668e0152 100644 --- a/blog/categories/fedora/index.html +++ b/blog/categories/fedora/index.html @@ -87,6 +87,20 @@

    Category: Fedora

    2015

    + + + +
    diff --git a/blog/categories/hackathon/atom.xml b/blog/categories/hackathon/atom.xml index 2db9b204e..d67d9871e 100644 --- a/blog/categories/hackathon/atom.xml +++ b/blog/categories/hackathon/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: hackathon | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/hackathon/index.html b/blog/categories/hackathon/index.html index cc366c4b7..21d23a03c 100644 --- a/blog/categories/hackathon/index.html +++ b/blog/categories/hackathon/index.html @@ -205,6 +205,10 @@

    Recent Posts

    diff --git a/blog/categories/hackfmi/atom.xml b/blog/categories/hackfmi/atom.xml index f7bf15be5..f76ce185e 100644 --- a/blog/categories/hackfmi/atom.xml +++ b/blog/categories/hackfmi/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: hackfmi | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/hackfmi/index.html b/blog/categories/hackfmi/index.html index e6d14d86e..339e4a5e4 100644 --- a/blog/categories/hackfmi/index.html +++ b/blog/categories/hackfmi/index.html @@ -219,6 +219,10 @@

    Recent Posts

    diff --git a/blog/categories/heroku/atom.xml b/blog/categories/heroku/atom.xml index 284399aa1..0122cbf09 100644 --- a/blog/categories/heroku/atom.xml +++ b/blog/categories/heroku/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Heroku | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/heroku/index.html b/blog/categories/heroku/index.html index fc9ebeff1..aa98886b4 100644 --- a/blog/categories/heroku/index.html +++ b/blog/categories/heroku/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/html5/atom.xml b/blog/categories/html5/atom.xml index c9b374b7d..2b2009979 100644 --- a/blog/categories/html5/atom.xml +++ b/blog/categories/html5/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: HTML5 | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/html5/index.html b/blog/categories/html5/index.html index 5c1e4dea4..d366668a7 100644 --- a/blog/categories/html5/index.html +++ b/blog/categories/html5/index.html @@ -160,6 +160,10 @@

    Recent Posts

    diff --git a/blog/categories/ios/atom.xml b/blog/categories/ios/atom.xml index 508605126..b61c86660 100644 --- a/blog/categories/ios/atom.xml +++ b/blog/categories/ios/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: iOS | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/ios/index.html b/blog/categories/ios/index.html index 2b9e7b9a7..3bb575fd1 100644 --- a/blog/categories/ios/index.html +++ b/blog/categories/ios/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/javascript/atom.xml b/blog/categories/javascript/atom.xml index c985e13fe..aaf7bdc3c 100644 --- a/blog/categories/javascript/atom.xml +++ b/blog/categories/javascript/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: JavaScript | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/javascript/index.html b/blog/categories/javascript/index.html index a8669d799..63a078358 100644 --- a/blog/categories/javascript/index.html +++ b/blog/categories/javascript/index.html @@ -160,6 +160,10 @@

    Recent Posts

    diff --git a/blog/categories/jquery/atom.xml b/blog/categories/jquery/atom.xml index 39c408f19..96c59d8f7 100644 --- a/blog/categories/jquery/atom.xml +++ b/blog/categories/jquery/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: jQuery | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/jquery/index.html b/blog/categories/jquery/index.html index d0dfa82d9..8dee4c6ed 100644 --- a/blog/categories/jquery/index.html +++ b/blog/categories/jquery/index.html @@ -160,6 +160,10 @@

    Recent Posts

    diff --git a/blog/categories/mac/atom.xml b/blog/categories/mac/atom.xml index 40f091277..7d317420f 100644 --- a/blog/categories/mac/atom.xml +++ b/blog/categories/mac/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Mac | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/mac/index.html b/blog/categories/mac/index.html index 7d52b6bb7..62089ff17 100644 --- a/blog/categories/mac/index.html +++ b/blog/categories/mac/index.html @@ -244,6 +244,10 @@

    Recent Posts

    diff --git a/blog/categories/microsoft/atom.xml b/blog/categories/microsoft/atom.xml index dbdc0a29a..206c9b6b7 100644 --- a/blog/categories/microsoft/atom.xml +++ b/blog/categories/microsoft/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Microsoft | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/microsoft/index.html b/blog/categories/microsoft/index.html index b8d312da3..940bb6734 100644 --- a/blog/categories/microsoft/index.html +++ b/blog/categories/microsoft/index.html @@ -160,6 +160,10 @@

    Recent Posts

    diff --git a/blog/categories/mongodb/atom.xml b/blog/categories/mongodb/atom.xml index 2b38671a7..4e85edfd8 100644 --- a/blog/categories/mongodb/atom.xml +++ b/blog/categories/mongodb/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: MongoDB | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/mongodb/index.html b/blog/categories/mongodb/index.html index 0f3471535..c0c56b8f2 100644 --- a/blog/categories/mongodb/index.html +++ b/blog/categories/mongodb/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/mysql/atom.xml b/blog/categories/mysql/atom.xml index 73fb77d2d..a3e866433 100644 --- a/blog/categories/mysql/atom.xml +++ b/blog/categories/mysql/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: MySQL | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/mysql/index.html b/blog/categories/mysql/index.html index de974ec05..9015fc05d 100644 --- a/blog/categories/mysql/index.html +++ b/blog/categories/mysql/index.html @@ -160,6 +160,10 @@

    Recent Posts

    diff --git a/blog/categories/nginx/atom.xml b/blog/categories/nginx/atom.xml index 4cce42bab..ddd5d059a 100644 --- a/blog/categories/nginx/atom.xml +++ b/blog/categories/nginx/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Nginx | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/nginx/index.html b/blog/categories/nginx/index.html index 0b9cba07c..e0e4b1a50 100644 --- a/blog/categories/nginx/index.html +++ b/blog/categories/nginx/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/node-js/atom.xml b/blog/categories/node-js/atom.xml index 22697565b..ab801a0d3 100644 --- a/blog/categories/node-js/atom.xml +++ b/blog/categories/node-js/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Node.js | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/node-js/index.html b/blog/categories/node-js/index.html index a2333129b..d7ded3b17 100644 --- a/blog/categories/node-js/index.html +++ b/blog/categories/node-js/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/nokia/atom.xml b/blog/categories/nokia/atom.xml index 4f8b5b787..ba22b129f 100644 --- a/blog/categories/nokia/atom.xml +++ b/blog/categories/nokia/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Nokia | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/nokia/index.html b/blog/categories/nokia/index.html index 5fc13700a..2b9cfd919 100644 --- a/blog/categories/nokia/index.html +++ b/blog/categories/nokia/index.html @@ -160,6 +160,10 @@

    Recent Posts

    diff --git a/blog/categories/open-government/atom.xml b/blog/categories/open-government/atom.xml index aa5728cb5..b00fb2190 100644 --- a/blog/categories/open-government/atom.xml +++ b/blog/categories/open-government/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: open government | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/open-government/index.html b/blog/categories/open-government/index.html index b6ad171ff..01a04bf0a 100644 --- a/blog/categories/open-government/index.html +++ b/blog/categories/open-government/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/openshift/atom.xml b/blog/categories/openshift/atom.xml index d74f4355f..ff59f1fb4 100644 --- a/blog/categories/openshift/atom.xml +++ b/blog/categories/openshift/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: OpenShift | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/openshift/index.html b/blog/categories/openshift/index.html index 07be04959..8277f0437 100644 --- a/blog/categories/openshift/index.html +++ b/blog/categories/openshift/index.html @@ -261,6 +261,10 @@

    Recent Posts

    diff --git a/blog/categories/performance-testing/atom.xml b/blog/categories/performance-testing/atom.xml index 46eb0cc49..97a24d472 100644 --- a/blog/categories/performance-testing/atom.xml +++ b/blog/categories/performance-testing/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: performance testing | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/performance-testing/index.html b/blog/categories/performance-testing/index.html index e5f22933b..bf8d2d75a 100644 --- a/blog/categories/performance-testing/index.html +++ b/blog/categories/performance-testing/index.html @@ -174,6 +174,10 @@

    Recent Posts

    diff --git a/blog/categories/php/atom.xml b/blog/categories/php/atom.xml index efaf81455..4dff71263 100644 --- a/blog/categories/php/atom.xml +++ b/blog/categories/php/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: PHP | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/php/index.html b/blog/categories/php/index.html index 8842e61b3..034e5b956 100644 --- a/blog/categories/php/index.html +++ b/blog/categories/php/index.html @@ -160,6 +160,10 @@

    Recent Posts

    diff --git a/blog/categories/postgresql/atom.xml b/blog/categories/postgresql/atom.xml index 86f7b7893..3b1a5879c 100644 --- a/blog/categories/postgresql/atom.xml +++ b/blog/categories/postgresql/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: PostgreSQL | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/postgresql/index.html b/blog/categories/postgresql/index.html index 615d75b85..6cddbc7b6 100644 --- a/blog/categories/postgresql/index.html +++ b/blog/categories/postgresql/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/python/atom.xml b/blog/categories/python/atom.xml index cf14bb837..2e82a060d 100644 --- a/blog/categories/python/atom.xml +++ b/blog/categories/python/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Python | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/python/index.html b/blog/categories/python/index.html index 1f9e62fd9..846fbb7ef 100644 --- a/blog/categories/python/index.html +++ b/blog/categories/python/index.html @@ -317,6 +317,10 @@

    Recent Posts

    diff --git a/blog/categories/qa/atom.xml b/blog/categories/qa/atom.xml index 4ed49054a..ff37cd5bc 100644 --- a/blog/categories/qa/atom.xml +++ b/blog/categories/qa/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: QA | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ @@ -13,6 +13,53 @@ Octopress + + <![CDATA[Call for Ideas: Graphical Test Coverage Reports]]> + + 2015-07-27T13:04:00+03:00 + http://atodorov.org/blog/2015/07/27/call-for-ideas-graphical-test-coverage-reports + If you are working with Python and writing unit tests chances are you are +familiar with the coverage reporting +tool. However there are testing scenarios in which we either don't use unit tests +or maybe execute different code paths(test cases) independent of each other.

    + +

    For example, this is the case with installation testing in Fedora. Because anaconda +- the installer is very complex the easiest way is to test it live, not with unit tests. +Even though we can get a coverage report (anaconda is written in Python) it reflects +only the test case it was collected from.

    + +

    coverage combine can be used to combine several data files and produce an aggregate +report. This can tell you how much test coverage you have across all your tests.

    + +

    As far as I can tell Python's coverage doesn't tell you how many times a particular +line of code has been executed. It also doesn't tell you which test cases executed +a particular line +(see PR #59). +In the Fedora example, I have the feeling many of our tests are touching the same +code base and not contributing that much to the overall test coverage. +So I started working on these items.

    + +

    I imagine a script which will read coverage data from several test executions +(preferably in JSON format, +PR #60) and produce a +graphical report similar to what GitHub does for your commit activity.

    + +

    See an example here!

    + +

    The example uses darker colors to indicate more line executions, lighter for less +executions. Check the HTML for the actual numbers b/c there are no hints yet. +The input JSON files are +here and +the script to generate the above HTML is at +GitHub.

    + +

    Now I need your ideas and comments!

    + +

    What kinds of coverage reports are you using in your job ? How do you generate them ? +How do they look like ?

    +]]>
    +
    + <![CDATA[Free Software Testing Books]]> @@ -189,33 +236,6 @@ level 137 in the Owl part of the game (recorded by somebody else):

    -]]> -
    - - - <![CDATA[BlackBerry Z10 is Killing My WiFi Router]]> - - 2014-12-22T15:46:00+02:00 - http://atodorov.org/blog/2014/12/22/blackberry-z10-is-killing-my-wifi-router - Few days ago I've resurrected my BlackBerry Z10 only to find out that it kills -my WiFi router shortly after connecting to the network. -It looks like many people are having the same problem with BlackBerry but most forum -threads don't offer a meaningful solution so I did some tests.

    - -

    Everything works fine when WiFi mode is set to either 11bgn mixed or 11n only and -WiFi security is disabled.

    - -

    When using WPA2/Personal security mode and AES encryption the problem occurs -regardless of which WiFi mode is used. There is another type of encryption called TKIP -but the device itself warns that this is not supported by the 802.11n specification -(all my devices use it anyway).

    - -

    So to recap: -BlackBerry Z10 causes my TP-Link router to die if using WPA2/Personal security with -AES Encryption. Switching to open network with MAC address filtering works fine!

    - -

    I haven't had the time to upgrade the firmware of this router and see if the problem persists. -Most likely I'll just go ahead and flash it with OpenWRT.

    ]]>
    diff --git a/blog/categories/qa/index.html b/blog/categories/qa/index.html index 6c820dd29..cc72dc021 100644 --- a/blog/categories/qa/index.html +++ b/blog/categories/qa/index.html @@ -87,6 +87,20 @@

    Category: QA

    2015

    + + + +
    diff --git a/blog/categories/redis/atom.xml b/blog/categories/redis/atom.xml index deae4354a..2b995e663 100644 --- a/blog/categories/redis/atom.xml +++ b/blog/categories/redis/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Redis | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/redis/index.html b/blog/categories/redis/index.html index eccc96b4a..ef7e6bd25 100644 --- a/blog/categories/redis/index.html +++ b/blog/categories/redis/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/rhel/atom.xml b/blog/categories/rhel/atom.xml index 9f2f7353d..b23b62874 100644 --- a/blog/categories/rhel/atom.xml +++ b/blog/categories/rhel/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: RHEL | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/rhel/index.html b/blog/categories/rhel/index.html index ac9e8c5ee..de32d4564 100644 --- a/blog/categories/rhel/index.html +++ b/blog/categories/rhel/index.html @@ -522,6 +522,10 @@

    Recent Posts

    diff --git a/blog/categories/rpm/atom.xml b/blog/categories/rpm/atom.xml index c25bcec57..f688747b9 100644 --- a/blog/categories/rpm/atom.xml +++ b/blog/categories/rpm/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: RPM | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/rpm/index.html b/blog/categories/rpm/index.html index 0cea3ff9c..e537a20c6 100644 --- a/blog/categories/rpm/index.html +++ b/blog/categories/rpm/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/s3/atom.xml b/blog/categories/s3/atom.xml index fd47fcc09..2a9f4543a 100644 --- a/blog/categories/s3/atom.xml +++ b/blog/categories/s3/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: S3 | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/s3/index.html b/blog/categories/s3/index.html index 0ad7b67f2..9b8a1ef00 100644 --- a/blog/categories/s3/index.html +++ b/blog/categories/s3/index.html @@ -202,6 +202,10 @@

    Recent Posts

    diff --git a/blog/categories/samsung/atom.xml b/blog/categories/samsung/atom.xml index 9098a3287..ca0d4ed2b 100644 --- a/blog/categories/samsung/atom.xml +++ b/blog/categories/samsung/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Samsung | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/samsung/index.html b/blog/categories/samsung/index.html index d8eb83b57..9c96be4fe 100644 --- a/blog/categories/samsung/index.html +++ b/blog/categories/samsung/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/ses/atom.xml b/blog/categories/ses/atom.xml index 187257baf..a96d9e50b 100644 --- a/blog/categories/ses/atom.xml +++ b/blog/categories/ses/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: SES | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/ses/index.html b/blog/categories/ses/index.html index 5a8dc4816..a248a3f3a 100644 --- a/blog/categories/ses/index.html +++ b/blog/categories/ses/index.html @@ -174,6 +174,10 @@

    Recent Posts

    diff --git a/blog/categories/sqs/atom.xml b/blog/categories/sqs/atom.xml index 26dde0570..900ffd78e 100644 --- a/blog/categories/sqs/atom.xml +++ b/blog/categories/sqs/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: SQS | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/sqs/index.html b/blog/categories/sqs/index.html index 212e6ff8b..3982454e1 100644 --- a/blog/categories/sqs/index.html +++ b/blog/categories/sqs/index.html @@ -174,6 +174,10 @@

    Recent Posts

    diff --git a/blog/categories/start-up/atom.xml b/blog/categories/start-up/atom.xml index 694d0b7bf..3b989a12c 100644 --- a/blog/categories/start-up/atom.xml +++ b/blog/categories/start-up/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: start-up | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/start-up/index.html b/blog/categories/start-up/index.html index e073e530f..40a53ad8f 100644 --- a/blog/categories/start-up/index.html +++ b/blog/categories/start-up/index.html @@ -415,6 +415,10 @@

    Recent Posts

    diff --git a/blog/categories/symfony/atom.xml b/blog/categories/symfony/atom.xml index 5200090a7..6525026f1 100644 --- a/blog/categories/symfony/atom.xml +++ b/blog/categories/symfony/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Symfony | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/symfony/index.html b/blog/categories/symfony/index.html index 344a8a9b7..4abc53a89 100644 --- a/blog/categories/symfony/index.html +++ b/blog/categories/symfony/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/tips/atom.xml b/blog/categories/tips/atom.xml index 9104ed6ca..64d25f531 100644 --- a/blog/categories/tips/atom.xml +++ b/blog/categories/tips/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: tips | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/tips/index.html b/blog/categories/tips/index.html index fd8492576..059b543f7 100644 --- a/blog/categories/tips/index.html +++ b/blog/categories/tips/index.html @@ -617,6 +617,10 @@

    Recent Posts

    diff --git a/blog/categories/twilio/atom.xml b/blog/categories/twilio/atom.xml index 33bae96ca..02300dc90 100644 --- a/blog/categories/twilio/atom.xml +++ b/blog/categories/twilio/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Twilio | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/twilio/index.html b/blog/categories/twilio/index.html index ae58aba86..2c7512fdc 100644 --- a/blog/categories/twilio/index.html +++ b/blog/categories/twilio/index.html @@ -191,6 +191,10 @@

    Recent Posts

    diff --git a/blog/categories/twitter/atom.xml b/blog/categories/twitter/atom.xml index db1b11c14..01118be41 100644 --- a/blog/categories/twitter/atom.xml +++ b/blog/categories/twitter/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Twitter | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/twitter/index.html b/blog/categories/twitter/index.html index 77476e152..a7849eca9 100644 --- a/blog/categories/twitter/index.html +++ b/blog/categories/twitter/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/virtualization/atom.xml b/blog/categories/virtualization/atom.xml index b3c860a67..a22c950db 100644 --- a/blog/categories/virtualization/atom.xml +++ b/blog/categories/virtualization/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: virtualization | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/virtualization/index.html b/blog/categories/virtualization/index.html index 23f0f73e3..cac44e379 100644 --- a/blog/categories/virtualization/index.html +++ b/blog/categories/virtualization/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/what-runs/atom.xml b/blog/categories/what-runs/atom.xml index 6f3c438ca..fbad7f666 100644 --- a/blog/categories/what-runs/atom.xml +++ b/blog/categories/what-runs/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: what runs | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/what-runs/index.html b/blog/categories/what-runs/index.html index 0ae760c82..20236fb9f 100644 --- a/blog/categories/what-runs/index.html +++ b/blog/categories/what-runs/index.html @@ -230,6 +230,10 @@

    Recent Posts

    diff --git a/blog/categories/windows/atom.xml b/blog/categories/windows/atom.xml index 08b858e4e..8a1270832 100644 --- a/blog/categories/windows/atom.xml +++ b/blog/categories/windows/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Windows | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/windows/index.html b/blog/categories/windows/index.html index b300ad203..add2ce96c 100644 --- a/blog/categories/windows/index.html +++ b/blog/categories/windows/index.html @@ -146,6 +146,10 @@

    Recent Posts

    diff --git a/blog/categories/z10/atom.xml b/blog/categories/z10/atom.xml index fe1dadb29..13f9ffa22 100644 --- a/blog/categories/z10/atom.xml +++ b/blog/categories/z10/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: Z10 | atodorov.org - you can logoff, but you can never leave]]> - 2015-07-01T12:17:16+03:00 + 2015-07-27T13:34:41+03:00 http://atodorov.org/ diff --git a/blog/categories/z10/index.html b/blog/categories/z10/index.html index 2c8bf56d3..095ee05f7 100644 --- a/blog/categories/z10/index.html +++ b/blog/categories/z10/index.html @@ -202,6 +202,10 @@

    Recent Posts

    diff --git a/blog/page/10/index.html b/blog/page/10/index.html index 27a7b9550..a258cdb0a 100644 --- a/blog/page/10/index.html +++ b/blog/page/10/index.html @@ -9,8 +9,9 @@ - + @@ -78,6 +79,182 @@ +
    + +
    + +

    OpenShift Cron Takes Over Celerybeat

    + + +

    + + + + + + + + + + + + + + + | Comments + +

    + +
    + + +

    Celery is an asynchronous task queue/job queue +based on distributed message passing. You can define tasks as Python functions, +execute them in the background and in a periodic fashion. +Difio uses Celery for virtually everything. +Some of the tasks are scheduled after some event takes place (like user pressed a button) +or scheduled periodically.

    + +

    Celery provides several components of which celerybeat is the periodic task scheduler. +When combined with Django it gives you a very nice admin interface +which allows periodic tasks to be added to the scheduler.

    + +

    Why change

    + +

    Difio has relied on celerybeat for a couple of months. Back then, when Difio launched, +there was no cron support for OpenShift so running celerybeat sounded reasonable. +It used to run on a dedicated virtual server and for most of the time that was fine.

    + +

    There were a number of issues which Difio faced during its first months:

    + +
      +
    • celerybeat would sometime die due to no free memory on the virtual instance. +When that happened no new tasks were scheduled and data was left unprocessed. +Let alone that higher memory instance and the processing power which comes with it +cost extra money.

    • +
    • Difio is split into several components which need to have the same code base +locally - the most important are database settings and the periodic tasks +code. At least in one occasion celerybeat failed to start because of a buggy +task code. The offending code was fixed in the application server on OpenShift but +not properly synced to the celerybeat instance. Keeping code in sync is a priority +for distributed projects which rely on Celery.

    • +
    • Celery and django-celery seem to be updated quite often. This poses a significant risk +of ending up with different versions on the scheduler, worker nodes and the app server. This will +bring the whole application to a halt if at some point a backward incompatible change is introduced +and not properly tested and updated. Keeping infrastructure components in sync can be a big challenge +and I try to minimize this effort as much as possible.

    • +
    • Having to navigate to the admin pages every time I add a new task or want to change the execution +frequency doesn’t feel very natural for a console user like myself and IMHO is less productive. +For the record I primarily use mcedit. I wanted to have something more close to the +write, commit and push work-flow.

    • +
    + + +

    The take over

    + +

    It’s been some time since OpenShift +introduced +the cron cartridge and I decided to give it a try.

    + +

    The first thing I did is to write a simple script which can execute any task from the difio.tasks module +by piping it to the Django shell (a Python shell actually).

    + +
    run_celery_task
    +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +
    #!/bin/bash
    +#
    +# Copyright (c) 2012, Alexander Todorov <atodorov@nospam.otb.bg>
    +#
    +# This script is symlinked to from the hourly/minutely, etc. directories
    +#
    +# SYNOPSIS
    +#
    +# ./run_celery_task cron_search_dates
    +#
    +# OR
    +#
    +# ln -s run_celery_task cron_search_dates
    +# ./cron_search_dates
    +#
    +
    +TASK_NAME=$1
    +[ -z "$TASK_NAME" ] && TASK_NAME=$(basename $0)
    +
    +if [ -n "$OPENSHIFT_APP_DIR" ]; then
    +    source $OPENSHIFT_APP_DIR/virtenv/bin/activate
    +    export PYTHON_EGG_CACHE=$OPENSHIFT_DATA_DIR/.python-eggs
    +    REPO_DIR=$OPENSHIFT_REPO_DIR
    +else
    +    REPO_DIR=$(dirname $0)"/../../.."
    +fi
    +
    +echo "import difio.tasks; difio.tasks.$TASK_NAME.delay()" | $REPO_DIR/wsgi/difio/manage.py shell
    +
    + + +

    This is a multicall script which allows symlinks with different names to point to it. +Thus to add a new task to cron I just need to make a symlink to the script from one of the +hourly/, minutely/, daily/, etc. directories under cron/.

    + +

    The script accepts a parameter as well which allows me to execute it locally for debugging purposes +or to schedule some tasks out of band. +This is how it looks like on the file system:

    + +
    $ ls -l .openshift/cron/hourly/
    +some_task_name -> ../tasks/run_celery_task
    +another_task -> ../tasks/run_celery_task
    +
    + +

    After having done these preparations I only had to embed the cron cartridge and git push to OpenShift:

    + +
    rhc-ctl-app -a difio -e add-cron-1.4 && git push
    +
    + +

    What’s next

    + +

    At present OpenShift can schedule your jobs every minute, hour, day, week or month and does so using the +run-parts script. You can’t schedule a script to execute at 4:30 every Monday or every 45 minutes for example. +See rhbz #803485 if you want to follow the +progress. Luckily Difio doesn’t use this sort of job scheduling for the moment.

    + +

    Difio is scheduling periodic tasks from OpenShift cron for a few days already. +It seems to work reliably and with no issues. One less component to maintain and worry about. +More time to write code.

    +
    + + + + +
    + +
    @@ -960,6 +1137,10 @@

    Recent Posts

    diff --git a/blog/page/2/index.html b/blog/page/2/index.html index 4bcc084f2..ee8897843 100644 --- a/blog/page/2/index.html +++ b/blog/page/2/index.html @@ -9,9 +9,8 @@ - + @@ -79,6 +78,92 @@ +
    + +
    + +

    Mining E-mail Identities With Gravatar

    + + +

    + + + + + + + + + + + + + + + | Comments + +

    + +
    + + +

    Recently I’ve laid my hands on a list of little over 7000 email addresses. +This begs the question how much of them are still in use and what for ?

    + +

    My data is not fresh so I’ve uploaded the list to Facebook and created a custom +audience. 2400 of 7129 addresses were recognized - 30% of these addresses are +on Facebook and easy to target! Need to figure out which ones.

    + +

    I could have tried some sort of batch search combined with the custom audience +functionality but I didn’t find an API for that and decided not to bother. +Instead I’ve opted for Gravatar.

    + +
    gravatars.sh
    +
    1
    +2
    +3
    +4
    +5
    +6
    +
    #!/bin/bash
    +
    +while read LINE; do
    +    HASH=`echo -n $LINE | md5sum | cut -f1 -d' '`
    +    wget "http://gravatar.com/avatar/$HASH" -O "$LINE"
    +done < /dev/stdin
    +
    + + +

    Feed gravatars.sh with the email list and it will download all images to the +current working directory and use the address as the file name. After +md5sum *@* | cut -f1 -d' ' | sort | uniq -c I quickly noticed the following:

    + +
      +
    • 4563 addresses have the a1719586837f0fdac8835f74cf4ef04a check-sum; These are +not found on Gravatar.
    • +
    • 2400 addresses have the d5fe5cbcc31cff5f8ac010db72eb000c check-sum. These are +addresses which are registered with Gravatar but didn’t bother to change the default +image.
    • +
    • 166 remaining addresses, each with a different check-sum. These have their custom +pictures uploaded to Gravatar and probably much more actively used.
    • +
    + + +

    A second check with Facebook reveals 900 out of these 2566 addresses were recognized. +This begs the question is Facebook showing incorrect stats or are there 1500 addresses +using Gravatar (or have used at some point) which are not on Facebook ?

    + +

    At least some of the remaining 4000 addresses are still active and used to send emails. +Next I will be looking for ways to identify them. Any suggestions and comments are more +than welcome!

    +
    + + + + +
    + +
    @@ -2090,79 +2175,6 @@

    Multiple File Selection

    -
    - - -
    - -
    - -

    Using D-Link DAP-1320 Wireless Range Extender With MAC Filtering

    - - -

    - - - - - - - - - - - - - - - | Comments - -

    - -
    - - -
    - - -

    Recently I’ve purchased a -wireless range extender -as the one shown here. It had troubles connecting to the upstream Wi-Fi router -because it used MAC filtering instead of password security. Luckily there was -a forum thread which helped -me figure it out.

    - -

    DAP 1320 uses two MAC addresses

    - -

    Everything was working just fine with MAC filtering disabled on the upstream -router but failed miserably when enabled. I thought the MAC address provided -on the DAP 1320 packaging was wrong.

    - -

    It turned out the device had 2 addresses. -The one on the packaging is 70:62:B8:07:0B:76 and it didn’t matter if that -is enabled or disabled in the router settings. The second MAC is used when -trying to forward connections through the router. Both addresses differ by the -second symbol with a difference of 2. So I’ve enabled 72:62:B8:07:0B:76 -in the router settings and everything worked like a charm.

    - -

    Other findings

    - -

    Unfortunately if a device is connected to the wifi extender’s network it will -bypass the MAC filtering employed on the upstream wifi router. As much as I dislike -using passwords for Wi-Fi I had to configure one for the extended network.

    - -

    I’ve also found that when you save the configuration file from the device on your -hard drive it comes in a base64-encoded-line-by-line format. Pretty awkward.

    - -

    Another pleasant (but not entirely surprising) finding was that D-Link included -a written acknowledgment of using open source components and an offer to provide -source code upon request.

    -
    - - - -
    diff --git a/blog/page/3/index.html b/blog/page/3/index.html index 295e0f6a4..246adcfa9 100644 --- a/blog/page/3/index.html +++ b/blog/page/3/index.html @@ -9,9 +9,10 @@ - + @@ -79,6 +80,79 @@ +
    + +
    + +

    Using D-Link DAP-1320 Wireless Range Extender With MAC Filtering

    + + +

    + + + + + + + + + + + + + + + | Comments + +

    + +
    + + +
    + + +

    Recently I’ve purchased a +wireless range extender +as the one shown here. It had troubles connecting to the upstream Wi-Fi router +because it used MAC filtering instead of password security. Luckily there was +a forum thread which helped +me figure it out.

    + +

    DAP 1320 uses two MAC addresses

    + +

    Everything was working just fine with MAC filtering disabled on the upstream +router but failed miserably when enabled. I thought the MAC address provided +on the DAP 1320 packaging was wrong.

    + +

    It turned out the device had 2 addresses. +The one on the packaging is 70:62:B8:07:0B:76 and it didn’t matter if that +is enabled or disabled in the router settings. The second MAC is used when +trying to forward connections through the router. Both addresses differ by the +second symbol with a difference of 2. So I’ve enabled 72:62:B8:07:0B:76 +in the router settings and everything worked like a charm.

    + +

    Other findings

    + +

    Unfortunately if a device is connected to the wifi extender’s network it will +bypass the MAC filtering employed on the upstream wifi router. As much as I dislike +using passwords for Wi-Fi I had to configure one for the extended network.

    + +

    I’ve also found that when you save the configuration file from the device on your +hard drive it comes in a base64-encoded-line-by-line format. Pretty awkward.

    + +

    Another pleasant (but not entirely surprising) finding was that D-Link included +a written acknowledgment of using open source components and an offer to provide +source code upon request.

    +
    + + + + +
    + +
    @@ -1796,101 +1870,6 @@

    How Do -

    - - -
    - -
    - -

    Last Week in Fedora QA

    - - -

    - - - - - - - - - - - - - - - | Comments - -

    - -
    - - -

    Here are some highlights from the past week discussions in Fedora which I found -interesting or participated in.

    - -

    Call to Action: Improving Overall Test Coverage in Fedora

    - -

    I can not stress enough how important it is to further -improve test coverage in Fedora! -You can help too. Here’s how:

    - -
      -
    • Join upstream and create a test suite for a package you find interesting;
    • -
    • Provide patches - first patch -came in less than 30 minutes of initial announcement :);
    • -
    • Review packages in the wiki and help identify false negatives;
    • -
    • Forward to people who may be interested to work on these items;
    • -
    • Share and promote in your local open source and developer communities;
    • -
    - - -

    Auto BuildRequires

    - -

    Auto-BuildRequires -is a simple set of scripts which compliments rpmbuild by -automatically suggesting BuildRequires lines for the just built package.

    - -

    It would be interesting to have this integrated into Koji and/or -continuous integration environment and compare the output between every two -consecutive builds (iow older and newer package versions). It sounds like a -good way to identify newly added or removed dependencies and update the package -specs accordingly.

    - -

    How To Test Fonts Packages

    - -

    This is exactly what -Christopher Meng asked -and frankly I have no idea.

    - -

    I’ve come across a few fonts packages (amiri-fonts, gnu-free-fonts and thai-scalable-fonts) -which seem to have some sort of test suites but I don’t know how they work or -what type of problems they test for. On top of that all three have a different -way of doing things (e.g. not using a standardized test framework or a variation of such).

    - -

    I’ll keep you posted on this once I manage to get more info from upstream developers.

    - -

    Is URL Field in RPM Useless

    - -

    So is it? Opinions here differ from totally useless to “don’t remove it, I need it”. -However I run a small test and from 2574 RPMs on the source DVD there is around -40% of “something different than HTTP 200 OK”. This means 40% potentially broken URLs!

    - -

    The majority are responses in the 3XX range and only less than 10% are -actual errors (4XX, 5XX, missing URLs or connection errors).

    - -

    It will be interesting to see if this can be removed from rpm altogether. -I don’t think it will happen soon but if we don’t use it why have it there?

    - -

    My script for the test is -here.

    -
    - - - -
    diff --git a/blog/page/4/index.html b/blog/page/4/index.html index 9059810c6..8207b57d5 100644 --- a/blog/page/4/index.html +++ b/blog/page/4/index.html @@ -9,8 +9,8 @@ - + @@ -78,6 +78,101 @@ +
    + +
    + +

    Last Week in Fedora QA

    + + +

    + + + + + + + + + + + + + + + | Comments + +

    + +
    + + +

    Here are some highlights from the past week discussions in Fedora which I found +interesting or participated in.

    + +

    Call to Action: Improving Overall Test Coverage in Fedora

    + +

    I can not stress enough how important it is to further +improve test coverage in Fedora! +You can help too. Here’s how:

    + +
      +
    • Join upstream and create a test suite for a package you find interesting;
    • +
    • Provide patches - first patch +came in less than 30 minutes of initial announcement :);
    • +
    • Review packages in the wiki and help identify false negatives;
    • +
    • Forward to people who may be interested to work on these items;
    • +
    • Share and promote in your local open source and developer communities;
    • +
    + + +

    Auto BuildRequires

    + +

    Auto-BuildRequires +is a simple set of scripts which compliments rpmbuild by +automatically suggesting BuildRequires lines for the just built package.

    + +

    It would be interesting to have this integrated into Koji and/or +continuous integration environment and compare the output between every two +consecutive builds (iow older and newer package versions). It sounds like a +good way to identify newly added or removed dependencies and update the package +specs accordingly.

    + +

    How To Test Fonts Packages

    + +

    This is exactly what +Christopher Meng asked +and frankly I have no idea.

    + +

    I’ve come across a few fonts packages (amiri-fonts, gnu-free-fonts and thai-scalable-fonts) +which seem to have some sort of test suites but I don’t know how they work or +what type of problems they test for. On top of that all three have a different +way of doing things (e.g. not using a standardized test framework or a variation of such).

    + +

    I’ll keep you posted on this once I manage to get more info from upstream developers.

    + +

    Is URL Field in RPM Useless

    + +

    So is it? Opinions here differ from totally useless to “don’t remove it, I need it”. +However I run a small test and from 2574 RPMs on the source DVD there is around +40% of “something different than HTTP 200 OK”. This means 40% potentially broken URLs!

    + +

    The majority are responses in the 3XX range and only less than 10% are +actual errors (4XX, 5XX, missing URLs or connection errors).

    + +

    It will be interesting to see if this can be removed from rpm altogether. +I don’t think it will happen soon but if we don’t use it why have it there?

    + +

    My script for the test is +here.

    +
    + + + + +
    + +
    @@ -2433,165 +2528,6 @@

    Open Source Quality Assurance Infrastructure for Fedora QA

    - - -

    - - - - - - - - - - - - - - - | Comments - -

    - -
    - - -

    "Beaker test lab"

    - -

    In the last few weeks I’ve been working together with -Tim Flink and -Kamil Paral from the Fedora QA -team on bringing some installation testing expertise to Fedora and establishing -an open source test lab -to perform automated testing in. The infrastructure is -already in relatively usable condition so I’ve decided to share this information -with the community.

    - -

    Beaker is Running Our Test Lab

    - -

    Beaker is the software suite that powers the test -lab infrastructure. It is quite complex, with many components and sometimes not -very straight-forward to set up. Tim has been working on that with me giving it -a try and reporting issues as they have been discovered and fixed.

    - -

    In the process of working on this I’ve managed to create -couple of patches -against Beaker and friends. They are still pending release in a future version -because of more urgent bug fixes which need to released first.

    - -

    SNAKE is The Kickstart Template Server

    - -

    SNAKE is a client/server Python framework used -to support Anaconda installations. It supports plain text ks.cfg files, IIRC those -were static templates, no variable substitution.

    - -

    The other possibility is Python templates based on Pykickstart:

    - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -
    from pykickstart.constants import KS_SCRIPT_POST
    -from pykickstart.parser import Script
    -from installdefaults import InstallKs
    -
    -def ks(**context):
    -    '''Anaconda autopart'''
    -
    -    ks=InstallKs()
    -    ks.packages.add(['@base'])
    -
    -    ks.clearpart(initAll=True)
    -    ks.autopart(autopart=True)
    -
    -    script = '''
    -cp /tmp/ks.cfg /mnt/sysimage/root/ks.cfg || \
    -cp /run/install/ks.cfg /mnt/sysimage/root/ks.cfg
    -'''
    -    post = Script(script, type=KS_SCRIPT_POST, inChroot=False)
    -    ks.scripts.append(post)
    -
    -    return ks
    -
    - - -

    At the moment SNAKE is essentially abandoned but feature complete. -I’m thinking about adopting the project just in case we need to make some fixes. -Will let you know more about this when it happens.

    - -

    Open Source Test Suite

    - -

    I have been working on opening up several test cases for what we (QE) call -a tier #1 installation test suite. They can be found in -git. -The tests are base on beakerlib and -the legacy RHTS framework which is now part of Beaker.

    - -

    This effort has been coordinated with Kamil as part of a pilot -project he’s responsible for. I’ve been executing the same test suite against -earlier Fedora 20 snapshots but using an internal environment. Now everything -is going out in the open.

    - -

    Executing The Tests

    - -

    Well you can’t do that - YET! There are command line client tools for Fedora -but Beaker and SNAKE are not well suited for use outside a restricted network -like LAN or VPN. There are issues with authentication most notably for SNAKE.

    - -

    At the moment I have to ssh through two different systems to get proper access. -However this is been worked on. I’ve read about a rewrite which will allow Beaker -to utilize a custom authentication framework like FAS for example. Hopefully that -will be implemented soon enough.

    - -

    I will also like to see the test systems have direct access to the Internet for -various reasons but this is not without its risks either. This is still to be -decided.

    - -

    If you are interested anyway see the kick-tests.sh file in the test suite for -examples and command line options.

    - -

    Test Results

    - -

    The first successfully completed -test jobs are jobs 50 to 58. -There’s a failure in one of the test cases, namely SELinux related -RHBZ #1027148.

    - -

    From what I can tell the lab is now working as expected and we can start doing -some testing against Fedora development snapshots.

    - -

    Ping me or join #fedora-qa on irc.freenode.net if you’d like to join Fedora QA!

    -
    - - - -
    diff --git a/blog/page/5/index.html b/blog/page/5/index.html index afbb8b2c9..bde47058f 100644 --- a/blog/page/5/index.html +++ b/blog/page/5/index.html @@ -9,8 +9,10 @@ - + @@ -78,6 +80,165 @@ +
    + +
    + +

    Open Source Quality Assurance Infrastructure for Fedora QA

    + + +

    + + + + + + + + + + + + + + + | Comments + +

    + +
    + + +

    "Beaker test lab"

    + +

    In the last few weeks I’ve been working together with +Tim Flink and +Kamil Paral from the Fedora QA +team on bringing some installation testing expertise to Fedora and establishing +an open source test lab +to perform automated testing in. The infrastructure is +already in relatively usable condition so I’ve decided to share this information +with the community.

    + +

    Beaker is Running Our Test Lab

    + +

    Beaker is the software suite that powers the test +lab infrastructure. It is quite complex, with many components and sometimes not +very straight-forward to set up. Tim has been working on that with me giving it +a try and reporting issues as they have been discovered and fixed.

    + +

    In the process of working on this I’ve managed to create +couple of patches +against Beaker and friends. They are still pending release in a future version +because of more urgent bug fixes which need to released first.

    + +

    SNAKE is The Kickstart Template Server

    + +

    SNAKE is a client/server Python framework used +to support Anaconda installations. It supports plain text ks.cfg files, IIRC those +were static templates, no variable substitution.

    + +

    The other possibility is Python templates based on Pykickstart:

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    from pykickstart.constants import KS_SCRIPT_POST
    +from pykickstart.parser import Script
    +from installdefaults import InstallKs
    +
    +def ks(**context):
    +    '''Anaconda autopart'''
    +
    +    ks=InstallKs()
    +    ks.packages.add(['@base'])
    +
    +    ks.clearpart(initAll=True)
    +    ks.autopart(autopart=True)
    +
    +    script = '''
    +cp /tmp/ks.cfg /mnt/sysimage/root/ks.cfg || \
    +cp /run/install/ks.cfg /mnt/sysimage/root/ks.cfg
    +'''
    +    post = Script(script, type=KS_SCRIPT_POST, inChroot=False)
    +    ks.scripts.append(post)
    +
    +    return ks
    +
    + + +

    At the moment SNAKE is essentially abandoned but feature complete. +I’m thinking about adopting the project just in case we need to make some fixes. +Will let you know more about this when it happens.

    + +

    Open Source Test Suite

    + +

    I have been working on opening up several test cases for what we (QE) call +a tier #1 installation test suite. They can be found in +git. +The tests are base on beakerlib and +the legacy RHTS framework which is now part of Beaker.

    + +

    This effort has been coordinated with Kamil as part of a pilot +project he’s responsible for. I’ve been executing the same test suite against +earlier Fedora 20 snapshots but using an internal environment. Now everything +is going out in the open.

    + +

    Executing The Tests

    + +

    Well you can’t do that - YET! There are command line client tools for Fedora +but Beaker and SNAKE are not well suited for use outside a restricted network +like LAN or VPN. There are issues with authentication most notably for SNAKE.

    + +

    At the moment I have to ssh through two different systems to get proper access. +However this is been worked on. I’ve read about a rewrite which will allow Beaker +to utilize a custom authentication framework like FAS for example. Hopefully that +will be implemented soon enough.

    + +

    I will also like to see the test systems have direct access to the Internet for +various reasons but this is not without its risks either. This is still to be +decided.

    + +

    If you are interested anyway see the kick-tests.sh file in the test suite for +examples and command line options.

    + +

    Test Results

    + +

    The first successfully completed +test jobs are jobs 50 to 58. +There’s a failure in one of the test cases, namely SELinux related +RHBZ #1027148.

    + +

    From what I can tell the lab is now working as expected and we can start doing +some testing against Fedora development snapshots.

    + +

    Ping me or join #fedora-qa on irc.freenode.net if you’d like to join Fedora QA!

    +
    + + + + +
    + +
    @@ -1407,59 +1568,6 @@

    Notes From Two Interesting GUADEC Talks

    - - -

    - - - - - - - - - - - - - - - | Comments - -

    - -
    - - -

    As this year’s GUADEC is coming to an end -I’m publishing an interesting update from -Petr Muller for -those who were not able to attend. -Petr is a Senior Quality Engineer at Red Hat. His notes were -sent to an internal QE mailing list and re-published with permission.

    - -

    As this year’s GUADEC happened in the same building where I have my
    other office, I decided to attend. I’m sharing my notes from the two
    sessions I consider to be especially interesting for the audience of
    this mailing list:

    == How to not report your UX bug ==
    Speaker: Fabiana Simões
    Blog: http://fabianapsimoes.wordpress.com/
    Twitter: https://twitter.com/fabianapsimoes

    Do not do this stuff:
    * Do not simply present a preferred solution, but describe a problem (a
    difficulty you are having, etc.)
    * Do not use “This sucks” idiom, not even hidden in false niceties like
    “It’s not user friendly”
    * Do not talk for majority, when you are not entitled to (“most users
    would like”)
    * Do not consider all UX issues as minor: an inability to do stuff is
    not a minor issue

    What is actually interesting for the designer in a report?
    * What were you trying to do?
    * Why did you want to do it?
    * What did you do?
    * What happened?
    * What were your expectations?

    More notes
    * Write as much as needed
    * Describe what you see, did and *how you felt*
    * Print screen is your friend!
    * *Give praise*

    == Extreme containment measures: keeping bug reports under control ==
    Speaker: Jean-Francois Fortin Tam
    Homepage: http://jeff.ecchi.ca
    Twitter: https://twitter.com/nekohayo

    Discussed the problem lot of OS projects are having: lot of useless
    (old, irrelevant, waiting for decision no one wants to make) bug/rfe
    reports in their bug tracking systems. Lots of food for thought about
    our own projects, internal or external. Clever applications of
    principles from personal productivity systems such as GTD and Inbox Zero
    for bug tracking.

    The talk was mostly an applied version of this blog post, which is worth
    reading:
    http://jeff.ecchi.ca/blog/2012/10/08/reducing-our-core-apps-software-inventory/

    Petr Muller
    - - -

    I particularly like the UX bug reporting guide lines. Need to take those into -account when reporting UI issues.

    - -

    I still haven’t read the second blog post which also looks interesting although -not very applicable to me. After all I’m the person reporting bugs not the one -who decides what and when gets fixed.

    -
    - - - -
    diff --git a/blog/page/6/index.html b/blog/page/6/index.html index f791e90c5..ca5717da8 100644 --- a/blog/page/6/index.html +++ b/blog/page/6/index.html @@ -9,9 +9,10 @@ - + @@ -79,6 +80,59 @@ +
    + +
    + +

    Notes From Two Interesting GUADEC Talks

    + + +

    + + + + + + + + + + + + + + + | Comments + +

    + +
    + + +

    As this year’s GUADEC is coming to an end +I’m publishing an interesting update from +Petr Muller for +those who were not able to attend. +Petr is a Senior Quality Engineer at Red Hat. His notes were +sent to an internal QE mailing list and re-published with permission.

    + +

    As this year’s GUADEC happened in the same building where I have my
    other office, I decided to attend. I’m sharing my notes from the two
    sessions I consider to be especially interesting for the audience of
    this mailing list:

    == How to not report your UX bug ==
    Speaker: Fabiana Simões
    Blog: http://fabianapsimoes.wordpress.com/
    Twitter: https://twitter.com/fabianapsimoes

    Do not do this stuff:
    * Do not simply present a preferred solution, but describe a problem (a
    difficulty you are having, etc.)
    * Do not use “This sucks” idiom, not even hidden in false niceties like
    “It’s not user friendly”
    * Do not talk for majority, when you are not entitled to (“most users
    would like”)
    * Do not consider all UX issues as minor: an inability to do stuff is
    not a minor issue

    What is actually interesting for the designer in a report?
    * What were you trying to do?
    * Why did you want to do it?
    * What did you do?
    * What happened?
    * What were your expectations?

    More notes
    * Write as much as needed
    * Describe what you see, did and *how you felt*
    * Print screen is your friend!
    * *Give praise*

    == Extreme containment measures: keeping bug reports under control ==
    Speaker: Jean-Francois Fortin Tam
    Homepage: http://jeff.ecchi.ca
    Twitter: https://twitter.com/nekohayo

    Discussed the problem lot of OS projects are having: lot of useless
    (old, irrelevant, waiting for decision no one wants to make) bug/rfe
    reports in their bug tracking systems. Lots of food for thought about
    our own projects, internal or external. Clever applications of
    principles from personal productivity systems such as GTD and Inbox Zero
    for bug tracking.

    The talk was mostly an applied version of this blog post, which is worth
    reading:
    http://jeff.ecchi.ca/blog/2012/10/08/reducing-our-core-apps-software-inventory/

    Petr Muller
    + + +

    I particularly like the UX bug reporting guide lines. Need to take those into +account when reporting UI issues.

    + +

    I still haven’t read the second blog post which also looks interesting although +not very applicable to me. After all I’m the person reporting bugs not the one +who decides what and when gets fixed.

    +
    + + + + +
    + +
    @@ -2325,77 +2379,6 @@

    Give a Book, Get a Laptop With Discount

    - - -

    - - - - - - - - - - - - - - - | Comments - -

    - -
    - - -

    Time Heroes

    - -

    Bulgarian start-up TimeHeroes.org is helping a non-profit organization to -collect used computers and books for children in foster care. -They are helping more children get access to the Internet.

    - -

    I will donate an -Asus -eeePC and a -Fujitsu -laptop plus all books -from my Give Away List, which are not currently taken. -Because this is not much I have an offer for everyone else, who would like to help.

    - -
    - - -

    What is the offer

    - -

    Give a book or your old laptop and get a new one with discount!.

    - -

    My company -Open Technologies Bulgaria, Ltd. is an authorized reseller of Vali Computers and -Fujitsu. Hardware reselling is not the main company activity but a backup in case a customer -wants to purchase entire solution from one vendor.

    - -

    I will not charge the standard reseller’s discount (between 5% and 10%) if you drop-off your books -or old laptops with me and agree to donated them to children. -The offer is valid as long as the donation campaign is (I don’t know how long but looks like ongoing).

    - -

    You can select anything from http://www.vali.bg with the reseller’s discount off! -Delivery or pick-up is on you though.

    - -

    If you want to participate use the comments below and I will get in touch with you.

    -
    - - - -
    diff --git a/blog/page/7/index.html b/blog/page/7/index.html index 4829cda3f..59fe8797b 100644 --- a/blog/page/7/index.html +++ b/blog/page/7/index.html @@ -9,8 +9,9 @@ - + @@ -78,6 +79,77 @@ +
    + +
    + +

    Give a Book, Get a Laptop With Discount

    + + +

    + + + + + + + + + + + + + + + | Comments + +

    + +
    + + +

    Time Heroes

    + +

    Bulgarian start-up TimeHeroes.org is helping a non-profit organization to +collect used computers and books for children in foster care. +They are helping more children get access to the Internet.

    + +

    I will donate an +Asus +eeePC and a +Fujitsu +laptop plus all books +from my Give Away List, which are not currently taken. +Because this is not much I have an offer for everyone else, who would like to help.

    + +
    + + +

    What is the offer

    + +

    Give a book or your old laptop and get a new one with discount!.

    + +

    My company +Open Technologies Bulgaria, Ltd. is an authorized reseller of Vali Computers and +Fujitsu. Hardware reselling is not the main company activity but a backup in case a customer +wants to purchase entire solution from one vendor.

    + +

    I will not charge the standard reseller’s discount (between 5% and 10%) if you drop-off your books +or old laptops with me and agree to donated them to children. +The offer is valid as long as the donation campaign is (I don’t know how long but looks like ongoing).

    + +

    You can select anything from http://www.vali.bg with the reseller’s discount off! +Delivery or pick-up is on you though.

    + +

    If you want to participate use the comments below and I will get in touch with you.

    +
    + + + + +
    + +
    @@ -2317,120 +2389,6 @@

    What to do about it?

    -
    - - -
    - -
    - -

    The Best IT School in Bulgaria

    - - -

    - - - - - - - - - - - - - - - | Comments - -

    - -
    - - -

    How TUES tests robots

    - -

    "Quadcopter"

    - -

    What is Elsys?

    - -

    Elsys (in Bulgarian TUES) is a technology school in Sofia. -It is a subsidiary of Technical University of Sofia and this week they’ve celebrated their 25th anniversary. -Elsys is not an ordinary school, they teach computer science to these young kids. -And they do it pretty damn well. At the moment it’s the best -school to study IT (software, hardware, networks) in the country, contrary to what TU Sofia has -become :(.

    - -

    As one of the school sponsors I met lots of the students -and want to show everyone else what they are doing. I have no doubts we will be hearing more about -them in the future.

    - -

    Robots first

    - -

    So these boys and girls make robots. I was there when the first image was taken. -It was this week in Thursday, April 25th at an educational fair. All visitors were -fascinated by the robots and stopped by to watch and play with them. I personally -wanted to see and play with the quadcopter shown above but it was not available that -day.

    - -

    While I was there, a guy approached the kids and said his -company wants to fund development of another quadcopter. He wanted a bigger one, which -is able to carry equipment for aerial photographs.

    - -

    What shook me was that -this is a rare occasion where a local business wants to fund R&D activities. -Not to mentions these are school boys, not university students or research fellows -where this is more -common. And this happened days after the news about the quadcopter has been released -in the social media.

    - - - - -

    Elsys also teaches Arduino classes where students play with home made robots. I personally -have attended a robots competition held in the school where these small robots compete -and sometimes fight with one another.

    - -

    Did I mention they take part in First Lego League too? Just see the -photos.

    - -

    Open source

    - -

    When not making robots students from Elsys hack open source and as it happened, -one of them won the grand prize in Google Code-In 2012 -(article in Bulgarian). -For the last few years kids from Elsys are taking part in Google Code-In and according -to the school website -they’ve made $7300 from Google :). Over 40 -boys and girls took part in the first -edition of Google Code-In. That’s 10% of all participants.

    - -

    I’m sure Google and others were impressed by the fact so many good developers -are coming from a single school. Aren’t you?

    - -

    Cisco Networking Academy

    - -

    Yup, they have this too! Elsys teams have won top honors at 6 of the last 8 -BANA-sponsored -National Networking Competitions. -Cisco themselves wrote an article about Elsys.

    - -

    Want to help

    - -

    As I said I’m a school sponsor. Probably the smallest one. If you want to help -these kids and their school just let me know. I will put you in touch with the -principal.

    - -

    Alternatively you can donate your time and knowledge and start teaching an interesting -class at school!

    - -

    Or you can donate high quality IT books if you have such. Anything helps.

    -
    - - - -
    diff --git a/blog/page/8/index.html b/blog/page/8/index.html index a7cf9aba8..fe58a4bc5 100644 --- a/blog/page/8/index.html +++ b/blog/page/8/index.html @@ -9,9 +9,8 @@ - + @@ -79,6 +78,120 @@ +
    + +
    + +

    The Best IT School in Bulgaria

    + + +

    + + + + + + + + + + + + + + + | Comments + +

    + +
    + + +

    How TUES tests robots

    + +

    "Quadcopter"

    + +

    What is Elsys?

    + +

    Elsys (in Bulgarian TUES) is a technology school in Sofia. +It is a subsidiary of Technical University of Sofia and this week they’ve celebrated their 25th anniversary. +Elsys is not an ordinary school, they teach computer science to these young kids. +And they do it pretty damn well. At the moment it’s the best +school to study IT (software, hardware, networks) in the country, contrary to what TU Sofia has +become :(.

    + +

    As one of the school sponsors I met lots of the students +and want to show everyone else what they are doing. I have no doubts we will be hearing more about +them in the future.

    + +

    Robots first

    + +

    So these boys and girls make robots. I was there when the first image was taken. +It was this week in Thursday, April 25th at an educational fair. All visitors were +fascinated by the robots and stopped by to watch and play with them. I personally +wanted to see and play with the quadcopter shown above but it was not available that +day.

    + +

    While I was there, a guy approached the kids and said his +company wants to fund development of another quadcopter. He wanted a bigger one, which +is able to carry equipment for aerial photographs.

    + +

    What shook me was that +this is a rare occasion where a local business wants to fund R&D activities. +Not to mentions these are school boys, not university students or research fellows +where this is more +common. And this happened days after the news about the quadcopter has been released +in the social media.

    + + + + +

    Elsys also teaches Arduino classes where students play with home made robots. I personally +have attended a robots competition held in the school where these small robots compete +and sometimes fight with one another.

    + +

    Did I mention they take part in First Lego League too? Just see the +photos.

    + +

    Open source

    + +

    When not making robots students from Elsys hack open source and as it happened, +one of them won the grand prize in Google Code-In 2012 +(article in Bulgarian). +For the last few years kids from Elsys are taking part in Google Code-In and according +to the school website +they’ve made $7300 from Google :). Over 40 +boys and girls took part in the first +edition of Google Code-In. That’s 10% of all participants.

    + +

    I’m sure Google and others were impressed by the fact so many good developers +are coming from a single school. Aren’t you?

    + +

    Cisco Networking Academy

    + +

    Yup, they have this too! Elsys teams have won top honors at 6 of the last 8 +BANA-sponsored +National Networking Competitions. +Cisco themselves wrote an article about Elsys.

    + +

    Want to help

    + +

    As I said I’m a school sponsor. Probably the smallest one. If you want to help +these kids and their school just let me know. I will put you in touch with the +principal.

    + +

    Alternatively you can donate your time and knowledge and start teaching an interesting +class at school!

    + +

    Or you can donate high quality IT books if you have such. Anything helps.

    +
    + + + + +
    + +
    @@ -1707,123 +1820,6 @@

    Unsupported but works

    -
    - - -
    - -
    - -

    Bug in Nokia Software Shows Wrong Caller ID

    - - -

    - - - - - - - - - - - - - - - | Comments - -

    - -
    - - -

    During the past month one of my cell phones, -Nokia -5800 XpressMusic -, was not showing the caller name when a friend was calling. -The number in the contacts list was correct but the name wasn’t showing, -nor the custom assigned ringing tone. It turned out to be a bug!

    - -

    The story behind this is that accidentally the same number was saved again -in the contacts list, but without a name assigned to it. -The software was matching the later one, so no custom ringing tone, -no name shown. Removing the duplicate entry fixed the issue. Software version of this -phone is

    - -
    v 21.0.025
    -RM-356
    -02-04-09
    -
    - -

    I wondered what will happen with multiple duplicates and if this was fixed in a later -software version so I tested with another phone, -Nokia 6303. -Software version is

    - -
    V 07.10
    -25-03-10
    -RM-638
    -
    - -
      -
    • Step 0 - add the number to the contacts list, with name Buddy 1
    • -
    • Step 1 - add the same number to the contacts, with empty name. -Result: You get a warning this number is already present for Buddy 1! -When receiving a call, Buddy 1 is displayed.
    • -
    • Step 2 - edit the empty name contact and change the name to Buddy 2. -Result: when receiving a call Buddy 2 is displayed.
    • -
    • Step 3 - add the same number again, with name Buddy 0. This is the latest entry -but it is sorted before the previous two (this is important). -Result: You get a warning that this number is already present for Buddy 1 and Buddy 2. -When receiving a call Buddy 0 is displayed.
    • -
    - - -

    Summary: so it looks like Nokia fixed the issue with empty names, by simply ignoring them -but when multiple duplicate contacts are available it displays the name of the last entered in the -contact list, independent of name sort order.

    - -

    -Later today or tomorrow I will test on -Nokia 700 -which runs Symbian OS and update this post with more results. -

    - -

    Updated on 2013-03-19 23:50

    - -

    Finally managed to test on -Nokia 700. -Software version is:

    - -
    Release
    -Nokia Belle Feature pack 1
    -Software version
    -112.010.1404
    -Software version date
    -2012-03-30
    -Type
    -RM-670
    -
    - -

    Result: If a duplicate contact entry is present it doesn’t matter if the name is empty or not. -Both times no name was displayed when receiving a call. Looks like Nokia is not paying attention to -regressions at all.

    - -

    Android and iPhone

    - -

    I don’t own any -Android -or -iPhone -devices so I’m not able to test on them. If you have one, please let me know if this bug is still present -and how does the software behave when multiple contacts share the same number or have empty names! Thanks!

    -
    - - - -
    diff --git a/blog/page/9/index.html b/blog/page/9/index.html index bc0e2e682..c37d7f0e9 100644 --- a/blog/page/9/index.html +++ b/blog/page/9/index.html @@ -9,8 +9,11 @@ - + @@ -78,6 +81,123 @@ +
    + +
    + +

    Bug in Nokia Software Shows Wrong Caller ID

    + + +

    + + + + + + + + + + + + + + + | Comments + +

    + +
    + + +

    During the past month one of my cell phones, +Nokia +5800 XpressMusic +, was not showing the caller name when a friend was calling. +The number in the contacts list was correct but the name wasn’t showing, +nor the custom assigned ringing tone. It turned out to be a bug!

    + +

    The story behind this is that accidentally the same number was saved again +in the contacts list, but without a name assigned to it. +The software was matching the later one, so no custom ringing tone, +no name shown. Removing the duplicate entry fixed the issue. Software version of this +phone is

    + +
    v 21.0.025
    +RM-356
    +02-04-09
    +
    + +

    I wondered what will happen with multiple duplicates and if this was fixed in a later +software version so I tested with another phone, +Nokia 6303. +Software version is

    + +
    V 07.10
    +25-03-10
    +RM-638
    +
    + +
      +
    • Step 0 - add the number to the contacts list, with name Buddy 1
    • +
    • Step 1 - add the same number to the contacts, with empty name. +Result: You get a warning this number is already present for Buddy 1! +When receiving a call, Buddy 1 is displayed.
    • +
    • Step 2 - edit the empty name contact and change the name to Buddy 2. +Result: when receiving a call Buddy 2 is displayed.
    • +
    • Step 3 - add the same number again, with name Buddy 0. This is the latest entry +but it is sorted before the previous two (this is important). +Result: You get a warning that this number is already present for Buddy 1 and Buddy 2. +When receiving a call Buddy 0 is displayed.
    • +
    + + +

    Summary: so it looks like Nokia fixed the issue with empty names, by simply ignoring them +but when multiple duplicate contacts are available it displays the name of the last entered in the +contact list, independent of name sort order.

    + +

    +Later today or tomorrow I will test on +Nokia 700 +which runs Symbian OS and update this post with more results. +

    + +

    Updated on 2013-03-19 23:50

    + +

    Finally managed to test on +Nokia 700. +Software version is:

    + +
    Release
    +Nokia Belle Feature pack 1
    +Software version
    +112.010.1404
    +Software version date
    +2012-03-30
    +Type
    +RM-670
    +
    + +

    Result: If a duplicate contact entry is present it doesn’t matter if the name is empty or not. +Both times no name was displayed when receiving a call. Looks like Nokia is not paying attention to +regressions at all.

    + +

    Android and iPhone

    + +

    I don’t own any +Android +or +iPhone +devices so I’m not able to test on them. If you have one, please let me know if this bug is still present +and how does the software behave when multiple contacts share the same number or have empty names! Thanks!

    +
    + + + + +
    + +
    @@ -2217,182 +2337,6 @@

    How to implement it

    -
    - - -
    - -
    - -

    OpenShift Cron Takes Over Celerybeat

    - - -

    - - - - - - - - - - - - - - - | Comments - -

    - -
    - - -

    Celery is an asynchronous task queue/job queue -based on distributed message passing. You can define tasks as Python functions, -execute them in the background and in a periodic fashion. -Difio uses Celery for virtually everything. -Some of the tasks are scheduled after some event takes place (like user pressed a button) -or scheduled periodically.

    - -

    Celery provides several components of which celerybeat is the periodic task scheduler. -When combined with Django it gives you a very nice admin interface -which allows periodic tasks to be added to the scheduler.

    - -

    Why change

    - -

    Difio has relied on celerybeat for a couple of months. Back then, when Difio launched, -there was no cron support for OpenShift so running celerybeat sounded reasonable. -It used to run on a dedicated virtual server and for most of the time that was fine.

    - -

    There were a number of issues which Difio faced during its first months:

    - -
      -
    • celerybeat would sometime die due to no free memory on the virtual instance. -When that happened no new tasks were scheduled and data was left unprocessed. -Let alone that higher memory instance and the processing power which comes with it -cost extra money.

    • -
    • Difio is split into several components which need to have the same code base -locally - the most important are database settings and the periodic tasks -code. At least in one occasion celerybeat failed to start because of a buggy -task code. The offending code was fixed in the application server on OpenShift but -not properly synced to the celerybeat instance. Keeping code in sync is a priority -for distributed projects which rely on Celery.

    • -
    • Celery and django-celery seem to be updated quite often. This poses a significant risk -of ending up with different versions on the scheduler, worker nodes and the app server. This will -bring the whole application to a halt if at some point a backward incompatible change is introduced -and not properly tested and updated. Keeping infrastructure components in sync can be a big challenge -and I try to minimize this effort as much as possible.

    • -
    • Having to navigate to the admin pages every time I add a new task or want to change the execution -frequency doesn’t feel very natural for a console user like myself and IMHO is less productive. -For the record I primarily use mcedit. I wanted to have something more close to the -write, commit and push work-flow.

    • -
    - - -

    The take over

    - -

    It’s been some time since OpenShift -introduced -the cron cartridge and I decided to give it a try.

    - -

    The first thing I did is to write a simple script which can execute any task from the difio.tasks module -by piping it to the Django shell (a Python shell actually).

    - -
    run_celery_task
    -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    -25
    -26
    -27
    -28
    -
    #!/bin/bash
    -#
    -# Copyright (c) 2012, Alexander Todorov <atodorov@nospam.otb.bg>
    -#
    -# This script is symlinked to from the hourly/minutely, etc. directories
    -#
    -# SYNOPSIS
    -#
    -# ./run_celery_task cron_search_dates
    -#
    -# OR
    -#
    -# ln -s run_celery_task cron_search_dates
    -# ./cron_search_dates
    -#
    -
    -TASK_NAME=$1
    -[ -z "$TASK_NAME" ] && TASK_NAME=$(basename $0)
    -
    -if [ -n "$OPENSHIFT_APP_DIR" ]; then
    -    source $OPENSHIFT_APP_DIR/virtenv/bin/activate
    -    export PYTHON_EGG_CACHE=$OPENSHIFT_DATA_DIR/.python-eggs
    -    REPO_DIR=$OPENSHIFT_REPO_DIR
    -else
    -    REPO_DIR=$(dirname $0)"/../../.."
    -fi
    -
    -echo "import difio.tasks; difio.tasks.$TASK_NAME.delay()" | $REPO_DIR/wsgi/difio/manage.py shell
    -
    - - -

    This is a multicall script which allows symlinks with different names to point to it. -Thus to add a new task to cron I just need to make a symlink to the script from one of the -hourly/, minutely/, daily/, etc. directories under cron/.

    - -

    The script accepts a parameter as well which allows me to execute it locally for debugging purposes -or to schedule some tasks out of band. -This is how it looks like on the file system:

    - -
    $ ls -l .openshift/cron/hourly/
    -some_task_name -> ../tasks/run_celery_task
    -another_task -> ../tasks/run_celery_task
    -
    - -

    After having done these preparations I only had to embed the cron cartridge and git push to OpenShift:

    - -
    rhc-ctl-app -a difio -e add-cron-1.4 && git push
    -
    - -

    What’s next

    - -

    At present OpenShift can schedule your jobs every minute, hour, day, week or month and does so using the -run-parts script. You can’t schedule a script to execute at 4:30 every Monday or every 45 minutes for example. -See rhbz #803485 if you want to follow the -progress. Luckily Difio doesn’t use this sort of job scheduling for the moment.

    - -

    Difio is scheduling periodic tasks from OpenShift cron for a few days already. -It seems to work reliably and with no issues. One less component to maintain and worry about. -More time to write code.

    -
    - - - -
    diff --git a/domains/index.html b/domains/index.html index ce679710d..9dccf1211 100644 --- a/domains/index.html +++ b/domains/index.html @@ -181,6 +181,10 @@

    Recent Posts

    diff --git a/give-away/index.html b/give-away/index.html index f74e46961..233ce7c33 100644 --- a/give-away/index.html +++ b/give-away/index.html @@ -267,6 +267,10 @@

    Recent Posts

    diff --git a/index.html b/index.html index db135e135..3619872ec 100644 --- a/index.html +++ b/index.html @@ -9,9 +9,9 @@ - + @@ -79,6 +79,82 @@ +
    + +
    + +

    Call for Ideas: Graphical Test Coverage Reports

    + + +

    + + + + + + + + + + + + + + + | Comments + +

    + +
    + + +

    If you are working with Python and writing unit tests chances are you are +familiar with the coverage reporting +tool. However there are testing scenarios in which we either don’t use unit tests +or maybe execute different code paths(test cases) independent of each other.

    + +

    For example, this is the case with installation testing in Fedora. Because anaconda +- the installer is very complex the easiest way is to test it live, not with unit tests. +Even though we can get a coverage report (anaconda is written in Python) it reflects +only the test case it was collected from.

    + +

    coverage combine can be used to combine several data files and produce an aggregate +report. This can tell you how much test coverage you have across all your tests.

    + +

    As far as I can tell Python’s coverage doesn’t tell you how many times a particular +line of code has been executed. It also doesn’t tell you which test cases executed +a particular line +(see PR #59). +In the Fedora example, I have the feeling many of our tests are touching the same +code base and not contributing that much to the overall test coverage. +So I started working on these items.

    + +

    I imagine a script which will read coverage data from several test executions +(preferably in JSON format, +PR #60) and produce a +graphical report similar to what GitHub does for your commit activity.

    + +

    See an example here!

    + +

    The example uses darker colors to indicate more line executions, lighter for less +executions. Check the HTML for the actual numbers b/c there are no hints yet. +The input JSON files are +here and +the script to generate the above HTML is at +GitHub.

    + +

    Now I need your ideas and comments!

    + +

    What kinds of coverage reports are you using in your job ? How do you generate them ? +How do they look like ?

    +
    + + + + +
    + +
    @@ -2790,92 +2866,6 @@

    Mining E-mail Identities With Gravatar

    - - -

    - - - - - - - - - - - - - - - | Comments - -

    - -
    - - -

    Recently I’ve laid my hands on a list of little over 7000 email addresses. -This begs the question how much of them are still in use and what for ?

    - -

    My data is not fresh so I’ve uploaded the list to Facebook and created a custom -audience. 2400 of 7129 addresses were recognized - 30% of these addresses are -on Facebook and easy to target! Need to figure out which ones.

    - -

    I could have tried some sort of batch search combined with the custom audience -functionality but I didn’t find an API for that and decided not to bother. -Instead I’ve opted for Gravatar.

    - -
    gravatars.sh
    -
    1
    -2
    -3
    -4
    -5
    -6
    -
    #!/bin/bash
    -
    -while read LINE; do
    -    HASH=`echo -n $LINE | md5sum | cut -f1 -d' '`
    -    wget "http://gravatar.com/avatar/$HASH" -O "$LINE"
    -done < /dev/stdin
    -
    - - -

    Feed gravatars.sh with the email list and it will download all images to the -current working directory and use the address as the file name. After -md5sum *@* | cut -f1 -d' ' | sort | uniq -c I quickly noticed the following:

    - -
      -
    • 4563 addresses have the a1719586837f0fdac8835f74cf4ef04a check-sum; These are -not found on Gravatar.
    • -
    • 2400 addresses have the d5fe5cbcc31cff5f8ac010db72eb000c check-sum. These are -addresses which are registered with Gravatar but didn’t bother to change the default -image.
    • -
    • 166 remaining addresses, each with a different check-sum. These have their custom -pictures uploaded to Gravatar and probably much more actively used.
    • -
    - - -

    A second check with Facebook reveals 900 out of these 2566 addresses were recognized. -This begs the question is Facebook showing incorrect stats or are there 1500 addresses -using Gravatar (or have used at some point) which are not on Facebook ?

    - -

    At least some of the remaining 4000 addresses are still active and used to send emails. -Next I will be looking for ways to identify them. Any suggestions and comments are more -than welcome!

    -
    - - - -
    diff --git a/projects/index.html b/projects/index.html index 04c654688..cd9cd263e 100644 --- a/projects/index.html +++ b/projects/index.html @@ -208,6 +208,10 @@

    Recent Posts

    diff --git a/sitemap.xml b/sitemap.xml index 1d6c60395..295046fcd 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -906,13 +906,19 @@ http://atodorov.org/blog/2015/07/01/open-data-event-coming-to-sofia/ 2015-07-01T12:15:05+03:00 + + + http://atodorov.org/blog/2015/07/27/call-for-ideas-graphical-test-coverage-reports/ + + 2015-07-27T13:34:31+03:00 + http://atodorov.org/about/ 2013-05-02T01:43:01+03:00 http://atodorov.org/blog/archives/ - 2015-07-01T12:15:05+03:00 + 2015-07-27T13:34:31+03:00 http://atodorov.org/domains/ @@ -928,7 +934,7 @@ http://atodorov.org/ - 2015-07-01T12:15:05+03:00 + 2015-07-27T13:34:31+03:00 http://atodorov.org/robots.txt