czwartek, 29 listopada 2012, 07:06

boski ubój

Wyrok naszego TK (uwaga, PDF) uznający, że Olejniczak w 2004 bezprawnie zezwolił na tzw. ubój rytualny (tzn. bez wstępnego "ogłuszania") został zauważony przez BBC, dzięki czemu mogłem podlinkować z nadzieją, że linkowany tekst nie tylko nie skończy jako 404, ale i da się czytać za darmo jeszcze kilka lat. Przy okazji dowiedziałem się, że tylko w zeszłym roku wyeksportowaliśmy mięsa z nielegalnego uboju za 200 mln eurów, co daje absolutną pewność, że podrzynanie zwierzęcych gardeł żywcem zostanie wkrótce w Polsce zalegalizowane. Zawsze to jakiś postęp.

Jako inteligentny ssak i współczujący ateista najchętniej zdelegalizowałbym nie tylko rytualny ubój, ale i wszystkie religie odnoszące się z pogardą do zwierząt, a szczególnie reszty ssaków. Natomiast jako obywatel biednego zacofanego kraju cieszę się, że w ogóle coś eksportujemy (i jeszcze na tym zarabiamy). Niezwykle zasłużona dla humanizacji uboju Temple Grandin ma też sporo cennych uwag dotyczących uboju rytualnego — można się u niej pocieszyć tym, że idealnie poderżnięte zwierzę nawet tego nie zauważa ("It appears that the animal is not aware that its throat has been cut"). No dobra, eksportujmy więc.

Kończąc swój tryptyk rolniczy chciałbym go jakoś optymistycznie podsumować. Jednoczesne zakazywanie upraw GMO i legalizacje uboju rytualnego uważam za objawy zapaści cywilizacyjnej. Tym bardziej przygnębiającej, jeśli dotowanej obficie w ramach WPR (u nas na razie nie, tymczasowo dostajemy dopłaty do hektara, bez związku z efektami). Idąc tą drogą Europa stanie się smętnym zadupiem, a my zadupiem tego zadupia. Do czego od dawna jesteśmy świetnie przygotowani.

wtorek, 27 listopada 2012, 20:03

parcie na wsparcie

Spór w sprawie mało istotnego dla Polski GMO jest bardzo ciekawy, ale prawdziwe pieniądze są na razie gdzie indziej. Właśnie ukazało się unijne Sprawozdanie specjalne nr 16/2012: „Skuteczność systemu jednolitej płatności obszarowej jako systemu przejściowego mającego na celu wsparcie rolników w nowych państwach członkowskich”. Nie chciało mi się całego czytać, poszukałem tylko co Polska.

W największym skrócie "Zdaniem kontrolerów UE należy ponownie rozważyć zasady rozdziału wsparcia dochodów dla rolników w nowych państwach członkowskich". Proszę przeczytać jak unijne pieniądze trafiają do najbardziej potrzebujących rolników:
Podobnie jak w przypadku SPJ, Trybunał zidentyfikował również beneficjentów pomocy z systemu JPO, którzy prowadzili działalność rolniczą jedynie w wymiarze marginalnym. Przypadki te dotyczą przedsiębiorstw handlu nieruchomościami, lotnisk (Polska i Rumunia), przedsiębiorstw leśniczych, stowarzyszeń łowieckich, klubów rybackich lub klubów narciarskich (Węgry, Polska i Słowacja). Komisja i skontrolowane państwa członkowskie nie dysponują szczegółowymi informacjami dotyczącymi dokładnej liczby takich przypadków i ich skutków finansowych. Na przykład w Polsce Trybunał stwierdził, że 1345 stowarzyszeń łowieckich otrzymało zgodnie z prawem pomoc z systemu JPO za rok 2010 w kwocie 2,54 mln euro w związku z 19 000 ha gruntów rolnych.

Tak więc tylko w 2010 nasze kółka łowieckie (czy jak to się nazywa) dostały ponad 10 mln zł na swoje uprawy. Zgodnie z prawem, a więc słusznie. Myśliwi muszą przecież mieć czym dokarmiać zwierzątka zimą. A zimy bywają u nas srogie.

gmonie

Kwestia obecności GMO w Polsce (i w ogóle) jest o tyle ciekawa, że wyrażane w tej sprawie poglądy wyglądają na słabo przypięte do sympatii politycznych, za to mocno związane z indywidualnym poziomem dociekliwości. Nie chcę nikogo obrażać (właściwie czemu nie?), ale np. strach przez ziemniakami Amflora firmy BASF świadczy już niemal wyłącznie o głupocie, ignorancji czy zaburzeniach psychicznych. Ziemniak przemysłowy, niesmaczny i droższy od normalnego, nikt nie będzie tym ludzi karmił, bo po co. Sadzi się bulwy, których nawet wicher nie rozniesie po sąsiednich polach. A w dodatku modyfikacja tego Amflory polega nie na tym, że mu coś paskudnego dołożyli, tylko że go zmyślnie popsuli. I teraz kartofel zamiast dwóch rzeczy robi jedną (zamiast amylopektyny i amylozy samą amylopektynę — podobno dlatego niesmaczny).

Do Amflory można się uczciwie przyczepić chyba tylko o jedno. Jak większość roślin modyfikowanych genetycznie zawiera bakteryjny gen oporności na kanamycynę (nptII), powszechnie używany w procesie otrzymywania takich roślin i później już zbędny. Ale jest i teoretycznie może wskoczyć do bakterii, dając im odporność na kanamycynę i parę innych antybiotyków aminoglikozydowych (też bez większego znaczenia terapeutycznego, ale zawsze). Praktycznie niemożliwe w warunkach polowych, pewnie nieco bardziej prawdopodobne w jelitach świń mających jednocześnie kłopoty z trawieniem DNA i szprycowanych odpowiednimi antybiotykami. Oczywiście jeszcze się nie zdarzyło i pewnie nie zdarzy, ale wykluczyć przecież nie można. Szczególnie w Polsce, gdzie od zawsze regularnie dzieją się różne cuda. Człowiek nadzwyczaj ostrożny powinien to wziąć pod uwagę.

No cóż, poczekam aż Unia zalegalizuje uprawę jakiejś rośliny modyfikowanej do której nie da się przyczepić absolutnie o nic, poza tym że modyfikowana. Wtedy nie będzie cienia wątpliwości skąd ten naturalny opór przed pożytecznymi wynalazkami.

czwartek, 22 listopada 2012, 21:37

web scraping dla ubogich

W poprzednim odcinku odkryłem webofstories, prawdziwą kopalnię wiedzy np. o kulisach rewolucji w biologii w drugiej połowie XX wieku. Ale lubię mieć wszystko na piśmie i cuzamen do kupy, a tam każda wypowiedź poszatkowana na sto kilka odcinków. Próbowałem sklejać na piechotę, ale od takiej głupiej roboty jest przecież maszyna. Mam sto ileś kolejnych stron, na każdej interesujący fragment jednoznacznie zaznaczony tagiem id="transcript-en", trzeba je tylko wydobyć i skleić. Byle skrypt wystarczy. A dobrzy ludzie jak zwykle zrobili już prawie wszystko za mnie, wystarczyło znaleźć i zaadoptować. Gdyby ktoś chciał skorzystać to krok po kroku:

1. zainstalować interpretaror Lua, najbezpieczniej 5.15. Tak żeby jak się napisze lua w lini poleceń wyskakiwało:
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio

2. zainstalować luarocks i potem luacurl (luarocks install luacurl). Można też samo luacurl, chodzi o dostęp z lua do biblioteki curla (każdy porządny człowiek powinien go już mieć na swoim pececie).

3. ustalić na webofostories zakres interesujących stron, od pierwszej do ostatniej. Upewnić się że idą po kolei, bez dziur (nie zawsze tak jest i wtedy trzeba na raty), skoczyć na koniec załączonego skryptu i tam wpisać. Na początek warto sprawdzić na kilku czy w ogóle działa. U mnie zwykle działa. Żeby ściągnąć polskie transkrypcje (są np. przy Edelmanie i Wajdzie) trzeba zamienić transcript%-en na transcript%-pl

4. jeśli działa to puścić skrypt zapisując wszystko na dysku (lua skrypt.lua > plik.html)


-- poniżej ukradłem stąd: https://github.com/mkottman/wdm

pcall(require, 'luacurl')
assert(curl, "curl library not found (luacurl)")

function log(...)
  if verbose then
    print(...)
  end
end

-- HTTP Downloading
do
  local c=curl.new and curl.new() or curl.easy_init()

  local filters = {}
  function addFilter(f) table.insert(filters, f) end
  function clearFilters() filters = {} end

  do
    local f = io.open('cache/TEST.txt', 'w')
    if not f then
      os.execute('mkdir cache')
    else
      f:close()
      os.remove('cache/TEST.txt')
    end
  end
  
  local function open(fn, mode)
    return bz2 and bz2.open(fn, mode, 9) or io.open(fn, mode)
  end

  local function getlocal(url)
    local path = url:gsub('[^%a%d]', '_')
    local f, e = open('cache/'..path)
    if f then
      local ret = f:read('*a')
      f:close()
      return ret
    end
  end

  local function writelocal(url, s)
    local path = url:gsub('[^%a%d]', '_')
    local f = assert(open('cache/'..path, 'wb'))
    f:write(s)
    f:close()
  end

  function get(url)
    log('[http]', 'get', url)

    local cache = getlocal(url)
    if cache then return cache end

    c:setopt(curl.OPT_URL,url)
    local t = {}
    c:setopt(curl.OPT_WRITEFUNCTION, function (a, b)
      local s
      -- luacurl and Lua-cURL friendly
      if type(a) == "string" then s = a else s = b end
      table.insert(t, s)
      return #s
    end)
    assert(c:perform())
    local ret = table.concat(t)
    for _,f in ipairs(filters) do
      ret = f(ret)
    end

    writelocal(url, ret)

    return ret
  end
end

-- koniec ukradzionego 


local strona = 'http://www.webofstories.com/play/'

print ('<!DOCTYPE html>') 

-- organoleptycznie ustalone zakresy wybranych pogadanek
-- np. Brenner: 13214-13355 52393-52486 
-- Klug: 16940-17059
-- Mitchison: 13765-13843 52542-52582
-- poniżej ustawione na ściągnięcie trzech pierwszych kawałków Kluga

for i = 16940, 16942, 1 do -- tu ustaw ręcznie zakres
  nr = string.format("%01d",i) -- tu ewentualnie zera przed
  local src = get(strona .. nr)
  _, _, transc, _ = string.match(src, '(<div id="transcript%-en" class="transcriptText">)(%s+)(.-)(</div>)') 
  print(transc) 
end


DODANE: z pojedynczej strony wyłuskać transkrypt można jednym poleceniem, od tego pewnie warto zacząć, wystarczy tylko curl i lua połączone rurką, np.:

curl http://www.webofstories.com/play/sydney.brenner/161|lua -e '_,_,x,_=string.match(io.read("*all"),[[(<div id="transcript%-en" class="transcriptText">)(%s+)(.-)(</div>)]]) print(x)'
czyli (to samo z zawinięciem linii, bo nie wszystkie przeglądarki zawijają):

curl http://www.webofstories.com/play/sydney.brenner/161|lua -e '_,_,x,_=string.match(io.read("*all"),[[(<div id="transcript%-en" class="transcriptText">)(%s+)(.-)(</div>)]]) print(x)'

Nie wiem dlaczego na Windows w czarnym okienku CMD to nie działa, ale jakoś mnie to nie dziwi, jak ktoś musi na Windows to jest np. bash od Git i pewnie jeszcze wiele innych, których nie sprawdzałem.

DODANE (2018): Jeśli ktoś naprawdę musi na Windows (7/8/10), to polecam MSYS2. W Windows 10 jest też Subsystem for Linux.

piątek, 16 listopada 2012, 04:14

gadające głowy

Coś raczej dla miłośników pogadanek, różni mądrzy (choć mniej mądrzy pewnie też) ludzie opowiadają nieśpiesznie jak to było. Mnie akurat wciągnął Sydney Brenner, ale wybór jest spory. Antidotum na teddyzację przekazu, strata czasu. Niestety trzeba Flasha (ale są też transkrypty — patrz następny odcinek).