Limitando el número de procesos por usuario

Mediante el comando ulimit podemos consultar y controlar el valor de los recursos disponibles para la consola y los procesos que puedan ser iniciados desde ella. Las diferentes opciones que acepta este comando son: -a All current limits are reported -b The maximum socket buffer size -c The maximum size of core files created -d The maximum size of a process’s data segment -e The maximum scheduling priority ("nice") -f The maximum size of files written by the shell and its children -i The maximum number of pending signals -l The maximum size that may be locked into memory -m The maximum resident set size (many systems do not honor this limit) -n The maximum number of open file descriptors (most systems do not allow this value to be set) -p The pipe size in 512-byte blocks (this may not be set) -q The maximum number of bytes in POSIX message queues -r The maximum real-time scheduling priority -s The maximum stack size -t The maximum amount of cpu time in seconds -u The maximum number of processes available to a single user -v The maximum amount of virtual memory available to the shell and, on some systems, to its children -x The maximum number of file locks -T The maximum number of threads Para consultar todos los valores asignados actualmente: ...

1 de agosto de 2011 · 3 min · 628 palabras · Nacho Cano

Endianness

“Endianicidad” designa el formato en el que se almacenan los datos de más de un byte en un ordenador. El sistema big-endian adoptado por Motorola entre otros, consiste en representar los bytes en el orden “natural”, así el valor hexadecimal 0x4A3B2C1D se codificaría en memoria en la secuencia {4A, 3B, 2C, 1D}. En el sistema little-endian adoptado por Intel, entre otros, el mismo valor se codificaría como {1D, 2C, 3B, 4A}, de manera que de este modo se hace más intuitivo el acceso a datos, porque se efectúa fácilmente de manera incremental de menos relevante a más relevante (siempre se opera con incrementos de contador en la memoria). ...

30 de julio de 2011 · 2 min · 400 palabras · Nacho Cano

UnicodeDecodeError con Wapiti

Wapiti es un escáner de vulnerabilidades web basado en fuzzing. En la última versión, 2.2.1, permite detectar vulnerabilidades referente a: Errores de gestión de ficheros (include/require local y remoto, fopen, readfile...) Database Injection (PHP/JSP/ASP SQL Injections y XPath Injections) XSS (Cross Site Scripting) Injection LDAP Injection Command Execution detection (eval(), system(), passtru()…) CRLF Injection (HTTP Response Splitting, session fixation…) Sin embargo, si usamos Ubuntu Natty Narwhal, la versión de los repositorios es la 1.1.6, por lo que es posible que nos encontremos el siguiente error al escanear páginas que contengan caracteres no ASCII. Por ejemplo: ...

28 de mayo de 2011 · 2 min · 238 palabras · Nacho Cano

¿Dónde está el site-packages?

Nota mental: $ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" /usr/lib/python2.7/dist-packages Ligeramente relacionado » Creando y leyendo códigos QR desde Python A lo mejor, si el intérprete de Python no encuentra un paquete es que no está donde debería… :facepalm:

28 de mayo de 2011 · 1 min · 41 palabras · Nacho Cano

Desordenando listas en Python

Si tenemos una lista de elementos, por ejemplo: >>> l = [ 2, 3, 5, 7, 11, 13, 17, 19 ] Y queremos desordenarla, pero con la condición de que ningún elemento ocupe la misma posición que ocupaba originalmente, podemos aplicar el algoritmo de Sottolo: >>> from random import randrange >>> def sattoloCycle(items): ... i = len(items) ... while i > 1: ... i = i - 1 ... j = randrange(i) # 0 < = j <= i-1 ... items[j], items[i] = items[i], items[j] ... return >>> sattoloCycle(l) >>> print l [5, 17, 3, 2, 7, 11, 13]

29 de marzo de 2011 · 1 min · 99 palabras · Nacho Cano

Creando y leyendo códigos QR desde Python

Un código QR (Quick Response Barcode) permite almacenar información en un código de barras de dos dimensiones. Hay bastantes servicios en la web que nos permiten crear nuestros propios códigos, por ejemplo el de Google, que podemos emplear desde la línea de comandos: $ curl http://chart.apis.google.com/chart?chs=150x150&cht=qr&chld=H|0&chl=texto -o qr.png Un pequeño alias para tenerlo siempre a mano: $ alias qrurl='qrurl() { curl http://chart.apis.google.com/chart?chs=150x150&cht=qr&chld=H|0&chl=${@// /%20} -o qr.$(date +%Y%m%d%H%M%S).png; }; qrurl' $ qrurl una ranita iba caminando Esto creará un fichero con un nombre parecido a qr.20110325161706.png. ...

27 de marzo de 2011 · 4 min · 755 palabras · Nacho Cano

ls sin ls

En bash: $ for i in *; do echo $i; done Fuente: nfosolutions.com En C: /* * * Esempio che scansiona una cartella stampando a video i file in essa * contenuti. */ #include #include #include #include int main(int argc, char *argv[]) { DIR *dir; struct dirent *drent; if(argc < 2) { fprintf(stderr, "%s \n", argv[0]); return EXIT_FAILURE; } if((dir = opendir(argv[1])) == NULL) { fprintf(stderr, "Errore opendir()\n"); return EXIT_FAILURE; } while((drent = readdir(dir)) != NULL) { fprintf(stdout, "--> %s\n", drent->d_name); } if(closedir(dir) < 0) { fprintf(stderr, "Errore closedir()\n"); return EXIT_FAILURE; } } En Python: ...

12 de marzo de 2011 · 2 min · 347 palabras · Nacho Cano

Mystery

Casi parece que está escrito en chino, o mejor dicho en brainfuck, o puede que no sea muy zen, pero no deja de ser elegante. def mystery(n): a = list(range(n)) [[(yield i) for a[::i] in [([0]*n)[::i]]] for i in a[2:] if a[i]] El nombre de la función pretende no dar pistas para que intentemos averiguar qué hace exactamente esta función. He aquí una pista: Fuente: numberspiral.com >>> f = mystery(20) >>> try: ... while True: ... print f.next() ... except StopIteration: ... pass 2 3 5 7 11 13 17 19

26 de febrero de 2011 · 1 min · 91 palabras · Nacho Cano

Python Zen

Just to keep in mind… Author: euart >>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than _right_ now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!

26 de febrero de 2011 · 1 min · 154 palabras · Nacho Cano

Descifrando al César en Python

Si lo que pretendemos es, dada una cadena, sustituir una serie de caracteres por otra, en Python es tan sencillo como pasarle al método maketrans una cadena con los caracteres que queremos cambiar y otra con los caracteres a utilizar en su lugar. Ambas cadenas deberán tener la misma longitud. Este método devuelve una tabla de traducción, un objeto susceptible de ser usado por el método translate el cual se aplica sobre un string, como veremos. ...

16 de febrero de 2011 · 5 min · 935 palabras · Nacho Cano