Home Home > Hackweek
Sign up | Login

Deprecation notice: openSUSE Lizards user blog platform is deprecated, and will remain read only for the time being. Learn more...

Archive for the ‘Hackweek’ Category

Share your Kraft

January 25th, 2011 by

Its Hackweek number six at SUSE as you might have heard. Hackweek is great as employees are encouraged to work on a free software project they want. I work on my project Kraft and really appreciate the time that I can spend on it.

What I intend to do can be summarized with Share your Kraft. Up to now, Kraft is working fine for a single user. But what if a team wants to use Kraft and share number cycles (which are base for the document numbering like invoice number), documents and template catalogs? Well, as long as they share the same database, it might work (I didn’t test deeply) but if they happen to be on different locations it becomes difficult. I try to make that possible.

My development target for Kraft is simplicity. For the user of course, but also for the setup. The server to share data, which is obviously needed, must work on a cheap hosting offer, and it must work with a weak internet line. So a database connect via internet is not possible.

I decided to investigate in ownCloud and enhance it with a plug-in called KitoC. ownCloud is a project started by Frank Karlitschek and implements a handy but scalable WebDAV Server beside more. Seems to fit my needs perfectly. Yesterday I implemented the number server function in KitoC after good conversation with Cornelius at breakfast in the office. Not very much achieved yet, but had to learn a bit of ownCloud first. I keep you posted.

LiMobile – Linux SDK for Mobile’s APPLE.

November 7th, 2010 by

LiMobile is a Linux distribution (based on openSUSE and created in fantastic SUSE Studio) designed for developing applications for the iPhone and iPad without using Xcode compiler, the system and MacOSX MacBook notebook.

See video below.

Local caching for CIFS network file system – followup

August 5th, 2010 by

Here’s a follow-up to my previous post on Hackweek V: Local caching for CIFS network file system

Since the previous post, I worked on improving the patches that add local caching, fixed a few bugs, addressed review comments from the community and re-posted the patches. I also gave a talk about it at the SUSE Labs Conference 2010 took place at Prague. The slides can be found here: FS-Cache aware CIFS.

This patchset was merged in the upstream Linux kernel yesterday (Yay!) which means this feature would be available starting from kernel version 2.6.35-rc1.

The primary aim of caching data on the client side is to reduce the network calls to the CIFS Server whenever possible, thereby reducing the server load as well the network load. This will indirectly improve the performance and the scalability of the CIFS Server and will improve the number of clients per Server ratio. This feature could be useful in a number of scenarios:

– Render farms in Entertainment industry – used to distribute textures to individual rendering units
– Read only multimedia workloads
– Accelerate distributed web-servers
– Web server cluster nodes serve content from the cache
– /usr distributed by a network file system – to avoid spamming Servers when there is a power outage
– Caching Server with SSDs reexporting netfs data
– where a persistent cache remains across reboots is useful

However, be warned that local caching may not suitable for all workloads and a few workloads could suffer a slight performance hit (for e.g. read-once type workloads). So, you need to careful consider your workload/scenario before you start using local disk caching.

When I reposted this patchset, I got asked whether I have done any benchmarking and could share the performance numbers. Here are the results from a 100Mb/s network:

Environment
————

I’m using my T60p laptop as the CIFS server (running Samba) and one of my test machines as CIFS client, connected over an ethernet of reported speed 1000 Mb/s. ethtool was used to throttle the speed to 100 Mb/s. The TCP bandwidth as seen by a pair of netcats between the client and the server is about 89.555 Mb/s.

Client has a 2.8 GHz Pentium D CPU with 2GB RAM
Server has a 2.33GHz Core2 CPU (T7600) with 2GB RAM

Test
—–
The benchmark involves pulling a 200 MB file over CIFS to the client using cat to /dev/zero under `time’. The wall clock time reported was recorded.

First, the test was run on the server twice and the second result was recorded (noted as Server below i.e. time taken by the Server when file is loaded on the RAM).
Secondly, the client was rebooted and the test was run with caching disabled (noted as None below).
Next, the client was rebooted, the cache contents (if any) were erased with mkfs.ext3 and test was run again with cachefilesd running (noted as COLD)
Next the client was rebooted, tests were run with caching enabled this time with a populated disk cache (noted as HOT).
Finally, the test was run again without unmounting or rebooting to ensure pagecache remains valid (noted as PGCACHE).

The benchmark was repeated twice:

Cache (state) Run #1 Run#2
============= ======= =======
Server 0.104 s 0.107 s
None 26.042 s 26.576 s
COLD 26.703 s 26.787 s
HOT 5.115 s 5.147 s
PGCACHE 0.091 s 0.092 s

As it can be seen when the disk cache is hot, the performance is roughly 5X times than reading over the network. And, it has to be noted that the Scalability improvement due to reduced network traffic cannot be seen as the test involves only a single client and the Server. The read performance with more number of clients would be more interesting as the cache can positively impact the scalability.

Hackweek V: mkdiststats

June 16th, 2010 by

When Coolo mentioned that he is looking into improving the rebuild time of Factory
I couldn’t resist to try the script he was using myself. It turned
out that the script was extremly slow, it took about 15 minutes for
the calculation on my computer. The script was originally written a
long time ago for the old autobuild with a much lower number of
packages and dependencies to take care of. The ad-hoc method used
for the ‘rebuild simulation’ just didn’t scale well. Hackweek was a
good opportunity to improve the performance and to add some more
options.
(more…)

Hackweek V: osc bash completion

June 15th, 2010 by

During last week , I was working on my Hackweek V project: bash completion for osc. It’s still far from being complete, but IMHO it is usable already, so here we go.

Download

The project is hosted on gitorious.org. To get the sources, use git:

git clone git://gitorious.org/opensuse/osc-bash-completion.git

Installation

You need working and configured osc. I have tested the completion with osc-0.126git, but it should more or less work with older/newer versions too. Naturally, your shell has to be bash (I used bash-4.x). The easiest way how to try the completion is simply to do
~> source osc.shThis will enable the completion for the given shell only – see README for more “persistent” ways how to enable the osc completion.

Features

The script provides support for completing:

  • osc subcommand names (checkout, commit, …)
  • global long osc options (e.g. –quiet, –debug, …)
  • long subcommand options
  • project names
  • package names (in given project)
  • file names (in given project/package)
  • repository names (openSUSE_Factory, …)
  • architectures (i586, x86_64, …)

Some examples:
osc com<tab><tab> => osc commit
osc --ht<tab><tab> => osc --http-debug
osc build --a<tab><tab> => osc build --alternative-project
osc ls Ar<tab><tab> => osc ls Archiving
osc ls Base:System pa<tab><tab> => osc ls Base:System parted
osc cat Base:System parted ba<tab><tab> => osc cat Base:System parted baselibs.conf
osc buildlog openSUSE_<tab><tab> => osc buildlog openSUSE_
openSUSE_Factory openSUSE_11.0 openSUSE_11.1 openSUSE_11.2

osc buildlog openSUSE_Factory x<tab><tab> => osc buildlog openSUSE_Factory x86_64
osc createrequest -a<tab><tab> => osc createrequest -a
add_role delete change_devel set_bugowner submit

osc ? d<tab><tab> => osc ?
delete deleterequest dependson dif

osc meta a<tab><tab> => osc meta attribute
osc my <tab><tab> => osc my
pkg prj rq sr

osc request <tab><tab> => osc request
accept approvenew co decline checkout
list log revoke show wipe

osc getpac for<tab><tab> => osc gepac fortune

At the moment, the script DOES NOT provide support for completing

  • short options
  • arguments for most of the options
  • some complex combinations of arguments

Caching

To avoid long delays and spamming OBS server too much, the script caches several information:

  • list of projects in OBS
  • list of packages in individual projects (only in those that have been accessed by osc)
  • output of “osc repos prj” (dtto)

Please see the README file for more information about how the caching works and how to customize it (to make the completion significantly faster).

Known issues, TODO

  • The script does not work correctly if there is a long option with argument and there is ‘=’ between the option and argument (–long-option=arg). Please use the ‘–long-option arg’ form instead.
  • For the time being, the script does not recognize alternative apiurl (-A|–apiurl) and thus it works only with default (https://api.opensuse.org) api.
  • Sourcing the script removes the colon from COMP_WORDBREAKS variable to make completion of Build Service projects easier. This was known to break e.g. git completion in the past (however, I didn’t notice any issues). In the future, the script should be fixed so that modifying of COMP_WORDBREAKS is not necessary.
  • The script should dynamically create list of osc subcommands and lists of their options by parsing osc help output (or something similar). Now the lists and logic are hardcoded in the script, which will make it maintenance nightmare when osc changes.
  • Completing of “osc {chroot,build}” is not yet implemented.
  • See TODO file

Testing and feedback

The completion script is very new, tested only by me and mvyskocil for a while, so it definitely has a lot of bugs. Before releasing it as a separate package, I’d like to collect some feedback first (and fix the already known problems and TODOs), so, if you are interested, please give it a try and report any bugs, suggestions or patches directly to me (petr.uzel@suse.cz). Also, feel free to ping me on IRC: ptr_uzl @ freenode.net.

I hope at least somebody (except me 🙂 ) will find the completion useful. Thanks and happy completing.

openSUSE Edu: Li-f-e theme for 11.3

June 14th, 2010 by

For openSUSE Edu: Linux for Education based on openSUSE 11.3 we will be going with great new default openSUSE 11.3 theme by Jakub “Jimmac”  Steiner with small addition of our own, here is how it looks.

(more…)

Zippl – a Lightweigth Presentation Tool

June 11th, 2010 by

Recently people played around a lot with a new kind of presentations. The pages in the classical presentation tool sense seem to lie around on a large canvas and while the presentation running, the focus moves over the canvas and stops by interesting points. Zooming allows to go more in detail and other cool graphics effects make it fun to watch these presentations.

This week was the fifth Hackweek at Novell where we can pick an interesting topic and work on it. I am always interested in cool applications and I wanted to investigate a bit on Qts GraphicsView anyway so I decided to go for a proof of concept implementation of a lightweight but cool presentation tool following these concepts.

The tool is called Zippl (for no specific reason). It is implemented in C++ with Qt 4.6. Via a XML file the user can specify so called spots on the Zippl-canvas. During a presentation one after the other canvas is displayed with an animated move from one to the other.

Spots can consist of text in various fonts and sizes, geometric forms and images. Colors and line widths and stuff can be specified for each item. It is amazing what can already be done with these few elements.

But decide yourself by checking the following out, its the first little presentation done with Zippl:

With Qt its again fun to work on this kind of applications and the GraphicsView framework is awesome. If you want to see code, it is in the KDE svn, module playground/office.

What do you think? Is that something to investigate more on? You can give me feedback in openFATE about it if you want and rate it.

Hacking for Freedom

June 7th, 2010 by

Hi developers!

These are first hours of hackweek. A lot of people in Novell and in the community are starting to work on different projects. What can I give for free software in this week? Sure, my favorite project is NetworkManagement.

As you can see, NetworkManagement don’t work well. For example, it can’t see WiFi connection and don’t show wired connetcion. Yes, right now we have one bug with module “networkmanagement”.

This module must be loaded after start NetworkManagement, but this is not happening 🙁

If you check it, you will see:

anaumov@pizza:~/plasma/networkmanagement> qdbus --system org.freedesktop.NetworkManagerUserSettings
Service 'org.freedesktop.NetworkManagerUserSettings' does not exist.

Why it’s happening? Problem is in connection between plasmoid and deamon NM (via DBus).

anaumov@pizza:~/plasma/networkmanagement> qdbus org.kde.kded /kded loadModule networkmanagement
true
anaumov@pizza:~/plasma/networkmanagement> qdbus --system org.freedesktop.NetworkManagerUserSettings
/
/org
/org/freedesktop
/org/freedesktop/NetworkManagerSettings
/org/freedesktop/NetworkManagerSettings/0
/org/freedesktop/NetworkManagerSettings/1
/org/freedesktop/NetworkManagerSettings/2
/org/freedesktop/NetworkManagerSettings/3
/org/freedesktop/NetworkManagerSettings/4
/org/freedesktop/NetworkManagerSettings/5
/org/freedesktop/NetworkManagerSettings/6
/org/freedesktop/NetworkManagerSettings/7
/org/freedesktop/NetworkManagerSettings/8
anaumov@pizza:~/plasma/networkmanagement>

So, now we can see WiFi interface:

And WiFi interface can see WiFi connections:

Good, but this works not automaticly. It’s first what I want to hack on this week.

And what do you want to do on this week? 😉

Novell Hackweek Five

May 28th, 2010 by

Hackweek Five LogoI am really looking forward to the next Hackweek that we have in Novell – it will be in the week from 7-11 of June 2010.
In that week, Novell allows a whole lot of people to spend the full work time (and more 😉 to work on whatever free software they want. That is really a huge thing, because we’re talking about hundrets of engineers.
What everybody is working on is as said not at all prescribed, except that it should benefit the idea of free software. There is a list maintained of ideas which people have for Hackweek Five in order to find somebody joining the team or to pick the idea up at all.
The good thing now is that of course openFATE is used to maintain this list and thus it is open for the openSUSE Community to also add ideas, comment or vote on whats already there. This is of course no guarantee that the idea is going to be picked up but still. So everybody who thinks she has an idea that will inspire someone on Hackweek Five, feel free to add it to openFATE and talk about.
Of course it is also possible and appreciated to work on Hackweek projects also as non Novell employee 🙂
Get in touch – it will be exciting!

Hybrid Live Systems

August 5th, 2009 by

When talking about live systems on USB sticks people reported many problems with bootloaders like grub to boot the stick. Even though this is most often a problem with the stick hardware or the PC BIOS it’s an annoying situation which should have a better solution. There are also many people who wants to use the stick as a data container in combination with a live system to work with

With the ISO hybrid technology and the integration into kiwi there is a way to create such a stick very easily. A hybrid ISO is an iso filesystem which contains a MBR and thus it’s seen as a disk to the PC BIOS. As it’s an ISO the isolinux bootloader is used instead of grub which works better on many systems. Additionally the hybrid ISO can be used as a live system on CD/DVD as well as on a USB stick

What’s required to use this

  • kiwi v3.68 or later
  • syslinux-3.82-2.1 or later

How do I setup a hybrid ISO in kiwi

In order to activate the creation of a hybrid iso in kiwi you only have to add the hybrid=”true” attribute as part of your iso image type in config.xml:


<type boot="isoboot/suse-11.2" flags="clic" hybrid="true">iso

You can use the suse-11.2-JeOS from the kiwi-templates package as example image description for your hybrid testing. The generated .iso file can be dumped via a simple dd call onto the USB stick. The same file also can be used to be burned on a CD/DVD


dd if=LimeJeOS-openSUSE-11.2.i686-1.11.2.iso of=/dev/... bs=32k

After that the stick can be tested. By default all attempts to write data will go into the RAM of the system. As a stick allows storing data persistently you can create a write partition on the stick using fdisk:


fdisk /dev/...

kiwi will prevent using a vfat partition for the operating system. So make sure you create a 0x83 (linux) type partition and not a vfat partition for the write support. If you additionally create a vfat partition you can use it as a container for any kind of data independently from the live system. We choose vfat here to stay compatible with Windows systems.

Known bugs

  • when using the clicfs filesystem (flags=”clic”) the persistently write feature into a single partition will fail because clicfs currently can’t deal with raw block specials as cow device. Will be fixed as soon as possible

Have fun 🙂