Szkriptek: Python, Perl, Bash, ...

Python 2.7 könyv?

Python 2.7-hez keresek könyvet/könyveket magyar vagy angol nyelven.
Szeretnék legalább két könyvet beszerezni. Egyet ami nyelvvel foglalkozik az alapoktól, és egy másikat ami a beépített függvényeket és az alaptelepítéssel érkező modulokat mutatja be.

Érdekel hogy ki melyik könyvet ajánlja.

[MEGOLDVA] Perl HTTP header lekérdezési probléma

Sziasztok!

Adott egy évekkel ezelőtt megírt Icecast2 szervert lekérdező perl script ami a szerver headerét szedi le, viszont e script esetén a “http://streaming.radionomy.com:80/00s-dance-classics” lekérdezésekor nem a várt eredményt adja hanem ezt:


HTTP/1.0 401 Authentication Required
WWW-Authenticate: Basic realm="Icecast 2.3.3-kh8"

You need to authenticate

Ha viszont ugyanezt curl-al kérdezem le akkor azt hozza le amit kellene:


dev@dev:~/streaminfo# curl -I -X GET "http://streaming.radionomy.com:80/00s-dance-classics"
HTTP/1.1 200 OK
Content-Type: audio/mpeg
Date: Sat, 02 Apr 2016 07:33:26 GMT
icy-br:128
ice-audio-info: bitrate=128;samplerate=44100;channels=2
icy-br:128
icy-description:Classic dance hits from the 00s
icy-genre:Dance
icy-name:00sDanceClassics
icy-pub:1
icy-url:http://00s-dance-classics.playtheradio.com
Server: Icecast 2.3.3-kh8
Cache-Control: no-cache, no-store
Pragma: no-cache
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, Accept, X-Requested-With, Content-Type
Access-Control-Allow-Methods: GET, OPTIONS, HEAD
Connection: close
Expires: Mon, 26 Jul 1997 05:00:00 GMT

dev@dev:~/streaminfo#

A perl script ami eddig mindennel jól működött:


#!/usr/bin/perl

use IO::Socket::INET;
$socket=new IO::Socket::INET
(
PeerHost=>"streaming.radionomy.com",
PeerPort=>"80",
Proto=>"tcp",
Timeout=>2,
);
if($socket ne())
{
$req="GET /00s-dance-classics HTTP/1.0\r
Host: streaming.radionomy.com\r
\r
";
$size=$socket->send($req);
shutdown($socket,1);
$response=();
$socket->recv($response,1024);
$socket->close();
print "$response";
}

Mit rontottam el, ami ráadásul eddig jól működött?
A perl verziója:


dev@dev:~/streaminfo# perl -v | grep version
This is perl 5, version 20, subversion 2 (v5.20.2) built for i586-linux-gnu-thread-multi-64int
dev@dev:~/streaminfo#

Bash for Win10

A legjobb áprilisi tréfa amit évek óta olvastam. Hajnal óta egy csomó tech csatornán ez a hír pörög: A Microsoft a Canonicallal parterségben kihozza a Bash shell-t Windows 10-re. Ezt Kevin Gallo jelentette be a Build 2016 rendezvényen."This is not a VM. This is not cross-compiled tools. This is native."

Források:

Microsoft is adding the Linux command line to Windows 10

Microsoft is bringing the Bash shell to Windows 10

Bash comes to Windows - Microsoft BUILD 2016

Microsoft and Canonical partner to bring Ubuntu to Windows 10

:-)

Értelmetlen szavak a hunspell-ben?

Pici lányom nyelvtan háziját csinálom:)

A feladat: Milyen értelmes szó rakható ki a 'doliunk' betűkből?

írtam rá egy ilyet:


import itertools
import hunspell

hobj = hunspell.HunSpell('/usr/share/hunspell/hu_HU.dic', '/usr/share/hunspell/hu_HU.aff')
betűsor = 'doliunk'
permutációk = sorted(list(set([''.join(p) for p in itertools.permutations(betűsor)])))
helyes_permutációk = [ p for p in permutációk if hobj.spell(p) ] #csak akkor kerül bele a listába, ha a hunspell szerint helyes a szó
print("\n".join(helyes_permutációk))

és van benne pár meglepő eredmény. A teljes lista:

idolkun
idolunk
indokul
indulok
kondiul
kulidon
kunidol
oknudli
oldniuk

Ha akarom, épp mind lehet értelmes...

De egy másik sztringre már végképp vállalhatatlanok is előjönnek:
(szerk: ez a teljes lista)

köpültre
lükepört
pertökül
pertülök
pörtelük
pörtülke
repültök
röpültek
tökeprül
tökperül
tülökper
ükperölt
ükölpert
ülepkört

Miért? Vagy csak én vagyok fantáziátlan?

mediainfo subdirectory

Egy olyan lista érdekelne, melyben össze van gyűjtve mondjuk az avi fájlokról, hogy az adott fájlnak mi a neve, mérete, codec-e, sztereó-e stb.
Úgy vettem észre hogy ezeket az infókat a mediainfo paranccsal csak egyesével tudom kinyerni.

files="*.avi"
for i in ${files} ; do
filename=$(mediainfo --Inform=General\;%CompleteName% "${i}")
format=$(mediainfo --Inform=General\;%Format% "${i}")
filesize=$(mediainfo --Inform=General\;%FileSize/String% "${i}")
duration=$(mediainfo --Inform=General\;%Duration/String% "${i}")
aspect=$(mediainfo --Inform=Video\;%DisplayAspectRatio/String% "${i}")
codec=$(mediainfo --Inform=Video\;%CodecID/Hint% "${i}")
wh=$(mediainfo --Inform=Video\;%Width%x%Height% "${i}")
acodec=$(mediainfo --Inform=Audio\;%CodecID/Hint% "${i}")
chan=$(mediainfo --Inform=Audio\;%Channels% "${i}")
ster=$(mediainfo --Inform=Audio\;%Format_Settings_ModeExtension% "${i}")
bitrate=$(mediainfo --Inform=Audio\;%BitRate/String% "${i}")
lang=$(mediainfo --Inform=Audio\;%Language% "${i}")
echo ${filename} - ${format}, ${filesize}, ${duration}, ${aspect}, ${wh}, ${chan}, ${ster}, ${codec}, ${acodec}, ${bitrate}, ${lang} >> movie.lst
done

Ez a kis kód még működik is, de arra még nem jöttem rá, miként oldjam meg, ha az avi fájlok almappákban vannak?
Ha esetleg létezik egyszerűbb módszer azt is megköszönöm.

# if true ; then ; fi syntax error...

# if true ; then ; fi
-sh: syntax error near unexpected token `;'

Rajtam kívül mindenki tudta, hogy a then és a fi között muszáj valaminek lennie, különben syntax error lesz? :)
Most ezért nem futott egy ideje egy cron job, mert kikommenteltem az egyetlen parancsot a then és a fi között, mert már nem kellett, de mégse akartam az egészet if-et kitörölni...

MEGOLDVA - Python - modulok kereszt-importja

Sziasztok!

Nem tudom találkozott-e valaki az alábbi problémával. 2.7.11-es pythonra gondoltam.

Adott két python file legyen ez most a.py ("a") és b.py ("b").

Az "a" tartalmazza a main()-t és egyéb függvényeket, a "b" egy osztályt amiben egyéb dolgokat hajtok végre.

Alapvetően az "a"-ba importálom "b"-t, egy az egyben, tehát vagy "import b" vagy "from b import *", stb. ez eddig oké, működik is ahogy kell.

A gond akkor kezdődik amikor a "b"-ben akarnék használni egy "a"-ban található függvényt, mert mihelyst beírom a "b.py"-be szintúgy hogy "import a" vagy "from a import *" vagy "from a import vmi-fuggveny", abban a pillanatban már az "a" elakad és nem találja a "b" függvényt (amiben meghívnám az "a"-ban találhatót), mert nyilván gondolom a kereszthivatkozás a sorrendben feloldódás miatt megakad.

Van valakinek ötlete a modulok kereszthivatkozásának megoldására?

Köszi!

Speedtest-cli pontatlan. Nagyon

Sziasztok!

Érdeklődnék, hogy a speedtest.net CLI script-je nálotok is pontatlan-e az utóbbi időben?

Olyan helyen, ahol simán tudok axel-el (többszálas wget) letölteni akár 4-500mbps-el, mértem kb 10-20mbps-t.
Az asztali gépemen is töredékét mutatja, mintha a flash-es mérőkével nézem.
Érdekes módon, pl Hetzner-nél lévő gépen jó a mérés (hazai szerverre is).

Valaki lefuttatná a kódomat GPU-n?

Sziasztok!
Pythonban, Theanoban írtam egy neurális hálót. Nálam a CPU-n lefut, de nem valami gyorsan. Theanohoz van CUDA back-end, de nekem nincs nVidia kártyám.
Valaki lefuttatná a kódomat és visszaküldené a kimenetet?
Ha nagyon meggyorsítja, akkor beruháznék egy videokártyára.

Ím:
https://github.com/csxeba/TestMyCNN

EDIT: github link

bash - fájlok keresése, melyek tartalmazzák azt a sort, ami...

...úgy kezdődik, hogy adott egy fix string, utána legalább 5, de akár több ezer (!) szóköz és a szóközök után pedig még legalább öt, szóköztől eltérő karakter van. Mindez egy sorban.

Számos, főleg Joomla és Wordpress alapú oldal kerül így, vagy úgy feltörésre. Nagyon sok alkalommal látok olyat, hogy a feltörés után meglévő fájlok első sorába beépül egy plusz sor. Ez a sor kezdődik a "<?php"-val, kb. két képernyőszélességnyi szóköz után pedig indul valami csúnya kód, aminek a végén megvan a "?>"

"Szerkesztő" nézetben ez nem is látszik, csak az első sor elején a "<?php". Ha sortöréssel nyitom meg, akkor válik láthatóvá a sor többi része is.

Eljutottam oda, hogy ki tudom listázni azon fájlokat, melyek a felsorolt kiterjesztésű fájlok valamelyikének megfelelnek és van bennük ilyen sztring:

"<?php__________________________________________________________________________________________________________________________"

Ezeket a fájlokat ezzel tudtam kerestetni:

find /root/Virus -iregex ".*\.\(php\|html\|htm\|js\)" -exec bash -c 'grep -q "<?php__________________________________________________________________________________________________________________________"' {} \; -print

Annyi a szépséghibája ennek, hogy nagy ritkán előfordulnak olyan kódok, ami "rendes" kód, a "<?php" után a kedves programozó még odatett akár 40-50 szóköz karaktert, majd nyomott egy entert. Így tehát akad némi "fals pozitív" találat is. De ha a keresés azt is figyelné, hogy a kb. száz szóköz után még ugyanabban a sorban van-e egyéb karakter, mely több, mint egy "?>", akkor az számomra tökéletes lenne.

De fogalmam sincs, hogy kéne ezt leprogramozni. Tudtok ebben segíteni?

Fontos lenne az, hogy egy "exec"-el megfogalmazható legyen. Ugyanis több, egyéb dologra is kerestetnék, azaz a find-del kerestetett fájlokat vizsgálnám, hogy van-e bennünk "valamisztring", VAGY a kérdéses "php sokszóköz és még pár egyéb karakter egy sorban" sor, így:


find /root/Virus -iregex ".*\.\(php\|html\|htm\|js\)" \( -exec grep -q 'valamifeltetel' {} \; -o -exec grep -q "<?php__________________________________________________________________________________________________________________________" {} \; \) -print

A sok "aláhúzás" karakter valójában szóköz, de a fórummotor több egymás utáni szóközt egy szóközre cserél, így nem annyira lenne látható a kód.