Páginas: Anterior 1 2 Siguiente

Comprobar si un usuario es root con Python

7 12 2008

Python root

Cuando realizamos algún programa en Python a veces es necesario conocer si el usuario que lo ejecuta tiene privilegios de administrador o superusuario, también conocido como usuario root.

Con Python este asunto es una tarea bastante sencilla, simplemente debemos importar la biblioteca “os” (Operating System, del inglés Sistema Operativo) y llamar a la función geteuid() que nos devuelve el id del usuario efectivo (euid=efective user identification). Si esta función nos devuelve el valor de 0 entonces es el usuario root.

Si guardamos el siguiente código (por ejemplo con el nombre check_root.py) y le damos permisos de ejecución, podremos comprobar fácilmente esta tarea:

?Descargar check_root.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
"""
Comprobar si el usuario es root
"""
 
import os
import sys
 
if os.geteuid() != 0:
    print 'Debes tener privilegios root para este script.'
    sys.exit(1)
else:
    print 'Bienvenido usuario root'

Para darle permisos de ejecución a nuestro script check_root.py:

1
$ sudo chmod +x check_root.py
VN:F [1.7.4_987]
Rating: 9.5/10 (2 votes cast)
VN:F [1.7.4_987]
Rating: 0 (from 0 votes)
Comparte, descargalo en pdf, imprimelo o enviaselo a un amigo!
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • Meneame
  • PDF
  • RSS
  • StumbleUpon
  • Technorati


La búsqueda semántica y lógica de la información

17 10 2008

Introducción

La información es tal vez el arma más poderosa de nuestros días. Desde que comenzamos el día hasta que lo terminamos, recibimos un constante bombardeo de información desde cualquier posible fuente de información. Pero no sólo nos limitamos a recibirla de forma pasiva, sino que solicitamos también información lo más precisa y exacta, deseando recibir una respuesta en el menor tiempo posible.

Hasta no hace pocos años debíamos acudir a grandes bibliotecas especializadas y especificas de los temas sobre los que queríamos hacer una consulta para recibir información. Hoy esto parece algo poco común y en decadencia debido a que la mayoría de las veces resulta un método costoso en tiempo y no siempre se puede contrastar un gran volumen de información para obtener la fuente de mayor calidad.

En su lugar se utilizan métodos alternativos de consulta mucho mas rápidos basados en una gran red de información llamada Internet. Dicha red de información, a menudo saturada de sobre información, no resultaría tal útil u organizada sin la labor realizada por los buscadores.

Los buscadores semánticos y lógicos

La mayor revolución de la información ha sido aprovechada por las empresas tecnológicas que han sabido aplicar la demanda de consultas sobre conocimientos e información de los usuarios, para crear grandes motores de búsqueda basados en criterios y formas muy específicas en las que no todos ellos funcionan de la misma manera.

Las herramientas de búsqueda en Internet proporcionan métodos simples y eficientes basados fundamentalmente en búsqueda léxica. Un buscador es un sistema que utiliza la información semántica disponible en una base de conocimiento, permitiendo capturar la estructura compleja de la información y proporcionando la capacidad de razonamiento[1]

Las herramientas de búsqueda no serían muy útiles, sin las posibilidades de consulta que dispone el usuario, es decir “las distintas técnicas y herramientas que puede utilizar el usuario con el fin de localizar la información que necesita en la Red haciendouso de buscadores [2]

Asimismo, las técnicas a menudo se basan en operadores de la lógica booleana, quizás la característica más útil para definir criterios de búsqueda sobre la lógica del motor de búsqueda. Algunos pueden ser: AND, OR, NOT, AND NOT (en algunos motores), etc.

Ejemplo de búsqueda: profesores OR alumnos en Ciudad Real

También son utilizados muchos operadores matemáticos, aunque a menudo estos operadores están disponibles para el usuario, no suelen ser cómodos o no mantienen un valor usabilidad para el usuario medio por lo que se acude a una lógica booleana limitada o camuflada dejando los operadores y expresiones más complejas para usuarios más avanzados. Por ejemplo, algunos buscadores ofrecen lógica booleana limitada con botones de elección o menús desplegables, como:

Los documentos deben incluir “Todos los términos” (equivalente a usar el operador AND entre todos los términos).

Los documentos deben incluir “Cualquier término” (equivalente a usar OR entre todos los términos).

Sin embargo, pueden construirse consultas muy complejas para recibir una información concisa y exacta que la lógica booleana limitada en los interfaces no puede ofrecer. Por ejemplo, si quisiéramos encontrar “una” (teniendo en cuenta el termino una) tienda de deportes (donde no se tuviera en cuenta supermercados) o un centro del corte ingles (comparando solo con corte) de una ciudad cualquiera y se mostrara la versión en cache del buscador para agilizar la búsqueda, tendríamos una consulta avanzada del tipo:

cache: una + “tienda de deportes” -supermercado | corte -ingles de la ciudad *[3]

La biblioteca de la Universidad de California en Berkeley tiene una excelente tabla (en inglés) que detalla qué posibilidades de operadores lógicos de búsqueda que se ofrecen en los motores de búsqueda más poderosos, así como enlaces a instrucciones que detallan cómo usar un motor específico (los enlaces están en la parte superior de la tabla)[4]

La web semántica y los buscadores de información

Este tipo de consultas no sería posible si la red no dispusiera de una estructura semántica. A esto se le conoce como Web semántica.

El objetivo del proyecto de la Web Semántica es que toda esta información sea comprensible no sólo por humanos, sino también por computadoras. Para conseguir esto se deberá codificar la semántica de los documentos web mediante lenguajes de metadatos y ontologías (representaciones compartidas de conocimiento en forma de taxonomías de conceptos relacionales y reglas de inferencia)[5][6]

Esta estructura permite componer a los documentos y archivos de la red de unos metadatos con los que aplicando la lógica se puede extraer automáticamente conclusiones de la información almacenada y hacer búsquedas de la información muy especializadas.

Actualmente el buscador más destacado y con mayor cuota de mercado, llamado Google, ha conseguido su liderazgo en el sector debido a las aplicaciones de la lógica en sus algoritmos de búsqueda de información.

Google para mejorar y acotar sus resultados recurre a utilizar truncados, operadores booleanos, o instrucciones y campos específicos para obtener la información que se precisa. Pero su gran potencial reside en la utilización de la teoría de la lógica difusa[7] desarrollada por iraní Lofti Zadeh[8] que se basa en superar la ley del tercer excluido[9] que propone que un supuesto solo podrá ser Verdadero o Falso y el intermedio entre ambos es descartado de forma automática, siendo esta una de las base del lenguaje binario establecido mediante instrucciones que utilizan únicamente el 0 y el 1.

Por tanto, la lógica difusa utilizada en buscadores como Google crea una forma de transcribir matemáticamente como funciona el razonamiento humano e implantar esta forma “más lógica” de pensar en las máquinas y en las herramientas concretas de búsqueda de información como los buscadores de Internet.

Conclusiones

El crecimiento de la información aumenta casi de manera exponencial cada día y la mayoría generado en Internet. Buscadores como Google ayudan a gestionar eficientes consultas de grandes volúmenes de información acotando la búsqueda a unos pocos resultados de la mayor relevancia. Para estos resultados, la lógica difusa desempeña un gran papel a la hora de la implementación de los algoritmos que a su vez se nutre de un gran volumen de metadatos pertenecientes a la web semántica.

La información y la meta información adquiere notablemente más importancia y posiblemente en un futuro seamos capaces de “hablar” con máquinas de una forma más humana, gracias a la lógica y sus aplicaciones para realizar nuestras búsquedas con un simple esfuerzo.

Bibliografía

[1] CERN. European Laboratory for Particle Physics & others; TWebS: An Application of Terminological Logics in Web Searching. Granada Editorial S.N, 1999

[2] Agustín Montes Hernández; Posibilidades de consulta en los buscadores, Marzo 1999

http://www.elprofesionaldelainformacion.com/contenidos/1999/marzo/posibilidades_de_consulta_en_los_buscadores.html

[3] Galinus; Operadores y otras formas de utilizar Google

http://www.galinus.com/es/articulos/operadores-y-comandos-google.html

[5] Yusef Hassan Montero; Web Semántica: El papel del Arquitecto de la Información, 28 de Abril de 2003

http://www.nosolousabilidad.com/articulos/web_semantica.htm

[6] Peis, E.; Herrera-Viedma,E.; Hassan Y. and Herrera, J.C. Ontologías, taxonomías y agentes: recuperación “semántica” de la información. JOTRI 2003: II Jornadas de Tratamiento y Recuperación de Información, 8 y 9 de septiembre de 2003

[8] Wikipedia inglesa; Lotfi Zade; http://en.wikipedia.org/wiki/Lotfi_Zadeh

VN:R_U [1.7.4_987]
Rating: 0.0/10 (0 votes cast)
VN:R_U [1.7.4_987]
Rating: 0 (from 0 votes)
Comparte, descargalo en pdf, imprimelo o enviaselo a un amigo!
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • Meneame
  • PDF
  • RSS
  • StumbleUpon
  • Technorati


Instalar Transmission 1.31 en Ubuntu (Repositorios Bortis)

9 08 2008
Acerca de transmission

Acerca de Transmission, versión 1.31

Transmission es un cliente de Bittorrent rápido y sencillo incluido en Ubuntu por defecto. Personalmente me gusta mucho, pero la versión incluida en Ubuntu Hardy 8.04 está bastante desfasada, ya que es la versión 1.06. Aunque si tenemos los repositorios hardy-backports activados podemos tener la 1.22.

Ayer leía un articulo en MundoGeek de que salía la versión 1.31, pero me desilusioné al ver que en los repositorios de ubuntu no se encontraba y que en la página web oficial de descargas de Transmission no se encontraba disponible para descargar el archivo .deb correspondiente, ni en los repositorios. únicamente podías descargarte las fuentes y compilarlas.

Aunque esto no es difícil, si es más tedioso y personalmente me gusta menos, asi que me queje en los foros de Transmission y muy amablemente me dijeron que no es responsabilidad de los desarrolladores de Transmission mantener los paquetes actualizados para las distribuciones. Me indigné un poco, pero también me pusieron un enlace al anuncio oficial en el foro, donde un usuario ponía a disposición unos repositorios (no oficiales) para los .deb en Ubuntu, estos son los repositorios de Bortis.

Aunque no me parece la mejor de las soluciones (lo suyo serían los repositorios oficiales de Ubuntu), al menos conseguí mi fin (aunque llegados a este punto hubiese sido más facil compilar las fuentes).

Bien, si quieres añadir los repositorios de Bortis para tener transmission siempre actualizado a cada nueva versión, copia y pega esta linea en tu terminal.

1
echo "##Transmission (Bortis)" | sudo tee -a /etc/apt/sources.list; echo "deb http://ppa.launchpad.net/bortis/ubuntu hardy main" | sudo tee -a /etc/apt/sources.list;sudo apt-get update; sudo apt-get upgrade;

Esto añadirá el repositorio de Bortis (necesita privilegios de superusuario), actualizara los repositorios y los paquetes (y si, TODO en una sola línea de terminal!)

Si también estas interesado en tener los repositorios para el código fuente (destinado más a desarrolladores), puedes copiar y pegar también esta línea en el terminal:

1
echo "##Transmission sources (Bortis)" | sudo tee -a /etc/apt/sources.list; echo "deb-src http://ppa.launchpad.net/bortis/ubuntu hardy main" | sudo tee -a /etc/apt/sources.list;sudo apt-get update; sudo apt-get upgrade;

Si sólo quieres descargar los paquetes .deb, necesitas descargar e instalar estos dos (pincha en el nombre para descargar):

Actualización 11-08-08: Estos .deb ya están obsoletos, el 11-08-08 salio la 1.32 y es mejor que añadas los repositorios para tener la última versión, ya que en un futuro no iré añadiendo los enlaces a cada versión de .deb, no obstante, puedes encontrar todas las versiones de .deb para descargar en:
http://ppa.launchpad.net/bortis/ubuntu/pool/main/t/transmission/

transmission-common_1.31

transmission-gtk

Como último, decir que también me encargue de sugerir la idea para que actualizaran los repositorios en Ubuntu para Transmission en la web de Brainstorm, pero me dijeron que mejor lo reportara como bug en Launchpad, donde ya lo han anotado para Intrepid, así que posiblemente la versión de Transmission sea de las más actualizadas.


Nota: para los posibles comentarios sobre que existen versiones en servicios como GetDeb, la versión mayor es la 1.22 (mientras escribo), por eso recurrí a buscar otras alternativas.

VN:R_U [1.7.4_987]
Rating: 9.5/10 (2 votes cast)
VN:R_U [1.7.4_987]
Rating: 0 (from 0 votes)
Comparte, descargalo en pdf, imprimelo o enviaselo a un amigo!
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • Meneame
  • PDF
  • RSS
  • StumbleUpon
  • Technorati


Cumplir estandar W3C con target=”_blank” utilizando Mootools

30 07 2008
Este verano estoy programando varios scripts e intento que estos cumplan los estándares al máximo posible.

Al validar uno de mis scripts con el W3C Validator y siguiendo el estándar estricto (Strict) se me presento el problema de que en mis enlaces utilizaba la etiqueta target=”_blank” para que determinados enlaces se abrieran en otra página y no en la misma. Como por ejemplo:

1
<a href="http://undominio.com" target="_blank">enlace</a>

Pero este atributo no era válido para el estándar estricto. Aunque una alternativa podría ser poner el estándar como transicional (Transitional) y conseguir que se validara, prefería cumplirlo a raja tabla con Strict y darle al coco.

Después de googlear un poco encontré un enlace interesante en EsLoMas.com donde se hablaba a lo largo y tendido de como solucionarlo a través de dos funciones de javascript (una más eficiente que la otra) y que simplemente se aplicarían poniendo a un enlace class=”external” (o otro nombre de clase que predefiniéramos).

Por ejemplo así:

1
<a href="http://undominio.com" class="external">enlace</a>

Me gusto la manera de solucionarlo, aunque al utilizar Mootools creía que podría integrarlo en la página y a la vez acortar un poco más el script y con suerte ganar algo de eficiencia gracias a la librería.

Pues bien, el script original ofrecido por la página de EsLoMas.com (la versión más eficiente era la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   function prepareTargetBlank(){
   var className = 'external';
   var as = document.getElementsByTagName('a');
   for(i=0;i<as .length;i++){
      var a = as[i];
      r=new RegExp("(^| )"+className+"($| )");
      if(r.test(a.className)){
         a.onclick = function(){
            window.open(this.href);
            return false;
         }
      }
    }
}
 
window.onload = prepareTargetBlank;

Yo propongo la siguiente solución con Mootools 1.2.1 (seguramente es mejorable, comentarios son bienvenidos):

1
2
3
4
5
6
7
8
9
10
11
    window.addEvent('domready',function()
    {
        $$('a.external').each(function(el)
        {
            el.addEvent('click',function(ev)
            {
                new Event(ev).stop();
                window.open(el.href)
            })
        })
    })

Mi solución esta basada en los selectores de Mootools $$ que recogen la etiqueta a (anchor) y para cada una (each) asocio un evento click (onClick) y paro dicho evento para asociar una nueva ventana al la locación donde apunte el enlace (href).

Para los talibanes del código que quieren que el script pese menos ahorrando líneas de código pueden dejarla en una sola línea de código (aunque se ofusca bastante para luego releer el código en un futuro):

1
    window.addEvent('domready',function(){$$('a.external').each(function(el){el.addEvent('click',function(ev){new Event(ev).stop();window.open(el.href)})})})

Si optáis por esta última versión, os recomiendo guardar un archivo nombre.js y otro nombre_edit.js con la anterior, con el fin, de que podáis tener la versión menos compacta más a mano por si queréis retocarla y para cuando la pongáis en vuestros sitios poner la versión de una línea.

VN:R_U [1.7.4_987]
Rating: 9.0/10 (1 vote cast)
VN:R_U [1.7.4_987]
Rating: 0 (from 0 votes)
Comparte, descargalo en pdf, imprimelo o enviaselo a un amigo!
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • Meneame
  • PDF
  • RSS
  • StumbleUpon
  • Technorati


Firefox 3.1 Alpha 1 pasa el Acid 3 al 84%

29 07 2008

Logo firefox 3.1Firefox 3.1, cuyo nombre de codígo es Shiretoko, ha alcanzado su primera milestone, Alpha 1 en buen camino para una versión final dirigida a fines de este año, a pesar de un breve retraso debido a un error desagradable con Java en Mac OS X.

Quizás la mejora más notable de esta versión es una opción para restringir en la barra de localización con autocompletado de sugerencias a cualquier entrada del historial, las etiquetas o sólo marcadores, así como una opción para decirle a Firefox que busque sólo títulos de páginas o direcciones buscadas.

Para restringir el historial, marcadores o etiquetas, introduce ^, * o + respectivamente en algún lugar entre tus términos. Par incluir titulos o direcciones solo, introduce # or @ y puedes combinarlos con los peradores previos para refinar tus sugerencias.

Una nueva configuración avanzada (accesible entrando en about:config en la barra de localización) te permiten personalizar todos los caracteres por defecto y establecer tu propio carácter o conjunto de caracteres para aplicar a las restricciones.

Además puedes establecer cualquier preferencia relacionada en (browser.urlbar.restrict.history, browser.urlbar.restrict.bookmark, browser.urlbar.restrict.tag, browser.urlbar.match.title, browser.urlbar.match.url) a valores en blanco para aplicar restriciones por defecto (sin introducir ningún caracter especial)

Opciones de restricción

Esta barra de localizaciones con restricciones fue considerada para Firefox 3, pero el rendimiento a lo largo del tiempo y el problema con algunas restricciones hicieron posponer estas mejoras a otra versión. Todavía no se ha decidido si existirá alguna interfaz de usuario (posiblemente en Opciones(Preferencias)/Privacidad) para hacer estas opciones accesibles de una manera más facil.

Para más detalles puede comprobar el post de Edward Lees post (en inglés) sobre el tema. í‰l es en gran medida el desarrollador responsable de esta mejora.

Otra mejora visible es el nuevo comportamiento para el Ctrl + Tab de teclas rápidas: en lugar de pasar a la siguiente pestaña a la derecha como antes, plantea una pequeña superposición con miniaturas. Son ordenadas desde la más recientemente vista en primer lugar, puedes pulsar Ctrl + Tab para pasar sucesivamente entre las actuales y anteriores pestañas, un práctico atajo para acceder a una página de referencia.

Control + Tab en Firefox 3.1

Por defecto, solo se muestran tres miniaturas pero puedes personalizar estableciendo browser.ctrlTab.previewsCount (via about:config) al valor deseado y reiniciar Firefox. Yo encontré bastante más útil el valor de 5.

Puedes deshabilitar esta característica estableciendo browser.ctrlTab.mostRecentlyUsed a false y obtener el viejo comportamiento de Ctrl+Tab. Ctrl + PgUp y Ctrl + PgDown  todavía tiene la navegación clásica.

Alpha 1 consigue resultados mucho mejores en la prueba Acid 3, una prueba comparativa del soporte de estándares web que, a diferencia de anteriores versiones de Acid, no sólo evalúa el cumplimiento de CSS, sino también capacidades DOM y rendimiento. A partir de esta versión, las puntuaciones de Shiretoko son un 84, un 18% de ganancia en comparación con Firefox 3, pero todavía detrás de las WebKit nightlies que ya anotan un perfecto 100.

Prueba Acid 3 Firefox 3.1 al 84 por ciento

Aún falta por venir el soporte para inclusión de audio nativo y vídeo, posiblemente fuentes descargables, opción de autentificación automática para sitios donde un único conjunto de credenciales está disponible, la navegación privada, peticiones AJAX cruzadas en sitios (retirado de Firefox 3, y después de los cambios la especificación), etiquetamiento grueso, autocompletado de etiquetas, la posibilidad de permitir la habilitación a la gestión de color (introducido con Firefox 3) por defecto.

Vamos a esperar y ver lo que sucede en la próxima milestone, que según el calendario del proyecto, la primera beta debería ser en algún momento de Agosto.

Mas detalles y descarga en Mozilla Developer News.

VN:R_U [1.7.4_987]
Rating: 8.0/10 (1 vote cast)
VN:R_U [1.7.4_987]
Rating: 0 (from 0 votes)
Comparte, descargalo en pdf, imprimelo o enviaselo a un amigo!
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • Meneame
  • PDF
  • RSS
  • StumbleUpon
  • Technorati


Páginas: Anterior 1 2 Siguiente