Ph: 00977219

February 18, 2012

rtnpro @ Mukti 2012

Mukti is the annual FOSS festival organised by the GNU/Linux Users Group of NIT Durgapur. Mukti 2012 was held on 3-5th February 2012. I have attended every Mukti in NIT Durgapur from 2008 to 2011 as a student and this time (in 2012) as a speaker. My talk was on Localization and Transifex. NITDGPLUG, as always, put a lot of effort in making Mukti a grand FOSS event in the region. It was a packed with a plethora of events and had a large number of participants. Mukti serves as a great means to get together people interested in FOSS in the Eastern and North Eastern part of India. It helps newbies get more insight into FOSS.

Day 1, February 3, 2012

The first day of Mukti began with an inauguration programme. After the inauguration programme, students queued at the registration desk for registering themselves. Sayan and Gaurav came there with a small group of 1st year students (interested in FOSS) from Dr. B. C. Roy Engineering College. I spoke to them for a 1-2 hours on FOSS, how to contribute, my experience with FOSS and how I made to Transifex. After bidding good bye to the 1st year students from BCREC, we (me, Sayan, Gaurav and a few others) settled in my room at the Guest House, NIT Durgapur and started discussing on various stuff like Transifex, Django, unit testing, some college news, etc. There was also a workshop on KDE development that day by Smit Shah. After the workshop was over, the Transifex community guys from Durgapur crashed in my place and we kept hacking till late night.

Day 2, February 4, 2012

For the 1st half of the day, I came to BCREC to talk with the students on FOSS and meet my teachers and other friends. After returning to NIT Durgapur, I had a discussion with some folks interested in web development and Transifex. I discussed with them about Transifex, what it is, why it is created, how it works and how it is written. Also, we discussed on other stuffs like contributing to FOSS, python, Django, etc.  We spent the entire evening hacking on Transifex. We fired our local Transifex instance and started discussing about bugs and areas of improvement. I also explained in details to the Transifex contributors on how to write unit tests for Transifex. I also showed to them how to write a handler for a file format in Transifex.

In between, I had a good conversation with Smit Shah. We shared our views on FOSS and contributing to it, and also our experience and excitement in working for a startup. We also discussed on Manga: Naruto, Fullmetal Alchemist Brotherhood and One piece ;-) Even after dinner, we kept hacking, till midnight. The day was quite eventful. We triagged some tickets at trac.transifex.org, fixed some bugs, found new bugs to work on, etc.

Day 3, February 5, 2012

This was the final day of Mukti and my talk on Localization, Transifex and FOSS contribution in general was scheduled for this day. In this talk, I started with “What†and “Why†of localization and how it helps the global usage of a software. Also, I explained that localization is one of the easiest way to start contributing to FOSS and get the feet wet in community, learn new technologies, etc.  Then, I discussed the workflow of localization and its pros and cons.

Then, I came to Transifex, why was it needed, how and when did it start, and how it takes localization to an all new level. I discussed the technologies used behind Transifex and gave the audience a tour through Transifex. Transifex is no small thing now. It has grown over the years and it takes a lot to explain its features. Enough with technical jargon. To make it interactive, I called Sayan to share his experiences about his contribution to Transifex. Also, I shared our story that how a group of 3 newbie translators made www.transifex.net available in Hindi just in a few days.

Then, I told the people that how they can start contributing to Transifex and any open source project in general. But, still there was the impression that contributing is a VERY DIFFICULT task. So, I decided to hack live in front of all the audience and fix a few Transifex bugs (bugs on which we worked on the previous day, during the hackfest). I fixed 2-3 small bugs, showed what is a patch and how to commit a patch. The patches had just 1-2 lines of change. I hope the audience got my point, that fixing bugs is not a very difficult job.

Then, I shared my experiences with FOSS, how I came into the FOSS community, how I started contributing and how I made into Transifex. With this, I concluded my talk. After the session, a few students came to me with queries and we had a kind of group discussion with them.

You can find the slide deck I used for my talk at http://rtnpro.fedorapeople.org/Transifex-Mukti2012/presentation.pdf

After the talk, we headed back to the guest house and had some gossip and masti with my college juniors. In the evening, we attended the prize distribution function and then headed back to the guest room. After dinner, we started discussing about things like how to boys should proceed in their open source endeavours, brainstormed some crazy project ideas, etc.

It was an awesome experience at Mukti this year. Met with many people, made new friends, had lots of fun and a lot of hacking.


Day 2 workshop of DGPLUG

Today, the second day of the workshop started by 10:30 a.m with all the students waiting beforehand for the workshop to begin. kushal started-off the discussion with vim-editor. The students were really excited on learning the new commands in vim because it just seemed magic to them and they were really impressed with it. As the second session began kushal gave a talk on more advanced topics on python on How to download files, display files in current directory,etc. In the end, we showed up the Fudcon Tempe and Pune video to give the students a boost up.


Puppet And Common Errors
Installing Puppet can be a nightmare at times especially if you are doing it for the first time. Error messages are not always obvious and would require some experience to understand. So this is my attempt to explain the errors and suggest the solutions.

Needless to say that step one would always be to ensure that the names are resolving and the puppet client and master can communicate. Also make sure that port 8140 is white listed. 

Error 1: err: Could not request certificate: getaddrinfo: Name or service not known
Probable Solution: Puppet client is not able to reach the puppet master. This usually happens when you are setting up a new environment and puppet master's name is not resolvable. If you can, put a relevant entry in your DNS and add a server variable in [agent] section in puppet.conf. Alternatively you can use /etc/hosts to point the client to the master but you'll have to add appropriate entries on the /etc/hosts of both the puppet master and client.

Error 2: Starting puppetmaster: Could not prepare for execution: Could not find a default provider for user
Probable Solution: This happens because of SELinux restrictions. You can fix this by running a "setenforce 0" which will turn off the SELinux. This is required for CA creation only. So you can turn on SELinux after the puppet master creates CA successfully.

Error 3: err: Could not request certificate: Retrieved certificate does not match private key; please remove certificate from server and regenerate it with the current key
Probable Solution: Looks like your certificates have gone bad. You should remove /var/lib/puppet/ssl directory and request for new certs signed by puppet master.

Error 4: err: Could not retrieve catalog from remote server: hostname was not match with the server certificate
Probable Solution: This may happen if you are referring to the puppet master by a wrong name. In other words, the CA is not built to use this name. You can check out the correct CA name in the file /var/lib/puppet/ssl/ca/inventory.txt. You should put this name in the [agent] section assigned to server variable.

Error 5: err: Could not retrieve catalog from remote server: Connection refused - connect(2)
Probable Solution: This is happening because your puppet client is not able to connect to puppet master. One reason might be firewall which is rejecting the packets and the other reason might be that puppet master has died. So you either need to relax your firewall or make sure that your puppet master is always up and running. You may want to use daemontools or god or a similar application.

Error 6: Exiting; no certificate found and waitforcert is disabled
Probable Solution: This usually happens when a new node is introduced in the infrastructure. Issue is that this node do not have the certificate yet and since "--waitforcert" flag was not enabled, it exited immediately. If your puppet master has autosign enabled that just add the flag "--waitforcert X" with X replaced with time in seconds like 60. If autosign is not enabled then you have to sign the cert for the client manually at your puppet master.

I'll add more as I encounter them. Please let me know in comments if I am wrong anywhere. Have fun with Puppet :)
A work in progress: whenjobs — another cron replacement

whenjobs (git repo) is a cron replacement. From the manual page …

Whenjobs is a powerful but simple replacement for cron. It lets you run jobs periodically like cron, but it also lets you trigger jobs to run when user-defined variables are set or change value.

Periodic jobs are written like this:

every 10 minutes :
<<
  # Get the current load average.
  load=`awk '{print $1}' /proc/loadavg`
  whenjobs --set load $load --type float
>>

When-statements let you create jobs that run based on variables set elsewhere:

when load >= 6 :
<<
  mail -s "ALERT: high load average: $load" $LOGNAME < /dev/null
>>

(When statements are "edge-triggered", meaning that this job will only run when the load goes from under 6 to ≥ 6).

The motivation is building things from git automatically. Here is another job script:

Every 10 minutes, get the latest tagged version from the git repository. The variable ‘version’ will be set to something like “v1.2.3″, “v1.2.4″, etc over time as new releases get tagged.

every 10 minutes :
<<
  cd /my/git/repo
  tag=`git-describe --tags`
  whenjobs --set version $tag
>>

When the ‘version’ variable changes (ie. a new release is tagged) try to build it. ‘changes’ is a function that compares the previous value of a variable from when this job last ran with the current value of a variable, and returns true if the previous and current values are different.

when changes version :
<<
  cd /my/git/buildrepo
  git pull
  git reset --hard $version
  ./configure
  make clean all check dist
  whenjobs --set successful_local_build $version
>>

In parallel, build on a remote machine.

when changes version :
<<
  ssh remote ./do_build $version
  whenjobs --set successful_remote_build $version
>>

Only when the new release has been successfully built on local and remote, upload it to the website.

when successful_local_build == version &&
     successful_remote_build == version :
<<
  cd /my/git/buildrepo
  curl -T name-$success.tar.gz ftp://ftp.example.com/upload/
>>

My library

I use Alexandria for keeping a record of all the books I buy/read/loan. It has a nifty feature where you can export your libraries as HTML files. I’ve published them. Have a look! It’s only a subset, costituting books I’ve read since the second half the last year. (I doesn’t mention a single Enid Blyton, and I’ve almost read them all as a kid ;) )


De-Duping files on BTRFS.
Brave souls can test BTRFS for a couple of Fedora releases.

Removing duplicate/redundant files on filesystems is a common thing, e.g. when creating regular backups or so. On ext4 this can be realized using traditional hardlinks.
Hardlinks all point to the same blocks on the logical drive below. So if a write happens to one of the hardlinks, this also "appears" in all other hardlinks (which point to he same - modified - block).
This is no problem in a backup scenario, as you normally don't modify backuped files.

In my case I wanted to remove redundant files that might get modified and the changes shouldn't be reflected in all other copies. So what I want to achieve is to let several links (files) point to the same block for reading, but if a write happens to one block this should be just happen to the one file (link). So, copy the file on write. Wait, don't we know that as CoW? Yep.

Luckily BTRFS allows cow files using the cp --reflink command.
The following snippet replaces all copies of a file with "light weight" aka cow copies.

#!/bin/bash
# Usage: dedup.sh PATH_TO_HIER_WITH_MANY_EXPECTED_DUPES
mkdir sums
find $@ -type f -print0 | while read -d $'\0' -r F
do
echo -n "$F : "
FHASH=$(sha256sum "$F" | cut -d" " -f1);
# If hashed, it's probably a dupe, compare bytewise
# and create a reflink (so cow)
if [[ -f "sums/$FHASH" ]] && cmp -s "sums/$FHASH" "$F";
then
echo "Dup." ;
rm "$F" ;
cp --reflink "sums/$FHASH" "$F" ;

# It's a new file, create a hash entry.
else
echo "New." ;
cp --reflink "$F" "sums/$FHASH" ;
fi
done
rm sums/*
rmdir sums

And in general, btrfs didn't yet eat my data, it even survived two power losses ...
Update: Updated to handle files with special characters. This script also makes some assumptions, e.g. the files should not be modified while running this script.
Nagios XMPP Notifications for GTalk

While improving GNOME’s servers Nagios Notifications,  I ended up working on a nice way to notify the relevant folks through GTalk in case something could go wrong on any of the hosted services. Looking around on the web, I found Seth Vidal’s script, modified it to suit my needs and made it working with GTalk, here’s the result:

!/usr/bin/python -tt

import warnings
warnings.simplefilter("ignore")

import xmpp
from xmpp.protocol import Message

from optparse import OptionParser
import ConfigParser
import sys
import os

parser = OptionParser()
opts, args = parser.parse_args()

if len(args) < 1:
    print "xmppsend message [to whom, multiple args]"
    sys.exit(1)

msg = args[0]

msg = msg.replace('\\n', '\n')

# Connect to the server
c  =  xmpp.Client('gmail.com')
c.connect( ( 'talk.google.com', 5223 ) )

# Authenticate to the server
jid  =  xmpp.protocol.JID( 'example@gmail.com' )
c.auth( jid.getNode( ), 'yourgmailpassword' )

if len(args) < 2:
    r = c.getRoster()
    for user in r.keys():
        if user == username:
            continue
        c.send(Message(user, '%s' % msg))
else:
    for user in args[1:]:
        c.send(Message(user, '%s' % msg))

I, then, added the command definitions on the relevant Nagios configuration file:

define command{
        command_name    host-notify-by-xmpp
        command_line    /home/user/bin/xmppsend "Host '$HOSTALIAS$' is $HOSTSTATE$ - Info : $HOSTOUTPUT$" $CONTACTPAGER$
        }

define command{
        command_name    notify-by-xmpp
        command_line    /home/user/bin/xmppsend "$NOTIFICATIONTYPE$ $HOSTNAME$ $SERVICEDESC$ $SERVICESTATE$ $SERVICEOUTPUT$ $LONGDATETIME$" $CONTACTPAGER$
        }

And in the end on contacts.cfg:

define contact {
        contact_name    admin
        use             generic-contact
        alias           Full Name
        email           example@gmail.com
        pager           example@gmail.com
        service_notification_commands   notify-by-xmpp
        host_notification_commands      host-notify-by-xmpp
}

When done just reload the configuration files with:

sudo /etc/init.d/nagios3 reload

Enjoy your new XMPP Nagios notifications!

Update: if you don’t want the script to store your username or password, you can use the following modified script together with a nice config file like this one:

[xmpp_nagios]
username=example@gmail.com
password=yourgmailpassword

Then you can invoke xmppsend this way:

xmppsend -a config.ini
G'MIC plug-in for GIMP.
GIMP is an acronym for GNU Image Manipulation Program and it has many capabilities.
One best feature is plugins system.Plugins may be stored in different locations depending upon your distribution.
The author of G'MIC plug-in tell us:The G'MIC plug-in for GIMP proposes a set of various filters to apply on your images, including artistic effects, image denoising and enhancement algorithms, 3D renderers, etc.. It is a quite large plug-in, integrating a lot of different effects.
You can download the G'MIC plug-in from here.
Unzip the file and go to folder where is the gmic_gimp file.
Use this command to copy the file in the plug-ins folder.

$ cp  gmic_gimp ~/.gimp-2.6/plug-ins/
Once you have installed the plugin just restart the GIMP.
The G'MIC will working just if you have open an image.
You can find it on menu : Filters->G'MIC....Also , the G'MIC plug-in has available 284 filters.
[image]
Nautilus und Betriebssystem

Entweder ist es neu oder ich habe es noch gar nicht bemerkt...Nautilus zeigt bei Verbindungen das Betriebssystem des entfernten Systems an. Cool.

Nautilus Betriebssystem

kernel weekly news – 18.02.2012

Hello, y’all!

-Ingo Molnar has perf fixes, Wu Fengguang updates writeback,
Dave Airlie has some drm fixes and David Miller has networking
fixes:

I’ll keep an eye out to make sure that bluetooth inline fix needed for
bleeding edge GCC’s gets integrated soon.

1) GRO MAC header comparisons were ethernet specific, breaking other
link types. This required a multi-faceted fix to cure the
originally noted case (Infiniband), because IPoIB was lying about
it’s actual hard header length. Thanks to Eric Dumazet, Roland
Dreier, and others.

2) Fix build failure when INET_UDP_DIAG is built in and ipv6 is modular.
From Anisse Astier.

3) Off by ones and other bug fixes in netprio_cgroup from Neil Horman.

4) ipv4 TCP reset generation needs to respect any network interface
binding from the socket, otherwise route lookups might give a
different result than all the other segments received. From Shawn
Lu.

5) Fix unintended regression in ipv4 proxy ARP responses, from Thomas
Graf.

6) Fix SKB under-allocation bug in sh_eth, from Yoshihiro Shimoda.

7) Revert skge PCI mapping changes that are causing crashes for some
folks, from Stephen Hemminger.

8) IPV4 route lookups fill in the wildcarded fields of the given flow
lookup key passed in, which is fine most of the time as this is
exactly what the caller’s want. However there are a few cases that
want to retain the original flow key values afterwards, so handle
those cases properly. Fix from Julian Anastasov.

9) IGB/IXGBE VF lookup bug fixes from Greg Rose.

10) Properly null terminate filename passed to ethtool flash device
method, from Ben Hutchings.

11) S3 resume fix in via-velocity from David Lv.

12) Fix double SKB free during xmit failure in CAIF, from Dmitry Tarnyagin.

-Jens Axboe has block fixes for -rc:

Time to push off some of the pending items. I really wanted to wait until
we had the regression nailed, but alas it’s not quite there yet. But I’m
very confident that it’s “just†a missing expire on exit, so fix from
Tejun should be fairly trivial. I’m headed out for a week on the slopes.

- Killing the barrier part of mtip32xx. It doesn’t really support
barriers, and it doesn’t need them (writes are fully ordered).

- A few fixes from Dan Carpenter, preventing overflows of integer
multiplication.

- A fixup for loop, fixing a previous commit that didn’t quite solve the
partial read problem from Dave Young.

- A bio integer overflow fix from Kent Overstreet.

- Improvement/fix of the door “keep locked†part of the cdrom shared
code from Paolo Benzini.

- A few cfq fixes from Shaohua Li.

- A fix for bsg sysfs warning when removing a file it did not create
from Stanislaw Gruszka.

- Two fixes for floppy from Vivek, preventing a crash.

- A few block core fixes from Tejun. One killing the over-optimized ioc
exit path, cleaning that up nicely. Two others fixing an oops on
elevator switch, due to calling into the scheduler merge check code
without holding the queue lock.

-Willy Tarreau announces 2.6.27.60 and .61, Ben Myers updates XFS, Greg KH
announces 3.0.21, 3.2.6 and 2.6.32.57, Nicolas Ferre updates at91 for -rc4 and
Konrad Rzeszutek Wilk has XEN updates .

-MMC fixes come from Chris Ball, intended for -rc4, Arnaldo Carvalho de Melo
has perf/core improvements, Rob Herring updates irqdomain and Arnd Bergmann
has arm-soc fixes for -rc4:

We’ve got a number of new patches queued up for 3.3. The majority of these
are regression fixes for stuff that broke during the merge window.

The notable ones are:

* The at91 ata drivers both broke because of an earlier cleanup patch that
some other patches were based on. Jean-Christophe decided to remove
the legacy at91_ide driver and fix the new-style at91-pata driver while
keeping the cleanup patch. I almost rejected the patches for being too
late and too big but in the end decided to accept them because they
fix a regression.

* A patch fixing build breakage from the sysdev-to-device conversion
colliding with other changes touches a number of mach-s3c files.

* b0654037 “ARM: orion: Fix Orion5x GPIO regression from MPP cleanupâ€
is a mechanical change that unfortunately touches a lot of lines
that should up in the diffstat.

-Takashi Iwai updates sound for -rc4, John W. Linville updates wireless,
and David Miller has networking updates:

1) VETH_INFO_PEER netlink attribute needs to have it’s size validated,
from Thomas Graf.

2) ‘poll’ module option of bnx2x driver crashes the machine, just remove
it. From Michal Schmidt.

3) ks8851_mll driver reads the irq number from two places, but only
initializes one of them, oops. Use only one location and fix
this problem, from Jan Weitzel.

4) Fix buffer overrun and unicast sterring bugs in mellanox
mlx4 driver, from Eugenia Emantayev.

5) Swapped kcalloc() args in RxRPC and mlx4, from Axel Lin.

6) PHY MDIO device name regression fixes from Florian Fainelli.

7) If the wake event IRQ line is different from the netdevice one,
we have to properly route it to the stmmac interrupt handler.
From Francesco Virlinzi.

8) Fix rwlock lock initialization ordering bug in mac80211, from
Mohammed Shafi Shajakhan.

9) TCP lost_cnt can get out of sync, and in fact go negative, in
certain circumstances. Fix the way we specify what sequence
range to operate on in tcp_sacktag_one() to fix this bug.
From Neal Cardwell.

-Dave Airlie announces a few drm fixes, and this, folks, is the last
piece of news for this week! Take care and see you next time.


Open Source CADNANO is unbelievably cool

I just read this in Nature:

The researchers designed the structure of the nanorobots using open-source software, called Cadnano, developed by one of the authors — Shawn Douglas, a biophysicist at Harvard's Wyss Institute for Biologically Inspired Engineering. They then built the bots using DNA origami. The barrel-shaped devices, each about 35 nanometres in diameter, contain 12 sites on the inside for attaching payload molecules and two positions on the outside for attaching aptamers, short nucleotide strands with special sequences for recognizing molecules on the target cell. The aptamers act as clasps: once both have found their target, they spring open the device to release the payload.

These robots may be able to identify and target cancer cells.

read more

February 17, 2012

Glyphicons Styled Stack Overflow Icon
Here is a Stack Overflow icon in the style of Glyphicons I did for my 'about me' sidebar section:
[image]
Feel free to use it however you want.
You can ring my bell.

I’ve been using xchat-gnome on Fedora for quite a while. It’s been my default chat client because the way it notifies about private or channel messages fits well with my workflow. However, recently I’ve wanted more often to encapsulate my chat in a screen session along with my other work. Of course, the obvious answer to this is Irssi, a popular text-based client.

I still tend to also have a web browser open often in a GNOME session, though, so notifications are very useful to me. For a while I used Irssi with a simple plugin script that calls notify-send to create popup notifications. However, I hadn’t used it since the GNOME 2.30-2.32 days, and I found this script had developed drawbacks as it aged against the new GNOME 3 environment.

For example, the notifications would fill up the notification tray over the course of the day. Clearing them required an action for each individual notification, which was tedious to say the least. Also, the --timeout argument to notify-send seemed to no longer work for me to make the notification leave the notice area after a specific length of time.

What I really wanted was a solution that would act more like many of the other native GNOME applications. Appointment notifications or email in Evolution, for instance, “stack†in the notification area into a single icon, with a number that tells you how many notices have been received. Thankfully a few GNOME folks — Marina, Matthias, and Ray — kindly gave me some advice on solutions.

First, there’s a hint called transient for notifications that lets them evaporate from the notification area after a specific time. (You can find the full notification spec here if you want to dig a little deeper; I found it really educational.) This was a step forward because it kept the notices from piling up in the notification area ad infinitum. For instance:

notify-send --hint transient:1 'subject' 'message'

Unfortunately, just using transient meant I’d likely miss some notices if I was away when they came in. I wouldn’t know someone was looking for me unless I switched to my Irssi window to look — which is precisely the thing that notifications should prevent. Nevertheless, it’s a really useful hint, so file that away for later reference.

Never fear though, because again the GNOME folks passed on some good advice. The stacking effect is handled automatically by GNOME Shell if the notifications are issued from the same PID. Aye, there’s the rub! The Irssi plugin I was using made this impossible, because it called the notify-send executable for each message, meaning a new process for each instance. What I really needed was a single process listening on the session D-Bus that could kick off a notification.

So what I came up with can be found here. If you want to just test the listener, maybe because you don’t use Irssi, try this command with the listener running:

dbus-send --session /org/irssi/Irssi org.irssi.Irssi.IrssiNotify string:'subject' string:'message'

The listener is just a dead-simple (or maybe I should say brain-dead, given the quality of code) Python script. I put it in ~/bin with the executable bit set on, added it to my list of applications that launch with my GNOME session using gnome-session-properties, and added the new notify Perl plugin for Irssi to my ~/.irssi/scripts/ folder, with a symlink from ~/.irssi/scripts/autorun/ so it starts whenever I run Irssi. The stacking of notifications makes them very easy to clear with one user action — aaah, much better!

Future thoughts:

One flaw with this method (I’m sure there are many!) is you’ll get notifications even if you’re actively looking at or talking in the IRC channel where a message comes in. It’s easy to add logic to alter the behavior based on that, but what complicates matters considerably would be trying to make this script understand when Irssi was in the active screen window — or when the screen was the foreground window in GNOME. It might not be kosher for me to have used org.irssi.Irssi as a service name in D-Bus. After all, this isn’t official or part of the Irssi project at all. But as I understand it, you could use whatever name you liked, as long as you weren’t trying to claim a service name already in use. You could make this work system-wide by packaging a real .service file for D-Bus along with the Irssi script. When we were discussing the technical issues above, Ray told me he was actually looking for something similar. With any luck, he’ll find something annoying in my stupid solution he can’t live with, and he’ll add some magic GNOME-ishness to make it awesome. See what I did there? ;-)
PC Monitor: control your computer from everywhere and with any device

Some weeks ago I found PC Monitor
application, a new cool way to control your Linux and windows computer.
Looking on the product website you can find for server program for Linux and windows (both 32bit and 64bit OS) and clients programs for Android, Windows Phone and iOS devices.

I tested for some days the Linux server version, that is really easy to install, configure and start. it’s a java program so just the JDK is required and then you have a service file to start the server up.
On the client (iOS in my tests) you have many real time information about your pcs.

Check the gallery for some amazing screenshots.

20120217-233624.jpg

20120217-233632.jpg

20120217-233638.jpg

20120217-233657.jpg

20120217-233703.jpg

20120217-233708.jpg

20120217-233713.jpg

20120217-233718.jpg

Working with Keystone Authenticate

Here is a little utility I’ve worked up while working with the Openstack Keystone code.

To extract the token out of the JSON, use the following pyton script

#!/usr/bin/python

from sys import stdin
import json
print json.load(stdin)['access']['token']['id']

Which I save in ~/bin/extract_keystone_id.py

Here’s the Curl to fetch a token from Keystone, assuming you ‘ve loaded up the sample data from the unit tests:

curl -v   -H "Content-Type:application/json"  -s  -H "Accept:applicaton/json"  -d '{"auth":{"passwordCredentials":{"userId":"foo", "password":"foo2"} ,"tenantName":"bar"}}'   -X POST  http://0.0.0.0:35357/v2.0/tokens  | ~/bin/extract_keystone_id.py
Adventures with DD-WRT, Part I.

I have a TP-Link WR841N router. This little guy started to behave rather strangely after 5-6 months of hard work. The router should serve a 25 Mbps Internet connection, but I can hardly exceed 500 KBps via WiFi. This applies to file sharing in our LAN network, the speed of the connection was reduced to this 4-500 KBps.

So, before taking it back to the store where I bought it, I decided to give *WRT a try. I’m too busy to learn and configure OpenWRT, so I opted for DD-WRT with a ready-made web GUI, and other nice stuff.

Let’s get the party started

I went to DD-WRT’s homepage, and checked the hardware compatibility list. Fortunately, my model is supported, and I downloaded the smallest package. (Due to memory restrictions; TP-Link WR841N v5 has only 4 MBs.)

DD-WRT comes in two pieces. The first part is needed to install the basic DD-WRT packages, while the second file is the actual firmware.

So, I fired up the control panel of my router, and started flashing the new firmware. Well, at least I’ve tried, because I couldn’t access the config panel via cable. For obvious reasons, I didn’t want to risk flashing a firmware on the air. Later that day, I found out that only Internet Explorer is capable to access the web panel if I use a cable. I was like “what the hellâ€, but meh…

Flashing the router

Flashing the router

To my absolute surprise (to be honest, I was counting on bricking my router), it worked. DD-WRT asked for an admin name/password, and everything was done.

Making the first steps

Now, flashing the router, episode two. Special package for this model.

Flashing the router - again

Flashing the router - again

Works like a charm. For some reason, I still have two options to access the control panel. One is using WiFi with a browser of my choice. The other is using an ethernet cable, but only with Internet Explorer. Mixing cable with any other browser just doesn’t work, even with the new firmware.

To be continued…

This wasn’t the actual review. I bet you’ve noticed. :) I’m going to let it do its job during next week, before I make my decision about whether I take it back to the store or not. I’ll keep you updated with the results of this experiment.

Flashing the router Flashing the router - again
MPLAB-X Review

I first tinkered with MPLAB-X during beta.  Although it was promising, it seemed flaky enough that I didn't want to move to it yet, plus, I wasn't doing a lot of PIC stuff anyway.

More recently I've been doing a bit more with the PIC.  I had installed the release version but had quite a few problems so I put it on the back burner.  I thought maybe it was time to go back and see whether it was going to be a good thing.  All of this is based on MPLAB-X version 1.00 on Fedora 16.

For whatever reason, perhaps updated libraries, perhaps the last time I played with it I had got the configuration right, whatever, but it worked quite well for me.  Mostly I used the C30 toolchain, although I did tinker with the C18 toolchain.

One of the first things you notice is that the buttons are all different.  Nicer looking to be sure, but since they don't look like the old version, confusing.
[image]One of the very nice features is that there is a build, program and run button.  That is a departure from MPLAB 8 where they are all separate steps.  Also, instead of having production and debug configurations and targets, you can simply click "Debug this project" and the project gets rebuilt for debugging, programmed and started.  As in earlier versions, the debug buttons don't show up until you start the debugger.
[image]Another big change is that the window is tiled.  You could set MPLAB 8 up that way if you wished, but when debugging you need so many windows that it is pretty unwieldy.  On MPLAB-X, though, everything is tabbed, so the tiled model is actually pretty nice.  Once you get the idea of where things are, you aren't always hunting for hidden windows like in earlier versions.

[image]
The left hand area has a number of surprising choices.  The most obvious, perhaps, is the dashboard.  This seems to take a page from Piklab, but there are a couple of nice features, like bars showing memory used and a section showing the status of the programmer.

You can have multiple projects open at once, and the "Projects" tab shows all the open projects, and allows you to navigate for files in those projects.  the "Files" tab is similar, but also allows navigating the various project subdirectories for object files, executables, etc.  Yes, MPLAB-X makes a number of subdirectories so your main project directory doesn't get cluttered with all the odd MPLAB created files.

The services tab allows you to add team servers like java.net to your project,  also issue trackers such as bugzilla.  I tried adding a local instance of bugzilla with no joy.  Not sure if it's broken or something lacking from my bugzilla instance.  the only other issue tracker available is JIRA.  Whether Trac or similar trackers could be added reasonably I have no idea.

But to a degree that fits.  There is also a "Team" menu that allows connecting with CVS, Mercurial or Subversion.  Where is git?  Who knows.  Seems odd to have all these old RCSs and not the most popular.  But it appears that perhaps the Pony Express doesn't make it out to Arizona with news more than once a decade.  Still a step up from the time when the only choice was SourceSafe.

[image]On the bottom is a tabbed area very similar to the "Output" window in earlier versions, but with a lot more capability.  Besides showing you the compiler output and the status of the programmer/debugger, it also has a very cool "variables" tab when [image]debugging.  If you halt in a function, this tab shows the values of all the automatic variables in the function, as well as any watches you have defined.  This really cuts the need for the various debugging windows, and automatically shows you the exact things you probably want to see.

There is also a tab showing all the breakpoints you have defined, along with checkboxes allowing you to disable them without having to track down the source line.  But wait, there's more.[image]  When debugging, hovering over a variable will show you its current value (if it is in scope, of course), and if it is a structure, will even show you the bits and pieces -- especially handy for special function registers.

For your static variables, it also shows the address of each element.  Very, very handy.

MPLAB-X starts very slowly, being a huge Java app I suppose that isn't much of a surprise, but once started, it seems to be quite speedy.  It seems especially quick for compiling and programming, odd, since it apparently uses the same compilers as MPLAB 8.  The build, program and run button, one of the most common things to do during development, seems especially quick.

But there are some things that seem to take an inordinate amount of time.  When a program is running, placing into reset seems to take forever.  A simple task like that shouldn't take visible time, but it is at least 3 seconds on a very fast computer.  Releasing from reset also seems slow, but nothing like holding the target in reset.

Probably the biggest win, though, is the editor.  It seems to make a lot more sense than the old one, especially with tabs.    It automatically puts in closing parentheses and braces, but unlike most other editors, if you habitually type that closing paren, yours simply writes over the provided one, unlike other editors where you may find yourself constantly erasing extra parens.

[image]If you click on a variable or function, it highlights all other occurrences of that variable or function on screen, and places little tic marks to the right of anywhere else that function appears within the file, so you can even track down off screen occurrences easily.
[image]

The right-click menu lets you go straight to the declaration (or header or implementation in C++),  find other occurrences, etc.  It will even generate a call graph.

With all these features, though, I am still left with the feeling that there are important features from earlier versions of MPLAB missing.  The more I use MPLAB-X, though, the less I feel that, and the more it does seem like a significant step up.

Now if I can just figure out how to make a git plugin ...
Day 1 workshop of DGPLUG

Today, we the members of DGPLUG (Gaurav, Chandan, Biraj and I) organized a Python Workshop in our college. The workshop was taken by kushal. The workshop started at 11:00, with a talk on ‘Introduction to Linux, Free Software Movement and Fedoraâ€. This interaction made the students aware about the topic on how they can start off contributing to Linux.
Then, we moved to the Labs, the students got a hands-on with Python. kushal covered the most of Python. He also discussed how to edit a program using vi editor. The students were encouraged by distributing fedora-keychains for those who gave good responses. At the end of the session, kushal distributed off fedora-stickers. We four also got our our first fedora Tee-Shirt :) . We also discussed to start on a weekly dgplug physical meeting to come-up with more contributors.The session ended by 5:30.


Openstack Keystone LDAP Redux

A recent change in the structure of the Openstack Keystone architecture resulted in the loss of support for an LDAP Backend. I’ve been working to rectify that.  Here’s my set up and the design decisions I’ve made so far.  Since this code is not yet submitted for code review,  there is a good chance that it will change prior to deployment.

Users will be stored in a flat collection. ou=Users,$SUBTREE and be based on the standard LDAP objectClass inetOrgPerson which is defined in /etc/openldap/schema/inetorgperson.ldif. Currently, only two fields are used: cn and sn. cn is used for the bind call, and is the id field in the user object.

Tenants are in a collection that is a peer to Users. Tenants are instancs of the groupOfNames object class defined in /etc/openldap/schema/core.ldif. Tenant membership is indicated by the presence of the User’s DN in the tenant’s members attribute.

Roles are instances of the LDAP object class organizationalRole defined in /etc/openldap/schema/core.ldif. Role assignment is indicated by the presence of the User’s DN in the roleOccupant attribute.

Configuration of LDAP for the Keystone server is provided by the [LDAP] stanza in the appropriate keystone.conf file. Here are the supported values

url user password suffix use_dumb_member user_tree_dn tenant_tree_dn role_tree_dn

And an example of what my config file looks like:

[ldap]
url = ldap://localhost
tree_dn = dc=younglogic,dc=com
user_tree_dn = ou=Users,dc=younglogic,dc=com
role_tree_dn = ou=Roles,dc=younglogic,dc=com
tenant_tree_dn = ou=Groups,dc=younglogic,dc=com
user = dc=Manager,dc=younglogic,dc=com
password = freeipa4all
backend_entities = ['Tenant', 'User', 'UserRoleAssociation', 'Role']
suffix =cn=younglogic,cn=com

[identity]
driver = keystone.identity.backends.ldap.Identity

Not all of these fields need to be specified. It is expected that the user will supply simply the suffix field, and not override the values of user_tree_dn,role_tree_dn, or tenant_tree_dn.

backend_entities is not currently honored. It is expected that LDAP will instead either manage all of these or non e of them, with token management handled by a different backend provider.

use_dumb_member is still honored from the previous incarnation, but has not been tested, nor do I understand the intention of this code.

The unit tests for the LDAP code use a common code sournce with the other Identity management backends. To run just the LDAP unit tests, from the Keystone directory, run

 python ./run_tests.py  test_backend_ldap

Additionally, the unit tests can be run against a live OpenLDAP server by running.

 python ./run_tests.py  _ldap_livetest

All tests pass successfully on my development machine as of this posting.

 

I’m running Fedora 16, which supports OpenLDAP. Specifically I am running openldap-servers-2.4.26-5.fc16.x86_64. To start the service, run

sudo service slapd start

To configure the server, I use a file I call manager.ldif:

dn:  olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=younglogic,dc=com
-
replace: olcRootDN
olcRootDN: dc=Manager,dc=younglogic,dc=com
-
add: olcRootPW
olcRootPW: {SSHA}lBDIdfwvZkITal0k9tdhiCUolxpf6anu

You should modify the suffix for your organization.
Execute the configuration with:

 sudo ldapmodify -Y EXTERNAL -H ldapi:///  -f ./manager.ldif

And test that you can now do a simple bind to the localhost server.

ldapsearch -x -D "dc=Manager,dc=younglogic,dc=com" -H ldap://localhost  -w freeipa4all  -b ou=Groups,dc=younglogic,dc=com "(objectClass=*)"

Now set up the subtree for Keystone. I use file I call org.ldif

dn: dc=younglogic,dc=com
dc: younglogic
objectClass: dcObject
objectClass: organizationalUnit
ou: younglogic

dn: ou=Groups,dc=younglogic,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups

dn: ou=Users,dc=younglogic,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users

dn: ou=Roles,dc=younglogic,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users

Technically, the Roles ou is not required. My original thought was that this collection would contain the superset of roles possible for all of the Tenants. However, I have not implemented that.

Current code is commited to Github I will update this link if I rebase the branch.

Update: fixed typos in the config file segment. user_tree_dn etc should start with ou, not cn.

Programmatic EXTERNAL SASL connection to OpenLDAP

The documentation on the OpenLDAP site discusses modifying the ldif files used to start up the server.  If you try to do this on a Fedora or Debian based install,  you will find that the server does not start up.  The HASH of the files is stored and compared with the contents at start up time.  There is a better way.

On my OpenLDAP install,  there are three databases served by SLAPD.  The first two  are for  configuration and  monitoring.  The third is the one that acts as the backing store for authentication and other data that is publicly served.  When the server starts up,  it is configured with a common name of   cn=example,cn=com,  which is obviously sample data.  To modify this,  requires changing the values in the config database.

Below is an ldif file that would change the Common name, as well as set the userid and password for managing the directory

dn:  olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=younglogic,dc=com
-
replace: olcRootDN
olcRootDN: dc=Manager,dc=younglogic,dc=com
-
add: olcRootPW
olcRootPW: {SSHA}lBDIdfwvZkITal0k9tdhiCUolxpf6anu

I generated the HASH using the slappasswd command line tool.
To modify the config, you then execute ldapmodify.

sudo ldapmodify -Y EXTERNAL -H ldapi:///  -f /home/ayoung/etc/managerbase.ldif

What is this EXTERNAL? It is a SASL mechanism that uses the underlying system configured authentication. This is the NSS value that you would get back from getent. The default install protects the configuration database using the root credentials. The URL ldapi:/// is a Unix socket connection to /var/run/ldapi.

What happens if you want to modify the configuration pragmatically? The steps to make a SASL External connection are not to clear.  In order to figure out how to do it, I’ve started poking inside of the ldapmodify code from the openldap source. The CLI tools are under openldap/clients/tools/. The connection is created in the file common.c. From what I’ve seen elsewhere on the web, I know it needs to resolve to one of the ldap*bind calls. In my file, inside the function tool_bind, I see it on line 1469

   rc = ldap_sasl_interactive_bind_s(
          ld, binddn, sasl_mech,
           sctrlsp, NULL, sasl_flags, lutil_sasl_interact, defaults )

Now, I’ve run this through ltrace and I’ve seen

ldap_sasl_interactive_bind_s(0x1abf290, 0, 0x1abf030, 0, 0

So I know to expect binddn to be null, and sasl_mech needs to have a real value. Look in the argument parsing part of the code for the -Y flag tells that this is a pass through of the string passed on the command line.

    case 'Y':
        /*error chcking ellided here*/
        sasl_mech = ber_strdup( optarg );

So that should be the string EXTERNAL for our purposes.

The next two parameters are 0, sctrlsp and (surprise) NULL.

sasl_flags looks like it is set to the default in the top of the file and never modified in our code path:

unsigned   sasl_flags = LDAP_SASL_AUTOMATIC;

That leaves the last two parameters. One is a callback function lutil_sasl_interact and one is the defaults structure. The function lutil_sasl_interact is defined in the file openldap/libraries/liblutil/sasl.c. Between it and the function interaction which it calls, we are talking about 200 lines of code. For now, I am just going to cut and paste that code into my C file and get all of the headers coorect to run it. Later, I’ll step through it in the debugger to see what it is really doing.

The defaults structure is also defined in the sasl/c file specified above. From the ldap_bind man page:

The interact function uses the provided defaults to handle requests from the SASL library for particular authentication parameters. There is no defined format for the defaults information; it is up to the caller to use whatever format is appropriate for the supplied interact function. The sasl_interact parameter comes from the underlying SASL library. When used with Cyrus SASL this is an array of sasl_interact_t structures. The Cyrus SASL library will prompt for a variety of inputs, including:…

Again, I will cut and paste this code into my file and get it running. In order to compile I need to add the flags

CFLAGS=-lldap -llber -lsasl2 -g -I/usr/include/sasl

Once I can compile and run, I can dump out the contents of the config directory. Stepping through the code I discover a few things. In the code that builds the defaults, the non-zero values are. defaults->authcid = “root†and defaults->mech “EXTERNALâ€. When the function lutil_sasl_interact is called, the parameters are: The ldap structure from our init, flags=0, defaults, and in, which is cast to at sasl_interact_t. The only part of this that seems interesting to us is that it requests SASL_CB_USER from interact, which basically checks the user is root. The code then makes the most elegant use of a goto that I’ve seen in a long while, skips a whole load of interactive code, and returns the default:

use_default:
                /* input must be empty */
                interact->result = (dflt && *dflt) ? dflt : "";
                interact->len = strlen( interact->result )

This says to me that the interaction callback function could be reduced to:

int do_interact(
        LDAP *ld,
        unsigned flags,
        void *defaults,
        void *in )
{
        sasl_interact_t *interact = in;
        lutilSASLdefaults * sasl_defaults = (lutilSASLdefaults *)defaults;
        const char *dflt = interact->defresult;
        dflt = sasl_defaults->authzid;
        interact->result = (dflt && *dflt) ? dflt : "";
        interact->len = strlen( interact->result );
        return LDAP_SUCCESS;
}

But now I see that the defaults passed in are defined external to the ldap code. We can drop all of the pointers except the one to the authzid. In fact, we can just make this a char *.

Here’s the code in a functional state. It leaks memory, which would need to be cleaned up for a real application.

#include <sasl.h>
#include <ldap.h>
#include <stdio.h>

int do_interact(
                LDAP *ld,
                unsigned flags,
                void *defaults,
                void *in )
{
  sasl_interact_t *interact = in;
  char * sasl_defaults = (char  *)defaults;
  const char *dflt = interact->defresult;
  dflt = sasl_defaults;
  interact->result = (dflt && *dflt) ? dflt : "";
  interact->len = strlen( interact->result );
  return LDAP_SUCCESS;
}

int main(){
  printf("Start\n");
  LDAP *ldap;
  int rc;
  struct berval *servercredp;
  unsigned long version = LDAP_VERSION3;
  LDAPMessage *res;
  char ** vals;
  int message_count;
  int i,j,k;

  if (( rc = ldap_initialize(&ldap,  "ldapi:///")) != LDAP_SUCCESS)
    {
      perror ( NULL );
      return( 1 );
    }

  rc = ldap_set_option(ldap,
                       LDAP_OPT_PROTOCOL_VERSION,
                       (void*)&version);
  char * defaults;
  char * sasl_mech = "EXTERNAL";
  char * sasl_realm = NULL;
  char * sasl_authc_id = NULL;
  char * sasl_authz_id = NULL;
  struct berval passwd = { 0, NULL };
  unsigned      sasl_flags = LDAP_SASL_AUTOMATIC;
  LDAPControl   **sctrlsp = NULL;

  ldap_get_option( ldap, LDAP_OPT_X_SASL_AUTHZID, &defaults );

  char *        binddn = NULL;
  rc = ldap_sasl_interactive_bind_s( ldap, binddn, sasl_mech,
                                     sctrlsp,
                                     NULL, sasl_flags, do_interact, defaults );

  if ((rc =  ldap_search_ext_s
       (
        ldap,
        "cn=config",
        LDAP_SCOPE_SUBTREE,
        "(objectClass=*)",
        NULL,
        0,
        NULL,
        NULL,
        NULL,
        0,
        &res ) != LDAP_SUCCESS))
    {
      printf("ldap_search  failed with 0x%x.\n",rc);
      perror ( NULL );
      return( 1 );
    }
  LDAPMessage *entry = ldap_first_entry( ldap, res );

  int entry_count = ldap_count_entries(ldap, res);
  for (i = 0 ; i < entry_count; i++){
    printf("dn: %s\n",ldap_get_dn(ldap, entry));
    BerElement * ber;
    char * attribute = ldap_first_attribute(ldap,entry, &ber);
    while(attribute){
      printf ("attribute = %s\n",attribute);
      attribute = ldap_next_attribute(ldap,entry, ber);
    }
    ber_free(ber,0);
    entry = ldap_next_entry(ldap, entry);

  }
  return 0;

}

Note: The reason I do SASL using a -I option in the makefile instead of sasl/sasl.h is that the code formatter is messing it up.

Hackerspace.gr: Creative Hacking

<script src="https://s3.amazonaws.com/s3.www.universalsubtitles.org/embed.js" type="text/javascript"> ({ "video_url": "http://www.archive.org/download/Hacking_211/hsgr-creative_hacking.webm", video_config: { poster: "http://autoverse.net/wp-content/uploads/2012/02/hsgr.jpg", click_to_play: true, width: 480, height: 200 }, "base_state": {"language": "en"} }) </script>

flattr this!

Quick Multi-process Debugging Update

In my last post I mentioned that setting breakpoints is a pain when debugging multiple processes in GDB. While there are some bugs here (we’re actively working on them), it isn’t hard to make the basic case work.  In fact, there’s nothing to it.  Some background…

Starting with GDB 7.4, we changed how basic breakpoint specifiers (called “linespecsâ€) work.  Previously, a linespec applied somewhat randomly to the first matching symbol found in your code.  This behavior probably made sense in 1989, when all you had were statically linked executables; but nowadays it is much more common to have dozens of shared libraries, with the attendant name clashes.

So, instead of having GDB guess which symbol you meant, now a breakpoint just applies to all of them.  Our idea is that we’ll start supplying ways to narrow down exactly which spots you meant to name, say by adding syntax like “break libwhatever.so:function“, or whatever.

Anyway, this new work also applies across inferiors.  Here’s an example of debugging “make“, then setting a breakpoint on a function in libcpp (which itself is linked into a sub-process of gcc):

(gdb) b _cpp_lex_direct
Function "_cpp_lex_direct" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (_cpp_lex_direct) pending.
(gdb) run
Starting program: /usr/bin/make
gcc -g -o crasher crasher.c
[New inferior 8761]
[New process 8761]
process 8761 is executing new program: /usr/bin/gcc
[New inferior 8762]
[New process 8762]
process 8762 is executing new program: /usr/libexec/gcc/x86_64-redhat-linux/4.6.2/cc1

Breakpoint 1, 0x0000000000b156a0 in _cpp_lex_direct ()

The remaining issues have to do with breakpoint re-setting not doing the right thing with running inferiors. This causes some scary warnings when running, but I think for the time being you can just ignore those.

Well, I should say those are the known issues.  This feature hasn’t had as much use as I would like (judging from the low bug rate — I can’t tell if that is a good insight or a horrible realization).  So, try it out and report problems to GDB Bugzilla.  We’ll be making it work for you.

FOSDEM 2012 photo dump
fosdem 2012
After a couple weeks on the road I had my hands full, but I am recovering and cleaning the queue, so now is the time to to what I usually do after every FOSS event I attend: dump a lot of photos, unedited, in a simple web gallery, so anyone can use them freely (CC-BY-SA). The photos from FOSDEM 2012 are up.
This thime the Fedora group booth was weak and the group... heterogeneous, barely acting as a group, so for the big finale we didn't even get a group picture, the best finale I can offer is this sunset from the last conference day (as you expect, many of the geeks there didn't noticed it).fosdem 2012
fedora freemedia tool: making modifications to the trac?

I got a feature request for the free media tool that I’ve been working on. Benedikt Schäfer asked me if resolving a ticket in the tool could also change the ticket status on the trac. While this is on the TODO already, I sat up last night and looked into it.

I’m making use of cURLpp, which is just a C++ wrapper around libcURL for the tool. Getting the report wasn’t really complex:

Log in and save auth cookie Use saved auth and get report

It seems making modifications is way more complex. I am required to POST data to the server. The complexity is because of the numerous POST fields that I need to first GET, modify (manually here) and then POST back to the server. Here’s what the POST data looks like: (I used the firefox tamperdata add-on to get this info. Great add on!)

__FORM_TOKEN=xxxxxxxxxxxxxxxxxx&comment=&field_summary=Test&field_version=i386+DVD&field_keywords=&field_blockedby=&field_blocking=&field_email=&field_country=&action=resolve&action_resolve_resolve_resolution=fixed&ts=&replyto=&cnum=8&submit=Submit+changes

The __FORM_TOKEN needs to be extracted from the cookie the server sends. The rest are values I need to get from the ticket. To make any changes, I need to modify the action, comment, cnum etc fields. I spent about three hours tussling with cURL trying to successfully make a modification, and.. failed :/ (I’ve never been a web dev really, so it could just be that).

Would anyone know how I could get this done? I’ve looked around for a TRAC API which would’ve made life much simpler, but I haven’t really found anything. Any and all help would be appreciated :)


Using 960.gs, Haml, Sass, and Compass on Blogger
I tried to see how many cool toys I could use to create my own blogger template. So far I have:

960 Grid System for a nice 2 column layout. Haml for the unstyled template. Sass for style. Compass and Rake to tie it all together.
You can find the result on github, here.

Any readers who have noticed a similarity in chosen technology to those used by Katello get bonus points!
Let's Learn Programming Logic with PSeInt
My father in his spare time always researches useful tools or applications that can be implemented in his university classes. On this occasion, I found one of those applications quite interesting and innovative. It caught my attention. It is a tool for learning programming logic.

Programming logic has always been a problem for novice programmers. Here comes the classic concept (which I tend to disagree): "Logic is not made, is born". I think there are people that born with it and others that develop it (including those who are on the first scene, can develop this hability much more).

This is where this application, called PSeInt shows on. It is a tool that uses pseudocode to learn programming logic, aimed at inexperienced programmers. This pseudocode can be converted into a flow chart or may be executed either debugged like a normal application.  But a drawback for my English readers is that the application is only available in Spanish.

PSeInt is more than a project. Represents the effort of a group of students, professors and staff from the Universidad Nacional del Litoral (Argentina). I think projects like this should be promoted in our countries in order to improve education with tools that use the latest technology and are available to all who need it.

Among the features that I like are:
Cross-platform. Uses an easy language. Availability of help and examples. It allows you to execute and debug the code. Exportation to flowchart. Constant updates.
The following images are screenshots I took from the application:

Image 1.  Main interface of the application.

Image 2.  Exported flowchart from the application.

[image]
Image 3.  Execution of an code written in PSeInt.


I try to look for some alternative in English but it was a failure. If you know any similar application do not hesistate to write it on the comments, so I am able to review it and make a new post about it.

References:
Official Web Site - http://pseint.sourceforge.net/

February 16, 2012

phonon-gstreamer 4.6

Whoo, its been a long while, hasn’t it? The Phonominals are super proud to announce the release of Phonon-GStreamer 4.6! You may download it from the usual KDE infrastructure.

Additionally, you might want to hear about phonon-vlc 0.5.0, from Harald’s blag.

1967 Camero

1967 Camero by Stephen Downes @Flickr

This release has a lot of under the hood tweaks. A lot. Basically, we replaced the whole engine with a much speedier version. One that isn’t as fragile and is a lot more maintainable.

Oh, and did I mention that we now have gapless playback? I’ll give you a moment to regain your composure.

 

Welcome back.

For the technically inclined, we replaced our archaic handmade pipeline with the awesome playbin2 element. Lots of improvements were had there. Here’s a full list, pulled from git-shortlog:

Multichannel support in AudioDataOutput Fix ADO returning 0 samples forever Subtitle support for external files and builtin subtitles Subtitle autodetction Customizable subtitle font, via PHONONSUBTITLEFONT environment variable, or QApplication::font Subtitle encoding via PHONONSUBTITLEENCODING CDDA support Replace the archaic handmade pipeline with a playbin2 one Lots of internal code refactoring Removed dependency on Alsa Gapless Playback
I hear you asking it already. “Whats next for phonon-gstreamer?â€

Crossfading.

Hope everyone enjoys this release!

With hugs, Trever and Romain.

flattr this!

Phonon VLC 0.5.0 and GStreamer 4.6.0

It is release day in Phonon land and the Phonominals are singing in joy of the new releases of Phonon VLC and Phonon GStreamer.

Phonon VLC 0.5.0 may be obtained from KDE’s servers as usual.

For more information on Phonon GStreamer 4.6.0 head on over to Trever’s amazing blog post.

by su-lin@flickr

Phonon VLC 0.5 is the most stable release yet to see the light of day!

Almost the entire code base was redone to be faster, more efficient, more maintainable and of course more reliable. Additionally this release introduces compatibility with the upcoming VLC 2.0 release as well as improved support for more advanced video features such as subtitle and audio channel selection.

Enjoy your multimedia!

Harald and the Phonominals.


SHA-1 Cracked!
Chinese Professor Cracks Fifth Data Security Algorithm SHA-1 added to list of "accomplishments" Central News Agency http://en.epochtimes.com/news/7-1-11/50336.html Jan 11, 2007 Associate professor Wang Xiaoyun of Beijing's Tsinghua University and Shandong University of Technology has cracked SHA-1, a widely used data security algorithm. TAIPEI—Within four years, the U.S. government will cease to use SHA-1 (Secure Hash Algorithm) for digital signatures, and convert to a new and more advanced "hash" algorithm, according to the article "Security Cracked!" from New Scientist . The reason for this change is that associate professor Wang Xiaoyun of Beijing's Tsinghua University and Shandong University of Technology, and her associates, have already cracked SHA-1. Wang also cracked MD5 (Message Digest 5), the hash algorithm most commonly used before SHA-1 became popular. Previous attacks on MD5 required over a million years of supercomputer time, but Wang and her research team obtained results using ordinary personal computers. In early 2005, Wang and her research team announced that they had succeeded in cracking SHA-1. In addition to the U.S. government, well-known companies like Microsoft, Sun, Atmel, and others have also announced that they will no longer be using SHA-1. Two years ago, Wang announced at an international data security conference that her team had successfully cracked four well-known hash algorithms—MD5, HAVAL-128, MD4, and RIPEMD—within ten years. A few months later, she cracked the even more robust SHA-1. Focus and Dedication According to the article, Wang's research focusses on hash algorithms. A hash algorithm is a mathematical procedure for deriving a 'fingerprint' of a block of data. The hash algorithms used in cryptography are "one-way": it is easy to derive hash values from inputs, but very difficult to work backwards, finding an input message that yields a given hash value. Cryptographic hash algorithms are also resistant to "collisions": that is, it is computationally infeasible to find any two messages that yield the same hash value. Hash algorithms' usefulness in data security relies on these properties, and much research focusses in this area. Recent years have seen a stream of ever-more-refined attacks on MD5 and SHA-1—including, notably, Wang's team's results on SHA-1, which permit finding collisions in SHA-1 about 2,000 times more quickly than brute-force guessing. Wang's technique makes attacking SHA-1 efficient enough to be feasible. MD5 and SHA-1 are the two most extensively used hash algorithms in the world. These two algorithms underpin many digital signature and other security schemes in use throughout the international community. They are widely used in banking, securities, and e-commerce. SHA-1 has been recognized as the cornerstone for modern Internet security. According to the article, in the early stages of Wang's research, there were other researchers who tried to crack it. However, none of them succeeded. This is why in 15 years hash research had become the domain of hopeless research in many scientists' minds. Wang's method of cracking algorithms differs from others'. Although such analysis usually cannot be done without the use of computers, according to Wang, the computer only assisted in cracking the algorithm. Most of the time, she calculated manually, and manually designed the methods. "Hackers crack passwords with bad intentions," Wang said. "I hope efforts to protect against password theft will benefit [from this]. Password analysts work to evaluate the security of data encryption and to search for even more secure … algorithms." "On the day that I cracked SHA-1," she added, "I went out to eat. I was very excited. I knew I was the only person who knew this world-class secret." Within ten years, Wang cracked the five biggest names in cryptographic hash algorithms. Many people would think the life of this scientist must be monotonous, but "That ten years was a very relaxed time for me," she says. During her work, she bore a daughter and cultivated a balcony full of flowers. The only mathematics-related habit in her life is that she remembers the license plates of taxi cabs. With additional reporting by The Epoch Times.
Unfakeable Linux?
This is going to be a long one. Oracle recently announced that "it would provide the same enterprise class support for Linux as it provides for its database, middleware and applications products. Oracle starts with Red Hat Linux, removes Red Hat trademarks, and then adds Linux bug fixes." Oracle Announces The Same Enterprise Class Support For Linux As For Its Database Dell, Intel, HP, IBM, Accenture, AMD, BP, EMC, BMC, and NetApp Join Unbreakable Linux Program http://www.oracle.com/corporate/press/2006_oct/Oracle-Linux-Program.html REDWOOD SHORES, Calif., 25-OCT-2006 01:03 PM Today Oracle announced that it would provide the same enterprise class support for Linux as it provides for its database, middleware and applications products. Oracle starts with Red Hat Linux, removes Red Hat trademarks, and then adds Linux bug fixes. Currently, Red Hat only provides bug fixes for the latest version of its software. This often requires customers to upgrade to a new version of Linux software to get a bug fixed. Oracle's new Unbreakable Linux program will provide bug fixes to future, current, and back releases of Linux. In other words, Oracle will provide the same level of enterprise support for Linux as is available for other operating systems. Oracle is offering its Unbreakable Linux program for substantially less than Red Hat currently charges for its best support. "We believe that better support and lower support prices will speed the adoption of Linux, and we are working closely with our partners to make that happen," said Oracle CEO Larry Ellison. "Intel is a development partner. Dell and HP are resellers and support partners. Many others are signed up to help us move Linux up to mission critical status in the data center." "Oracle's Unbreakable Linux program is available to all Linux users for as low as $99 per system per year," said Oracle President Charles Phillips. "You do not have to be a user of Oracle software to qualify. This is all about broadening the success of Linux. To get Oracle support for Red Hat Linux all you have to do is point your Red Hat server to the Oracle network. The switch takes less than a minute." "We think it's important not to fragment the market," said Oracle's Chief Corporate Architect Edward Screven. "We will maintain compatibility with Red Hat Linux. Every time Red Hat distributes a new version we will resynchronize with their code. All we add are bug fixes, which are immediately available to Red Hat and the rest of the community. We have years of Linux engineering experience. Several Oracle employees are Linux mainline maintainers." DELL "As a customer with first hand experience of Oracle's outstanding support organization, Dell will use Oracle to support Linux operating systems internally," said Michael Dell, Chairman of the Board, Dell. "Oracle's new Linux support program will help us drive standards deeper into the enterprise. Today we're announcing that Dell customers can choose Oracle's Unbreakable Linux program to support Linux environments running on Dell PowerEdge servers." Intel "Having worked with Oracle for many years in the enterprise computing space, we believe that the Oracle Unbreakable Linux program will bring tremendous value to our mutual Linux customers," said Paul Otellini, President and CEO, Intel Corporation. "Our work with Oracle on this program will be an important extension to our longstanding enterprise computing relationship." HP "HP and Oracle's collaboration and testing of Linux with integrated stacks of hardware, software, storage, and networking has helped create numerous best practices across the industry. HP welcomes the addition of Oracle's Unbreakable Linux program to the portfolio," said Mark Hurd, Chairman and Chief Executive Officer, HP. IBM "Oracle's support for Red Hat Linux will encourage broader adoption of Linux in the enterprise," said Bill Zeitler, Senior Vice President & Group Executive, IBM Systems and Technology Group. "IBM shares Oracle's goal of making Linux a reliable, highly standard, cost effective platform for mission critical applications backed by world class support." Accenture "Linux is important to us, and to our customers," said Don Rippert, Chief Technology Officer, Accenture. "We applaud Oracle's efforts to bring enterprise-quality support to Linux with the Oracle Unbreakable Linux program announcement. Together with Oracle, we at Accenture look forward to making the Linux experience even better for our customers." AMD "Oracle's Unbreakable Linux program will greatly expand the servicing options available to our AMD Linux customers," said Hector Ruiz, Chairman and Chief Executive Officer of Advanced Micro Devices. "We are excited by the program's potential to further enhance the success of AMD Linux servers in the enterprise." Bearing Point "It is critical that our customers have true enterprise-quality support for their Linux deployments. Oracle's Unbreakable Linux program support delivers the level of confidence our customers need to run Linux in their data centers," said Harry You, CEO, Bearing Point. EMC "The combined power of EMC and Oracle solutions bring superior reliability, scalability, high availability, and now, enhanced enterprise supportability to Linux users. We are confident that joint Linux solutions from EMC and Oracle will deliver enterprise scale and quality while lowering the cost of infrastructure for our customers," said Joe Tucci, Chairman, CEO, President, EMC. BMC "As Oracle's only systems management ISV at the highest level in Oracle's Partner Program, BMC Software is excited to see Oracle's deepening commitment to Linux," said Bob Beauchamp, BMC Software President and CEO. "Business Service Management from BMC Software with the Oracle Unbreakable Linux program meets customer demand for lower cost and higher quality support for their infrastructure." NetApp "The world's largest enterprises must have the flexibility to quickly and continually adapt to today's rapidly changing business requirements, without incurring risk," said Dan Warmenhoven, CEO of Network Appliance. "The Oracle Unbreakable Linux program is designed to drive the key benefits of Linux - including flexibility, reliability, and simplicity - directly into the data center. The longstanding relationship between NetApp and Oracle has enabled us to continuously deliver superior enterprise solutions to enable business agility and improve reliability - all tenets of the NetApp brand." Oracle Support Oracle's breadth and depth of technical expertise, advanced support technologies, and global reach includes 7,000 support staff in 17 global support centers, providing help to our customers in 27 languages, in any time zone. Oracle has recently been awarded the J.D. Power and Associates Global Technology Service and Support Certification for "an outstanding customer service experience." "With the scale of our support organization we can provide much better Linux support at a much lower price," said Executive Vice President of Oracle Customer Services Juergen Rottler. "We have the expertise and infrastructure to improve substantially the quality of support for enterprise Linux customers." Enterprise Linux binaries will be available for free from Oracle. Enterprise Linux Network Support will be offered for $99.00 per system / per year. Enterprise Linux Basic support, which offers Network access plus 24x7 global coverage will be offered for $399 for a 2 CPU system per year and $999 for a system with unlimited CPU's. Enterprise Linux Premier Support, which offers Basic support plus back port of fixes to earlier releases as well as Oracle Lifetime Support will be offered for $1,199 for a 2 CPU system per year and $1,999 for a system with unlimited CPU's. Oracle and Linux Oracle has been a long-standing, key contributor to the Linux community. Oracle produced its first commercial Linux database in 1998. Since that time Oracle has worked steadily to improve the experience of all Linux users. Oracle's Linux Engineering team is a trusted part of the Linux community, and has made major code contributions such as Oracle Cluster File System that is now part of Linux kernel 2.6.16. Oracle has been and will continue contributing Linux related innovations, modifications, documentation and fixes directly to the Linux community on a timely basis. Now here's Red Hat's "interesting" response: Red Hat Responds http://www.redhat.com/promo/unfakeable/ The opportunity for Linux just got bigger. Oracle's support for Linux reaffirms Red Hat's technical industry leadership and the end of proprietary Unix. It's no accident that Red Hat was chosen #1 in value two years running. Want to know what else we think? Read on. Red Hat & Oracle Partnership Q: Does Oracle's recent announcement change Red Hat's partnership with Oracle? A: No. Red Hat has had a productive 7-year relationship with Oracle. Red Hat will continue to work closely with Oracle to optimize Red Hat Enterprise Linux and JBoss middleware subscriptions for Oracle products, and to support joint customers. Red Hat & JBoss Subscriptions Q: Does Oracle's announcement include support for the Red Hat Application Stack, JBoss, Hibernate, Red Hat GFS, Red Hat Cluster Suite, and Red Hat Directory Server? A: No. Oracle does not support any of these leading open source products. Hardware Compatibility Q: Oracle says their Linux support includes the same hardware compatibility and certifications as Red Hat Enterprise Linux. Is this true? A: No. Oracle has stated they will make changes to the code independently of Red Hat. As a result these changes will not be tested during Red Hat's hardware testing and certification process, and may cause unexpected behavior. Hence Red Hat hardware certifications are invalidated. Software Compatibility Q: Oracle says their Linux support includes the same software compatibility and ISV certifications of Red Hat Enterprise Linux. Is this true? A: No. Oracle has stated they will make changes to the code independently of Red Hat. These changes will not be tested during Red Hat's software testing and certification process, and may cause unexpected behavior. Hence Red Hat software certifications are invalidated. Binary Compatibility Q: Will Oracle's Linux support be binary compatible with Red Hat Enterprise Linux so that my applications continue to work? A: There is no way to guarantee that changes made by Oracle will maintain API (Application Programming Interface) or ABI (Application Binary Interface) compatibility; there may be material differences in the code that will result in application failures. Compatibility with Red Hat Enterprise Linux can only be verified by Red Hat's internal test suite. Source Code Compatibility Q: Will Oracle's product result in a "fork" of the operating system? A: Yes. The changes Oracle has stated they will make will result in a different code base than Red Hat Enterprise Linux. Simply put, this derivative will not be Red Hat Enterprise Linux and customers will not have the assurance of compatibility with the Red Hat Enterprise Linux hardware and application ecosystem. Indemnification Q: What do Customers need to give in order to get Oracle's indemnification? A: Customers are required to provide Oracle with IP indemnification without financial limitation for any software or materials provided to Oracle (e.g. patch or enhancement). Unlike Oracle, a Customer's liability is not capped at the value of the software or materials it provides to Oracle. Q: Are backports covered by Oracle's indemnification? A: Only if Oracle has not released a later non-infringing version of the code. Red Hat's Open Source Assurance covers all released versions and updates. Q: What protection does Red Hat provide? A: Under Red Hat's Open Source Assurance Program, if the Red Hat Software is found to infringe, Red Hat will (a) obtain the rights necessary for Customer to continue to use the Software; (b) modify the Software so that it is non-infringing; or (c) replace the infringing portion of the Software with non-infringing. And it also provides for indemnification. Q: So in the end, is Oracle's indemnification revolutionary? Does it provide greater value? A: No. With its Open Source Assurance Policy, Red Hat focuses on the Customer's business continuity in the face of an infringement claim. With Oracle's indemnity program, you only get an indemnity so long as you give Oracle an unlimited one in return. Updates Q: Oracle says they will provide the same updates as Red Hat Enterprise Linux. Can they do this? A: There are multiple requirements to building binary compatible software. One piece is the source code; another is the build and test environment. While Oracle may be able to take the source code at some point after a Red Hat update release, obviously their build and test environment will be inherently different than that of Red Hat Enterprise Linux. For similar reasons, there is no guarantee that the source code for the Red Hat Enterprise Linux update will work correctly when integrated into Oracle's modified Linux code base. Support & Maintenance Lifecycle Q: In order to get support and maintenance for Red Hat Enterprise Linux, do you need to upgrade to the most recent version? A: No. Red Hat subscribers enjoy support and updates for all versions for up to 7 years. Throughout that time, Red Hat provides regular maintenance releases as part of the Red Hat Enterprise Linux subscription. This is supplemented through our support services by a 'hot-fix' process that provides critical bug fixes on a customer-specific basis. Oracle "reserves the right to desupport certain Enterprise Linux program releases" as part of their Oracle Enterprise Linux support policies. Support Level Flexibility Q: Does Red Hat allow you to tailor your support level to your workload? A: Yes. Many customers match their Red Hat Enterprise Linux subscription level to their application SLA requirements. For example, customers may choose a Basic subscription for non-mission critical file and print servers, while selecting Premium subscriptions for database servers. Oracle does not allow this flexibility - their support policy reads: "If acquiring Enterprise Linux Premier Support, all of your Oracle supported systems must be supported with Enterprise Linux Premier Support." Security Q: Can Oracle produce timely security updates to Red Hat Enterprise Linux as they stated? A: No. There will be a delay between the time a Red Hat Enterprise Linux update is issued and the time the source code makes its way to Oracle. There is no guarantee that the source code for the Red Hat Enterprise Linux update will work correctly when integrated into Oracle's Linux code base; this integration and test will take additional time. In the case where the update corrects critical security flaws, Oracle customers may be exposed to additional risk. Linux Assurance Q: Red Hat Enterprise Linux has government security certifications including Common Criteria Evaluated Assurance Level (EAL) 4+/Controlled Access Protection Profile (CAPP). Will Oracle's version of Linux inherit these certifications? A: No. Common Criteria evaluations are conducted on a specific configuration of software and hardware. Any changes to the software such as those Oracle has announced will invalidate certification. Customer Collaboration Q: Will Oracle's Linux customers have the same degree of influence over Oracle's Linux as Red Hat's customers do with Red Hat Enterprise Linux? A: The support we provide for Red Hat Enterprise Linux starts when Red Hat and its customers collaborate in the design of new versions. This collaboration extends through the development, testing, and production deployment of Red Hat Enterprise Linux. Vendors of a derivative distribution are simply not positioned to provide their customers the same collaboration opportunity. Support Partners Q: Hardware vendors such as Dell, HP, and IBM provide support for Red Hat Enterprise Linux. How is Oracle's support offering different? A: Red Hat's hardware partners provide front line support to customers, backed by Red Hat. Red Hat has a close contractual relationship with these partners, which requires training, well defined escalation paths, Red Hat back-line support, and cooperative customer issue management. Our joint customers enjoy the same degree of collaborative participation as any Red Hat customer.
Seclists.Org Shut Down By Myspace and GoDaddy
From: "Fyodor" <fyodor@insecure.org> Subject: Seclists.Org shut down by Myspace and GoDaddy Date: Thu, January 25, 2007 5:47 pm To: nmap-hackers@insecure.org Hi everyone, Many of you reported that our SecLists.Org security mailing list archive was down most of yesterday (Wed), and all you really need to know is that we're back up and running! But I'm going into rant mode anyway in case you care for the details. I woke up yesterday morning to find a voice message from my domain registrar (GoDaddy) saying they were suspending the domain SecLists.org. One minute later I received an email saying that SecLists.org has "been suspended for violation of the GoDaddy.com Abuse Policy". And also "if the domain name(s) listed above are private, your Domains By Proxy(R) account has also been suspended." WTF??! Neither the email nor voicemail gave a phone number to reach them at, nor did they feel it was worth the effort to explain what the supposed violation was. They changed my domain nameserver to "NS1.SUSPENDED-FOR.SPAM-AND-ABUSE.COM". Cute, eh? I called GoDaddy several times, and all three support people I spoke with (Craig, Ricky, then Wael) said that the abuse department doesn't take calls. They said I had email abuse@godaddy.com (which I had already done 3 times) and that I could then expect a response "within 1 or two business days". Given that tens of thousands of people use SecLists.Org every day, I didn't take that well. When they realized I was going to just keep calling until they did something, they finally persuaded the abuse department to explain why they cut me off: Myspace.Com asked them to. Apparently Myspace is still reeling from all the news reports more than a week ago about a list of 56,000 myspace usernames+passwords making the rounds. It was all over the news, and reminded people of a completely different list of 34,000 MySpace passwords which was floating around last year. MySpace users fall for a LOT of phishing scams. They are basically the new AOL. Anyway, everyone has this latest password list now, and it was even posted (several times) to the thousands of members of the fulldisclosure mailing list more than a week ago. So it was archived by all the sites which archive full-disclosure, including SecLists.Org. Instead of simply writing me (or abuse@seclists.org) asking to have the password list removed, MySpace decided to contact (only) GoDaddy and try to have the whole site of 250,000 pages removed because they don't like one of them. And GoDaddy cowardly and lazily decided to simply shut down the site rather than actually investigating or giving me a chance to contest or comply with the complaint. Needless to say, I'm in the market for a new registrar. One who doesn't immediately bend over for any large corporation who asks. One who considers it their job just to refer people to the SecLists.Org nameserver at 205.217.153.50, not to police the content of the services hosted at the domains. The GoDaddy ToS forbids hosting what they call "morally objectionable activities". It is way too late for MySpace to put the cat back in the bag anyway. The bad guys already have the file, and anyone else who wants it need only Google for "myspace1.txt.bz2" or "duckqueen1". Is MySpace going to try and shut down Google next? For some reason, this is only one of a spate of bogus Seclists removal requests. I do remove material that is clearly illegal or inappropriate for SecLists.org (like the bonehead who keeps posting furry porn to fulldisclosure). But one company sent a legal threat demanding[1] that I remove a 7-year old Bugtraq posting which was a complaint about previous bogus legal threats they had sent. Another guy[2] last week sent a complaint to my ISP saying that an image was child porn and declaring that he would notify the FBI. When asked why he thought the picture was of a child, he tried a different tack: sending a DMCA complaint declaring under penalty of perjury that he is the copyright holder of the photo! Michael Crook told me on the phone that he sent the DMCA request, but when I forwarded the info to the EFF (who is already suing this guy for sending other bogus DMCA complaints), he changed his mind and wrote that "after further review, I can find no record" or mailing the complaint. Most of the censorship attempts are for the full-disclosure list. It would be easiest just to cease archiving that list, but I do think it serves an important purpose in keeping the industry honest. And many good postings do make it through if you can filter out all the junk. So I'm keeping it, no matter how "morally objectionable" GoDaddy and MySpace may think it to be! In much happier Nmap news, I'm pleased to report that the Nmap project now has a public SVN server so you can always check out the latest version. Due to a bug in SVN, we use a username as "guest" with no password rather than anonymous. So check it out with the command: svn co --username guest --password "" svn://svn.insecure.org/nmap Then do the normal: ./configure make And install it or set NMAPDIR to "." to run in place. Among other goodies, this release includes the Nmap scripting language[3]. If you want to follow Nmap development on a check-in by check-in basis, there is a new nmap-svn mailing list[4] for that. But be prepared for some high traffic as you'll get every patch! 2007 will be a good year for Nmap! Cheers, Fyodor [1] http://seclists.org/nmap-dev/2006/q4/0302.html [2] http://seclists.org/nmap-dev/2007/q1/0067.html [3] http://insecure.org/nmap/nse/ [4] http://cgi.insecure.org/mailman/listinfo/nmap-svn _______________________________________________ Sent through the nmap-hackers mailing list http://cgi.insecure.org/mailman/listinfo/nmap-hackers Archived at http://seclists.org
Linux Foundation
The Open Source Developer Labs and the Free Standards Group have merged today as the Linux Foundation.
Microsoft + Novell = ?
Novell and Microsoft Collaborate Frequently Asked Questions (FAQ) http://www.novell.com/linux/microsoft/faq.html Q. What are you announcing? Novell and Microsoft are announcing an historic bridging of the divide between open source and proprietary software. They have signed three related agreements which, taken together, will greatly enhance interoperability between Linux and Windows and give customers greater flexibility in their IT environments. Under a technical cooperation agreement, Novell and Microsoft will work together in three primary areas to deliver new solutions to customers: virtualization, web services management and document format compatibility. Under a patent cooperation agreement, Microsoft and Novell provide patent coverage for each others customers, giving customers peace of mind regarding patent issues. Finally, under a business cooperation agreement, Novell and Microsoft are committing to dedicate marketing and sales resources to promote joint solutions. Q. What does this mean for Linux? Novell and Microsoft recognize that many customers have, and will continue to have, multiple platforms, including Linux and Windows, in their environments. Customers are asking for highly reliable, secure, and interoperable solutions. Enabling easy and powerful virtualization of Linux on Windows and Windows on Linux is a great step forward towards this goal. Novell will continue to promote Linux as the premier platform for core infrastructure and application services. This deal strengthens Novell's commitment to the community through leading-edge development projects as well as the continued promotion of Linux in the marketplace. Novell recognizes the significant contribution open source developers have made to Linux and their reliance on the General Public License. The patent agreement signed by Novell and Microsoft was designed with the principles and obligations of the GPL in mind. Under this agreement, customers of SUSE Linux Enterprise know they have patent protection from Microsoft in connection with their use of SUSE Linux Enterprise, further encouraging the adoption of Linux in the marketplace. Q. Will Novell and Microsoft stop competing? This agreement is focused on building a bridge between business and development models, not removing competition in the marketplace. We will continue to compete in a number of arenas, including the desktop, identity and security management, and systems and resource management. At the product level, Windows and SUSE Linux Enterprise will continue to compete; however, the agreement is focused on making it easier for customers who want to run both Windows and Linux to do so. This is a very common relationship for large businesses where we simultaneously partner and compete in different areas. Q. I am a current Novell customer who subscribes to SUSE Linux Enterprise Server. Does the patent protection offered by Microsoft apply to me? Yes. The patent protection offered by Microsoft applies to ALL customers who subscribe to a SUSE Linux Enterprise product. It does not matter if you purchased SLES or SLED, if you bought it directly from Novell, from a reseller, from a distributor, or acquired it via a coupon from Microsoft. If you have a current subscription to SUSE Linux Enterprise, then you are covered by the Microsoft patent protection. Microsoft has provided a covenant not to assert its patent portfolio directly to customers who have purchased SUSE Linux Enterprise from Novell. Q. From the customer's perspective, what is covered in openSUSE? The patent agreement covers everything from openSUSE.org that is included in past and current Novell supported versions of SUSE Linux Enterprise Server and SUSE Linux Enterprise Desktop. It also covers future versions (for 5 years) of SUSE Linux Enterprise Server and SUSE Linux Enterprise Desktop, with recognition of the fact that development changes may occur that fall outside the terms of this agreement. While some future scenarios may not be included, we have established a working relationship and structure to have conversations about those issues as they arise. Q. Does this covenant apply to original equipment manufacturers (OEMs) that buy SUSE Linux Enterprise and preload or resell it? The covenant applies to end customers of Novell products. Q. Is this in response to recent events, such as Oracle's announcement about Red Hat? No. Negotiations on this agreement have been going on for many months. This agreement reflects a joint assessment by Novell and Microsoft that customers will be best served by ensuring Linux and Windows can interoperate effectively. In terms of a possible Oracle move to offer support for SUSE Linux Enterprise, Novell believes customers with heterogeneous networks are best served by an independent operating systems vendor like Novell with broad hardware and software support. Q. What are the financial benefits to Novell? To Microsoft? Novell anticipates the agreement will increase demand for SUSE Linux Enterprise, although they are not putting out any formal estimates. Through the improved interoperability and patent protection offered as part of this agreement, both Novell and Microsoft anticipate increased business opportunity through both best of breed product solutions and market differentiation. Q. What are the specifics of the agreement? Like many commercial transactions, the financial terms of the agreement are not being disclosed at this time. Under the technical collaboration agreement, the companies will create a joint research facility and pursue new software solutions for virtualization, management, and document format compatibility. These are potentially huge markets — IDC projects the overall market for virtual machine software to be $1.8 billion by 2010, and the overall market for distributed system management software to be $10.2 billion by 2010 — and the companies believe their investment in interoperability will make their respective products more attractive to customers. Under the business collaboration agreement, the companies will pursue a variety of joint marketing activities. In addition, Microsoft will distribute as part of a resale arrangement approximately 70,000 coupons for SUSE Linux Enterprise Server maintenance and support per year so that customers can benefit from the use of the new software solutions developed through the collaborative research effort, as well as a version of Linux that is covered with respect to Microsoft's IP rights. Under the patent agreement, both companies will make up-front payments in exchange for a release from any potential liability for use of each others patented intellectual property, with a net balancing payment from Microsoft to Novell reflecting the larger applicable volume of Microsoft's product shipments. Novell will also make running royalty payments based on a percentage of its revenues from open source products. Q. Does this mean that Microsoft will now sell Linux? No. However, as part of this agreement, Microsoft and Novell want to ensure our joint customers have the opportunity to take advantage of the improved interoperability and patent protection enabled by this agreement. To help promote these new solutions, Microsoft has purchased a quantity of coupons from Novell that entitle the recipient to a 1-year subscription for maintenance and updates to SUSE Linux Enterprise Server. Microsoft will make these coupons available to joint customers who are interested in deploying virtualized Windows on SUSE Linux Enterprise Server, or virtualized SUSE Linux Enterprise Server on Windows. For customers who have a significant Windows investment and want to add Linux to their IT infrastructure, Microsoft will recommend SUSE Linux Enterprise for Windows-Linux solutions. Q. What does this mean for customers? Customers have repeatedly told both Novell and Microsoft that flexibility is an increasingly important part of their data center. At a time when CIOs are being asked to do more with less, and improve utilization, virtualization is a key to solving that problem. Both Novell and Microsoft realize that the data center of the future will have both Linux and Windows as significant platforms. This agreement is all about making those two platforms work together, and providing the enterprise support for that interoperability that customers demand. By working together, Novell and Microsoft enable customers to choose the operating system that best fits their applications and business needs. Q. Why is the patent agreement important? The patent agreement demonstrates that Microsoft is willing to enter into agreements that extend its patent protection to open source customers. This is an important foundation in building the bridge between proprietary and open source software. One of the biggest perceived differences between open and closed source software revolves around intellectual property. Because open source software is developed in a cooperative environment, some have expressed concerns that intellectual property protections could be compromised more easily in open source. Today's agreement between Novell and Microsoft provides confidence on intellectual property for Novell and Microsoft customers. By mutually agreeing not to assert their patent rights against one another's customers, the two companies give customers greater peace of mind regarding the patents in the solutions they're deploying. Novell and Microsoft believe that this arrangement makes it possible to offer customers the highest level of interoperability with the assurance that both companies stand behind these solutions. Q. The press release indicates Microsoft is also pledging not to assert its patents against individual, non-commercial open source developers. How is this connected to Novell? Microsoft and Novell felt it was important to establish a precedent for the individual, non-commercial open source developer community that potential patent litigation need not be a concern. Microsoft is excited to more actively participate in the open source community and Novell is and will continue to be an important enabler for this bridge. For these reasons, both Novell and Microsoft felt it was appropriate to make this pledge for Microsoft not to assert its patents against the non-commercial community. Q. What are the exact terms of the individual, non-commercial developer patent non-assert? Who is covered and who is not? The terms of the individual, non-commercial developer patent non-assert are on www.microsoft.com/interop. You are covered if you are doing non-commercial open source software development. This includes individual enthusiasts, such as a student or a developer who does work on his own time on a project of personal interest to him. If you are compensated for your development, then your activities are considered "commercial", and you would not be covered. Q. How will the technical cooperation work? The two companies will create a joint research facility at which Microsoft and Novell technical experts will architect and test new software solutions and work with customers and the community to build and support these technologies. The agreement between Microsoft and Novell focuses on three technical areas that provide important value and choice to the market: Virtualization. Virtualization is one of the most important trends in the industry. Customers tell us that virtualization is one way they can consolidate and more easily manage rapidly growing server workloads and their large set of server applications. Microsoft and Novell will jointly develop the most compelling virtualization offering in the market for Linux and Windows. Web Services for managing physical and virtual servers. Web Services and service oriented architectures continue to be one of the defining ways software companies can deliver greater value to customers. Microsoft and Novell will undertake work to make it easier for customers to manage mixed Windows and SUSE Linux Enterprise environments and to make it easier for customers to federate Microsoft Active Directory with Novell eDirectory. Document Format Compatibility. Microsoft and Novell have been focusing on ways to improve interoperability between office productivity applications. The two companies will now work together on ways for OpenOffice.org and Microsoft Office users to best share documents and both will take steps to make translators available to improve interoperability between Open XML and OpenDocument Formats. Q. What are the main components of the business cooperation agreement? The business cooperation agreement addresses a series of issues designed to maximize the value of the patent cooperation and technical collaboration agreements, including: marketing, training, support, and sales resources. Q. By making it easy to run Windows virtualized on Linux, isn't Novell undercutting its own Mono project, which shares a similar goal? Mono provides developers a way to run applications designed using Microsoft .NET technologies to run on Linux and other platforms. Its main focus is the Linux desktop, where Mono has been leveraged to build a series of new services, including search, music playback, and more. Virtualization focuses on maximizing the value of server hardware by running multiple operating systems. It is used for server consolidation, workload balancing and other corporate needs. So while both approaches are designed to give customers flexibility in their IT systems, their focuses are quite different. Q. What does the patent agreement cover with regard to Mono and OpenOffice? Under the patent agreement, customers will receive coverage for Mono, Samba, and OpenOffice.org as well as .NET and Windows Server. All of these technologies will be improved upon during the five years of the agreement and there are some limits on the coverage that would be provided for future technologies added to these offerings. The collaboration framework we have put in place allows us to work on complex subjects such as this where intellectual property and innovation are important parts of the conversation.
nginx, tornado and siege

yesterday I blogged about nginx, tornado and http_load
I finished the day running seige and wanted to share my results.

I got siege with yum install seige
This test was run on a Fedora 16 x86_64 RHEV VM.
Given 4G of RAM and 4 sockets across 4 3Ghz i7 cores

nginx is running at http://localhost/
tornado is running at  http://localhost:8888/

I tested each server with both 50 and 500 concurrent users for a minute at a time.

# siege -d1 -t1M -c50 http://localhost/
Transactions: 5670 hits
Availability: 100.00 %
Elapsed time: 59.59 secs
Data transferred: 20.01 MB
Response time: 0.00 secs
Transaction rate: 95.15 trans/sec
Throughput: 0.34 MB/sec
Concurrency: 0.31
Successful transactions: 5670
Failed transactions: 0
Longest transaction: 0.35
Shortest transaction: 0.00

# siege -d1 -t1M -c50 http://localhost:8888/
Transactions: 5871 hits
Availability: 100.00 %
Elapsed time: 59.62 secs
Data transferred: 0.07 MB
Response time: 0.00 secs
Transaction rate: 98.47 trans/sec
Throughput: 0.00 MB/sec
Concurrency: 0.44
Successful transactions: 5871
Failed transactions: 0
Longest transaction: 0.96
Shortest transaction: 0.00

# siege -d1 -t1M -c500 http://localhost/
Transactions: 49412 hits
Availability: 100.00 %
Elapsed time: 59.74 secs
Data transferred: 174.35 MB
Response time: 0.04 secs
Transaction rate: 827.12 trans/sec
Throughput: 2.92 MB/sec
Concurrency: 29.68
Successful transactions: 49412
Failed transactions: 0
Longest transaction: 21.14
Shortest transaction: 0.00

# siege -d1 -t1M -c500 http://localhost:8888/
Transactions: 42345 hits
Availability: 100.00 %
Elapsed time: 59.80 secs
Data transferred: 0.48 MB
Response time: 0.17 secs
Transaction rate: 708.11 trans/sec
Throughput: 0.01 MB/sec
Concurrency: 121.91
Successful transactions: 42345
Failed transactions: 0
Longest transaction: 3.88
Shortest transaction: 0.00

I was initially confused by the concurrency metric, this is from the siege manual:

Concurrency is average number of simultaneous connections, a number which rises as server performance decreases.

So it seems the siege results are consistent with the http_load results.

[fedora]
As you may know Fedora 17 Alpha RC2 has released so I install it on virtual environment. 1. The first picture is boot screen. 2. This is LXDE spin’s desktop. It has only one icon on desktop that is of course launcher of installer. 3. The first menu of ...
Copy-on-write with KVM
While KVM/QEMU snapshoting is still a dirty feature (quite slow), I love copy-on-write disc image format of the QEMU. It is actually the best way how to quiclky provision pre-installed systems for testing and development. The idea is easy:

Install a base operating system, configure it for your specific purposes. Stop it. You wont use it anymore, only copy-on-write "children". You may start it to do some additional configuration when you forgot something for example. Provision a new VM with qcow disk image format based on the one from above. Do it multiple times. You can run more than one instances simultaneously.

The key command is qemu-img create which creates new image. You need to provide -f qcow2 parameter specifying the correct image format, and -b /path/to/the/base.img. New VM is provisioned in few seconds since it only needs to create very small image (few kilobytes) that will grow as it copies on write.

I have modified a cool script (karma goes to Jason Dobies, Shannon Hughes and all the others I forgot) for fast image provision. It is tuned for Fedora/Red Hat systems, but it's a piece to modify it for other distributions or systems. It works either with Windows. Simple session:

# snap-guest
Usage: BASE_IMAGE_NAME TARGET_IMAGE_NAME [MEMORY IN MB]

Available base images:
f12-x64-base
f13-x64-base
f14-x64-base
el6_0-x64-base
el6_1-x64-base

# snap-guest el6_0-x64-base testing_el6 1024
...
Provisioning guest

#


The script also connect to the newly created image and configure it (MAC address, hostname). This part needs to be tuned to support non-redhat distros. If you want to provision Windows system - you can - you need to find other way to do it.

It is also possible to modify the script to use LVM or physical volumes to get fastest possible speed for the base image. VM provisioning couldn't be easier.

Please note my script now lives on github.com - fetch the most recent version with even more features.

<iframe src="http://pastebin.com/embed_iframe.php?i=z4TwhSgB" style="border:none;width:100%"></iframe>
Where the People Sing and Play
[image]

New Orleans musicians share their Mardi Gras experience with host Aura Fedora. Featuring interviews with Big Sam, Luke Hudleston, Khris Royal, and Paul Sanchez and the music of Paul Sanchez..

This item belongs to: audio/opensource_audio.

This item has files of the following types: Metadata, Ogg Vorbis, VBR MP3

On my relationship with fedora medical

Of late, I’ve had to deal with the fact that people believe that the driving force behind me applying for the fedora medical GSoC last year was only money. I address the matter in this post.

Susmit had initiated the fedora medical SIG in an attempt to make a fedora based spin that would be packed with software related to health care.

Last year, at the time of the GSoC, Mario and Susmit put up fedora medical as one of the prospective projects for the Fedora GSoC. Here’s the entry from the wiki page:

Fedora Medical

Status: In progress.

Summary of idea: Here, we are looking for a couple students who have some experience in RPM packaging, python, and bash. This would be a good opportunity to learn in depth packaging and fedora contributor ecosystem.

This is a work in progress and details can be found here: http://fedoraproject.org/wiki/SIGs/FedoraMedical

We are looking forward to do mainly packaging and getting them published to fedora repo. However, we will also be doing some tooling and associated works. So, python and bash will be required.

Understanding fedora package maintainer guideline is required. Having existing packages in fedora will be a plus. Also, the student should be interested in maintaining some of those packages after SOC.

Contacts: Susmit Shannigrahi

Mentor(s): Susmit and Mario Ceresa

Notes:

As you’ll see, the requirements were to be adept at RPM packaging. This happens to be one of my areas of contribution in Fedora, and I’m pretty good at it. You’ll notice it also mentions that:

“the student should be interested in maintaining some of those packages after SOC.â€

The intention, as I understand it, was for the student to hang on to the packages until the SIG expanded and volunteers who actually used the software could take over. A student may or may not have healthcare as his subjects, and cannot be expected to maintain all the packages single handed. The main purpose of the above GSoC idea was:

“We are looking forward to do mainly packaging and getting them published to fedora repo.â€

Packaging was right up my alley, I applied. Since I was already a package maintainer with almost 4 years of packaging experience, and an undergraduate student, I fit the bill pretty well and was accepted. I worked on the packages throughout the GSoC period with weekly blog updates. You can find all my GSoC related blog entries for the entire 4 months in the archives: May 2011, June, July and August. The final report is here.

Once the SoC was over, I tried to complete my pending reviews, and looked for people who could take over the packages in the long term. Here’s my request to the devel list. As John suggested, I didn’t orphan them, to save the new maintainers the trouble of getting them re-reviewed. I’m still carrying them.

So my incentive was only money then? Why? Because I didn’t take it upon myself to keep the SIG alive? How/Why is that on my shoulders? Why does a failed/in hiatus fedora medical SIG imply that my GSoC term was a failure? I beg to disagree. I accept that the fedora medical SIG is inactive due to whatever reasons. But, I did my part: I completed my packages, my review swaps, my progress updates. My part was never to take over the SIG and lead it. My part was never to lobby for new recruits. Even then, I did try. The inactivity of the SIG means that the work I did on all those packages is going waste, in case it isn’t apparent. I got paid for my work, as per the terms of GSoC. If the SIG has now gone on hiatus, should I return the money I got for my work?

The driving force was fedora-medical needing someone to package their software up quickly so they could proceed with their spin release. I was paid for successfully carrying out the required task. For those who aren’t aware, the GSoC has two appraisal periods where mentors (in my case Mario and Susmit) grade the students’ work. I passed both of these, only after which I was paid.

I resent the idea that’s been floating: my contribution was only driven by money. This is not in line with “being excellent to each otherâ€.

I’ve read and re-read, revised and re-revised this post to get rid of anything that might offend anyone. I’ve taken no names, pointed no fingers. Please do not deduce anything of the sort from the post. I only want the air around me cleared up.


The birth story of Athens Hackerspace

hsgr

[you can read this story in greek, published on linux inside magazine: pdf]

A few months ago Athens Hackerspace (HSGR) opened its doors for the Open-Source, Open-Hardware, Open-Content Communities. Hackerspace is not a new term, but it’s not many years ago that become a standard way of these Open communities to create a physical meeting space. Just check the official hackerspace site. You’ll see many spaces across Europe and USA.

The first seed for HSGR planted at Zurich about a year ago. We were there for a few days with Ebal and Pierros for an Open-Source Conference. We were standing in the middle of the central train station and we had to split in 15 minutes since we had different flights to catch up. These 15 minutes were some of the most creative minutes of my life. I can’t even recall how the conversation started, but ended with the conclusion that we don’t want just to work on our projects isolated on our desks. We constantly share ideas on the things we work, why not do this more often and in personal? Why not create a space especially for this process? For people to gather and work, people who having already join the Open Culture, are willing to share their work, share their source code, exchange ideas.

The first step was to organize some events (we called them hackfests), mostly because we wanted to find out if more people shared the same dream. There was always a chance we were three lunatics. Fortunately more lunatics happened to be out there. While waiting at Zurich Airport lounge, about an hour later from the initial brainstorming conversation, I registered the hackfest.gr domain and published a website. Later the same night, Pierros was doing pretty much the same with hackerspace.gr domain name, while Ebal had gathered together a document full of ideas and todo things for both the events and the space. In less than 24h we have launched what we were dreaming for many years and happen to discuss at a train station between a weiss bier and a curry wurst.

One month later the first hackfest took place with 30 people participating. People showed so much interest on the idea of a physical space, that five joyful hackfests later we started searching for a place to host our hackerspace.

Today HSGR, after so much effort by so many people, is a place full of energy. A 120sq.m. place dedicated to creative hacking. 22 members currently, who operate the space on a daily basis and financially support it. Many events have already been hosted on space and projects have been incubated during these few months.

Athens Hackerspace is open (almost 24/7) for all Open communities, for every each one of us, to fill it with ideas and projects. It may be too soon to tell, but HSGR could be the most important thing and the most important asset for the Greek Open-Source community.

UPDATE: See the video

flattr this!

./sugar-jhbuild update: 'BundleModule' has no attribute 'parse_from_xml' [solved]
I was trying to build sugar on my fedora 16 (64 bit) box as instructed here [1]. git clone was successful but ./sugar-jhbuild update failed although I have all the dependencies installed. Following is the strange python error I got,

./sugar-jhbuild update
Cloning upstream jhbuild
Cloning into jhbuild...
remote: Counting objects: 30895, done.
remote: Compressing objects: 100% (8597/8597), done.
remote: Total 30895 (delta 23961), reused 28682 (delta 22191)
Receiving objects: 100% (30895/30895), 6.00 MiB | 118 KiB/s, done.
Resolving deltas: 100% (23961/23961), done.
Warning: unknown distro version, automatic fallback to rawhide.
Traceback (most recent call last):
 File "./sugar-jhbuild", line 62, in <module>
   sys.exit(main.main(base_dir, sys.argv[1:]))
 File "/home/kalpa/sugar-devel/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>sugar-jhbuild/sjhbuild/main.<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>py", line
111, in main
   rc = jhbuild.commands.run(command, config, args, help=lambda:
jhbuild.main.print_help(<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>parser))
 File "/home/kalpa/.local/lib/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>python2.7/site-packages/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>jhbuild/commands/__init__.py",
line 123, in run
   return cmd.execute(config, args, help)
 File "/home/kalpa/.local/lib/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>python2.7/site-packages/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>jhbuild/commands/__init__.py",
line 52, in execute
   return self.run(config, options, args, help)
 File "/home/kalpa/.local/lib/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>python2.7/site-packages/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>jhbuild/commands/base.py",
line 63, in run
   module_set = jhbuild.moduleset.load(config)
 File "/home/kalpa/.local/lib/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>python2.7/site-packages/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>jhbuild/moduleset.py",
line 316, in load
   ms.modules.update(_parse_<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>module_set(config, uri).modules)
 File "/home/kalpa/.local/lib/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>python2.7/site-packages/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>jhbuild/moduleset.py",
line 412, in _parse_module_set
   inc_moduleset = _parse_module_set(config, inc_uri)
 File "/home/kalpa/.local/lib/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>python2.7/site-packages/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>jhbuild/moduleset.py",
line 427, in _parse_module_set
   repositories, default_repo)
 File "/home/kalpa/.local/lib/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>python2.7/site-packages/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>jhbuild/modtypes/__init__.py",
line 58, in parse_xml_node
   return parser(node, config, uri, repositories, default_repo)
 File "/home/kalpa/sugar-devel/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>sugar-jhbuild/sjhbuild/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>bundlemodule.py",
line 50, in parse_bundle
   instance = BundleModule.parse_from_xml(<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-size: 13px;"></wbr>node, config, uri,
repositories, default_repo)
AttributeError: type object 'BundleModule' has no attribute 'parse_from_xml'

It took me a couple of days to figure the issue. It all went fine after I removed /home/kalpa/.local/lib/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: 'Courier New', Courier, monospace;"></wbr>python2.7/site-packages/<wbr style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: 'Courier New', Courier, monospace;"></wbr>jhbuild Then all was fine working :-)


In ./sugar-jubuild depscheck there is an warning


Missing packages:
gnome-python2-evince


It can be either ignored or install through
yum install gnome-python2-desktop

[1] http://wiki.sugarlabs.org/go/Development_Team/Jhbuild
Aprendamos Lógica de Programación con PSeInt
Mi padre en sus momentos libres siempre investiga sobre herramientas o aplicaciones útiles que pueda implementar en las clases que imparte en la universidad.  En esta ocasión, una de esas aplicaciones me pareció bastante interesante e innovadora.  Me llamó mucho la atención.  Es una herramienta para aprender lógica de programación.

La lógica de programación siempre ha sido un problema para los programadores novatos.  Aquí entra el clásico concepto (el cual no estoy muy de acuerdo): "La lógica no se hace, se nace".  Considero que existen personas que nacen con ella y otras que la desarrollan (inclusive esas que nacen con ella la desarrollan mucho más).

Es ahí donde entra esta aplicación, llamada PSeInt.  Es una herramienta que utiliza pseudocódigo para aprender lógica de programación, dirigida a programadores inexpertos. Este pseudocódigo puede ser convertido en un diagrama de flujo o bien puede ser ejecutado o depurado como si fuese una aplicación normal.

PSeInt es más que un proyecto.  Representa el esfuerzo de un grupo de estudiantes, profesores y colaboradores de la Universidad Nacional del Litoral (Argentina).  Pienso que proyectos como este deben ser impulsados en nuestros países para poder así mejorar la educación con herramientas que utilicen las últimas tecnologías y que estén disponibles para todos los que la necesiten.

Entre las características que tiene que me gustan son:
Multiplataforma. Utiliza un lenguaje sencillo. Dispone de ayuda y ejemplos. Te permite la ejecución y depuración depurar el código. Exportación de tu pseudocódigo a diagrama de flujo. Actualizaciones consistentes.
Las siguientes imágenes son pantallazos que yo tomé de la aplicación:

Imagen 1.  Interfaz principal de la aplicación.

Imagen 2.  Diagrama de flujo exportado por la aplicación.

[image]
Imagen 3.  Ejecución de un aplicación escrita en PSeInt.

Referencias:
Sitio Web Oficial - http://pseint.sourceforge.net/
IBus new Control+Space window


The ibus is not available in upstream yet but we would need the new ibus for Fedora 17. It enhances:Recently I updated ibus to 1.4.99.20120203-3 in Fedora 17 or later.

Performance of Control+Space. New Control+Space GUI window. IBus indicator can work without ibus-daemon on gnome-shell to handle XKB only.

Previously ibus-daemon handles the trigger key, Control+Space, and some of the performance problems were happened when input method engines are switched. Now the ibus status icon on panel handles Control+Space and I hope the performance issue was fixed.

Previously the trigger key switches a previous ibus engine and next engine. Now the trigger key behaves to switch multiple engines likes Alt+Tab. If you use Control+Shift+Space, the reverse switching is called. The following is the new window with ibus GTK:
IBus Switcher Window with ibus-ui-gtk3
The following is the new window with ibus-gnome3 on gnome-shell:
IBus Switcher Window with ibus-gnome3 on gnome-shell
IBus menu with ibus-gnome3 on gnome-shell
IBus lookup window with ibus-gnome3 on gnome-shell

Requirements:

# yum install ibus ibus-gnome3 gnome-shell gjs
# rpm -q ibus gnome-shell gjs
ibus-1.4.99.20120203-3.fc17.x86_64
gnome-shell-3.3.5-1.fc17.x86_64
gjs-1.31.10-1.fc17.x86_64

Currently we use the devel branch with ibus and ibus-gjs git and when the upstream is updated, I will move the devel branch to master.


February 15, 2012

Using the openstack-compute rubygem with HP Cloud Services

Using the openstack-compute rubygem with HP Cloud Services

So the folks at HP are running a private beta of their HP Cloud Services. They were kind enough to give me access to their beta program and it was perfect timing as I’m trying to update the Deltacloud Openstack driver to v1.1 of the Openstack API.

I’m using the openstack-compute rubygem to talk to the HP cloud. I had some issues getting it all to work, mainly because I’m new to the Openstack API and also because I was trying to authenticate with the new (?) v2.0 Keystone service.


1. About the openstack-compute rubygem:

Supports both v1.0 and v2.0 authentication. This is distinguished by the URL of the identity service:

(using v1.1.6 this is in /lib/openstack/compute/authentication.rb)
if conn.auth_path =~ /.*v2.0\/?$/
  AuthV20.new(conn)
else
  AuthV10.new(conn)
end

For v2.0 authentication, it expects ‘username’, ‘password’ and ‘tenantName’. It is important to note that this is tenantName and not tenantId. The ‘username’ and ‘password’ are actually the credentials that you use to login to https://manage.hpcloud.com/login.

Generally, keystone (i.e. v2.0) Identity service allows you to authenticate in a number of ways… using your API access key/private keys, OR username/password, AND your tenantId OR tenantName. For now though and since I want to use the openstack-compute gem I have to use username, password, tenantName. Right.


2. About the hp cloud credentials.

Once logged into the HP Cloud web console you will find credentials under ‘Account’. You need to use the ‘Tenant Name’ and the URL of the ‘Identity’ service under ‘Service Endpoints’. They look something like:

Service Endpoints

  Tenant ID    98765432109876
  Tenant Name  you@domain.com-default-tenant

  Identity
    https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/


3. Getting it all to work.

    [marios@name deltacloud]$ irb -rubygems

    irb(main):001:0> require 'openstack/compute'

    => true

    irb(main):002:0> os = OpenStack::Compute::Connection.new(:username => 
    "your_user_name", :api_key =>    "your_password", 
    :auth_url => "https://region-a.geo-1.identity.hpcloudsvc.com:35357v2.0/", 
    :authtenant=>"you@domain.com-default-tenant")

    => #<OpenStack::Compute::Connection:0xb7408ec4 @svrmgmtpath="/v1.1/98765432109876", 
    @authok=true, @region=nil, @authtoken="HPAuth_3f3sd1a14e4b2f8f253735d1", 
    @auth_scheme="https", @auth_url="https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/",     
    @svrmgmtscheme="https", @proxy_host=nil, @service_name="compute", 
    @auth_port=35357, @authuser="foo@bar.com", @svrmgmtport=443,
    @retry_auth=nil, @authtenant="you@domain.com-default-tenant", 
    @auth_host="region-a.geo-1.identity.hpcloudsvc.com", 
    @authkey="password", @http={}, @is_debug=nil,
    @svrmgmthost="az-2.region-a.geo-1.compute.hpcloudsvc.com", @proxy_port=nil, 
    @auth_path="/v2.0/">

4. Doing it with cURL:

Using v1.0 authentication:

  curl -iv -H "X-Auth-User: your_username" -H "X-Auth-Key: your_password" 
  "https://region-a.geo-1.identity.hpcloudsvc.com:35357/v1.0/"

Note that the same credentials are used here, i.e. username and password that you use to login to https://manage.hpcloud.com/login.

Using v2.0 authentication:

A main difference in v2.0 is that we POST our credentials to the Identity service, rather than using HTTP headers:

  curl -ivX POST -H "Content-Type: application/json" https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/tokens
  -d '{"auth":{"passwordCredentials":{"username":"your_username", "password":"your_password"},
  "tenantId":"yourtenantId"}}'

Note that here I specified the tenantId, but you can just as easily use “tenantNameâ€:â€yourtenantNAME†in the curl POST data. Since we’re using cURL, we can also use the other credentials if we like, rather than username and password… i.e. the AccessKey and SecretKey (ala EC2). However to use this the Identity service expects slightly different data:

  curl -ivX POST -H "Content-Type: application/json" https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/tokens 
  -d '{"auth":{"apiAccessKeyCredentials":{"accessKey":"AW313FDNF3192W6VBW9X",
  "secretKey":"JKL:79823jlkjlkJKLLKJfdFSFSD"}, "tenantName":"you@domain.com-default-tenant"}}'

i.e. apiAccessKeyCredentials, accessKey and secretKey. You can also use tenantId instead if you prefer.

Now that I’ve got a working Openstack cloud to play with, all I have to do it write the driver …

fedora-freemedia-tool version 0.2alpha

I’ve managed to get most of the functionality coded up. Here’s what ffmtool -h looks like now (on my system):

[ankur@ankur ~]$ ffmtool -h
[+] Parsing available options from config file: /home/ankur/.config/fedora-freemedia-tool/config.cfg
Usage: ffmt [Options] [args]...
A tool to assist Fedora Freemedia contributors.
Without options, it prints pending envelopes to the current directory using default values of input and database files.

Options:
  -h [ --help ]                         Print this usage message.
  -c [ --config-file ] [=arg(=/home/ankur/.config/fedora-freemedia-tool/config.cfg)]
                                        Configuration file

  -d [ --database ] [=arg(=/home/ankur/.local/share/fedora-freemedia-tool/freemedia-database.db)]
                                        Complete output file path

  -x [ --fas-username ] arg             FAS Username. Password will be asked if
                                        required.
                                        No command line option is provided to
                                        enter password to avoid entering of
                                        password in plaintext on the terminal.
                                        Use with -u

  -i [ --import ] [=arg(=/home/ankur/.local/share/fedora-freemedia-tool/report.csv)]
                                        Import data
                                        Optional argument: Complete input file
                                        path

  -r [ --resolve ] arg                  Change status of provided ticket
                                        numbers to RESOLVED
                                        (default: 0 meaning all new tickets)

  -e [ --reset ] arg                    Change status of provided ticket
                                        numbers to PENDING
                                        (default: 0 meaning all fixed tickets)

  -A [ --assign-to-lc ] arg             Assign these tickets to a Local Contact
                                        (default: 0 meaning all)

  -f [ --force ] arg                    Force import even if the ticket exists
                                        in database

  -a [ --add-new ] arg                  Manually add a new entry: unimplemented

  -m [ --modify ] arg                   Modify the address in a ticket entry.
                                        Generally required when the address is
                                        malformed and the splitter can't handle
                                        it.
                                        arg: Ticket number

  -o [ --output-dir ] [=arg(=./)]       Directory to put the printed envelopes

  -P [ --print-ticket-info ] arg        Print ticket info for any one ticket
                                        number

  -p [ --print ] arg                    List of ticket numbers to print
                                        envelopes for
                                        (default: 0 meaning all new tickets)

  -l [ --list ] [=arg(=all)]            List records in database
                                        all,pending,complete,local-contact

  -L [ --list-long ] [=arg(=all)]       List records with description
                                        all,pending,complete,local-contact

  -u [ --update ] arg                   Download latest report from the trac
                                        and update the database
                                        This automatically stores the
                                        information in default database
                                        directory

  -v [ --v-level ] [=arg(=0)]           Debug level: 1,2,3

  -n [ --sender-name ] arg              Senders name

  -s [ --sender-add ] arg               Senders address
                                        Use % as a line limiter

  -t [ --template ] [=arg(=/usr/share/fedora-freemedia-tool/Freemedia-mailer.png)]
                                        Location of envelope template

  -V [ --version ] arg                  Package information: version etc.

[ankur@ankur ~]$

Not bad eh? It’s probably going to have quite a few bugs yet. I haven’t managed to test it out thouroughly yet. You can help ;)

Installation:

If you’re on an x86_64, you’re in luck! Use this rpm.

I haven’t been able to build an rpm for i386 systems yet because of this bug in curlpp.

On a fedora system, you’ll need the following packages:

 yum install sqlite-devel ImageMagick-c++-devel curlpp-devel boost-devel

Download the source here

Untar it anywhere, and then, the usual autotool steps

./configure --datadir=/usr/share
#datadir needs to be defined
#this is where the envelope template is kept

make
make install # as root

That’s all!

Example usage:

[ankur@ankur SPECS]$ ffmtool -u
[+] Parsing available options from config file: /home/ankur/.config/fedora-freemedia-tool/config.cfg
[+] /home/ankur/.config/fedora-freemedia-tool/ already exists. Continuing..
[+] /home/ankur/.local/share/fedora-freemedia-tool/ already exists. Continuing..
Username: ankursinha
Password:
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0
100  5815  100  5815    0     0   3152      0  0:00:01  0:00:01 --:--:--  6889
[+] Datafile set to: /home/ankur/.local/share/fedora-freemedia-tool/report.csv
[+] Databasefile set to: /home/ankur/.local/share/fedora-freemedia-tool/freemedia-database.db
[+] Database already exists. Continuing..
[X] File format should be:
1.1st line is a header
2.One record per line (including address)
3.Please ensure description consists only of address (personal message from requestor if any should be removed)
4.Each new address line begins with a ",[[BR]]"
[X] Example:
[X] Number of lines in file without header is 27 while number of records found is 19
[X] The difference suggests that some records are malformed. Please correct the records and use the -i option to import to database

Here, the file we downloaded was “malformedâ€, because the ticket submitter didn’t punctuate his address properly (or added a comment). Once you’ve gotten rid of the extra stuff from the data file:

[ankur@ankur fedora-freemedia-tool]$ ffmtool -i
[+] Parsing available options from config file: /home/ankur/.config/fedora-freemedia-tool/config.cfg
[+] /home/ankur/.config/fedora-freemedia-tool/ already exists. Continuing..
[+] /home/ankur/.local/share/fedora-freemedia-tool/ already exists. Continuing..
[+] Datafile set to: /home/ankur/.local/share/fedora-freemedia-tool/report.csv
[+] Databasefile set to: /home/ankur/.local/share/fedora-freemedia-tool/freemedia-database.db
[+] Database already exists. Continuing..
[+] File seems well formatted. Proceeding to import.
Entered worker import function..
[+] Ticket 7353 already exists in table, skipping.
[+] Ticket 7710 already exists in table, skipping.
[+] Ticket 7816 already exists in table, skipping.
[+] Ticket 7823 already exists in table, skipping.
[+] Ticket 7835 already exists in table, skipping.
[+] Ticket 7842 already exists in table, skipping.
[+] Ticket 7855 already exists in table, skipping.
[+] Ticket 7863 already exists in table, skipping.
[+] Ticket 7896 already exists in table, skipping.
[+] Ticket 7907 already exists in table, skipping.
[+] Ticket 7916 already exists in table, skipping.
[+] Ticket 7938 already exists in table, skipping.
[+] Ticket 7945 already exists in table, skipping.
[+] Ticket 7948 already exists in table, skipping.
[+] Ticket 7949 imported to the database.
[+] 15 records successfully imported into database.
[ankur@ankur fedora-freemedia-tool]$

You can use the various options to look/modify ticket entries in the database. All this stuff will be on your local copy only. I don’t see a reason to update the trac info yet. The best part is, you can print your fedora freemedia envelopes using this tool:

[ankur@ankur fedora-freemedia-tool]$ ffmtool -l
[+] Parsing available options from config file: /home/ankur/.config/fedora-freemedia-tool/config.cfg
[+] /home/ankur/.config/fedora-freemedia-tool/ already exists. Continuing..
[+] /home/ankur/.local/share/fedora-freemedia-tool/ already exists. Continuing..
All tickets in data base (ticket numbers only): 19
#7353
#7710
#7816
#7823
#7835
#7842
#7855
#7863
#7884
#7895
#7896
#7907
#7916
#7921
#7922
#7938
#7945
#7948
#7949
[ankur@ankur fedora-freemedia-tool]$ ffmtool -p 7949 7948 7945
[+] Parsing available options from config file: /home/ankur/.config/fedora-freemedia-tool/config.cfg
[+] /home/ankur/.config/fedora-freemedia-tool/ already exists. Continuing..
[+] /home/ankur/.local/share/fedora-freemedia-tool/ already exists. Continuing..
[+] Printed envelope for ticket number 7949 to ./freemediaEnvelope7949.png.
[+] Printed envelope for ticket number 7948 to ./freemediaEnvelope7948.png.
[+] Printed envelope for ticket number 7945 to ./freemediaEnvelope7945.png.
[+] Datafile set to: /home/ankur/.local/share/fedora-freemedia-tool/report.csv
[+] Databasefile set to: /home/ankur/.local/share/fedora-freemedia-tool/freemedia-database.db
[+] Database already exists. Continuing..
Marked ticket #7949
Marked ticket #7948
Marked ticket #7945
[ankur@ankur fedora-freemedia-tool]$ ls *.png
freemediaEnvelope7945.png  freemediaEnvelope7948.png  freemediaEnvelope7949.png
[ankur@ankur fedora-freemedia-tool]$

This is what the envelope would look like:
example generated envelope

You can print all the envelopes at one go, or print them one at a time.

Since I’m using boost::program_options to take arguments, all the arguments can be specified in the config file. I’ve also put up an example config file that you can refer.

As always, feed back is welcome. You’re welcome to review my code and point out improvements! This was supposed to be a practice project after all. You’re most welcome to submit patches too! The git repository is hosted on gitorious.

Phew! Long post, probably the longest I’ve ever written. Cheers!


nginx, tornado and http_load

I don’t have much experience with any of these three, this is me just fiddling with them, not trying to run any kind of official test.

I was intregued by this post:  http://www.alrond.com/en/2007/jan/25/performance-test-of-6-leading-frameworks/

It’s a little old so I figured I’d glean a few things from it and recreate some of the tests, first one I came up with was comparing bench marks of nginx to tornado. I eventually want to compare Django, Rails, Flask and Sinatra. This is an initial attempt to get headed in that direction.

This test was run on a Fedora 16 x86_64 RHEV VM.
Given 4G of RAM and 4 sockets across 4 3Ghz i7 cores

Tornado is running the Hello World code on  http://www.tornadoweb.org/
Nginx is running with the default install settings.

# rpm -q python-tornado nginx
python-tornado-2.1.1-1.fc16.noarch
nginx-1.0.10-1.fc16.x86_64

pulled http_load from: http://acme.com/software/http_load/http_load-12mar2006.tar.gz

Requests to Tornado are calling http://localhost:8888/ and to Nginx are calling http://localhost/

I started with 1 second tests alternating rate and parallel

# ./http_load -rate 1000 -seconds 10 tornado
9999 fetches, 2 max parallel, 119988 bytes, in 10 seconds
12 mean bytes/connection
999.899 fetches/sec, 11998.8 bytes/sec
msecs/connect: 0.089374 mean, 0.263 max, 0.082 min
msecs/first-response: 0.355484 mean, 0.828 max, 0.268 min
HTTP response codes:
code 200 — 9999
# ./http_load -parallel 1000 -seconds 10 tornado
33616 fetches, 1000 max parallel, 403392 bytes, in 10.0002 seconds
12 mean bytes/connection
3361.53 fetches/sec, 40338.4 bytes/sec
msecs/connect: 161.429 mean, 7019.76 max, 0.067 min
msecs/first-response: 44.4849 mean, 2268.71 max, 2.328 min
HTTP response codes:
code 200 — 33616
# ./http_load -rate 1000 -seconds 10 nginx
9999 fetches, 22 max parallel, 3.69963e+07 bytes, in 10 seconds
3700 mean bytes/connection
999.899 fetches/sec, 3.69963e+06 bytes/sec

msecs/first-response: 0.128703 mean, 21.869 max, 0.05 min
HTTP response codes:
code 200 — 9999
# ./http_load -parallel 1000 -seconds 10 nginx
94970 fetches, 70 max parallel, 3.51389e+08 bytes, in 10.0001 seconds
3700 mean bytes/connection
9496.95 fetches/sec, 3.51387e+07 bytes/sec
msecs/connect: 0.420914 mean, 3.828 max, 0.061 min
msecs/first-response: 1.05835 mean, 7.353 max, 0.683 min
HTTP response codes:
code 200 — 94970 msecs/connect: 0.0977219 mean, 0.198 max, 0.082 min

Next I added more time

# ./http_load -rate 1000 -seconds 30 tornado
http://localhost:8888/: Cannot assign requested address (69 Times)
28967 fetches, 291 max parallel, 347604 bytes, in 30.0007 seconds
12 mean bytes/connection
965.545 fetches/sec, 11586.5 bytes/sec
msecs/connect: 2.30785 mean, 1001.45 max, 0.084 min
msecs/first-response: 1.37267 mean, 153.792 max, 0.25 min
HTTP response codes:
code 200 — 28967
# ./http_load -parallel 1000 -seconds 30 tornado
102504 fetches, 1000 max parallel, 1.23005e+06 bytes, in 30 seconds
12 mean bytes/connection
3416.8 fetches/sec, 41001.6 bytes/sec
msecs/connect: 225.68 mean, 15091.6 max, 0.064 min
msecs/first-response: 44.3875 mean, 4201.99 max, 2.804 min
HTTP response codes:
code 200 — 102504
# ./http_load -rate 1000 -seconds 30 nginx
29999 fetches, 18 max parallel, 1.10996e+08 bytes, in 30 seconds
3700 mean bytes/connection
999.966 fetches/sec, 3.69988e+06 bytes/sec
msecs/connect: 0.111561 mean, 0.295 max, 0.083 min
msecs/first-response: 0.108637 mean, 17.916 max, 0.049 min
HTTP response codes:
code 200 — 29999
# ./http_load -parallel 1000 -seconds 30 nginx
302900 fetches, 168 max parallel, 1.12073e+09 bytes, in 30 seconds
3700 mean bytes/connection
10096.7 fetches/sec, 3.73577e+07 bytes/sec
msecs/connect: 0.639248 mean, 1004.55 max, 0.061 min
msecs/first-response: 1.01887 mean, 204.58 max, 0.672 min
HTTP response codes:
code 200 — 302900

At this point it looks like Nginx is a bit faster in response, but both can handle an similar rate of requests. When firing parallel requests it looks like nginx is handling apx 3 time the number of requests. I you could specify workers in the conf file, but it was configured with 1 worker by default.

Out of the box http_load seems to indicate nginx being a little more robust container, I’d be interested to see some use cases that turn the tables on this fairly naive evaluation.

I hope to post more tests as I get time to build them.

Useful Tips for DevConf Attendants #2

I’ve got another load of information for those who are coming to Developer Conference 2012 in Brno:

It’s just one day away and some people are already here. We’ve improved travel information for those who are on their way to Brno. Mainly information about traveling within Brno. Now, you can find out how to get to Avanti Hotel, where most attendants are accommodated, how to get from the hotel to Red Hat Office (especially useful for those that attend GNOME hackfests and KDE SIG FAD).

There is one universal advice: if you need to get oriented in Brno, use our map.devconf.cz. It’s based on Google Maps and Google Maps work great with Brno public transport system. All stops and stations are shown there. When you click on one of them, all lines that go through the stop/station are shown. And best of all: you can use Google Maps to find how to get from one location to another in Brno using public transport. It calculates you the best combination of  public transport and walking!

If you’re coming to Brno for more days (typically those who will take part in GNOME hackfests), you might want to buy a 5-day public transport ticket which costs CZK 250. There are several places where you can buy it, but the best one for you is probably the main railway station, where you can buy it at any counter (look for the international ones because they more likely speak English).

BTW our conference app has made it to Android Market. Check it out! Our conference schedule is also available in Giggity app.

There has been heavy snowing in the country in the last hours and it should continue on some places. If you’re coming by bus or car, there might be some problems (delays, traffic jams etc.).

See you on Friday! ;)


Dear metabrain: help me cram-study engineering for my hearing aid consultation

All right, folks – it’s studyin’ time.

As many of you know, I’m deaf. Or more specifically, I’ve had a bilateral high-frequency severe-to-profound sensorineural hearing loss since age 2. Hearing aids have historically been awful at helping out with this sort of loss, so I had them as a child but never wore them (because they didn’t, y’know, help). I speak, lipread, and have mainstreamed my whole life because that’s how my (highly geeky) young life happened to turn out, but have tremendous respect for Deaf culture and would never impose technology or coping mechanisms on others that they didn’t want. I’m also an open source hacker, electrical and computer engineer, and all-around gigantic geek, and when I found out (very) recent technology developments in the hearing-aid department have been aimed directly at my type of loss, I immediately asked where I could sign up as a guinea pig.

And so next week I’m meeting with an audiologist and a hearing aids specialist who are also researchers at Purdue, and we are going to have a big geek-fest conversation about technology options, where they’re at, how they work, the state of the field, etc etc… and what might work best for me.

I want to preload my brain with as much useful information before this conversation as possible. As readers of this blog may have noticed, I’m trying my best to keep a record of what this sort of journey looks like as a patient and a curious hacker — it may be a useful story to have out there later on.

So. What should I know? What should I be familiar with? What questions should I ask? (What are you curious about?) Go!

A few things to keep in mind:

I’m at a large research university with an excellent audiology department, live in the library and love librarians, and can probably get my hands on any papers and books (and websites, but that goes without saying) you point me to. I’m an engineer. Technical things don’t scare me – I love them. Advanced math, signal processing, geekery about chips and parallel processing and embedded packaging – yes. Throw them at me. I am studying education, and while I’m not an expert on developmental psychology or cognition or neuroscience or any of that stuff, I’ve had more exposure to it than your average layperson, and am actively pursuing learning more. I am fully aware that part of using hearing augmentation tech includes reprogramming your brain to make sense of the new inputs it’s getting (“aural rehabilitation†is the term) and want to learn about that too. However, my biology/physiology/medical-literature/audiology background is not as great; I took a single intro-to-Bio class as an undergrad, and my knowledge of the way the auditory system operates is exactly equivalent to the contents of Wikipedia articles on it. I am a researcher, so medical research papers don’t look wholly unfamiliar – but they are very much not in my domain (engineering education). This is an intense side interest. My graduate studies and work take up the bulk of my days; I love tackling tough things with intensity, but I am time-and-resource limited in what I can do with this. So “read this entire journal series, start attending all these conferences, buy this $50,000 development kit, and prepare to do research in this field for the next 50 years†is unrealistic, but I am happy to plunge into specific difficult papers, talk with individuals, experiment with technical platforms that don’t require a lot of time or money (grad student, remember!) startup cost, and so forth.

Thank you!

The portreserve problem: is systemd the solution?

Quite a while ago I wrote portreserve, a utility to prevent ports getting stolen at boot time by portmap. This would happen with CUPS, for example: portmap starts first (to allow for NFS-mounted filesystems), and calls bindresvport(). If the privileged (i.e. in the range 512-1023) port it allocates happens to be 631, when CUPS starts and tries to bind that port it fails. This didn’t just affect CUPS, but any service with a well known port in the privileged range.

The solution we’ve been using for a while is portreserve, and it works by having each privileged service (e.g. cupsd, spamd) provide a file in /etc/portreserve saying which ports it uses. At boot portreserve starts before portmap and binds to those ports, to prevent portmap (or anything else) getting them. When each privileged service starts, it calls portrelease first in order to tell portreserve to let go of its ports.

This works well enough from a simplistic point of view, but doesn’t go far enough. There is a race condition when a privileged service starts: between calling portrelease and the service actually binding to the now-freed port, it could potentially be grabbed by some other service. Also portreserve is a once-per-boot thing: if you stop or restart a protected service after boot there is no protection for its ports.

A really race-proof solution appears to now exist in systemd. It provides port-based socket activation, meaning that it can allocate ports that will later be required during the boot, stopping portmap from getting them. When the relevant service starts, systemd hands the socket file descriptor directly to the service, with no race condition. It even retains the port when the service stops.

What’s the problem? Services don’t always want to be activated on demand. In the case of CUPS, there are two ports: TCP 631 (for IPP) and UDP 631 (for CUPS Browsing). The UDP port is simple for listening out for periodic announcements of network shared CUPS queues. When a packet arrives, there is no need to start CUPS — but the port needs to be protected from portmap, or else CUPS Browsing will mysteriously fail from time to time.

Proposal: separate activation from port reservation

My proposal to fix this is for systemd to separate this socket activation feature from the more fundamental one of reserving ports for services. One way of doing this would be to add ListenStreamNoActivate and ListenDatagramNoActivate configuration directives.

FOSS Session at Deyata Kirula, a success!
Free and Open Source Software awareness lecture series organized by ICTA and Hanthana Linux community in line with Deyata Kirula 2012 education and trade exhibition was conducted ICTA stall on 7th and 8th of February.

A gift from the ICTA 

A lot of people participated at this event and the feedback was highly positive.

Participants consisted of students, teachers, parents and employees from the government and private sectors.

During the session, teachers got the chance to do a short lessons to their students using the education software in Hanthana Linux. At that point teachers were successful in getting used to the software during a short period of time of like 2 minutes and conducting the lesson to their students.

 
A school teacher (who visit the ICTA stall) conducting a small session on chemistry using Kalzium application to the audience

ICTA presented the students with prizes like shool bags and pens and refreshments were offered . Further, ICTA distrubuted the Hanthana Linux 15.5 LiveDVD free of charge.

Although it was scheduled to conduct only three sessions a day, a new session had to be started just after a session driven by the enthusiasm of the students and parents on Free and Open Source Software awareness lecture series.

Two winner of the TuxMath game (a mathematical game)

Information Technology Branch of Ministry of Education also in their stall introduced Free and Open Source Software for the second time throughout the exhibition.

Hanthana community pays the gratitude to Mr. Bandula Ranathunga who supported at the very first step to join Deyata Kirula exhibition, Ministry of Information Technology, team from ICTA, Mr. Athula Pushpakumara, Mr. Wasantha Deshapriya, Mr. Mahesh Kuragama, Mr. Priyanka without whom this won't be a reality and finally to Mr. Sujith Jayasooriya who coordinated and supported Hanthana community.

Discussing.. what is the answer?

No matter its day or night.. all the FOSS sessions flooded by the parents, kids, etc
yum install rhevm-webadmin-portal

For those of you running a rhev 3.0 cluster. I just learned of the webadmin the other day. I use my cluster for testing so I don’t have very complicated needs. Turns out you can do most of the CRUD operations on VMs via the webadmin, no IE nessesary.

1. yum install rhevm-webadmin-portal
2. service jbossas restart
3. https://rhevm.example.com:8443/webadmin

To get a console, install spice-client and spice-xpi too. This will enable the console button in the webui to open a spice terminal for you.


You are viewing a mobilized version of this site...
View original page here

Mobilized by Mowser Mowser