Search Results: "jan"

17 July 2007

Gustavo Franco: Brazilian plane carrying 174 crashes in Sao Paulo

It's really confusing and we don't know all the details on what happened yet. What I know is that I went to Belo Horizonte from Rio and back yesterday (in a difficult flight with really bad weather) on one of the tam's airbus. I feel very bad about all that sad news. :/

The flight cited on the title was from Porto Alegre - where the International Free Software Forum takes place to Sao Paulo - the biggest city in the country.

In a totally unrelated event, one of the two airports in Rio de Janeiro (the smaller) is closed due to a fire incident, with no victims AFAIK. We've the international airport here (Rio) where it seems that the flights are being rerouted.

More information at: http://www.reuters.com/article/newsOne/idUSN1726359820070717

MJ Ray: The Cooperative Tour de France

Did you know that the cooperative movement has a strong presence in le Tour? Road cycling is a good sport to show off teamwork and cooperation, because no-one can win a three-week tour on their own. The following Tour de France teams seem to have cooperatives as their main sponsors: Top-placed cooperative rider is Rabobank's Michael Rasmussen, the General Classification leader! He's also currently King of the Mountains (polka dot jersey) and Most Aggressive Rider (red numbers). We've already seen C.A's Thor Hushovd win a stage, while Milram's Erik Zabel has led the points classification and now lurks in second in that contest for the green jersey. Both Caisse d'Epargne's Alejandro Valverde and Rabobank's Denis Menchov should have a chance of the overall win - or can Michael Rasmussen keep it despite the time trials to come?

7 July 2007

Jan Wagner: Ignoring security (usability)

Since some time, Deutsche Bahn rolled public wireless lan called “WLAN am Bahnhof” out at 25 railroad stations, you can choose between 4 providers. Sounds really nice, but beside the economical conditions, there is also at least one security issue.
Connecting to the network and opening your favorite browser redirects you to a encrypted portal. So far, so good … the really bad news is, that the certificate expired over 6 years ago.
Broken certificate
This seems to be a normal behavior, since it happens often, that invalid certificates are used. This leeds to blunted users, which aren’t verifying such certificates anymore, even when it’s important.
Does anybody know a reasonable way to notify anybody who can solve the problem there beside the normal contact forms? , , ,

6 July 2007

Michael Janssen: :

Well, the last day in Greece went swimmingly. It was mostly just relaxing, playing on the Internet, chatting with lovely Di, and working out logistics of taking a long flight back to the United States. The only strange thing about it is that I haven't slept since the last post, which is away from the norm. It's a kind of forced all-nighter caused by the bad scheduling that I made for myself. The flight from to Athens happened at 10:20pm in the evening. This was the latest flight that I could get and assure that I could get to the Athens airport in time for my 7:20 flight to Madrid, which connects through Chicago and back to Minneapolis at last.

I've spent a total of 10 days outside of the United States now, the longest time since I have been alive, according to my knowledge. It has caused some interesting results. I realized that I am inextricably connected to the people who I am familiar with in my life, and being without them decreases my mood significantly, and without contact to them decreases my mood sharply.

I am not alone in this fact. There are many studies that show that people who have more social connections lead happier lives. I am lucky in that I am technologically ept and can connect to my near and dear in a number of ways, and be resourceful in finding other ways to contact them if necessary. I feel that I am lucky to live in a time which it is possible for me to spend so much time apart and still be in connection with people. I am also lucky that I was born in a geological area which enables me to be as such.

At the same time, I am sad to leave this place. It is a nice area, with good food and a very long history. As Nikos reminded me the other day, it is the birthplace of Democracy, which I hold to a fairly high regard. It is also the birthplace of modern medicine, and a significant portion of many early sciences. The wealth of the nation as a whole and as parts is clear to me, and I wish to return.

I've learned part of the language while I am here, and it has made me more cognizant of communication with other cultures. People in Athens seemed put off when I tried to talk in Greek, but in Kos they were at the worst amused at my attempts. The language may not be as romantic to learn as French or Italian, and may not be as useful in the long term as Latin, but it would be interesting to speak nonetheless. I am tempted to start working on some of the i18n Greek QA issues in Debian -- It would help me learn the language more, and also keep me aware of the issues in software when you start working with other countries' characters. I have been lucky to be using a MacBook this entire time with decent Greek support, allowing me to type at least some greek while I was here. It helped me understand even more of the language - I now know mostly the numbers 1-9 at least.

The trip has highlighted for me something which is highly lacking in airports: power. Every airport that I have been to has prominently displayed the signs of wireless access, and has people using their laptops in almost every direction you can look (I am one of those), but they are sorely without power points for people who are using those laptops. This may be a designed flaw in order to save energy, but I don't really believe that 50 or even 5,000 laptops at 65-150W will put a significant dent in the power grid at somewhere as large as an airport, where LCD screens are running 24/7 with ads and bright lights illuminate every corner for all to be seen. I won't even start talking about the airplanes themselves.

All in all, the trip has been a happy one, and I would very much repeat it. I will make different decisions on lodging at some places and probably plan a shorter trip. I however wholly endorse Greece as a vacation spot, and even would consider moving here if offered a position (that would depend highly on Diana as well, obviously). I find it entirely favorable. I hope that this small series on the site has caused you, the reader some pleasure at least, even if it was at my expense.

Now begins the long trip home, on three planes and with 14.5 hours in the airplane and 18 hours in total. It'll be only 10 hours counting local time, unfortunately -- the jet lag will, I'm sure, be horrible.

Comments: (0) Trackbacks: (0)

Comments
  1. No comments
Trackbacks
  1. No Trackbacks

5 July 2007

Michael Janssen: :

Yesterday was pretty much a long day of preparation and presenting. The day started with no internet, possibly for the entire island of Kos, I wasn't really every that clear on the whole of it. Apparently there are 2 underwater lines coming to Kos island and both had been severed or put out of service by someone. This was a bad thing, because I had intended to finish some final experiments and do some statistics on results, and Excel wasn't working. I suspect it is because I hadn't installed the updating tool of Office 2004 for Mac. Anyway I could do what I needed to do with R or Gnumeric, but they were both not installed yet. No internet = no new applications.

I finished the experiments and data gathering and the internet came back on just in time for me to download Gnumeric and get some of the stats working correctly. The final presentation didn't change that much, only changing on one slide and adding one small table, but the added result was significant enough to justify all of the work that it entailed. Indeed, it proved that the entire premise of the paper and simulation was valid. That made me feel all warm and fuzzy inside.

The talk was at 3:30, the first in a session which was mostly unrelated papers. I don't feel as bad because many of the other papers were kind of a hodge-podge as well, and we were probably all placed in the session because we didn't really fit anywhere else. I met a nice researcher who was chairing the session because the actual chair was presenting in another session (something we had worked out with software in the ICRA2006 schedule, but apparently wasn't taken into account here). The actual presentation went well, and Nikos lent me his laser pointer which added a little to the presentation I believe. Nikos said the talk was good, but I also got a comment that it was well-presented later in the day from a unrelated researcher. I was so-so about the presentation until I got the unsolicited comment.

After the talk I called up Diana on Skype and chatted for a while, but the network was too flaky at the conference, so she called my cell phone. Using Skype is one of the things that I have done more in this trip than I have done before ever. It is really a wonderful program and network for people who are far away from each other, and it actually has much more impact when you consider the costs of calling home with other methods. I estimate I saved about $200 in just three days of Skype calling instead of regular calling, even with calling to cell phones in the US every once in a while, and with Diana calling my Hellenic cell phone when my network was flaky as well. It is much more of a disruptive technology in the non-US world where every call isn't already paid for.

The banquet was next. Usually I don't like going to banquets, but this was set up different than the normal ones that accompany these conferences. Instead of a large service crew bringing out fancy food to a large set of tables, it was setup in a buffet with a large selection of Greek food so you could pick and choose your favorites and even go back for more food if you liked. I ended up trying a large variety of foods and discovering some new tastes that I hadn't had before. It was throughly enjoyable especially when listening to the others at my table of which three or four were Greek.

Then it was back to the hotel by bus, and an early bedtime in order to stock up on sleep for the long hours in the next day. Today I plan on just relaxing, sleeping a bit when I get tired, and maybe trying out some local snacks. I've already arranged for a Taxi. The last installment will be written from the Athens airport tomorrow.

Comments: (0) Trackbacks: (0)

Comments
  1. No comments
Trackbacks
  1. No Trackbacks

2 July 2007

Gunnar Wolf: Keep rolling!

It seems that I've held up -at least for half a year- what I stated back in January - I come by bike to work almost every day, and really enjoy the time spent on two wheels. My times have -of course- improved, as has my dominion of the bike - I make ~10 minutes each way (must be a bit more on my way to work than on my way back, as it is uphill).
My city's government seems to be seriously promoting people to consider using the bicycle as means for regular transport and not just as a recreational device - I see some of its measures as quite silly, but some are just perfect. One week ago, while I was on the plane from Edinburgh, we had the first Ciclot n, a 32Km ride open to everybody (and of course, Nadezhda was among them). Over 70,000 people took part, reportedly, and it seems it will be held monthly. Besides that, yesterday we had the paseo dominical in Coyoac n very close to my house - What's that? Something similar to the ciclot n, only much smaller (14Km), much less publicized, and in a different place of the city every Sunday. Well, we started up the day at 8 AM by cycling from Metro Copilco to Miguel ngel de Quevedo, Av. Universidad, R o Churubusco, Divisi n del Norte and Henriquez Ure a back to Metro Copilco. We later learnt that around 10,000 people took part. 14 Km, 30 minutes - not bad, and quite enjoyable!
We didn't go for the second round, because we wanted to be by ~10 AM at Reforma, probably the city's most emblematic avenue, to be part of the demonstration marking one year of the electoral fraud. But... Well, we didn't want to just leave the bikes at home and go by metro - What can we do? Yes, take the open streets. We followed a bit of the path we had taken a bit earlier, then took Minerva, Insurgentes until Reforma (~45 minutes). And once we got to the meeting point, we didn't want to step down and crawl the bikes along... So we both found out that not only we dared take the main streets where people are not really used to cyclists and where taxi drivers will often try to make a point that if you don't own a car you should use a taxi and not a bike - We were able to cycle most of our way to Z calo, going slowly and moving through people, in what seemed to be almost an unthinkable feat for me just a couple of months ago. We can now control the bike, we can even be almost still while riding it, and not crash into anybody!
Of course, the way back was similar - We took our bikes across Obrera, Doctores, Algar n and lamos, then took Av. Universidad all the way down to Copilco, and -after some three hours riding, with my arms quite red and of course somewhat dehydrated and sore-butted- got home.
It feels great to have a well-deserved siesta! And... Well, biking is just too enjoyable. I guess we had ~45Km yesterday, plus some ~5 extra zig-zagging through the crowd. It rules.

29 June 2007

Romain Francoise: Review Board: web-based code review

We've started using Review Board for code reviews at work. It's pretty nice: setting it up is trivial (it's built on top of Django), it's fast enough (using mod_python), email notifications Just Work, and the user interface is sexy, even if it has a few quirks. It even does syntax highlighting in diffs, which is convenient. The only nit is that our workflow sometimes requires reviews of code that has already been committed in the repository, so having a revision browser in the request form would be a plus. But in any case, it's much more convenient than using email for review!

Update: fixed link.

Martin F. Krafft: DebConf7

I am sitting at Frankfurt airport in between flights home from Edinburgh (not anymore, but that's where this post was born). It's been an intense 2.5 weeks of DebConf7, which has been unlike other DebConfs for me in two respects: this was the first time I actually went to DebCamp, the week leading up to the conference, which is designated to teams and individuals with development goals to achieve during the week. And I was also actively involved in the organisation of the conference, which was unexpected, but a very good experience I am not going to miss next year. Well, it wasn't unexpected. When I booked my flights in January, I had decided to arrive a day early and leave a day late to be able to lend a hand. In between then and the conference, my life turned somewhat upside-down and I had forgotten everything about these noble goals of mine. So when I arrived at the conference venue on Saturday morning with thoughts of netconf circling my head, I was surprised to find everyone buzzing about (how na ve of me) and somewhat clueless as to how I should merge in: my wrists didn't really hold up to heavy lifting, and my knee certainly didn't enjoy stairs, of which there were plenty on the way up to the top floor, where DebCamp was taking place. After trying and being mostly ridiculed by the other organisers ("friends"... ha!), I set out to accomplish some other tasks more suited to my bodily condition, such as wiring the hack lab to accomodate 40 geeks for the first week. That took me most of the day, but at least the space was ready for Sunday morning and the official start of the camp. My goal for the week was netconf and I made good progress until I ran into a wall on Tuesday and had to back off and rethink my design. Reinhart Tartler and Enrico Zini dedicated their time to listen to my design and the problems and helped me clear the mess up and helped me reduce complexity and converge on a straight-forward, event-based design. As the newly appointed DebConf press officer and one of the organisation volunteers, I did not get any further for a few days, as I was manning the front desk or preparing and releasing my first press release (with the help of several others), which lead to a lovely story on The Register and doubled the number of attendees that preregistered for DebianDay (which marks the end of DebCamp and the start of DebConf). I blame the geeks in skirts, actually. Silly bunch, but not quite as silly as those attendants who could get a laugh out of the underwear question for two weeks in a row. Up to this point, I had managed to keep a perfect balance between netconf, orga-team, and sleep. So good, apparently, that when the orga-team t-shirts arrived, Uncle Steve made it quite clear that I should be getting one, even though I had spent considerable time on netconf, am sure some of the others must have worked twice the amount, and I was still quite well rested then. But they gave me a shirt and thus I became part of the orga-team. And even though it was rough at times, running around during the day, filling spare minutes with netconf brain-work, and enjoying nights that got longer with every day of the conference, I am glad and proud to be a member of this team now. It took me until after the official start of the conference to return to the netconf code, but with the new design, I got most of the framework to a point where it could obtain static and dynamic addresses from configuration files as well as DHCP servers in time for my presentation on Tuesday (the recording of which shall be linked from the netconf homepage as soon as it's available). Of course, nothing worked on screen in front of the audience, but noone really expected that anyway. and then I took it all apart for further simplification, so by the time night fell, the slides from the talk had already become outdated as I moved to yet another design, which is even simpler and which allowed me to sketch complex scenarios, such as DHCP after WPA. For two days, I made good progress, but the time available for hacking decreased noticeably, as I kept volunteering for more tasks that needed doing, and more and more people turned up. Somewhere in between, Keith Packard took hostage of (and fixed parts of) my broken X40 laptop, but that's the meat of another story. And on some other night, our leader Sam, in his official capacity as DPL, presented me with the instantiation of my innermost desires as consolation for my hosital stay: a pony. Just look at that smile! With 400 attendants, this year's DebConf continued the trend of immense growth of the event, and while it's great to witness this increase in popularity among attendees and sponsors, who make it possible each year to fly more people to the destination, I am also rather sceptical. The problem is less the additional load on the organising team the next 100 people are going to be easier to accomodate than the previous 100 were. It is more that the conference is losing focus. More people make you spend less time with the same folks, and as the number of non-contributors increases, the social element starts to outweigh the technical element. I am not condemning the social element, but to paraphrase the words of my favourite Debian developer, it's painful to come to DebConf or even IRC with a project and questions just to find that the people are generally more interested in being social, even to the point of preventing technical discussions. I realise that this is a sensitive subject as the issue of various cabals keeps coming up frequently and it does not seem right to start limiting the audience to this conference, but unless we consider the matter, DebConf might deteriorate similarly to other conferences, which have enjoyed enormous growth as well before it was too late. I think we must make sure that people understand that we are, after all, a technical project and must not lose touch with out roots. Of course, I may also be overreacting, after a week of intense coding and many other stress factors I continued working hard on netconf and helping with the organisation throughout Friday, briefly taking time off to prepare a presentation on my Ph.D. research, which was very well received, as well as a workshop on Debian packaging with modern (distributed) version control systems, which yielded around a dozen new subscribers to the vcs-pkg mailing list. But now, back to netconf. All things considered, I was making good progress, but not getting netconf into a releasable state just yet. I can parse /etc/network/interfaces files and get data from DHCP servers, even configure interfaces with those, but it's all still work in progress as I have not yet bothered to implement such basics as default gateways or DNS servers. But the framework is in place, and I am very happy with it as everything I keep adding falls into place beautifully. To mark the end of my netconf development sprint at DebConf7, I scheduled a code introduction session on Friday, where around 15 people turned out to get a walkthrough of the code and explanation of some of my design decisions. The session was recorded and will be available on video shortly. I think it turned out to be a very good idea; I found myself intrigued by someone else's code before until that someone took the time to explain what was going on. I sincerely hope that this introduction helps bootstrap a few people's experiences with the code and yields more contributors! Even though we ended almost every single evening of the two weeks in one of the surrounding pubs, the last few nights were definitely the most enjoyable. On Thursday, the local team had organised a Ceilidh with a band teaching us geeks how to dance the Scottish way, and the venue stayed open for two hours longer than before, causing most people to come out for beer or bouncing about. On Friday and Saturday, the folks of InfoSeed let us use their comfy couches (in the basement of the conference night venue) and we chilled to music and massages, while on Sunday, after a very tiresome day of cleaning up, the noticably lesser number of survivors hung out at the Forest Cafe for some so-so live music, few beers, and an early journey to bed, where a Dutch Muppet kept us entertained for at least another hour. The best about Monday, my day of return, must have been that the airline lost my backpack, which saved me from having to lug it around in Zurich, and made for a great moment on the phone with the baggage tracing service, who announced that my bags would be delivered in about 6 hours between 20:00 and 22:00 just as the door bell rang and the courier dropped off my bag. I'll be back in Argentina, unless something goes seriously wrong. And I'll be on the orga-team again. If you guys stop holding your meetings on Monday night. Thanks to everyone who made DebConf7 possible. I am proud to have been able to contribute, but the real work was done by a few others. You know who you are. NP: Solar Project: Five

28 June 2007

Jan Wagner: performancing.com and privacy

Today I was crawling through my mail logs for various reasons.
I was really surprised, that I saw a mail to a dedicated mailaddress which I’m using for communication with performancing.com. I was short checking, if this mailaddress is anywhere published at performancing.com, but couldn’t find anything. A one liner over the last week of mail logs:

# zgrep performancing /var/log/mail.info* grep clam wc -l
26 For a address only used for communicating with one organisation (used as contact mail address) this seems a bit too much traffic and this are only the mails, which was accepted by the MTA. So the questions comes to my mind …. what happens with the addresses at performancing.com? Maybe I missed something? , ,

Antti-Juhani Kaijanaho: The Dying Philosophers Problem

Reading a masters thesis draft that mentions the dining philosophers problem – a parable about the difficulties of process synchronization very well known in computer science – it occurred to me that it must not be a very good idea to eat just spaghetti (or just rice). I asked a nutritionist about it, and here is her answer. Even if they manage to avoid deadlock or livelock, dying of malnutrition is not going to be their first problem, go read the full story! [Typos and thinkos corrected after initial publication]

27 June 2007

MJ Ray: Never a frown with Gordon Brown?

Finally, Gordon Brown has eventually become the eleventh Prime Minister of Queen Elizabeth II, as expected for most of his ten years as finance minister. The opening of his first speech was drowned out on the BBC by helicopters, but it continued with
"This will be a new government with new priorities. [...] meeting the concerns and aspirations of our whole country. [...] I want the best of chances for everyone. That is my mission. If we can fulfil the potential and realise the talents of all our people then I am absolutely sure that Britain can be the great global success story of this century. [...] I will try to do my utmost" (full text from ePolitix)
but there are lots of questions left open about what his utmost will be. From whether we'll see more co-operative ministers, through environmental and free-software-related policies, to just how the "clunking fist" will deal with the "trojan tory" David Cameron leader of the opposition, it's all unknown just now. I think he's the first PM who could use a Stranglers track as his theme.

26 June 2007

Antti-Juhani Kaijanaho: Tux Games is a spammer

I received some time ago (don’t remember exactly when, I’ve since deleted that mail) a mail from Tux Games informing me that a mail that I (supposedly) had sent them is being held pending my confirmation that the message is not spam. Now, I have never ever before heard of Tux Games, so it seems likely that the message being held indeed is spam – and was not, in fact, sent by me. Email source forgery is trivial if you know how the system works, and spammers routinely forge email sender information. Tux Games is itself engaging in spamming by sending unsolicited confirmation mails to people. I replied to the mail saying so, and asking them to stop doing this. The message bounced. Today, I received another message from Tux Games. The original message is still in the queue, and has not been read by a human. I am asked to confirm it is not spam. It is tempting to do so.

18 June 2007

Jan Wagner: Booting Linux on Cisco 7513

Today I was reconfiguring a Cisco 7513 with a RSP 16 and a FastEthernet module inside.
So I did a “erase nvram” and a “reload”. After booting I was surprised to see the following in my Terminal:

Would you like to enter the initial configuration dialog? [yes/no]:
Loading pxelinux.0 from 10.42.10.50 (via FastEthernet4/0/0): !!!
[OK - 13156 bytes] So the box took an IP via DHCP and tried to netboot. (Un)fortunately it only breaks my terminal, so no worries! ;) , , ,

16 June 2007

Remi Vanicat: How I use git

Michael Janssen ask about workflow and git, so I will explain mine. I have three types of git repositories: For the first ones, I work like this: For the second type, well, it is only one project, and I work like that: When I decide to commit my job into the main repository, I then rebase the topic branch I want to commit from local to master, and use git-snv dcommit to commit everything into subversion.
I then rebase the local branch, over the new master, and rebase the different topic branch over the new local one.
In-this project, I also from time to time do some real history rewriting, changing the order of the commit, transforming two commit into one, or breaking one commit into several part, this kind of stuff. for the rest, those project are for now so simple or young, that the problem of the work flow is not one I’ve already have

Michael Janssen: Ask the Interwebs #1

Lately I have been thinking about switching source code management systems. In years gone by, I have used CVS, Subversion, arch, and most recently bazaar-ng for managing all the source code that I have to change. Lately I have been unhappy with the speed that bazaar takes to get some things done, and after watching a Google talk by Linus about Git, I thought I would give it a look.

I was surprised to find out that it actually models the way that I work normally slightly better than the bazaar model does. The main thing is that a repository holds a bunch of branches, but the working directory only has one of those branches checked out at any point in time. I use bazaar with about 4-5 branches per project, and only work on one of them at once (normally, sometimes I want to transport a bug across a couple branches) - so the "working space replaced by branch you want to work on" actually works out OK for me. I also need to collaborate with a bunch of projects at school and work that use other systems including CVS and Subversion, which Git seems to make it easy to do.

I did run into some questions that I don't really have a good answer to, however, therefore the new segment on the blog: Ask the interwebs. Normally I would just ask on some IRC channel, but the Minneapolis public library doesn't seem to allow anything but HTTP out. On to the question!

When using Git, how do you manage having multiple computers (at multiple locations) that you work on? I have approximately 5 different computers that I use regularly. Luckily I have enough space to have git installed on all of them, and I also have a web server that I can use WebDAV on if necessary. What I would like to have is a repository that I can pull from before I start work (if I am connected) and then push to when I finish so that the next computer I sit down at I can just pull again and get everyting. I would like this to include any branches I may have made on the first computer. Is this possible, hard, or easy for Git users? How much do I need to worry about slowdown? My WebDAV server is in the cloud, and I would prefer to be able to get up and go on say, a minute's notice.

I'm also interested on what your workflow is like even if it doesn't match the model I just described. I'm open to changing - the bazaar-ng to git change is big enough that I can probably incorporate a new workflow as well.

Comments: (8) Trackbacks: (1)

Comments
  1. adrian: hi, i'm a just a newbie so can't help much.
    You can host your push repository in http://repo.or.cz.
    If you prefer to do it your own you have git-daemon (Have a look to tutorials). Good luck!
  2. Michael Janssen: I looked at the public repo.or.cz, but decided against it, because while I want my branches to be available at some point, I'd rather not all of them at the same time. People randomly finding them is okay, but I'm sure I'll check in unworkable/uncompilable code in this state, because I would basically be using git as an easy sync between computers at times.

    I'm just really interested in how other people deal with this issue of needing semi-location-independent access to the branches.
  3. mike: Sounds already good for you to use git.

    Enjoy!
  4. R mi Vanicat: I haven't answer to the synchronization problem on my blog post because it is one I don't have. Still, you can make a git repository that can be pull and push from, and git can use https/dav or ssh or its on git protocol for this.

    Just read man git-remote, man git-push, man git-pull and man git
  5. JM Ibanez: Just upload a bare git repository (e.g. copy /.git in particular) to a server you have ssh access to. Then, in your working copy in git 1.5:

    <br />
      $ git remote add upstream git+ssh:///path/to/bare/git<br />
     


    You can then

    <br />
      $ git pull upstream .<br />
     


    or
    <br />
      $ git pull upstream/some-upstream-branch my-local-branch<br />
     


    or
    <br />
      $ git push upstream/some-upstream-branch<br />
     
  6. Josh Triplett: A followup to that: you can do the same thing without ssh access, by using WebDAV. See Documentation/howto/setup-git-server-over-http.txt in the Git source (also available various other places in other formats).
  7. Steven Walter: Whenever I want to create a non-local git repository for push, whether for sharing the code or just backing it up on another system, I follow this procedure:

    ssh remoteserver
    mkdir myproject.git
    cd myproject.git
    git --bare init --shared=all # world readable, group writeable
    chgrp -R git .
    vi description
    exit
    # back on local system
    git remote add origin git+ssh://remoteserver/path/to/git
    git push origin master:master
    git push origin branch2:branch2 # repeat for other branches

    You may then want to re-create your local branches so that they "track" the remote branches. "man git-branch" for more details on this.

    Hope that helps!
  8. brian m. carlson: For your workflow, you can try this:
    [geshi lang=sh]
    # first time on each machine only (you can use DAV, too)
    git remote add server git+ssh://server-hostname/path/project.git

    # every time
    git push server
    ssh anothermachine
    git fetch server
    git pull server branch-on-server-to-merge-from
    # merge happens; continue working
    # start over again from the push
    [/lang]
Trackbacks
  1. How I use git
    Michael Janssen ask about workflow and git, so I will explain mine. I have three types of git repositories: git-svn repositories where I don’t have write access on the upstream subversion repositories. git-svn repositories where I do have write ...

12 June 2007

Antti-Juhani Kaijanaho: Benja on denotational semantics

My friend Benja Fallenstein got carried away in the comment section of my latest post on recursion and wrote a tutorial on how it all relates to denotational semantics. It’s a shame it is buried somewhere in the comments, so I am reposting the comment here with Benja’s permission. The tagline is, Denotational semantics tutorials. It s the new monad tutorials!
Benja Fallenstein writes: Having read and understood [the] entire post, I can now summarize Antti-Juhani s complaint in a way that programmers with no theoretical background will understand: The definition is an infinite recursion. Sure, it s self-referential, but since it recurses forever, it doesn t actually define what recursion is! :-) That said, I find it kind of a pity to introduce all this theory without talking about why it nicely models the real world. Antti-Juhani argues that this pretty much the definition of popularized science, but I have to admit that, as definitions go, I like recursion: see recursion better. :) So let me have a quick go. [UPDATE: Didn t turn out to be quick at all. This is, in fact, as long as Antti-Juhani s original post. Proceed at your own peril.] All of this comes from denotational semantics, which is concerned with what expressions in a programming language mean and which ones mean the same thing. For example, 7 denotes the number seven, 7+2 denotes the number nine, and 5+4 also denotes the number nine. Now, here s the knotty problem. If we have f(x) = if x = 0 then 1 else x*f(x-1) then f(4) denotes the number twenty-four, but what does f(-2) denote? So, denotational semantics introduces a new, special value, recurses forever. An expression of type integer either denotes an integer, or, like f(-2), it denotes recurses forever. Now, about these partial orders. (Reminder: A partial order says, for every pair (x,y) of elements of a certain set, that x is smaller than y, equal to y, larger than y, or incomparable to y.) Here is Benja s guide to what the partial orders of denotational semantics mean: Let s say that you write a program where, in one place, you can plug in either x or y. If you can write such a program that prints foo when you plug in x and prints bar when plug in y, then x and y are incomparable. If you can t do that, but you can write a program that prints foo when you plug in y, and recurses forever when you plug in x, then x is smaller than y. If every program you can write will do the same thing whether you plug in x or y, then x and y are equal. (We ignore details like out-of-memory errors and *how long* a program takes to do something.) Examples: - 5 and 7 are incomparable. Proof: if ___ == 5 then print foo else print bar . - f(-2) f(2). Proof: if ___ == 2 then print foo else print foo if you plug in f(-2), this will loop forever, if you plug in f(2), it ll print foo . - (5+2) = 7. Whatever program I write, it will do the same thing, no matter which of these expressions I plug in. Now, with expressions of type integer, the resulting partial order is: Recurses forever is smaller than everything else. All other values are incomparable. Recall from Antti-Juhani s post that the bottom element ( ) is defined to be the smallest element of a mathematical universe (if such a beast exists). Since recurses forever is smaller than everything else, it s the bottom element of this universe. That s what denotational semantics calls it. (Haskell, too.) Of course, this partial order is kind of boring (the technical term is flat ). It gets more interesting when we consider functions. In general, we can talk about functions from values of type S to values of type T, where we already know the partial orders of S and T. In particular, we can talk about functions from integers to integers. Now, if you can find an x and a program that prints foo when you plug in f(x) and bar if you plug in g(x), then you can write a program that prints foo when you plug in f, and bar when you plug in g. (Exercise! ;-) ) Further, denotational semantics wants applying a function to a parameter and then doing something with the result to be the *only* way you can get information about a function. No f.get_function_name, please. (If your programming language has that, you can t map the functions of your programming language 1:1 to the functions of denotational semantics.) By my rule above, this implies that f = g if and only if f(x) = g(x) for all x. Since formal theories can t have fuzzy stuff like my rule, denotational semantics takes this as the *definition* of the partial order on functions. The bottom element of this mathematical universe, then, is the function that always returns bottom, no matter what it is given or in other words, a function that recurses forever, no matter what parameter you pass to it. (Side note. Denotational semantics allows only monotone functions that is, if x = y, then f(x) = f(y) for all f, x, and y. That s an example of how all these definitions allow us to make formal statements about the real world. In the real world, if you can find a function f and a program that prints foo when given f(x) and bar when given f(y), then you have a program that prints foo when given x and bar when given y so if f(x) and f(y) are incomparable, then x and y must be incomparable, and the other way around, if x and y are comparable, then f(x) and f(y) must be comparable, too. (This reasoning doesn t exclude the case that x = y and f(x) >= f(y). If you really care, prove it yourself. :) ) This ends the side note.) Recall, now, Antti-Juhani s definition of recursion: An equation of the form x = some expression (which may contain x), interpreted as a recursive definition, defines x to be the smallest value satisfying this equation. The models constructed in denotational semantics have the property that for any equation of this form, the set of values satisfying it does have a smallest element, so x is well-defined no matter what the equation is. It s important to note that this does not mean that x has to be bottom, because there are equations to which bottom is not a solution. Let s look at a slightly simpler example than the one Antti-Juhani gave. f(x) = if x = 0 then 0 else f(x-1) We have f(0) = 1, but bottom(0) = bottom, so f can t be bottom. The equation has more than one solution, though. It is satisfied by a function that returns 0 for x >= 0 and returns bottom (recurses forever) for x 0; but it is also satisfied by a function that returns 0 for every input. And by an infinite number of functions that return 0 for some negative inputs and bottom for others. We want the first of these solutions, of course, because that s what we get if we interpret the equation as a computer program, and computer programs are what we re trying to model. But we re in luck: The first solution is smaller than all the other ones, because for all inputs, they either return the same value, or the solution we want returns bottom and the solution we don t want returns 0 (and bottom 0). The point of it all is, of course, that when we interpret an equation as a computer program, we always get the least value satisfying the equation (if we use a partial order that follows my rule, above). And that, my friend, is denotational semantics.

MJ Ray: When did foo(l) join the debian project?

In response to John Goerzen's question, I'd try the following steps: Check keyring.debian.org/changelog - this will give a near-definitive answer for all DDs joining since 19 Jan 1998. If that fails, check the web archive copies of the 1997 debian people page to find out when they first appear and which packages to check. Check as many package changelogs as possible on the package tracking system and the rest on the debian archive to find the earliest entries. (Update: for completeness, check the signature on the matching dsc and its key creation date.) Then look in their $HOME on master for the earliest timestamp. And finally, search list archives and the web for any welcome message (rare), the first use of their @debian.org address, or a signature where they claim to be a debian developer. Any other ways to guess the date?

Antti-Juhani Kaijanaho: On recursion

Note: This entry has been edited a couple of times (and might be edited in the future) to remove errors. Thanks to Benja Fallenstein for critique. My previous post about recursion drew some comments. This is a topic that frequently confuses me, and there is a lot of confusion (some of it mine) in the blog post and its comments. On reflection, it seems prudent to examine what recursion really is. Consider the following recursive definition: 0 is an expression; if T is an expression, then sT is an expression; nothing is an expression that doesn’t have one of these two forms. Now, it is clear that 0 is an expression. It is equally clear that sssssK is not an expression. In some applications, it makes sense to consider infinite expressions like “…ssssss0“; that is, an infinite number of ss before the final 0, and in others it doesn’t. Is that infinite utterance and expression? It does have one of the forms given in the definitions, so it is not forbidden from being an expression, but neither is there anything in the definition requiring that it is. It is helpful to do this a bit more formally. Let us translate the self-referential definition into a set equation: The set of expressions is the set E that satisfies the equation

E = 0 ∪ se e ∈ E

But this definition is bogus! There are more than one set E that satisfies the equation, as remarked above, and thus there is no “the set E”! We need to fix the definition in a way that makes the set E unique. The key question is, do we want to regard the infinite utterance discussed above as an expression. It is simplest to just say “the set of expressions is the smallest set E that …” if we want it to not be an expression, and if we want it to be an expression we should say “the set of expressions is the largest set E that …” Let us make the following definitions:
Consider the set equation S = … S …, in which the set S is alone on the left-hand side and occurs at least once on the right-hand side. This equation is a recursive definition of the smallest set S satisfying this equation, and a corecursive definition of the largest set S satisfying this equation.
Thus, a definition like

E = 0 ∪ se e ∈ E

is not recursive because of its form; it is self-referential. By itself, it is an ambiguous and thus bogus definition. We use the words “recursive” and “corecursive” to indicate the intended method of disambiguation. A rather nice example of this can be seen in the treatment of algebraic data types in strict (ML-style) and nonstrict (Haskell-style) functional programming languages. Consider the declaration (using Haskell syntax)
data IntList = Nil   Cons Int IntList
This can be read as a set equation as follows:

IntList = Nil ∪ Cons n x n ∈ Int ∧ x ∈ IntList

Now, as a recursive definition, it is restricted to finite lists as found in ML, but as a corecursive definition, it also allows infinite lists as found in Haskell. (It unfortunately fails to address the question of bottom-terminated lists, which also can be found in Haskell.) As it happens, the technique is not limited to set definitions; but to generalise it, we need to discuss a bit what we mean by the terms “smallest” and “largest”. In a set context, a set is smaller than another set if it is the other’s subset. Notice how this makes the ordering partial, that is, there are sets that are not comparable (for example 1 and 2 ; neither is smaller than the other, but neither are they equal). A collection of sets does not necessarily have a “smallest” set (that is, one of the sets that is a subset of all the others). However, we can always find the lowest upper bound (”lub” or “join”) of a collection of sets as the union of the sets, and the greatest lower bound (”glb” or “meet”) as the intersection of the sets, and if the lub or glb is itself a member of the collection, it is the smallest or largest set of the collection. Haskellists will find things instantly familiar when I say that the smallest element of a mathematical universe (if it exists) is called bottom and is denoted by ⊥; somewhat less familiar will be that the greatest element (if it exists) is called top and is denoted by ⊤. A partial function is any function that needs not be defined everywhere. For example, f(x) = 1/x is a partial function on the reals (it is not defined for x = 0). We can form a partial ordering of (partial) functions having the same domain and codomain by specifying that f is smaller than g if f(x) = g(x) for all such x that f(x) is defined. Sometimes it will make sense to specify that f is smaller than g if f(x) is smaller than g(x) for all such x that f(x) is defined. Now, it happens that all collections of functions have a lub; and in particular, the partial function that is defined nowhere is the smallest function (the bottom function). Now, with this definition of “ordering” of functions we can apply the definitions of recursion and corecursion to functions. For example, consider f(x) = f(x) + 1. The bottom function (defined nowhere) qualifies, since undefined + 1 is undefined; thus it is the smallest solution to the equation and thus this equation is a recursive definition of bottom. However, consider f(x) = if x = 0 then 1 else x*f(x-1): any solution to this equation must have f(0) = 1 and thus the bottom function is disqualified. In fact, the smallest solution is the factorial function, and thus the equation is a recursive definition of factorial. In the comments to my previous entry, I was asked whether the Haskell definition “ones = 1 : ones” is recursive. Of course, the question in itself is nonsensical; whether it is a recursive definition or something else (such as corecursive) depends on what the programmer intends. I will interpret this question as whether the equation is a recursive definition of the intended result, the infinite list of all ones. First, observe that we can order Haskell lists (including the special “undefined” list) partially as follows: l1 is smaller than l2 if l1 is undefined, if they both are empty lists or if a) the first element of l1 is smaller than the first element of l2 and b) the tail (the list with the first element removed) of l1 is smaller than the tail of l2. The undefined list does not qualify as a solution for “ones = 1 : ones”. No finite list qualifies either. The infinite list of all ones does qualify, and it is the only solution; hence, the equation is a recursive definition of the infinite list of all ones; it is also a corecursive definition of the same list. Finally, let us consider the question that started it all: what should we make of the definition “recursion: see recursion”. First, note that a equation x = x admits all elements of the universe as a solution; hence, the proper reading of “recursion: see recursion” as a definition is that it is ambiguous and hence bad. It is a recursive definition of the bottom element of the universe (whatever that might be for a dictionary), and a corecursive definition of the top element of the universe (whatever that might be). In any case, it does not define recursion (unless of course, the concept of recursion is the smallest or the largest concept in the universe of concepts).

11 June 2007

MJ Ray: Stopping the Nixforce.com Sploggers

I asked: Should we try to stop them, or just post that "Nixforce look like an unscrupulous load of swines trying to trade on Debian Developer names without permission" all over their site? Paul wrote:
"They are violating Google's Adsense policies by inviting people to click on their ads on their front page ("If you dont want to enter, at least go to one of our Advertisers below"). You could, at the very least, have this line of their income terminated by reporting them here "
Works for me. It said they'll respond within 24 hours. Brandon Holtsclaw suggested:
"Or set something to look for the referer pulling the feed and redirect just that nixforce domain to a 404 or some nasty pr0n feed :) just a thought."
I would, but I think most things will fail to pull if I send a 40x and I can't think how to do a redirect or proxy neatly without messing with RewriteRule or similar - nixforce aren't worth messing with RewriteRules. I also suspect they're pulling from Planet Debian, rather than my web host, so if I made a mistake, I'd be very unpopular. Also: Russell Coker and Antti-Juhani Kaijanaho

Russell Coker: Nixforce unauthorised use

Just over two days ago I sent a DMCA take-down request to nixforce.com for copying my content in violation of the non-commercial license that I offer, I have not had a response from them and they have kept mirroring my site. I have just sent a DMCA take-down to tierzero.net which appears to be their ISP. The email address listed in the whois record for that ISP bounces as does the postmaster address. It seems that I’m not the only person with this problem, Antti-Juhani Kaijanaho is also having problems with them. Any suggestions on how to deal with them would be appreciated. One possibility that I will eventually persue is to file a DMCA request with Google, this can result in their Google Adwords account being terminated.

Next.

Previous.