Entradas de jorge:

Patentes

Miércoles, 26 de Noviembre de 2008

Leo impresionado en barra punto y slash dot que un juez a dado la razón a un tal Bilski sobre que no se pueden realizar patentes de métodos abstractos e ideas si no están vinculadas a una máquina o transforman físicamente un producto (En USA por supuesto). Las implicaciones sobre el mundo del software son importantes aunque menos de lo que parece. Las patentes sobre estos métodos impiden los softwares clónicos por ejemplo yo me programo un windows con las mismas capacidades y la misma pinta pero desde cero. Desde mi punto de vista esto no siempre es tan común ya que cualquier cambio en las funcionalidades ya no afecta la patente.

Pero lo que me ha sorprendido es que uno de los enlaces vinculados explican que donde ha causado un revuelo interesante es en las oficinas de gestiones de impuestos y transacciones bancarias. Por lo visto en estados unidos existen bufetes que tienen patentados métodos para pagar menos impuestos. Es decir la forma óptima de vender una casa pagando menos impuestos es un método patentado!!! Esto también se aplica a gran cantidad de transacciones de este tipo que han sido patentadas en algún momento. Estás patentes al no estar vinculadas a un ente físico también se caen.

El artículo no tiene desperdicio pero no creo que cambie nada en el mundo de la informática. Pero si que vamos a asistir a un incremento de programas que se venden con ordenador incluido ya que la sentencia no pone un límite claro a que vínculo tiene que existir con el hardware.

SQLite y .NET

Jueves, 20 de Noviembre de 2008

SQLite (http://www.sqlite.org/) es una librería que implementa un motor de bases de datos completo. SQLite es un sistema bastante popular que proporciona bases de datos ligeras, simples y robustas. Su característica más notable es que toda la base de datos está contenida en un solo fichero que se puede copiar comprimir o enviar por E-Mail. Esto es especialmente útil para desarrollar aplicaciones que dependen de una base de datos evitando el requisito de instalar previamente un complejo servicio como SQLExpress o estar limitado por una base de datos Access.

Esta librería esta escrita en C y podemos ver ejemplos de su uso en http://www.sqlite.org/quickstart.html Pero existen envoltorios en una gran cantidad de lenguajes. Entre ellos esta por ejemplo el desarrollado para plataformas .NET http://sqlite.phxsoftware.com/ . Este componente implementa la mayor parte de las características de un servicio ADO.NET 2.0. Esto permite realizar aplicaciones visuales con mucha rapidez usando los componentes de Visual Studio Express. El siguiente códio en VB proporciona un método para abrir la base de datos y ejecutar una consulta sencilla.

Imports System.Data.SQLite

Public Class sqlite

Public cnn As SQLiteConnection

Public Sub connect(ByRef filename As String)

Try

cnn = New SQLiteConnection(“Data Source=” & filename)

cnn.Open()

Catch e As Exception

MsgBox(“Error connect: “ & e.Message)

End Try

End Sub

Public Function ExecuteQuery(ByRef sql As String) As DataSet

Dim ds As New DataSet

Dim mycommand As SQLiteCommand = New SQLiteCommand(cnn)

mycommand.CommandText = sql

Dim reader As SQLiteDataReader = mycommand.ExecuteReader()

ds.Load(reader, LoadOption.OverwriteChanges, “table”)

Return ds

End Function

Public Function ExecuteScalar(ByRef sql As String) As String

Try

Dim mycommand As SQLiteCommand = New SQLiteCommand(cnn)

mycommand.CommandText = sql

Dim value As Object = mycommand.ExecuteScalar()

If Not (value = Nothing) Then

Return value.ToString()

Else

Return “”

End If

Catch ex As Exception

MsgBox(“Error: “ & ex.Message)

Return “”

End Try

End Function

End Class

Existen tambien una gran cantidad de gestores de bases de datos. Dos de ellos son SQLite Administrator (http://sqliteadmin.orbmu2k.de/ ) y el plugin para firefox SQLiteManager (https://addons.mozilla.org/es-ES/firefox/addon/5817 ). Estos gestores te permiten crear bases de datos y realizar consultas SQL.

2008 Matlab Fall Contest is less that 24 hours away

Miércoles, 5 de Noviembre de 2008

Empieza el concurso de programación de Matlab.

http://www.mathworks.com/contest/

El concurso tiene una dinámica divertida. Se publican resultados varias veces y los problemas son bastante originales. Sigue la convocatoria en

http://blogs.mathworks.com/contest/

Multiplataforma Real

Sábado, 1 de Noviembre de 2008

CMake es un generador de proyectos o Makefiles para diferentes plataformas. La idea es que tu código en C/C++ sea compilable en diferentes plataformas lo que normalmente suele implicar diferentes compiladores. En el mundo de C/C++ la batalla siempre está entre la cadena de herramientas gnu o los compiladores de Microsoft. Otra de sus ventajas es que permite compilar con facilidad en un directorio diferente del que contiene el código fuente. Esto es muy cómodo para realizar compilaciones cruzadas diferentes de un mismo código.

CMake permite generar makefiles para la cadena de herramientas GNU o proyectos de Visual C nativos. Pero su ventaja fundamental no es esta sino una biblioteca de scripts que permite resolver las dependencias del código que compilamos. Los que hayan entrado en este mundo en los tiempos de Ubuntu/APT y la instalación de paquetes automática quizá no sepan el terrible infierno que puede ser compilar un programa que depende de 5 librerías que a su vez depende de otras 5 que entran en conflicto entre sí.

Para crear un proyecto que compile con CMake lo único que hay que hacer es insertar un fichero de texto llamado “CMakeLists.txt” en cada directorio del proyecto que tenga archivos compilables.  Supongamos que queremos hacer un ejecutable que se llama Demo que depende de una librería que se llama Hello. El código de la librería y el ejecutable residen en los directorios Demo y Hello respectivamente.

El directorio de mayor nivel contiene el siguiente código:

# El nombre del proyecto es "HELLO". Los ficheros CMakeLists en este proyecto
# se refieren al direcotrio raíz del proyecto como ${HELLO_SOURCE_DIR} y
# al directorio raiz donde se almacenan los binarios como ${HELLO_BINARY_DIR}.
cmake_minimum_required (VERSION 2.6)
project (HELLO)


# Indicamos que cmake entren en dos subdirectorios Hello y Demo
add_subdirectory (Hello)
add_subdirectory (Demo)

El directorio Hello tiene el siguiente fichero CMakeLists.txt


# Crea un librería "Hello" que incluye el fichero "hello.cpp".
add_library (Hello hello.cpp)

El directorio Demo tiene el siguiente fichero CMakeLists.txt


# Definimos los ficheros de cabecera de la cabecera de la librería.
include_directories (${HELLO_SOURCE_DIR}/Hello)
# Definimos el lugar donde se encuentra el archivo de la librería.
link_directories (${HELLO_BINARY_DIR}/Hello)
# Creamos un ejecutable llamado helloDemo que se crea con los ficheros
# "demo.cpp" y "demo_b.cpp".
add_executable (helloDemo demo.cxx demo_b.cxx)
# Enlazamos el ejecutable con la librería Hello
target_link_libraries (helloDemo Hello)

Cuando ejecutamos cmake en el directorio raíz del proyecto automáticamente se genera un makefile o un proyecto de visual C nativo que podemos compilar con las herramientas correspondientes. En el caso de que nuestro proyecto dependa de una librería podemos usar una gran cantidad de scripts predefinidos para encontrarla. Por ejemplo si nuestro proyecto depende de la librería zlib podemos incluir en nuestro CMakeLists.txt

FIND_PACKAGE(ZLIB)

Esta línea busca la librería usando los macros predefinidos para la librería si la encuentra pone a nuestra disposición las variables

# ZLIB_INCLUDE_DIR - where to find zlib.h, etc.
# ZLIB_LIBRARIES - List of libraries when using zlib.
# ZLIB_FOUND - True if zlib found.

que luego podemos usar para compilar nuestro programa. Si cmake no encuentra las dependencias nos preguntará por su situación y rellenará las variables.

Su sencillez y su interfaz amistosa comparado con otras herramientas como automake/autoconf ha hecho que gane popularidad muy rápido y ha sido adoptado por grandes proyectos open source como KDE4 o OpenScenGraph. Desde mi punto de vista es una herramienta magnífica para compilar código opensource sobre windows.

Fábricas de Ideas

Sábado, 18 de Octubre de 2008

 

Las empresas surgen para reducir los costes de proveer un servicio o un producto. Los individuos especializados son mas productivos. Tradicionalmente las empresas han tendido a crecer agrupando especialidades cada vez mas concretas. Las mejoras en las comunicaciones y las nuevas tecnologías permiten la colaboración entre entidades de forma rápida, eficiente y con un coste muy bajo.

Hoy en día una empresa no puede mantener una equipo de expertos en todos los campos. La tendencia actual no es la creación de monstruos empresariales que aglutinan una cantidad de personal inmensa sino la externalización de las tecnologías que no se poseen. En este sentido las empresas del siglo XXI son un conglomerado de microempresas.

Este entorno da lugar a aplicaciones WEB como innocentive donde las empresas acuden en busca de externalizar el desarrollo de tecnologías. Esta página divide a sus visitantes en seekers y solvers. Los seekers son empresas que ofrecen un suculento premio en metálico por una solución a sus problemas. Los solvers pueden acceder a esta lista de problemas y desarrollar una tecnología apropiada para resolverlas o también buscar una aplicación para una tecnología ya desarrollada. 

Visita www.innocentive.com si quieres probar suerte y ganar un suculento premio de 10.000$

Potatobztag

Sábado, 27 de Septiembre de 2008

Potatobztag

Preguntas temibles para entrevistas de trabajo…

Miércoles, 17 de Septiembre de 2008

Quieres ver temblar al aspirante bajo presión… 

Aqui van algunas ideas 

- Preguntas sin respuesta: ¿Como mejorarías un yo-yo?, Véndeme este lápiz, Que te llevarías a una isla desierta o a quien invitarías a una fiesta

- ¿Porqué una clase abstracta debe tener un destructor virtual? (caso verídico)

- ¿Porqué no ganas mas a tu edad?

- Explícame porque suspendiste tantas veces física en primero de carrera (caso verídico)

- Cuanto éxito crees que has tenido hasta ahora?

- ¿Cómo te has preparado para esta entrevista?

- ¿Cuál es el último libro que has leído? ¿y el último relacionado con tu trabajo/carrera?

Pero buscando en Internet me ha llamado la atención la lista de preguntas ILEGALES. No se pueden hacer preguntas sobre algo que represente una discriminación para el puesto de trabajo. Por ejemplo es ilegal preguntar de que país viene o cual es su lengua nativa. También es ilegal preguntar como se imagina dentro de 10 años ya que eso incluye una probable planificación familiar que puede afectar a tu carrera profesional. Por supuesto no se puede preguntar si tienes planes de tener hijo. Una cosa sorprendente es que no puedes preguntar si consumes alcohol o fumas ya que son sustancias legales. Todas estas referencias aparecen en páginas americanas y no tengo claro si en España se han planteado algo parecido alguna vez.  

¿Cual es la pregunta mas retorcida que os han hecho ?

Enchufan el acelerador tocho del CERN

Miércoles, 10 de Septiembre de 2008

Existe una pequeña posibilidad de que se produzca un mini-agujero negro que se trague la tierra, quien sabe… hoy puede ser el último día sobre el planeta, (después habrá mas días pero sin planeta…)

La información veraz y rigurosa la puedes encontrar aquí por ejemplo o en google pero la información que probablemente te interese está aquí o aquí.

Viene el fin del mundo!!!

Surface Depth Hallucination

Miércoles, 3 de Septiembre de 2008

Lo mejor de todo es el nombre pero lo bueno es que es una técnica que permite obtener un relieve aproximado con una foto con iluminación difusa. Aunque lo presentan como una técnia para obtener el 3d usando una foto sin flash y otra con flash la foto con flash permite mejorar el resultado pero no es necesario. Primero lo ví en slashdot. No os perdais el video aquí. Para mas información todo viene explicado en este artículo o en la pagina web original
incluyo tambien un poco de código (sin comentar sorry y solo la versión sin flash)

im= imread('piedras.jpg');
gris = rgb2gray(im);
for i=1:4 ,
PSF = fspecial('gaussian',3^i,(3^i)/2);
%Create a simulated blur in the image and add noise.
Blurred(i,:,:) = imfilter(gris,PSF,'conv');
end


for i=1:3,
laplacian(i,:,:)=double(0.5*(double(Blurred(i,:,:))./double(Blurred(i+1,:,:))));
end


s=size(laplacian);
depth= zeros([s(2),s(3)]);
for k=1:s(3),
k
for j=1:s(2),
for i=1:s(1),
if laplacian(i,j,k)>0.5
d= 3^i*sqrt(1/laplacian(i,j,k));
else
d= -3^i*2*(1-laplacian(i,j,k));
end
depth(j,k)=depth(j,k)+d;
end
end
end
maxim=max(max(depth));
minim=min(min(depth));
depth=(depth-minim)/(maxim-minim);
figure,imshow(gris);
figure,imshow(depth);
imwrite(depth,’depth_piedras.jpg’,'JPEG’);
imwrite(gris,’piedras_gris.jpg’,'JPEG’);

Sindrome post - post - vacacional

Miércoles, 3 de Septiembre de 2008

Vuelta de vacaciones, superado el primer día y enfrentándose a la dura jornada por la mañana y tarde,  os mando dos enlaces para pasar el tiempo pareciendo que trabajas:

- Crackme: Juega a ser un hacker haciendo cracks y keygens. Una colección de retos para el aficionado al ensamblador.

- Project Euler: Colección de problemas matemáticos que se van complicando rápidamente. Son ideales para aprender a programar en un lenguaje exótico que no sabes para que sirve.