Συμμετοχή στο 2ο openSUSE Collaboration Summer Camp

Ζεσταθήκατε;
Ήρθε η ώρα να κανονίσετε τις καλοκαιρινές σας εξορμήσεις!
Το 2ο openSUSE Collaboration Summer Camp πλησιάζει και φέτος στο γνωστό μέρος (ξενοδοχείο Grand Platon στην παραλία Κατερίνης) στις 20-22 Ιουλίου 2012!
Όπως και πέρσι θα μαζευτούμε στην πισίνα και θα συνδυάσουμε μπάνια και μπύρες με παρουσιάσεις και workshops (μην ξεχάσετε να φέρετε τα laptop σας!)
Η εκδήλωση δεν αφορά σε καμία περίπωση μόνο χρήστες του openSUSE!
Σκοπός είναι η συνεργασία μεταξύ ανθρώπων που απολαμβάνουν να προσφέρουν στο Ε.Λ/Λ.Α.Κ και η γνωριμία με τους διάφορους τρόπους που μπορούν να το κάνουν.
Σας περιμένουμε όλους ανεξαιρέτως από τη διανομή σας για να συζητήσουμε, να ανταλλάξουμε απόψεις και φυσικά περιμένουμε και τις δικές σας ομιλίες ή/και workshops πάνω στα θέματα που σας ενδιαφέρουν!
Όπως και πέρσι θα υπάρχει ποικιλία θεμάτων που θα παρουσιαστούν τα οποία θα ανταποκρίνονται σε όλους, ακόμα και στους πιο νέους και όχι και τόσο έμπειρους χρήστες.
Όλοι μπορούν να συμμετέχουν ενεργά, να παρακολουθήσουν τις παρουσιάσεις και να πραγματοποιήσουν workshops!
Τι πρέπει να γνωρίζετε:
1.[CfP] Η υποβολή ομιλιών/workshops έχει ανοίξει και περιμένουμε και τις δικές σας προτάσεις!
Το μόνο που χρειάζεται να κάνετε είναι να συμπληρώστε τη φόρμα: http://www.os-el.gr/content/submit-talk-collaboration-summer-camp-2012
2. Για δήλωση συμμετοχής & κρατήσεις δωματίων (καλό είναι να το κάνετε εγκαίρως για να μας βοηθήσετε να κρατήσουμε τα διαθέσιμα δωμάτια που θα χρειαστούν στο ξενοδοχείο) στείλτε τα στοιχεία σας στο reservations@os-el.gr
(Για κράτηση δωματίου απαιτείται η καταβολή του 50% του κόστους - περισσότερες πληροφορίες για την κατάθεση θα σας δοθούν μέσω email)
Το κόστος για τα δωμάτια είναι (συμπεριλαμβάνεται πρωινό & βραδινό):
* Μονόκλινο - 35 ευρώ/βραδιά
* Δίκλινο - 45 ευρώ/βραδιά
* Τρίκλινο - 60 ευρώ/βραδιά
3. Έχετε άλλες ερωτήσεις ή απορίες;
* Περισσότερες πληροφορίες μπορείτε να βρείτε στη σελίδα www.os-el.gr/summercamp
* Για οποιαδήποτε ερώτηση, επικοινωνήστε μαζί μας μέσω email: summercamp@os-el.gr
Διότι αγαπάμε αυτό που κάνουμε & περνάμε ωραία συνεισφέροντας στο ΕΛ/ΛΑΚ ακόμα και το καλοκαίρι!
ΣΑΣ ΠΕΡΙΜΕΝΟΥΜΕ ΟΛΟΥΣ ΕΚΕΙ!
libvirt: chardev: opening backend “pty” failed: Permission denied
Recently I found myself in front of a strange problem that prevented me from creating new virtual machines with libvirt on KVM. Everytime I tried to create a virtual machine, I got a message similar to this:
Error: internal error Process exited while reading console log output: chardev: opening backend "pty" failed: Permission denied
Interestingly, directly after a reboot of the host, the same guest configuration would simply work. I did some searches in the internet and found, that there only view other people had this same problem, but I could not find a solution.
After tracing libvirtd and pestering some of my colleagues, I found that it actually could not access /dev/pts correctly. It turned out, that some change root environment also mounted /dev/pts although not with the right mount parameters. This had the effect, that the original /dev/pts also was remounted with the wrong mounting parameters.
So, to solve this issue, you need to
- find who is mounting /dev/pts in a wrong way and correct it
- remount /dev/pts correctly
The remount can be done with the following command:
mount -n -t devpts -o remount,mode=0620,gid=5 devpts /dev/pts
After this, libvirtd will be able again to access the device and work as desired.
Fosscomm 2012 at Serres
Greetings, i had some personal issues so this post got a “little” delayed.
Fosscomm is the annual conference of the Greek Free Software communities. This year took place on May 12-13 at serres and I had a presentation with Δημήτρης Παπαπούλιος(Dimitris Papapoulios). We organized the road trip with friends from Athens.
LinuxTeam
On the first day of the conference at 11:30 I had a presentation about an
“open source college laboratory courses administration platform (Diogenis)” with Δημήτρης Παπαπούλιος(Dimitris Papapoulios).
Dimitris Talked about what the application is how it works, who wrote it and all those stuff also about how can someone contribute to it.
I explained the tech stack under which Diogenis operates, what we use for the server,what optimizations have we done etc.
openSUSE-el
like the previous year (and the one before that :p) the greek openSUSE community had a handful of presentations and a booth. Unfortunately i only watched the openSUSE-medical presentation. Ευστάθιος Ιωσηφίδης(Efstathios Iosifidis) presented the Medical project its goals and future. I wanted to also participate in the Open Build System(OBS) workshop by Ευστάθιος Αγραπίδης(Efstathios Agrapidis) but it was canceled due to low attendance (first thing in the morning of the 2nd day of the conference) :(
Gentoo-el
This year the greek Gentoo community also had a booth in the conference like openSUSE and Fedora. There were Gentoo stickers of varying sizes and for the price of 1 Euro one could get a Gentoo pin to support the foundation. Δημήτρης Παπαπούλιος and Νίκος Χατζιδάκης(Dimitris Papapoulios and Nikos Chajidakis) presented the Gentoo project. There was also a workshop about Crossdev/Distcc but it got canceled like the OBS one.
CTF - Capture The Flag
So Happy for my colleagues and fellow LinuxTeam members Βικτωρία Σαγάνη and Κωνσταντίνος Σπέντζας(Victoria Sagani and Konstantinos Spentzas) that solved the most challenges in this Fosscomm’s CTF. Registered as “Beef” they finished first with 350 Pts and they got a lenovo s10-3t and free tickets for AppSec 2012.
I spent the rest of the conference helping around at the various booths (mostly on Gnome-el, Gentoo-el, openSUSE-el) and talking with people. I also met old friends and people i had only talked to online (via IRC).
Congratulations to SerLUG for the organization! :)
Cron Script for Karma plugin
Previously, details were fetched on every view of the widget, which was a gross mistake on my part and my mentor Michal suggested that rather than fetching details on every view of the widget, some caching would be a better idea.
The best solution to that was coming up with a cron script. That solved out two purposes, one, karma details could now be fetched from the database, so there was no need to make a call to Bugzilla or other sources on every view of the widget, second, we always wanted score to be calculated on a regular basis rather than only when the user logged in, so we needed a cron script anyway :)
I am still thinking of other sources that I could use for fetching karma details apart fron Twitter, OBS, Planet OpenSUSE and Bugzilla. If any great idea stikes you, do let me know, I'll be most happy to incorporate it.
LAMP appliance (phpmyadmin)
A lot of things have changed since then, actually there was no gallery where to publish the appliance to.
Today I am publishing a new LAMP appliance that contains phpmyadmin for managing the mysql, as well as webalizer for apache statistics and webyast for managing the appliance.
Check it out at:
http://susestudio.com/a/61bKK8/lamp-server-32bit
It would be very great to get some feedback as I am planning to use it as a base for other php based appliances.
Here some screenshots:
![]() |
| phpmyadmin |
![]() |
| webyast control panel |
![]() |
| webalizer |
![]() |
| webyast initial setup |
Goolge Summer of Code 2012 – Ambassador/Event plugin for openSUSE Connect – Event#2
Event #2 (07/05-25/05) [Community Bonding period begins]
What did i do
This period was a bit hard than the last one. I had a twist on my right hand so some days i was not available to carry on to fast with the project. Furthermore i participated in KDE Akademy Es and presented openSUSE Project to people there. So now let’s focus on my progress. The coding st started at 21 of May so until the “Community perod” took place. So i focused on the current documentation. My first step was to read “getting Started with Development” . Getting involved Development means to understand better the Elgg’s event system. Talking about Elgg’s event system means to focus on the “events” and “plugin hooks” that Elgg provides. Furthermore Elgg has a “Views” system. Views are creating a section of presentation code from input data , in other words view is the templating system of Elgg.
Elgg’s documentation provides useful information about how the Elgg’s Engine works.
More detailed Elgg’s Data Engine is formed by the following parts :
a) Entities , where ElggEntity is the base class for the Elgg data model.
b) Metadata, where you can add extra data on your entity
c) Annotations, which are pieces of data attached to your entity that allow users to leave comments, ratings, or other relevant feedback.
d) Relationships
e) Access controls , where you define the accessibility of annotations, entities and metadata.
f) Database schema
Plugin structure
Event calendar plugins structure is simple. Let’s have a look inside :
Actions – Where the actions of event calndar are stored into files (add_to_group , add_to_calendar, killrequest , manage , remove_from_group , request_personal_calendar, toggle_personal_calendar)
Images – Where images used by the plugin are stored here
Languages – All the available languages for the plugin
Models – Where is stored the Elgg event model
Pages – Where review_request.php file is placed.
Views – Where the views are divided into two categories , “rss” and “default”.
In “default” folder appear the “widgets” , “objects” , “input” , “settings” folders and others as well. This view contains many folders and files , so as to be editable .
Many of us we use rss , so as to be up to date . openSUSE Connect and Event calendar. provides “rss” view which is also can be configured.
Furthermore there are some other files , which are very important. These files are “start.php” , “show_event.php” , “show_events.php”. I have to mention that the “model.php” file (from models folder) is being called on those 3 files above.
My first hacks and feelings
Begin hacking is very interesting. In other words start writing source code and make the first “hacks” , is the first step for the contribution. First you plan the process and then you begin to implement your thoughts and your plan. Moreover “hacking” for an open source project means that all your “hacks” will interact with the community. So my first hacks for Google Summer of Code are more than interesting for me.
So focusing more on the hacks , my first hack was to read the start.php file of the plugin and understand how it works. For that reason i add comments on how functions and the source code works.
Furthermore i followed all the changes shown on event_calendar_submenu_css.patch file.
Making hacks means that you have also fix the bugs on the source code. After creating a new event , and try to show it you see like this [1]. So you can see that the bullet point which calendar plugin adds to the navigation box (“View all events”) miss the css layout. In order to solve it and be like this [2] , i had to search for the appropiate css file. After searching and making some test commits , the final commit which solves the problem is this one.
What i am going to do
This week i will focus more on searching which features can be added during creating a new event. Furthermore i will try to add a map locator for each event. This will make the events more attractive to the users.
Integration with Bugzilla Complete!
LibreOffice Tutorial Videos
A user just asked on IRC how to print a serie of descriptions of photos, when he has a list in a spreadsheet. I answered that Mail Merge is what he is searching for - but he did not know what Mail Merge was. I found a very helpful video showing the mail merge in LibreOffice, so I want to share it with you :-)
[There is also a shortcut to Mail Merge when you understand the concept, try Tools -> Mail Merge Wizard..., of course.]
There are more LibreOffice videos out there, backed up by this nicely structured webpage. Might be worth watching the other videos too :-)
Java API to write LDTP (GUI Automation) tests
Ruby: Why to use symbols as Hash keys ( and why not )
I have often read that for hash keys it is better to use symbols than strings. So I was interested why and what is performance impact. It is quite easy to create a test scenario to measure it. The blog post also contains technical explanation and shows potential security problem.
My test scenario is quite easy. Let’s create simple hash and lookup for a key in the hash. Lets have the keys of four different kind: short string, short symbol, long string and long symbol. For measuring I use internal ruby measuring library Benchmark. Here is code:
require "benchmark"
precomputed_string = "Very long string value"*1000
precomputed_symbol = precomputed_string.to_sym
MAP = {
"key1" => true,
:key2 => true,
precomputed_string => true,
precomputed_symbol => true
}
Benchmark.bm(20) do |x|
x.report("string") do
10000000.times { MAP["key1"] }
end
x.report("symbol") do
10000000.times { MAP[:key2] }
end
x.report("long string/100") do
100000.times { MAP[precomputed_string] }
end
x.report("long symbol") do
10000000.times { MAP[precomputed_symbol] }
end
end
Please note that for long string key I’m using less iterations, because it would be too. And here is result from my machine:
string 4.360000 0.000000 4.360000 ( 4.365123)
symbol 2.870000 0.000000 2.870000 ( 2.868708)
long string/100 8.460000 0.000000 8.460000 ( 8.471581)
long symbol 2.890000 0.000000 2.890000 ( 2.884652)
As you can see, even for short string it is faster to use symbol then string. For longer symbol keys, the time does not grow, so the speed of hash lookup doesn’t depend on key length. As you can see, the situation is different for string keys.
Why it is? The reason is hidden in the hash implementation. Hash uses a hashing function for the lookup ( ted mI agree that it is little confusing to name in ruby Map as Hash). Symbols have this value “precomputed”, but for string you need to compute it again for whole string. For symbol its hash value is simple object_id which never changes, but string have different object for each instance ( string is not immutable like in java ), so to compare if two strings have same hash you need to compute it. Short demonstration about object_id difference:
"test".object_id
"test".object_id
:test.object_id
:test.object_id
So should you use symbol always? There is one disadvantage. To keep symbol value always same (in one ruby process), unused symbol is not removed during run of garbage collector. Here’s the code that demonstrates it:
#for string
def test val
map = {}
1000.times do |i|
value = val*(i+1)
map[value] = true
end
return nil
end
100.times do |i|
test "test#{i}"
GC.start
end
puts `cat /proc/#{$$}/status | grep 'VmSize:'`
#for symbol
def test val
map = {}
1000.times do |i|
value = val*(i+1)
map[value.to_sym] = true
end
end
100.times do |i|
test "test#{i}"
GC.start
end
puts `cat /proc/#{$$}/status | grep 'VmSize:'`
My results:
String: VmSize: 24856 kB
Symbol: VmSize: 343324 kB
So it is a trade-off between memory and speed. It is very important for long running tasks to have control about what is stored in symbols. Consider this code snapshot for long running server:
#get option value
VALUE_TO_DB_MAP = { :external => 1, :internal => 2, :both => 3 }
def update params
db_value = VALUE_TO_DB_MAP[params[:option1].to_sym]
end
And now consider what happens if attacker sends there non-friendly long string. He can easily cause DOS from one machine.
I welcome any questions or suggestions in your comments.



