Bueno, aunque por trabajo llevo mas de un mes sin escribir (manda huevos y no tengo excusa) he conseguido, o mejor dicho el blog solito ha conseguido superar durante los últimos 15 días la barrera de las 100 visitas diarias, incluyendo fines de semana que son mas flojitos. Esto «me llena de orgullo y satisfacción» ya que poco a poco el blog va creciendo. A ver si me tomo menos en serio mi trabajo y mas enserio mi blog y escribo más, porque tengo «chicha» como para escribir mas de 40 artículos, pero me tengo que sentar a escribir. Bueno, espero que aunque un poco chorra, pueda escribir al menos 1 post al día, a ver si lo consigo.
Aunque faltan todavia 16 dias para que salga a la luz ya esta disponible en fase beta la version 8.10 de Ubuntu. Para llevar un contador, he puesto un contador de la pagina de Ubuntu con una cuenta atras para que salga la versión estable.
He creado una seccion (pagina) en la cual voy a ir apuntando los juegos de escape que vaya encontrando y cuando tenga las soluciones, las mismas o mejor dicho, la direccion del post donde se encuentra. Ya que he decidido a dar un giro al blog, aunque seguire con temas tecnicos, tambien ire poniendo soluciones a estos pequeños comecocos que tanto me gustan y que los tengo abandonados desde hace algunos años, he rebuscado entre las paginas antiguas (un foro que tenia hace años) donde tengo o tenia unas 30 soluciones de juegos flash de hace algunos años. Al rescatar con existo de un backup la base de datos donde los tenia almacenados, ahora aparte de los que vaya jugando, rejugare a estos clasicos y si me quedo atrancado echare un ojillo a las soluciones y reescribire o readaptare las soluciones para publicarlas.
De la mano de ArmorGames y GodLimations nos llega esta aventura de escape titulada (pobremente) Escape. En este juego encarnamos a Dialla, una detective que es secuestrada por Dan McNeely y encarcelada en una celda de la que debera de salir. Pulsa en la imagen para jugar o sigue leyendo para ver la solucion al juego.
De entrada podemos saltarnos la intro, en la que resumidamente nos cuenta y vemos como Dialla es encarcelada por Dan McNeely (El malo malisimo) y esta le mete un tiro con una pistola, pero aparece Merik (compañero del Dan) y salva a Dan de una muerte segura. Tras estra mas que breve introduccion, entremos de lleno en el asunto.
Estamos en una celda con nuestro compañero (profesional y sentimental) Mickey, mas que con el, estamos con su cadaver. Lo primero que tenemos que hacer es encender la luz. Si buscamos en el cadaver, en el brazo izquierdo (derecha en la pantalla) tenemos que quitarle el reloj. Si abrimos la chaqueta, dentro hay una biblia que debermos de examinar ya que dentro se encuentra la tarjeta de seguridad de Mickey.
Nos giramos a la derecha y debajo de la almohada hay 2 monedas que cogeremos, debajo de la cama si pinchamos por le lado de mas a la derecha encontraremos una toalla. De vuelta a la vista de la cama con mucho cuidado porque cuesta encontrarlo, a la parte de la pared hay un clavo que tambien cogeremos.
Nos volvemos a girar a la derecha y vamos al water, retrete, wc y bajamos la tapa (que somos una señorita) y con la moneda dorada desenroscamos el tornillo y nos llevamos la tapa (nunca se sabe cuando nos puede dar un apreton). Ahora vamos al lavavo y ponemos la moneda plateada como tapon. Lo logico ahora seria abrir el grifo, pero no hay (joooo), bueno no pasa nada, tendremos que pinchar donde estaria el grifo para que nos diga que efectivamente no hay grifo, ahora si nos giramos y vamos a los barrotes, vemos que al fondo hay un tio rubio (Jason White). Hablamos con el del grifo y del reloj. Dejamos de hablar con el y con el reloj seleccionado, se lo daremos y haremos el intercambio del reloj por el grifo, que colocaremos en el lavavo.
Ahora si abrimos el grifo, y con la moneda puesta en forma de tapon, el agua empezara a llenarse hasta revosar, es ahora cuando pondremos la toalla en un tragadero (desague) que hay en el suelo de la habitacion, saliendo el agua por fuera de la celda. Tocaremos la campana para llamar al carcelero y este se matara al resbalarse (si es que va sin cuidado) y le quitaremos la llave para poder salir de la celda, aunque tambien le quitaremos un visturi y una escopeta.
Usamos la llave sobre la cerradura de la celda y saldremos al pasillo. Al fondo tenemos una puerta que no podemos abrir y a la derecha la celda de Jason. Le liberamos porque el pobrecito nos ayudo a escapar. El muy sinverguenza al dejarlo libre, hablaremos con el con la intencion de recuperar el reloj de nuestro querido Mickey pero el nos atacara aunque nosotros le clavaremos el visturi en la pierna y lo tiraremos a un rio o algo asi.
Muerto Jason, podremos inspeccionar su celda, en la que solo hay 2 cosas de interes, un flexo o lamapara que hay en el suelo y un lector de tarjetas en la pared que al pasarle la tarjeta de Mickey, nos dara acceso a la puerta que habia en el fondo. Asi que eso haremos, ir a la puerta del fondo y abrirla con nuestra tarjeta recodificada.
Dejamos atras las celdas (de color verde) y nos adentramos en una habitacion de color azul. En esta habitacion hay 3 cosas a tener en cuenta, por un lado la pared de la izquierda, en la que veremos una mancha que pinchando varias veces sobre ella, ooooh! romperemos la pared y podremos colocar primero la lampara que la dejaremos encendida y un poco mas arriba, el clavo, la taza del retrete y una foto que hay encima de la mesa en el lado derecho de la habitación segun entramos. Una vez hecho esto, nos damos la vuelta hacia la mesa donde estaba la foto y sorpresa, la foto tenia un agujerito por donde la luz nos indica donde volver a romper la pared. Si rompemos nuevamente la pared, nos encontramos ante unos documentos que evidencia lo que se esta haciendo ahi abajo.
Al coger los documentos aparecera nuestro amigo el simpatico Merik con una pistola. Aqui hay que preocuparse y no ya que aunque debemos de demostrar nuestra maestria con la escopeta, es sencillo de pasar y si nos matan volvemos a salir cuando aparece Merik, asi que tranquilidad y si no sale a la primera, pues ya saldra a la segunda. En esta batalla de armas 3 cosas a tener en cuenta, si no disparamos nuestra mira se hara mas y mas pequeña por lo que ganaremos algo de punteria, por lo que no es bueno andar disparando a lo loco, sino solo cuando aparezca Merik, por otro lado hay que tener sumo cuidado con las flash, unas granadas luminicas que nos tira Merik a mitad de la batalla, pero tiene truco, simplemente, cuando la veas aparecer apunta justo al borde de las cajas y cuando asome la cabeza justo antes de que explote la flash, disaparas y luego pasados 2 segundos mas o menos poner el cursor en el centro de la pantalla y disparar (cegados por supuesto), con un poco de practica le daremos. Por ultimo y muy a tener en cuenta, ya que a mi me mataron 5 veces aqui hasta que cai en el truco, es que cuando esta apunto de morir, Merik no se esconde cuando le disparas y se queda clavado sin moverse y disparando hasta que uno de los 2 muera y claro, no podemos ser nosotros. Aqui el truco esta en apuntarle y disparar a lo loco sin pensarlo.
Una vez muerto, tenemos la puerta abierta a la siguiente y ultima habitacion. En la que por sopresa se nos avalanza Jason, que no estaba muerto, pero aparece en escena Dan que le ofrece una jeringa de Immorgamsics que otroga supuestamente la inmortalidad, cuando Jason va a cogerla Dan lo acribilla de un disparo. Ahora empieza el juego, Dan nos ofrece la libertad o la inmortalidad, lo que tenemos que salir de la habitacion (morada) por una puerta redonda blindada.
Encima de la puerta del cuarto de los trastos (donde matamos a Merik) hay una lampara alojena con una llave que deberemos de recoger. Ahora tenemos que buscar un reloj de pared, y si pinchamos sobre las 4, lo retiraremos de la pared y recogeremos el microchip amarillo. Ahora debemos de buscar la caja fuerte y mirar entre la caja fuerte y el reloj, en el techo, encontraremos el microchip azul. Ahora y desde la misma camara, en el suelo estara el microchip rojo.
Al lado de donde cogimos el microchip rojo hay como un enchufe que si lo observamos es una clave con con cuadros de colores y numeros (1, 2 y 3). Este «enchufe» hace referencia al color de las habitaciones, que si recordamos eran, verde en la celda, azul en el cuarto de los trastos y morada en esta ultima. Si introducimos correctamente los colores y con la llave que recogimos de la luz alojena, abriremos la tapa y aparece 3 huecos del color de los microchips que recogimos.
Si nos hemos dado una vuelta por la habitación nos habremos dado cuenta que encima de la puerta de salida (la redonda que parece de un banco) hay una especie de rejilla en plan respiradero, pues, segun coloquemos los microchips en sus ranuras, este respiradero variara. Lo que realmente nos interesa es la combinacion de azul y amarillo, apareciendo la trampilla verde con la clave (es fija) 9260. Una vez anotado el numero de la suerte, si ponemos el chip rojo que es el ultimo que queda, aparece la trampilla marron con una llave plateada.
Con la clave y la llave abrimos la caja fuerte y sorpresa, hay una tarjeta como la que tenia Mickey pero nuestra perteneciente a la organizacion. Dan empieza a contarnos que realmente nosotros somos el lider de la organización, que perdimos la memoria, pero a Dialla eso no le importa y decide que quiere irse de alli, pero al abrir la puerta, se da cuenta que no hay salida, que es un acantilado.
Dan, para impedir que escapemos, nos disparara en el hombro, y justo cuando se dispone a rematarnos le dispararemos con la escopeta cayendo Dan en la caja fuerte, la cerramos y la tiramos por el acantilado al mar.
Quien no ha jugado alguna vez a algun juego de escapar de la habitación. Estos juegos flash, convertidos ya en clasicos, nos encontramos con una trama mas o menos currada en la que deberemos de salir de una habitación o varias con la ayuda de nuestro ingenio y de cosas que nos encontremos por las habitaciones, a veces, haciendonos sentir como McGyver.
Hace algunos años, en un foro que tenia y que abandone, tenia una sección de juegos de este estilo en el que tenia los juegos y las soluciones a los mismos y como siempre me han apasionado, voy a escribir sobre los juegos y sus soluciones ya que a muchos le es de gran ayuda y a mi me encanta el revanarme el coco para encontrarles solucion.
Recuerdo que en un trabajo en el que estube, cada uno tenia un usuario de Unix (era FreeBSD) y cada usuario tenia en su home una carpeta public_html para que no tuvieramos que usar todos y darnos permisos en /var/www.
Ahora al instalar Ubuntu en el portatil, quiero volver a poner todas las webs que tenia en local pero claro, no le voy a dar permisos a /var/www y aunque solo yo usare el portatil, no estaria de mas tener un sistema para que en la home de cada usuario exista una carpeta public_html en la cual cada usuario ponga las webs que quiera.
Este sistema que era desconocido para mi, se llama UserDir. Para instalarlo si estamos en Ubuntu, lo unico que tendremos que hacer es buscar en el Synaptic un paquete llamado libapache2-mod-ldap-userdir, o mas facil, buscar directamente «UserDir» y nos aparecera el paquete en cuestion. Una vez instalado, deberemos de ir a la carpeta /etc/apache2/mods-available y copiaremos o moveremos los archivos userdir.conf y userdir.load a la carepta /etc/apache2/mods-enabled. Una vez copiados los archivos, abriremos una consola y ejecutaremos el comando «/etc/init.d/apache2 restart» para reiniciar apache.
Una vez reiniciado apache, y copiados las configuraciones, ya lo tenemos todo listo. Ahora toca probarlo, asi que iremos a la home de nuestro usuario /home/nombreusuario y creamos una nueva carpeta public_html, una vez hecho esto, creamos un index.html de prueba, abrimos nuestro navegador y escribimos http://localhost/~nombreusuario y deberia de aparecernos nuestra pagina de inicio que creamos.
Asi de sopeton puede parecer algo complicado, pero luego son 2 tonterias que no nos llevara mas de 2 minutos configurarlo.
Aparte de esto, si abrimos el archivo userdir.conf, podremos modificar las reglas para cambiar el directorio public_html de la home y ponerlo en otro lugar.
Llevo tiempo currando con Visual Basic .Net, pero como persona formada desde hace años en lenguajes tipo C (C, C++, Java, C#, PHP, etc) el paso a programar en Visual Basic, cuesta mucho y cosas tan cotidianas como hacer un bucle, un switch o similares pueden convertirse en una peligrosa trampa que nos consumira muchos minutos muy valiosos.
La ultima que me he topado ha sido el bucle do while. En cualquier lenguaje tipo C, practicamente independiente del lenguaje estos bucles son iguales:
do {
sentencias
} while(condicion);
Pero como no, estamos con Visual Basic y aqui todo funciona de manera diferente, es como nuestro tipico amigo que siempre lleva la contraria a todo. Por ejemplo para hacer un bucle do-while (me sorprende que en 9 meses sea la primera vez que me vea obligado a hacerlo, el bucle es do-loop-while, siendo su sintaxis
Do
sentencias
Loop While condicion
Puede que la gente que conozca o programe en Visual Basic lo vea una tonteria, pero para gente como yo que por razones laborales se ven obligadas a programar en dicho lenguaje y que por muchos meses se que lleve sigan prefiriendo C# a VB.Net, cosas tan cotidianas pueden convertirse en un minimundo.
Ya de paso y para aprovechar el post, explico que los bucles do while, son bucles que se recorreran igual que los while, en funcion de una condicion que de ser cierta dara una vuelta mas al bucle y que la principal diferencia entre los bucles while y do while, radica en que el while, primero comprueba la condicion antes de hacer una iteracion al bucle, mientras que los do while primero dara una iteracion al bucle y al final comprobara si debe de seguir haciendo iteraciones. Dicho de otro modo, el el while, primero comprobamos que debemos entrar al bucle y de ser cierto, entramos, en los do while, primero entramos al bucle y al final de este comprobamos si debemos dar una vuelta mas.
Hace ya un año, arregle un viejo ordenador que tenia en casa de mi madre y que abandone al independizarme. Cuando me puse a mirar cosas para arreglarlo empece a cambiar y cambiar y al final le cambie casi todo menos la caja de la torre, los 2 cd’s y un cacharrito que es un cenicero con mechero como el de los coches que va en un slot de cd que me regalo la parienta hace unos 5 años o asi.
Cuando me encontre con un ordenador la poya de pontente y como ya tenía el portatil con Windows XP y yo era feliz, decidí meterle primero PCLinuxOS y luego Ubuntu. El problema vino de mano de Microsoft (que sinverguenzas, siempre igual xD) ya que me pasaron un Windows Vista y la verdad queria verlo y juguetear con el (como me arrepiento) así que lo instale machacando lo que habia por pequeños problemas que tuve con Ubuntu. Al relativemente poco tiempo me cambie de trabajo y empece a programar con tecnologias de Microsoft por lo que entre el curro, el poco tiempo, las pocas ganas o pereza y que me venia bien tener el Windows con el Visual Studio y como no para hecharme un vicio de vez en cuando, abandone la idea de instalar Linux de nuevo.
Durante este año, mi portatil con unos 4 años va acumulando toda la mierda que puede acumular un Windows con actualizaciones, programas, bases de datos, mugres, mugres y mas mugres. Al final he decidido aplicarle la eutanasia a mi portatil para no verlo sufrir asi y lo he formateado. El formateo fue un cachondeo y ya prepare el post de como lo hice porque es digno de ver la que tuve que liar.
Al final consegui instalar un Ubuntu 7.10 y actualizar a Ubuntu 8.04 por internet. Todavia tengo que configurar muchas cosas, pero tiene todas las papeletas de que lo desinstale e instale un PCLinuxOS ya que me va mas rapdio y mejor.
La parte positiva es que vuelvo al mundo Linux de nuevo y no vuelvo solo ya que mi querida novia si quiere ver el correo y navegar por internet tendra que usar Linux y usar Firefox o WillyFox como lo llama ella. Soy perverso.
Hace poco escribí como escribir el símbolo del euro en una transformada XSLT. Para completar lo que ya comenté en su momento, explicaré como se escapan caracteres en una transformada para no tener que recurrir a buscar códigos especiales de HTML tal como el €.
Para escapar texto dentro de una transformada existe un parámetro llamado disable-output-escaping que toma los valores yes|no, en función de si queremos o no deshabilitar que se escapen caracteres. Este atributo se aplica a 2 etiquetas de XSL, la etiqueta xsl:text y la etiqueta xsl:value-of, aunque seguramente se aplique ha alguno más.
Cuando aplicamos disable-output-escaping sobre xsl:value-of, este deshabilitara el escapado si así se lo indicamos sobre el contenido de la variable. Por el contrario, al aplicarlo sobre el xsl:text, necesitamos poner el texto a escapar encerrado entre CDATA, ya que sino, puede dar errores.
Cuando queremos hacer alguna operación sobre un par de número en una transformada (XSLT) lo hacemos con el símbolo + o *, la cuestión esta en cuando queremos dividir o calcular el resto o módulo de una división, los caracteres tradicionales para estas operaciones / y % entran en conflicto con XPath, por lo que no se pueden usar tal cual, por lo que usaremos las siguientes instrucciones.
Usaremos la palabra reservada div para realizar la división de 2 números, siendo el código.
<xsl:value-of select="9 div 3"/>
Para realizar el calculo del módulo o resto de una división, usaremos la palabra reservada mod siendo su sintaxis igual que la del div.
<xsl:value-of select="5 mod 2"/>
Espero que este articulo pueda ayudar a mucha gente ya que estube horas hasta dar con la solucion de como hacer una division en una transformada XSLT.
Por casualidades del destino, alineación de los planetas y una antigua profecía egipcia, este verano me he quedado sin vacaciones y claro esta, a bien que me he quedado currando, mis proyectos estan más que acabados y los jefes no están, he decidido desconectarme, es decir, ir al trabajo, hacer mi trabajo correspondiente (poco porque lo tengo terminado) e irme a casa a descansar y en casa el ordenador poquito, lo justo para algún que otro día hecharme un vicio. A falta de pan buenas son tortas.
Con un poco mas de fuerzas y volviendo a mi ritmo habitual con los jefes ya aquí, ire escribiendo nuevos artículos, intentando que estos sean lo más utiles e interesantes posibles.
Supongamos que tenemos un campo con un texto, lo recuperamos con una consulta SQL y queremos cambiar parte del contenido de ese texto para reemplazarlo por otro. Lo que muchos desarrolladores hacen es realizar un replace por código (programación backend), pero y si esto no nos vale, y si necesitamos que sea por consulta todo por ejemplo para exportar listados o una query de BI. Para estos casos existe una funcion REPLACE que se ejecuta en SQL y es similar a la de la mayoría de lenguajes de programación.
La llamada a la función de reemplazo (REPLACE) se usara dentro de cualquier código SQL o TSQL en SQL Server. La función REPLACE tiene 3 parámetros, el texto original completo, el texto que se quiere buscar y por último el texto por el que se quiere sustituir como se hace en muchos lengaujes de programación.
La sintaxis sería:
REPLACE(TEXTO, BUSCADA, SUSTITUIDA)
Un ejemplo de como se incrustaría el reemplazo en una consulta SQL sería:
SELECT REPLACE(campo, 'a', 'b') FROM tabla
Aqui nos encontramos con el primer de los dos grandes problemas de reemplazar texto con esta función. El primer problema son los campos de tipo TEXT, que al parecer, para SQL Server son objetos diferentes que los campos de tipo CHAR o VARCHAR y para poder reemplazar un campo de tipo TEXT necesitamos hacer un pequeño HACK que nos convierta de tipo TEXT a tipo STRING como si de un VARCHAR se tratase.
El Hack en cuestion se trata de hacer un SUBSTRING desde la primera posición de la cadena hasta la última utilizando la longitud de la misma obtenida con la funcion DATALENGTH. De esta forma, con el SUBSTRING convertimos el tipo TEXT en un tipo STRING o VARCHAR y asi podemos reemplazar.
Un ejemplo seria:
SELECT REPLACE(SUBSTRING(campo, 1, DATALENGTH(campo)), 'a', 'b') FROM tabla
Y es aquí cuando nos encontramos con el segundo y mayor de los problemas y es la longitud de la cadena. Cuando trabajamos con una cadena de texto realmente larga, como podría ser una página web, el SUBSTRING o el REPLACE no devuelve la cadena completa, por lo que se nos cortara la respuesta y obtendremos solo parte del texto original, eso si, ya reemplazado.