Wednesday·10·August·2011
git $something -p //at 16:09 //by abe
git add -p
is one of my favourite git features. It lets you selectively
add the local changes hunk by hunk to the staging area. This is
especially nice if you want to commit one change in a file, but not a
second one, you also already did.
Recently I noticed that
you can also selectively revert changes already in the staging area
using git reset -p HEAD
. The user interface is exactly
the same as for git add -p
.
Today I discovered another selective undo in git by just trying it out
of curiosity if that works, too: Undoing local changes selectively
using git checkout -p
. Maybe less useful than those
mentioned above, but nevertheless most times quicker than firing up
your favourite editor and undoing the changes manually.
Another nice git feature which I discovered by accidentially using it
(this time even unwittingly) is git checkout -
which
behaves like cd -
, just for branches instead of
directories, i.e. it switches back to the previously checked out
branch. Very useful for quickly changing between two branches again
and again.
Tagged as: CLI, git, HTH, identi.ca, UUUCO
// show without comments // write a comment
Related stories
Friday·15·October·2010
Thoughts on Gitorious and GitHub plus a useful git hook //at 11:36 //by abe
When I took over the developement of xen-tools, I looked around for an appropriate git hosting. I especially had a look at GitHub and Gitorious.
If you just regard the features, GitHub is definitely more targetted on single developers and Gitorious more towards projects:
At GitHub, every repository has its URL under the URL of a user page which makes it nearly impossible to have user independent, “official” repositories for projects which have more than one official developer.
At Gitorious, every hosted repository needs to belong to a project, even if it’s only a published configuration. But a project can have more than one git repository. You only seem to be able to have personal repositories if you clone some existing Gitorious repository.
So from a feature point of view, the xen-tools git repositories fit way better to Gitorious’ hosting while the git repositories with zshrc, conkerorrc and desktop configuration files defintely have a more fitting addresses on GitHub, in my case http://github.com/xtaran/$repository. On Gitorious, they are now together under a “project” called “Axel’s configuration files” at http://gitorious.org/abe which contains git repositories of my on grml’s .zshrc based .zshrc, my configuration for Conkeror and all the files necessary for my ratpoison/xmobar based netbook/laptop desktop.
I though feel a little bad for giving the project the very short “slug” name “abe” instead of “abe-config” (as I did initially) since “abe” is IMHO not a proper “project name” for my configuration files and possibly other projects would have a more reasonable claim for that project name on Gitorious. But that way it suites more its purpose: Gather some of my git repositories which don’t belong to a proper project.
But there’s another important point when comparing Gitorious and GitHub: Free Software needs free tools as Benjamin Mako Hill posted recently on Planet Debian. Despite my (probably well known) distrust against Google and therefore also Google Code, and despite knowing the history of SourceForge becoming non-free, I was not that much aware that GitHub’s software is only partially open source and therefore also not free software while Gitorious is both as it’s licensed under the GNU Affero General Public License (like StatusNet/identi.ca for example) which is basically GPLv3, but its ideas applied to hosted web applications scenario (where the GPL itself doesn’t grasp), too.
Initially I just had the xen-tools git repositories on Gitorious and all my small one-repository “projects” as copies of the repositories on my own git server on GitHub to get some more publicity for them and allow “social cloning”. After reading Mako’s article, I decided to at least have repository clones on Gitorious of all repositories I mirror at GitHub, too.
That way I force nobody to use the non-free tools on GitHub for
“social cloning” one of my git repositories. And of course I have
copies of my code somewhere on the net as backup. Or to say it with
Linus Torvalds’ (slightly updated) words: Only wimps use tape
backup: real men just upload their important stuff on git, and let the
rest of the world clone it.
;-)
But isn’t that tedious to always push your code to three repositories?
No, it isn’t. I just push my code to git.noone.org where I have configured the according remotes and
the following post-receive
hook:
#!/bin/sh read oldrev newrev refname git push gitorious ${refname:t} git push github ${refname:t}
The only other thing necessary is to use ssh-agent and SSH agent
forwarding to at least the host you’re pushing to.
Tagged as: .zshrc, abe, Agent Forwarding, AGPL, Conkeror, Free Software, git, GitHub, Gitorious, gitweb, Google, Google Code, GPL, grml, Hook, Hosting, identi.ca, Linus Torvalds, mako, non-free, Open Source, Planet Debian, Ratpoison, Real Man, Social Coding, Social Networking, SourceForge, SSH, ssh-agent, StatusNet, xen-tools, zsh
// show without comments // write a comment
Related stories
Sunday·08·March·2009
Sedating irssi’s nick highlight for microblogging messages //at 17:13 //by abe
My favourite IRC client is irssi. I like it so much that I even use it for all my instant messaging needs. The gateway of choice between irssi and mostly Jabber is Bitlbee.
I also microblog on identi.ca, a free (free as in AGPL) microblogging service based on laconi.ca. In comparsion to the non-free and proprietary Twitter microblogging, identi.ca has all the features which Twitter turned off already again.
For me the most important feature of Twitter was tweeting via XMPP (aka Jabber). Since Twitter turned off that feature, Twitter increasingly fast became unimportant for me. Identi.ca still has this feature and cultivates it further. So usually don’t visit the identi.ca website that often anymore but get the microblogging stream of my friends via XMPP and Bitlbee directly into my irssi.
Although this is very convenient, it has one big disadvantage: In comparison to an IRC channel, not only notices directed to me personally but every incoming notice beeps, because Bitlbee sends them either as /MSG or prepends my nick name. For normal IRC communication /MSG should beep, and you can’t make exceptions for that so easily in irssi.
I asked on #bitlbee (OFTC) and on #irssi (IRCNet). On #irssi funnily the first answer was “I tried that yesterday, no success” from Shrike. — So I’m not alone, although Shrike uses Jaiku and not identi.ca. Then I had the idea to get Bitlbee to not prepend my nick name for all those identi.ca notices which go into the &bitlbee channel — but I didn’t find a way to configure this in Bitlbee. But Shrike found a way to do this with already existing irssi plugins:
The trigger.pl plugin (available e.g. in Debian’s irssi-scripts package or on scripts.irssi.org) can add triggers which replace parts of the message. So the following three lines helped me to reduce the noise microblogging causes in my irssi:
/script load trigger /trigger add -publics -masks 'identica!update@identi.ca' -channels '&bitlbee' -regexp "^XTaran: " -replace '' /trigger save
And on the command line I just needed a symlink to automatically start the trigger plugin on irssi startup:
ln -vis /usr/share/irssi/scripts/trigger.pl ~/.irssi/scripts/autorun/
So now again only the important messages beep. :-)
Tagged as: #bitlbee, #irssi, AGPL, Bitlbee, deb, highlight, identi.ca, IM, IRC, IRCNet, irssi, Jabber, jaiku, laconi.ca, microblogging, OFTC, Perl, plugin, Shrike, trigger, Twitter, XMPP
// show without comments // write a comment
Related stories
How to make identi.ca talk //at 15:08 //by abe
The listeners of yesterday’s episode of Venty’s Hackerfunk radio show on Radio LoRa already know and heard it: We made identi.ca talk. And we did it with help of other microbloggers. (The podcast version of this Hackerfunk episode will be online in a few days, too. Will link it here and either Venty or me will post it on identi.ca, too, as soon as it’s published.)
A few weeks ago we thought about how we could “show” microblogging on the radio. With identi.ca’s Jabber (XMPP) interface we have real time access, and so the idea was born to pipe all incoming ‘dents into a speech synthesis system.
Then we tried to figure out which tools would be appropriate. Quite fast, people on identi.ca as well as on the LUGS IRC (e.g. bones0) pointed us to festival and espeak. We found no support for German in festival, so we went for espeak – although festival would have had the advantage of the existence of a festival plugin for the popular multiprotocol messenger Pidgin.
Next step was more difficult than expected: How to make a “tail -f” of XMPP incoming messages? Something like rsstail, just for XMPP. Although using the IM to IRC gateway Bitlbee (as I use it myself) and using “tail -f” (or better “inotail -f”) on the IRC client’s log file (ii comes to my mind for such purposes) would have been an option, nobody had the idea at that time.
And since @deepspawn conjured xmpptail in less than two hours we happily took it. xmpptail (tar.gz) is written in Python and uses Twisted Words (Debian package python-twisted-words) as XMPP libraries.
I had to patch xmpptail slightly for unbuffered I/O, Unicode support and for removing things we don’t want to hear on the radio as follows, but it worked more or less out of the box.
--- xmmptail.py 2009-02-25 20:47:48.000000000 +0100 +++ xmpptail.py 2009-03-07 18:48:57.000000000 +0100 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python -u # -*- coding: utf-8 -*- # author: Carlos A. Perilla# This file is part of Jance bot. @@ -65,7 +65,8 @@ body = unicode(e.__str__()) break - print("%s: %s" % (from_id,body)) +# print("%s: %s" % (from_id,body)) + print("%s" % (body.encode('utf-8'))) def authfailedEvent(xmlstream): @@ -80,9 +81,9 @@ dprint('Got something: %s -> %s' % (el.name, str(el.attributes))) if __name__ == '__main__': - print "Starting" + #print "Starting" execfile('tailconf') - print USER_HANDLE + #print USER_HANDLE me = USER_HANDLE + "/xmpptail" myJid = jid.JID(me) server = USER_HANDLE[USER_HANDLE.find('@')+1:]
So after configuring xmpptail to use the hackerfunk Jabber account, we successfully ran the following script during the radio show:
./xmpptail.py | while read LINE; do if [ "$LINE" = "empty" ]; then continue; fi; echo $LINE echo $LINE | tee -a xmpp-espeak.log | espeak --stdin -v de; done
At the end of the show, @rebugger found this howto which describes very detailed how to get festival working together with the non-free (“non-free” as in DFSG) MBROLA project which offers also the appropriate files for German. But because of how much work this would be to get it running, I currently prefer to stay with espeak for German speech synthesis .
Next step would be to use mnoGosearch’s mguesser to detect the language of a dent and run espeak (or whatever text-to-speech system is appropriate for the guessed language) with the appropiate options for that language, because otherwise many ‘dents sound really funny. ;-)
Update, 15:02: Venty gave the whole system the
name “Identibla”.
Tagged as: Bitlbee, bones0, deepspawn, DFSG, espeak, festival, Hackerfunk, identi.ca, identibla, ii, IM, inotail, IRC, Jabber, language detection, LoRa, MBROLA, mguesser, microblogging, mnoGosearch, non-free, Pidgin, pipe, Python, radio, rebugger, speech synthesis, tail, text to speech, tts, Twisted Words, Venty, XMPP, xmpptail
// show without comments // write a comment
Related stories
Wednesday·11·February·2009
OMG, they killed del.icio.us! You bastards! //at 01:15 //by abe
Yeah, it happened already a while ago, but I still get angry about it, so I need to rant about it in my blog:
Yahoo!, the owner of del.icio.us, recently renamed the cool old del.icio.us to the no more cool and two bytes longer delicious.com. WTF? Part of del.icio.us’ popularity was its cool host name, why drop that? And even if a few dumbasses don’t understand the wordplay on the perfect host name, they could have offered delicious.com as a second domain name which works in parallel.
But no, they dropped the good old del.icio.us in a way so that all old bookmarklets, bookmarks, plugins, etc. don’t work right anymore and I need to login each time I want to save a bookmark on all browsers where I once was logged in on the old site even if I’m already logged in at the new site in the same browser session. delicious.com sucks.
And no, I don’t let count Gabor’s argument that people have difficulties with domains like
del.icio.us
, since many sites are well known or can be
easily remembered because of their creative host or domain
name: del.icio.us, script.aculo.us, wua.la, identi.ca, certifi.ca, laconi.ca, cr.yp.to, pix.ie, buenz.li (Swiss German), go.to, bit.ly, chickensh.it, gibts.net (German), doma.in, moinmo.in, etc.
No wonder, Montenegro sells many
second level domains under their top level domain .me as “premium
domains”.
Tagged as: 1337, bit.ly, buenzli, certifi.ca, chickensh.it, del.icio.us, djb, doma.in, domain, dotcom, fuck.me, gibts.net, go.to, identi.ca, laconi.ca, OMG, Other Blogs, rant, rename, script.aculo.us, sucks, WTF, wua.la, Yahoo!
// show without comments // write a comment
Related stories
Friday·23·January·2009
MBC09: The Day Before //at 14:04 //by abe
Helped my parents moving the first half of the week. Left there at Thurdays around 9am. Drove 45min to Zurich. Removed everything bicycle related from my daypack. Left the TomTom at home. (Google Maps on the E51 has to sufficed and sufficed so far.) Crammed cloths for three days in.
Was at Zurich Main Station around 11:40am. My plan was to take the direct ICE train from Zurich to Hamburg Dammtor. Bought a Rivella for the journey.
First suprise at the platform: No ICE train. Instead a Swiss InterCity. The staff told us due to a defect in the ICE train, we have to go to Basel SBB with this train, then switch trains there. No carriage numbers and reservations valid here. Hrmpf. For luck, there where not that many people in the train. No power sockets though.
Next surprise at Basel SBB: No ICE train here either. We’re advised to switch to a German InterCity and then switch again a few kilometers later at Basel Badischer Bahnhof (aka “Basel, German Station”).
There then finally waited an ICE labelled as the initially expected ICE 72 from Zurich to Hamburg Altona. Even the reservations were displayed, departure was though 20min later than the original ICE 72.
The voice from the speakers told us that this is a replacement train which came empty from Zurich. WTF? The next time the voice explained the situation, it was a replacement train coming from Interlaken… Ok, DB is not as insane as I believed for about half an hour. ;-)
Worked though the git tutorial and the git glossary on the train since in future I’ll use git in some of the OSS project I’m working together with — Conkeror beyond others. Also had a conversation with some doctor from University Hospital Zurich who has chasing as hobby. (WTF?)
The train arrived about 45 minutes late at Dammtor, so I first checked in in my hotel (“Hotel am Dammtor”, very close to the MBC09 venue) and then walked to Hamburger Botschaft where the twitter reading was already running, hoping to meet someone I know and having dinner afterwards. Guided by Google Maps on my Nokia E51 it took longer than expected to walk there. And it was windy and raining.
The twitter reading venue was quite full, but I still found a place where I saw most of the screen. At least the reminder of reading was quite funny: #famouslasttweets. They closed with a tweet similar to “And then there’s also identi.ca”. :-)
I was told it wasn’t that funny at the beginning. Didn’t find anyone I really knew, just sticked to a group talking about being hungry. When we met @igorette on our way to some restaurant and he recognised me, I found out that @muhh was also in the group I’m heading though Hamburg.
We had a nice dinner at Schmitt Foxyfood, I had GrillGold (Pommes Frites) with WuchtBrumme (Currywurst) and Fritz Cola.
After dinner, @moeffju drove me and some other guy to our hotels.
So the first evening was already very interesting despite the usual
lateness of Deutsche Bahn.
Tagged as: Basel, Conkeror, DB, Event, Hamburg, Hotel am Dammtor, ICE, identi.ca, igorette, MBC09, Microblogging, moeffju, muhh, Other Blogs, Twitter, twitter reading, Twitterlesung, WTF, Zurich
// show without comments // write a comment
Related stories
Monday·19·January·2009
Traveling plans for the first half of 2009 //at 16:12 //by abe
Since the time between the years is traditionally family time for me, I never were at the Chaos Communication Congress. So I wasn’t at 25C3 either. All the more I look forward to HAR2009 this summer (13th to 16th of August near Vierhouten in the Netherlands), but also because, for the last three years I always have been in the Netherlands for one week in summer, sailing with friends on the IJsselmeer.
But before HAR2009, there will be a bunch of other events to visit and people to meet in real life:
- I’m looking forward to see @evan, @cemb and many other identicatis in real life at Microblogging Conference ‘09 in Hamburg next week on Friday and Saturday (23rd and 24th of January). Will go there by train.
- Two weeks later there will be FOSDEM in Brussels (7th and 8th of February) where I hopefully will meet Savago from the Amora Project and many other friends from the FOSS community. Will go there either by train or car.
- On 14th and 15th of March, the Chemnitzer Linux-Tage take place. I’ve submitted two talks for beginners and will be there with the usual suspects from Symlink (Venty, dino and P2501 so far). We’ll go there by train.
- Luckily not overlapping with the VCFe this year is the SPEZI at Germersheim near Karlsruhe which takes place on 25th and 26th of April. I plan to go there, maybe by train and Brompton, but nothing yet sure.
- The, one week later over the long weekend around the 1st of May there will be Vintage Computer Festival Europe (VCFe) 10.0 at Munich featuring Raffzahn. Will be there with the usual suspects. I’ll maybe prepare an exhibition (“Debian on dead hardware”, i.e. PowerPC, Sparc, Alpha, etc. or so) or a talk, but not yet sure. Will go there by (vintage) car as usual.
Then there will be the big summer holidays driving around in the middle of Europe with the 2CV and taking part in most likely:
- Sailing with friends from 31st of July to 7th of August,
- HAR2009 one weekend later, and
- FrOSCon at St. Augustin near Bonn another weekend later.
This also means that I’ll probably miss:
- DebConf 9 at Extremadura (Spain) from 16th to 30th of July (can’t get so fast from Spain to neither the Czech Republic nor the Netherlands with the 2CV),
- The 18th International 2CV Meeting at Velebudice, Czech Republic from 28th of July to 2nd of August (overlaps with sailing)-:, and
- Bünzli 18 from 14th to 16th of August at Winterthur, Switzerland (overlaps with HAR2009).
… at least unless one of the other events I plan to visit doesn’t take place as expected or my plans change heavily.
P.S.: Anyone thinks this amount of events justifies a Dopplr account? ;-) Or is there
somewhere a free online service similar to Dopplr, but runs software
under the GNU Affero General Public License like e.g. identi.ca and
many other Laconica instances do for microblogging?
Tagged as: 2009, 25C3, 2CV, @cemb, @evan, AGPL, Alpha, Amora, Brompton, Brussels, Bünzli, camping, CCC, Chemnitz, christmas, CLT, Czech Republic, DebConf, Debian, dino, Dopplr, Event, Events, Extremadura, FOSDEM, FrOSCon, hacking, HAR2009, holidays, identi.ca, IJsselmeer, Laconica, MBC09, microblogging, München, Open Source, P2501, PowerPC, Raffzahn, RL, roquas, sailing, Spain, Sparc, Spezialradmesse, summer, Symlink, The Netherlands, usual suspects, VCFe, Ventilator, Winterthur
// show without comments // write a comment