Ir al contenido principal

Entradas

Mostrando las entradas etiquetadas como Programación

[google.maps] Restringir polígono dentro de otro

Hola a todos!! En mi trabajo me toca desarrollar hartas cosas bonitas usando la API de Google Maps . La última cosa bonita que estoy haciendo es un Editor Gráfico web, que ocupa Polyline s y Rectangle s. En el siguiente registro les quiero dejar algunos tips sobre cómo lograr cierta característica que puede serles útil, aun si su desarrollo no apunta a lo mismo. Por lo mismo, este tip requiere de conocimientos previos de manejo de la API para comprenderlo. Vamos al asunto. El Editor que estoy realizando requiere de un área base, o como diríamos en términos gráficos, un lienzo donde trabajar. El objetivo es que el usuario sólo trabaje dentro de esta área, y no fuera de ella. Para ello, me valgo de algunas configuraciones previas, que incluyen un par de variables globales, y algunos manejadores de eventos de Google Maps. Una variable global me indica en qué "Modo" se encuentra el usuario: para este caso, los valores pueden ser "creando" o "en espera". Otra...

[php] No usar "die" en páginas web

 Este es sólo un registro para aconsejar a los programadores de PHP que trabajan en entorno web, a evitar en lo posible el uso de die  en sus algoritmos. Definición de die Según la documentación oficial , die  es un constructor del lenguaje equivalente a exit . A su vez, exit  se define como una construcción del lenguaje que "Imprime un mensaje y termina el script actual" ( PHP: exit - Manual ). En resumen, se trata de una instrucción que ordena al procesador interrumpir o detener la ejecución del programa de inmediato .  ¿Por qué no recomiendo usar die en desarrollo web? Muchos programadores usan esta instrucción en programas o scripts que son ejecutados en consola o como tareas programadas. En ese sentido, es totalmente pertinente su aplicación en scripts que no son parte de un sistema mayor, que trabajan independiente o que aunque sean parte de un sistema de tareas, su desempeño no afecta visualmente el resultado, pues son controlados por otros procesos. En ...

[phpMyAdmin] El almacenamiento de configuración phpMyAdmin no está completamente configurado...

Estaba trabajando en la página de Wordpress para mi cliente, en mi instalación local ( localhost ) y cuando se me ocurre actualizar un par de plugins de WP, todo se cae. Wordpress me da unos avisos horribles de que el usuario de base de datos de WP no tiene el privilegio para alterar la BD... Me sugiere reparar las tablas. Y cuando voy a phpMyAdmin (pMA), el administrador de la BD, éste me sale con el mensaje: El almacenamiento de configuración phpMyAdmin no está completamente configurado, algunas funcionalidades extendidas fueron deshabilitadas. Averigüe por qué. Le doy click al link de "Averigüe por qué" y me muestra un nuevo mensaje, que me informa que la "Configuración de pma ... no recibió el OK ". El primer mensaje me apareció en la pantalla de inicio de phpMyAdmin.  Pero yo primero lo vi (no exactamente el mismo) en la pestaña de Operaciones de la BD de WP... y sucesivamente en la pestaña de Operaciones de todas las BD. En este caso, me ofrecía crear las ta...

[wordpress] Error establishing a database connection

Hola a todos. Trabajando aún con Wordpress, a veces me suele ocurrir el error del título:  Error establishing a database connection. Este mensaje nos aparece al acceder a cualquier parte de nuestro sitio de Wordpress, pues intenta conectarse a la base de datos (BD) y no lo consigue. Lamentablemente, no nos entrega más información detallada para poder saber la causa del fallo. La causa típica es que las credenciales para acceder a la base de datos, que debimos haber ingresado en el archivo wp-config.php , están incorrectas. Tal vez reemplazamos sin querer el archivo por otro antiguo, o pasamos a llevar una letra en el archivo actual. Si revisamos este archivo y lo corregimos usando los datos correctos de acceso a la BD, el problema estaría resuelto. Otra causa, un poco más errática, es que aun teniendo las credenciales correctas, sea la base de datos el problema. En ese sentido, podríamos tener distintos escenarios, tales como: - El servidor de base de datos está caído. En ese caso,...

[javascript] Scroll vertical se vuelve loco al trabajar un menú fijo (fixed menu)

Estoy trabajando en el desarrollo de una página web, en la cual va incluido un menú en la parte superior, de esos amplios que están tan de moda en el diseño gráfico web hoy en día. La idea es que al bajar por la página, este menú permanezca fijo y visible en la parte superior de la página, pero con el detalle de que sea una versión reducida del menú original. O sea, disminuye el alto del menú y el tamaño de la fuente, a fin de no molestar demasiado con el resto del contenido visible en la ventana.  El problema: Hasta ahí había logrado hacer toda la funcionalidad usando CSS y Javascript. De hecho iba perfecto, exceeeeepto en algunas ocasiones en las que, especialmente cuando la cantidad de contenido en la página no alcanzaba a traspasar mucho el alto de la ventana, y se generaba la barra de desplazamiento vertical, con la cual yo intentaba bajar con el scroll, el mismo se volvía loco y alternaba la apariencia del menú superior entre la amplia y la reducida, moviendo el scroll por s...

[php+oracle] Función explode() retorna array con valores cero

Hola a todos! Hoy les comparto un tip que acabo de aprender, tras horas de análisis de un extraño fallo que ocurría en mi programación al usar la función PHP explode() . El fallo que ocurría era que al ejecutarlo sobre un string , los valores retornados en el array resultante, eran todos igual a cero , en vez de ser los substrings esperados. Ejemplo: $cadena = "Hola, mundo" ; $array = explode ( "," , $cadena); Al revisar el valor de $array , me salía esto: Array(    [0] => 0,    [1] => 0 ) En vez de esto: Array(    [0] => "Hola",    [1] => " mundo" ) Al principio, pensé que el separador, la coma, tal vez no era tal, y que era un caracter "similar" a la coma, y entonces debía usar ese caracter "similar" como separador. Por ello, reemplacé el uso de explode() por preg_split() , en la cual puedo usar expresiones regulares como separador. Pero no resultó, pues el caracter, la coma "similar", era exactament...

[css] La útil función calc()

Hola a todos, después de mucho tiempo. Este tip que compartiré hoy no es nada extraño para los expertos en CSS, pero para los que empiezan, siento que les será de mucha ayuda (al menos yo no lo conocí sino hasta casi una década después de programar en web...). Se trata de la función calc() para uso en CSS. Esta función permite realizar operaciones aritméticas simples para obtener valores numéricos de forma dinámica en nuestra definición de estilos. Esto es de muchísima utilidad cuando necesitas precisión al pixel de tu layout; o bien cuando necesitas obtener una posición que es relativa al contenedor, y no es siempre fija. Te dejo algunos ejemplos en los que yo he utilizado esta maravillosa función, salvándome la vida: EJEMPLO 1: .miEstilo {   width : calc(100% - 30px) ;   margin : 5px 15px ; } En este ejemplo, lo que hacemos es que el elemento html al que se asigne la clase "miEstilo", tendrá un ancho del 100% dentro de su Contenedor, pero además, a este 100% se le rest...

[php] htmlentities no funciona como se debe

Hola a todos! Ha pasado mucho de la última vez que escribí aquí, jijiji! Esta vez les traigo un nuevo tip. Se trata del uso de la función PHP htmlentities . Como recordarán, esta función retorna una cadena de texto, con los caracteres especiales convertidos a su forma HTML, vale decir, convierte letras tildadas y otros signos a sus respectivos códigos HTML. Esto permite que el navegador interprete nuestra página HTML como corresponde, y no se quede pillada al encontrarse con extraños símbolos que no entiende. Ahora bien, desde cierta versión de PHP, la forma de usar esta función cambió un poco. Ya no bastaba con llamarla, sino que hay que indicarle ciertos parámetros para que funcione bien. Antes: $cadena = "Hola, ¡cómo estás?" ; $cadena_html = htmlentities ( $cadena ); print $cadena_html ; // A nivel de código, obteníamos: Hola, ¡cómo estás? Ahora: $cadena = "Hola, ¡cómo estás?" ; $cadena_html = htmlentities ( $ca...

[genexus] JSConstructor User Control

Hace un par de años, me tocó aprender a trabajar con un framework llamado GeneXus . Se trata de una "herramienta de desarrollo de software", tal como la describe la Wikipedia , que permite agilizar la construcción de aplicaciones, pues el desarrollador tiene por única tarea diseñar y luego sólo declarar (lo que se conoce como programación de alto nivel): luego GeneXus se encarga de convertir dichas definiciones y declaraciones en código fuente, sobre la plataforma deseada (web, escritorio, móvil). Como humilde programadora rasa, esta herramienta me resultó (y sigue resultándome) algo engorrosa de aprender: para alguien que construye una casa colocando ladrillo a ladrillo, es difícil pasar a construirla usando muros ya prefabricados por otros. Es imposible no sentir una cierta desconfianza, pues acostumbrada a verificar cada ínfimo detalle de la programación, ahora le pasamos esa responsabilidad a un autómata. Según como lo veo yo, esta herramienta está hecha no sólo para ag...

[javascript] Averiguar si Objeto existe usando JQuery

Tengo un sistema donde al cargar la página, se ejecutan una serie de funciones e instrucciones dentro del evento onLoad de la misma. Ahora bien, detecté que un error JS se estaba gatillando en algunas páginas. Resulta que tengo una barra de herramientas (un DIV con botones), la cual tiene asociado cierto comportamiento JS. Esta barra se encuentra en ciertas páginas que la usarán, pero en las que no, precisamente es en donde el error se gatilla. Ya que estoy usando JQuery, tengo todas las funciones de onLoad condensadas en un solo archivo JS, por lo que era posible que esto ocurriera. Por supuesto podría crear un archivo JS por cada página del sistema, de modo que cada una tenga programado de forma personalizada lo que ocurre en el evento onLoad de la misma. Peeeeero, como esto me parece sumamente lento y engorroso, prefiero seguir con el archivo único que es compartido por todas las páginas. Pero, entonces, ¿cómo soluciono lo del error por objeto no definido (la barra que no exi...

[javascript] Función retorna descendiente de objeto DOM HTML

Holas a todos! Hoy les traigo una funcioncita Javascript que hice para apoyar ciertas tareas que estoy haciendo. Así como hace un tiempo les presenté la función tatas() , que les devolvía los ancestros  de un objeto HTML, ahora les traigo la función inversa: la función getDescendiente() les devolverá los objetos hijos o descendientes del objeto HTML buscado. En su momento, dejé el código fuente de la función tatas() en una página en mi host personal. En esta ocasión, lo colocaré acá no más :) Espero que les sea de utilidad :D Recuerden que si van a reutilizar la función, respeten los créditos colocados en los comentarios! Gracias y hasta pronto! /** ----------------------------------------------------------------------------- @about    Retorna objeto DOM (unico o coleccion) descendiente del DOM padre.           Puede ser hijo, nieto, bisnieto: vendra dado por la Generacion. @author   Carolina Casanova Garcia, aka,...

[php] Averiguar si una cadena contiene código HTML

Holas a todos. Estaba buscando una manera rápida de averiguar si un texto era código HTML, y tras una breve indagación googleana, les presento la solución que encontré. Se usa la función nativa de PHP strip_tags() , que lo que hace es limpiar una cadena de toda etiqueta HTML que encuentre, devolviéndonos dicha cadena "limpia". Ya que al usar esta función sobre una cadena que efectivamente tiene etiquetas dentro, nos retornará una cadena totalmente distinta, lo que hacemos es averiguar el resultado de comparar la cadena original con la procesada. /** ---------------------------------------- @author Carolina Casanova García @date 11/06/2013 @return boolean */ function is_html($fval) {   // si las cadenas son distintas, entonces se trata efectivamente   // de una cadena con etiquetas HTML dentro   return (strip_tags($fval) != $fval); } // acá un ejemplo de uso: $cadena = '<u><b>¡Hola!</b></u>' ; print "<p>La cade...

[tsql] Error: La instrucción INSERT EXEC no se puede anidar

Holas a todos. Mientras programaba un procedimiento almacenado, intenté obtener los datos de otro procedimiento, como lo he venido haciendo desde que descubrí tamaña maravilla de la programación sql. Pero hoy me topé con este extraño error: La instrucción INSERT EXEC no se puede anidar . Tras investigar por algunos lados, di con la respuesta: no se puede almacenar en una tabla temporal de procedimiento almacenado, el resultado de otro procedimiento que también esté realizando una inserción de este tipo. Esto es algo como tener: CREATE PROCEDURE miProcedimiento AS  INSERT INTO #tablita EXEC otroProcedimiento;  SELECT * FROM #tablita; END; CREATE PROCEDURE nuevoProcedimiento AS  INSERT INTO #tabla1 EXEC miProcedimiento; END; Esto significará que si ejecuto: EXEC nuevoProcedimiento; ...SQL me arrojará el error antes mencionado. La solución al problema es no llamar a un procedimiento que esté llamando a otro ya en su interior. En algunos lados ...

[sql] Búsqueda por palabras en una frase

Holas de nuevo. Esta vez les he traído un tip especial para principiantes ultra novatos en desarrollo de consultas a bases de datos ^^. Se trata del método que uso para poder hacer consultas a una tabla, filtrando los resultados de acuerdo una frase de búsqueda. Usaré sentencias en TSQL y lenguaje PHP para hacer los ejemplos. Todos sabemos cómo hacer una consulta teniendo una palabra o frase exacta de búsqueda: SELECT * FROM tabla WHERE campo LIKE '%palabra o frase clave%'; Si queremos aplicar la palabra o frase de búsqueda en varias columnas, la sintaxis sería: SELECT * FROM tabla WHERE campo1 LIKE '%palabra o frase clave%' OR campo2 LIKE '%palabra o frase clave%'; ...añadiendo todas las columnas deseadas a continuación, siempre separando con el OR. Si hubiesen más condiciones de filtro, sería encapsular todos los elementos separados por OR, dentro paréntesis redondo: SELECT * FROM tabla WHERE campoX = 'valor' AND (campo1...

[js] Autoajustar posición de capas con Javascript

Holas a todos. Hoy he querido compartir con ustedes una función Javascript que he logrado crear con el fin de realizar la tarea de ajustar la posición de un grupo de capas, de modo que queden todas pegadas, con un valor de margen determinado entre ellas. Esta característica la quería aplicar en mis sitios web desde hacía tiempo, y lo había intentado aplicando la propiedad float:left al CSS de las capas, pero no era suficiente. Si bien en los primeros elementos se veía bastante bien la cosa, luego, cuando debían bajar, pues venía el desorden. En otro intento por acercarme al efecto deseado sin usar programación extra, le asigné a cada capa el mismo alto, de modo que al menos se vieran ordenadas hacia abajo. Pero esto no me convencía, y me di a la tarea de ver la manera de hacerlo con Javascript. Y he aquí el resultado :D Antes:  Después: Pueden ver el código fuente para lograr este efecto en los siguientes enlaces: pero antes, por favor, ¡no borren los créditos! No e...

Fin de la bitacorita como la conocía

Holas a todos. Como lo dijera en mi último registro, he decidido realizar un cambio en mi bitacorita. Esto no incluye el cierre de la misma, sino un cambio de temática. Inicialmente la bitacorita nació para servir de registro de las actualizaciones de mis sitios web; luego mudó a un blog típico, donde hablaba sobre mis cosas cotidianas; y finalmente llegó a ser lo que es ahora: un compendio de todo lo que quisiera escribir: desde notificaciones sobre mis sitios web; reflexiones personales; comentarios de libros y películas; hasta consejos y tips de programación y otros. Y es en esta última área donde he decidido dejar acotada la bitacorita. Ya no será "mi" bitacorita, sino la bitácora de una programadora , en ayuda de otros programadores y/o usuarios del ámbito. Todo el material "personal" se irá a mi Baúl, el cual acabo de inaugurar y en el cual me siento realmente cómoda escribiendo. Como todo "baúl", puedo "echar" dentro todo lo que se m...

[tsql] LEN vs DATALENGTH

Holas a todos. Este es otro registro programístico, hoy sobre TSQL (SQL de Microsoft SQL Server). Mi jefe me comentó la existencia de una función llamada DATALENGTH, lo cual me extrañó, teniendo en cuenta la existencia de la función LEN. Pero buscando en internet la diferencia existente entre ambas, nos encontramos con lo siguiente: LEN: función que retorna la cantidad de caracteres de una cadena, ignorando los espacios vacíos después de la cadena. DATALENGTH: función que retorna la cantidad de bytes de una cadena. Ateniéndonos al detalle clave de "caracteres vs bytes", nos encontramos con que las funciones, aunque en muchos casos nos darán idéntico resultado, en más de una ocasión nos reportarán distintos conteos finales. Y, probablemente, no sólo habrá diferencia a nivel de resultado, sino de performance, ya que LEN realiza una tarea extra en su desempeño (hacer RTRIM a la cadena), por lo que DATALENGTH en teoría debiera funcionar más rápido que LEN. Volviendo al t...

[mysql] Error 1005 (150) Cannot resolve table name close to

Holas! Acá estoy con otro tip para programadores trabajando en MYSQL. Para quienes les sea familiar el error "1005 Can't create table... (150)" al intentar crear una tabla en la base de datos, recordarán que este error se gatilla principalmente por una incorrecta escritura de la definición de los campos referenciados. Así por ejemplo, si tenemos la siguiente definición de una tabla padre: CREATE TABLE tablota (  campo1 VARCHAR(25) NOT NULL,   campor2 VARCHAR(150) NULL,  PRIMARY KEY(campo1) ) TYPE=InnoDB; Y la consiguiente definición de una tabla hija: CREATE TABLE tablita (  campoA VARCHAR(10) NOT NULL,   campor1 VARCHAR(15) NOT NULL,  PRIMARY KEY(campoA),  INDEX (campo1),  FOREIGN KEY (campo1)   REFERENCES tablota(campo1)   ON DELETE RESTRICT ON UPDATE CASCADE ) TYPE=InnoDB; Sabremos que esto nos arrojará error, ya que la definición del campo "campo1" en la "tablita" no está idéntico que la ...

[tsql] División da resultado INTEGER y se requiere que dé DECIMAL

Este es otro pequeño tip para programadores :) Si se han encontrado con este pequeño detalle al ejecutar una división en una consulta TSQL: SELECT 25 / 3; Resultado: 8 Y ustedes esperaban: 8.333 Pues la solución es bastante sencilla, ya que parte de la explicación a este comportamiento de TSQL (no lo he comprobado con Mysql). TSQL retorna el resultado de la operación en el mismo formato o tipo de datos en que vienen todos los operandos. Por lo tanto, si dividimos dos números enteros, el resultado también será un entero. Precisamente aquí es donde TSQL hace su magia no requerida: aproxima hacia abajo cualquier decimal (por no decir que hace un TRUNCATE al número, dejándonos sólo con la parte entera -_-). Por lo tanto, si queremos que el resultado nos muestre los decimales que corresponde, pues... ¡transforma tu número entero en un decimal! :D SELECT 25.0 / 3; Resultado: 8.333333 Voilà! ;D Si tu número viene en una variable, pues conviértelo a decimal y ya está: ...

[php] Cambia Color de Imagen con PHP

Holas!! Hoy estoy acá para mostrarles otra herramienta que usaré en mi paginilla-juego-dollmaker : se trata de la importante herramienta para cambiar de colores las ropitas que puedan usar las muñecas. ¿Cuál era la idea de esto? Sólo poner en la balanza: subir 20 tipos de ropa, cada una multiplicada por unos (mínimo) 10 colores distintos, o sea, unas 200 imágenes GIF por lo bajo, contra un solo script php que toma una ropa en tonos grises y le aplica los colores que uno quiera encima :) Pues bien, acá tienen algunas muestras de ejemplo: Una simple polerita con mangas de color puede cambiar según los colores que nosotros, desde... A... ...una llamativa polera de verano, o bien... ...a una femenina polera primaveral, o bien... ...a una versión más oscurilla para las que se creen malillas :P Y así un sinfín de posibilidades :D Pueden ustedes probar este script haciendo --» click aquí «-- Una vez en la página, para jugar a crear combinaciones de colores de la polera só...