Search Results: "will"

6 December 2008

Mike Hommey: On open source and mobile phones

No software is perfect, and most users happen to have some itches they would like to scratch on them. I don’t know anyone who hasn’t thought some day “why can’t that software do <some feature>”. But not everybody is able to scratch these itches. For a starter, most people aren’t developers, or aren’t able to modify source code to reach some known goal, be it fixing a bug or implementing a missing feature. But even when they are able to do so, most applications can’t be fixed or improved easily: most widespread applications are still proprietary software where access to the source code is either impossible or prohibitively expensive. That’s the good thing about open source and free software: you are able to itch these scratches yourself ; and as a free software user and developer, I often do so in the software I use. I must say it’s even frustrating when you are used to this possibility but end up on damn stupid bugs or limitations you can’t fix in proprietary software. I have quite a bunch of such examples, the most recent ones being with VMware ESX, but that’s another story. Mobile phones are everywhere nowadays. In some countries, there are even more mobile phones than people. A huge amount of people are using them daily. Or maybe should I say “endure”. When you go to shop for a laptop, digital camera, or digital portable music player, you can find demonstration models you can fiddle with, see what the user interface looks like, how it behaves, see if whatever feature you like on such devices is present and how easily you can do what you want. With a mobile phone, you don’t have all that (at least in France and Japan, where I experienced this). You’re lucky if one of the sellers owns the exact model you’d like to test and lends it to you for a minute. Most of the time, the “thing” to watch is a plastic model, not even remotely related to the real thing in colour, weight… and obviously, it has as much use as a brick (not even so, actually, as you can’t, for instance, break windows with it). And most of the time, you end up regretting the choice you made, because the UI is so unuseable, or so slow after a while, or so buggy, etc. More and more phones nowadays have multimedia as their main feature. While it can be nice, especially when you see how some are pretty good at it, and when you consider it avoids you to carry both a phone and a multimedia device. Sadly, they usually forget to be good phones, too. Sometimes even, multimedia(-related) features are crippled by the carriers. As an example, my phone, while able to read mp3 music, has been limited by the carrier to refuse to use them as ring tones, while, according to the maker and to various forums, the phone is perfectly able to do so. It’s even worse than that, because even converted as 3gp, which it otherwise allows as ring tones if you download them at a ridiculous price, it still doesn’t allow to put your music as a ring tone. You got it, features in phones are also limited for big money-making. Fortunately, there is a hole in my phone where I can set a 3gp as ring tone if I do it from the music player instead of the file browser. Most articles I read about Android, or the iPhone SDK, relate how they are great opportunities to enable developers to provide nice applications for users, using the provided frameworks. But the thing is : they’re only applications. An application is not the core of the phone. An application won’t take care of ring tones, or vibration types. And that’s what open source in mobile phones should also allow users to do. That’s what it all should be about. As a user and free-software developer, I would like to enhance my phone like I can enhance my laptop. For instance, my phone will only allow crappy polyphonic tones for SMS or e-mail reception. Digital music is only available when you receive a call. Why ? There is obviously nothing preventing digital musing when receiving SMS or e-mail, except a stupid software restriction that could be fixed if the firmware were open-source. Very few phones in France appear to allow japanese input, let alone proper display of japanese characters in e-mail or on the web. My previous phone was able to display japanese correctly. My current phone doesn’t. Neither of them is able to input japanese (which is not unexpected in France, actually). I know the iPhone does both. Anyways, these are informations very hard to get a hand on before buying a model, and something that open-source would allow me to fix. Even better, it would allow me to take the pieces from the asian version of the same (or similar) phone which probably has the functionality. The phone I had when I was living in Japan had a nice feature that I haven’t seen in any phone in France (but again, this kind of information is very hard to get): different vibration types. For example, you had a vibration type making short vibrations, another one long vibrations, yet another one 3 short vibrations, a short pause, then 3 short vibrations again, etc. This is very useful when you disable ring tones during a meeting or some other occasions where you don’t want to bother the people around you with your phone ringing: depending on how the phone vibrates, you know whether you have to take the call or can ignore it, or if it’s only an e-mail, without taking a look at the phone. Again, an open-source firmware would allow me to implement this. I’m sad so much of what open-source can bring to mobile phones is so badly publicized.

5 December 2008

Martin F. Krafft: forcedeth: nVidia network chips are broken

Yesterday, I removed my new server from the rack and brought it back home, after the problems with the nVidia network chip (forcedeth) took down the NIC to the point that the IPMI chip, which is routed through the primary interface, wasn t reachable anymore. Even though a soft reboot fixed the problem, a bit of large-packet traffic, like downloading via IPv6, broke the card again. Since IPMI is also affected, I cannot remotely manage the machine and thus can t leave it in the rack. In fact, I am strongly considering to make use of the try&buy contract and return the thing. I cannot rule out a software problem, but given that the NIC goes into a state in which it gets unusable even to the IPMI system, which is completely independent of Linux, I somewhat doubt it. Instead, I suspect a hardware error, beyond the known problems with nVidia network chips and segmentation/checksum offloading. On the other hand, it s not news that drivers can break hardware, and the fact that I am using Linux is reason for hope. One alternative, which would allow me to potentially help in fixing this bug, is to use a riser card to stuff a different network card into the server. This would mean I didn t invest all the time into the server for nothing. Unfortunately, this workaround comes with extra costs, and would require Init Seven to allocate another switch port for the IPMI card, which I am not sure they ll be keen about. The bottom line of the story is that I will avoid nVidia even more in the future, and you might want to do so as well. Companies that produce crap hardware and do not cooperate with people writing free drivers for them do not deserve the money. Unfortunately, almost everyone out there uses the MCP55 chipset these days, and deny any problems with it. I guess I will take a look at HP and IBM, although I d really prefer not to pay for their brands, and not to enslave myself to their customer support standards. NP: Neil Young: Dead Man

Martin F. Krafft: Symbian, IPv6, SIP: lack of testing, no QA, no surprise

Trying to put my new Nokia E71 to use, I was positively surprised to see that it has an IPv6 stack. Even though the integrated web browser does not care about it and insists on IPv4, it still made me happy to realise that Symbian (manufacturers of the OS) aren t totally missing the beat of time. But when I tried to get the builtin SIP client to speak to my Asterisk PBX, I ran my head against a wall. It didn t take me long to find out why it wasn t working, though:
<--- SIP read from 192.168.14.62:5060 --->
INVITE sip:echo@sip.madduck.net SIP/2.0
Route: <sip:sip.madduck.net;lr>
Via: SIP/2.0/UDP [2001:41e0:ff12::xyy:zzff:feaa:bbcc]:5060;branch=[...]
From: <sip:e71@madduck.net>;tag=i4a43mn949hc7vu5633b
To: <sip:echo@sip.madduck.net>
Contact: <sip:e71@[2001:41e0:ff12::xyy:zzff:feaa:bbcc]>
[...]
User-Agent: E71-1 RM-346 110.07.127
[...]
o=Nokia-SIPUA 63396745194593125 63396745194593125 IN IP6 2001:41e0:[...]

This is Asterisk s debug dump of the SIP INVITE packet, which initiates a connection. You will note that it arrives via IPv4, since Asterisk does not speak IPv6 and thus doesn t listen on IPv6. You will also notice that the Nokia phone doesn t give a flying food, but puts its IPv6 address into the headers. That s like writing a letter to your grandmother and telling her to answer by e-mail. You can choose between IPv4 and IPv6 for GPRS connections, but not for Wifi. There is also no way to turn off IPv6 altogether, at least none that I found. This really makes me wonder about the development process at Symbian, which must exclude testing and QA, or else I could not explain how such braindeadness could make it into a published product. On the other hand, we are all well aware of the lack of quality in software products that come force-bundled with hardware, like phones or plain computers. After Nokia acquired Symbian, they open-sourced the operating system (thanks, Penny, awesome girlfriend, for reminding me. Happy now? grin). After a bit of searching, I am pretty convinced that this was just marketing buzz, because I failed to find any information on how to obtain the code or how to put it onto the phone, six months later. I am not sure how to move on. I can either return the phone (wouldn t be the first time I had to return a Nokia E series phone for lack of quality), switch from Asterisk to some IPv6-enabled VoIP software (like FreeSwitch, which has not been packaged for Debian yet, mostly because the FreeSwitch guys are acting up about the changes Debianisation would require), or find some hack around this limitation. Ah, the joys of being an early adopter NP: Neil Young: On the Beach Update: Faidon Liambotis, who was also influential in my decision for the E71, found the problem: the phone s DNS cache. sip.madduck.net used to be a CNAME pointer to the machine running the asterisk server, wall.oerlikon.madduck.net, which also has an AAAA (IPv6) record. I thought about this myself and removed it, but the problem persisted. Faidon suggested to use the IP instead, which worked, and a reboot of the phone cleared the cache and allowed me to use the DNS name again, which is now a plain A record to the same host. As soon as DNS no longer advertises the IPv6 address, the phone s SIP stack no longer gets confused.

4 December 2008

Jeff Bailey: Coming up to the third night in the new place...

I found the camera this morning, but I haven't taken pictures of the new place yet. I think that'll have to wait until this weekend.

I'm sitting in the corner of what will be the office space. Right now, it's got the cordless phone, the wifi router, the cable modem, and the Vonage (codec? modem? codec seems likely, how wonderfully archaic). Off to the side is a sewing table of some sort that the former owners left behind which has the power brick for our cell phones and Angie's laptop on it.

We're running laundry for the first time in the washing machine downstairs, and seasoning the new cast iron frying pan. Leif had a bath earlier and actually went down at about the normal time. He woke up at 05h30 this morning, probably due to the lack of curtains. It apparently starts to get bright early, and none of us are sleeping well with three of us in a double.

Our furniture is due to arrive somewhere between the 15th and the 18th. I phoned today and the moving company told us that the stuff hasn't left California yet. Ah well. We've purchased a toaster over and electric kettle so far. We bought the stove, washer and dryer from the former owner. There was a spare fridge downstairs that we're using, but mostly we're using the step outside the kitchen door. We're back in Quebec and it's cold enough to keep things out there. =)

This place is easily the largest place I've lived in since my parents split up when I was 8. Angie and I are really trying hard not to fill it with crap, but actually think through what we need.

I signed Angie and I up for gym memberships today after work. Yesterday was cell phones. Angie picked up some new pots and pans. Tomorrow will be towels and some dishes.

Anyone know if it's better to buy a fridge and dishwasher before Christmas or after? =)

The new home number, cell numbers and such will be in Facebook and Orkut in a moment.

Biella Coleman: Dogs dance in the snow, while cats do not.

Next time I have to explain why I (really) prefer dogs to cats, I will not provide an argument. Instead, I will point people to this video. While the video is not an instance of joking, it is nonetheless a potent example of humor, at least in the way that the philosopher, Simon Critchley has defined it in his compact and very powerful (and very beautifully written) book, On Humour:
Jokes tear holes in our usual predictions about the empirical world. We might say that humour is produced by a disjunction between the way things are and they way they are represented in the joke, between expectation and actuality. Humour defeats our expectations by producing a novel actuality, by changing the situation in which we find ourselves…

Norbert Tretkowski: Dropping MySQL Cluster support from Debian (for a while)

In the next upload of MySQL 5.1.30 to the experimental branch of Debian we are going to drop MySQL Cluster support from the standard MySQL packages. I already wrote something about the future of MySQL Cluster in Debian a while ago, this is just the first step towards a separate mysql-cluster package in Debian.

This change does not (and will never) affect the MySQL packages in etch and lenny, and unstable not until we decide to move MySQL 5.1 from experimental to unstable.

Florian Maier: HP Compaq 2510p linux kernel freeze

I've recently noticed that one of our lab laptops running "testing" and "unstable" <strong>freezes</strong> the system whenever i close
the lid. Additionally, X does not always come up properly and rebooting is (besides typing blindly) the only way to get a
graphical login. The graphics chipset is an intel 955. After a bit of search we found a kernel bugreport, which provides a clue
where the problem occurs. root@orion:~# cat /proc/acpi/video/*/DOS
DOS setting: <0>
To get it working for the HP Compaq 2510p, all you need to do is to set a value of "1" root@orion:~# echo '1' > /proc/acpi/video/*/DOS Then cross your fingers and close the lid. Hopefully your system did no freeze and is still up ;-) At work, we're using a modprobe post-install-Script to work around this which sets the working ACPI _DOS value if a ''ACPIvideo_DOS'' variable is set. This will hopefully be fixed soon in a newer kernel version. Afaik from Debconf8, Bdale also owns one of those notebooks. PS.: *rofl*

Michael Banck: 4 Dec 2008

Opensync updates Some time ago, Opensync-0.38 got released, and it is now available in experimental. The evolution-data-server and the Opie plugins are now available again, as well as the new tomboy (in NEW) and a rewritten google-calendar/contacts plugin. The google plugin requires the new libgcal, which I have just uploaded to NEW. Unfortunately, kitchensync is still not ported to latest Opensync-0.3x (and got dropped for KDE4.2), so one still needs to use the command-line msynctool program. Also not ported are the (KDE3) kdepim and the currently under development Akonadi plugin. Other important plugins missing for 0.38 are the Windows Mobile, Blackberry, Palm and IRMC plugins. I tried to suggest making 0.38.x point releases including more ported plugins, but it seems development is turning towards 0.39 already, and yet some more API changes were done, this time mostly removing unnecessary interfaces, which should be a good thing in the long term. Some other good news is that there are now weekly IRC meetings of the Opensync developers, so there should be steadier progress towards Opensync-0.40 from now on. Unfortunately, I was mostly absent during all of the three meetings so far. Along with Opensync-0.38, libsyncml saw a new major release 0.5.0 which should fix lots of bugs and provide better support for mobiles. However, lots of problems with syncml were due to bugs in the wbxml2 library. Michael Bell has hopefully found the most critical ones and I have uploaded a new wbxml2-0.9.2 to unstable today which I hope will get into lenny soon. The main problem with wbxml2 over the last year was a unresponsive/MIA upstream; however, recently wbxml2 maintainership got tranferred to the opensync project and moved to its Trac. Michael Bell has been fixing most of the outstanding issues and is currently preparing a 0.10.0 release, so this project should be back on track now.

3 December 2008

Christian Perrier: Why not so much incoming mail today?

Waking up this morning, I noticed a low traffic in my incoming mail in "Debian work" mailboxes (PTS mailboxes, personal email, bugs, -release, etc.). Then I read -devel and understood. Everything is there. We have a new flamewar (apparently about NEW processing). It's interesting to see that the closer we get from a release, the biggest flamewars we are doing. Sounds like everybody is boring (have you notived the strong drop in the bug report rate?). Crap, there's a lot of work left to do, to release the damn Lenny: For $ DEITY 's sake, could we do that, so that developers stop boring, then go back to their development duties and the number of flamewars lowers down again (maybe after the squeeze release goals discussion which will probably be "interesting", also)? Please...your home page, these days, should really be http://bts.turmzimmer.net...

David Bremner: Using GLPK from C++

Recently I suggested to some students that they could use the Gnu Linear Programming Toolkit from C++. Shortly afterwards I thought I had better verify that I had not just sent people on a hopeless mission. To test things out, I decided to try using GLPK as part of an ongoing project with Lars Schewe The basic idea of this example is to use glpk to solve an integer program with row generation. The main hurdle (assuming you want to actually write object oriented c++) is how to make the glpk callback work in an object oriented way. Luckily glpk provides a pointer "info" that can be passed to the solver, and which is passed back to the callback routine. This can be used to keep track of what object is involved. Here is the class header
#ifndef GLPSOL_HH
#define GLPSOL_HH
#include "LP.hh"
#include "Vektor.hh"
#include "glpk.h"
#include "combinat.hh"
namespace mpc  
  class  GLPSol : public LP  
  private:
    glp_iocp parm;
    static Vektor<double> get_primal_sol(glp_prob *prob);
    static void callback(glp_tree *tree, void *info);
    static int output_handler(void *info, const char *s);
  protected:
    glp_prob *root;
  public:
    GLPSol(int columns);
    ~GLPSol()  ;
    virtual void rowgen(const Vektor<double> &candidate)  ;
    bool solve();
    bool add(const LinearConstraint &cnst);
   ;
 
#endif
The class LP is just an abstract base class (like an interface for java-heads) defining the add method. The method rowgen is virtual because it is intended to be overridden by a subclass if row generation is actually required. By default it does nothing. Notice that the callback method here is static; that means it is essentially a C function with a funny name. This will be the function that glpk calls when it wants from help.
#include <assert.h>
#include "GLPSol.hh"
#include "debug.hh"
namespace mpc 
  GLPSol::GLPSol(int columns)  
    // redirect logging to my handler
    glp_term_hook(output_handler,NULL);
    // make an LP problem
    root=glp_create_prob();
    glp_add_cols(root,columns);
    // all of my variables are binary, my objective function is always the same
    //  your milage may vary
    for (int j=1; j<=columns; j++) 
      glp_set_obj_coef(root,j,1.0);
      glp_set_col_kind(root,j,GLP_BV);
     
    glp_init_iocp(&parm);
    // here is the interesting bit; we pass the address of the current object
    // into glpk along with the callback function
    parm.cb_func=GLPSol::callback;
    parm.cb_info=this;
   
  int GLPSol::output_handler(void *info, const char *s) 
    DEBUG(1) << s;
    return 1;
   
  Vektor<double> GLPSol::get_primal_sol(glp_prob *prob) 
    Vektor<double> sol;
    assert(prob);
    for (int i=1; i<=glp_get_num_cols(prob); i++) 
      sol[i]=glp_get_col_prim(prob,i);
     
    return sol;
   
  // the callback function just figures out what object called glpk and forwards
  // the call. I happen to decode the solution into a more convenient form, but 
  // you can do what you like
  void GLPSol::callback(glp_tree *tree, void *info) 
    GLPSol *obj=(GLPSol *)info;
    assert(obj);
    switch(glp_ios_reason(tree)) 
    case GLP_IROWGEN:
      obj->rowgen(get_primal_sol(glp_ios_get_prob(tree)));
      break;
    default:
      break;
     
   
  bool GLPSol::solve(void)    
    int ret=glp_simplex(root,NULL);
    if (ret==0) 
      ret=glp_intopt(root,&parm);
    if (ret==0)
      return (glp_mip_status(root)==GLP_OPT);
    else
      return false;
   
  bool GLPSol::add(const LinearConstraint&cnst) 
    int next_row=glp_add_rows(root,1);
    // for mysterious reasons, glpk wants to index from 1
    int indices[cnst.size()+1];
    double coeff[cnst.size()+1];
    DEBUG(3) << "adding " << cnst << std::endl;
    int j=1;
    for (LinearConstraint::const_iterator p=cnst.begin();
         p!=cnst.end(); p++) 
      indices[j]=p->first;
      coeff[j]=(double)p->second;
      j++;
     
    int gtype=0;
    switch(cnst.type()) 
    case LIN_LEQ:
      gtype=GLP_UP;
      break;
    case LIN_GEQ:
      gtype=GLP_LO;
      break;
    default:
      gtype=GLP_FX;
     
    glp_set_row_bnds(root,next_row,gtype,       
                       (double)cnst.rhs(),(double)cnst.rhs());
    glp_set_mat_row(root,
                    next_row,
                    cnst.size(),
                    indices,
                    coeff);
    return true;
   
 
All this is a big waste of effort unless we actually do some row generation. I'm not especially proud of the crude rounding I do here, but it shows how to do it, and it does, eventually solve problems.
#include "OMGLPSol.hh"
#include "DualGraph.hh"
#include "CutIterator.hh"
#include "IntSet.hh"
namespace mpc 
  void OMGLPSol::rowgen(const Vektor<double>&candidate) 
    if (diameter<=0) 
      DEBUG(1) << "no path constraints to generate" << std::endl;
      return;
     
    DEBUG(3) << "Generating paths for " << candidate << std::endl;
  // this looks like a crude hack, which it is, but motivated by the
  // following: the boundary complex is determined only by the signs
  // of the bases, which we here represent as 0 for - and 1 for +
    Chirotope chi(*this);
    for (Vektor<double>::const_iterator p=candidate.begin();
         p!=candidate.end(); p++) 
      if (p->second > 0.5)  
        chi[p->first]=SIGN_POS;
        else  
        chi[p->first]=SIGN_NEG;
       
     
    BoundaryComplex bc(chi);
    DEBUG(3) << chi;
    DualGraph dg(bc);
    CutIterator pathins(*this,candidate);
    int paths_found=
      dg.all_paths(pathins,
                   IntSet::lex_set(elements(),rank()-1,source_facet),
                   IntSet::lex_set(elements(),rank()-1,sink_facet),
                   diameter-1);
    DEBUG(1) << "row generation found " << paths_found << " realized paths\n";
    DEBUG(1) << "effective cuts: " << pathins.effective() << std::endl;
   
  void OMGLPSol::get_solution(Chirotope &chi)  
    int nv=glp_get_num_cols(root);
    for(int i=1;i<=nv;++i)  
      int val=glp_mip_col_val(root,i);
      chi[i]=(val==0 ? SIGN_NEG : SIGN_POS);
     
   
 
So ignore the problem specific way I generate constraints, the key remaining piece of code is CutIterator which filters the generated constraints to make sure they actually cut off the candidate solution. This is crucial, because row generation must not add constraints in the case that it cannot improve the solution, because glpk assumes that if the user is generating cuts, the solver doesn't have to.
#ifndef PATH_CONSTRAINT_ITERATOR_HH
#define PATH_CONSTRAINT_ITERATOR_HH
#include "PathConstraint.hh"
#include "CNF.hh"
namespace mpc  
  class CutIterator : public std::iterator<std::output_iterator_tag,
                                                      void,
                                                      void,
                                                      void,
                                                      void> 
  private:
    LP& _list;
    Vektor<double> _sol;
    std::size_t _pcount;
    std::size_t _ccount;
  public:
    CutIterator (LP& list, const Vektor<double>& sol) : _list(list),_sol(sol), _pcount(0), _ccount(0)  
    CutIterator& operator=(const Path& p)  
      PathConstraint pc(p);
      _ccount+=pc.appendTo(_list,&_sol);
      _pcount++;
      if (_pcount %10000==0)  
        DEBUG(1) << _pcount << " paths generated" << std::endl;
       
      return *this;
     
    CutIterator& operator*()  return *this; 
    CutIterator& operator++()  return *this; 
    CutIterator& operator++(int)  return *this; 
    int effective()   return _ccount;  ;
   ;
 
#endif
Oh heck, another level of detail; the actual filtering actually happens in the appendTo method the PathConstraint class. This is just computing the dot product of two vectors. I would leave it as an exercise to the readier, but remember some fuzz is neccesary to to these kinds of comparisons with floating point numbers. Eventually, the decision is made by the following feasible method of the LinearConstraint class.
 bool feasible(const
Vektor<double> & x)  double sum=0; for (const_iterator
p=begin();p!=end(); p++)  sum+= p->second*x.at(p->first);  
      switch (type()) 
      case LIN_LEQ:
        return (sum <= _rhs+epsilon);
      case LIN_GEQ:
        return (sum >= _rhs-epsilon);
    default:
      return (sum <= _rhs+epsilon) &&
        (sum >= _rhs-epsilon);
       
     

Uwe Hermann: Playing Starcraft on Linux using Wine

Wine logo Here's a quick HOWTO for using Wine to play Starcraft on a Linux machine.
  $ apt-get install wine (as root)
  $ winecfg
The winecfg (graphical) utility will setup some config file defaults in your ~/.wine directory. Click on Graphics and activate Allow DirectX apps to stop the mouse leaving their window. Also, click on Audio (a dialog will pop up, just click OK). This will autodect your soundcard and setup Wine to use it. Under Drives click Add (this will add D:) and change the path to /media/cdrom, so that Wine knows about your CD-ROM drive. Finally click OK to close winecfg and save the settings. winecfg screenshot The next step is to insert the Starcraft CD-ROM into the drive and start the installer using Wine:
  $ mount /media/cdrom (as root)
  $ wine /media/cdrom/setup.exe
Follow the instructions in the installer until the Starcraft install is finished (you'll need your CD key number), then exit the installer (don't start playing Starcraft right away). The next step is to get the latest patch and get rid of the need to insert the CD-ROM every time.
  $ wget http://ftp.blizzard.com/pub/starcraft/patches/PC/SC-116.exe
  $ wine SC-116.exe
After the patch is installed click OK and Starcraft will be started (very annoying). Leave the game again. We'll get rid of the CD-ROM requirement now:
  $ cp /media/cdrom/install.exe ~/.wine/drive_c/Programme/Starcraft/StarCraft.mpq
That's a pretty big file, it may take a while. You might have to change "Programme" in the path (I have the German Starcraft version). That's it. You can now play Starcraft (without needing the CD-ROM) using:
  $ wine ~/.wine/drive_c/Programme/Starcraft/StarCraft.exe
A good thing is, it even works nice and fast with the open-source nv NVIDIA driver (no need to install the proprietary driver). I noticed one very annoying "bug" with the mouse behaviour at first. The mouse would sometimes just get stuck during the game (which is a total disaster of course, if you're in the middle of a fast-paced game). Left-clicking somewhere would "unstuck" the mouse, but it's still very bad. After many, many hours of reading bugreports and trying various patches I finally found out the root cause for the problem. It's somehow related to my window manager (IceWM); whenever you move the mouse to the bottom of the Starcraft screen (where the IceWM status bar is, even though it's not on top or even visible, and even though Wine/Starcraft runs in full-screen mode!), something funny happens with X11/IceWM and the mouse gets stuck. I haven't yet found out if/which IceWM option could fix this behavior, but I have a small work-around. Just start Wine directly on a second X11 server with Starcraft (without any window manager being involved):
  $ xinit -e '/usr/bin/wine ~/.wine/drive_c/Programme/Starcraft/StarCraft.exe' -- :1
No patches needed (stock Wine from Debian unstable works fine, that's version 1.0.1 right now). I hope this saves other people some debugging time...

Jose Carlos Garcia Sogo: Fanatics did it again

Once again, a person died today murdered by terrorists in Spain. He was a businessman, who had a construction company in his town (Azpeitia) at Basque Country region. Close his house, he was murdered by gunshots. Just because his company was a contractor in the construction of AVE infraestructure in Basque Country, which will connect it with Madrid and France. Once again, a family has been hit forever. I was going to include a black strip with the article, but it’s better to see an image.

Pablo Lorenzzoni: It's done: I am a serious man now

Some of you might be wondering where I ve gone (my last post was on 2008-11-18), but I have a short explanation for that: I got married! Yes It was on November 22nd, in a non-religious ceremony among the majority of my close friends and family. Brenda and I are together for more than 6 years already, so it was about time! After the party we went on honey moon to Bariloche (Argentina), undoubtfully one of the most beautiful parts of the planet, for one week. We were back just Monday and back to real life just now. Pictures of the party and the trip will follow

2 December 2008

Alexander Reichle-Schmehl: Dear Lazyweb,

after my call for help when searching a backup solution for kind of special needs, I got a lot of feedback. Actually: I got more feedback than I'll be able to answer ;) So I take this way to thank you for all the hints, proposals and scripts! Special thanks to Bubulle for insisted me on using bacula and to Wouter for pointing out, that the default configuration will back up it's database automatically. Works like a charm and it was some fun to install it, play with it, test it. Oh, and I even understood how to restore files from the backup ;)

David Moreno Garza: DirectoryIndex and the perl-script handler

Wouter Verhelst blogs about combining ScriptAlias (or a way to run CGIs) and DirectoryIndex in Apache. Recently, developing a TinyURL clone I had a similar (not identical, though) issue. Basically, I set SetHandler to perl-script on the “/” location, which basically means, everything accessed on a given virtual host, is affected. Because you are changing the handler for the entire location, DirectoryIndex will have no effect on it because mod_dir is the one dealing with the DirectoryIndex function, that is, using the DIR_MAGIC_TYPE handler. To fix this you can use a mod_perl (2, I never really used 1) Fixup phase handler:
<VirtualHost *:80>
	...
	# some stuff
	...
	# PerlSections rule.
	<Perl>
	$Location "/"  =  
		SetHandler => 'perl-script',
		# some stuff
		PerlFixupHandler => 'Axiombox::Awbox::Fixup',
		# some other stuff
		DirectoryIndex => 'whatever.html',
	 ;
	</Perl>
</VirtualHost>
If it looks incomplete is because some other information, out of the scope of this sample, like DocumentRoot or other mod_perl directives, are hidden as the “other stuff”. My Fixup.pm handler looks like this:
package Axiombox::Awbox::Fixup;
use strict;
use warnings FATAL => qw(all);
use Apache2::Const -compile => qw(DIR_MAGIC_TYPE OK DECLINED);
use Apache2::RequestRec;
sub handler  
	my $r = shift;
	if ($r->handler eq 'perl-script' &&
		-d $r->filename              &&
		$r->is_initial_req)
	 
		$r->handler(Apache2::Const::DIR_MAGIC_TYPE);
		return Apache2::Const::OK;
	 
	return Apache2::Const::DECLINED;
 
1;
Which is very straight-forward: If the request is set to perl-script, the requested file is a directory and if the current request is the main one, then change the handler and return to the normal flow of phases. Otherwise, decline the Fixup phase handler.

Michal &#268;iha&#345;: Gammu test version 1.21.93

After few weeks of debugging build system, new Gammu version is out. This time most fixes are in build system area, especially now it is possible to compile Gammu using Borland C++ 5.5. Also my hacks for crosscompilation to Windows on Linux have been dropped in favour of crosscompilation features in CMake 2.6. Full list of changes: You can download from usual place: http://cihar.com/gammu/, Debian users will find packages in experimental soon.

MJ Ray: Bristol Alternative Christmas Quiz

I’m working away from the office today because the office window is being replaced (an end to leaky draughty windows - yay! - but it does mean it’s about 3 degrees in there while it’s happening). For some reason, some things aren’t working over the wifi (the least of my network problems recently - blew up the router at the weekend), so I’m working in batches. I’ll let the phone go to voicemail and reply from a fixed line when I can. Pics and stuff about yesterday’s trade fair will appear later. I usually shy away from stuff labelled “geek” but here’s Bristol Wireless’s Christmas-time geek quiz night fundraiser on the 19th. D’ya reckon Woodsy will wear that bow-tie again when running the quiz?

1 December 2008

Russell Coker: Gmail and Anti-Spam

I have just received an email with a question about SE Linux that was re-sent due to the first attempt being blocked by my anti-spam measures. I use the rfc-ignorant.org DNSBL services to stop some of the spam that is sent to me. The purpose of rfc-ignorant.org is to list systems that are run by people who don’t know how to set up mail servers correctly. But the majority of mail that is blocked when using them comes from large servers owned by companies large enough that they almost certainly employ people who know the RFCs (and who could for a trivial fraction of their budget hire such people). So it seems more about deliberately violating the standards than ignorance. The person who sent me the email in question said “hopefully, Google knows how to make their MTA compliant with RFC 2142“, such hope is misplaced as a search for gmail.com in the rfc-ignorant.org database shows that it is listed for not having a valid postmaster address [1]. A quick test revealed that two of the Gmail SMTP servers support the postmaster account (or at least it doesn’t give an error response to the RCPT TO command that is referenced in the complaint). However Gmail administrators have not responded to the auto-removal requests, which suggests that postmaster@gmail.com is a /dev/null address. However that is not a reason to avoid using Gmail. Some time ago Gmail took over the role of “mail server of last resort” from Hotmail. If you have trouble sending email to someone then using a free Gmail account seems to be the standard second option. Because so many people use Gmail and such a quantity of important mail is sent through that service (in my case mail from clients and prospective clients) it is not feasible to block Gmail. I have whitelisted Gmail for the rfc-ignorant.org tests and if Gmail starts failing other tests then I will consider additional white-lists for them. Gmail essentially has a monopoly of a segment of the market (that of free webmail systems). They don’t have 100%, but they have enough market share that it’s possible to ignore their competitors (in my experience). When configuring mail servers for clients I make sure that whatever anti-spam measures they request don’t block Gmail. As a rule of thumb, when running a corporate mail server you have to set up anti-spam measures to not block the main ISPs in the country (this means not blocking Optus or Telstra BigPond for Australian companies) and not block Gmail. Not blocking Yahoo (for “Yahoo Groups”) is also a good thing, but I have had a client specifically request that I block Yahoo Groups in the past - so obviously there is a range of opinions about the value of Yahoo. Someone contacted Biella regarding an email that they couldn’t send to me [2]. I have sent an email to Biella’s Gmail account from my Gmail account - that should avoid all possibility of blocking. If the person who contacted Biella also has a Gmail account then they can use that to send me email to my Gmail account (in the event that my own mail server rejects it - I have not whitelisted Gmail for all my anti-spam measures and it is quite possible for SpamAssassin to block mail from Gmail). It turns out that the person in question used an account on Verizon’s server, according to rfc-ignorant.org Verizon have an unusually broken mail server [3]. If your ISP is Optus, BigPond, Verizon, or something similarly broken and you want to send mail to people in other countries (where your ISP is just another annoyance on the net and not a significant entity that gets special treatment) then I suggest that you consider using Gmail. If nothing else then your Gmail account will still work even after your sub-standard ISP “teaches you a lesson” [4].

Aigars Mahinovs: Copyright infringement is like walking into a concert without a ticket

In light of Ted’s post on copyright, it is clear that we are bogged down by a hostile terminology. Copyright infringement is not piracy - gunmen on seas killing people, looting ships and holding hostages is piracy. Copyright infringement is not theft. When my bike was stolen, I no longer had it. Stealing a bicycle is theft. Copyright infringement is more like sneaking into a concert. You enjoy the show, but did not pay for it. If the concert is held in a small venue then it is easy to spot someone who gets in without paying, but if you hold a concert in an open field, then expecting everyone in the surrounding area to be forced to pay you is rather absurd. If you have a concert in a field with a fence around it and someone makes a hole in that fence (posts a a recording to a P2P site), then the one making the hole might be punishable (property damage), but can any person that enters that hole really be prosecuted for theft, property damage and enabling further theft by not closing the hole (uploading that is inherent in the P2P protocols) ? I do not think so. A similar analogy is using public transport without a ticket. If there is a bus that goes from A to B and I get on it without buying a ticket from the driver, then in the current copyright enforcement world I would get arrested by the police, prosecuted and get a fine that is tens of thousand times more than the price of the ticket. This has multiple problems - 1. the police has no way of knowing if I have some kind of legal right to use the bus without a ticket (monthly ticket, free ride for seniors, …) before arresting me and bringing me to court, the police has no business wasting their time and taxpayer money until it is 100% certain that a crime has actually occured; 2. if a hacker disables the ticket composters in the bus and removes all signs about prices how am I to know that the bus is not free (like the park and ride buses in many locations); 3. the fines are excessive - I’ve not seen a public transport fine that is much more then 10 times the price of the ticket, and it only applies to one ride - you can not be retroactivelly fined for all free rides you took in the last year; 4. it actually is not possible to be 100% certain who is the person doing the act - you can only trace the IP which can be used by any number of computers and additionally the computers might be infected with a botnet acting as an unwilling proxy zombie. There is no way (except a confession) to prove that a particular person does a particular download. Now we just need a short and simple word or phrase that describes that. Any ideas?

Florian Maier: hello planet debian

This is my first post for planet debian, thanks for adding my feed Holger. I'm working for the City of Munich asDevelopment Lead of our Debian based Linux Desktop. I'm not yet a DD, but waiting in the NM queue.My posts will usually be about Debian, Linux, LiMux and other random technical stuff i can't bother anybody else with ;-)

Next.

Previous.