linuxcandyclone

468x60 Advertise space

Jan - 31 - 2011

Vestibulum quis diam velit, vitae euismod ipsum

Jan - 31 - 2011

Aliquam vel dolor vitae dui tempor sollicitudin

Jan - 31 - 2011

Nam ullamcorper iaculis erat eget suscipit.

Maecenas at ipsum quis massa rutrum gravida! Ut in varius orci. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Phasellus sed lectus nec risus posuere rhoncus sed et ligula. Sed gravida ornare turpis vel euismod. Phasellus quis tortor non lacus sodales rutrum sit amet non est
Donec elit nulla, pulvinar nec porta sed, hendrerit eget metus. Suspendisse porttitor ligula non felis volutpat pretium? Praesent laoreet nisl a eros ultricies in lacinia


OSIDays 2011 - Asia's Premier Open Source Business Conference



Open Source India (formerly LinuxAsia) started in 2003, with a mission to accelerate the growth of adoption of Open Source in Asia. Till date, the overall mission of Open Source India remains the same. A key attribute of Open Source India is that it tries to bridge the gap between the 'community' and the 'industry'.
While OSI provides a platform for advocacy of principles powering Open Source, majority of its content is focused on topics that are related to the industry.

Thus, the primary target audience of OSI Days is techies. Different tracks are designed to address different segments of techies, such as: software developers, IT implementers, CIOs, and CEOs and CTOs (of IT firms), etc.


However, techies alone are not responsible for all business and policy decisions--and reaching out to those, who do make such decisions, is also a goal that OSI. Again, specialized tracks are designed to address issues this elite audience faces. Thus, one often finds academicians, bureaucrats, government officials, senior decision makers from SMEs and corporate, etc attending Open Source India too.

OSI Days is organized by the 'Forum for Open Source Initiative in India' (FOSII), in association with LINUX For You magazine, and powered by the EFY Group of publications.


This year the focus are on PHP, Database and Managing IT infrastructure thus they have also called it as

PHP Days Nov 20-21
Database Days Nov 21-22, and
IT Infrastructure Days Nov 22

Besides there are session on kernel, web development and Mobile development. Pioneers from the Development world and design are well chosen to speak on the conference which is going to be a 3 day event.
To know more about-
Know more about speakers http://2011.osidays.com/speakers
I am attending, are you?
Don't miss the event. :)
[...]

I had the great honor to interview Mr. Jonas Smedegaard while we participated in the Mini Deb Conference 2011 India at NITTE college, Nitte near Mangalore this October. Simple outfit, humorous talk, and the friendly behavior of his captured everybody's attention. After the second tiring session at supper, Jonas and Isat down in his room to explore his views on Debian, Freedombox, the community and other cool topics. Along with us, there were a few developers present from FSMK (free software movement karnataka) and Pune.

Here is the synopsis of what we heard from him for about an hour.










Jonas and Debain...
It took an anonymous mail from an Australian developer to turn a Danish technologist, Jonas Smedegaard, to switch to Debian packaging. We know extracting a Debian package is a default option with ArchiveExplorer, and its quite simple as par with other packaging methods ,.tar.bz , tar.gz to name a few.

It was around 2000-2001 when I moved to Debian, before that I tried my luck with Red Hat and Suse with lesser degrees of success, even Debian was a bit strange for the “First time”.

Debian is for ?

Students or developers who enjoy change and wish to explore the flexibility of their system should be encouraged to use Debian

Students or developers who enjoy tweaking their system and wish to explore the flexibility of their system should be encouraged to use Debian. It’s amazing for those who enjoy and love hacking …I strongly recommend to those who love to hack.

Only Hackers? I asked ; he says , see we are very free and strong freedom means strong ties which gives podium to a strong community in the making. I like the values that Debian holds and love my freedom with it. I would say these things to people who are not into debian. For those who says” I already use this “, then I would respond a bit differently, either technically or philosophically to tailor the message to that individual. I would see first where they are slanted to then I would go with my explanation. Even on during my journey I met some enthusiast , tried to figure out what they use their system for and recommended them UBUNTU.

Debain developers from India...
Now it is clear to see where the benefit is in the free software movement. Such as finding the possible ways to gain with investing our money; both in personal level taking time to learn about free software instead of learning about how to get a job at Microsoft”.

Now it is clear to see where the benefit is in the free software movement. Such as finding the possible ways to gain with investing our money; both in personal level taking time to learn about free software instead of learning about how to get a job at Microsoft”. He thinks that it’s easy now, for the most part, to make a living by working with free software. It’s also the same for both larger, commercially oriented, organizations and government organizations.There are also other benefits because its now stabilized and more concrete how free software is working. Now it is stable running on desktops and it is being massively used on servers so there are other benefits for third world places. We are using a lot of things from other countries and we are outsourcing a lot of industries. But in some developing countries you can have the benefit of not having to lean on or depend on other countries. So, when you exchange money with other countries,you lose every time. Keep in mind I’m just talking broadly,however. I don’t know India enough to compare directly. But when I'd to India, it’s crazy the differences in values of money compared to places like Denmark: what I buy here may cost something very different in Denmark. Coca-Cola for instance costs many times more than what you would pay for here in India. This illustrates that anything you can pay for and produce locally would be a big gain. The rest of the world doesn’t care about this, but this is an area you can really gain! I hope that in next coming year this problem is stable and actually you move faster gain and growth of users in of free software in the developing countries.

Work at Debian..
We have a cell based development:what I am doing, I might inspire others, but its not the whole crowd who is moving along. It’s not populism, we have small fractions and each of the fraction is encouraged to work as fraction

When asked about how they take their work at Debian he replies,” there is no specific goal for Debian and they don’t work like that in Debian. There are passionate people in debian, all working towards it. We don’t have strong leadership. You can say that we have very weak leadership but that’s the wrong perception, that’s the wrong way to explain the whole situation. We have a cell based development:what I am doing, I might inspire others, but its not the whole crowd who is moving along. It’s not populism, we have small fractions and each of the fraction is encouraged to work as fraction, so that each of the fractions put their passion to optimize the area then we try to mingle and place everything together and that’s one of the reasons. Also, it takes a lot of time. We focus primarily on whatever we want to focus on and, secondarily, we try to make everything fit together. So it is a big, big patch work. So, if you say what is the main field of the patch work then well nobody is knitting the patchwork together as a hierarchy. It’s all the pieces that are knitting themselves and attaching to each other. So you cannot ask “what is the main theme of the Debian team?” We are a big organism and each part of the organism is growing at its own pace and its ownstyle.

Ubuntu, a challenge for debian?
It feels that the whole birth of Ubuntu has had a major impact on the Debian. The whole relationship between Debian and Ubuntu has been a struggle, but he also feels today that there have been a tolerance and acceptance of Ubuntu. There are also things that Debian forgets to give back to their upstreams, so this is wholly dynamic. The ecosystem of free software is wholly dynamic and is maturing as its gets more and more complex. Further to add to this he says ,”You cannot say anymore that there’s an author, than there is the distributor, than there’s the user because in the old days it was never called Fedora, it was called Redhat and Debian and some others and we were the distributors with the authors shouting at us because we were messing up with their code because they thought we were getting in between the users and them.

Ubuntu is helping us a lot, but its sometimes frustrating how they do it, but it is helpful and the funny thing is Ubuntu is our user. They are using our distribution, and fundamentally all of our Debian developers have made an oath to the community that we work for free software and our users.”
Now as distributors, we feel that the re distributors are getting in the way between us and our users, so it’s like history repeating itself. We have to get over that and realize that there is clearly a need for Ubuntu obviously because they wouldn't have been successful if there was no need for them. So, we have to swallow the bitter pill and we have to accept that we are not directly in dialogue with all of our users,only a small fraction of them. Probably because we are in dialogue with users which are more hard core and are able to become developers at some point. Not actually the Debian developers with capital D, but those who want to give back. They don’t need to be mentored like Ubuntu to give back to us. Ubuntu is helping us a lot, but its sometimes frustrating how they do it, but it is helpful and the funny thing is Ubuntu is our user. They are using our distribution, and fundamentally all of our Debian developers have made an oath to the community that we work for free software and our users.”

Message to Cannonical...
Stop doing this! Stop doing that”, was the first reaction of JasonSmedeggerd to Canonical but, later he just wishes good luck to the Canonical team for whatever they are doing.

Ubuntu is Debian’s child who has left home and that’s painful, frustrating, but its good.
He asserts that Debian team doesn’t have any kids, but he supposes that the only thing to say is to be his kid to be home. You can try to educate them, you can help guide the child while at home, but when they leave home well good luck with whatever they are doing. Ubuntu is Debian’s child who has left home and that’s painful, frustrating, but its good.

Handful number of linux distributions, good or bad?
When asked about confusion to a user on which one to choose, he puts his thoughts this way; Life is tricky and challenging and that is good. I would be worried if life is too simple. You grow fat if you have chosen a simple life. That’s not healthy. He finds no concrete example to support his idea and he straightforwardly clears that don’t choose Linux if you can’t handle complexity.

If you want to peruse the business world then I would recommend you to use windows.
If you want to be creative, but without being creative with computers then you should use a Macintosh.


But, there are simple ones like Ubuntu, and that worries him. He encourages people to explore personally believes Debian is a place to explore and again- if you don’t want to explore then don’t use Debian because it would go against what you want to use with your tool. Further, he urges people to use Windows to carry out businesses and if they want to be creative, but without being creative with computers then use a Macintosh.



Freedombox..



As a geek, you would pick your tool OS that you are sure he is the right person you are talking to. And you will be sure that he is talking to you and not the rest of world because you want him to open the curtain of talk.
When asked about Freedombox, he clearly defines it as a project to isolate/steal the good way to us geek conserving key control of our privacy, and making him do the privacy for our non-technical privacy. To illustrate this he exemplifies this as getting in touch with someone and chatting with them and not getting interrupted. To add more, if you wanted to get in touch with him and you wanted to chat with him to discuss something but not about home, about some real good chatting. As a geek, you would pick your tool OS that you are sure he is the right person you are talking to. And you will make sure that you are talking to you and not the rest of world because you want him to open the curtain of talk. So that you are in control of who you are talking to and verification of whom you are talking to.It’s just like mechanism of personal privacy. What freedom box gives is when two people are talking about their problem they make sure that they are talking only to each other without someone interrupting in between.

Debian and Freedombox’s passion is to making how to make geeky things geekier and they are working on things which are close to themselves
There is a thought that geeks are driven by an attitude to crack. Those things which geeks do are driven by passion. Apparently, very few geeks have a passion in doing something that strives also for perfection. It took us many users to come to the year of Linux desktop because we don't use user friendly desktops. You must have seen that geek’s desktops are very ugly; they use it not because it’s ugly, but because it’s very efficient so they don’t care about policy that much. If you hire someone then they are likely to focus more on what they want. Like Ubuntu, they hire people to do things that we geeks don't do naturally as geeks such as polishing the desktop. Freedombox project is only a project driven by passion.Nobody is taking the task to making it user friendly and none of us are taking responsibility to talking to someone with good design sensibilities because it’s not our passion to make it user friendly. Debian and Freedombox’s passion is to making how to make geeky things geekier and they are working on things which are close to themselves. Maybe half a year after we too could be able to use Freedombox, he hopes.

Debian after 10 years..

Ubuntu can be seen as taking away users, but they are not. They are part of Debian
He sees Debian Blossoming even 10 years after as it’s doing now. He doesn’t foresee much change but he wants things to be improved.Debian has been in very good shape and he, of course, wants it to be in good shape. He expects that Debian will be releasing as frequently in a year or maybe in half a year. His team would start trying to out roll releases. It would not be the same thing that Redhat, Fedora,Ubuntu, etc. Debian team would focus more on free date more than release date. Our style entirely will be the same. His only sure change is on quality rather than looking at the numbers as such.Ubuntu can be seen as taking away users, but they are not. They are a part of Debian. Debian is huge! Debian is passion driven more than any other distribution. He feels Debian is very big today and it’s very clear what their principal is. So he cannot even imagine that it will dry out.

India visit..
Hyderabadfor a week then Mangalore and Bangalore for about a week is his schedule to India.
He finds Hyderabad surprisingly hectic. The expectation was that he had to attend a couple of events but he ended up staying for a week. He chooses to take all possible events and finds these events very fruitful and also very challenging as well as enjoying too. He confronts his invoice to these presentation things. But, after doing few presentations in the past, he has gained a lot of confidence in his ability to communicate and present effectively so not to bore the crowd. Meanwhile, he doesn’t lose track what he was talking about.He loved the crowd and found the audiences to be really nice. But he feels sad that he has not been able to see much of Indian culture and blames his own choice for that. He wanted to meet more people and conduct events rather than sight-seeing or exploring cultures. He was in no mood for tourism, not about exploring India but offering his knowledge and his passion to India. However, he would love to return to India to explore its culture. He doesn’t think he would be able to separate between Indian and European developers like that. He tells he had a great experience with the culture and people of Brazil because he took the time to hangout more than focus on knowledge and
passion of free software. But, here he was focusing on sharing knowledge and passion and doesn’t want to judge it as a culture. We are all equal out there, he exclaims.

Message to linux lovers..
At last, he urges Debian non-user to wake up and explore the world to a larger degree, challenge them, challenge their tools through Debian.He wishes Debian to flourish.



[...]



Week 5 – Introduction to generic functions in C part 2


When we left you last time, we were probably about 60 percent of the way through my lsearch implementation. We are trying to go from type specific to generic, but I'm trying to do that in the C language.

Void *lsearch (void *key ,void base,int n ,int elemsize, int (cmpfn)(void *,void *))


this is the header for our linear search

key refers to the element we need to find
base refers to the base address
n refers to the no of elements
and elemsize refers to the size of each element
but the last argument looks a bit confusing ... lets figure out whats the last argument all about
now lets look at the body of the function
for(i=0;i

void * elemaddr = (char*)base +i*elemsize ;

/* elemaddr is the address of the key ... here a for loop to increase the valueof the base pointer each time by elemsize *\
now lets get to the mystery argument we had left out on closer evaluation we see that the argument is actually a function with the aruments as two void * this arguments is used to compare two elements of any type and it returns 0 if they match or some other integer otherwise
if (cmpfn(key,elemaddr)==0)
return elemaddr;
now lets consider an example
int array[] ={4,2,3,7,11,6};
int size =6 ;

now if i have to search for a number say 7 i have to do the following
int number =7 ;
now i have to set aside space for the key element i am interested in as i have to pass that as the very first element to the function
array is represented in the following way



<----elemsize--->

4 2 3 7 11 6
↑ ↑
base address key address

now lets see how to call lsearch for this example

int *found = lsearch(&number,array,6,sizeof(int),int cmpfn);
if (found==NULL)
dint get number
else
number was found

we have to define the int cmpfn function before we can use it so lets write the cmpfn function

now the cmp function has to take two void * and return an integer (prototype) , this is the fifth parameter in our lsearch function

you may think cant i just write a fucntion taking two int * and returning an int ... the answer is you could since all pointers are of same size .. you would pass them as int * and they would be absorbed as void * ... but its better to write the comparison function to match that prototype exatly

my function take two pointers ... one is the key which always remains constant and the other is the element address which keeps changing unless a match is found

i also have to return a 0 or any other integer depending whether there is a match or not

now since im writing the code i know that the two void * are really int * .. therefore i can reinterpret them to be the int * they really are




int intcmp(void * elem1,void *elem2)
{
int *ip1 =elem1;
int *ip2=elem 2;


return (*ip1 -*ip2) /* returns the difference between element if zero ... its a match */
}

this may be difficult to understand the first time you see it .. its not the most elegant way to support generics .. its just the best C has to offer ... all the other languages are much younger and they have learnt forms C's mistakes and they have better solutions to such problems


here is the full program :



#include
#include
#include


void *lsearch(void *key,void*base,int n,int elemsize,int(cmpfn)(void*,void*))
{
int i;
for(i=0;i
{
void *elemaddr=(char*)base+i*elemsize;
if(cmpfn(key,elemaddr)==0)
return elemaddr;
}}


int cmpfn(void *elem1,void *elem2)
{
int *ip1=elem1;
int *ip2=elem2;
return(*ip1-*ip2);
}


main()
{
int array[]={4,2,3,7,11,6};
int size=6;
int number =7;
int *found=lsearch(&number,array,6,sizeof(int),cmpfn);
if(found==NULL)
printf("we dint get the number\n");
else
printf("we found the number\n");
}









But there are some plus points like this method is very fast, you use one copy of lsearch to do all your searching .. the template approach you get one instance of that lsearch algorithm for every datatype you search for
this method isnt that difficult to understand while searching for integers but its starts to get a lot more complicated when we start lsearching an array of c strings so you will have an array of char * and well have to search for a specific char * to see whether you have a match or not

consider the following code


char *letters [] ={“a”,”f”,”b”,”g”,”d”};
char *favletter =”e”;
lsearch(&favletter,letters,5,sizeof(char*),StrCmp);




this is array is represents in the memory as follows








↓ ↓ ↓ ↓ ↓ ↓
base pointin to a pointing to f pointing to b pointing to g pointing to d
address

in the function we pass the address of the favletter , we pass the letters array which is the base address of the first element ,no of elements ,size of elements which is char * (why char *) .. so that we know the space between the elements,and StrCmp .. the compare function which we have to write

the reason we are passing the address of favletter rather than the value its self .. is that we want the key to be of the same type as of as all the pointers that are computed manually in the lsearch
this is beacause though elemenst are passed as char * we know that they are acutally char** that is they are two hops away from the element .. and it would make our life easier if we passed the key as char** so that there will be some symmetry in the code

now lets write the StrCmp function



int StrCmp(void*vp1,void *vp2)
{
char * s1= * (char **)vp1;
char * s2= * (char **)vp2;
return strcmp(s1,s2);
}


the first argument is &favletter and the other argument is the function to which it has to be compared with ...now the function body look really very confusing the first time you see it..but if you examine it carefully youll find that we are casting vp1 and vp2 to be the type we know they are ..

they are two hops away from going to charecters (that is why we use char** instead of char*) after that we dereference them once so that the address of the key and the present element are sitting in s1 and s2 ... we do this because there a function in c library which compares character arrays by passing the address of the pointer to the first character this function returns a zero for match otherwise the difference between the ascii key values

lets consider the same function and if we forget to pass &favletter and instead pass favletter

our compare function still interprets its as a char** not char* it would set theit address of 'e' to be char** instead of char*
it would still derefrence it but would now represent 'e' to be a char * which actually is a char ,and it would pass that to strcmp which will not be good as it will jump to the 'e' mystery address and assume there are characters there

now suppose u dont want to deal with a double dereference when u dont need to .you can wanna pass just favletter as your argument
the body of the function gets changed




char * s1= (char *)vp1;
char * s2= * (char **)vp2;
return strcmp(s1,s2);


we can recognise that the first argument is 1 hop away from the characters and the second one is two hops away
the way the function was written first is the way its usually written due to the symmetry of dealing with the same incoming datatype
we can write it anyway .. both methods work

this is the full program :


#include
#include
#include

int StrCmp(void *vp1,void *vp2)
{
char *s1=*(char**)vp1;
char *s2=*(char**)vp2;
return (strcmp(s1,s2));
}

void lsearch(void *key,void*base,int n,int elemsize,int(StrCmp)(void*,void*))
{
int i;
for(i=0;i

{
void *elemaddr=(char*)base+i*elemsize;
if(StrCmp(key,elemaddr)==0)
{
printf("element has a match\n");
break ;
}
}
printf("element has no match\n");
}


main()
{
char *letters[]={"a","f","b","g","d"};
char *favletter="e";
lsearch(&favletter,letters,5,sizeof(char*),StrCmp);

}









now that we have a pretty good idea about genric code ... lets turn our attention to implementing a stack datastructure
well start by making it int specify just so that we have a clear idea how the generic should be implemented

well be implementing everything in int so there is no void* business yet
well try to imitate the way we use stacks in c++ as we are more use to it

as there is no class keyword in C well be using struct
and we have to public and no private

well try to come as close as we can to implementing a class using C code



typedef struct{
int *elems;
int logicallen;
int alloclength;
}stacks;


since we are trying to implement it as a class ... lets not manipulate the element inside stacks diresctly
well try using function to manipulate them

we want to write a constructor function, destructor function, and then we want to write an is empty function, a pop function, a push function, things like that.

So here’s the prototype of the first thing I’m interested in:



void stacknew (stack *s);
void stackdispose(stack *s);
void stackpush(stack *s,int value);
int stackpop(stack *s);


in stack new all we are gonna do is pass in or expect the address of some stack that’s already been allocated.

we also have this function stack dispose. we want to identify the address of the stack structure that should be disposed. This is gonna be a dynamically allocated array that’s not perfectly sized. So we want to keep track of how much space I have (logicallen) and how much of it I’m using (alloclengh)

stackpush and stackpop is used to push and pop elements

lets see a picture of what happens when we declare a element of stack

stack s ;


?
?
?

That means that this, as a picture, is gonna be set aside. And you know, based on what we’ve talked about in the past, that it’s 12 bytes
if the elems field is at the bottom, and that the two integers are stacked on top of it. But as far as the declaration is concerned, it doesn’t actually clear these out, or zero them out like Java does, it just inherits whatever bits happen to reside in the 12 bytes that are
overlaid by this new variable.

stacknew(&s) It’s when we call stack new that we pass in the address of this. Why does that work, and why
do we know it can work?
Because we identify the location of my question-mark-holding
stack pass into a block of code that we’re gonna allow to actually manipulate these three
fields. And I’m going to logically do the following:


I’m gonna take the raw space, that’s set up this way. I’m gonna set it’s length to be zero.
I’m gonna make space for four elements. And I’m gonna store the address of a
dynamically allocated array of integers, where these question marks are right here, and
initialize the things. That means that that number can be used not only to store
the effective depth of the stack, but it can also identify the index where I’d like to place
the next integer to be pushed.



So because I’m pre-allocating space for four elements, that means that this is a function.
It’s gonna be able to run very, very quickly for the very first calls. And it’s only when I
actually push a fifth element, that I detect that allocated space has been saturated, that I
have to recover and panic a little bit and say, oh, I have to put these things somewhere
else. That it’ll actually go and allocate another array that’s twice as big, and move
everything over, and then carry on as if the array were of length 8 instead of 4 all along.

You can imagine that when we go generic this is still gonna be an array, just like the
arrays passed to lsearch are, but we’re gonna have to manually compute the
insertion index to house the next push call, or to accommodate the next push call, and do
the same thing for pop. we do this




stacknew(&s)
{
for(int i=o;i<5;i++)
stackpush(&s,i);
}









So what has to happen is that on the very last iteration here I have
to do that little panic thing, where I say, I don’t have space for the 4. So I have to go and
allocate space for everything.



So I’m gonna use this doubling strategy, where I’ve gotta set aside space for eight
elements. I copy over all the data that was already here. I free this. Get this to point to this
space as if it were the original figure I’ve allocated. Forget about that smaller house, I’ve
moved into a bigger house and I hated the older house. And then I can finally put down
the 4 and make this a 5 and make this an 8. So that’s the generic algorithm we’re gonna
be following for this code






I want to implement stack new. So take a stack address, just like that, recognize that s is a
local variable. It has to make the assumption that it’s pointing to this 12-byte figure



Void stacknew(stack *s)
{
s->logicallen=0;
s->allocelem=4;
s->elems=malloc(4*size0f(int));
assert(s->elems !=num);


So what I want to do is I want to go in. I want to s arrow logical n = zero. I want to do s
arrow alloc len = 4, and allocate dynamic memeory using malloc for elems

There is this function called assert. It’s actually
not a function it’s actually a macro. There’s this thing you can invoke called assert in the
code, which takes a boolean value, takes something that functions as a test. It effectively
becomes a no op if this test is true, but if this is false assert actually ends the program and
tells you what line the program ended at. It tells you the file number containing and the
line number of the assert that broke.

The idea here is that you want to assert the truth of some condition, or assert that some
condition is being met, before you carry forward. Because if I don’t put this here and
malloc failed, it couldn’t find 16 bytes (That wouldn’t happen but just assume it could)
and it returned null, you don’t want to allow the program to run for 44 more seconds for
it to crash because you de-referenced a null pointer somewhere.

So when we come back next sunday we'll finish the rest of the three functions and then we will go
generic
[...]

All right guys and gals, today is Monday which among others things means that it's time for my wallpaper tutorial here. I've been wondering what wallpaper should I use for today's tutorial and I made my mind like 5 mins ago, but I promise you you won't be disappointed.
So it's time to present you the wallpaper that you'll have after you've completed the tutorial. So I wanna hear loud claps for this vivid "Cosmos" wallpaper:

Looks stunning, right? (if you are dumb enough to say "NO", you shall be blood-eagled :D). Anyway, it's time I start with the tutorial already.

Step 1.
Download this .PNG file and open it with GIMP:

Step 2.
Create a new layer and fill it with solid black. Now click on Filters -> Noise -> HSV noise. Choose the following settings for the noise and click OK:
Now set the layer mode to "Screen" and Opacity to 50%

Step 3.
Create a new layer. Now choose the "Blend" tool and set gradient to "Full saturation spectrum CW". Now make a gradient like this:
Now set the layer mode to "Overlay" and you should see a nice effect:

Step 4.
Download this brush and put the .gbr file in ~/.gimp-2.6/brushes Save the file as .xcf and than exit GIMP. Now open the .xcf file. Create a new layer and using the "Rectangle select" tool make a selection that is as high as the height of the and about 1/3 as wide. Now select the brush "rectangle long" in the "Paintbrush" tool and select the following settings for it: Size -> 0.50 , Brush Dynamic -> Random (just don't touch Hardness setting here) , Apply Jitter -> 1.0 , Use colour from gradient (standart).
Now simply brush horizontally about 6 times:
Now click "Filters -> Blur -> Montion Blur". Select the following settings for it and click OK:
Now you should have something like this:
Now select the "Scale" tool (Shift+T) and scale the layer to 1600x3000.
Now choose the "Rotate" tool (Shift+R) and rotate the layer to 45 degrees.
Now using the "Move" tool position the layer where you want it to be.
If done correctly you should have something that looks more or less this way:

Step 5.
Create a new layer. Now select the "Blend" tool and set gradient to "Full saturation spectrum CCW". Now stroke across the grey streams:
Set the layer mode to "Overlay" and you should see a nice effect like this:

Step 6.
The wallpaper is beginning to take shape, isn't it? Now it's time to make is bit more shiny by adding some layer mask.
First thing you need to do is set your foreground colour to black and the choose the "Blend" tool with gradient "Foreground to transparency".
Return the layer mode of the gradient for the streams to "Normal". Right click on that layer name and select Add Layer Mask. Select "White (full opacity) Now using the gradient tool make to gradient above the big red areas around the streams. This will remove the red parts. Again set the layer mode to "Overlay". Your image should now look like this:
Now we will the streams less dense. Click on the "Blend" tool and set the "Shape" to "radial". Right click on the name of the streams layer and again choose Add Layer Mask, select White (full opacity) Now using the gradient tool make some areas less visible. Just make a gradient somewhere and that layer will be less visible. For example I've made my streams look like this:

Step 7.
Now it's time for adding background mask. Create new layer and fill it with solid black. Now click "Filters -> Render -> Clouds -> Difference Clouds". There choose the following settings and click OK:
Now set that layer mode to "Grain merge". This will add some nice light and shadow effects:
Time for our second mask, so create a new layer and fill it with solid black. Again click "Filters -> Render -> Clouds -> Difference Clouds", but this time in the settings click "Turbulent" too and set detail to 1. Set the layer mode of that to "Overlay":
And time for the third and last mask. Needless to say create a new layer and fill it with solid layer and again click on "Filters -> Render -> Clouds -> Difference Clouds", so I am just gonna give you the settings for this third Clouds layer:
Now make another new solid black layer above the third cloud layer and set it's layer mode to "Overlay". Then right click on on and click "Merge Down", this will merge it with the third Cloud layer. Set the layer mode of the new layer to "Overlay" and Opacity to 25%. This will add even more darkness to the wallpaper:

Step 8.
All right, enough darkness, time to light things up a bit. Create yet another new layer and set white as your foreground colour. Now select the "Blend" tool and set the "Gradient" to "Foreground to transparency" and "Shape" to "Radial". Now paint white blobs where you think the wallpaper is too dark. For example here are my blobs:
Set that layer mode to "Overlay". This should add some lightness to the wallpaper:
If you think it's too dark, you can try duplicating the layer or instead of setting it to "Overlay" just lowering it's transparency.

Step 9.
That step is extremely easy. Create a new layer and fill it with solid black. Now click "Filters -> Light and Shadow -> Drop Shadow" and make a flare like this one:
Set this layer mode to "Screen"

Step 10.
Create a new layer. Now make sure your foreground colour is solid black. Select the "Blend" tool with "Gradient" to "Foreground to transparency" and "Shape" to "Radial" Make a black blob just above the light (upper) part of the lens flare, just like this:
Now set the layer mode to "Overlay" and you're done:

For those of you who will be interested here's my 2560x1600 .PNG file:
And my .XCF:
[...]