domingo, 30 de septiembre de 2012

Taboas de multiplicar [Twitcode IX][Python]

Boas a todxs,

Esta semana o twitcode que traio é moi, moi simple. Basicamente serve para sacar en pantalla as míticas taboas de multiplicar que nos ensinaban no colexio, a idea xurdíu de porme a facer un script que sacase as N equivalencias entre binario, octal, decimal e hexadecimal e outras taboas bizarras. Como algunhas levaron bastantes liñas de código ocurriuseme facer algo máis sinxelo para que cando menos aproveitar o conceito. Igual a alguén lle serve para mirar como funciona o "for" en python.

#Recorremos un elemento a do 1 ao 9.
for a in range(1,10):
 #por cada elemento a recorremos un b no rango do 1 ao 10
 for b in range (1,11):
  #Imprimimos a * b = resultado
  print "%i * %i = %i" % (a,b,a*b)

Saúde!

jueves, 27 de septiembre de 2012

Cifrado Espartano/Transposición. [Criptografía]

Boas a todxs,

Máis unha semana volto coa criptografía (non o podo evitar), desta vez falarei do cifrado espartano, tamén coñecido por escítala ou, máis actualmente cifrado de transposición.

En que consiste este cifrado? Pois ben, antiguamente, o que se facía, era coller 2 trozos de madeira co mesmo diámetro, un para o emisor e outro para o receptor da mensaxe, logo, o que se facía era enrolar unha cinta de coiro nel e escribir a mensaxe, de xeito que, cando o receptor a recibise, enrolando o trozo de coiro no cilindro do mesmo diámetro podería ler o contido do trozo de coiro mentras que o resto só verían unha ringleira de letras sen sentido aparente. Unha imaxe para que vos fagades unha idea:

lunes, 24 de septiembre de 2012

Escrebendo un script que avise no email de novas entradas nun Atom [python] (Parte 1: o lector de Atom)

O Atom é un formato baseado en XML comunmente utilizado como fonte de novas, por exemplo para decatarse de cando hai novos posts nun blogue sen ter que revisalo manualmente, normalmente úsase un programa con este fin, pero nos ímos escribir ún que nolo mande o correo electrónico (esa parte do proceso realizarase na segunda parte).

A URL sobre a que faremos as probas é a de este blogue, http://hackliza.blogspot.com/feeds/posts/default.

Ímos enton a comezar polo principio, a descargar ese arquivo é descompoñelo.

domingo, 23 de septiembre de 2012

Listar os contidos dun grupo de arquivos xunto co seu nome: Buscando erros nun texto [bash][Twitcode VIII]

head -v -c-0 <archivos>
Head por defecto amosa as 10 primeiras liñas do contido dun arquivo, pero co -c-0 especificamos que queremos que lea todo ata o último caracter, e co -v pedímoslle que amose o nome dos arquivos, por exemplo:
$ head -v -c-0 *
==> fibonacci_recursivo.py <==
def fibonacci(n):
    if n < 2:
        return n
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)


numero = 10
resultado = fibonacci(numero)

print "Elemento numero", numero, "de fibonacci:", resultado

==> Makefile <==
build:
clean: 
Se o que queremos é que amose os nomes de arquivo e o número de liña o principio de cada unha, faríamos
$ grep -nH '' <arquivos>
Por exemplo:
$ grep -nH '' * 
fibonacci_recursivo.py:1:def fibonacci(n):
fibonacci_recursivo.py:2:    if n < 2:
fibonacci_recursivo.py:3:        return n
fibonacci_recursivo.py:4:    else:
fibonacci_recursivo.py:5:        return fibonacci(n - 1) + fibonacci(n - 2)
fibonacci_recursivo.py:6:
fibonacci_recursivo.py:7:
fibonacci_recursivo.py:8:numero = 10
fibonacci_recursivo.py:9:resultado = fibonacci(numero)
fibonacci_recursivo.py:10:
fibonacci_recursivo.py:11:print "Elemento numero", numero, "de fibonacci:", resultado
Makefile:1:build:
Makefile:2:clean: 

miércoles, 19 de septiembre de 2012

Esteganografía básica, resolvendo un sinxelo wargame.

Boas a todxs,

Esta semana voltamos con algo do que gosto bastante, criptografía, concretamente información oculta en imaxes, coñécese como esteganografía. Para ocultar información en imaxes hai moitos métodos e, evidentemente, uns máis complexos que outros. Todos coñecemos os códigos QR, non si? Pois tamén ocultan información e desde un móbel ou co programa axeitado podemos extraela sen maior problema. Neste caso imos resolver un wargame de esteganografía de nivel básico, dos que se poden atopar en probas de iniciación na rede. A imaxe en cuestión é esta:

lunes, 17 de septiembre de 2012

Lendo un arquivo .torrent [python]

Os arquivos .torrent gardan toda a información necesaria para describir un ou mais arquivos compartidos. A codificación utilizada chámase bencode, e é bastante fácil de ler, imos ver como facelo.

domingo, 16 de septiembre de 2012

Buscando erros nun texto [python][Twitcode VII]

Todo o mundo comete erros o escribir, pero buscalos é abondo fácil, baste con usar isto:
def fails(src, dic):
    d = set(re.findall("\w+", dic))
    return [w for w in re.findall("\w+", src) if not w.lower() in d]
(20 + 35 + 68 = 123)

Usa a libraría das expresións regulares `re` para separar por verbas e un diccionario de referencia para face-las comprobacións, por exemplo:

>>> import re
>>> fails("A libraría estándar de python inclúe un módulo para manexar peticións HTTP, podemos usala para ver a url de resultado de un deses acurtadores que nunca sabemos onde irán levar, so tempos que importar a libraría `urllib` e facer isto:",
  open("/usr/share/dict/galician").read())
['python', 'incl', 'HTTP', 'usala', 'url', 'acurtadores', 'urllib']
>>>

E non ten moita máis miga, como curiosidade e reflexión se tedes un rato libre igual vos interesa un artigo que fala de que programar xa non é o que era e que agora ata o que tiña algo de complexidade como era un corrector é trivial (na lingua de Shakespeare), traduzo máis ou menos o final:

jueves, 13 de septiembre de 2012

Creando o noso escáner de portos en python.

Boas a todxs,

Fai unhas semanas falei dos sockets, como exemplo empregamos un cliente e un servidor que se comunicaban entre si. Pois ben, fai un tempo atopeille outra utilidade, facer un scaner de portos, a idea ocurríraseme ao estar nun ordenador que non era meu, no que evidentemente non ía instalar software (nmap), non tiñamos acceso á configuración do router e precisabamos saber que portos estaban abertos ou fechados para mirar de configurar a mula :P. Pois ben, sempre que estamos nunha situación así podemos ir probando de un en un, ou de algo do que se falaba nas "3 leis do sysadmin", automatizar tarefas e facermonos perezosos, é dicer, un script que probe porto a porto cal está aberto e ao final informe do resultado.

domingo, 9 de septiembre de 2012

Como remapear o teclado

As veces pode ser útil cambiar a función dunha tecla por outra, por exemplo se usamos o editor VIM, andaremos continuamente buscando a tecla `Escape`, e o máis probable e que nunca usemos a de `Bloquear maiúsculas`, así que imos remapeala a `Escape`.

Primeiro temos que escribir isto no arquivo ~/.Xmodmap:
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

E logo aplicalo con:
xmodmap ~/.Xmodmap

Ler a url de destino dun acurtador [python][Twitcode VI]

A libraría estándar de python inclúe un módulo para manexar peticións HTTP, podemos usala para ver a url de resultado de un deses acurtadores que nunca sabemos onde irán levar, so tempos que importar a libraría `urllib` e facer isto:
urllib.urlopen(<a url>).geturl()

Por exemplo, na consola interactiva:
>>> import urllib
>>> urllib.urlopen('http://t.co/gNmsjWZ4').geturl()
'http://hackliza.blogspot.com.es/2012/09/as-3-leis-do-sysadmin-artigo-de.html'
>>> 

E sempre podemos encapsulalo coma unha función de bash no .bashrc
get_target (){ python -c "import urllib;print urllib.urlopen('$1').geturl()"; }

E usalo despois coma se fora un programa calquera
$ get_target http://t.co/gNmsjWZ4
http://hackliza.blogspot.com.es/2012/09/as-3-leis-do-sysadmin-artigo-de.html
$ 

Pode que resulte útil nestes días nos que os navegadores non están blindados de todo :P

jueves, 6 de septiembre de 2012

As 3 leis do sysadmin (Artigo de geekstuff de Ramesh Natarajan traducido ao galego)

Boas a todxs,

Esta semana non traio unha entrada propia, só unha traducción dun artigo publicado en "thegeekstuff.com" por "Ramesh Natarajan", nel fálanos que todo sysadmin (Administrador de Sistemas) debería estar sometido a 7 bos hábitos mais que se podían resumir en 3, é dicer, 3 leis básicas que todo sysadmin debería coñecer. Este artigo foi traducido en moitas linguas cada ano no "sysadminday" que é celebrado o último venres de xullo mais no meu caso veume á mente, como futuro sysadmin ao comezo do curso. Así que aí vai e agardo que vos resulte útil e interesante.

#Primeira Lei: Un SysAdmin debe respaldar (backup) TODO (e validar o backup regularmente).