En Grupo Femxa necesitamos una persona nueva para nuestro Departamento de E-Learning. Lanzo esta oferta aquí por si alguno de los muchos visitantes de este Blog pudiera estar interesado. La incorporación sería inmediata, así que por favor, abstenerse de enviar el curriculum si no se cumplen los requisitos mínimos. Muchas gracias y pido disculpas de antemano por el "off-topic".
PROGRAMADOR – COORDINADOR TÉCNICO
Su cometido será el mantenimiento técnico (programación) de nuestra plataforma de teleformación, la coordinación de tareas técnicas relacionadas con ésta y el desarrollo de diversos módulos nuevos en función de las necesidades de nuestros clientes.
Ofrecemos amplias posibilidades de formación continua y desarrollo profesional estable.
Requisitos imprescindibles:
- Experiencia de al menos 1 año en exclusiva, en programación con ASP 3.0
- Buen conocimiento de JavaScript y HTML dinámico
- Experiencia y dominio del lenguaje SQL estándar (SQL 92)
- Conocimientos de SQL Server 2000
- Capacidad de relación con otras personas de perfil no técnico y coordinación del trabajo de éstas.
- Flexibilidad.
- Residencia en la zona de Vigo (Pontevedra) o alrededores.
Requisitos deseables (pero no indispensables):
- Conocimientos de programación con la plataforma .NET, en especial con ADO.NET y ASP.NET.
- Conocimientos de MySQL
- Conocimientos de la especificación SCORM 1.2
- Manejo de expresiones regulares
Se valora:
- Conocimientos de otros gestores de datos: Oracle, DB2…
- Conocimientos de PHP y/o J2EE
Si te ajustas a este perfil y estás interesado envía un curriculum actualizado a rrhh@quitaesto.femxa.com indicando en el asunto la referencia KC-0210-05, indicando en la carta de presentación que habéis leído la oferta en JASoft.org.
Hoy he encontrado de casualidad un artículo de opinión del conocido conferenciante David Chappell en el que comenta porqué piensa él que la batalla entre Java2 y .NET esá próxima a llegar a su fin y los motivos de esta idea.
Me ha parecido muy interesante su punto de vista.
También me ha llamado la atención una opinión, por lo sincera, que hace acerca de la diferencia de criterios entre programadores/empresarios y los clientes: los desarrolladores de software que viven de vender soluciones informáticas a sus clientes siempre van a preferir soluciones propietarias mientras que los clientes todo lo contrario, claro. Eso me hace pensar en toda esta ola nueva existente entre empresas que se han caracterizado tradicionalmente por su política "de tiburones" y que ahora se pasan al mundo Open Source seguramente por su alma caritativa y porque en el fondo son ONGs (¿se nota el tono irónico?). ¡OJO! Que a mi me parece perfecto (más código para mi), pero sólo me pregunto por qué lo harán. La respuesta la dejo a la imaginación del lector aunque está bastante clara.
El artículo en cuestión es .NET & Beyond: J2EE split ending war with .NET
La mejor manera de conseguir que sólo pueda existir una copia de una determinada aplicación ejecutándose en cada instante en un equipo es mediante el uso de Mutexes. Los Mutexes son objetos del sistema operativo pensados para sincronizar procesos y subprocesos.
La siguiente función permite averiguar mediante el uso de un Mutex si la aplicación se está ejecutando o no:
public bool EnEjecucion() { Mutex miMutex = new Mutex(false, "NombreÚnicoDeMiAplicación"); return = !miMutex.WaitOne(0, false); }
Su funcionamiento se basa en establecer un Mutex con un nombre único y dependiente de nuestra aplicación, y posteriormente en la segunda línea, solicitar su propiedad con la función WaitOne. Este método devuelve true si el proceso se ha apoderado con éxito de él y false si no es así. Dado que la primera instancia de la aplicación se apodera de él ya no está disponible para las siguientes hasta que ésta primera termine, por lo que las siguientes obtendrán un false al usar WaitOne.
Sencillo.
Consideremos el sigueinte bucle 'for' escrito en C#:
int n = 10; for (int i=0; i < n; i++) { Console.WriteLine(i.ToString()); n--; }
Muy sencillo. La pregunta es: dado que dentro del bucle modificamos el valor de la variable "límite" (n), ¿cuántas veces se ejecutará? ¿10 o 5?
Parece una pregunta tonta pero no lo es tanto. Depende de cómo se haya implementado internamente el bucle en el compilador de C#. Es posible que se ejecute 10 veces si el bucle almacena el valor al principio y en cada vuelta compara con este valor incial (esto puede ser más eficiente en muchos casos). Por otra parte si se compara el valor real en cada vuelta en realidad el bucle se ejecutará sólo 5 veces.
La respuesta a la pregunta es la siguiente: en C# el valor real se compara en cada vuelta por lo que el bucle se ejecutará sólo 5 veces.
Si por el contrario consideramos el mismo bucle escrito en VB.NET (o, para el caso VB Clásico o VBScript):
Dim n As Integer = 10 Dim i As Integer For i = 1 To n Console.WriteLine(i.ToString()) n = n - 1 Next
el bucle se ejecutará 10 veces ya que este otro lenguaje almacena el valor inicial y lo compara en cada vuelta. Es una sutil diferencia pero que puede despistar a los programadores y dar lugar a algún "bug" que otro difícil de detectar.
Ya era hora. Desde luego que es lamentable que Internet Explorer esté en la situación de abandono que está aparentemente, así que es una gran noticia que se reactive por fin la guerra de los navegadores mientras todos los actores en juego respeten los estándares y se dediquen a mejorar el producto, la seguridad y la experiencia de usuario. Paso a reproducir la noticia según IBLNews:
-----
Hemos decidido hacer una nueva versión del Internet Explorer, se denomina IE 7", dijo Gates durante la Conferencia sobre Seguridad de RSA que se está celebrando en San Francisco. El mayor fabricante de software del mundo no había indicado previamente si planeaba presentar una nueva versión del IE.
Recientemente, sin embargo, la aplicación de Microsoft se ha enfrentado por primera vez en años a la competencia de Firefox, un programa web gratuito desarrollado por una red de programadores de software.
La nueva versión de IE, que estará disponible para realizar las pruebas preliminares este verano, tendrá nuevas protecciones contra virus, espías informáticos y estafadores, que engañan a los usuarios para que introduzcan sus datos personales en páginas web que parecen ser legítimas.
Gates dijo que la seguridad continúa siendo la gran preocupación para los "fantásticos avances" que ocurren en el mundo de la tecnología, y que Microsoft está empleando más de un tercio de sus 6.000 millones de dólares anuales en investigación y desarrollo de este tema.
Esta decisión llega tres años después de que Microsoft, la mayor compañía de software del mundo, lanzase su principal iniciativa para asegurar sus software, que funcionan en un 90 por ciento de todos los ordenadores personales.
Los analistas han dicho que los usuarios con conocimientos tecnológicos se están cambiando a Firefox debido a que ofrece una mayor seguridad así como otras medidas que no aparecen en el IE.
De acuerdo con la empresa especializada en estadísticas en Internet WebSideStory, cerca del 5 por ciento de los usuarios de Internet usan actualmente Firefox.
Microsoft también está aumentando sus esfuerzos para lograr una mayor seguridad, y el mes pasado comenzó a ofrecer una versión preliminar de su software gratuito anti-spyware, que impide la entrada de los programas que buscan datos personales en los ordenadores y registran las claves de los usuarios.
Microsoft también está planeado lanzar un producto antivirus, pero Bill Gates no dio detalles en su discurso del martes.
Un problema que se plantea muchas veces a los programadores de ASP.NET y que, normalmente, les cuesta solucionar es el siguente:
Disponemos de una página que realiza determinadas consultas a una base de datos o recopila un volumen relativamente grande de información en su código. Tras procesarla (o en un PostBack) debemos llamar a otra página ASPX que debe utilizar la misma información costosa de obtener. ¿Qué hacemos?
Existen muchas posibles soluciones, sólo que la mayoría no nos sirven de mucho o presentan muchos problemas. Entre otras tenemos las siguientes, que seguramente serían las que intentaría un programador de ASP clásico:
- Hacemos que la segunda página vuelva a recuperar los mismos datos. En fin, no arreglamos nada así.
- Metemos la información en un campo oculto de un formulario y lo enviamos por POST a la siguiente página. Esto es aún peor. Tiene un costo alto de ancho de banda y velocidad de descarga, es muy propenso a errores y problemas de seguridad y no es adecuado tampoco para muchos tipos de datos.
- Usamos una variable de sesión para almacenar los valores entre ambas páginas. Es tal vez el menos problemático (depende de cómo se almacene esta información en Sesión, recuerda, un RecordSet o una matriz no se deben almacenar en sesión pues disminuye mucho la escalabilidad). Sin embargo tiene muchas pegas también, como que por ejemplo hay que gastar memoria de manera innecesaria, pueden quedar valores "flotando" por ahí si el lfujo de las páginas no es el correcto o se nos escapa eliminar la información cuando no se necesite, etc...
La solución en ASP.NET es mucho más interesante. Se trata de utilizar el método Server.Transfer. Con él ejecutaremos la página siguiente desde el mismo contexto que la actual que contiene los datos calculados. Y ahora, ¿cómo se obtiene acceso a dichos datos?. Muy fácil obteniendo una referencia a la página original (desde la que se transfiere el control) mediante el objeto Context, y accediendo a sus miembros de manera normal. Lo explicaré con un ejemplo.
Imaginemos que la página 'pag1.aspx' obtiene un DataSet con muchos datos a partir de una consulta compleja a la base de datos y que luego estos mismos datos deben pasarse a otra página 'pag2.aspx' que debe hacer uso de ellos también. Este DataSet lo almacenamos en un campo público que añadimos a tal efecto a la página llamado por ejemplo, 'datos':
pag1.aspx:
public Class pag1 : Page { .... public DataSet datos = null; .... .... //Se obtiene el DataSet y se almacena... this.datos = ObtenDataSetComplejo(); ... }
Ahora para ejecutar la siguiente página, por ejemplo al pulsar un botón, se escribiría lo siguiente:
pag1.aspx:
Server.Transfer("pag2.aspx");
En la página 2 obtenemos una referencia a la página 1 (se supone que están en el mismo espacio de nombres) y ya podemos acceder a los datos con el código siguiente:
pag2.aspx:
pag1 paginaAnterior = (pag1) Context.Handler; DataSet losDatos = paginaAnterior.datos;
Así de fácil. este truco es relativamente poco conocido, incluso por programadores experimentados, y ayuda a disminuir los errores y a ganar rendimiento y memoria en traspasos de información entre páginas de ASP.NET: Que lo disfrutes.
No voy a entrar aquí a explicar las diferencias "de bulto" entre clases y estructuras en .NET. Todo programador de la plataforma debería conocerlas pues es lo primero que se aprende.
Sin embargo sí me gustaría resaltar una cuestión simple consecuencia de sus diferencias y que a muchos les puede pasar inadvertida. Se trata del comportamiento obtenido al instanciar una matriz.
Imaginemos que tenemos una sencilla estructura como esta:
struct Usuario { public string Nombre; public string Apellidos; }
Si creamos una matriz de estructuras de este tipo así:
Usuario[] usuarios = new Usuario[10];
podremos inmediatamente asignar valores a cada elemento de la matriz, ya que la estrucutra al ser un tipo por valor está disponible para que la usemos:
usuarios[0].Nombre = "Pepe"; //No fallará
Sin embargo si cambiamos la definición de Usuario conviertiéndola en una clase:
class Usuario { public string Nombre; public string Apellidos; }
El código de asignación anterior fallará debido a que al crear la matriz (el código es exactamente el mismo) no se crean al mismo tiempo nuevos objetos de la clase Usuario, sino que la matriz contiene referencias a objetos de tipo Usuario, pero no objetos de tipo Usuario, cosa que sí pasa al instanciar tipos por valor como las estructuras.
Para hacer la asignación primero habrá que instanciar un objeto y asignarlo al elemento de la matriz:
//Esto fallaría //usuarios[0].Nombre = "Pepe";
//Esto es lo correcto en este caso Usuario u = new Usuario(); u.Nombre = "Pepe"; usuarios[0] = u;
//O bien esto otro que es equivalente... Usuario u = new Usuario(); usuarios[0] = u; usuarios[0].Nombre = "Pepe";
Esta sutil diferencia hace mucho más fácil crear y usar matrices de estructuras que matrices de clases, aunque claro, no todo son ventajas. Las matrices de estructuras ocupan más memoria y el hecho de utilizarlas después implica realizar más procesos de Boxing/Unboxing que son costosos en términos de rendimiento. Aún así en la mayor parte de las aplicaciones este hecho no nos afectará. En cada caso hay que sopesar qué es lo mejor pero conviene ser consciente de estas diferencias, que por cierto no existen (en lo que se refiere a la forma de usarlas en código) en la mayor parte de las demás situaciones.
El SDK para TabletPC que proporciona Microsoft está muy bien y comenzar a desarrollar aplicaciones con él no es complicado.
Sin embargo hay ciertas cosas que no son tan fáciles de hacer como debería ser. Por ejemplo, si tienes un TabletPC o has jugado con alguno conocerás y amarás la aplicación Journal (o si tienes Office pues entonces OneNote). Intenta meter toda la funcionalidad de Journal en una de tus aplicaciones. Te reto ;-) La cosa ya no es tan fácil ¿verdad?
Pues para ponértelo liso y llano la empresa Agilix ofrece su producto InfiNotes para Visual Studio. Lo que hace es incluir unos espectaculares controles que sólo con arrastraR y soltar ofrecen todo tipo de impresionantes características para hacer aplicaciones para TabletPC. Hacer una réplica de Journal es casi inmediato.

El producto tiene dos versiones, la Standard y la Professional. La Standard es gratuita y la puedes descargar desde su página inmediatamente. En realidad la paga Microsoft para facilitarte que crees aplicaciones para TabletPC. Viene bastante completa. La versión Professional es más completa y hay que pagarla, pero con la otra tendrás suficiente para muchas cosas.
Al gigante de Redmond no le llega con el mercado del software y de Internet que quiere también comerse el cinematográfico :-)
Microsoft ha contratado al guionista Alex Garland ("La Playa", o "28 Días Después") para que adapta la historia a la gran pantalla. Finalizado este proceso, Microsoft ofrecería el texto (sin derecho a alteraciones) a alguno de los grandes estudios de Hollywood
Entre los candidatos que suenan para dirigir la versión cinematográfica de Halo figura Ridley Scott tras el interés mostrado por los productores Ronald Shussett y Daniel Alter. El argumento del juego se sitúa en una cruenta guerra entre la raza humana y una especie de alianza alienígena conocida como El Pacto.
Halo2 ha sido uno de los grandes superventas de la industria de los videojuegos durante la recien finalizada temporada navideña. Se situó justo por detrás de GTA San Andreas, ambos aparecidas exclusivamente en versiones para consolas.
Microsoft consiguió el record de 2,4 millones de copias vendidas durante el primer dia y acumula unos ingresos de 124 millones de dólares, superiores a muchas de las grandes superproducciones de Hollywood.
(Sacado de Noticiasdot.com)
No sé hasta que punto es conocido por los programadores (no así para los administradores de sistemas) esa pequeña joya del sistema operativo llamada Windows Scripting Host (WSH).
WSH permite ejecutar directamente con un doble-click código escrito en un lenguaje de script tradicional (VBScript y JScript sobre todo) y llevar a cabo así multitud de tareas automatizadas, no relacionadas a la fuerza con la administración de sistemas. De hecho yo lo uso a menudo para probar código de todo tipo, hacer prototipos rápidos de algoritmos, automatizar muchas cosas (desde cargas de datos hasta procesamiento de directorios o cifrado de archivos pasando por monitorización de servidores). Es realmente útil porque permite el uso de cualquier objeto COM automatizable, lo cual incluye ADO o incluso aplicaciones como Excel o Word. Como también se pueden usar sus archivos (con extensión .vbs, .js o .wsh) en el administrador de tareas programadas sirve incluso para realizar tareas periódicas (mis copias de seguridad las realizo diariamente con un script WSH que creé en su día y que lee la información acerca de los datos a respaldar y cómo hacerlo desde un archivo XML).
En el mundo .NET no hay nada similar que venga de parte de Microsoft, lo cual es una verdadera lástima. En realidad sería muy sencillo construir una aplicación .NET que emulara en todos sus aspectos a WSH (una buena base para hacerlo podría ser mi artículo Compilación de código al vuelo en .NET, del número 2 de DotNetMania). Lo cierto es que he estado tentado de hacerlo varias veces pero la falta de tiempo (y mi fuerza de voluntad para que no me pueda el vicio del silicio) lo han impedido siempre.
Microsoft está trabajando desde hace tiempo en un nuevo modelo de administración de sistemas basado en comandos que está integrado con .NET y supondrá una auténtica revolución (no sólo para Windows). Su nombre en clave es Monad (el que sepa algo de la filosofía del pensador Gottfried Leibniz entenderá el nombre enseguida) y también se le conoce como MSH. Aparecerá con Longhorn, la próxima versión de Windows aunque se podrá usar en Windows XP/2003. De momento sin embargo no nos podemos aprovechar de él (salvo los beta testers). El que esté interesado podrá encontrar un completo artículo introductorio mio sobre Monad en el próximo número de la revista Windows TI Magazine.
¿Mientras tanto qué podemos hacer?. Aparte de crearnos nuestro propio WSH.NET, podemos escoger la ruta fácil y usar alguna de las utilidades similares que hay disponibles de forma gratuita en Internet y que tratan de hacer lo mismo. Las más recomendables son las siguientes:
Espero que te parezcan utilidades interesantes. Con ellas podrás escribir y ejecutar código .NET rápidamente, sin necesidad de abrir Visual Studio (ni siquiera de tenerlo) ni usar compiladores, y empleándolo para automatizar fácilmente tareas en tu equipo.
 Nokia ha anunciado el lanzamiento de 'Nokia LifeBlog 1.5', un programa interactivo que permite montar un 'blog' en el móvil a partir de los mensajes, imágenes o vídeos que cada usuario almacena durante el día. Los espacios personales en la Red se han convertido en los protagonistas del último año, y la nueva tecnología de Nokia permite que sus usuarios puedan organizar contenidos dentro de su móvil como un 'blog' en la Red.
Durante 2004, el fenómeno del 'weblog' se ha extendido y muchos internautas se han atrevido a convertirse en emisores de información en la Red con tan sólo tres sencillos pasos. Un informe publicado por la empresa Pew Internet of American Life Project en enero de este año aseguraba que el número de adeptos a los 'blog' en EEUU había aumentado un 58% durante 2004.
El nuevo programa informático lanzado por la compañía finlandesa permite crear un diario personal móvil al habilitar un espacio para añadir anotaciones a los elementos que el usuario va guardando en su terminal. Con las nuevas características de los teléfono móviles, los usuarios escriben muchos mensajes, hacen fotografías inolvidables o graban vídeos especiales con sus amigos durante el día, y todo eso se convierte en un material 'perfecto' para un 'blog' personal. Para gestionar el nuevo programa de Nokia, los usuarios necesitarán un teléfono de los modelos 7610, 6670, 6630 y 6260.
Charlie Schick, directivo de Nokia, ha asegurado que "con 'Nokia Lifeblog', tu móvil recogerá y ordenará cronológicamente tus momentos mas inolvidables. Y una vez que tienes todo guardado, podrás compartir 'on line' vía 'blog' o 'e-mail' muchos de esos contenidos, ya sea desde tu ordenador o desde tu móvil", ha asegurado el directivo de Nokia.
Además, Schick ha afirmado que "todo lo que necesita un 'lifeblogger', es una cuenta de correo, con un proveedor compatible con Nokia Lifeblog", ha afirmado Schick.
El nuevo programa de Nokia no sólo organiza los elementos que almacenas en el móvil, sino que viene con una serie de funcionalidades adicionales; la posibilidad de pasar a CD o DVD un elemento y verlo en pantalla completa o el aumento de las posibilidades de compartir contenidos a través del móvil.
'Nokia Lifeblog 1.5' ya está disponible en 15 idiomas.
Descarga Nokia LifeBlog 1.5
Noticia sacada de BECK, boletín sobre el mundo TIC de Krasis. Suscríbete. Es gratuito.
Microsoft acaba de publicar la Small IT Solution for Mobility v1.0 (Beta).
Se trata de una colección de documentos que ofrecen guía sobre planificación, distribución y operación de soluciones basadas en sistemas móviles (Microsoft Mobile 2003) en la empresa pequeña y mediana (PYME). habla también de cómo combinarlos con Exchange y SBS 2003.
Se puede descargar gratuitamente desde aquí.
Hasta ahora poco se sabía de las nuevas características que ofrecerá la próxima versión de Internet Information Services, la 7.0. Pero últimamente se han empezado a oir rumores y algunas publicaciones electrónicas relacionadas con el mundo Microsoft están empezando a soltar algunos datos.
Parece ser que en 2006, IIS 7.0 nos traerá como mínimo:
- Una mayor modularidad. Podremos escoger con libertad, a nivel de núcleo, qué funcionalidades queremos que tenga nuestro servidor. Así el servidor estará menos cargado y ofrecerá una menos "superficie de ataque".
- Una integración íntima y absoluta con ASP.NET, no como ahora que es un filtro ISAPI encima de IIS.
- Un nuevo sistema de configuración distribuido basado en XML y al que se podrá sacar partido desde ASP.NET.
- Una remozada interfaz de administración orientada a tareas y mucho más avanzada que la actual.
- Mejoras importantes en diagnosis, trazado y estadísticas de uso.
Ya veremos qué más podemos ir conociendo sobre el asunto.
Brad Adams es uno de los que estuvo en el desarrollo de la plataforma .NET desde el principio, en 1998, y que también ha participado en el desarrollo de Longhorn. Me ha llamado la anteción leer en su Blog personal un post que habla del porqué de la existencia de un método DontTouchThis() en la clase Int32 y en otras similares dentro del código fuente de Rotor (la implementación de código abierto de la plataforma .NET).
Parece ser que lo hacen exclusivamente para que el compilador no les lance una advertencia por tener un miembro privado que aparentemente no se usa y que en realidad sirve para almacenar el valor asociado a la clase.
Es una tontería pero me ha parecido curioso comprobar cómo incluso en productos tan trabajados como .NET sus experimentados programadores hacen chapucillas como esta de vez en cuando. Yo os aseguro que si tengo que hacer algo similar para salir del paso acabaría pensando que seguro que hay una forma mejor (o correcta) de hacerlo y que se me está escapando algo. Es decir, siempre tendría un poco "la mosca detrás de la oreja" por hacer cosas raras como esta. Ya veo que no hay motivo para ello ;-)
La versión de trabajo real (Release) de la plataforma no lo tiene así que no lo busques, pero al parecer el código fuente a partir del cual se genera sí lo mantiene. Curioso... Vale la pena darle una leidita...
Cuando restauramos una copia de seguridad de una base de datos de SQL Server desde un servidor a otro diferente es posible que los propietarios de las tablas de la base de datos recién restaurada no coincidan con el propietario que tenemos en el resto de bases de datos o con el de las tablas del sistema.
Si deseamos establecer de forma manual el propietario de una tabla (o en general de cualqueier objeto) de SQL Server podemos recurrir al procedimiento almacenado sp_changeobjectowner. Basta con abrir el analizador de consultas y escribir:
sp_changeobjectowner 'propietario.tabla', 'nuevo_propietario'
para cambiarlo. Por ejemplo:
sp_changeobjectowner 'usuario.Articulos', 'dbo'
cambiaría el propietario a 'dbo', es decir, el propietario por defecto de los objetos de una base de datos y el que normalmente se utiliza.
|
|
Copyright © 2010 José Manuel Alarcón Aguín. All rights reserved.
|
|