Detectar UTF-8, ASCII e ISO 8859-1 en PHP

La importancia de los juegos de caracteres y los collation es algo básico para tratar con cadenas de textos y más aún si hablamos un lenguaje que no “entra” dentro del ASCII como es nuestro caso. En Linux Hispano ya hablamos en su momento de este tema:

Hoy volvemos a hablar, pero en un contexto más práctico. Cuando trabajamos con PHP, tenemos instrucciones que nos permiten codificar o decodificar texto en diferentes formatos, por ejemplo: utf8_decode o utf8_encode. Sin embargo, no existe un método que nos confirme de manera directa si el texto está en cierta codificación o no.

En PHP y Otras Yerbas, nos muestran una serie de funciones de gran interés para conseguir justo esto, detectar la codificación que usa un texto:

<?php define("UTF_8", 1); define("ASCII", 2); define("ISO_8859_1", 3); function codificacion($texto) { $c = 0; $ascii = true; for ($i = 0;$i<strlen($texto);$i++) { $byte = ord($texto[$i]); if ($c>0) { if (($byte>>6) != 0x2) { return ISO_8859_1; } else { $c--; } } elseif ($byte&0x80) { $ascii = false; if (($byte>>5) == 0x6) { $c = 1; } elseif (($byte>>4) == 0xE) { $c = 2; } elseif (($byte>>3) == 0x1E) { $c = 3; } else { return ISO_8859_1; } } } return ($ascii) ? ASCII : UTF_8; } ?> read more

Leer más » 2 Comentarios

Programar en XQuery

XQuery

A través de esta entrada podemos ver de forma breve como escribir nuestro primer programa con XQuery y cómo ejecutarlo en nuestra máquina Linux. A raíz de aquí podremos entender los fundamentos de XQuery.

Escribir un programa “Hola Linux Hispano” en XQuery.

Creamos el programa HolaMundo usando el editor nano (mi preferido, no, no es vi), como se muestra a continuación:

ahornero@Eee:~$ nano holamundo

( : HolaMundo con XQuery : )
let $i := “Hola Linux Hispano!”
return $i

Y una versión aun más simple de HolaMundo de la siguiente manera: read more

Leer más » 7 Comentarios

¿Y tú cómo pones las llaves cuando programas?

Cuando aprendes a programar en lenguajes con una sintaxis similar a C, uno de los aspectos más insignificantes desde el punto de vista práctico pero más relevantes desde el estético, es la situación de las llaves en los bloques de control, para los ejemplos usaremos la sentencia if. En esta entrada vamos a mostraros los estilos más populares. read more

Leer más » 170 Comentarios

Curso C# con Mono – Interfaces

Si la última vez que hablamos de C#, estuvimos comentando la herencia, hoy hablaremos de las interfaces.

Interfaces en lenguajes de programación orientados a objetos

Todos conoceréis las interfaces gráficas de usuario. Son el mecanismo software que nos permite interactuar de manera más o menos intuitiva con unas funcionalidades que nos provee el programa. Es decir, es un mecanismo de comunicar distintos niveles, ocultando los detalles de la implementación.

Eso mismo son las interfaces en lenguajes de programación orientados a objetos como son C# o Java. Se trata de un conjunto de métodos, delegados o eventos, que no tienen implementación. El desarrollo de la funcionalidad de los mismos, se hace en la clase que implementa la interfaz. Es un concepto similar a los prototipos de funciones en lenguajes como C.

Declaración

Siguiendo con el ejemplo de los motores, comentado en la entrega anterior dedicada a la herencia, vamos a crear un interfaz IMotor, a la que luego haremos referencia desde la implementación de la clase. He incluido un método más para que se vean más claras las posibilidades.

interface IMotor { // declaración de propiedades int Potencia { get; set; } decimal Par { get; set; } // declaración de métodos void printInfo(); // declaración de eventos } public class Motor : IMotor { int potencia; decimal par; public int Potencia { get { return this.potencia; } set { potencia = value; } } public decimal Par { get { return this.par; } set { par = value; } } public void printInfo() { Console.WriteLine("La potencia es " + Potencia.ToString() + " y el par: " + Par.ToString()); } } read more

Leer más » 8 Comentarios

Curso C# con Mono – Herencia

Siguiendo con características propias de los lenguajes de alto nivel con orientación a objetos, llegamos a la herencia.

¿Qué es la herencia?

En programación orientada a objetos, la herencia es el mecanismo básico para crear nuevas clases (hijas o derivadas), basándonos en clases anteriores (a la que llamaremos padre, base o superclase). La relación es similar a la que se produce en muchas situaciones de la vida cotidiana, por ejemplo en el campo de la biología en las relaciones padre-hijo.

Gracias a este mecanismo, podemos basarnos en clases anteriores, para crear nuevas clases sobre trabajo ya hecho, de forma que extendemos la funcionalidad de la clase padre hacia un campo nuevo, sin tener que volver a reescribir todo el contenido de la misma.

Ejemplos

Hay multitud de casos de este tipo. Por ejemplo, la clase padre excepción, provee unos métodos y atributos generales para todas las excepciones posibles. De ella derivan excepciones concretas, por ejemplo de división entre cero, que además de los métodos y atributos ya existentes, añaden funcionalidad extra, pero reutilizando toda la funcionalidad de la clase padre.

Otro ejemplo clásico es el de los controles de una interfaz gráfica. La clase control es la padre de todo un abanico de clases hijo. La clase control tiene por ejemplo la situación (todos los controles tienen situación) pero cada clase hijo aporta nuevas funcionalidades (por ejemplo, sus propios eventos).

Implementación

Veremos la implementación en C# con un ejemplo concreto. Ya que están tan de moda los vehículos eléctricos, vamos a implementar una serie de clases, con herencia, que reflejen la siguiente realidad:

  • Clase padre: motor, tendrá las características propias de toda clase de motores, gestionaremos potencia (entero en kW) y par (decimal en Nm)
  • Clase hijo: eléctrico, contendrá información exclusiva de los motores eléctricos, intensidad (entero en amperios), potencial (entero en voltios)
  • Clase hijo: de combustión interna, gestionará información de este tipo de motores. Cilindrada (entero en cc.), número de cilindros (entero) y emisiones de CO2 (decimal en gr/km)

public class Motor{ int potencia; decimal par; public int Potencia { get { return this.potencia; } set { potencia = value; } } public decimal Par { get { return this.par; } set { par = value; } } } public class Electrico : Motor{ int intensidad; int potencial; public int Intensidad { get { return this.intensidad; } set { intensidad = value; } } public int Potencial { get { return this.potencial; } set { potencial = value; } } } public class CombustionInterna : Motor{ int cilindrada; int cilindros; public int Cilindrada { get { return this.cilindrada; } set { cilindrada = value; } } public int Cilindros { get { return this.cilindros; } set { cilindros = value; } } } read more

Leer más » 8 Comentarios

Curso Java – 1. Introducción

Curso Java

A raíz del espléndido curso de C# con Mono iniciado por Carazo, un servidor se ha atrevido a realizar lo mismo pero con el lenguaje de programación Java. Se pretenderá que sea lo más didáctico posible. Cualquier crítica, duda, sugerencia o propuesta de mejora sobre este curso será bienvenida.

¿Qué es Java?

Java es una tecnología que engloba principalmente las siguientes subtecnologías:

  • El lenguaje de programación Java: es un lenguaje orientado a objetos, con tipos de datos estáticos y cuyos programas se compilan produciendo una aplicación con código bytecode.
  • Java Runtime Environment (JRE): está compuesto por la Java Virtual Machine (JVM) más otros componentes necesarios y su finalidad consiste en ejecutar los programas codificados en bytecode.
  • Java API: es el conjunto de todas las Application Programming Interface (API), o interfaces, que permiten al programador crear aplicaciones Java. Para programas más generales se utiliza la Java SE y para programas más complejos o con finalidad empresarial se usa la Java EE.

La expresión Java es un término muy ambiguo. Generalmente cuando se habla de Java se está refiriendo al lenguaje de programación, y así lo haremos durante el resto del curso. read more

Leer más » 18 Comentarios

Frameworks para PHP y CSS

El otro día hablando con una amigo sobre programación y desarrollos en la Web me di cuenta de que existían muchos más frameworks (entornos de trabajo) para el lenguaje de programación PHP y la hoja de estilos CSS de los que pensabábamos. Así que esta mañana me he puesto a buscar algunos de los más populares (y otros no tanto) y aquí os presento la enumeración:

Frameworks para PHP:

Frameworks para CSS:

Y bien, estos han sido todos los que he encontrado. Supongo que alguno me me habré dejado atrás, así que se aceptan comentarios para completar la lista, sugerencias y opiniones sobre la propuesta. read more

Leer más » 3 Comentarios

Oculta la información de errores y “warnings” en PHP

En ocasiones por comodidad, y sobre todo para ahorrarnos dar más información de la cuenta de cara a la seguridad y a que aparezcan mensajes de errores en la pantalla del cliente, es preferible ocultar la información de depuración que nos devuelve el intérprete PHP mediante las típicas líneas de error y warning.

La forma más cómoda para hacerlo instrucción a instrucción es el uso del prefijo @ delante de la misma. El error o warning seguirá existiendo pero no se generará una salida HTML describiéndola. read more

Leer más » 3 Comentarios

Quickly, un entorno TODO EN UNO.

Quickly es un framework que nos ayuda a crear programas de software (y otras cosas) de forma rápida. Dispone de soporte para un gran conjunto de plantillas y la opción de utilizar algunos comandos simples para crear, editar el código y la interfaz.

¿Qué hace Quickly para ayudarnos? Pues básicamente ese tipo de tareas pesadas como son gestionar los archivos, llevar el control de versiones, compilar, empaquetar e incluso publicar nuestro producto final para que sea accesible al resto de la comunidad open source. Me parece una buena idea de concepto, algo que debería de tener en cuenta todos los IDEs actuales, ya que existe mucha gente que quiere aprender a programar pero se sorprende y descontrola por los tantísimos detalles a controlar. read more

Leer más » 2 Comentarios

Reorganiza tu código en regiones con C# y MonoDevelop

La posibilidad de poder dividir el código por regiones cuando empieza a adquirir cientos o miles de líneas es algo que los comentarios de toda la vida no llegan a conseguir con especial claridad. Las soluciones varían entre lenguajes pero en C# y utilizando el IDE MonoDevelop una de las mejores opciones es dividir el código en regiones de forma que el propio IDE nos lo muestre contraído o expandido en función a lo que nos interese.

Las palabras clave son: #region y #endregion para indicar el comienzo y el fin de la región, respectivamente. Podéis ver el resultado en las siguientes imágenes, como podéis apreciar MonoDevelop te genera un extracto del contenido de la región: read more

Leer más » 8 Comentarios