Ogólne »

[25 kwietnia, 2005 | 3 komentarze | Poziom: 0 ]

Znalazłem na sieci śliczny skrypcik do archiwizowania repozytorium svn:

#!/usr/bin/python

# script to backup SVN repos at a given time from the last revision number
# Greg Loscombe

import os
import sys

debug = 0


# build a list of projects and what the last revision backup

basedir = "/home/subversion/basedir"
basebackup = "/var/log/svnbackup"
revlogfile = "/var/log/svnbackup/last_rev" 
projects = {}
something_dumped = 0

def get_youngest(proj):
   youngest_cmd = "/usr/bin/svnlook youngest " + basedir + proj
   if ( debug == 1):
      print "command:", youngest_cmd
   cmdout = os.popen( youngest_cmd )
   rev_youngest = cmdout.read()
   rev_youngest = int( rev_youngest.strip() )
   cmdout.close()
   return rev_youngest

def dump_incremental(base, proj, rev_from, rev_youngest):
   location = base + proj + ".dump." + str( rev_from ) + "-" + str(rev_youngest )
   if ( debug == 1):
      print "Location dumped too", location
   incremental = "/usr/bin/svnadmin dump --incremental " + basedir + this_proj + " -r " + str( rev_from ) + ":" + str( rev_youngest ) + " > "+ location
   cmdout = os.popen( incremental )
   cmdout.close()
   if ( debug == 1):
      print "Command incremental dump:-", incremental

def update_log():
   revfile = file( revlogfile, "w")
   for this_proj in projects.iterkeys():
      revfile.write( this_proj + " = " + str(projects[this_proj]) + "\n")
      if ( debug == 1):
         print "New log:-", this_proj + " = " + str(projects[this_proj]) + "\n"
      print this_proj + " = " + str( projects[this_proj] )
   revfile.close()

def update_error_log(message):
   errorfile = file( "/var/log/svnbackup/error_log", "a")
   errorfile.write( message )
   #errorfile.write( proj + ":" + str( updated_rev ) + ":" + message )
   #add more stuff here soon
   errorfile.close()

#def update_access_log(message):
#this will print things like last run etc

# main part now, lets get all the old revision numbers we backed up

revfile = open( revlogfile )

while 1:
   line = revfile.readline()
   if line == "":
      break
   if ( ( line.startswith("[") or line.startswith("#") ) is False ):
      proj, last_rev = line.split(' = ')
      last_rev = last_rev.strip()
      projects[proj] = int(last_rev)

revfile.close()

# lets get the new youngest and compair, if its newer, then do a incremental dump
# if its older than the last log, we have a problem, log it
# if its the same nothing happens
# if its never been dumped, time for a full dump
for this_proj in projects.iterkeys():
   rev_youngest = int( get_youngest(this_proj) )
   rev_old = int( projects[this_proj] )
   if ( debug == 1 ):
      print "this project", this_proj, "old revision", rev_old, "youngest", rev_youngest

   if ( rev_old > rev_youngest ):
      errmessage = "logged backed up revision " + str(rev_old) + " > youngest current revision " + str(rev_youngest) + "\n"
      #update_error_log(this_proj, rev_youngest, errmessage)
      update_error_log(errmessage)

   elif ( rev_old == 0 ):
      print "First time dump, do it all for", this_proj, "upto", rev_youngest
      dump_incremental(basebackup, this_proj, 0, rev_youngest)
      something_dumped = something_dumped + 1
      projects[this_proj] = int(rev_youngest)

   elif ( rev_old < rev_youngest ):
      print "Update for project", this_proj, "upto", rev_youngest
      rev_from = rev_old + 1
      dump_incremental(basebackup, this_proj, rev_from, rev_youngest)
      something_dumped = something_dumped + 1
      projects[this_proj] = int(rev_youngest)

   elif ( rev_old == rev_youngest ):
      print "Revisions have not changed for project", this_proj

# if something changed then its time to update the last logged file
if ( something_dumped > 0 ):
   print something_dumped, "repos have changed since last dump"
   update_log()
else:
   print "Nothing has changed, nothing done"

# the end

W pliku /var/log/svnbackup/last_rev należy umieścić nazwę repozytorium i numer ostatniej zarchiwizowanej wersji, np.:

/jaxmpp = 0
/proplan = 0

Całość dodać można sobie do crona, i już mamy eleganckie, przyrostowe backupy repozytorium.

Ogólne »

[22 kwietnia, 2005 | Dodaj komentarz | Poziom: 0 ]

Dwa dni walczyłem z konfiguracją Springa chcąc włączyć kontrolę dostępu do beanów w kontenerze. Dziś zdenerwowałem się, podłączyłem debugger do JBossa i zacząłem wszystko wykonywać krokowo. Po kilku próbach powiązanych z przecieraniem oczu ze zdumienia, dostrzegłem to! Jeden z niepasujących do siebie łańcuchów wyglądał tak: "ROLE_SUPERVISOR", a drugi tak: "ROLE_SUPERVISOR ".
Dwa dni z życiorysu przez jedną spację, która znalazła się w pliku konfiguracyjnym!

Jak widać, nowoczesne technologie i inne wynalazki nie ochronią nas przed najstarszymi błędami programistycznymi.

Ogólne »

[18 kwietnia, 2005 | 4 komentarze | Poziom: 0 ]

Ostatnio, przy wylogowaniu z systemu transakcyjnego, mój bank poprosił mnie o wypełnienie ankiety. Czemu nie? Wypełniam. W pewnym momencie patrzę na ekran i co widzę? Widzę pytanie o system operacyjny jakiego używam przy załatwianiu spraw bankowych, Oprócz wszystkich wersji windows znajdowała się tam również pozycja "Linuks".

Nie byłoby w tym nic dziwnego, gdyby nie to, że jakiś czas wcześniej dostałem od banku odpowiedź tej treści:

Witam serdecznie, system Pl@net został stworzony i testowany do współpracy z systemem Windows i tylko w zakresie tego systemu bank świadczy pomoc techniczną. Jeżeli chodzi o system Linux, ze względu na jego liczne odmiany , jak również na to że sieć banku działa na platformie Microsoft nie jesteśmy w stanie zagwarantować poprawnej współpracy systemu Pl@net z tym system opreracyjnym, jak również technicznej asysty. Z poważaniem , [imię] [nazwisko]

Problemy dotyczące pracy na Linuksie dotyczą głównie spieprzonych appletów. Jak widać, nawet w Javie da się napisać applety, działające tylko pod windą.

Muszę szybko zmienić bank. Tylko na jaki? W tym można było wypłacać gotówkę bez prowizji we wszystkich bankomatach.

Ogólne »

[13 kwietnia, 2005 | 4 komentarze | Poziom: 0 ]

Mam trochę gotówki. Ale nie kupię sobie notebooka. Całą posiadaną gotówkę wydam na kilka pieczątek i podpisów u notariusza.
A za 3¼KPLN mógłbym mieć HP nx 9020.

Fuck!
Czemu to takie drogie?

Ogólne »

[11 kwietnia, 2005 | 3 komentarze | Poziom: 0 ]

Robię się popularny wśród jellonków. To fragment z chatroomu linux@chat.chrome.pl:

[13:05:06] *** szukammiłegochłopaka zmaterializował się.
[13:05:20] <badmad> lawnmower: nie przesadzaj
[13:05:23] <szukammiłegochłopaka> czesc wszystkim
[13:05:34] <lawnmower> CZEŚĆ szukammiłegochłopaka SKĄD KLIKASG
[13:05:39] <lawnmower> KLIKASH
[13:06:48] <koorek> czesc szukammiłegochłopaka
[13:06:59] <szukammiłegochłopaka> czesc
[13:07:00] <koorek> ale tu sa sami mili, tylko zaden przystojny :P
[13:07:12] <szukammiłegochłopaka> haha
[13:07:48] <koorek> Aniu, nie obraz sie, ale z tego pewnie nic by nie wyszlo ;-)
[13:08:00] <bmalkow> JeStHeM wysOkjMm pshysthojnym fFłOpcem i shukAM mEEłeY dzjeffTshYnyYYyy! 
[13:08:13] <maniel> :P
[13:08:24] <maniel> wyroxił:P
[13:08:34] <koorek> na maxa :P
[13:08:40] <szukammiłegochłopaka> bmalkow jak masz an imie
[13:08:41] <koorek> lol
[13:08:47] <koorek> o nie, to nie oze byc prawda

Ogólne »

[06 kwietnia, 2005 | Dodaj komentarz | Poziom: 0 ]

Stwierdziłem, że mając zewntrzne IP warto pokusić się o jakiś firewallik. Jak pomyślałem, tak usiłowałem zrobić. Sięgnąłem zatem do tutoriala do iptables. Zapodałem tamtejszy przykładzik:

## Załaduj moduły śledzenia połączeñ (niepotrzebne jeśli wbudowane w kernel)
# insmod ip_conntrack
# insmod ip_conntrack_ftp

## Stwórz łañcuch blokujący nowe połączenia, z wyjątkiem tych od środka
# iptables -N block
# iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A block -m state --state NEW -i ! eth0 -j ACCEPT
# iptables -A block -j DROP

## Do łañcuchów INPUT i FORWARD dodaj skok do tego nowego łañcucha
# iptables -A INPUT -j block
# iptables -A FORWARD -j block
I co? I dupa: ping: sendmsg: Operation not permitted.

Cholernie skuteczny ten firewall :-/

Próbowałem się też bawić Firewall Builderem ale efekt podobny. Co ja spieprzyłem?

Ogólne »

[05 kwietnia, 2005 | JAXMPP">8 komentarzy | Poziom: 0 ]

Niedawno Zgoda wyraził opinię o bibliotece Smack. Niestety, nie powiedział co go tam tak wkurza.

Dlatego Was pytam, drodzy czytelnicy mych wypocin, co taka biblioteka mieć powinna. Czego oczekujecie od biblioteki implementującej XMPP?

Ogólne »

[04 kwietnia, 2005 | 9 komentarzy | Poziom: 0 ]

Migracja na Linuksa chyba akońzy się powodzeniem. Żona, po pewnych oporach, chyba zaczyna akceptować Linuksa z Gnomem. PSI nawet przypadł Jej do gustu, a Evolution stał się nowym, ślicznym, uruchamianym codziennie klientem pocztowym.
Jeszcze tylko jakiś ładny klient do czytania newsów by się przydał.

Ogólne »

[04 kwietnia, 2005 | 2 komentarze | Poziom: 0 ]

Sprawiłem sobie nowy szablon. Jeszcze wszystko nie jest skończone, ale i tak go zostawię!
Drugim krokiem będzie zrobienie szablonów w FMPP, trzecim zaś zrobienie z tego wszystkiego strony domowej z albumem i innymi bajerami.

Ogólne »

[01 kwietnia, 2005 | 1 komentarz | Poziom: 0 ]

...prima aprilisa.
Mimo moich manii prześladowczych (objawia się to stosowaniem kryptografii gdzie się da) i stosowania zasady ograniczonego zaufania (objawia się to dziewięćdziesięcio dziewięcio procentową nieufnością), boli mnie, że dzisiaj muszę przestać ufać całkowicie wszystkiemu co czytam lub słyszę.