lunes, 16 de febrero de 2015

Oracle, no me gusta que intentes colármela

Que una empresa proporcione actualizaciones es algo meritorio, algo a valorar positivamente, pues demuestra que se preocupan por mantener en un buen estado su software, que éste está vivo y que en la empresa no son unos dejaos. Cierto que a veces las actualizaciones son tan frecuentes que pueden llegar a ser algo molestas (¿seguro que son necesarias con taaaanta frecuencia?), pero bueno, podríamos decir que es un mal menor. Si hay que actualizar, porque es bueno para la seguridad y/o funcionalidad, pues se actualiza y punto.

Ahora bien, que en esas actualizaciones intenten colarme otras aplicaciones que nada tienen que ver con el software principal, me molesta, pues es una falta de respeto y un intento de engañarme. Es como si el fontanero viene a mi casa a arreglarme el grifo y de paso, en cuanto miro para otro lado, intenta ponerme un filtro o una alcachofa en el grifo del baño que yo no le he pedido. No lo quiero ni aunque sea "gratis" (normalmente estas cosas tampoco es que sean gratis, como mínimo te tocará comerte tu buena ración de publicidad). Ese software va a repercutir en mi sistema, de diferentes maneras. ¿Por qué no me preguntas y decides que yo tenga que marcar el "SÍ, QUIERO", en vez de darme la opción ACEPTADA por defecto y que sea yo quien tenga que estar atento a desmarcarla? ¿De verdad una empresa seria ve bien este juego sucio?

Esto ocurre con las actualizaciones de Java que hace Oracle, que así, como quien no quiere la cosa, prueban a ver si cuela y por despiste le doy a "siguiente, siguiente..." y me trago la barra Ask del navegador que, yo no sé si alguien la utiliza, pero yo desde luego no la quiero.


Para mí, es un truco sucio. Y que lo utilice Oracle, una de las grandes de la informática, me molesta. Punto negativo para ellos.

jueves, 5 de febrero de 2015

La importancia de leer código fuente

Me pregunta mi amigo E que si le puedo dar algún consejo para seguir completando su formación en el campo de la programación. E es un informático que ha terminado hace poco sus estudios. Aparte de su formación académica, últimamente ha realizado varios cursos en los que ha conocido distintos paradigmas de desarrollo y diferentes tecnologías y lenguajes.

Hemos intercambiado varias ideas durante una fructífera conversación, y al final, como suele ser habitual, creo que el que supuestamente tenía que dar los consejos (yo) ha salido más enriquecido de la conversación que mi amigo, gracias a la cantidad de información e ideas que me ha dado él a mí.



Sin embargo, no quiero dejar que se pierda un consejo que, este sí, le he dado yo a él y sobre el que le he insistido mucho, y que considero muy importante. Lo voy a poner en letras gordas porque me parece muy importante:

LEE CÓDIGO FUENTE ESCRITO POR OTRAS PERSONAS

Muchas veces, debido a las limitaciones inherentes al tiempo disponible (cursos) o al espacio (libros), cuando nos explican una técnica, lenguaje o herramienta, los ejemplos que nos presentan son "de juguete". Esos ejemplos suelen ser suficientes para ilustrar alguna característica concreta que se quiere destacar, pero en la mayoría de las ocasiones no son realistas. Si pusiéramos ese código en producción, posiblemente nos despedirían al día siguiente (y de manera justificada, seguramente). Lo más probable es que tropezáramos con muchos problemas, ya que en esos ejemplos "de clase" o "de libro" no suelen incluirse cosas que sí se dan en el mundo real.

Por ejemplo, el control de entradas de usuario. En la vida real, un programa debe estar preparado por si en un cuadro de entrada de texto un usuario teclea cualquier dato con basura o, peor aún, con intenciones dañinas (como inyectar código SQL, provocar desbordamiento de buffers...). Los controles necesarios o más habituales en ese tipo de casos norlamente no se explican en los ejemplos de libro, ya que muchas veces lo que se quiere es ir rápidamente al meollo de alguna otra cuestión. Excepción hecha de aquellos temas del libro o curso en los que se quiere ilustrar, precisamente, cómo "sanear" las entradas del usuario antes de proceder a procesarlas.

Por todo ello, y ya que tenemos la suerte de tener chorropocientillones de líneas de código de casi cualquier lenguaje disponibles en Internet en cientos de proyectos grandes, medianos o pequeños (que también los hay interesantes), ¿por qué no sacarles partido? LEE CÓDIGO DE OTROS.

Quizás sea mejor comenzar con proyectos pequeños, pues te puedes hacer una idea global de todas las partes del proyecto con una o dos horas de lectura del código, y seguramente veas estilos y formas de hacer las cosas diferentes de tus costumbres. No quiere decir que sean mejores, pero a lo mejor te dan ideas que no se te hubieran ocurrido antes. A mí me ha pasado: viendo cómo otros han organizado datos o han creado estructuras o han hecho una clase o una función para llevar a cabo una tarea, me he inspirado para hacer algo parecido en mi código, refactorizándolo para dejarlo más eficiente, más legible, más mantenible o, simplemente, más bonito, lo que también tiene implicaciones en cuanto a mantenibilidad, legibilidad y, en última instancia, autosatisfacción (a ver si sólo los artistas van a poder buscar la belleza).

No es necesario tener controlado totalmente el hábito de leer proyectos pequeños para pasar a leer código de proyectos más grandes. Un buen recurso son los proyectos de código abierto (open source) más exitosos, donde su propio éxito es una garantía de que encontraremos código escrito de manera profesional, y seguramente bien estructurado y modularizado. Esa modularidad nos permitirá dedicarnos a leer una parte pequeña de ese proyecto y encontrarle utilidad "per se", sin tener que leer y mucho menos comprender el proyecto entero. Así que, insisto: lee (trozos de) código de proyectos grandes.

--

¿Y tú, has aprendido mucho leyendo código fuente de proyectos reales, o todo lo que sabes se lo debes a los ejemplos "de juguete"?

lunes, 2 de febrero de 2015

Cómo saber la versión de ORACLE

Resulta que me han dado las credenciales de acceso a una BD Oracle, pero no sé qué versión del motor del SGBD de Oracle se está utilizando. ¿Cómo puedo saberlo?

Pues así (gracias a mi compañero M por esta información):



select * from sys.v_$version

También se puede saber con una versión ligeramente distinta, tecleando algunos caracteres menos, lo cual siempre viene bien para los "gandules" como yo:

select * from v$version



Según veo, v$version y sys.v_$version son sinónimos para una vista que sólo tiene una columna (de nombre BANNER) donde hay 5 líneas con información no sólo de la versión del motor, sino de otros componentes de la Base de Datos:  entorno de desarrollo PL/SQL, protocolo TNS (conexión a la BD), la biblioteca de soporte de idioma (NLSRTL = National Language Support Runtime Library), etc.

En la versión "larga", se puede ver que la vista pertenece al usuario "SYS", uno de los usuarios especiales del sistema. El esquema (usuario) SYS contiene las vistas y tablas básicas del diccionario de datos de la base de datos, y las tablas de este esquema se manipulan con las operaciones que se van realizando en la base de datos.

Las dos vistas indicadas para consultar la versión del motor tienen permiso de SELECT para todos los usuarios (PUBLIC)



Pues nada, ahí queda la cosa, por si alguien lo necesita.