jueves, 28 de noviembre de 2019

Cómo ordenar elementos aleatoriamente con jQuery para Slick.js

Cómo ordenar elementos aleatoriamente con jQuery para Slick.js


Hola.

Estoy usando la librería Slick.js para mostrar una galería de fotos que se van moviendo de derecha a izquierda dentro de la página principal.

El método o constructor Slick se coloca con javascript al momento de la carga de la página sobre un div especifico a través de la class del div.

Slick.js no tiene algún método para mostrar la galería en orden aleatorio por lo que se debe resolver de otra manera. En mi caso voy a resolver con jQuery porque no tengo modo de hacerlo de otra manera.

Solución.


Lo recomendable es ordenar aleatoriamente los elementos de la galería antes de llamar al método Slick porque este agrega nuevos elementos div para hacer los efectos visuales.

Lo que hago es definir una función llamada randomize para ordenar aleatoriamente los child elements del div especificado, después llamo a esta función y finalmente llamo al método Slick.

Aquí abajo les dejo el código:


$.fn.randomize = function (selector) {
var $elems = selector ? $(this).find(selector) : $(this).children(),
$parents = $elems.parent();
$parents.each(function () {
$(this).children(selector).sort(function () {
return Math.round(Math.random()) - 0.5;
}).detach().appendTo(this); });
return this;
};

$(".clientes-logo").randomize();    

$(".clientes-logo").slick({infinite: true, autoplay: true, autoplaySpeed: 4000 });


Como ven la función randomize que ordena aleatoriamente es muy útil para ordenar elementos dentro de un div por lo que la pueden usar para algún otro propósito.

Espero les sirva.


miércoles, 27 de noviembre de 2019

Cómo acceder elemento random de una lista en c#

Cómo acceder elemento random de una lista en c#


Hola.

Acceder un elemento random de una lista en c# es un problema muy común en programación. En este caso se trata de mostrar ciertos elementos de publicidad en una vista en donde el orden no importa pero requiere de cierta movilidad.

Así que estoy usando una lista de c# para guardar elementos de tipo entero.

Lo que quiero hacer es obtener un indice aleatorio de la lista para acceder al elemento de ese indice. Con esto obtendré un elemento aleatorio cada vez que se ejecute el código.

Esto se resuelve de la siguiente manera.

Solución.


En este caso miLista es una lista de numero enteros.

1.- Crear una nueva instancia de random
2.- Obtener un numero aleatorio teniendo como máximo el numero de elementos de la lista
3.- Obtener el elemento con la posición aleatoria.

Así queda el código ejemplo:

static Random random = new Random(); 
int indiceRandom = random.Next(miLista.Count);
int elementoRandom = miLista[indiceRandom];


Espero les sirva

martes, 26 de noviembre de 2019

ASP - Permission denied - Scripting.FileSystemObject

ASP - Permission denied


Hola.

Este es un error no descriptivo de IIS de permisos de escritura al usar el objeto Scripting.FileSystemObject

Primero aquí lo recomendable es habilitar errores descriptivos de IIS para saber la linea exacta del error. Para esto hagan lo siguiente desde IIS:

El error que tengo es usando el objeto Scripting.FileSystemObject, para ser exactos el error ocurre al momento de borrar una imagen fisicamente.

Les pongo aquí el código que está ocasionando el error y la línea que falla es la que realiza el DeleteFile.

Set fs=Server.CreateObject("Scripting.FileSystemObject")
finalfile = "E:\mi\ruta\miarchivo.htm"
fs.DeleteFile(finalfile)


Solución


La solución es dar permisos al usuario de IIS (IUSR) sobre el archivo o la carpeta en cuestión.
Para saber cuál es el usuario que está usando IIS para el sitio web, sigan estos pasos:

1.- Abrir IIS
2.- Seleccionar el sitio web
3.- Seleccionar Authentication
4.- Seleccionar Anonymous Authentication y click en Edit


Edit Anonymous Authentication Credentials


Con el nombre del usuario identificado deben ir a la carpeta o archivo físico y agregar el usuario con permisos de edición.

1.- Seleccionar la carpeta o archivo con click derecho
2.- Seleccionar el tab Security
3.- Click en Edit
4.- Click en Add y buscar el usuario IUSR
5.- En permisos para IUSR seleccionar Modify
6.- Click en OK

Les dejo aquí la imagen de cómo se ve el usuario con permisos sobre una carpeta o archivo.

Security Permissions for IUSR


Después de esto ya pueden volver a intentar, el permiso de escritura del usuario IUSR debe quedar arreglado.

Espero les sirva.

Cómo ver errores descriptivos de IIS en el navegador

Cómo ver errores descriptivos de IIS en el navegador


Hola.

Tengo el error genérico de un sitio web en IIS que dice:

An error occurred on the server when processing the URL. Please contact the system administrator.

Como ven el error no dice nada mas y por lo tanto no es útil para poder debuguear y solucionar el problema.

Lo que necesito es habilitar la descripción de errores en el browser para tener mas información y así saber por dónde atacar el error.


Solución.


Para hacerlo sigan estos pasos en IIS.

1.- Abrir IIS
2.- Seleccionar del lado izquierdo el sitio web
3.- Seleccionar la opción IIS > ASP
4.- Dentro de Debugging Properties cambiar Send Errors to Browser a True
5.- Click en Apply

IIS Send Errors to Browser

Después de esto, refresquen el navegador y ya deben poder ver más información sobre el error.

Espero les sirva.

lunes, 25 de noviembre de 2019

Cómo agregar nuevo elemento a un array en c#

Cómo agregar nuevo elemento a un array en c#


Hola.

Estuve buscando la manera de cómo agregar un elemento a un arreglo de c# de manera rápida.

Bueno, resulta que no hay manera rápida de agregar un elemento a un arreglo en c#. Por definición un arreglo es de una medida fija y por lo tanto no puede ser extendido. Esto aplica para arreglos de cualquier tipo: int, string, char, etc.

En mi caso estoy usando un arreglo de enteros y quiero agregar uno al final dinámicamente por lo que no sé cual es la medida el arreglo.

Solución.


La solución aquí es usar una lista en lugar de un array. La lista puede ser extendida dinámicamente facilmente con el método add y no tienen que definir un length fijo.

Utilizar la lista facilita no solo el agregar elementos sino también otras tareas sobre la lista.

Les dejo aquí abajo un ejemplo de cómo agregar un elemento a una lista de enteros.

List<int> enteros = new List<int>(); 
enteros.add(1);


Espero les sirva.


jueves, 21 de noviembre de 2019

ORA-01157: cannot identify/lock data file 201 - see DBWR trace file

ORA-01157: cannot identify/lock data file 201 - see DBWR trace file


Hola.

Se obtiene este error cuando no se encuentra el temp data file de la base de datos de Oracle.

Me sucede porque he realizado una restauración de base de datos y el TEMP datafile no es un archivo que forme parte de los archivos de backup.

En mi caso cuando la restauración se realiza, el nombre del temp datafile es actualizado y no coincide con el de la base de datos destino. En el caso de que el nombre y la ruta del temp datafile fuera el mismo, incluso así, lo mejor es recrear el TABLESPACE temporal o el datafile temporal.

El datafile temporal no se exporta ni se restaura por lo que lo mas recomendable después de una operación de restauración es crear uno nuevo. Siempre tomando en cuenta que una base de datos de Oracle necesita al menos un datafile temporal.

En mi caso para la solución lo que hago es eliminar el TABLESPACE temporal, volverlo a crear y asignarlo a la base de datos.

Solución.


Primero lo recomendable es ver el nombre y la ubicación del datafile temporal. Para esto ejecuten el siguiente query sobre la vista v$tempfile. Verifiquen que la ruta y el nombre existan.

SQL>SELECT FILE#,STATUS,NAME FROM V$TEMPFILE;

Como mencioné se puede borrar únicamente el datafile temporal o el TABLESPACE temporal completo.

Aquí les dejo las instrucciones para crear un nuevo TABLESPACE (TEMP01) con un nuevo datafile (TEMP0101.dbf), asignar a la base de datos y borrar el TABLESPACE anterior (TEMP).

Esto se puede hacer con la base de datos prendida ya que es tablespace temporal.

SQL> CREATE TEMPORARY TABLESPACE TEMP01 TEMPFILE 'C:\app\administrator\oradata\DATABASE\TEMP0101.dbf' SIZE 200M AUTOEXTEND ON; 
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP01; 
SQL> DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;


Espero les sirva.

miércoles, 20 de noviembre de 2019

ORA-20001: SYSMAN already exists

ORA-20001: SYSMAN already exists


Hola.

Como saben el usuario SYSMAN es la cuenta de Oracle usada para configurar y administrar el Enterprise Manager. Este usuario es creado para ese propósito por lo que si están viendo este error se debe a que el repositorio de Enterprise Manager ya ha sido creado con anterioridad.

El error se me presenta cuando estoy tratando de reconfigurar el Enterprise Manager de Oracle después de haber realizado una restauración de base de datos Oracle con RMAN.

Como en la base de datos origen el Enterprise Manager ya estaba configurado, el usuario SYSMAN y todos sus objetos ya estaban creados, el script truena cuando se intenta volver a crear el usuario SYSMAN.

Solución.


Ante este error busqué las siguientes instrucciones para borrar el usuario SYSMAN, roles y objetos. Estos objetos se vuelven a crear cuando se reconfigura el repositorio Enterprise Manager de Oracle.


SQL> SHUTDOWN IMMEDIATE; 
SQL> STARTUP RESTRICT; 
SQL> EXEC sysman.emd_maintenance.remove_em_dbms_jobs; 
SQL> EXEC sysman.setEMUserContext('',5); 
SQL> REVOKE dba FROM sysman; 
SQL> DROP USER mgmt_view CASCADE; 
SQL> DROP ROLE mgmt_user; 
SQL> DROP USER sysman CASCADE; 
SQL> ALTER SYSTEM DISABLE RESTRICTED SESSION;



Espero les sirva.