Mostrando entradas con la etiqueta lenguajes de programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta lenguajes de programación. Mostrar todas las entradas

14 de febrero de 2020

:: Java. Determinar si dos fechas pertenecen al mismo día

Únicamente como recordatorio para determinar si dos fechas son del mismo día (00:01 a 23:59), podemos hacer uso de la siguiente función "isSameDay" de la clase "DateUtils":


if (DateUtils.isSameDay(date1, date2)) {
    System.out.println("Fechas en el mismo día");
} else if (date1.before(date2)) {
    System.out.println("Fecha1 es anterior a la fecha2");
} else {
    System.out.println("Fecha1 es posterior a la fecha2");
}


10 de mayo de 2019

:: Tip. Obtener en C# el último fichero abierto en un "OpenFileDialog"

Únicamente a modo de recordatorio, cuando necesitemos en un "OpenFileDialog" recuerde la ruta a la carpeta que accedimos ultimamente, debemos utilizar: "System.Environment.GetFolderPath(Environment.SpecialFolder.MyComputer)"









OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);


13 de enero de 2019

:: ¿Qué son los "polyfill"?

En desarrollo web, "Polyfill" es un fragmento de código que proporciona una característica a los navegadores web que estos no soportan nativamente.

Por ejemplo, un "Polyfill" permite a los desarrolladores web utilizar una API, independientemente de si es compatible con un navegador, y normalmente con una sobrecarga mínima. Habitualmente  comprueban si un navegador es compatible con una API y la utilizan -si está disponible-, o -en caso contrario- utilizan su propia implementación.

Un ejemplo de "polyfill" sería: sessionStorage, que permite guardar información localmente. Esta es una característica que está disponible a partir de IE8, pero si la necesitásemos para navegadores anteriores, la solución sería utilizar un "polyfill".

En resumen, el uso de "polyfills" nos aporta beneficios, al escribir código fuente compatible en todos los navegadores.

Más información: https://en.wikipedia.org/wiki/Polyfill_(programming)

Índice de polyfills:
https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills

Guía sobre como escribir polyfills:
http://addyosmani.com/blog/writing-polyfills/

12 de julio de 2017

:: PHP. Obtener datos sobre la salida y puesta de sol

Aunque existen algunos servicios para obtener esta información, el lenguaje de programación PHP nos lo pone un poco más fácil, al estar disponible la función:

date_sun_info(fecha, latitud, longitud)

Como prueba de concepto recuperaremos la información sobre salida y puesta de sol para una fecha y ubicación determinada:

<?php $sun_info = date_sun_info(strtotime("now"), 43.4222027, -5.8248455);
foreach ($sun_info as $clave => $valor) {
    echo "$clave: " . date("H:i:s", $valor) . "
";
}
?>

13 de mayo de 2016

:: Liferay. Manual de uso y administración básica

En el siguiente documento de -un poco más - de 100 páginas tenemos una descripción sobre el manejo y administración básica del gestor de contenidos Liferay 6.2.

Si bien se trata de un sencillo manual, puede servirnos de guía de referencia ante cualquier duda que nos surja sobre el uso del CMS.

El documento está dividido en los siguientes puntos:
1.- Introducción
2.- Configuración
  • Interfaz gráfica de usuario
  • Arquitectura del portal
  • Usando el panel de control
3.- Gestión de documentos
  • Portlet de Documentos y multimedia
  • Navegación por Documentos y multimedia
  • Tipos de documentos y conjuntos de metadatos
  • Extracción automática de metadatos
  • Restricciones por tipo de documento
  • Acceso WebDAV
  • Configuración del portlet Documentos y multimedia
4.- Suite de colaboración de Liferay
  • Blogs
  • Foros
  • Wikis


Documento realizado por Scio technology consulting

26 de marzo de 2016

:: Liferay. Comprobar si estamos logueados

A veces necesitamos saber si el usuario está o no logueado para aplicar una u otra opción en una plantilla Velocity. Para ello, podemos utilizar el código siguiente:

#set ($themeDisplay = $httpServletRequest.getAttribute("THEME_DISPLAY"))
$themeDisplay.isSignedIn()
Los pasos a seguir para crear una prueba de concepto son los descritos a continuación:
1.- Creamos una estructura sencilla
< ?xml version="1.0"? >
< root >
    < dynamic-element name="titulo" type="text" index-type="" repeatable="false"/ >
    < dynamic-element name="texto" type="text_box" index-type="" repeatable="false"/ >
< /root >

2.- Creamos una plantilla asociada que nos mostrará un mensaje si estamos logueados, y otro distinto en caso contrario
#set($serviceContext = $portal.getClass().forName("com.liferay.portal.service.ServiceContextThreadLocal").getServiceContext())
#set($httpServletRequest = $serviceContext.getRequest())
#set($themeDisplay = $httpServletRequest.getAttribute("THEME_DISPLAY"))
< div >
    $titulo.data

    $texto.data

    #if($themeDisplay.isSignedIn())
        El usuario está logueado

    #else
        El usuario no está logueado

    #end
< /div >

3.- Añadimos un contenido del nuevo tipo de datos definido (estructura)

4.- En una página insertamos un publicador de contenidos que muestre esta información

5.- Estando des-logueados comprobamos el mensaje que se muestra

6.- Estando loguegados comprobamos que el mensaje mostrado es el que corresponde

Una tarea sencilla que puede ser de utilidad y que muchas veces no recordamos cómo se hace.

20 de enero de 2016

:: UILang. Librería javascript para programar con lenguaje natural


Las interacciones del usuario con un portal web consisten a menudo en mostrar u ocultar una capa al pulsar sobre un elemento, lanzar cuadros de diálogo modales, etcétera.
Lograr estos comportamientos nos obliga a programar haciendo uso de html,css y javascript, a menudo con algún plugin o librería, lo que implica tener ciertos conocimientos técnicos.

UILang es una librería javascript de apenas 1 KB que nos permitirá definir estos comportamientos haciendo uso del lenguaje natural.
Por ejemplo si tenemos una capa que deberá ocultarse al pulsar sobre un botón, el código necesario será el siguiente:
< code >clicking on ".show" adds class "popup" on "#notification"< /code >
De esta manera, describimos por medio de determinados verbos el comportamiento deseado.
El código completo sería el mostrado a continuación:
< !doctype html >
< title >Example< /title >
< script src=uilang.js >< /script >

< style >
  /* Font styles, colors, etc. omitted for clarity */
  #notification {
    transition: .8s
  }
  #notification.hidden {
    opacity: 0
  }
< /style >

< div id=notification >
  < p >Tienes nuevos mensajes.< /p >
  < button class="hide">Ocultar

< /div >

< code >
  clicking on ".hide" adds class "hidden" on "#notification"
< /code > 

Más información en: http://uilang.com/

5 de enero de 2016

:: AUI. Cuadro de diálogo modal

Alloy es un framework javascript utilizado - entre otros - por el CMS Liferay, que lo incluye de forma nativa a partir de las versión 6.0.

Este framework fue construido a partir de YUI 3, otro framework desarrollado por Yahoo, por lo que Alloy dispone de las funcionalidades originales.

En definitiva, Alloy implementa funcionalidades para la mayoría de código desarrollado para Liferay.



Ejemplo de diálogo modal:

< script type='text/javascript' >
AUI().ready('aui-dialog', function(A) {
   var instance = new A.Dialog({
      bodyContent: 'Contenido del cuadro de diálogo',
      centered: true,
      constrain2view: true,
     destroyOnClose: true,
     draggable: true,
     height: 250,
     resizable: false,
     stack: true,
     title: 'Ejemplo de diálogo modal',
     width: 500,
     modal:true,
     cssClass: 'clasePrueba',
     id: 'identificadorDialog',
     buttons: [
       {
           text: 'Alerta1',
           label: 'Aceptar',
           handler: function() {
           alert('alerta1');
       }
     },
      {
         text: 'Alerta2',
         label: 'Cancelar',
         handler: function() {
         alert('alerta2');
      }
    }
   ]
 }).render();
});
< / script >

El significado de los distintos parámetros es el siguiente:

bodyContent (string): Es el contenido del cuadro de diálogo, el cual puede contener texto plano, código o portlets

centered (boolean): Establece si el cuadro de diálogo aparecerá o no centrado en pantalla

constrain2view (boolean): Comprime el cuadro de diálogo para que sólo se vea la región visible del portlet.

destroyOnClose (boolean): Destruye el cuadro de diálogo cuando lo cerramos. En caso de no destruirlo, quedaría creado pero oculto

draggable (boolean): Establece si el cuadro de diálogo podrá ser o no re-ubicado en pantalla

height (int): Establece la altura del cuadro de diálogo

resizable (boolean): Establece si el cuadro de diálogo podrá ser o no re-dimensionado

title (string): Establece el título del cuadro de diálogo

width (int): Establece el ancho del cuadro de diálogo

modal (boolean): Establece si es cuadro de diálogo es o no modal

butons (array): Permite añadir botones al cuadro de diálogo, estableciendo la acción tras su pulsación

close (boolean): Muestra el  icono de cerrar el cuadro de diálogo

cssClass (string): Permite añadir una clase al cuadro de diálogo

id (string): Asigna un identificador al cuadro de diálogo

16 de noviembre de 2015

:: Wordpress. Error: "No input file specified"

En alguna que otra ocasión, tras la instalación de Wordpress el portal devuelve el siguiente error al intentar acceder a cualquiera de las páginas: "No input file specified".

Esta situación suele producirse en algunos servicios de hosting, para lo que es importante leer la documentación, evitando perder tiempo en búsquedas de posibles soluciones.


En el caso del servicio de hosting Aruba, la solución al problema consistirá en seguir los siguientes pasos.
1.- Desde el panel de administración web deberemos seleccionar: "Hosting Linux > Hosting Services"

2.- Tras mostrar las distintas opciones, seleccionaremos la entrada: "Personalización del archivo PHP.INI".
 

3.- Entre las opciones disponibles seleccionaremos la opción: "cig.fix_pathinfo"


De esta manera, tras seleccionar la opción citada anteriormente, todas las entradas del portal funcionarán correctamente.

30 de octubre de 2015

:: Liferay. Problema con Javascript minifier

Aunque el funcionamiento del código era correcto, al acceder por primera vez a ese contenido (en este caso en un portal desarrollado sobre el CMS Liferay), en el log aparecía un mensaje de error similar a este:

ERROR [ajp-8009-1][MinifierUtil:101] 71: 73: missing name after . operator
ERROR [ajp-8009-1][MinifierUtil:101] 1: 0: Compilation produced 1 syntax errors.
ERROR [ajp-8009-1][MinifierUtil:79] JavaScript Minifier failed for

Al tratarse de un error de sintaxis, la primera tarea fue comprobar que efectivamente no existiera algún error sintáctico en el código. Tras perder un poco de tiempo, aparentemente, todo era correcto aunque en el log el mensaje seguía apareciendo.

En una de las lineas del código aparecía lo siguiente (cuya sintaxis es correcta):
video.thumbnail=response.items[i].snippet.thumbnails.default.url;

Tras buscar alguna solución, encontré algo relacionado con el "dot notation" y "bracket notation".
video.thumbnail=response.items[i].snippet.thumbnails['default'].url;

La solución para evitar ese mensaje de error en el log, era sustituir la palabra reservada "default" por la codificación utilizando "bracket notation".


1 de enero de 2015

:: Upload de ficheros. Error: Objeto Request error 'ASP 0104 : 80004005'

En el desarrollo con ASP al intentar subir un fichero al servidor obtenemos el siguiente mensaje de error:
Objeto Request error 'ASP 0104 : 80004005'

En la mayoría de las ocasiones indica que se ha producido un fallo al intentar subir el fichero al servidor web debido a que el tamaño máximo configurado para la subida de ficheros es menor que el tamaño del mismo.

Para modificar este valor, debemos ir a la carpeta del IIS (Internet Infomation Services) ubicada en la siguiente ruta y buscar el fichero:
c:\windows\system32\inetsrv\metabase.xml

Dentro del fichero buscaremos la entrada: "AspMaxRequestEntityAllowed="204800"

Por defecto, en w2003 Server, el tamaño máximo son 200KB por lo que modificaremos este valor según nuestras necesidades.

9 de abril de 2014

:: Liferay. Evitar la pregunta de seguridad en el primer inicio de sesión del usuario

Para evitar la pregunta que se le solicita al usuario en el primer inicio de sesión de Liferay, debemos definir las siguientes lineas en el fichero: "portal-ext.properties"
users.reminder.queries.enabled=false users.reminder.queries.custom.question.enabled=false

24 de febrero de 2013

:: PHP: The Right Way

Se trata de una guía para escribir mejores códigos PHP. No se trata de un estándar sobre cómo escribir código PHP, pero sí de una serie de prácticas y alternativas aceptadas que pueden sernos de utilidad.
Encontraremos información sobre:
- Conceptos básicos
- Namespaces
- Librerías estándard
- Gestión de las dependencias
- Patrones
- Excepciones
- Seguridad
- etcétera

Simplemente es una guía para desarrolladores PHP.

Más información: www.phptherightway.com

:: Javascript garden. Información sobre este lenguaje

Javascript garden es una guía de documentación sobre algunos aspectos del lenguaje Javascript: objetos, errores comunes, funciones, arrays, tipos,...

Un recurso para usuarios no expertos de este lenguaje.

Para conocer los conceptos básicos de Javascript podemos consultar la siguiente guía.

Más información: http://bonsaiden.github.com/JavaScript-Garden/es/

:: Liferay DXP 2026. Habilitar RSS

En la versión Liferay DXP 2026 para habilitar las fuentes de datos RSS debemos seguir los pasos siguientes: 1.- Accederemos a la Configuraci...